Jump to content

Leaderboard

Popular Content

Showing most liked content since 08/14/2024 in Posts

  1. Hey all, Welcome to the new board website! We're now using Invision Community as our new board software. A few things have changed, and there're a few things you can expect in the coming days: Passwords have been reset due to incompatibilities with the less hashes and the new salted hashes and verifiers (you'll have to recover your password). Personal pronouns have been reset and changed to be a dropdown (to prevent future abuse). Small theme adjustments are still being made, and improvements are still in the works. Posts have been reformatted for the new software, and minor format adjustments may be made when saving older posts. I'll be experimenting with the use of like buttons for some time. In terms of immediate improvements, I'd like to announce that: You can now submit client mods in our Downloads section for Conquer Online. The board now uses modern (Twitter style) smilies (and we can add custom ones if you have the files and submit feedback with them attached). A popular servers widget has been added to the home page, sorted by most commented (for now). I'll be working on new features soon. Thanks for reading and for your generosity (if you helped donate for the upgrade), and I hope you enjoy the new forum! Spirited & Staff
    5 likes
  2. Let me give you a little more hope. .. .. I actually built the client from scratch, and it wasn’t that complicated. I’m running it on DirectX 9 right now, but honestly it’d be even better to bump it up to DirectX 10 or higher. That way you’re not stuck with the old fixed-pipeline stuff, and you could build an even cleaner client .. the code you’ve got is from 2001, maybe older.
    4 likes
  3. So this is my latest project, feel free to give feedback and/or contribute to the project. Project DVN is a free open-source visual novel engine written in the D programming language. The purpose of Project DVN is to provide an easy-to-use and flexible engine. Github: https://github.com/ProjectDVN/dvn Example:
    4 likes
  4. Simple find pattern: uintptr_t findPattern(uintptr_t start, size_t length, const std::vector<int>& pattern) { auto patternLength = pattern.size(); auto data = reinterpret_cast<const uint8_t*>(start); for (size_t i = 0; i <= length - patternLength; ++i) { bool found = true; for (size_t j = 0; j < patternLength; ++j) { if (pattern[j] != -1 && pattern[j] != data[i + j]) { found = false; break; } } if (found) { return start + i; } } return 0; } Then get the base: auto d3d9Module = reinterpret_cast<uintptr_t>(GetModuleHandleA("d3d9.dll")); std::vector<int> pattern = { 0xC7, 0x06, -1, -1, -1, -1, 0x89, 0x86, -1, -1, -1, -1, 0x89, 0x86 }; auto d3dBase = findPattern(d3d9Module, 0x128000, pattern); auto d3dVMT = *reinterpret_cast<uintptr_t**>(d3dBase + 2); And you can use it normally: oDrawIndexedPrimitive = reinterpret_cast<tDrawIndexedPrimitive>(d3dVMT[82]); oEndScene = reinterpret_cast<tEndScene>(d3dVMT[42]); oReset = reinterpret_cast<tReset>(d3dVMT[16]); Check out d3d9 indexes here: https://pastebin.com/raw/QbPhkCKh Note: you'll need to grab d3d9 Device from EndScene You can use this to properly render imgui. - Check out how DrawIndexedPrimitive could be implemented: DIP-Hook
    3 likes
  5. Hey everyone, I may be sharing this project prematurely out of excitement lol. There is not much here yet, and what is here is nothing new or special really. Sharing for feedback and for anyone interested in following my journey down this little adventure. Preface (feel free to skip): About a month or so ago I got an itch to mess around with conquer online this old game I used to love. Just wanted to hop in and look around (not the retail version of course haha) one rabbit hole lead to another and now here I am. I have never worked on a game server before this project. My development velocity has been... slow to say the least but thats because im really trying to take my time and learn as much as I can in this process, and further more try to avoid the dreaded scrapping of the project because of an eventual roadblock caused by a design oversight. As much as I can with my limited knowledge on this topic. Credits: All credits go to whoever's code you recognize, if you see any. A lot of the ideas and implementation here was taken either directly or with a grain of salt from either Comet or Albetros. I claim nothing here, as nothing Ive done so far would be possible for me without the leg work the community has done. Some details on what the project does now this thread will be updated as the project gets updated, I will try my best to have daily commits for anyone interested in following. - Right now the server is implemented up to the point where we respond to the client to the create player packet https://github.com/berniemackie97/OpenConquer 8/23/2025 first update. dont remember the current state just pushed up what I had when I was last working on this a few weeks ago. Will be coming back to this soon, what I'm working on now should make working on the server easier
    3 likes
  6. Old code found on my disk, this could be used as a gate to make a bot targeting specific strings in game... but this is just a cute rainbow example!!1! You can also change font/text content in real-time too. ShowStringEx: HMODULE hGraphic = GetModuleHandleA("graphic.dll"); oShowStringEx = (tShowStringEx)GetProcAddress( hGraphic, "?ShowStringEx@CMyBitmap@@SA?AUC3_SIZE@@HHKPBD0H_NW4RENDER_TEXT_STYLE@@KUC3_POS@@@Z"); Example code: typedef struct { int width; int height; } C3_SIZE; typedef struct { int x; int y; } C3_POS; enum RENDER_TEXT_STYLE { STYLE_DEFAULT = 0, STYLE_BOLD = 1, }; typedef C3_SIZE(__cdecl* tShowStringEx)(int, int, unsigned long, const char*, const char*, int, bool, RENDER_TEXT_STYLE, unsigned long, C3_POS); ShowStringEx_t oShowStringEx = nullptr; float fRed = 0.0f, fGreen = 0.0f, fBlue = 0.0f; float fTime = 0.0f; DWORD lastTick = 0; void updateRainbowColors() { DWORD currentTick = GetTickCount(); float deltaTime = (currentTick - lastTick) / 1000.0f; lastTick = currentTick; fTime += deltaTime; fRed = (sin(fTime) + 1.0f) / 2.0f; fGreen = (sin(fTime + 2.0f) + 1.0f) / 2.0f; fBlue = (sin(fTime + 4.0f) + 1.0f) / 2.0f; } D3DCOLOR gRainbow() { return D3DCOLOR_RGBA(static_cast<int>(fRed * 255), static_cast<int>(fGreen * 255), static_cast<int>(fBlue * 255), 255); } C3_SIZE __cdecl hkShowStringEx(int a1, int a2, unsigned long a3, const char* str1, const char* str2, int a6, bool a7, RENDER_TEXT_STYLE style, unsigned long a9, C3_POS pos) { //example targeting fps/ping counter if (strstr(str1, ("FpsAver")) != nullptr)//or C3Ver:DX { updateRainbowColors(); return oShowStringEx(a1, a2, gRainbow(), str1, str2, a6, a7, style, a9, pos); } return oShowStringEx(a1, a2, a3, str1, str2, a6, a7, style, a9, pos); } Preview:
    3 likes
  7. I just wanted to share this because I'm an aero enthusiast and think this is amazing, but full disclosure I'm a contributor on this project. This is Aerochat! It's basically an open source WLM wrapper around Discord, also wraps Discord's native login via WebView2 making it account-safe. It tries to emulate WLM as closely as it can considering it's still Discord under the hood. It's pretty solid as it is right now, but new features are added daily as we hammer out what we can. There's a lot that's missing because it's still pretty early in development like no videos, mostly missing embeds, so on. But yeah! If you have any interest in reliving WLM then I highly recommend Aerochat even if I'm biased lol. And for those who want a more authentic experience, Escargot.chat uses the native WLM applications for their service but I don't know much about that project beyond that it exists.
    3 likes
  8. https://munsie.itch.io/artisan-swindler This tool was designed to help players better understand the total cost of upgrading items with mets and DBs using ArtisanWind in TC or MagicArtisan in Market. Should work for any server that's using the original retail TQ rates for repair costs and upgrade chance.
    3 likes
  9. I want make some update after that i will share
    2 likes
  10. If Spirited have no problem to share yes i can share
    2 likes
  11. Detailed patch notes for Conquer Online, from version 2.0 to 3.0, and excluding patches that only add new servers, new temporary events or fix bugs. When targeting a patch, take the highest before a feature you do not want. Also, note that † denotes protocol changes, but only patches between 5016 and 5078 are identified because that's the range I personally target in COPS X Emulator. Later patches (above 5100) are a bit less exhaustive, because at that point, TQ were releasing a lot of daily quests, a lot of boxes and other pay-to-win content. So it would be quite bloated... I'm also less interested in those. Patch 4283: Conquer Online 2.0 -- November 1, 2005 - New low-level items (below level 10) - New high-level items (above level 120) - Blessed equipments - Enchanted equipments - Tortoise gems - Dis City quest Patch 4294 -- January 16, 2006 - Millionaire Lee (to pack Met & DB scrolls) - Surgeon Miracle (to change body size) - Weapon Master can now upgrade level 110/112 armors/helmets for 1 DB - PIN required when deleting characters Patch 4312 -- May 24, 2006 - Second Rebirth quest - Lucky Time - Black Armors (Shopboy) - New TG map (extended) Patch 4331 -- December 6, 2006 - Gem composing (with Jeweler) [NOTE: Mining rates were decreased] - Newbie protected maps - XP skills acquired ahead of time (when reaching level 3) *Minor: New icons for lucky time & double exp-time. The ones we are used to.** Patch 4336 -- January 10, 2007 - CPs - Lottery - Exp balls - +s stones - Disguise Amulet / Penitence Amulet / Ninja Amulet - Black Tulip - Exemption Token - Garments - Gourds / Bottles Patch 4337 -- January 22, 2007 - One Good Turn Deserves Another quest (aka Unknown Man) - Shelby now rewards exp (instead of Mets/DBs -- Mets added back in 4339) Patch 4338 -- January 29, 2007 - Heaven Blessing [NOTE: But no Offline TG yet!] Patch 4353 -- August 1, 2007 - Potency (aka Battle Power) - Max level increased to 135 - Remote access to Shopping Mall Patch 4354 -- August 14, 2007 - Broadcast channel - Whisper chat window Patch 5002 -- November 26, 2007 - Proficiency God (level weapon profs with exp balls) - Blacksmith Lee (socketing with 12 DBs and Though Drills) - +10~+12 equipment composition - Monster Hunter quest - Demon Extermintators quest Patch 5006 -- December 17, 2007 - Offline TG - Repair broken equipments with 5 mets - Composing level 120 items with lower level ones (armors & helmets) *Minor: High definition & Standard definition modes in the client.* Patch 5016† -- March 5, 2008 - Nobility system - Team auto-invites - Path finding (client-side) Patch 5018† -- March 18, 2008 - GW reward is now 3000 CPs (from GuildOfficer) - Cipher changed to Blowfish with DH key-exchange Patch 5022† -- April 25, 2008 - Mentor & Apprentice system - Suspicious items - Locked items - Trade partners - Merchant accounts - PK rule changes: - Red names/black names go to jail, but don't loose locked items - Killer gets their pay out through Warden Zhang - PK points are limited to 1000 - Max level increased to 137 Patch 5028* -- June 18, 2008 - Flash login screen Patch 5030 -- June 30, 2008 - New Dynasty hair styles Patch 5031† -- July 7, 2008 - Date displayed (and synchronized with the server) Patch 5032 -- July 16, 2008 - Profession PK War (ProfPKChief & PKProfClerk) Patch 5035† -- July 23, 2008 - Level 120 shields - Plumes (archers) & Headbands (warriors) - Color is now splitted from the item types, allowing for higher level armors / helmets / shields. Patch 5059 -- September 2, 2008 - Potency renamed to Battle Power Patch 5066† -- September 19, 2008 - Arrows will be auto-loaded when one quiver is used up (client-side triggered) - New point-based composition - Detain system for red/black names items (even if locked) - Free items (but unused until patch 5072) Patch 5072† -- November 12, 2008 - Talismans system (Fans & Towers) - Flower Ranking system Patch 5078 -- December 3, 2008 - Honor Halos (for GW and PK Tournament winners) NOTE: Fixed GameData.dll, to properly load 64 bits status effects. Patch 5089 -- December 19, 2008 - Ninja - Beginner Packs Patch 5101 -- February 17, 2009 - Quiz Show Patch 5127 -- May 20, 2009 - Enlightenment system - Interaction system - World channel - Quest list - New interface (new location for action buttons) - New chat interface - Visual warning when HP is too low Patch 5130 -- June 1, 2009 - Removal of some Interactions Patch 5136 -- June 26, 2009 - Free items renamed to Bound items Patch 5155 -- July 16, 2009 - Mount system - Clan system - Frozen Grotto Patch 5160 -- August 5, 2009 - Removal of Guild Branches Patch 5171 -- September 23, 2009 - Demon Boxes (Demon Box Dealer) to get tremendous amounts CPs NOTE: First traces of support for .pux files in the Conquer executable. Patch 5173 -- October 14, 2009 - Password cipher changed on Account Servers (still using RC5, but with seed) NOTE: Spirited's guide says 5187. For sure something related to the Account Server changed here. Patch 5180 -- November 4, 2009 - Martial Arsenal system - Arena system Patch 5190 -- December 9, 2009 - Clan War Patch 5196 -- December 20, 2009 - Demon Boxes have been removed Patch 5200 -- December 23, 2009 - Texas Hold'em Poker - Alternative Equipment Patch 5205 -- January 11, 2010 - MagicArtisan can now downgrade equipments to level 15 for a DB Patch 5212 -- February 1, 2010 - Refinery system - Stabilization system - Horse Racing Tournament - Refinery items are now rewards for Dis City and PK Tournaments - Characters can now have a First Name and Last Name - Shopping Mall now have categories Patch 5250 -- April 27, 2010 - Sub-Class system - Artifact system - Weapon accessories - 3-6th floors of Frozen Grotto - Small Boss Hunting - Ninja now have a full super gear effect Patch 5258 -- May 17, 2010 - CP Shower event (players can get Bound CPs while hunting monsters) NOTE: Unsure if that is when Bound CPs were introduced. Patch 5265 -- May 31, 2010 - MagicArtisan can downgrade equipments to level 15 for 27 CPs - Socket rates when leveling equipments have been increased Patch 5276 -- June 30, 2010 - Bound CPs can no longer be used to by some items like: DBs, Celestial Stones, Gourds, Money Bags... Patch 5287 -- July 22, 2010 - Guild PK Tournament - Elite PK Tournament - Clan Qualifier - Reincarnation - Pure Skills Patch 5297 -- August 24, 2010 - Meteors and DB socketing rates have been increased. - Cost of downgrading equipments has been increased to 54 CPs. Patch 5300 -- September 2, 2010 - Max level increased to 138 Patch 5302 -- September 9, 2010 - Gender-specific titles for Nobility system Patch 5310 -- September 20, 2010 - Team PK Tournament - Memory Agate (magical stone allowing to record locations) - Level 3 & 4 Houses upgrades - Gender-specific transformations - Character renaming for 810 CPs (Character Name Editor in Market) - Garment Swap system (Garment Shop Keeper in Market) - Item stacking for restorative items - Shields are now giving HP - Maps are now compressed with 7z (assets from patch 5309) Patch 5351 -- December 16, 2010 - Monk class - Max level increased to 140 - New high-level equipments (above level 130) - New Block skill for warriors with shields - Attack range and damages increased for Dragon Whirl, Hercules, Fast Blade & Scent Sword Patch 5353 -- December 23, 2010 - Revive skills now require to press Ctrl for targets that aren't in your guild Patch 5358 -- January 20, 2011 - Millionaire Lee can now pack +1 stones and normal gems Patch 5376 -- March 17, 2011 - Skill Team PK Tournament - Capture the Flag - Team Qualifier - Spear and Wand Skill - Escort Mission - CP Drops for VIPs (Monk Zhen -- entering Mystic Forest) Patch 5391 (1005) -- May 3, 2011 - First macOS client Patch 5502 (1028) -- June 16/20, 2011 - Low definition mode Patch 5509 (1021) -- July 7, 2011 - Guild Recruitment system - Level 5 Houses upgrades Patch 5517 (1029) -- July 28, 2011 - Mounted Combat system Patch 5532 (1055) -- October 19, 2011 - Birth Village has been removed - Guild Beast can be upgraded to the Void Beast, which can drop the special Dragon Souls - Number of items displayed on a page in the Warehouse has been increased - Password cipher changed on Account Servers (SRP6) NOTE: The password cipher change was not confirmed by myself, but is around that patch for sure. Patch 5557 (1066) -- December 7, 2011 - Achievement system Patch 5565 (1073) -- January 5, 2012 - New Shopping Mall interface Patch 5568 (1078) -- January 11, 2012 - Pirate class - Gale Shallow & Sea of Death maps Patch 5578 (1087) -- March 8, 2012 - Removal of most Mines - Removal of most alt-maps like New Canyon Patch 5580 (1089) -- March 20, 2012 - New head gear for pirates Patch 5588 (1097) -- April 12, 2012 - More stackable items (Emeralds, HealthWine, CleanWater, Diamonds, Stones, etc) Patch 5607 (1112) -- May 29, 2012 - Male gift system: Kisses, Beers and Jades - Mounted offensive skill: Charging Vortex - Defensive warrior skills: Defensive Stance and Magic Defender - Scythe ninja skills: Bloody Scythe, Mortal Drag and Gaping Wounds - Scythe ninja item - New PK mode: Revenge. You can attack your listed enemies and monsters in this mode. - Players are now able to change the order of their skills. Patch 5619 (1119) -- June 21, 2012 - Removal of all Mines Patch 5622 (1121) -- July 5, 2012 - Chi system Patch 5639 (1131) -- August 28, 2012 - One-Armed Bandits - Flags Emblems - Quick Composition Patch 5670 (1159) -- November 15, 2012 - Faction War Patch 5728 (1212) -- May 21, 2013 - Auto-Hunting System Patch 5761 (1231) -- July 25, 2013 - Jiang Hu system - Guild PK-mode - Guards, Poles, and more have increased HP (and attack/defense) Patch 5838 (1291) -- December 31, 2013 - Re-designed maps Patch 5859 (1301) -- January 24, 2014 - New Shopping Mall for Bound CPs Patch 5929 (1375) -- August 1, 2014 - Roulette - Cross-servers (Travel Agent in Twin City) Patch 5936 (1379) -- August 9, 2014 - PvP cross-servers Patch 5938 (1380) -- August 12, 2014 - New Ninja skills Patch 5972 (1398) -- September 29, 2014 - Cross-server Capture the Flag Patch 5986 (1507) - October 30, 2014 - Dragon Warrior class - Mine Caves returning Patch 5992 (1510) -- November 11, 2014 - The Way of Heroes system Patch 6075 (1580) -- May 7, 2025 - Taoist Ascending expansion Patch 6083 (1589) -- May 25, 2015 - Renaming of Guilds and Clans Patch 6102 (1603) -- July 9, 2015 - Battle Power Tournament Patch 6116 (1616) -- August 20, 2015 - Maximum money has been bumped from 999'999'999 to 9'999'999'99. Patch 6152 (1638) -- November 12, 2015 - Reborn characters can unlearn skills (see SkillEraserSpecialist in Market) Patch 6175 (N/A) -- January 2, 2016 - Removal of the Flash login screen Patch 6193 (1682) -- March 3, 2016 - Wardrobe system - Title system Patch 6216 (1698) -- April 7, 2016 - New PK interface (recording killed players) Patch 6266 (1727) -- June 13, 2016 - First maps with .pux files (but support already there from 5171) NOTE: 6266, 6270, 6323 added more maps. Finally, 6609 added the redesigned Twin City using .pux files too. Patch 6270 (1730) -- June 16, 2016 - Perfection system Patch 6362 (1783) -- November 17, 2016 - Level 6 Houses upgrades Patch 6385 (1798) -- January 12, 2017 - Windwalker class Patch 6508 (1817) -- March 30, 2017 - Texas Raider (new way to play Texas Hold'em Poker) Patch 6532 (1831) -- May 25, 2017 - New map Map Dragon Island (all bosses are moved there) Patch 6559 (1852) -- June 22, 2017 - Millionaire Lee can now pack +2 & +3 stones - Millionaire Lee can now pack MetScrolls & DBScrolls Patch 6610-6612 (1887): Conquer Online 3.0 -- October 17, 2017 - Redesigned Twin City - Redesigned characters - Redesigned skills - Redesigned monsters NOTE: C3 models are updated and some are incompatible with previous ones. New models started getting released around patch 6606. The patch 6605 (10/13/2017) is the latest "safe" version for CO 2.0 models. In general, new CO 3.0 stuff started getting added around the patch 6592 (09/20/2017).
    2 likes
  12. I am indeed leaning into the generic host + BackgroundService pattern but only for LoginHandshakeService, GameHandshakeService, ConnectionWorker and im currently experimenting with an ExperienceService but im not really liking how I have that set up (no real reason other than I feel like there probably is a better way to do what im currently doing with it). Everything else is regular old DI, Parsers and handlers are discovered through assembly scanning. So far I dont have any complaints, I do have to say this is my introduction to game server development as a whole, so I dont know if i can really recommend anything to anyone, other than say so far for me it fits my needs. I really probably should read more into the topic and see more about why things are done a certain way in other game servers. Thank you!
    2 likes
  13. Here's a full D3D8 Hook Tutorial in English, including all steps from knowledge prerequisites to debugging and logging. 1. Prerequisites Before diving into D3D8 hooking, you should be familiar with the following: TopicDescription C/C++ ProgrammingKnow classes, pointers, function pointers DLL BasicsUnderstand how DLLs work and are injected Windows APIBasic Win32 programming and message loop Assembly & MemoryBasic understanding of memory layout and vtables DirectX 8 ConceptsHow Direct3D8 renders (e.g., EndScene, Reset) 2. Required Tools ToolPurposeRecommendation Visual Studio 2019/2022Build and debug C++ projects DirectX 8 SDKProvides d3d8.h, d3d8.lib, etc. DLL InjectorInject your DLL into the target process[Extreme Injector, Process Hacker, or custom one] Cheat EngineMemory inspection/debugging DebugView or file loggerFor logging without a console 3. Create the Hook DLL Project 3.1 Set up a Visual Studio Project Open Visual Studio → Create New Project → C++ Dynamic-Link Library (DLL) Name it something like D3D8Hook Set Project Properties: C/C++ > General > Additional Include Directories: Add the DirectX SDK Include path Linker > Input > Additional Dependencies: Add d3d8.lib, d3dx8.lib 3.2 Write the Hooking Code // D3D8Hook.cpp // D3D8Hook.cpp #include <Windows.h> #include <d3d8.h> #include <d3dx8.h> typedef HRESULT(APIENTRY* EndScene_t)(LPDIRECT3DDEVICE8 pDevice); EndScene_t oEndScene = nullptr; DWORD WINAPI MainThread(LPVOID); // Hook implementation HRESULT APIENTRY hkEndScene(LPDIRECT3DDEVICE8 pDevice) { static bool once = false; if (!once) { MessageBoxA(0, "D3D8 Hooked!", "Success", MB_OK); once = true; } return oEndScene(pDevice); // Call the original } void HookFunction() { IDirect3D8* pD3D = Direct3DCreate8(D3D_SDK_VERSION); if (!pD3D) return; D3DPRESENT_PARAMETERS d3dpp = {}; d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.hDeviceWindow = GetForegroundWindow(); IDirect3DDevice8* pDevice = nullptr; if (SUCCEEDED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, d3dpp.hDeviceWindow, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &pDevice))) { void** vtable = *(void***)pDevice; oEndScene = (EndScene_t)vtable[35]; DWORD oldProtect; VirtualProtect(&vtable[35], sizeof(void*), PAGE_EXECUTE_READWRITE, &oldProtect); vtable[35] = (void*)&hkEndScene; VirtualProtect(&vtable[35], sizeof(void*), oldProtect, &oldProtect); pDevice->Release(); } pD3D->Release(); } DWORD WINAPI MainThread(LPVOID) { HookFunction(); return 0; } BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID) { if (reason == DLL_PROCESS_ATTACH) CreateThread(nullptr, 0, MainThread, nullptr, 0, nullptr); return TRUE; } 3.3 Build the DLL Use Build → Build Solution (Ctrl + Shift + B) and find the DLL in: csharp 复制编辑 [YourProjectFolder]\x86\Debug\D3D8Hook.dll Make sure it's compiled for x86 if the target process is 32-bit. 4. Injecting the DLL Method 1: Use an Injector Tool Start the game or D3D8-based application Open an injector (e.g., Extreme Injector or Process Hacker) Select the target process and inject D3D8Hook.dll Method 2: Write Your Own Injector (optional) cpp 复制编辑 HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, targetPID); LPVOID addr = VirtualAllocEx(hProc, NULL, len, MEM_COMMIT, PAGE_READWRITE); WriteProcessMemory(hProc, addr, dllPath, len, NULL); CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, addr, 0, NULL); 5. Debugging and Logging 5.1 Output to DebugView Use this to see logs: cpp 复制编辑 OutputDebugStringA("D3D8 Hook initialized!"); You can view logs with DebugView by Sysinternals. 5.2 Write Logs to File cpp 复制编辑 void Log(const char* msg) { FILE* f = fopen("C:\\D3D8_Hook_Log.txt", "a+"); if (f) { fprintf(f, "%s\n", msg); fclose(f); } } 5.3 Use Visual Studio Debugger Build your DLL in Debug mode Launch the target app Attach Visual Studio (Debug → Attach to Process) Set breakpoints in hkEndScene or elsewhere Common Issues & Fixes IssuePossible Cause Game crashesWrong vtable index or uninitialized pointers Nothing happensHook not applied or wrong process architecture DLL fails to injectMissing dependencies or wrong platform (x64 vs x86)
    2 likes
  14. For an offline CO experience, take a look at https://github.com/conquer-online/cops-serverless (but it requires C++)
    2 likes
  15. For really old client versions, TQ used UPX to pack the executable, which is often flagged by antivirus as an obfuscation method used by viruses. So, you can always unpack the executable. For patches around 5017-5065, some still get flagged even if not packed. At some point, there isn't much that can be done and the best is to recommend to all players to exclude the folder. As many are just using Microsoft Defender, you can normally run a PowerShell command in your installer to auto-exclude the folder.
    2 likes
  16. Which they're actually called by actions. It doesn't matter anyway. Try this flags 1000,Desert,70368744185856 1002,CentralPlain,211106232541192 1011,Forest,70368744202240 1015,Island,70368744185856 1020,Canyon,70368744202240 1036,Market,17592186044446 1038,GuildArea,1125900981698690 Basically NPCs execute tasks, items will execute actions directly. Dialogs execute tasks. An NPC needs a task to start, which will be referenced on task0-task-7 on cq_npc and cq_dynanpc. This task will set some rules for an action to be activated. You can define behavior of startup npc dialogs using tasks, if task0 fail, it will try to execute task1 and there it goes. NPC Activation require a task, dialog replies requires a task. Each task targets ONE action. LUA NPCs implementation may be a little bit more hard to understand. I will leave here my implementation of the rebirth NPC so you can see an example. LUA items implementation are easier -- 3600023 战功显赫嘉奖包 tItem[3600023] = tItem[3600023] or {} tItem[3600023]["Function"] = function(nItemId, sItemName) -- do something end LUA monster implementation needs to be pushed to a list too. I will leave my ordinary drop code on attachments too. All of them require actually calling an action or the activation script: --//cq_NPC接口函数(Action_id=94418000) function LinkNpcMain() --陷阱接口函数(Action_id=94427500) function LinkTrapMain() --物品Action接口函数(Action_id=98471500) function LinkItemMain() --任务怪物触发Action接口函数(action.id=94416550),实时触发。(适合用来做怪物掉落) function LinkMonsterMain() Or of course, you can make your own LUA implementation. Long has a basic LUA implementation: lua · main · World Conquer Online / Canyon / Long · GitLab [Conquer][TaskScript]RebirthMaster.lua [Conquer][TaskScript]OrdinaryMonsterDrop.lua
    2 likes
  17. Around 2013/2014, I started an emulator for Era of Faith, before forking it and releasing it as COPS v7 Emulator (for Conquer Online). This is my original emulator for EoF, if anyone ever wants to work on that game. Overview Faith Emulator is a C++ emulator of the MMORPG Era of Faith. The emulator is coded in C++ and uses Qt4 / Qt5. N.B. The QMySQL driver must be build to use the QSQL module properly. Features Faith Emulator is currently released as a base source. Most functionalities are not implemented or completed. However, there is some code to log into the game, talk to NPCs, walk around, etc. Additional code could be backported from COPS v7 Emulator, and adapted for EoF. Download https://mega.nz/file/j1twRIDA#9uDz89-PBgD3J0HsZMv14_VoDmC3QlC-hpBjqBBMhB0 Screenshots
    2 likes
  18. On 6200 the client still do not handle the message IDs, they're replaced by the server. Basically on a dialog `90000000_0101` is the `actionid_type`. Canyon and the open version of Long already handles this as it should be. Also both have a lot of map types handled, some types are still unhandled because I dont know them, but I didn't have problems with the cross server data. I am not allowed to share the databases, but there are places where you can find a Database and LUA for version 7119 of american client, which will let you have a full environment of that version. TQ planned to use database tables for item drops, but they actually didn't use. Specific monster drops will always be on `cq_action`, but the random drops are hard coded into the server, Canyon has a +/- approach of how it's done (or not, idk, I adapted it for my own needs). I still don't know how monsters are handled on the Realm, I did a few things for cross server but didnt go far, but it's on my roadmap for the next weeks.
    2 likes
  19. I've added a bit more info to debug the MySQL connection error here:
    2 likes
  20. Just in case (also for documentation for the wiki if Spirited want), this is the NPC Type enum from Conquer taken from the client. ROLE_NPC_NONE = 0, // Illegal NPC ROLE_SHOPKEEPER_NPC = 1, // Shop NPC ROLE_TASK_NPC = 2, // Task NPC ROLE_STORAGE_NPC = 3, // Storage NPC ROLE_TRUNCK_NPC = 4, // Box NPC ROLE_FORGE_NPC = 6, // Forging NPC ROLE_EMBED_NPC = 7, // Embedding NPC ROLE_COMPOSE_NPC = 8, // Qiankun Five Elements Furnace ROLE_STATUARY_NPC = 9, // Statue NPC ROLE_SYNFLAG_NPC = 10, // Gang Mark NPC ROLE_PLAYER = 11, // Other players ROLE_HERO = 12, // Yourself ROLE_MONSTER = 13, // Monster ROLE_BOOTH_NPC = 14, // Stall NPC SYNTRANS_NPC = 15, // Gang Teleport NPC (used for 00:00 charging) (LINKID is the ID of the fixed NPC, mutually exclusive with other LINKID) ROLE_BOOTH_FLAG_NPC = 16, // Stall Flag NPC ROLE_MOUSE_NPC = 17, // NPC on the mouse ROLE_MAGICITEM = 18, // Trap Fire Wall ROLE_DICE_NPC = 19, // Dice NPC ROLE_WEAPONGOAL_NPC = 21, // Melee Attack NPC ROLE_MAGICGOAL_NPC = 22, // Magic Attack Target NPC ROLE_BOWGOAL_NPC = 23, // Bow and Arrow Target NPC ROLE_TARGET_NPC = 24, // Take a beating, no quest triggered ROLE_FURNITURE_NPC = 25, // Furniture NPC ROLE_CITY_GATE_NPC = 26, // City Gate NPC ROLE_NEIGHBOR_DOOR = 27, // Neighbor's Door ROLE_CALL_PET = 28, // Summoned Beast ROLE_TELEPORT = 29, // Teleport NPC ROLE_MOUNT_APPEND = 30, // Mount Pet Combination NPC ROLE_FAMILY_OCCUPY_NPC = 31, TASK_SHOPKEEPER_NPC = 32, // Quest Shop NPC TASK_FORGE_NPC = 33, // Quest Forging NPC TASK_EMBED_NPC = 34, // Quest Embedding NPC COMPOSE_GEM_NPC = 35, // Gem Combination NPC REDUCE_DMG_NPC = 36, // Equipment God Blessing NPC MAKE_ITEM_HOLE_NPC = 37, // Item Hole NPC SOLIDIFY_ITEM_NPC = 38, // Solidify equipment NPC COMPETE_BARRIER_NPC_ = 39, // Mount pet competition fence NPC FACTION_MATCH_FLAG = 40, // Gang battle flag FM_LEFT_BARRIER_NPC_ = 41, // Gang battle left base camp fence FM_RIGHT_BARRIER_NPC_ = 42, // Gang battle right base camp fence WARFLAG_FLAGALTAR = 43, // Cross-server battle flag competition battle flag platform WARFLAG_PRESENTFLAG = 44, // Cross-server battle flag competition flag-giving NPC WARFLAG_FLAG = 45, // Cross-server battle flag competition battle flag VEXILLUM_FLAGALTAR = 46, // New battle flag competition flag platform (the cut battle flag) VEXILLUM_FLAG = 47, // New Battle Flag Competition Flag (small trap-type flag) SLOT_MACHINE_NPC = 60, // Slot Machine NPC OS_LANDLORD = 61, // Cross-server players can attack NPC CHANGE_LOOKFACE_TASK_NPC = 62, // Task NPC that can change lookface ROLE_DESTRUCTIBLE_NPC = 63, // Destructible NPC ROLE_SYNBUFF_NPC = 64, // Gang Buff Pillar NPC SYN_BOSS = 65, // Gang BOSS ROLE_3DFURNITURE_NPC = 101, // 3D Furniture NPC ROLE_CITY_WALL_NPC = 102, // City Wall NPC ROLE_CITY_MOAT_NPC = 103, // Moat NPC ROLE_TEXAS_TABLE_NPC = 110, // Gambling table NPC ROLE_TRAP_MONSTER = 111, // Trap Monster ROLE_ROULETTE_TABLE_NPC = 112, // Roulette table NPC FRONTIER_SERVER_TRANS_NPC = 113, // Border server transmission NPC ROLE_TRAP_CAN_BE_ATTACK_NPC = 114, // Trap NPC that can be attacked ROLE_SH_TABLE_NPC = 115, // Stud table NPC ROLE_RAIDER_TABLE_NPC = 116, // Raiders of the Lost Ark table NPC ROLE_TURRET_NPC = 117, // Turret NPC ROLE_DOMINO_TABLE_NPC = 118, // Domino table NPC ROLE_TRAP_TRAPSORT_PORTAL = 119, // Blue rune of waterway - instant portal ROLE_NEWSLOT_NPC = 120, // 5*3 slot machine NPC ROLE_BLACKJACK_TABLE_NPC = 121, // 21-point gambling table NPC ROLE_FRUIT_MACHINE_NPC = 122, // Fruit machine NPC ROLE_SHEN_DING_NPC = 123, // Shen Ding NPC ROLE_SWORD_PRISON = 124; // Sword prison NPC
    2 likes
  21. Hey all! Two-factor authentication via Google Authenticator has now been added to the board. Visit your profile's security settings to set it up. You won't get a special badge for enabling it (since that highlights potentially insecure accounts), but you will get some peace of mind. Best, Spirited & Staff
    2 likes
  22. Introduction Conquer Online is an isometric game, meaning the coordinate axes are oriented at roughly 120 degrees to each other on a 30 degree slant. This produces a pseudo-3D effect the community calls 2.5D. Conquer Online is a notably interesting case, since it uses a mixture of both 2D and 3D assets. Maps in Conquer Online are completely 2D, while the character and monster models are all 3D. This tutorial describes how to edit those 2D assets. Downloads Gimp: A free paint program that supports DDS (Paint.net also works, Photoshop requires this plugin). SageThumbs: Optional shell extension for DDS thumbnails on Windows WDF Extractor: Needed to extract assets from compressed archives Editing Assets In this tutorial, I modified a tree in Twin City. Before you can modify map assets, you need to extract them from data.wdf. You can do that using the WDF extractor you downloaded. Once complete, find the asset in "data/map/mapobj/newplain/plain" called "np09.dds". Open the file in Gimp using default DDS import settings. Once done making modifications, export the file using default DDS export settings. Replace the file (make sure you create a backup of the original), then restart your game client. That's all it takes. Enjoy!
    2 likes
  23. I have a good Souce file of ReneGradeCo from back in the days, very good client lots of customs. I was looking for a dev to help me add and remove some stuff. Im not very knowledgeable on this. I bought the souce from a friend 4 years ago.
    1 like
  24. Azna you're the best! THANKS A MILLION Thank you all beautiful community
    1 like
  25. Good job! I haven't looked through the project too much, but it looks like you're following the hosted services factory pattern? Would be interested to know your thoughts around using it, and if you'd recommend it for C# game server development. I experimented a little with it for Comet's randomization service (BackgroundService using the host service pattern), but never implemented any game systems with it. Best of luck with your development!
    1 like
  26. Silly hook to "always" jump without the game being focused. Grab og function: typedef BOOL(WINAPI* tGetKeyboardState)(PBYTE); tGetKeyboardState oGetKeyboardState = GetKeyboardState; Our function: bool alwaysJump = true; //could be toggleable in menu or using a keybind BOOL WINAPI hkGetKeyboardState(PBYTE lpKeyState) { BOOL result = oGetKeyboardState(lpKeyState); if (alwaysJump) lpKeyState[VK_CONTROL] |= 0x80; return result; } Then you can use your desired hook method.
    1 like
  27. Yeah was used, I was toying with it. I think there is still a bit of leftover for items. Otherwise, take a look at the original COPS v6 release, or here is the commit that introduced Mongo, you may be able to restore a bit of the old code. ab31589b0e4be0cf7cb3103e8368bc87f8fa0e76.diff
    1 like
  28. Yeah that's possible, if you have a prefix of the item such as "[S]" -> Super or any other prefix you can do that Example targeting "(3rd)" You can prevent it from being draw, add to a list of drawable items & re-render it in endscene. I'll upload in a few days my old imgui project for d3d9 client.
    1 like
  29. Joined Primal about 3 weeks ago and I am loving it so far. Very stable and low ping, server is always up, active community. The website is currently a WIP, so I highly recommend you reach out to people on Discord or World chat and someone will give some helpful info. If you jump in, hmu I'm Seiya in game. GGs.
    1 like
  30. Dang, I really need to figure something out for my archive. I have 800GBs of backed up clients across multiple languages... but nowhere to upload them. I'll try and get back in contact with the Gamefront folks... Edit: Oh! I didn't have these. Thank you!
    1 like
  31. Maps have an attribute for "reborn_map" which is the ID of the map you will respawn on if you log in or revive. Eg, Metzone is 1212 "GlobeQuest10" aka Adventure Zone 10, but the reborn map is 1219, which is GlobeExit, the Bird Island style looking map. You can do checks when reviving or logging in that the current map has Record Disabled and if it is, have them appear in the Reborn_Map instead.
    1 like
  32. Learning, understanding, and creating Generative artificial intelligence can only provide you with some code suggestions within a limited scope, although sometimes the given code may seem comprehensive, if you analyze it carefully, it is actually full of vulnerabilities. If you are interested in this field, you should spend more time learning the basics instead of spending a lot of time on AI coding and error correction
    1 like
  33. I'm not sure if those two sources have compatible databases. But I don't have a whole lot of experience working with them. I thought Hellmouth was another version?
    1 like
  34. Introduction These are my personal recommendations for private server sources from across the internet. Some are pretty messy, and some are clean but incomplete. For reliability, I have taken the liberty of mirroring legacy sources that are no longer available or guarded behind a registration wall. For newer sources, I link to the git repository or thread from Cooldown. I grouped and sorted servers by patch/alphabetically. Downloads If you're looking for a base source, my source Comet supports multiple patches. Otherwise, here are other sources from the community: 4267 - CoFuture (Korvacs): Fairly complete, but messy; a very early source in the community 5016 - COPSv6 (CptSky): A French emulator for Conquer, with mostly complete systems and accurate algorithms 5017 - ConquerServer (Hybrid): A fairly organized base project with limited features 5065 - COPSv7 (CptSky): A Qt C++ source that's very organized 5065 - Redux (Pro4Never): A fairly complete and organized server, but lacks good documentation 5095 - CoEmu v2 Nano (Andy): Not a great source, but functional and mostly complete 5135 - ConquerServer v2 (Hybrid): Organized and well coded, but can be difficult for newcomers 5165 - Impulse's Base (Impulse): Fairly organized and easy to understand, but not a great reference for in-game systems 5187 - Project Exodus (ImmuneOne): Organized base source using a TQ binary database 5290 - Project Exodus (ImmuneOne / Pro4Never): Upgraded version of the 5187 Project Exodus base project 5517 - ConquerServer v2 (Hybrid / CrystalCastle): Upgraded to work with the new encryption and packets 5517 - Albertros (Pro4Never): Fairly complete and organized, but could use with better multithreading patterns 5619 - ConquerServer v3 (Hybrid): Base with good organization and interesting project features If you don't see your source here, contact me privately and make sure it's posted to these forums. Getting Started Most sources listed here are written in C# with .NET Framework 4. You can download the latest version of Visual Studio Community for free. Be sure to install the IDE with the C# feature checked. Sources also mostly use MySQL databases to save accounts and character information. If you see a reference to MySQL in the source code, then I recommend downloading MariaDB (a MySQL drop-in replacement) and MySQL Workbench. Install with legacy authentication if given the option, since all sources here currently don't support the newer authentication version. You should also upgrade your source's MySQL client library dependencies. Having trouble setting up a server? Search the forums with your question, and post a new thread if you're still having troubles. Good luck and have fun!
    1 like
  35. I usually just use ConquerLoader to get around editing an encrypted server.dat file. But if you really need to use a decrypted server.dat, then there's a tutorial here:
    1 like
  36. Introduction This guide helps you set up and configure the Conquer Online game client to connect to a private server. Downloads 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. 4217 4267 4274 4294 4330 4343 4351 5002 5017 5065 5095 5127 5165 5187 5290 5355 5517 5615 6090 ConquerLoader Launcher: Mirror Patches: Official, Mirror (Recommended) Installations: Mirror Flash Warning! Most clients newer than around patch 5035 run a watercolor login screen using Flash. Flash's end of life was December 31, 2019, and it was disabled on Windows in January 2020. You can still run these clients using a flash hook that loads ActiveX Flash from the client rather than the system. For an example of a flash hook or a launcher that uses it, check out the Dragon Launcher. Instructions Download a client and extract it using 7-Zip. Download the ConquerLoader launcher and extract it on top of the client. Edit LoaderSet.ini with your IP address (either your internal or public IP). If you use a public IP address, make sure you port forward. You may also need to edit the LoginPort for your version of Conquer (see your Account server settings). Add an exception to your firewall to allow players to connect to your servers. Add an exclusion rule to your antivirus if ConquerLoader.exe is detected as a virus (it's a false positive since it injects code into the client to redirect it to your servers). Run the client using ConquerLoader.exe. Common Error Messages 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. If the client hangs here, then the MsgAccount packet isn't being handled correctly and the client is still waiting on a response. 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.
    1 like
  37. Have there a fork with easy setup pre-configured. With your permission @Konichu, is the same base but with a more easy configuration
    1 like
  38. I've never worked with TQ Binary databases. This'll be up to the developers who do.
    1 like
  39. I was recently trying to explain to some people in a discord server how to get started with the process of private server development as far as I've seen in my first week of doing it and thought it might be valuable to some other beginners and save them some time. So here is what I have so far. I will update this post as I progress through my own journey. Please bare in mind that for any of the steps that I outline, there will be other choices of which tools to use, where to get your sources/clients and how to approach the process. Note: Clients beyond around 5065(?) start to get a bit trickier to work on because of `server.dat` encryption, this can also be circumvented with client modification of course but it's quite tricky and I'd advise starting with an earlier client. Client side: Download a client https://cooldown.dev/topic/6-guide-client-downloads/ Download a server which the client can connect to https://gitlab.com/spirited/comet Download Ollydbg https://www.ollydbg.de/ AND/OR x64dbg (but you will use the included x32dbg instead) https://x64dbg.com/ AND/OR Ghidra (I don't know much about this yet) https://github.com/NationalSecurityAgency/ghidra Start looking at some guides on client modification and giving it a try: https://cooldown.dev/topic/19-client-using-decrypted-serverdat/page/2/#comment-1322 https://www.elitepvpers.com/forum/co2-programming/452076-guide-how-make-multiclient.html#post4149373 https://www.elitepvpers.com/forum/co2-programming/157593-ollydbg-co.html Open the client and see if your changes have taken effect Server Side Download a skeleton server and follow the steps outlined in the Comet README to get the server running https://gitlab.com/spirited/comet Download a corresponding client https://cooldown.dev/topic/6-guide-client-downloads/ Download ConquerLoader https://mega.nz/file/dU5GCbJY#gGpIZaiGCX_EN1XzRTE0xVnIx0KoX5J9wwluFgY_LbE OR https://conquerloader.com/ Configure the client/ConquerLoader and connect to your server Upon connecting and moving around, you will see some messages in the chat and console about missing packets Start working through each of these missing packets e.g. `MapJump` by going to the appropriate packet handler e.g. `MsgAction` in the server code and writing a switch case for it. Try to find other sources for patches as close as possible to your own and reference how certain things are done (but be mindful of bad server code, there is lots of it out there) This should provide you with a very rough guide on getting started. As I say, I have only been working on this stuff for little over a week now but the above has been my process and I've made a decent amount of progress so far. I will update this post whenever I gain more insights and I hope that it's useful to someone.
    1 like
  40. Sorry for the long wait on this! I only have one project at the moment, but I'm working on a music player widget to display on my streams that can be reactive to input sent from my stream deck. The widget and server have a subscribe/publish pattern, and the communication works like this: Widget <-> Webserver The websocket allows for efficient data flow keeping media player data synchronized such as current song, estimated seek position, song attributes, album art, commands such as play/pause/previous/next, far faster than API requests. The webserver's role in this relationship is to communicate desired changes to the widget where the widget will then send a response as to whether that desired change was successful or not. Stream Deck <-> Webserver The Stream Deck interacts via API to send/process my desired commands which will have a success/failure result depending on the decision made on the backend. For example if I ask for a specific song but the song for some reason isn't available, this will not be forwarded to the Widget and the Stream Deck will be given a failure response to display to me. Likewise for the opposite, if the song exists and the Widget & Player were able to have a successful interaction, I'll be given a successful response and the Stream Deck will report that to me visually as well. Desired commands because I like to keep realistic expectations that I'm sure I'll have undesired outcomes at times.
    1 like
  41. To debug the MySQL connection issues, I strongly suggest modifying bool Database::connect(const char* aHost, const char* aDbName, const char* aUserName, const char* aPassword); to either log itself, or optionally return a QSqlError. If the open() call fails, you can query lastError() to retrieve it. It should provide more information. ------------------------ Also, for the SSL settings, you may need to edit the function too look like: bool Database :: connect(const char* aHost, const char* aDbName, const char* aUserName, const char* aPassword) { ASSERT(aHost != nullptr && aHost[0] != '\0'); ASSERT(aDbName != nullptr && aDbName[0] != '\0'); ASSERT(aUserName != nullptr && aUserName[0] != '\0'); ASSERT(aPassword != nullptr); if (mConnection.isOpen()) { mConnection.close(); } mConnection.setHostName(aHost); mConnection.setDatabaseName(aDbName); mConnection.setUserName(aUserName); mConnection.setPassword(aPassword); mConnection.setConnectOptions("MYSQL_OPT_SSL_MODE=SSL_MODE_DISABLED"); // changed line return mConnection.open(); } But it seems to require Qt6. So for Qt5, you may need to configure certificates for your MySQL server. See the SSL options here.
    1 like
  42. Let's move the topic of conversation to that emulator's thread in the future. All you need to do is install Qt 5.15 and follow some instructions online for how to set up and use Qt Creator. If you want to get started on containerizing the server... which is more involved, then here's a docker image you could start with: https://hub.docker.com/layers/vookimedlo/ubuntu-qt/5.15_gcc_focal/images/sha256-cc10c736be3834bb824123ca827e3fcaf66d4c75ff98f5a6a8be5d12f0c73a1b?context=explore I'm not sure if that'd be a runtime or build container. And then you'd also have to install the MySQL driver, probably. And write a Docker Compose for running MySQL in its own container (so you don't have to install it manually). I don't have time to write up an image at this time.
    1 like
  43. Ah, sorry then. You can still paste without formatting before posting. Glad you found the issue.
    1 like
  44. This is an amazing upgrade, I love the new aesthetic! Also some really cool feature additions. :3
    1 like
  45. Artificial intelligence isn't a replacement for real intelligence and talent. It can only do so much using guesses at what problems are solved by Stack Overflow. It's no more helpful than Googling, and may be worse since it only gives you a single opinion without source references. I strongly advise against the use of AI in Conquer Online server development. It has no idea what Conquer's internal data structures or messages are, nor the contents and meaning of your own source / this project. A "prompt engineer" is not an actual engineer. With that said, a reminder to the community when working with these LUA scripts: they are from a binary leak from TQ, and distributing them is not allowed here. You're welcome to talk about them here, just don't distribute them. Thanks!
    1 like
  46. The Community Hi there! Welcome to our little Conquer Online community! Here's the run down: most private server communities require heavy moderation and vigilance against bad actors, and Conquer Online is no exception. There are a few things you need to know / look out for to protect yourself from scams and theft. Do not purchase server source code. All listings these days are for freely available, leaked, unmaintainable servers. Some even contain backdoors, privacy invasive anti-cheats / data collection, and major security issues / exploits. Do not accept private offers for hired programming. Create a thread and let the community help, then encourage them to post their offer publicly. Do not pay for information. All information should be open-source. Expectations The community and game has aged quite a lot, and both aren't incredibly active anymore. We still have fantastic developers in the community working on new servers and projects, but open-source projects have slowed down quite considerably. That said, most projects are semi-complete! Starting up a Conquer Online server isn't as easy as starting a Minecraft server, so expect to Google a few new terms and programs. You may need to learn a bit of programming to fix bugs and program NPCs. Luckily, you can learn programming on the fly using a plethora of online tutorials, and you really only need to know introductory programming to get started. When looking for open-source server projects, you'll often see "mostly complete" or "base"/"skeleton". A base / skeleton project is made to login to the client but provide little else, instead promoting a framework for making a server from scratch. Getting Started The number one question I get in the community is: how can I get started? The first thing I recommend is that you read through all pinned threads in the section. You'll learn a lot regarding how to setup the client, available open-source server projects and their features, and tooling around Conquer Online development (like the Wiki). A lot of projects will require some knowledge around networking and programming, so here's a list of topics you can read up on: How the internet works How to set up port forwarding (What is Port Forwarding) Learn how to program (C# / C++ / C++ Qt) What is Git? How do I use it? Before learning a programming language, find an open-source project you want to work on and see which programming language it uses. Most in the community are written in C#, but some are written in C++ using open-source Qt. Git is also very helpful to know so you can clone and fork open-source projects. Forking a project will allow you to develop on it and, optionally, contribute back up to the upstream project. Git is also super helpful in tracking changes made to your server! Here are some starting resources for finding a project and client: How can I get help? If you ever have a question for the community, simply ask! We're all here to help, but please avoid directly messaging a member (that prevents others from contributing to answers or looking up a question they might also need the answer for). It's good to read up on the section rules to understand how to best ask a question and what topics are banned from the section: Don't be afraid to ask a question though. Even if you get a warning, you'll always get a helpful message explaining why and what you should do differently. What's important is that you remember that Conquer Online private servers are a hobby more than a career, and that we're all here to help one another and get stronger together. We're here to have fun! How do I host a private server? Hosting a private server with low latency can be expensive. It's great to start at home on your own computer or a spare laptop! A cheap hosting option may also be to buy an old Dell Optiplex for super cheap on eBay or other sites. Some decade+ old systems sell for $20 but run servers just fine. A more expensive option is to rent space in the cloud with a VPS (virtual private server). They're machines hosted for you, but finding a VPS running Windows is tricky and more expensive. They usually come in two flavors: shared (where resources like your CPU, RAM, and I/O are shared with other people) and dedicated (where you have dedicated resources). Sharing can be a problem if you have noisy neighbors who hog resources, but they also are much cheaper options. If you're looking for a recommendation, OVH is a good value to performance option.
    1 like
×
×
  • Create New...