CTerrorPlayer::UpdateAirMovementResponsibility
0x009fe240 · 523 bytes · __thiscall
_ZN13CTerrorPlayer31UpdateAirMovementResponsibilityEv
Decompiled
undefined (1 param)
/* CTerrorPlayer::UpdateAirMovementResponsibility() */
void __thiscall CTerrorPlayer::UpdateAirMovementResponsibility(CTerrorPlayer *this)
{
undefined4 uVar1;
undefined4 uVar2;
float fVar3;
CTerrorPlayer CVar4;
float fVar5;
uint uVar6;
code *pcVar7;
char cVar8;
int iVar9;
undefined *puVar10;
int *piVar11;
undefined4 uVar12;
CBaseCombatCharacter *pCVar13;
longdouble lVar14;
if ((this[0x3f48] == (CTerrorPlayer)0x0) ||
(iVar9 = CBaseEntity::GetGroundEntity((CBaseEntity *)this), iVar9 == 0)) {
iVar9 = CBaseEntity::GetGroundEntity((CBaseEntity *)this);
if (((iVar9 != 0) && (0.0 < *(float *)(this + 0x32a4))) &&
(lVar14 = (longdouble)CountdownTimer::Now(), *(float *)(this + 0x32a4) <= (float)lVar14)) {
SetResponsibleForAirMovement(this,(CBaseCombatCharacter *)0x0);
}
CVar4 = this[0x14d];
}
else {
uVar6 = *(uint *)(this + 0x32a8);
pCVar13 = (CBaseCombatCharacter *)0x0;
if ((uVar6 != 0xffffffff) &&
((puVar10 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar10 != (undefined *)0xfffffffc &&
(*(uint *)(puVar10 + 8) == uVar6 >> 0xc)))) {
pCVar13 = *(CBaseCombatCharacter **)(puVar10 + 4);
}
SetResponsibleForAirMovement(this,pCVar13);
CVar4 = this[0x14d];
}
if (((byte)CVar4 & 0x10) != 0) {
CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)this);
}
uVar1 = *(undefined4 *)(this + 0x274);
uVar2 = *(undefined4 *)(this + 0x278);
fVar3 = *(float *)(this + 0x27c);
fVar5 = *(float *)(this + 0x3f44);
cVar8 = (**(code **)(*(int *)this + 300))(this);
if ((((cVar8 != '\0') && (iVar9 = CBaseEntity::GetGroundEntity((CBaseEntity *)this), iVar9 == 0))
&& ((0.0 <= fVar5 && ((fVar3 <= 0.0 && (this[0x39f1] == (CTerrorPlayer)0x0)))))) &&
(piVar11 = (int *)(**(code **)(*gameeventmanager + 0x1c))
(gameeventmanager,"player_jump_apex",0,0), piVar11 != (int *)0x0))
{
pcVar7 = *(code **)(*piVar11 + 0x30);
uVar12 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(this + 0x30));
(*pcVar7)(piVar11,"userid",uVar12);
(**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar11,0);
}
*(undefined4 *)(this + 0x3f3c) = uVar1;
*(undefined4 *)(this + 0x3f40) = uVar2;
*(float *)(this + 0x3f44) = fVar3;
iVar9 = CBaseEntity::GetGroundEntity((CBaseEntity *)this);
this[0x3f48] = (CTerrorPlayer)(iVar9 == 0);
return;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)
Just a Signatures{} block, ready to drop into a gamedata
file. Wire it up in your plugin however you like - SDKCall, DHooks,
raw memory ops, or anything else.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.