Jump to content
Search In
  • More options...
Find results that contain...
Find results in...


  • Content Count

  • Joined

  • Last visited

  • Days Won


Everything posted by Spirited

  1. Spirited

    Packet [1052] Game

    Lol, that would do it. Btw, packet references are available here: https://gitlab.com/spirited/conquer/wikis/Packets/Packets. If you find something not documented, it's open source, so feel free to contribute.
  2. Spirited

    RC5 Package - Go

    Looks good. Btw, I recommend taking a look at Visual Studio Code and the Go extension for it. It'll automatically help you lint your code using downloaded tools (like golint). I use it on my project, and it reminds me to add comment blocks to functions and reduce package naming redundancies. It's been a really useful tool to have while learning Go. Anyways, thanks for the contribution - looks very nice.
  3. Spirited

    Go RC5 Cipher Problems

    You are correct. I don't think I reference that function, but feel free to log a bug against it and I'll fix it once I return home (I'll be out for another few days). Thanks!
  4. Spirited

    Hello world

    Welcome to the community, very cool. Another Go programmer! Whoo-hoo! Please don't look at my older Go code, it's really embarrassing. 😅 Hope you stick around with us. Would be cool to see more from you. I see a lot of really bright engineers come from the military, so I'm sure you'll do well. Word of advice though, Data Analytics is a very narrow field of study. If you take the general approach or take more classes that specialize in algorithms, machine learning, and data extraction, then you'll be right on track. Good luck with your studies.
  5. Spirited

    Go RC5 Cipher Problems

    It looks like this line of your seed generator may be wrong. c.mKey[z] = uint32(seed[z]) Should probably be: c.mKey[z] = uint32(seed[z * 4]) Here's another reference from one of my C# projects, if it helps: https://gitlab.com/spirited/comet/blob/master/src/Comet.Network/Security/RC5.cs https://gitlab.com/spirited/comet/blob/master/src/Comet.Core/Mathematics/Rotations.cs
  6. Spirited

    Client : Editing resolution

    This is a very nice tutorial. Thanks for putting in the time to make this.
  7. Spirited

    Go RC5 Cipher Problems

    What patch are you programming for?
  8. Spirited

    Go RC5 Cipher Problems

    Hi W1cked, Here's a good reference in C#: https://gitlab.com/spirited/conquer/snippets/1840791 If I can make a recommendation, you could implement it using the crypto/cipher interface (like this implementation I found does). Spirited
  9. Introduction Without a doubt, Conquer Online's emojis / emoticons are outdated. Luckily, adding new emojis to the client is relatively easy. New emojis must be 32x32 pixels. This tutorial also requires editing DDS assets in the client. You can find a tutorial on how to edit those assets here. Tutorial Open data/EmotionIco in the client's directory Add or edit existing dds files for different frames of the animated emoji (doesn't have to be animated) Add or edit existing JPG files for the same frames in data/EmotionIco/JPG Edit ani/EmotionIco.ani with the new frames (see example below) Restart the client and enjoy your new emojis Example [ICON68_bmp] FrameAmount=4 Frame0=data/EmotionIco/jpg/68/1.jpg Frame1=data/EmotionIco/jpg/68/2.jpg Frame2=data/EmotionIco/jpg/68/3.jpg Frame3=data/EmotionIco/jpg/68/4.jpg [ICON68] FrameAmount=4 Frame0=data/EmotionIco/68/1.dds Frame1=data/EmotionIco/68/2.dds Frame2=data/EmotionIco/68/3.dds Frame3=data/EmotionIco/68/2.dds Pictures
  10. Spirited

    Client: Editing Assets

    Introduction Conquer Online is an isometric game made up of 2D assets and 3D object files. These 2D assets are stored in DDS format, used for map tile backgrounds, scenery objects, texture maps for 3D objects, etc. Most DDS files in the client are compressed in WDF files which can be extracted using a tool from the wiki. This tutorial shows how assets can be edited in Paint.NET, a free paint program which supports DDS format. Other editors can be used, such as Photoshop with the following NVIDIA DDS plugin. Gimp also includes a DDS plugin. You can also view DDS files from Windows Explorer using this thumbnail shell extension (still works on Windows 8/10, but only enable DDS viewing to avoid problems with live tiles in the start menu). Tutorial In this tutorial, I'll be editing a tree in Twin City. Start by extracting data.wdf in the root folder of the client Find the tree asset in data/map/mapobj/newplain/plain/ Open np09.dds in Paint.NET and make some modifications When saving the file, select "DXT3" with "Range Fit" compression Restart the client and confirm your edit Pictures Saving: Before: After:
  11. Spirited

    Client: Login Advertisements

    Introduction This feature was added with the release of the first Conquer Online 2.0 client (patch 4282) to advertise other games (such as Zero Online). It was removed with the New Dynasty expansion client (patch 5032). This feature can be configured to hit your own hosted advertisements for tips and event notifications. Advertisements can be set separately for different servers, and have different colors, fonts, positions on screen, etc. Tutorial Open ini/common.ini in the client's directory Find the ServerAdv section and define URLs for the two supported resolutions Use the format below for your hosted text file of advertisements Examples See attached files for examples. ServerAdv.txt ServerAdv1024.txt
  12. Introduction The Conquer Online client has bubble indications for the server's status. It shows next to an available server icon as a purple, green, yellow, or red bubble. By default, if the client can't contact the server, this bubble will show up as purple. You can set the client to check your own status page when displaying this indication. Tutorial Open ini/common.ini in the client's directory Find the "ServerStatus" section and edit the URL key to your own website's status page. Format your status page as a line-separated list of server names to status IDs using the table below. Status IDs 0 = Server Down 1 = Server Overloaded 2 = Server Busy 3 = Server Online Example Status Page The following is an example of two servers being listed by the plain text status page: Meteor 3 Thunder 2 Picture
  13. Spirited

    Hello, beautiful people

    Well, I'm working on bringing some of that lost community here for Conquer Online. I'd love to see new content, new members, etc. I'm on vacation right now, but I hear you loud and clear. I'll see to opening the new section soon, and I'll be sure to focus on learning and growth. Again, welcome to the community. I hope you can grow with us here.
  14. Spirited

    Guide: Development Wiki

    Introduction The Conquer Online private server development wiki is hosted on GitLab, a free and open git repository hosting website. All articles are written in Markdown. To make an edit to an article or write a new page, simply clone the Git repository, make your edit, and create a pull request to merge your changes to the wiki. I try to check for pull requests at least once per day. If you're a regular contributor, I will promote you so you can approve requests on your own. Alternatively, I can add content on your behalf if it's a small change. Enjoy, and please contribute. Link Wiki Home
  15. Spirited

    Guide: Client Downloads

    Introduction This guide helps you set up and configure the Conquer Online game client to connect to a private server. To get started, download a specific patch for the game below. If you're downloading a open source server project, match sure to match up the patch numbers correctly. If the patch doesn't exist in the list below, download a lower patched client and patch upwards using the provided patch archive. After you finish downloading the client, decompress it using 7-Zip. Configure Download the ConquerLoader launcher by Nullable and extract its contents to the client's directory. Make sure ConquerLoader.exe is in the same directory as Conquer.exe. It's common that anti-virus programs will incorrectly flag the launcher as a virus, so you may need to whitelist the executable. This is because the launcher uses code injection to redirect traffic to your private server. To configure its location, open LoaderSet.ini in Notepad and edit the IPAddress field. Some clients crash when using an internal or loopback IP address, so you may need to use your public IP address and set up port forwarding. Older clients may not encrypt Server.dat, a file in the same directory as Conquer.exe. If the file can be opened in Notepad, then you may edit the file rather than using ConquerLoader.exe. Here's an example edit for Server.dat on patch 4294 (below). Loopback IP addresses may not work depending on the patch. To bypass the "Run play.exe" error when running Conquer.exe directly, start the executable using "blacknull" as a command-line argument. You can provide command-line arguments using shortcuts or cmd. [Header] GroupAmount=1 Group1=GroupPic5 [Group1] ServerAmount=1 Server1=Meteor Ip1= ServerName1=Meteor HintWord1= Pic1=servericon33 Warning Some clients around patch 5002-5017 state that they contain a virus. They do not, this is a false positive. Do not start clients using start.exe on patches around 5022-5095. An antivirus program was added to the client that crashes Windows Vista and higher. Always run the clients using Conquer.exe or the provided launcher to avoid these issues. Downloads 4217 4267 4274 4294 4330 4343 4351 5002 5017 5065 5095 5127 5165 5187 5290 5355 5517 5615 6090 Archives: Mirror Installations: Mirror Patches: Official, Mirror (Recommended) Common Error Messages "Server maintenance. Please try again later!" Could not connect to the account server. If local, check that the internal IP address is correct. If remote, check your firewall and port forwarding settings. Restart the client if you change server.dat or the loader's IP address. You can check port forwarding at this website. "Connecting to the account server" If the client hangs here, then the MsgAccount packet isn't being handled correctly and the client is still waiting on a response. "Failed to connect to the game server. Please try again later." Check that your game server's port is being forwarded correctly using this website. If another player is getting this error and you aren't on your local box, then check that the IP address you send using MsgConnectEx is an external IP address and (again) that your port is being forwarded correctly.
  16. Spirited

    Readme: Advertisement Rules

    Hello there! Got a Conquer Online private server you'd like to share? Before you do, please keep the following rules in mind when advertising your server: Ownership: Please only post a server advertisement if you own the server or represent the server's owner Security: Websites with glaring security issues that put members at risk will be removed Scams: Servers are only permitted to advertise once, no sneaky name changes or recycled servers Link-back: Help us grow so we can help you grow; post a link to Cooldown in text or using our logo (dark, light, banner) Lastly, remember to be open-minded and honest when accepting feedback. If you have any questions, feel free to contact me or another staff member at any time. We're here to help. Good luck and have fun! Best Regards, Spirited & Staff
  17. Pretext Hi everyone. I decided a few months back, after the chaos of moving jobs and finishing schooling, that I'd get back into my hobby projects. You've probably seen some of that on discord, like my TV case project (which I'll post here soon, too) or my Conquer Online portal editor in Go, but the biggest project I have is still largely up in the air. Chimera is my Conquer Online private server idea, and it's gone through a few iterations of designs. Before I ask for feedback, here's a quick introduction to the project (ripped from its readme file). Introduction Project Chimera is a four-role open distributed server architecture, named after the mythical four-headed beast. The game service is composed of an authentication server, gateway server, realm server, and fog of region servers. As players connect using the Conquer Online game client, their login will first be validated against the authentication server. Then, their client will be redirected to the world's gateway server, which decrypts and routes packets to and from the realm server and active region server. The region server services the player using a vertical slice of the game world, and the realm server instructs the region server on which slice it hosts. The separation of roles into individual, independent servers allows Chimera to experiment with rolling upgrades and server maintenance without interrupting players. Its distributed architecture allows for the game service to accept a large amount of players concurrently, while also delivering feature rich maps and monster AI. Diagram Here's a quick diagram I came up with for my own use in Visio. Discussion So, I found out recently that the way I was doing error handling in Go was wrong. I adjusted that and returned back to my original source in Go. I laid out all the project structure, figured out how packages will relate to one another, the interfaces I'll use for mapping everything together across all projects, etc. I felt like Go was a good starting choice. It introduces a lot of risk, but this isn't exactly a business project... so I thought I'd give it a try. In my experience, Go has a much better time handling request volume than C# does (comparing the async-await model in C# to goroutines in Go). Go also has a lot of language support for security, including a really solid big number implementation, and great networking support. C# is my fall back, but I'm going to try with Go first. My main concern is the architecture. I've been trying to poke holes in it, and so far felt pretty confident in it. I'm not taking the project too seriously, but I do plan on running these servers on Raspberry Pis and Pi Zeroes to better exacerbate performance issues during development (and just for fun to toy with different docker deployment models). But in general, what are people's thoughts here? At the end of the day, if something does go wrong, I can at least share that experience here - but I'd hope it'd go well. Thanks for reading.
  18. Spirited

    Chimera: Conquer Online Private Server Project

    Well, in the case of a real MMORPG struggling to keep up with growth, all current MMORPG servers can't scale a single map beyond a certain point. There's a technical and game quality reason to introducing server player caps. There are reasons why MMORPGs split their playerbase across realms or continents. At some point, you just can't keep accepting players, whether that's a server resource issue or client performance issue. If we want to talk experimental, you could make Kubernetes nodes completely stateless, and instead store state across all servers in Google Memorystore or Cloud SQL (which returns queries in microseconds to single digit milliseconds). If you need more nodes processing packets from players, you simply spin up more nodes. It would be expensive, but it would work... in theory. It just wouldn't scale well with smaller to medium/large loads. For most cases, the model I chose for Chimera would be a "best fit". I mean, all players running around on the same map at planet scale would freeze any computer on earth, anyways.
  19. Spirited

    Chimera: Conquer Online Private Server Project

    Good questions - Honestly with a system like this, something is always going to be a bottleneck. For Chimera, the minimum I'll process on a single node is one full map. I have no intentions of chunking maps beyond that point. The design complexity, communication overhead, and additional latency wouldn't make chunking across sections of a single map worth it. The way I design my nodes is such that every region service is essentially it's own lightweight game server, and those services all run in memory without database access. The server would easily be able to handle lots of players on a single map; I'd probably hit a self-made player limit just to prevent client bricking before hitting a performance issue. In terms of world scale, if I need more nodes to process maps, then I can add more nodes or increase resources (whichever is more cost effective in that scenario). I can also automate scaling to optimize costs or distribute work on heavy load, but let's be real, this is Conquer Online. I don't think it'd ever go over the minimum.
  20. Spirited

    Chimera: Conquer Online Private Server Project

    So, getting closer to figuring out all the details. I decided to look into Kubernetes for scaling and orchestration of services. In terms of language, I'm settling on Golang and I wrote a small article about why for those interested. Looking forward to having more to show, but this is it for now. Cheers. Read more: https://spirited.io/2019/04/21/an-evaluation-of-golang-for-game-server-development/
  21. Introduction Comet is a Conquer Online server project containing an account server and game server. The account server authenticates players, while the game server services players in the game world. This simple two-server architecture acts as a good introduction into server programming and networking. The server is interoperable with the Conquer Online game client, patch 5017 (not provided by this project). Discussion This project was initially created for an interview as a 3-week programming project. Now, it's a base source that I'm opening up to the community. Feel free to add to it and submit push requests. I'm mostly active on my GitLab account, but feel free to hit me up on Discord or Cooldown if I don't get to things soon enough. Links Source Control: https://gitlab.com/spirited/comet Readme: https://gitlab.com/spirited/comet/blob/master/Readme.md Issue Tracker: https://gitlab.com/spirited/comet/issues Storyboard: https://trello.com/b/tb8ChBlF/comet
  22. Spirited

    Comet - Open Source Conquer Online Server

    That should say "open the top directory in Visual Studio Code". I'll modify that part of the readme. I kind of expected that people know how to use dotnet. Normally, open source projects don't really teach you how to use a language, they teach you how to configure the project. I'll try and incorporate as much of your feedback as I can into the readme, but just keep that in mind.
  23. Spirited

    Tasks in Golang

    Introduction Tasks is a library for implementing an async-await design pattern in Golang for recoverable, safe goroutine execution. Allows goroutines to be waited upon, canceled, etc. using channels and wait groups. Statuses are returned for fault tolerance checks. If the child goroutine panics, the task recovers and doesn't stop the main execution of the program. Examples Below is a simple example of implementing tasks for a single task and multiple tasks. More examples can be found in tasks_test.go, where 100% of the code is covered by tests. import "spirited.io/tasks" // This is an example of a single task task := tasks.Start(nil, MyFunction) task.Wait() import ( "spirited.io/tasks" "sync" ) // This is an example of a single task var wg sync.WaitGroup tasks.Start(&wg, MyFirstFunction) tasks.Start(&wg, MySecondFunction) wg.Wait() Link https://gitlab.com/spirited/tasks
  24. Spirited

    Tasks in Golang

    Yeah, I mean, I suppose it's a bit inspired by C# Tasks, but the name of the package is "tasks" because it's shorter than "saferoutines" or "routines". All this package does is create a panic-safe wrapper around goroutines and integrate a method of waiting. I want to also add a method for cancelling tasks using the context package, but I haven't gotten around to doing that.
  25. Spirited

    Chimera: Conquer Online Private Server Project

    This isn't exactly something I've completely flushed out yet, but it could be the resources in use such as CPU and RAM, could be the amount of players connected to a server. Whatever the bottleneck is and however that can be best anticipated.

Important Information

By using this site, you agree to our Terms of Use.