cyano Posted 16 hours ago Posted 16 hours ago (edited) 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) Edited 15 hours ago by cyano fix 8) changing to emoji's - use a different example number Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.