SurvivorLiberateBesiegedFriend::Update
0x0091e4a0 · 5027 bytes · __thiscall
_ZN30SurvivorLiberateBesiegedFriend6UpdateEP11SurvivorBotf
Decompiled
undefined (3 params)
/* SurvivorLiberateBesiegedFriend::Update(SurvivorBot*, float) */
SurvivorLiberateBesiegedFriend * __thiscall
SurvivorLiberateBesiegedFriend::Update
(SurvivorLiberateBesiegedFriend *this,SurvivorBot *param_1,float param_2)
{
float fVar1;
code *pcVar2;
uint *puVar3;
bool bVar4;
char cVar5;
uint uVar6;
int iVar7;
int *piVar8;
SurvivorLegsApproach *pSVar9;
undefined4 *puVar10;
SurvivorIntention *pSVar11;
SurvivorLegsWait *pSVar12;
CTerrorPlayer *pCVar13;
undefined4 uVar14;
undefined *puVar15;
int *piVar16;
int iVar17;
CBaseEntity *pCVar18;
undefined *puVar19;
CBaseCombatCharacter *pCVar20;
longdouble lVar21;
uint uVar22;
CBaseEntity *local_38;
CBaseCombatCharacter *local_34;
uint *local_30;
int local_28 [6];
uVar6 = *(uint *)(param_1 + 0x34);
if ((((uVar6 == 0xffffffff) ||
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 == (undefined *)0xfffffffc)) ||
(*(uint *)(puVar15 + 8) != uVar6 >> 0xc)) ||
((piVar16 = *(int **)(puVar15 + 4), piVar16 == (int *)0x0 ||
(cVar5 = (**(code **)(*piVar16 + 300))(piVar16), cVar5 == '\0')))) {
piVar16 = *(int **)(param_1 + 0x44);
if (piVar16 != (int *)0x0) {
(**(code **)(*piVar16 + 4))(piVar16);
}
*(undefined4 *)this = 3;
*(undefined4 *)(this + 4) = 0;
*(char **)(this + 8) = "We\'re too late, they didn\'t make it";
return this;
}
uVar6 = *(uint *)(param_1 + 0x34);
pCVar13 = (CTerrorPlayer *)0x0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
pCVar13 = *(CTerrorPlayer **)(puVar15 + 4);
}
cVar5 = SurvivorBot::IsReachable((SurvivorBot *)param_2,pCVar13);
if (cVar5 == '\0') {
*(undefined4 *)this = 3;
*(undefined4 *)(this + 4) = 0;
*(char **)(this + 8) = "They are unreachable";
return this;
}
cVar5 = CDirector::IsFinaleVehicleReady(TheDirector);
if (cVar5 != '\0') {
uVar6 = *(uint *)(param_1 + 0x34);
piVar16 = (int *)0x0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
piVar16 = *(int **)(puVar15 + 4);
}
cVar5 = (**(code **)(*piVar16 + 0x778))(piVar16);
if (cVar5 != '\0') {
uVar6 = *(uint *)(param_1 + 0x34);
piVar16 = (int *)0x0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
piVar16 = *(int **)(puVar15 + 4);
}
cVar5 = (**(code **)(*piVar16 + 0x7e8))(piVar16);
if (cVar5 != '\0') {
local_28[0] = 0;
ForEachSurvivor<NumHumansInRescueVehicleScan>((NumHumansInRescueVehicleScan *)local_28);
if (0 < local_28[0]) {
*(undefined4 *)this = 3;
*(undefined4 *)(this + 4) = 0;
*(char **)(this + 8) =
"Breaking off rescue because humans have entered the rescue vehicle.\n";
return this;
}
}
}
}
cVar5 = (**(code **)(*(int *)param_2 + 0x908))(param_2,10);
if ((cVar5 == '\0') &&
(cVar5 = (**(code **)(*(int *)param_2 + 0x908))(param_2,0xb), cVar5 == '\0')) {
bVar4 = false;
LAB_0091e690:
uVar6 = *(uint *)(param_1 + 0x34);
piVar16 = (int *)0x0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
piVar16 = *(int **)(puVar15 + 4);
}
cVar5 = (**(code **)(*piVar16 + 0x7e8))(piVar16);
if (cVar5 == '\0') {
LAB_0091ec80:
uVar6 = *(uint *)(param_1 + 0x34);
}
else {
uVar6 = *(uint *)(param_1 + 0x34);
pCVar13 = (CTerrorPlayer *)0x0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
pCVar13 = *(CTerrorPlayer **)(puVar15 + 4);
}
cVar5 = CTerrorPlayer::IsDominatedBySpecialInfected(pCVar13);
if (cVar5 != '\0') goto LAB_0091ec80;
uVar6 = *(uint *)(param_1 + 0x34);
local_30 = (uint *)0x0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
local_30 = *(uint **)(puVar15 + 4);
}
if ((&DAT_000039f1)[(int)local_30] == '\0') {
if ((*(byte *)((int)param_2 + 0x14d) & 8) != 0) {
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)param_2);
uVar6 = *(uint *)(param_1 + 0x34);
}
fVar1 = *(float *)((int)param_2 + 0x2e8);
pCVar18 = (CBaseEntity *)0x0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc))
&& (*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
pCVar18 = *(CBaseEntity **)(puVar15 + 4);
}
local_34 = (CBaseCombatCharacter *)g_pEntityList;
if (((byte)pCVar18[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition(pCVar18);
local_34 = (CBaseCombatCharacter *)g_pEntityList;
uVar6 = *(uint *)(param_1 + 0x34);
}
uVar22 = -(uint)(12.0 <= fVar1 - *(float *)(pCVar18 + 0x2e8));
uVar22 = ~uVar22 & 0x42480000 | uVar22 & 0x41c00000;
goto LAB_0091e7e4;
}
}
uVar22 = 0x42480000;
local_34 = (CBaseCombatCharacter *)g_pEntityList;
}
else {
uVar6 = *(uint *)(param_1 + 0x34);
pCVar13 = (CTerrorPlayer *)0x0;
if ((uVar6 != 0xffffffff) &&
((puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)))) {
pCVar13 = *(CTerrorPlayer **)(puVar15 + 4);
}
cVar5 = CTerrorPlayer::IsDominatedBySpecialInfected(pCVar13);
if (cVar5 == '\0') {
bVar4 = true;
goto LAB_0091e690;
}
local_34 = (CBaseCombatCharacter *)g_pEntityList;
bVar4 = true;
uVar22 = 0x41c00000;
uVar6 = *(uint *)(param_1 + 0x34);
}
LAB_0091e7e4:
uVar14 = 0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = local_34 + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
uVar14 = *(undefined4 *)(puVar15 + 4);
}
iVar7 = (int)param_2 + 0x4028;
g_pEntityList = local_34;
cVar5 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0x114))(iVar7,uVar14,uVar22);
if (cVar5 != '\0') {
uVar6 = *(uint *)(param_1 + 0x34);
local_34 = (CBaseCombatCharacter *)0x0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
local_34 = *(CBaseCombatCharacter **)(puVar15 + 4);
}
uVar22 = *(uint *)((int)local_34 + 0x33c4);
if ((((uVar22 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar22 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar22 >> 0xc)) && (*(int *)(puVar15 + 4) != 0)) {
lVar21 = (longdouble)CountdownTimer::Now();
if (*(float *)(param_1 + 0x40) <= (float)lVar21) {
piVar16 = (int *)(**(code **)(*(int *)param_2 + 0x9a4))(param_2);
uVar6 = *(uint *)(param_1 + 0x34);
local_30 = (uint *)0x0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc))
&& (*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
local_30 = *(uint **)(puVar15 + 4);
}
(**(code **)(*piVar16 + 0xc4))
(piVar16,local_30,3,0x3f000000,&Update(SurvivorBot*,float)::shoveReply,
"Shoving friend off tongue",1,0x3e800000);
lVar21 = (longdouble)RandomFloat(0x3f800000,0x40000000);
fVar1 = (float)lVar21;
lVar21 = (longdouble)CountdownTimer::Now();
if ((float)lVar21 + fVar1 != *(float *)(param_1 + 0x40)) {
(**(code **)(*(int *)(param_1 + 0x38) + 4))(param_1 + 0x38,param_1 + 0x40);
*(float *)(param_1 + 0x40) = (float)lVar21 + fVar1;
}
if (fVar1 != *(float *)(param_1 + 0x3c)) {
(**(code **)(*(int *)(param_1 + 0x38) + 4))(param_1 + 0x38,param_1 + 0x3c);
*(float *)(param_1 + 0x3c) = fVar1;
}
}
uVar6 = *(uint *)(param_1 + 0x34);
}
pCVar13 = (CTerrorPlayer *)0x0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
pCVar13 = *(CTerrorPlayer **)(puVar15 + 4);
}
lVar21 = (longdouble)CTerrorPlayer::GetTimeSinceAttackedByEnemy(pCVar13);
if ((float)lVar21 <= 1.5) {
uVar6 = *(uint *)(param_1 + 0x34);
piVar16 = (int *)0x0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
piVar16 = *(int **)(puVar15 + 4);
}
cVar5 = (**(code **)(*piVar16 + 0x778))(piVar16);
if (cVar5 != '\0') goto LAB_0091ec58;
}
uVar6 = *(uint *)(param_1 + 0x34);
iVar7 = 0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
iVar7 = *(int *)(puVar15 + 4);
}
if ((&DAT_000039f1)[iVar7] == '\0') {
piVar16 = (int *)(**(code **)(*(int *)param_2 + 0x9ac))(param_2);
local_30 = (uint *)0x0;
uVar6 = *(uint *)(param_1 + 0x34);
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
local_30 = *(uint **)(puVar15 + 4);
}
cVar5 = (**(code **)(*piVar16 + 0xd0))(piVar16,local_30,1,0);
}
else {
(**(code **)(*(int *)param_2 + 0x988))(param_2,0xbf800000);
piVar8 = (int *)(**(code **)(*(int *)param_2 + 0x9ac))(param_2);
uVar6 = *(uint *)(param_1 + 0x34);
piVar16 = (int *)0x0;
pcVar2 = *(code **)(*piVar8 + 0xd4);
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
piVar16 = *(int **)(puVar15 + 4);
}
(**(code **)(*piVar16 + 0x234))(local_28,piVar16);
cVar5 = (*pcVar2)(piVar8,local_28,1);
}
if (cVar5 != '\0') {
iVar7 = *(int *)(param_1 + 0x44);
if (iVar7 != 0) {
*(undefined4 *)this = 1;
*(int *)(this + 4) = iVar7;
*(char **)(this + 8) = "Reached our besieged friend";
return this;
}
*(undefined4 *)this = 3;
*(undefined4 *)(this + 4) = 0;
*(char **)(this + 8) =
"Reached our besieged friend, and have no explicit post-liberation action";
return this;
}
goto LAB_0091ec58;
}
uVar6 = *(uint *)(param_1 + 0x34);
iVar17 = 0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
iVar17 = *(int *)(puVar15 + 4);
}
uVar22 = *(uint *)(iVar17 + 0x33c4);
if (((uVar22 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar22 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar15 + 8) == uVar22 >> 0xc && (*(int *)(puVar15 + 4) != 0)))) {
iVar17 = 0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
iVar17 = *(int *)(puVar15 + 4);
}
uVar22 = *(uint *)(iVar17 + 0x33c4);
local_38 = (CBaseEntity *)0x0;
if (((uVar22 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar22 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar22 >> 0xc)) {
local_38 = *(CBaseEntity **)(puVar15 + 4);
}
if (((byte)local_38[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition(local_38);
uVar6 = *(uint *)(param_1 + 0x34);
}
fVar1 = *(float *)(local_38 + 0x2e8);
pCVar18 = (CBaseEntity *)0x0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
pCVar18 = *(CBaseEntity **)(puVar15 + 4);
}
if (((byte)pCVar18[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition(pCVar18);
}
if (60.0 < ABS(fVar1 - *(float *)(pCVar18 + 0x2e8))) {
iVar17 = (**(code **)(*(int *)param_2 + 0x9a8))(param_2);
if (0 < *(int *)(iVar17 + 0x70)) {
puVar3 = *(uint **)(iVar17 + 100);
uVar6 = *puVar3;
if ((((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc))
&& (*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) &&
((piVar16 = *(int **)(puVar15 + 4), piVar16 != (int *)0x0 &&
(iVar17 = (**(code **)(*piVar16 + 0x544))(piVar16), 0 < iVar17)))) {
uVar6 = *puVar3;
piVar16 = (int *)0x0;
if ((uVar6 != 0xffffffff) &&
((puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc
&& (*(uint *)(puVar15 + 8) == uVar6 >> 0xc)))) {
piVar16 = *(int **)(puVar15 + 4);
}
iVar17 = (**(code **)(*piVar16 + 0x544))(piVar16);
if (iVar17 < 7) {
uVar6 = *puVar3;
pCVar18 = (CBaseEntity *)0x0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10,
puVar15 != (undefined *)0xfffffffc)) && (*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
pCVar18 = *(CBaseEntity **)(puVar15 + 4);
}
iVar17 = CBaseEntity::GetTeamNumber(pCVar18);
if ((iVar17 != 3) ||
(iVar17 = (**(code **)(*(int *)pCVar18 + 0x544))(pCVar18), iVar17 != 1))
goto LAB_0091ec58;
}
}
}
if ((*(int *)(TheDirector + 0x1c0) < 1) && (*(int *)(TheDirector + 0x1bc) < 1)) {
lVar21 = (longdouble)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0x138))(iVar7,local_38);
if ((((float)lVar21 <= 600.0) &&
(cVar5 = CTerrorPlayer::IsBeingHeroic((CTerrorPlayer *)param_2), cVar5 != '\0')) &&
(!bVar4)) {
pSVar12 = ::operator_new(0x44);
/* try { // try from 0091f7fb to 0091f7ff has its CatchHandler @ 0091f8cd */
SurvivorLegsWait::SurvivorLegsWait(pSVar12,0.0);
pSVar11 = (SurvivorIntention *)(**(code **)(*(int *)param_2 + 0x9a8))(param_2);
SurvivorIntention::ChangeLegs(pSVar11,(Action *)pSVar12);
param_1[0x48] = (SurvivorBot)0x0;
piVar16 = (int *)(**(code **)(*(int *)param_2 + 0x9ac))(param_2);
cVar5 = (**(code **)(*piVar16 + 0xd0))(piVar16,local_38,1,0);
if (cVar5 == '\0') goto LAB_0091ec58;
}
piVar16 = (int *)(**(code **)(*(int *)param_2 + 0x9a4))(param_2);
(**(code **)(*piVar16 + 0xc4))
(piVar16,local_38,3,0x3f000000,0,"Want to shoot the smoker holding my friend!",1,
0x3e800000);
}
}
goto LAB_0091ec58;
}
uVar14 = 0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
uVar14 = *(undefined4 *)(puVar15 + 4);
}
cVar5 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0x114))(iVar7,uVar14,0x43960000);
if (cVar5 != '\0') {
piVar16 = (int *)(**(code **)(*(int *)param_2 + 0x9ac))(param_2);
local_30 = (uint *)0x0;
uVar6 = *(uint *)(param_1 + 0x34);
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
local_30 = *(uint **)(puVar15 + 4);
}
cVar5 = (**(code **)(*piVar16 + 0xd0))(piVar16,local_30,1,0);
if (cVar5 != '\0') {
iVar7 = (**(code **)(*(int *)param_2 + 0x9a8))(param_2);
if (*(int *)(iVar7 + 0x70) < 1) {
local_30 = (uint *)0x0;
LAB_0091f298:
puVar15 = g_pEntityList;
if (param_1[0x48] == (SurvivorBot)0x0) {
uVar6 = *(uint *)(param_1 + 0x34);
pCVar18 = (CBaseEntity *)0x0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)
) && (*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
pCVar18 = *(CBaseEntity **)(puVar15 + 4);
}
pSVar9 = ::operator_new(0x9050);
/* try { // try from 0091f2e2 to 0091f2e6 has its CatchHandler @ 0091f8b8 */
SurvivorLegsApproach::SurvivorLegsApproach(pSVar9,pCVar18);
iVar7 = (**(code **)(*(int *)param_2 + 0x9a8))(param_2);
piVar16 = *(int **)(iVar7 + 0x20 + *(int *)(iVar7 + 0x60) * 4);
puVar10 = ::operator_new(0x38);
*puVar10 = &PTR__Behavior_00d00308;
puVar10[1] = &PTR__Behavior_00d003d0;
/* try { // try from 0091f333 to 0091f337 has its CatchHandler @ 0091f896 */
CFmtStrN<32>::CFmtStrN((CFmtStrN<32> *)(puVar10 + 3),"%s",&DAT_00d539c2);
puVar10[2] = pSVar9;
*(undefined4 **)(iVar7 + 0x20 + *(int *)(iVar7 + 0x60) * 4) = puVar10;
if (piVar16 != (int *)0x0) {
(**(code **)(*piVar16 + 4))(piVar16);
}
puVar15 = g_pEntityList;
param_1[0x48] = (SurvivorBot)0x1;
}
if (local_30 != (uint *)0x0) goto LAB_0091f36e;
}
else {
local_30 = *(uint **)(iVar7 + 100);
uVar6 = *local_30;
if (((uVar6 == 0xffffffff) ||
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 == (undefined *)0xfffffffc))
|| ((*(uint *)(puVar15 + 8) != uVar6 >> 0xc || (*(int *)(puVar15 + 4) == 0)))) {
local_30 = (uint *)0x0;
goto LAB_0091f298;
}
if ((char)local_30[10] == '\0') goto LAB_0091f298;
piVar16 = (int *)(**(code **)(*(int *)param_2 + 0x9a4))(param_2);
uVar6 = *local_30;
uVar14 = 0;
if ((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) {
if (*(uint *)(puVar15 + 8) == uVar6 >> 0xc) {
uVar14 = *(undefined4 *)(puVar15 + 4);
}
else {
uVar14 = 0;
}
}
(**(code **)(*piVar16 + 0xc4))
(piVar16,uVar14,3,0x3f000000,0,"Trying to face the infected that has my friend",1,
0x3e800000);
puVar15 = g_pEntityList;
if (((param_1[0x48] != (SurvivorBot)0x0) &&
(lVar21 = (longdouble)
CTerrorPlayer::GetTimeSinceLastFiredWeapon((CTerrorPlayer *)param_2),
puVar15 = g_pEntityList, (float)lVar21 < 1.0)) &&
((cVar5 = CTerrorPlayer::IsBeingHeroic((CTerrorPlayer *)param_2), puVar15 = g_pEntityList
, cVar5 == '\0' && (!bVar4)))) {
pSVar12 = ::operator_new(0x44);
/* try { // try from 0091f78a to 0091f78e has its CatchHandler @ 0091f8df */
SurvivorLegsWait::SurvivorLegsWait(pSVar12,0.0);
pSVar11 = (SurvivorIntention *)(**(code **)(*(int *)param_2 + 0x9a8))(param_2);
SurvivorIntention::ChangeLegs(pSVar11,(Action *)pSVar12);
param_1[0x48] = (SurvivorBot)0x0;
puVar15 = g_pEntityList;
}
LAB_0091f36e:
local_34 = (CBaseCombatCharacter *)0x0;
uVar6 = *local_30;
if (((uVar6 != 0xffffffff) &&
(puVar19 = puVar15 + (uVar6 & 0xfff) * 0x10, puVar19 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar19 + 8) == uVar6 >> 0xc)) {
local_34 = *(CBaseCombatCharacter **)(puVar19 + 4);
}
uVar6 = *(uint *)(param_1 + 0x34);
pCVar13 = (CTerrorPlayer *)0x0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = puVar15 + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
pCVar13 = *(CTerrorPlayer **)(puVar15 + 4);
}
pSVar11 = (SurvivorIntention *)(**(code **)(*(int *)param_2 + 0x9a8))(param_2);
cVar5 = SurvivorIntention::IsImmediatelyDangerousTo(pSVar11,pCVar13,local_34);
if (cVar5 != '\0') goto LAB_0091ec58;
pCVar20 = (CBaseCombatCharacter *)0x0;
uVar6 = *local_30;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc))
&& (*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
pCVar20 = *(CBaseCombatCharacter **)(puVar15 + 4);
}
pSVar11 = (SurvivorIntention *)(**(code **)(*(int *)param_2 + 0x9a8))(param_2);
cVar5 = SurvivorIntention::IsImmediatelyDangerousTo
(pSVar11,(CTerrorPlayer *)param_2,pCVar20);
puVar15 = g_pEntityList;
if (cVar5 != '\0') goto LAB_0091ec58;
}
uVar6 = *(uint *)(param_1 + 0x34);
pCVar13 = (CTerrorPlayer *)0x0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = puVar15 + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
pCVar13 = *(CTerrorPlayer **)(puVar15 + 4);
}
lVar21 = (longdouble)CTerrorPlayer::GetTimeSinceAttackedByEnemy(pCVar13);
if (1.5 < (float)lVar21) {
iVar7 = *(int *)(param_1 + 0x44);
if (iVar7 == 0) {
*(undefined4 *)this = 3;
*(undefined4 *)(this + 4) = 0;
*(char **)(this + 8) =
"I don\'t see any enemies attacking my friend, and have no explicit post-liberation action"
;
}
else {
*(undefined4 *)this = 1;
*(int *)(this + 4) = iVar7;
*(char **)(this + 8) = "I don\'t see any enemies attacking my friend";
}
return this;
}
goto LAB_0091ec58;
}
}
if (param_1[0x48] == (SurvivorBot)0x0) {
uVar6 = *(uint *)(param_1 + 0x34);
pCVar18 = (CBaseEntity *)0x0;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar6 >> 0xc)) {
pCVar18 = *(CBaseEntity **)(puVar15 + 4);
}
pSVar9 = ::operator_new(0x9050);
/* try { // try from 0091f0b6 to 0091f0ba has its CatchHandler @ 0091f8e8 */
SurvivorLegsApproach::SurvivorLegsApproach(pSVar9,pCVar18);
iVar7 = (**(code **)(*(int *)param_2 + 0x9a8))(param_2);
piVar16 = *(int **)(iVar7 + 0x20 + *(int *)(iVar7 + 0x60) * 4);
puVar10 = ::operator_new(0x38);
*puVar10 = &PTR__Behavior_00d00308;
puVar10[1] = &PTR__Behavior_00d003d0;
/* try { // try from 0091f107 to 0091f10b has its CatchHandler @ 0091f8e1 */
CFmtStrN<32>::CFmtStrN((CFmtStrN<32> *)(puVar10 + 3),"%s",&DAT_00d539c2);
puVar10[2] = pSVar9;
*(undefined4 **)(iVar7 + 0x20 + *(int *)(iVar7 + 0x60) * 4) = puVar10;
if (piVar16 != (int *)0x0) {
(**(code **)(*piVar16 + 4))(piVar16);
}
param_1[0x48] = (SurvivorBot)0x1;
}
else {
iVar7 = (**(code **)(*(int *)param_2 + 0x9a8))(param_2);
if (0 < *(int *)(iVar7 + 0x70)) {
puVar3 = *(uint **)(iVar7 + 100);
uVar6 = *puVar3;
if (((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar15 + 8) == uVar6 >> 0xc &&
((*(int *)(puVar15 + 4) != 0 && ((char)puVar3[10] != '\0')))))) {
piVar16 = (int *)(**(code **)(*(int *)param_2 + 0x9a4))(param_2);
uVar6 = *puVar3;
uVar14 = 0;
if ((uVar6 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar6 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) {
if (*(uint *)(puVar15 + 8) == uVar6 >> 0xc) {
uVar14 = *(undefined4 *)(puVar15 + 4);
}
else {
uVar14 = 0;
}
}
(**(code **)(*piVar16 + 0xc4))
(piVar16,uVar14,3,0x3f000000,0,"Trying to face the infected that has my friend",1,
0x3e800000);
}
}
}
LAB_0091ec58:
*(undefined4 *)this = 0;
*(undefined4 *)(this + 4) = 0;
*(undefined4 *)(this + 8) = 0;
return this;
}
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.