yvt / openspades

Compatible client of Ace of Spades 0.75
http://openspades.yvt.jp/
GNU General Public License v3.0
1.14k stars 218 forks source link

place blocks inside you while airborne and crouched [bug] #1102

Open VierEck opened 2 months ago

VierEck commented 2 months ago

https://github.com/user-attachments/assets/e298e1a3-b448-4730-92c4-8ee471fe4a2b

normally since the player jumps only 1 block high, and additionally "pulls their legs up" via crouching mid-air, the player should only be able to place a block beneath them 2 blocks higher from where they jumped off. this bug however enables the player to place a block 3 blocks higher from where they jumped. this is not possible on voxlap. it gives openspades players an advantage. some players have practiced this exploit and use it with great efficiency. not only is this faster than scaling the wall normally but u also save up a lot of blocks since u use less blocks in order to scale the same height.

https://github.com/yvt/openspades/blob/ff9b3e71b9ad26dda940923515de8b46f4bba5a5/Sources/Client/Player.cpp#L1460-L1473

in line 1471 depth ("player height") is offset + m

when crouched offset = 0.45 and m = 0.9 however in line 1470 m is always subtracted by 0.5

so in 1471 playerBox depth (player height) when crouched is assumed to be 0.45 + 0.9 - 0.5 = 0.85 this is wrong. playerBox depth when standing is also wrong (0.9 + 1.35 - 0.5 = 1.75)

i measured the z coordinate of eye in different situations: highest point of a jump from a standing position at ground level, eye.z = 58.146641 highest point of a jump from a crouched position at ground level, eye.z = 59.041550

58.146641 + 0.85 = 58.996641 -> 58.996641 < 59 59.041550 + 0.85 = 59.891550 -> 59.891550 < 59 in both cases the hitbox doesnt extend down to 59 allowing the player to place a block inside themselve at torso height.

assuming eye is the camera position, playerBox also doesnt account for "the upper half" of the player's head since the camera is positioned at the center of the head.