blackdtools / Blackd-Proxy-CLASSIC

Blackd Proxy CLASSIC
MIT License
9 stars 7 forks source link

StackItems is broken on 7.6 #23

Closed divinity76 closed 9 years ago

divinity76 commented 9 years ago

It refuses to stack Platinum Coins. This is my opened backpack #1

When i do StackItems SayMessage stacked

it will hang indefinitely on StackItems, constantly sending the packet "0E 00 78 FF FF 40 00 00 DB 0B FF FF 40 00 01 14 " (judging by the last byte 0x14, meaning 20 in decimal, its trying to move the 20x platinum coin, as expected. but the packet is malformed somehow, because the server does not understand it.) When i move the last platinum in to the first, manually, the bytes are: "0F 00 78 FF FF 40 00 01 DB 0B 01 FF FF 40 00 00 14" As you can see, though quite similar, the length of the packet does not match, meaning a byte is missing! (I guess the protocol changed in a newer version, with removing some un-needed information, and you removed it for every version? maybe? :p )

divinity76 commented 9 years ago

I think the 7.6 protocol is: 78 (throw packet) - 1 byte (Throw From $myx$ $myy$ $myz$) - 5 bytes (Item ID to throw) 2 bytes (stack position in BP) 1 byte (Throw TO X/Y/Z) 5 bytes (How many to throw?) 1 byte

Meaning the packet should be 15 bytes (which is what the client send), but BlackD Proxy send 14 bytes here. (which the server don't understand) - i dont know where BlackD is making a mistake, but i will try to look into it later

divinity76 commented 9 years ago

Image Sorting this manually, Tibia client: 0F 00 78 FF FF 40 00 00 E3 0B 00 FF FF 40 00 01 01 BlackD Proxy (invalid): 0E 00 78 FF FF 40 00 00 E3 0B ?? FF FF 40 00 01 01 (the ?? is the missing byte); Turns out that byte is res1.slotID .. i have made a fix

divinity76 commented 9 years ago

(note, i tested this code several times, with items in several different positions in backpack, the code never failed. )