Jump to content
Returning Members: Password Reset Required ×

Recommended Posts

Posted (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 by cyano
fix 8) changing to emoji's - use a different example number

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...