Actually, its not that hard to do ... Kappa
[Only registered and activated users can see links. Click Here To Register...]
(Yes, all of this stuff is done in IDA, but you can do it in OllyDBG or x64dbg aswell. Cheat Engine might come in handy.)
TL;DR; x64dbg Patch File is appended.
When messing with the /frame-command in the interface, i recognized something odd. (This is not the frame command, its my own window. Its easier to capture.)
[Only registered and activated users can see links. Click Here To Register...]
You cant really see the red box, but you can see the values in the window change. The active "lamp" is a recognized object, while the inactive lamp is not changed. The lead me to the conclusion that inactive lamps must be hidden/invisible.
From earlier days of debugging, i know that all CIF* Objects have a "IsVisible" Attribute.
My GUI told me the address of the active lamp (0x17412200).
I then set up a breakpoint on the "SetVisibility"-Function that would only trigger if its related to the lamp. (ECX == Address of Interface)
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
The breakpoint hit and the stack took me to a function of my interest:
[Only registered and activated users can see links. Click Here To Register...]
Here we have the location of evil. A switch is "selecting" the correct lamp to show. I figured out all the lamps in the comments. We know the Party Chat and the Guild Chat Lamp are flipped, so the easiest fix at this point is to simply change the offsets 0x47C and 0x480. So that either the opposite lamp is turned on.
[Only registered and activated users can see links. Click Here To Register...]
Both offsets should then look like this
[Only registered and activated users can see links. Click Here To Register...]
Since Silkroads code is a huge mess, there may be other locations where this visibility is set :/
Tell me when you find a combination where its still wrong.