-
Posts
5 -
Joined
-
Last visited
Reputation
5 NeutralRecent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
-
cyano changed their profile photo
-
This is really cool, thank you for open sourcing it! I always wondered back in the day when I used to play how some of the bot tools actually worked under the hood, so it's great to see something in code! Only had a chance to skim through it so far but it's really interesting! Hooking into the client is something I've been wanting to learn, so this is going to be a good read
-
cyano started following Guide: Server Development Wiki
-
Hi, I appreciate this is an old thread - but I do not have contributor role to the wiki & this post does say to post changes here for an update to the wiki. I've written a page where I've analyzed each packet type in the 5517 / 1029 binary to see whether it is sent, received or both by the client. I think it'd be a useful addition as a page: Packets/ClientPacketHandling.md - I've attached the markdown to this page: ClientPacketHandling.md Could you kindly consider adding this to the wiki? If there's an alternative way to submit changes to the wiki, please let me know - maybe I could submit future changes as a GitLab Issue?
-
Which client version? That tool seems to work fine for wdf on 5065 & 5517, but not 6090 or 5187 (same error as you)
-
Thanks for this guide, it was useful! I'd also highly recommend for those interested in this to checkout, Hex-Rays Ida, which has a free version without many limitations. The mac client was first released as version 1005 (windows 5391). However, you can still find the binary for Mac 1029 which was released the same time as windows 5517 - which I think is ideal, because the windows/mac clients are so similar at this verison & there's a couple of compatible sources 5517/5518 to get started quickly - its really interesting to see low-level how the server & client interact.
-
Hello, I've been exploring conquer client (Windows 5517 / Mac: 1029) in Ida & found some hardcoded strings in CHero::Talk & CDlgTalk::OnTalkBtnSend which turned out to be client-side implemented slash commands! I searched the forum and wiki but couldn't find these documented anywhere, so thought I'd share my findings of going down the rabbit-hole figuring out what each command did. I hope this isn't common knowledge already, this is just my interpretation of reading through the code & using in the client and I welcome any corrections. I did this on client 5517, but you can usually check if other clients version support these commands by going strings conquer.exe | grep -i '<name_of_command>'. Beware even though these are client-side, the message is still sent to the server - so there is a record server-side these commands were ran. Starting with the commands in CDlgTalk::OnTalkBtnSend, these commands can be ran by any player. They are case insensitive, but I will write them as they are hardcoded in the client. /spdup <int> (Example: /spdup 100) | Value controls how fast the character can jump & move (a very useful command) /OpenWindow <int> (Example: /OpenWindow 489) | This opens a UI Dialog, the IDs seem hardcoded in the binary - I've attached a list of the dialog IDs in client 5517 as a text file. DialogWindows.txt /CloseWindow <int> (Example: /CloseWindow 489) | This force closes a UI Dialog. /3DEffect <string> | Triggers an visual effect on the player, you can see list of effects in ./ini/3DEffect.ini /Weather <int> <int> <int> (Example: /Weather 2 10 10) | This starts a weather event on the client, where the args seem to be <weather_id> <intensity> <direction> Weather IDs: 1 = Rain, 2 = Snow, 12 = Leaf, 13 = Sand, 14-18 = FlyFlower, 19 = FireBug, 20 = Cloud /ShowMePerformance | Performs some sort of sampling & outputs the results to System channel & a logfile in ./debug folder if it exists /ShowMeGameVersion | Outputs the value of version.dat to System channel /ShowMeCrash | Freezes client for about 5 seconds, although doesn't always work. /show client version | Writes the client build version to System Channel /TrimWorkingSet | Seems to reduce the amount of used memory (watch Task Manager). Calls the function with arg: 0 /TimeWorkingSetImm | Seems to reduce the amount of used memory (watch Task Manager). Calls the function with arg: 1. Assume 'Imm' means immediately, whereas the other one is delayed /EnableArabicLike | Appears to inverses most gui elements, but appears broken (probably due to non arabic font) /DisableArabicLike | Reverts the inverse of gui elements (though not completely) /EnableGmMode | An anti-climatic command, sets a flag on DbgMgr which writes some system stats to ./debug/gm-log & some details on MsgVerify (Anti-Cheat) packet. /EnableSimplifyOnMapScale <int> | From what I gather, rendering optimisation only happens when at default zoom level (a const 256). If this is true (1) this applies to any zoom level. 0 restores back to default zoom level. /EnableFocus | Allows hovering over gui elements, moving and deleting them. /DisableFocus | Disables the previous enable focus command /SetResetMode <int> | This appears to be used in the next command /ResetGui. I think it is to do with UI interface (0) & Dialog Interfaces (1) but unconfirmed /ResetGui <int> <int> | This command is autopopulated with EnableFocus. It appears to be <ElementGroup> <ElementId> and if entered should reset its position (never had luck) /WriteNewGui | Freezes the client, but writes the output to a file (GUI<res>.ini?) /ClearInvalidGui | Assumes this overwrites the modified gui ini file with a known-good state, but always crashed client. The following were in the mac client, but didn't exist in the windows client (via strings & grep), I didn't spend much time figuring out what these do: /EnableMapPlayer <int> <int> /EnablePuzzleGrid <int> /ChgScr <int> <int> <int> | This appears to change width height & 0/1 (window/full-screen) /Version Next up, are the commands in CHero::Talk. These commands can only be used if the player name ends with '[PM]' (not '[GM]'). /scrshot <str> (Example: /scrshot test.png) | This saves a screenshot to ./<name> (extension is not appended automatically) /break | Causes client to disconnect /DelItemByType <id> | Deletes any item in inventory by the ItemType id. /reloadfile <str> | If no arg - reloads info.ini, if an arg reloads ini/<name>.ini /UseMagic <int> <int> <int> | Generates a Magic Effect (MagicEffect.ini) at X, Y - I couldn't get this to work. /Crash <int> | Has 4 (1, 2, 3, 4) unique ways to crash the client, but none of them crash the client - perhaps because its a release build? /Profile | Does nothing, not implemented /color <float> <float> <float> <float> | Should set a RGBA tint on the player, but couldn't get it to work - possibly not be implemented in windows client (to be confirm) /look <int> (Example: /look 321) | Sets the player apperance to another model (ID source unconfirmed - likely C3.wdf or 3DSimpleObj.dbc) /mount <int> | Puts the player in mount, not sure what the int is doing, it seems to only perform client reaction on int: 801, 802, 803, 810 (from mountmotion.dbc) /addnewcard <str> (Example: /addnewcard CARD_DOUBLEDANCE_REJECT) | Adds a card to the screen (str come from ./ini/cardshow.ini) /rolescale <int> (Example: /rolescale 200) | Sets the scale of the player with no limits! /scale <decimal> (Example: /scale 100) | Sets the scale of the game /data <str> | Doesn't appear to do anything, just reads the input and does nothing with it /ver | Prints the client build version to system channel /AddEarthQuake <str> <int> <int> (Example: /AddEarthQuake FatDemonEarthquake 10 10) | Shakes the screen, the earthquake names can be found ./ini/MagicEarthQuake.ini, first int is intensity(?), second int is duration (seconds) /addScreenEffect <str> (Example: /addScreenEffect LevelUp) | Performs the effect on the player (effects names come from c3.wdf) /delScreenEffect <str> | Removes any persistent named effect on the player (from previous addScreenEffect command) /addEffect <str> | Seems to do the same as /addScreenEffect /addaction <int> <int> (Example: /addaction 10 10) | Makes the player perform action with id (first arg, uncertain where Ids are from) and for duration (seconds, second arg) /pose <int> (Example: /pose 9)| Makes player perform different dance animations (uncertain where Ids are from) /GetFrameAmount <int> (Example: /GetFrameAmount 9) | Prints the number of frames an action (like a dance) consists of to System channel /SetDebugFrame <int> <int> (Example: /SetDebugFrame 9 10) | Pauses the character into a particular frame, so example: action 9 (first arg) frame 10 (second arg) /SetDebugInterval <int> (Example: /SetDebugInterval 60) | How long to pause the character (seconds) when using /SetDebugFrame /ActionDebugInfo <int> (Example: /ActionDebugInfo 1) | Boolean 1 or 0. If 1 prints some information about current action periodically to System channel . /ReloadDummyMovieIni | Reloads ./ini/DummyMovie.ini /LAAdd <str> <int> <int> (Example: /LAAdd foobar 2000 9) | Adds a bar that counts up with text str (ie foobar) that lasts for milliseconds (1st int) and performs action (second int) /LAStop | Stops the LAAdd command /ReloadMsgBoxIni | Reloads ini/MsgBox.ini /addmsg <str> | Prints a message to system channel /AddCenterMsg <str> | Prints a message just below player character feet /say <int> <str> (Example: /say 21 test) | The channel is determined by int-2000. For example, to send to world channel (ID 21), Prints the message to the channel /mapcolor <hex> (Example: /mapcolor ffff0000) | Sets the tint of the screen. /ReLoadStrRes | Reloads the strings ini file /ReLoadCnRes | Does the same as /ReLoadStrRes /hitfly <int> <int> | Uncertain what this does, and what the args. It seems whatever values are just throws the character outside the map (to xy: 000,000) /APE <int> <str> | Stands for 'Add Part Effect', where first int is the slot of the equipment and str is the name of the effect (unable to test) /DPE <int> <str> | Stands for 'Delete Part Effect', where first int is the slot of the equipment and str is the name of the effect (unable to test) /transform <int> (/transform 3320) | Transforms the player into model / attributes in ./ini/TransForm.ini, where id is from that ini file too And finally, there was a command that I spent way too much time figuring out trying to figure what this does: `/pmnew` - which only exists in the window client. It pops up a native windows dialog, which appears to just record chat strings. Most strings are '????' - even with the language pack installed, so I believe the strings might be missing or not rendering First Window (Main Window): Textbox at the top is a search Tab 1: Default Config Tab 2: Custom Config Dropdown box: Select Chat Message Button Row 1 Col 1: Send Button Row 1 Col 2: Clear Button Row 1 Col 3: Toggle between /EnableFocus & /DisableFocus Button Row 2 Col 1: Unknown Button Row 2 Col 2: Configure Window (See Second Window) Button Row 2 Col 3: Close Window Second Window (Custom Config): Button 1: Save File (Saves to: ./ini/PMItemUser.ini) Button 2: Delete Selected Node Button 3: Opens Create Command Window (See Third Window) Third Window (Create Command Window) Textbox 1: Name of character Textbox 2: Name of command Button 1: Apply Button 2: Cancel Overall, it seems like this window is a quick way to save and use chat commands. For example, someone will go: `/pmnew` -> Configure Window (Button row 2, col2) -> Create Command (Button 3) -> Name: TestPlayer Command: /test -> Save (Button 1) Now, back on the first window, click the second tab (Custom Config), the dropdown will list /test, click first button and it will send it to the chat (default talk channel)
-
- 3
-