Jump to content

Tkblackbelt

Donor
  • Posts

    11
  • Joined

  • Last visited

Everything posted by Tkblackbelt

  1. Very rude... Just dumping code here and saying to fix the error without even adding the error message /facepalm. ------ On another note, very cool project OP! Love these kinds of projects
  2. This is amazing! Oh man am I getting a nastalgia rush lol
  3. This is an open source project... The code is literally in the first post lol.
  4. From my experience, the hard part (or badly written part) for the handover is: - not having to share the account database with the game database - not having the account server knows all game servers (and needing to be refreshed when one game server changes) - not leaking the database IDs (or having a too deterministic login) - not having a weak token that can be spoofed - having the proper flow for full/busy states per game servers ----- On my current in-progress source, I'm using a pub-sub pattern (with MQTT) to do the Auth <-> Game Server communications. The Auth Server is a MQTT hub, and Game Servers connect to it so it lazily discover them (no need to have configs about Game Servers). Then, the Game Servers create a topic that the Auth Server is subscribed to with a wildcard (using a local MQTT client), and it periodically broadcasts its status (name, IP endpoint, number of players online, max number of players, degraded state). This gives info about whether it is full, and what to return to the players that try to connect. Tokens are randomly generated, and sent to the right Game Server by publishing on a per-Game Server topic. The token is accompanied with the account ID and the expiration, so that info does not leak to the clients. And then, it is only a matter of having a memory cache to track all recently received tokens. It must be noted that there can be race conditions, and the player may connect to the Game Server too early. So I have a MsgConnectDelayed (custom message) that I enqueue if that happens with the original MsgConnect data, plus a timeout. And will try to re-process it until it expires (at which point, I assume that I'll never receive the token from the Auth Server). Nice, that's a good way to do it! Guess using a messaging queue you can make it easy to apply back pressure. The occasional broadcasting of the stats is a nice idea. Can then reject connections on the auth server if the game server is busy, without needing to fetch that info on every client connection. I'm working on the same part of my server at the moment lol. I'm using Netflix Eureka as a service discovery layer. Then my auth and game server both register with it allowing them to know about each other. I'm just doing the auth-game "handover" using a rest call for now to keep it simple for now. I just have some throttling enabled + retry logic in place. So far I'm really enjoying using Spring Boot + Kotlin for the server. I'm designing it to be work reactively using stuff like channels, coroutines, etc... Once I finish up this handover part, I'm going to figure out how to design the game server. Very excited for that part :)
  5. Nice! Was that to avoid needing the rpc calls for the auth->game server handover? Curious what was making that difficult to work with? Im using comet as one of my reference for my source and was planning to just use a rest endpoint for that part. Also I hope your cat is ok! I have two dogs myself haha.
  6. If its not too tricky, maybe post a quick screen recording showing you running the script. Probably will help in figuring out the issue. Another thing I recommend is ChatGpt. You can past error messages in and it can help you understand them, and suggest solutions.
  7. I do the same lol that's why I have some branches of sources with weirdo code that I experiment (example a version of Canyon with modules that I'm experimenting now) Nice! Had a look at your project and it looks sweet. Especially like the stress test bot. Keep up the great work.
  8. Hey CptSky! I remember you on epvp haha. Yeah it has to be that. I tried a really old source I wrote that I know works with 4267 and it couldn’t decrypt the packets. Also tried CoFuture as a double check. But I ended up going with Spirited’z suggestion of using 4294 and so far everything is working great. I’m working on the core stuff at the moment + auth server. For those interested, Im using Kotlin and Spring Boot, which is probably a first for private servers lol. Reason is that I use that at my new job, and I always find private servers the best (and most fun) way to ramp up on almost every aspect of a language/framework. Planning to heavily leverage coroutines and async when I get to the game server. Will see how it goes :)
  9. I personally really like 4294. It's a super clean client. Nice, just saw your summary in the other thread about the different path levels. Gonna go with that patch, thanks for the recommendation!
  10. Yeah it was the client. I downloaded client 4274 and I can decrypt just fine. Guess I will work with that client and will just need to adapt to any change between those two patch levels. Or does anyone recommend another patch level. I prefer to build for the lower level patches (1.0, early 2.0). Most of my experience is with 4267, and I'm building this mostly to learn a new tech stack for work lol. So I want to focus more on the tech side and have good reference sources for packets, functionality, etc...
  11. Hi Folks! I'm working on a private server for the 4267 client. I downloaded the client below, and am working on handling the 1051 (Auth Request Packet). When I go and decrypt the packet I can't seem to decrypt it correctly since I never get the packet type, length, etc. I've worked on a 4267 server before in Java and used my exact same cryptography class which worked fine on that project. To rule any issues with my class, I downloaded Korvacs CoFuture 4267 C# server and am unable to decrypt the Auth Request Packet there as well. This makes me think something might have been changed in the 4267 clients in that download or it's not really that patch level. Another thing I suspect is my development environment is very weird. I'm using an Apple Silicon Mac and Windows in Parallels to run the client. Curious if anyone has any ideas on what I can try. Anyways, I'm liking this forum and will report back if I figure out the issue Thanks
×
×
  • Create New...