using mother_fucker_valve = Vector * (__thiscall*)(void*);
inline mother_fucker_valve _yes_fuck;
void* pBuildTransformationsEntity;
Vector vecBuildTransformationsAngles;
Vector* __fastcall hkGetEyeAngles(void* ecx, void* edx)
{
static int* WantedReturnAddress1 = (int*)util::FindSignature("client.dll", crypt_str("8B 55 0C 8B C8 E8 ? ? ? ? 83 C4 08 5E 8B E5"));
static int* WantedReturnAddress2 = (int*)util::FindSignature("client.dll", crypt_str("8B CE F3 0F 10 00 8B 06 F3 0F 11 45 ? FF 90 ? ? ? ? F3 0F 10 55 ?")) ; //Update Animations X/Y
static int* WantedReturnAddress3 = (int*)util::FindSignature("client.dll", crypt_str("F3 0F 10 55 ? 51 8B 8E ? ? ? ?")); //Update Animations X/Y
static auto oGetEyeAngles = hooks::player_hook->get_func_address <mother_fucker_valve>(170);
if (_ReturnAddress() == (void*)WantedReturnAddress1 || _ReturnAddress() == (void*)WantedReturnAddress2 || _ReturnAddress() == (void*)WantedReturnAddress3)
return oGetEyeAngles(ecx);
if (!ecx || pBuildTransformationsEntity != ecx)
return oGetEyeAngles(ecx);
pBuildTransformationsEntity = nullptr;
return &vecBuildTransformationsAngles;
}
using BuildTransformations = Vector * (__thiscall*)(void*, CStudioHdr* hdr, Vector* pos, Quaternion* q, matrix3x4_t* cameraTransform, int bonemask, byte* computed);
void __fastcall hkBuildTransformations(void* ecx, void* edx, CStudioHdr* hdr, Vector* pos, Quaternion* q, matrix3x4_t* cameraTransform, int bonemask, byte* computed)
{
static auto oBuildTransformations = hooks::player_hook->get_func_address <BuildTransformations>(190);
if (ecx && ((player_t*)ecx)->EntIndex() == m_engine()->GetLocalPlayer())
{
pBuildTransformationsEntity = ecx;
vecBuildTransformationsAngles = ((player_t*)ecx)->GetRenderAngles();
}
oBuildTransformations(ecx, hdr, pos, q, cameraTransform, bonemask, computed);
pBuildTransformationsEntity = nullptr;
}