Jump to content

Leaderboard

Popular Content

Showing most liked content since 08/14/2024 in all areas

  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. Following my previous D3D9-Base setup, here's an example using it for a simple DIP (DrawIndexedPrimitive) hook. Wireframe example code targeting pheasants: typedef HRESULT(WINAPI* tDrawIndexedPrimitive)(LPDIRECT3DDEVICE9, D3DPRIMITIVETYPE, INT, UINT, UINT, UINT, UINT); tDrawIndexedPrimitive oDrawIndexedPrimitive = nullptr; HRESULT APIENTRY hkDrawIndexedPrimitive(LPDIRECT3DDEVICE9 device, D3DPRIMITIVETYPE dType, INT baseVertexIndex, UINT minVertexIndex, UINT numVertices, UINT startIndex, UINT primCount) { //targeting pheasants models (mainly 6609 clients) if (numVertices == 420 && primCount == 544) { DWORD dwOldFillMode; device->GetRenderState(D3DRS_FILLMODE, &dwOldFillMode); device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME); //here you could return directly, to make it more noticeable oDrawIndexedPrimitive(device, dType, baseVertexIndex, minVertexIndex, numVertices, startIndex, primCount); device->SetRenderState(D3DRS_FILLMODE, dwOldFillMode); } return oDrawIndexedPrimitive(device, dType, baseVertexIndex, minVertexIndex, numVertices, startIndex, primCount); } This example code has only wireframe "effect" for the texture targeted (pheasants), but you can change the colors of the texture too (know as Chams), gather realtime w2s positions, adding effects/shaders, etc. Some preview of how it could work (chams & w2s from texture):
    1 like
  24. Introduction & Server Description: Primal Conquer has been in development for 3 years now, It took us a year of constant rewrites and development to launch the server and we've been live for 2.5 years. Took us this long to make sure everything is functional and is programmed in a correct way. It runs on an emulator that we wrote from scratch that shows great potential and exceptional performance, We've designed it to be fully dynamic and modifiable on run-time which eliminates the need for restarts and maintenance. Gameplay wise, Primal conquer emulates the earlier stages of Conquer Online 1.0, Which makes it a home to those that are looking for the classic / old school style, Everything was implemented just the way it was in the early 1.0 days (We've of course implemented some Quality of life improvements but nothing that would break gameplay) Our server is the closest to a true TQ classic conquer online experience, It's been proven year after year just how our emulation has gotten to such an authentic state and that boils down to hard work, dedication and paying attention to the smallest details and we continue to dive deeper in that direction. Server Information: - True 1.0 experience - Original 4 classes. - Level 130. - Plus 9. - 1st rebirth. - No battle power. - Medium rates. - No P2W. - Constantly updated. (changelog) - Growing & friendly community. - Active staff. Source Features: - Custom source written from scratch that is battle tested and has been under development and optimizations for the past 3 years. -- Used Languages: C#, C++, HTML, ASP.NET, JS, Vue. - Proper server architecture and design & split projects for Logon - World - Hub - Discord - Framework - Website - Anticheat. - Runs on the latest .netframework and can run on Windows & Linux. - Dynamic and modifiable on runtime using a scripting engine which eliminates the need for reboots. (Except for major core updates). - Proper networking. - Proper Multithreading and Tasking. - Verbose logging system. - Bruteforce and Flood protection systems. Server Features: - Original TQ calculations. - Properly implemented spell sorts and algorithms. - Proper stacking using guards/ghosts. - Real-time statistics and Discord integration. - All TQ Quests are implemented such Snake King, BlueMouse, Ancient Devil, DisCity, Moonbox, etc.. - PvP, PvE & Seasonal events. - Duel & Powerleveling bots. - A fast, User Friendly launcher and installation wizard to ensure the easiest installation in just a matter of clicks! - Each accounts can have up to 5 characters that are usable simultaneously. - Epic battles in guild Wars, City Wars, ElitePK, ClassPK and invasions. Why Choose us? Our vision and our goal is to provide the ultimate and most authentic conquer 1.0 experience, We want our players to feel the nostalgia and relive the golden days of conquer online and really get back to their childhood feels, Longevity is something that seems to be lacking in the private server scene at the moment and we're doing our best to ensure a longer life span for the server. We value the effort players put into their accounts, characters and equipment so rest assured that you’ll run into no trouble what so ever in regards to accounts, characters or equipment loss and that your efforts are in the hands of a more than capable team that will maintain and run the servers as smooth and as professional as possible, This has been proven as we've had ZERO hiccups, rollbacks, wipes or resets over the 2.5 years we've been running. We also communicate with our community at a level of transparency never seen before, Any change no matter how small is documented and shown in our patch notes. So what are you waiting for? Join us along with hundreds of others on this epic journey and give Primal Conquer a try and experience the most authentic conquer online server and join The Online Sensation! Links: Website: here Downloads: here Support & Chat: here Changelog: here
    1 like
  25. Azna you're the best! THANKS A MILLION Thank you all beautiful community
    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. 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
  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. Event_Server_Start does not exist in the Lua context (i.e. nil value). Make sure that if it is a C# function, it is properly registered/exposed to Lua. If it is a Lua function, make sure it is actually defined.
    1 like
  30. 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
  31. 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
  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. 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
  38. 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
  39. Introduction This guide helps you set up and configure the Era of Faith 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. English Client 2107 (Alpha) Korean Client 1232 Installations These are official installations from TQ, compressed using WinRAR. These can also be decompressed using 7-Zip. English Installation 2107 (Alpha) Korean Installation 1200 Instructions These instructions have not been fully tested. Please let me know if these don't work. Download a client and extract it using 7-Zip. Open server.dat in Notepad and edit the IP address to be your own. Add an exception to your firewall to allow players to connect to your servers. Run the client using belief.exe with the command-line option "blacknull".
    1 like
  40. 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
  41. 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
  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. If you're going to copy and paste your questions from other forums, then can you at least select "Paste without formatting"? I'm not fixing this one... It's hard for us to debug a private project we have no access to. If it is the UID, then yeah, I'd imagine a lot of the server would be unhappy with that. /shrug
    1 like
  45. This Trinity source is not public in order to offer a service to the people who buy it and to have a support, but I understand what you are saying, it is not my intention to advertise at all, I respect this forum a lot. Never see my advertising on your forum. Greetings
    1 like
  46. Well, thanks for utilizing it. And feel free to contribute back to the project if you have a desire to. Also, I have an article written about multi threading in game servers for Comet, if people want to develop on it with a bit of direction: https://spirited.io/multi-threaded-game-server-design/
    1 like
  47. 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
×
×
  • Create New...