CTerrorPlayerAnimState::DoAnimationEvent
0x005182d0 · 2720 bytes · __thiscall
_ZN22CTerrorPlayerAnimState16DoAnimationEventE17PlayerAnimEvent_ti
Decompiled
undefined (3 params)
/* CTerrorPlayerAnimState::DoAnimationEvent(PlayerAnimEvent_t, int) */
void __thiscall
CTerrorPlayerAnimState::DoAnimationEvent(CTerrorPlayerAnimState *param_1,int param_2,int param_3)
{
code *pcVar1;
CBaseEntity *pCVar2;
char cVar3;
undefined4 uVar4;
int iVar5;
int iVar6;
int *piVar7;
uint uVar8;
CBaseCombatCharacter *pCVar9;
undefined *puVar10;
bool bVar11;
bool bVar12;
cVar3 = CTerrorGameRules::IsInIntro(g_pGameRules);
if (cVar3 != '\0') {
return;
}
pcVar1 = *(code **)(*(int *)param_1 + 0x1c);
uVar4 = CMultiPlayerAnimState::GetMainActivity((CMultiPlayerAnimState *)param_1);
iVar5 = (*pcVar1)(param_1,uVar4);
bVar11 = iVar5 != 0xc;
bVar12 = iVar5 != 0x2d;
switch(param_2) {
case 4:
case 5:
case 6:
case 0x26:
if (param_1[0x156] != (CTerrorPlayerAnimState)0x0) {
return;
}
piVar7 = (int *)CCSPlayer::GetActiveCSWeapon(*(CCSPlayer **)(param_1 + 0x118));
iVar5 = (**(code **)(*piVar7 + 0x61c))(piVar7,param_2,iVar5);
goto LAB_005183a8;
case 7:
param_1[0xf8] = (CTerrorPlayerAnimState)0x1;
break;
case 8:
pCVar2 = *(CBaseEntity **)(param_1 + 0x118);
iVar5 = CBaseEntity::GetTeamNumber(pCVar2);
if (((iVar5 == 3) && (iVar5 = (**(code **)(*(int *)pCVar2 + 0x544))(pCVar2), iVar5 == 3)) &&
(param_3 == 1)) {
CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,2,0x2e5,0);
}
else {
iVar5 = CBaseEntity::GetTeamNumber(*(CBaseEntity **)(param_1 + 0x118));
cVar3 = IsASurvivorTeam(iVar5);
if (cVar3 != '\0') {
CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,2,0x296,0);
}
}
break;
default:
CMultiPlayerAnimState::DoAnimationEvent();
return;
case 10:
param_1[0x155] = (CTerrorPlayerAnimState)0x1;
break;
case 0x12:
goto switchD_00518338_caseD_12;
case 0x20:
case 0x42:
cVar3 = CMultiPlayerAnimState::IsGestureSlotActive((CMultiPlayerAnimState *)param_1,0);
if (cVar3 == '\0') {
CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,0,param_3,0);
}
break;
case 0x21:
case 0x22:
case 0x23:
case 0x24:
case 0x25:
case 0x28:
case 0x29:
iVar6 = CBaseEntity::GetTeamNumber(*(CBaseEntity **)(param_1 + 0x118));
if (iVar6 != 3) {
if ((*(CCSPlayer **)(param_1 + 0x118))[0x33bd] != (CCSPlayer)0x0) {
return;
}
piVar7 = (int *)CCSPlayer::GetActiveCSWeapon(*(CCSPlayer **)(param_1 + 0x118));
iVar5 = (**(code **)(*piVar7 + 0x618))(piVar7,param_2,iVar5);
goto joined_r0x0051882a;
}
if (param_2 == 0x22) {
cVar3 = CBaseCombatCharacter::IsA(*(CBaseCombatCharacter **)(param_1 + 0x118),8);
iVar5 = 0x2fb;
if (cVar3 == '\0') goto LAB_00518ab2;
}
else if (param_2 == 0x29) {
cVar3 = CBaseCombatCharacter::IsA(*(CBaseCombatCharacter **)(param_1 + 0x118),1);
if ((cVar3 == '\0') &&
(cVar3 = CBaseCombatCharacter::IsA(*(CBaseCombatCharacter **)(param_1 + 0x118),2),
cVar3 == '\0')) {
return;
}
iVar5 = 0x2b7;
}
else {
LAB_00518ab2:
cVar3 = CBaseCombatCharacter::IsA(*(CBaseCombatCharacter **)(param_1 + 0x118),8);
iVar5 = (-(uint)(cVar3 == '\0') & 0xffffff4f) + 0x316;
}
goto LAB_005183a8;
case 0x27:
param_1[0x163] = (CTerrorPlayerAnimState)0x1;
break;
case 0x2a:
case 0x2b:
case 0x2c:
case 0x2d:
uVar8 = -(uint)(bVar11 && bVar12);
if (param_2 == 0x2c) {
iVar5 = (uVar8 & 0xfffffffd) + 0x225;
}
else if (param_2 == 0x2d) {
iVar5 = uVar8 + 0x227;
}
else if (param_2 == 0x2b) {
iVar5 = (uVar8 & 0xfffffffd) + 0x224;
}
else {
iVar5 = (uVar8 & 0xfffffffd) + 0x223;
}
goto LAB_005183d3;
case 0x2e:
case 0x36:
case 0x38:
if (param_1[0x156] == (CTerrorPlayerAnimState)0x0) {
return;
}
param_1[0x156] = (CTerrorPlayerAnimState)0x0;
goto switchD_00518338_caseD_12;
case 0x32:
iVar5 = 0x22c - (uint)(bVar11 && bVar12);
LAB_005183d3:
param_1[0x156] = (CTerrorPlayerAnimState)0x1;
goto LAB_005183a8;
case 0x33:
param_1[0x157] = (CTerrorPlayerAnimState)0x1;
break;
case 0x34:
param_1[0x156] = (CTerrorPlayerAnimState)0x1;
iVar5 = 0x230 - (uint)(bVar11 && bVar12);
goto LAB_005183a8;
case 0x35:
param_1[0x156] = (CTerrorPlayerAnimState)0x1;
CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,0,0x231,0);
break;
case 0x37:
param_1[0x156] = (CTerrorPlayerAnimState)0x1;
CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,0,0x232,0);
break;
case 0x39:
case 0x3a:
pCVar2 = *(CBaseEntity **)(param_1 + 0x118);
if (((pCVar2 != (CBaseEntity *)0x0) && (iVar5 = CBaseEntity::GetTeamNumber(pCVar2), iVar5 == 3))
&& (iVar5 = (**(code **)(*(int *)pCVar2 + 0x544))(pCVar2), iVar5 == 8)) {
cVar3 = (**(code **)(**(int **)(param_1 + 0x118) + 0x7e8))(*(int **)(param_1 + 0x118));
if (cVar3 != '\0') {
return;
}
iVar5 = CMultiPlayerAnimState::GetGestureSlotActivity((CMultiPlayerAnimState *)param_1,0);
if (iVar5 == 0x2fb) {
return;
}
iVar5 = CMultiPlayerAnimState::GetGestureSlotActivity((CMultiPlayerAnimState *)param_1,4);
if (iVar5 == 0x26e) {
return;
}
iVar5 = CMultiPlayerAnimState::GetGestureSlotActivity((CMultiPlayerAnimState *)param_1,4);
if (iVar5 == 0x26d) {
return;
}
iVar5 = CMultiPlayerAnimState::GetGestureSlotActivity((CMultiPlayerAnimState *)param_1,4);
if (iVar5 == 0x26f) {
return;
}
iVar5 = CMultiPlayerAnimState::GetGestureSlotActivity((CMultiPlayerAnimState *)param_1,4);
if (iVar5 == 0x270) {
return;
}
}
cVar3 = CMultiPlayerAnimState::IsGestureSlotActive((CMultiPlayerAnimState *)param_1,4);
if ((cVar3 != '\0') &&
(iVar5 = CMultiPlayerAnimState::GetGestureAnimLayer((CMultiPlayerAnimState *)param_1,4),
*(float *)(iVar5 + 0xc) <= 0.5 && *(float *)(iVar5 + 0xc) != 0.5)) {
return;
}
if (param_1[0x166] != (CTerrorPlayerAnimState)0x0) {
return;
}
pCVar2 = *(CBaseEntity **)(param_1 + 0x118);
iVar5 = CBaseEntity::GetTeamNumber(pCVar2);
if (iVar5 == 3) {
iVar5 = (**(code **)(*(int *)pCVar2 + 0x544))(pCVar2);
pCVar9 = *(CBaseCombatCharacter **)(param_1 + 0x118);
if ((iVar5 != 3) || (pCVar9[0x1a90] == (CBaseCombatCharacter)0x0)) goto LAB_005186d9;
if (6 < *(int *)(pCVar9 + 0x1838) - 1U) {
return;
}
uVar8 = 1 << ((byte)(*(int *)(pCVar9 + 0x1838) - 1U) & 0x1f);
if ((uVar8 & 0x50) == 0) {
if ((uVar8 & 0x28) == 0) {
if ((uVar8 & 7) == 0) {
return;
}
iVar5 = (param_2 != 0x39) + 0x7f;
}
else {
iVar5 = 0x81;
}
}
else {
iVar5 = 0x82;
}
}
else {
pCVar9 = *(CBaseCombatCharacter **)(param_1 + 0x118);
LAB_005186d9:
iVar5 = 0x2b6;
if (pCVar9[0x39f1] == (CBaseCombatCharacter)0x0) {
cVar3 = CBaseCombatCharacter::IsA(pCVar9,8);
if (cVar3 == '\0') {
iVar5 = 0x2b5;
}
else {
switch(*(undefined4 *)(*(int *)(param_1 + 0x118) + 0x1838)) {
case 1:
case 2:
iVar5 = 0x75;
break;
case 3:
case 6:
case 7:
iVar5 = 0x76;
break;
case 4:
iVar5 = 0x77;
break;
case 5:
iVar5 = 0x78;
break;
default:
goto switchD_00518d16_default;
}
}
}
}
CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,4,iVar5,0);
break;
case 0x3b:
iVar6 = CCSPlayer::GetActiveCSWeapon(*(CCSPlayer **)(param_1 + 0x118));
if ((iVar6 != 0) &&
(piVar7 = (int *)__dynamic_cast(iVar6,&CWeaponCSBase::typeinfo,&CBaseCSGrenade::typeinfo,0),
piVar7 != (int *)0x0)) {
uVar4 = (**(code **)(*piVar7 + 0x700))(piVar7,iVar5);
CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,1,uVar4,0);
}
break;
case 0x3d:
iVar6 = CCSPlayer::GetActiveCSWeapon(*(CCSPlayer **)(param_1 + 0x118));
if (iVar6 == 0) {
return;
}
piVar7 = (int *)__dynamic_cast(iVar6,&CWeaponCSBase::typeinfo,&CBaseCSGrenade::typeinfo,0);
if (piVar7 == (int *)0x0) {
return;
}
iVar5 = (**(code **)(*piVar7 + 0x704))(piVar7,iVar5);
goto LAB_005183a8;
case 0x3f:
param_2 = 1;
goto LAB_0051835e;
case 0x40:
CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,0,699,0);
break;
case 0x41:
piVar7 = (int *)CCSPlayer::GetActiveCSWeapon(*(CCSPlayer **)(param_1 + 0x118));
if (piVar7 == (int *)0x0) {
return;
}
pcVar1 = *(code **)(*(int *)param_1 + 0x1c);
uVar4 = CMultiPlayerAnimState::GetMainActivity((CMultiPlayerAnimState *)param_1);
uVar4 = (*pcVar1)(param_1,uVar4);
iVar5 = (**(code **)(*piVar7 + 0x620))(piVar7,param_2,uVar4);
joined_r0x0051882a:
if (iVar5 == -1) {
return;
}
LAB_005183a8:
CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,0,iVar5,0);
break;
case 0x44:
CMultiPlayerAnimState::StopAllGestures((CMultiPlayerAnimState *)param_1);
uVar8 = *(uint *)(*(int *)(param_1 + 0x118) + 0x3e64);
if ((((uVar8 != 0xffffffff) &&
(puVar10 = g_pEntityList + (uVar8 & 0xfff) * 0x10, puVar10 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar10 + 8) == uVar8 >> 0xc)) && (*(int *)(puVar10 + 4) != 0)) {
param_3 = param_3 + 4;
}
*(int *)(param_1 + 0x17c) = param_3;
break;
case 0x45:
*(undefined4 *)(param_1 + 0x17c) = 0xffffffff;
break;
case 0x46:
param_1[0x160] = (CTerrorPlayerAnimState)0x1;
break;
case 0x47:
param_1[0x168] = (CTerrorPlayerAnimState)0x1;
break;
case 0x48:
param_1[0x168] = (CTerrorPlayerAnimState)0x0;
break;
case 0x49:
param_1[0x169] = (CTerrorPlayerAnimState)0x1;
break;
case 0x4a:
param_1[0x169] = (CTerrorPlayerAnimState)0x0;
param_1[0x16a] = (CTerrorPlayerAnimState)0x1;
break;
case 0x4b:
CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,0,0x218,0);
break;
case 0x4c:
CTerrorPlayer::CancelStagger(*(CTerrorPlayer **)(param_1 + 0x118));
param_1[0x15e] = (CTerrorPlayerAnimState)0x0;
param_1[0x158] = (CTerrorPlayerAnimState)0x1;
break;
case 0x4d:
CTerrorPlayer::CancelStagger(*(CTerrorPlayer **)(param_1 + 0x118));
CMultiPlayerAnimState::StopAllGestures((CMultiPlayerAnimState *)param_1);
(**(code **)(*(int *)param_1 + 0x38))(param_1);
param_1[0x159] = (CTerrorPlayerAnimState)0x1;
param_1[0x15c] = (CTerrorPlayerAnimState)0x0;
param_1[0x158] = (CTerrorPlayerAnimState)0x0;
break;
case 0x4e:
CTerrorPlayer::CancelStagger(*(CTerrorPlayer **)(param_1 + 0x118));
CMultiPlayerAnimState::StopAllGestures((CMultiPlayerAnimState *)param_1);
param_1[0x159] = (CTerrorPlayerAnimState)0x0;
param_1[0x15c] = (CTerrorPlayerAnimState)0x0;
param_1[0x15d] = (CTerrorPlayerAnimState)0x1;
param_1[0x158] = (CTerrorPlayerAnimState)0x0;
param_1[0x15a] = (CTerrorPlayerAnimState)0x0;
param_1[0x15b] = (CTerrorPlayerAnimState)0x0;
break;
case 0x4f:
CTerrorPlayer::CancelStagger(*(CTerrorPlayer **)(param_1 + 0x118));
param_1[0x15e] = (CTerrorPlayerAnimState)0x1;
break;
case 0x50:
*(undefined4 *)(param_1 + 0x17c) = 0xffffffff;
param_1[0x15a] = (CTerrorPlayerAnimState)0x1;
break;
case 0x51:
param_1[0x15b] = (CTerrorPlayerAnimState)0x1;
break;
case 0x52:
param_1[0x164] = (CTerrorPlayerAnimState)0x1;
break;
case 0x54:
param_1[0x165] = (CTerrorPlayerAnimState)0x1;
break;
case 0x55:
CTerrorPlayer::CancelStagger(*(CTerrorPlayer **)(param_1 + 0x118));
param_1[0x166] = (CTerrorPlayerAnimState)0x1;
break;
case 0x56:
CTerrorPlayer::CancelStagger(*(CTerrorPlayer **)(param_1 + 0x118));
param_1[0x161] = (CTerrorPlayerAnimState)0x1;
break;
case 0x57:
CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,0,0x2ed,0);
break;
case 0x58:
param_1[0x167] = (CTerrorPlayerAnimState)0x1;
param_1[0x16b] = (CTerrorPlayerAnimState)0x0;
param_1[0x16c] = (CTerrorPlayerAnimState)0x0;
break;
case 0x59:
param_1[0x167] = (CTerrorPlayerAnimState)0x1;
param_1[0x16b] = (CTerrorPlayerAnimState)0x1;
param_1[0x16c] = (CTerrorPlayerAnimState)0x0;
break;
case 0x5a:
param_1[0x167] = (CTerrorPlayerAnimState)0x1;
param_1[0x16b] = (CTerrorPlayerAnimState)0x0;
param_1[0x16c] = (CTerrorPlayerAnimState)0x1;
break;
case 0x5b:
param_1[0x167] = (CTerrorPlayerAnimState)0x0;
param_1[0x16b] = (CTerrorPlayerAnimState)0x0;
param_1[0x16c] = (CTerrorPlayerAnimState)0x0;
break;
case 0x5c:
CTerrorPlayer::CancelStagger(*(CTerrorPlayer **)(param_1 + 0x118));
param_1[0x162] = (CTerrorPlayerAnimState)0x1;
break;
case 0x5d:
*(int *)(param_1 + 0x170) = param_3;
break;
case 0x5e:
*(int *)(param_1 + 0x174) = param_3;
break;
case 0x5f:
*(int *)(param_1 + 0x178) = param_3;
break;
case 0x60:
param_1[0x15f] = (CTerrorPlayerAnimState)0x1;
param_1[0x161] = (CTerrorPlayerAnimState)0x0;
break;
case 0x62:
iVar5 = CBaseEntity::GetTeamNumber(*(CBaseEntity **)(param_1 + 0x118));
cVar3 = IsASurvivorTeam(iVar5);
if (cVar3 != '\0') {
CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,4,0x243,0);
}
}
switchD_00518d16_default:
return;
switchD_00518338_caseD_12:
param_2 = 0;
LAB_0051835e:
CMultiPlayerAnimState::StopGesture((CMultiPlayerAnimState *)param_1,param_2,0.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.