Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

Gold Limits for Exchange/Storage/Guild Storage

Master Summoner
Joined
Nov 9, 2009
Messages
579
Reaction score
238
Hi!
Ive been working on the gold limits for exchange/storage/guild storage and got it to work with 4b max. On client side i can at least enter values higher than 500b into the field, but as soon as the value entered is higher than 7FFFFFFF(hex) it uses 4b (that means 4b is put into the exchange or storage etc)

that is because the datatype they used to store this value is integer .. so i would need to change this datatype to long or something like that .. does anyone have any ideas about this?

(ill give the results to everyone thats helping)


example of one check for the value given being higher than 4b:

Code:
JG SHORT XXXXXXXX                        ; Value bigger than 4b (result of earlier function call)
JL SHORT XXXXXXXX                        ; Value smaller than 4b (result of earlier function call)
CMP ECX,EE6B2800                      ; Check if Value is 4b (recheck it maybe?)
JNB SHORT XXXXXXXX                       ; Jump taken if not smaller than 4b
MOV DWORD PTR SS:[ESP+10],ECX    
MOV DWORD PTR SS:[ESP+14],EAX
JMP SHORT XXXXXXXX                       ; Jump over the value reassignment
MOV DWORD PTR SS:[ESP+10],EE6B2800 ;Set value = 4b, only if JNB taken
MOV DWORD PTR SS:[ESP+14],EDX            ; ntdll.KiFastSystemCallRet
CMP DWORD PTR SS:[ESP+14],7FFFFFFF    ;Check if value is below max integer value
LEA EBX,DWORD PTR SS:[EBP+88]
JL SHORT XXXXXXXX                        ; If below max integer
JG SHORT XXXXXXXX                        ; If higher than max integer
CMP DWORD PTR SS:[ESP+10],-1      ;some "else" i guess
JB SHORT XXXXXXXX                        ; jump to else instructions
CALL XXXXXXXX                            ; error function (value higher than max integer)
CALL XXXXXXXX                            ; success function

i also had a look at the function the gameserver uses for Stall/Consignment but to be honest thats a bit too much for my knowledge of assembler :blink:

Code:
MOV EDX,DWORD PTR DS:[EDI]
MOV EAX,DWORD PTR DS:[EDX+C4]
MOV ECX,EDI
CALL EAX
TEST EAX,EAX
JE 00471B45                              ; 00471B45
MOV EDX,DWORD PTR DS:[EDI]
MOV EAX,DWORD PTR DS:[EDX+58]
MOV ECX,EDI
CALL EAX
CMP EAX,1
JE 00471B45                              ; 00471B45
MOV EDX,DWORD PTR DS:[EDI]
MOV EAX,DWORD PTR DS:[EDX+380]
MOV ECX,EDI
CALL EAX
MOV DWORD PTR SS:[EBP+18],EDI
MOV BYTE PTR SS:[EBP+8],BL
MOV EBX,DWORD PTR SS:[ESP+1C]
MOV DWORD PTR SS:[EBP],EAX
LEA EDI,DWORD PTR SS:[EBP+A]
MOV EAX,EDI
MOV ESI,EBX
MOV DWORD PTR SS:[EBP+4],EDX             ; ntdll.KiFastSystemCallRet
CALL 0048BF40                            ; 0048BF40
MOV ECX,DWORD PTR SS:[EBP+18]
MOV EDX,DWORD PTR DS:[ECX]               ; ntdll.774B6074
MOV EAX,DWORD PTR DS:[EDX+4E8]
CALL EAX
MOVZX ECX,WORD PTR DS:[EDI]
CMP ECX,EAX
JNZ SHORT 00471B3C                       ; 00471B3C
MOV EAX,DWORD PTR SS:[EBP+18]
CALL 00459D80                            ; 00459D80
MOVZX EDX,WORD PTR DS:[EDI]
CMP EDX,EAX
JG SHORT 00471B3C                        ; 00471B3C
MOV ECX,DWORD PTR SS:[EBP+18]
MOV EAX,DWORD PTR DS:[ECX]               ; ntdll.774B6074
MOV EDX,DWORD PTR DS:[EAX+4E8]
CALL EDX                                 ; ntdll.KiFastSystemCallRet
MOVZX ECX,WORD PTR DS:[EDI]
CMP ECX,EAX
JG SHORT 00471B3C                        ; 00471B3C
LEA ESI,DWORD PTR SS:[EBP+10]
MOV EDX,ESI
MOV EDI,EBX
CALL 0042F7B0                            ; 0042F7B0
MOV EAX,DWORD PTR DS:[ESI]
MOV ESI,DWORD PTR DS:[ESI+4]
TEST ESI,ESI
JL SHORT 00471B33                        ; 00471B33
JG SHORT 00471B00                        ; 00471B00
TEST EAX,EAX
JB SHORT 00471B33                        ; 00471B33
CMP ESI,74
JG SHORT 00471B33                        ; 00471B33
JL SHORT 00471B0E                        ; 00471B0E
CMP EAX,6A528800
JA SHORT 00471B33                        ; 00471B33
LEA EDI,DWORD PTR SS:[EBP+1C]
MOV EAX,EDI
MOV ESI,EBX
CALL 00404E50                            ; 00404E50
CMP DWORD PTR DS:[EDI],0
JNZ SHORT 00471B28                       ; 00471B28
MOV EAX,3C3C
XOR ESI,ESI
JMP SHORT 00471B4A                       ; 00471B4A
MOV AX,1
POP EDI                                  ; WININET.7735C73D
POP ESI                                  ; WININET.7735C73D
POP EBP                                  ; WININET.7735C73D
POP EBX                                  ; WININET.7735C73D
RETN 0C

greetz
LemoniscooL
 

Attachments

You must be registered for see attachments list
Last edited:
Junior Spellweaver
Joined
Feb 3, 2012
Messages
196
Reaction score
7
Hello lemoniscool
May you help me with the exchange gold limit offset? Which offset is responsible for the exchange gold limit in GS?
 
Back
Top