blackdtools / Blackd-Proxy-CLASSIC

Blackd Proxy CLASSIC
MIT License
9 stars 7 forks source link

try to fix performuseitem on 760 as it often fails #66

Closed divinity76 closed 8 years ago

divinity76 commented 8 years ago

needs more testing, but this seem to fix using-item-on-ground issue with 760, the old code fails some places, especially with floor change.. related: https://github.com/blackdtools/Blackd-Proxy-CLASSIC/issues/20

@Nrated since you're playing 760 too, can you test this?

divinity76 commented 8 years ago

1 bug: if the tile contains a splash, like water, wine, or blood, we need to do SS + 1 ... any idea how to detect that?

Nrated commented 8 years ago

I can't test it right now but there might be a little logic problem in here:

If (DatTiles(tileID).usable2 = True Or _
DatTiles(tileID).floorChangeDOWN = True Or _
DatTiles(tileID).floorChangeUP = True Or _
DatTiles(tileID).noFloorChange = False) Then

It will execute even if only one condition is TRUE so I would throw away lastcondition for sure. I'm not sure about the first one too...Will test it later

divinity76 commented 8 years ago

another bug: when i was on a tile with a ladder, i was standing on the tile, it had a burning fire, AND a blood splat, the packet was 0A 00 82 25 04 4A 05 05 9C 07 02 02

as you can see, the last byte is 02 , but in blackd proxy, the last byte is HARDCODED to 00 -

sCheat = "0A 00 82 " & FiveChrLon(X) & " " & FiveChrLon(y) & " " & GoodHex(CByte(z)) & _
   " " & GoodHex(b1) & " " & GoodHex(b2) & " " & GoodHex(SS) & " 00"

so.. more stuff to figure out

currently im doing

  sCheat = "0A 00 82 " & FiveChrLon(X) & " " & FiveChrLon(y) & " " & GoodHex(CByte(z)) & _
   " " & GoodHex(b1) & " " & GoodHex(b2) & " " & GoodHex(SS) & " 00"
   ' debug
 'frmMain.txtPackets.Text = frmMain.txtPackets.Text & vbCrLf & sCheat
  inRes = GetCheatPacket(cPacket, sCheat)
  waitCounter(idConnection) = GetTickCount() + 2000
  frmMain.UnifiedSendToServerGame idConnection, cPacket, True

  sCheat = "0A 00 82 " & FiveChrLon(X) & " " & FiveChrLon(y) & " " & GoodHex(CByte(z)) & _
   " " & GoodHex(b1) & " " & GoodHex(b2) & " " & GoodHex(SS + 1) & " 00"
  inRes = GetCheatPacket(cPacket, sCheat)
  frmMain.UnifiedSendToServerGame idConnection, cPacket, True

    sCheat = "0A 00 82 " & FiveChrLon(X) & " " & FiveChrLon(y) & " " & GoodHex(CByte(z)) & _
   " " & GoodHex(b1) & " " & GoodHex(b2) & " " & GoodHex(SS + 1) & " 02"
  inRes = GetCheatPacket(cPacket, sCheat)
  frmMain.UnifiedSendToServerGame idConnection, cPacket, True

which is obviously an ugly detectable hack :p

Nrated commented 8 years ago

Maybe thats a number of items on top of ladder or something like that ; d I don't know you have to make debug.print or just a normal command printing all the items on the stack so you can analyze this stuff

divinity76 commented 8 years ago

now im even more confused, guessing by the assertion in the function that calculates the last byte, it has something to do with number of open containers... there could be other functions to calculate the last byte in other situations though, im not sure

asm

divinity76 commented 8 years ago

closing, this code is also bugged.