Hey,
I'm sure most of you have seen the video by now that someone found out how to dupe gold on selling items they setup in a store by swapping items around and putting a high value then selling item to vendor for same price as they put in store.
Was looking around a 1750 server in asm and might have a solution to fix this, please keep in mind that i have not tested this at all so can make no guarantees if it will work or not, but the new code that is inserted will only run if you get the server error up so it will still work as intended on normal operation.
As i said i used a 1750 gameserver so offsets will vary if you are using a different version.
The bug here is that the price is always set on the item even if the item fails to register in stall, we're gonna change that.0047D709 MOV EDX,DWORD PTR SS:[ESP+18] 0047D70D PUSH 1 0047D70F SUB ESP,8 0047D712 MOV EAX,ESP 0047D714 MOV DWORD PTR DS:[EAX],EBP 0047D716 MOV ECX,EDI 0047D718 MOV DWORD PTR DS:[ESI+1C],EDX 0047D71B MOV BYTE PTR DS:[EAX+4],BL 0047D71E CALL RylGameS.CCharacter::MoveItem 0047D723 TEST AL,AL 0047D725 JNZ RylGameS.0047D832 0047D72B MOV DWORD PTR SS:[ESP+30],1 0047D733 JMP RylGameS.0047D832
To do so you'll need to find a place with some empty code space because we're gonna be adding some code and there isn't room here for this. Usually you'll want to go to the end of the file for the needed space, for 1750 i used the area 005050EE->00505101
Alright enough talking, on with the code, change the following:
NOP out, and replace with a far jump to the available codespace.0047D72B MOV DWORD PTR SS:[ESP+30],1
Go to your free codespace and write the replacement code:0047D72B JMP RylGameS.005050EE 0047D730 NOP 0047D731 NOP 0047D732 NOP
And we're done, rightclick->copy to executeable->all modifications (select copy on all) rightclick->backup->save data to file (input a new filename for instance gameserver_.exe)005050EE MOV DWORD PTR SS:[ESP+30],1 ; Set error to Server Error 005050F6 MOV DWORD PTR DS:[ESI+1C],0 ; Stall Price = 0 005050FD JMP RylGameS.0047D832 ; Return to stall code
A little explanation about what this mod does, it will set the stall price as usual but in case the item fails to register in stall it will overwrite the price with 0 and send a server error. As i said previously this is untested so i cannot guarantee it will work but I'm fairly sure it will, and please remember these offsets and combination of registers will only work for 1750 server, other versions WILL vary though be somewhat similar.
Enjoy.
Edit: Just got confirmation from someone that tried this that it does in fact fix the problem, so off you go fix your servers ;)
Tyfix
Ragezone