Jump to content

Leaderboard

Popular Content

Showing most liked content since 10/30/2024 in all areas

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. I want make some update after that i will share
    2 likes
  7. If Spirited have no problem to share yes i can share
    2 likes
  8. 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
  9. 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
  10. 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
  11. For an offline CO experience, take a look at https://github.com/conquer-online/cops-serverless (but it requires C++)
    2 likes
  12. 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
  13. 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
  14. 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
  15. ClientEdit 2025-07-31 20-26-06.mp4 I saw such crazy client modification videos in Chinese community chat rooms. Almost all UI has been customized and modified, and it also supports dynamic switching between multiple languages, and so on. He is the developer of ConquerTow and also uses methods similar to Conqueronline.net. They used a higher version client to HOOK D3D9, removed the original UI definition, and then drew their own UI and built their own packages by injecting hooks. I love this high-definition memory scene so much.
    1 like
  16. Hello everyone, I attempted to add DirectX with a hook in the client, and I succeeded. The client version is 5165, which is quite old. I also added some custom dialogs, such as Auto-Hunt. I changed the text color for some items; I hope you like it.
    1 like
  17. I feel tired!!!!!!!!! It requires a lot of time and thinking, and I may not have reached that level of technology yet, so it is difficult to produce any results, taking up a lot of my time. First, let me introduce this project. This project originated from an open-source D3D9HOOK project on GitHub It uses EASYOOK injection and intercepts the D3D9 virtual function table Then use SharpDX to draw the content. I have tested this process and it works perfectly without any issues. What can you do with it? 1. You can use it to redraw a UI and then integrate it with your own server. (But it requires you to have a lot of time) 2. You can do some simple drawings, such as blood bars, login interfaces, and so on. What I want to achieve, everyone can study it together. In fact, NetDragon's C3Engine has been publicly available for download for a period of time, and it contains some header files. By analyzing the latest client through IDAePr, one can analyze and infer the way functions are called. I have currently implemented a call to the ShowStringW function in graphic.dll in the code, and it was successfully called. But I don't know why it doesn't show up, and I've been studying it for a long time, but still haven't found any results. If we can customize our own rendering through all the dynamic link libraries on the client side, everything on the client side will become very simple. This is my idea, but I think it's too difficult for me alone. I don't know if anyone can solve and share it. Or it is simply impossible to achieve. At least for now, you can render some simple content, such as IMGUI.... XGUI HOOK DEMO.7z
    1 like
  18. Azna you're the best! THANKS A MILLION Thank you all beautiful community
    1 like
  19. 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
  20. 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
    1 like
  21. 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
  22. Huh! That's cool! I wonder if there's a higher level function that would allow you to target a role by their mesh ID or role ID... and then perform this detour for it. Would be pretty cool being able to apply some special modifier to a specific mob, like blinding someone / something tints them black or something (like they're in magical darkness). What are your current plans for using something like this?
    1 like
  23. Forgot to mention: newer versions of the game uses ShowStringW Function: ?ShowStringW@CMyBitmap@@SA?AUC3_SIZE@@HHKPBGPBDH_NW4RENDER_TEXT_STYLE@@KUC3_POS@@@Z Example: 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* tShowStringW)(int, int, DWORD, const wchar_t*, const char*, int, bool, RENDER_TEXT_STYLE, DWORD, C3_POS); tShowStringW oShowStringW = nullptr; C3_SIZE __cdecl hkShowStringW(int iPosX, int iPosY, DWORD color, const wchar_t* pszString, const char* pszFont, int nFontSize, bool bAntialias, RENDER_TEXT_STYLE style, DWORD secondColor, C3_POS ptOffset) { //call og function }
    1 like
  24. From what I remember, the old login layout was one of the rare GUI to be solely based on the MFC resources + code to position elements (i.e. it checks whether it is in 1024x768 and if so, move some elements).
    1 like
  25. Should be the same as modifying any other interface in the game now. It should be all DirectX. Optionally, I'd love it if someone open sourced a new login screen that replaces the flash one for flash-based clients.
    1 like
  26. Welcome to our little community! I know a few people have dabbled in other game emulations / mods, but Conquer was my sandbox for like a decade and a half. Still is, but my work and house keep me away from hobby projects. I guess my house is my new hobby project. Lol Anyways, hope you have a fun here! I was a C# engineer in finance / business solutions as well. Haha
    1 like
  27. In some server projects, I've seen an exploit where you can log in as anyone (including GM and PM accounts). When logging in, the account server handles MsgAccount and authenticates the player. Then, it sends MsgConnectEx to the client with the IP address of the game server and an identifier. The client disconnects, connects to the game server, and sends MsgConnect with that identifier. In a lot of projects I've seen, that identifier is either the account ID or an incrementing counter. If it's an account ID, then a proxy can just fill that in with any account ID you want. If it's a counter, then a proxy can just keep sending MsgConnect requests until it steal's someone's new session when they try to log in. Fun stuff. Encrypting the identifier with one that uses cipher feedback is likely enough to patch that. If you wanna go above and beyond, then you can replace it with a cryptographically random access token that has a max life of a few seconds. It's a shame the identifier is max 64 bits though.
    1 like
  28. Login complete SynchroAttributes(ClientUpdateType.HouseLev, gameMap.ResLev); MsgUserAttrib 10017 76
    1 like
  29. That "Tip" message is not sent by the server, its a client message sent only to you. I dont remember the exactly file right now, but afair it's encrypted with the same itemtype crypto.
    1 like
  30. 1. Use Dear ImGui & D3D9Hook 2. Dev Custom client GUI 3. overlay old client gui This is a classic client modification case that uses ImGUI to overwrite a large amount of the original UI
    1 like
  31. Yes, the view range is also hard-coded client-side. The client will discard out-of-range entities and remove them without the server telling it to do so. The server still has final say on which entities are shown or not, but it cannot exceed the client-side view range without modifications.
    1 like
  32. You must need to sniff the packets to get them working, I never got to implement them perfectly but they're "Intone" skills, the ice skill from Snow Banshee is triggered using MsgInteract (1022) on action (52). It supports multiple skills and will start some animations. I removed the code from my source because I never tried to figure out how to make her stop the animation xd she would be stuck in that animation until the player go out of the screen. SnowBanshee, SwordMaster and the ThrillingSpook had interesting skills that I never saw implemented in any source, but if you look into their site, they have some guides about those mobs which display their skill names, they can be found in the magictype.dat as well.
    1 like
  33. Reverse engineering packets is very time consuming. Especially with different patches and types. It's taken months just for me to write the new wiki, which isn't up yet and was using existing references / light reverse engineering, and that's only packets and maybe 65% done. So if you're unsatisfied with the amount of documentation the community has, then feel free to learn and contribute yourself. I don't disagree with you that more documentation would be helpful, but I'm not dedicating more time to Conquer Online than I already have. Maintaining this board is about the most I can do right now until more of my available time frees up. Anyways, I hope you find more details about that spell. You may need to packet log the official game or a server that has it implemented correctly.
    1 like
  34. Introduction Hi all! I wrote a little launcher and some hooks recently as practice (since I've never written client hooks before). I decided to make it open-source since I didn't find a lot of examples of QueueUserAPC DLL injection or some of the hooks I wrote using Detours. Enjoy, and give me feedback if you'd like. Thanks! About the project Dragon is Chimera's game client launcher. This open-source version of the project excludes the auto-patch / launcher application, but includes the command-line code injector and three modules: a flash module that loads the ActiveX Flash plugin from the client's directory, a connect module for redirecting socket connections for private servers, and a websites module for redirecting / blocking website popups. Dragon uses code injection to change the behavior of the game client. It starts a new process for the game client in a suspended state. Then, queues asynchronous procedure calls on the main thread of the client using QueueUserAPC. Once injected, the process is resumed. Modules injected into the client will load before the entry point of the client is called. Link You can find the project on my website here: https://spirited.io/project/dragon/
    1 like
  35. 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
  36. I'm working on a server using ConquerServer v2 and am having an issue with getting warehouse to work as intended. Can deposit way too much gold, can't remove gold, and I can't get items to deposit at all - they disappear from inventory until closed and reopened. I've spent the last couple hours going through and nothing I changed would take. I tried to troubleshoot why no changes worked and even removed the files related to the warehouse to see if that would prevent anything. Unfortunately, it kept allowing gold to be deposited. I have all my changes on a different branch atm to ensure I didn't break anything. (Yes, I restarted the server each time to ensure the changes took for testing) I noticed no .bin files were created within the Database Warehouse section, so I thought maybe those were created upon registration. I reviewed registration and character creation, and that does not seem to be the case. Has anyone worked on this source who could give me a hint? I've been able to get most things working as intended but the warhouse and attribute points not saving after relogging are the two big ones for me atm. At the very least, this forced me to go through almost every file and add comments to try and track every process... at least some plus side?
    1 like
  37. The soul source code is a decent base for money / item drops (excluding things that are specific to CO like mets, DBs, blessed items and such). There are minor differences, but it would be near enough for regular drops without reverse engineering the TQ bins. For the tasks / actions, these are used for "special" drops (like Pheasants dropping PK tickets and such). There is a death action that is triggered when a monster is killed by a player-owned entity (like a player or a pet).
    1 like
  38. 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
  39. My own notes (originally based on yours Spirited, but verified more the 5016-5100 range for COPS X): 5016: Nobility & Team Aura Groups 5022: Mentors/Apprentices, Suspicious items, Trade partners, Locked items 5028: Flash Login Added 5031: Synchronized Date & Time 5035: Shields lvl 120, Plumes, Headbands 5039: TBD -- new exec 5053: Flame Lit Event 5055: TBD -- new exec 5066: Arrow auto-reload, New Composition System, Free Items 5072: Talismans, Flower Rankings 5078: Halos 5089: Ninja 5095: Ninja 5103: Quiz Show 5127: Enlightenment, Flower Ranking, World Chat, Low HP effect, New Chat Interface, Different Gems Images 5165: Mount System, Clans 5187: New Password Cipher 5212: Alternative Equipment, Refinery/Stabilization 5250: Subclasses, Artifact System, Boss Hunting 5290: Reincarnation, Clan Qualifiers, etc. ~5310: Compressed Maps 5376: Team Pk Tournaments, Capture the Flag, etc. <-- Source 5392: VIP Window 5517: Attacking on Mounts (broken) <-- Source 5532: New Password Cipher (Unknown) 5557: Achivements 5622: Chi System 5639: Country Flags ... ~6178: Flash Login Removed 6605: Latest 2.0-ish, before meshes were updated. (10/13/2017) 6606+: New meshes being rolled out slowly. ============ 5089: Ninja 5101: Quiz Show 5127: Enlightenment, Flower Ranking, new action UI 5160: Guild branches removed 5173: New account server encryption 5183: Classic CO (Unsure if special server build) 5200: Alt Equipment, Texas Hold'em Poker 5205: Magic Artisan can downgrade gear to level 15 for a DB 5212: Refinery 5250: Sub-classes, Artifacts, 3-6th floors Frozen Grotto, Boss Hunting 5287: Elite PK Tournament, Clan Qualifier, Pure Skills, Reincarnation 5302: Gender-specific titles for nobiility 5310: Level 3/4 houses, gender-specific transforms (and 5313) 5350/5351: Monk 5376: Skill Team Pk, Capture the Flag, Team Qualifier, Spear & Wand skill
    1 like
  40. Those are the only two public leaks, I'm sorry. I'd sugest you to re-create the scripts using LUA instead of hard coding in the server or using actions and tasks from tq bins.
    1 like
  41. Conquer itself changed the engine again and still same bullshit. I dont think they will get anything better trying to keep using c3.
    1 like
  42. I don't think it's related to any hook. It affected official conquer as well.
    1 like
  43. Love your work Spirited, keep it up. Was doing some digging to feed my nostalgia for old conquer, and just wanted to comment on the noteworthy changes between 4294-4348 for clarification on your OP About Conquer 2.0: Patch 4282 was Released November 1 2005 News article was posted "Upgrade Conquer Online 1.0 to 2.0" On November 1 2005 News article was posted warning "DO NOT run Patch 4283 before 00:01 Nov. 15" On November 2 2005 News article was posted "Upgrade Conquer to 2.0" On November 14 2005. Patch 4284 was Released November 16 2005 Clarifications about 2nd Reborn, "CO Points" Currency and Potency Systems: 4312 - Second reborn system was added. It was added to Dragon initially as a "test" and phased out to other servers from there. 4336 - Conquer Points currenty was added, along with Talisman and Garment slots and the Shopping Mall 4353 - Potency System was added 4353, Level cap was also raised to 135 here. Failed to find actual patch notes from before 4292 for further clarification Patch Notes.txt
    1 like
  44. You're fine! And if you fix it, feel free to submit a pull request back to the Redux repo. I'd be happy to peer review it and get it merged. It may be worth moving it to GitHub first, though.
    1 like
  45. The first thing I'd suggest doing is searching for the message processing for MsgItem (the message type that handles buying and selling items from NPCs). In Redux, that's under Network/GameServer.cs. It looks like there's already handling for it, so it may be worth setting a breakpoint here and stepping through the handler. That way, you can make sure the item is being found and that the logic actually works as intended.
    1 like
  46. I was sick with dengue fever and lost 10 days of work, I haven't been looking into Conquer stuff lately. When I finish the stuff I need to deliver I may try to reverse this to you, until then I advise you to keep trying xd Also, TeamPK maps do not use ElitePK Types. 900000,PlayersArena,18744315019367 910000,ElitePKTournament,18744849793095 920000,TeamPKField,18748607889511 940000,TeamArena,18886046842983 950000,SkillTeamPK,19568946643047 960000,Champion`sArena,53928685011047 1000000,ClanQualifier,18744447139943 [Flags] public enum MapTypeFlag : ulong { Normal = 0, PkField = 0x1, //0x1 1 ChangeMapDisable = 0x2, //0x2 2 RecordDisable = 0x4, //0x4 4 PkDisable = 0x8, //0x8 8 BoothEnable = 0x10, //0x10 16 TeamDisable = 0x20, //0x20 32 TeleportDisable = 0x40, // 0x40 64 GuildMap = 0x80, // 0x80 128 PrisonMap = 0x100, // 0x100 256 WingDisable = 0x200, // 0x200 512 Family = 0x400, // 0x400 1024 MineField = 0x800, // 0x800 2048 CallNewbieDisable = 0x1000, // 0x1000 4098 RebornNowEnable = 0x2000, // 0x2000 8196 NewbieProtect = 0x4000, // 0x4000 16392 InviteTransDisable = 0x10000, FamilyBattleField = 0x20000, MountDisable = 0x40000, NotInviteToFamilyBattle = 0x80000, ArenicMap = 0x200000, DoublePkMap = 0x400000, RaceTrackMap = 0x2000000, SynCompeteMap = 0x4000000, FamilyArenicMap = 0x8000000, FactionPkMap = 0x10000000, EliteMap = 0x20000000, NoGhostLock = 0x200000000, TeamPkArenicMap = 0x100000000, TeamArenaMap = 0x2000000000, BattleEffectLimitMap = 0x4000000000, TeamPopPkMap = 0x8000000000, NoExpMap = 0x10000000000, GoldenLeagueAdditionLevelLimit = 0x20000000000, ForbidCampMap = 0x100000000000, GoldenLeagueMap = 0x200000000000, JiangHuMap = 0x400000000000 }
    1 like
  47. To my knowledge, there are no source code leaks besides the old Chinese Eudemons Alpha leak. And that's not terribly helpful for Conquer Online. Maybe you could use it as a base, but you'd have to implement basically everything but the engine. And that engine is way freakin' old. It'd be missing a huge amount of things even before you start focusing on it rendering a map from Conquer Online. You'd probably be better off making your own client with modern frameworks than wasting that time making it compile on something other than Visual C++ 6.0.
    1 like
  48. 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...