Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. # "Bad SetLocalAngles(...) fix" by Kirill (iPlayer) Mysnik
  2. # Source.Python forums thread: https://forums.sourcepython.com/viewtopic.php?f=7&t=1058
  3.  
  4. from core import GAME_NAME, PLATFORM
  5. from mathlib import QAngle
  6. from memory import Convention, DataType, find_binary, make_object
  7. from memory.hooks import PreHook
  8.  
  9.  
  10. if GAME_NAME == 'csgo':
  11.     srv_check = False
  12.     if PLATFORM == 'windows':
  13.         SET_LOCAL_ANGLES_IDENTIFIER = b'\x55\x8B\xEC\x83\xE4\xC0\x83\xEC\x34\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x53\x2A\x2A\x2A\x56\x57'
  14.     else:
  15.         SET_LOCAL_ANGLES_IDENTIFIER = b'\x55\x89\xE5\x56\x53\x83\xEC\x20\x8B\x5D\x0C\xF3\x0F\x10\x15\x2A\x2A\x2A\x2A'
  16. else:
  17.     srv_check = True
  18.     if PLATFORM == 'windows':
  19.         SET_LOCAL_ANGLES_IDENTIFIER = b'\x55\x8B\xEC\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x83\xEC\x10\x0F\x28\xC1'
  20.     else:
  21.         SET_LOCAL_ANGLES_IDENTIFIER = '_ZN11CBaseEntity14SetLocalAnglesERK6QAngle'
  22.  
  23. server = find_binary('server', srv_check=srv_check)
  24.  
  25. # void CBaseEntity::SetLocalAngles( const QAngle& angles )
  26. set_local_angles = server[SET_LOCAL_ANGLES_IDENTIFIER].make_function(
  27.     Convention.THISCALL,
  28.     (DataType.POINTER, DataType.POINTER),
  29.     DataType.VOID
  30. )
  31.  
  32.  
  33. @PreHook(set_local_angles)
  34. def pre_set_local_angles(args):
  35.     angle = make_object(QAngle, args[1])
  36.     angle.x = (angle.x % 360 - 360) if angle.x < 0 else (angle.x % 360)
  37.     angle.y = (angle.y % 360 - 360) if angle.y < 0 else (angle.y % 360)
  38.     angle.z = (angle.z % 360 - 360) if angle.z < 0 else (angle.z % 360)