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)