SurvivorLegsStayClose::Update
0x0095d1b0 · 3741 bytes · __thiscall
_ZN21SurvivorLegsStayClose6UpdateEP11SurvivorBotf
Decompiled
undefined (3 params)
/* SurvivorLegsStayClose::Update(SurvivorBot*, float) */
SurvivorLegsStayClose * __thiscall
SurvivorLegsStayClose::Update(SurvivorLegsStayClose *this,SurvivorBot *param_1,float param_2)
{
uint uVar1;
char cVar2;
SurvivorTeamSituation *this_00;
CBaseEntity *pCVar3;
int iVar4;
int *piVar5;
undefined4 *puVar6;
undefined4 *puVar7;
Vector *pVVar8;
CTerrorPlayer *pCVar9;
SurvivorLegsCoverFriendInCombat *this_01;
SurvivorIntention *this_02;
SurvivorLegsRetreat *pSVar10;
int iVar11;
undefined *puVar12;
CBaseCombatCharacter *pCVar13;
CBaseEntity *this_03;
longdouble lVar14;
float fVar15;
float fVar16;
float fVar17;
uint *local_20;
cVar2 = (**(code **)(*(int *)param_2 + 0x89c))(param_2);
if (cVar2 != '\0') goto LAB_0095d1ce;
this_00 = (SurvivorTeamSituation *)SurvivorBot::GetTeamSituation((SurvivorBot *)param_2);
cVar2 = SurvivorTeamSituation::IsAnyTeammateNearCheckpoint(this_00);
if (cVar2 != '\0') {
puVar6 = ::operator_new(0x68);
*(undefined4 *)this = 1;
puVar6[8] = 0;
puVar6[9] = 0;
puVar6[10] = 0;
puVar6[3] = 0;
puVar6[4] = 0;
puVar6[5] = 0;
puVar6[6] = 0;
puVar6[7] = 0;
puVar6[2] = 0;
*(undefined1 *)(puVar6 + 0xc) = 0;
*(undefined1 *)((int)puVar6 + 0x31) = 0;
puVar6[0xb] = 0;
*puVar6 = &PTR__SurvivorLegsMoveOn_00d0c388;
puVar6[1] = &PTR__SurvivorLegsMoveOn_00d0c4f0;
puVar6[0xd] = &PTR_NetworkStateChanged_00c0b6e0;
puVar6[0xe] = 0;
puVar6[0xf] = 0xbf800000;
puVar6[0x10] = &PTR_NetworkStateChanged_00c0b6e0;
puVar6[0x11] = 0;
puVar6[0x12] = 0xbf800000;
puVar6[0x13] = &PTR_NetworkStateChanged_00c0b6e0;
puVar6[0x14] = 0;
puVar6[0x15] = 0xbf800000;
puVar6[0x17] = &PTR_NetworkStateChanged_00c0b6e0;
puVar6[0x18] = 0;
puVar6[0x19] = 0xbf800000;
*(undefined4 **)(this + 4) = puVar6;
*(undefined4 *)(this + 8) = 0;
return this;
}
if (0 < *(int *)(TheDirector + 0x460)) {
if ((*(byte *)((int)param_2 + 0x14d) & 8) != 0) {
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)param_2);
}
pCVar3 = (CBaseEntity *)
CDirector::GetClosestActivePipeBomb(TheDirector,(Vector *)((int)param_2 + 0x2e0));
if (pCVar3 != (CBaseEntity *)0x0) {
lVar14 = (longdouble)SurvivorBot::GetAvoidRange((SurvivorBot *)param_2,pCVar3);
if (((byte)pCVar3[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition(pCVar3);
}
if ((*(byte *)((int)param_2 + 0x14d) & 8) != 0) {
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)param_2);
}
fVar15 = *(float *)((int)param_2 + 0x2e4) - *(float *)(pCVar3 + 0x2e4);
fVar17 = *(float *)((int)param_2 + 0x2e8) - *(float *)(pCVar3 + 0x2e8);
fVar16 = *(float *)((int)param_2 + 0x2e0) - *(float *)(pCVar3 + 0x2e0);
if (fVar15 * fVar15 + fVar17 * fVar17 + fVar16 * fVar16 <=
(float)lVar14 * 1.5 * (float)lVar14 * 1.5) {
pSVar10 = ::operator_new(0x482c);
/* try { // try from 0095d875 to 0095d879 has its CatchHandler @ 0095e0ee */
SurvivorLegsRetreat::SurvivorLegsRetreat(pSVar10,pCVar3);
*(undefined4 *)this = 2;
*(SurvivorLegsRetreat **)(this + 4) = pSVar10;
*(char **)(this + 8) = "Retreating from nearby pipe bomb!";
*(undefined4 *)(param_1 + 0x20) = 0;
*(undefined4 *)(param_1 + 0x24) = 0;
*(undefined4 *)(param_1 + 0x28) = 0;
*(undefined4 *)(param_1 + 0x2c) = 0;
return this;
}
}
}
cVar2 = CDirector::IsFinale(TheDirector);
if (cVar2 != '\0') {
piVar5 = *(int **)(TheDirector + 0x638);
if (*piVar5 == 5) {
if (((char)piVar5[0x44] != '\0') && (*(char *)((int)piVar5 + 0x111) == '\0'))
goto LAB_0095d601;
}
else if (piVar5[1] == 6) {
LAB_0095d601:
cVar2 = SurvivorBot::IsAllowedToMoveToRescueVehicle((SurvivorBot *)param_2);
if (cVar2 != '\0') {
puVar6 = ::operator_new(0x4818);
puVar6[8] = 0;
puVar6[9] = 0;
puVar6[10] = 0;
puVar6[3] = 0;
puVar6[4] = 0;
puVar6[5] = 0;
puVar6[6] = 0;
puVar6[7] = 0;
puVar6[2] = 0;
*(undefined1 *)(puVar6 + 0xc) = 0;
*(undefined1 *)((int)puVar6 + 0x31) = 0;
puVar6[0xb] = 0;
*puVar6 = &PTR__SurvivorLegsMeetRescueVehicleArrival_00d0b1e8;
puVar6[1] = &PTR__SurvivorLegsMeetRescueVehicleArrival_00d0b350;
/* try { // try from 0095d91e to 0095d922 has its CatchHandler @ 0095e085 */
PathFollower::PathFollower((PathFollower *)(puVar6 + 0xd));
*(undefined4 *)this = 1;
*(undefined4 **)(this + 4) = puVar6;
*(char **)(this + 8) = "Moving to meet the incoming rescue vehicle";
return this;
}
}
}
cVar2 = CDirector::IsFinale(TheDirector);
if (((cVar2 != '\0') && (cVar2 = CDirector::IsFinaleVehicleReady(TheDirector), cVar2 != '\0')) &&
(cVar2 = SurvivorBot::IsAllowedToMoveToRescueVehicle((SurvivorBot *)param_2), cVar2 != '\0')) {
puVar6 = ::operator_new(0x4814);
puVar6[8] = 0;
puVar6[9] = 0;
puVar6[10] = 0;
puVar6[3] = 0;
puVar6[4] = 0;
puVar6[5] = 0;
puVar6[6] = 0;
puVar6[7] = 0;
puVar6[2] = 0;
*(undefined1 *)(puVar6 + 0xc) = 0;
*(undefined1 *)((int)puVar6 + 0x31) = 0;
puVar6[0xb] = 0;
*puVar6 = &PTR__SurvivorLegsEnterRescueVehicle_00d0b388;
puVar6[1] = &PTR__SurvivorLegsEnterRescueVehicle_00d0b4f0;
/* try { // try from 0095d845 to 0095d849 has its CatchHandler @ 0095e0f0 */
PathFollower::PathFollower((PathFollower *)(puVar6 + 0xd));
*(undefined4 *)this = 1;
*(undefined4 **)(this + 4) = puVar6;
*(char **)(this + 8) = "The rescue vehicle is here!!!";
return this;
}
iVar4 = (**(code **)(*(int *)param_2 + 0x9a8))(param_2);
if (*(int *)(iVar4 + 0x70) < 1) {
local_20 = (uint *)0x0;
}
else {
local_20 = *(uint **)(iVar4 + 100);
uVar1 = *local_20;
if (((uVar1 == 0xffffffff) ||
(puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 == (undefined *)0xfffffffc)) ||
(*(uint *)(puVar12 + 8) != uVar1 >> 0xc)) {
local_20 = (uint *)0x0;
}
else if (*(int *)(puVar12 + 4) == 0) {
local_20 = (uint *)0x0;
}
}
uVar1 = *(uint *)(this_00 + 0x50);
if (((uVar1 != 0xffffffff) &&
(puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar12 + 8) == uVar1 >> 0xc &&
(((*(CTerrorPlayer **)(puVar12 + 4) != (CTerrorPlayer *)0x0 &&
(iVar4 = CTerrorPlayer::GetMovingPlatform(*(CTerrorPlayer **)(puVar12 + 4)), iVar4 != 0)) &&
(iVar11 = CTerrorPlayer::GetMovingPlatform((CTerrorPlayer *)param_2), iVar4 != iVar11)))))) {
puVar6 = ::operator_new(0x4840);
puVar6[8] = 0;
puVar6[9] = 0;
puVar6[10] = 0;
puVar6[3] = 0;
puVar6[4] = 0;
puVar6[5] = 0;
puVar6[6] = 0;
puVar6[7] = 0;
puVar6[2] = 0;
*(undefined1 *)(puVar6 + 0xc) = 0;
*(undefined1 *)((int)puVar6 + 0x31) = 0;
puVar6[0xb] = 0;
*puVar6 = &PTR__SurvivorLegsApproachElevator_00d0cba8;
puVar6[1] = &PTR__SurvivorLegsApproachElevator_00d0cd10;
/* try { // try from 0095de3d to 0095de41 has its CatchHandler @ 0095e0b5 */
PathFollower::PathFollower((PathFollower *)(puVar6 + 0xd));
puVar6[0xd] = &PTR__ChasePath_00bfaa48;
*(undefined4 *)this = 2;
puVar6[0x1205] = &PTR_NetworkStateChanged_00c0b6e0;
puVar6[0x1206] = 0;
puVar6[0x1207] = 0xbf800000;
puVar6[0x1208] = &PTR_NetworkStateChanged_00c0b6e0;
puVar6[0x1209] = 0;
puVar6[0x120a] = 0xbf800000;
puVar6[0x120b] = &PTR_NetworkStateChanged_00c0b6e0;
puVar6[0x120c] = 0;
puVar6[0x120d] = 0xbf800000;
puVar6[0x120e] = 0xffffffff;
puVar6[0x120f] = 1;
*(undefined4 **)(this + 4) = puVar6;
*(undefined4 *)(param_1 + 0x20) = 0;
*(undefined4 *)(param_1 + 0x24) = 0;
*(undefined4 *)(param_1 + 0x28) = 0;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(char **)(this + 8) = "Joining team leader on a platform";
return this;
}
if (((local_20 != (uint *)0x0) && (uVar1 = *local_20, uVar1 != 0xffffffff)) &&
(((puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc &&
((*(uint *)(puVar12 + 8) == uVar1 >> 0xc &&
(piVar5 = *(int **)(puVar12 + 4), piVar5 != (int *)0x0)))) &&
(cVar2 = (**(code **)(*piVar5 + 300))(piVar5), cVar2 != '\0')))) {
pCVar3 = (CBaseEntity *)0x0;
uVar1 = *local_20;
if (((uVar1 != 0xffffffff) &&
(puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
pCVar3 = *(CBaseEntity **)(puVar12 + 4);
}
iVar4 = CBaseEntity::GetTeamNumber(pCVar3);
if (((iVar4 == 3) && (iVar4 = (**(code **)(*(int *)pCVar3 + 0x544))(pCVar3), iVar4 == 7)) &&
(lVar14 = (longdouble)IntervalTimer::Now(), (float)lVar14 - (float)local_20[6] < 3.0)) {
piVar5 = (int *)0x0;
uVar1 = *local_20;
if (((uVar1 != 0xffffffff) &&
(puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
piVar5 = *(int **)(puVar12 + 4);
}
piVar5 = (int *)(**(code **)(*piVar5 + 0x148))(piVar5);
piVar5 = (int *)(**(code **)(*piVar5 + 0xc4))(piVar5);
cVar2 = (**(code **)(*piVar5 + 0x114))(piVar5,2);
if ((cVar2 == '\0') && (cVar2 = IsTimeOfDayBetween(2,4), cVar2 == '\0')) {
(**(code **)(*(int *)param_2 + 0x988))(param_2,0xbf800000);
}
}
pCVar13 = (CBaseCombatCharacter *)0x0;
uVar1 = *local_20;
if (((uVar1 != 0xffffffff) &&
(puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
pCVar13 = *(CBaseCombatCharacter **)(puVar12 + 4);
}
this_02 = (SurvivorIntention *)(**(code **)(*(int *)param_2 + 0x9a8))(param_2);
cVar2 = SurvivorIntention::IsImmediatelyDangerousTo(this_02,(CTerrorPlayer *)param_2,pCVar13);
if ((cVar2 != '\0') && ((char)local_20[10] != '\0')) {
uVar1 = *local_20;
pCVar3 = (CBaseEntity *)0x0;
if ((uVar1 != 0xffffffff) &&
((puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc &&
(*(uint *)(puVar12 + 8) == uVar1 >> 0xc)))) {
pCVar3 = *(CBaseEntity **)(puVar12 + 4);
}
this_03 = (CBaseEntity *)0x0;
lVar14 = (longdouble)SurvivorBot::GetAvoidRange((SurvivorBot *)param_2,pCVar3);
uVar1 = *local_20;
if (((uVar1 != 0xffffffff) &&
(puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
this_03 = *(CBaseEntity **)(puVar12 + 4);
}
if (((byte)this_03[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition(this_03);
}
if ((*(byte *)((int)param_2 + 0x14d) & 8) != 0) {
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)param_2);
}
fVar17 = *(float *)((int)param_2 + 0x2e0) - *(float *)(this_03 + 0x2e0);
fVar15 = *(float *)((int)param_2 + 0x2e4) - *(float *)(this_03 + 0x2e4);
fVar16 = *(float *)((int)param_2 + 0x2e8) - *(float *)(this_03 + 0x2e8);
if (fVar15 * fVar15 + fVar17 * fVar17 + fVar16 * fVar16 < (float)lVar14 * (float)lVar14) {
pCVar3 = (CBaseEntity *)0x0;
uVar1 = *local_20;
if (((uVar1 != 0xffffffff) &&
(puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc))
&& (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
pCVar3 = *(CBaseEntity **)(puVar12 + 4);
}
iVar4 = CBaseEntity::GetTeamNumber(pCVar3);
if (((iVar4 != 3) || (iVar4 = (**(code **)(*(int *)pCVar3 + 0x544))(pCVar3), iVar4 != 0)) ||
((cVar2 = SurvivorTeamSituation::IsAnyTeammateNearCheckpoint(this_00), cVar2 == '\0' &&
(cVar2 = CDirector::IsFinaleVehicleReady(TheDirector), cVar2 == '\0')))) {
pCVar3 = (CBaseEntity *)0x0;
uVar1 = *local_20;
if (((uVar1 != 0xffffffff) &&
(puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)
) && (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
pCVar3 = *(CBaseEntity **)(puVar12 + 4);
}
pSVar10 = ::operator_new(0x482c);
/* try { // try from 0095dcfa to 0095dcfe has its CatchHandler @ 0095e0ca */
SurvivorLegsRetreat::SurvivorLegsRetreat(pSVar10,pCVar3);
*(undefined4 *)this = 2;
*(SurvivorLegsRetreat **)(this + 4) = pSVar10;
*(char **)(this + 8) = "Retreating from dangerous threat!";
*(undefined4 *)(param_1 + 0x20) = 0;
*(undefined4 *)(param_1 + 0x24) = 0;
*(undefined4 *)(param_1 + 0x28) = 0;
*(undefined4 *)(param_1 + 0x2c) = 0;
return this;
}
}
}
}
piVar5 = (int *)(**(code **)(*(int *)param_2 + 0x9a0))(param_2);
cVar2 = (**(code **)(*piVar5 + 0x174))(piVar5);
if (cVar2 == '\0') {
uVar1 = *(uint *)(this_00 + 0x30);
if (((uVar1 != 0xffffffff) &&
(puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
(((*(uint *)(puVar12 + 8) == uVar1 >> 0xc &&
((*(CTerrorPlayer **)(puVar12 + 4) != (CTerrorPlayer *)0x0 &&
((float)*(int *)((int)param_2 + 0x2ba0) * 10.0 +
*(float *)(SurvivorBotSeparationDangerMinRange._28_4_ + 0x2c) <
*(float *)(this_00 + 0x34))))) &&
(cVar2 = SurvivorBot::IsReachable((SurvivorBot *)param_2,*(CTerrorPlayer **)(puVar12 + 4)),
cVar2 != '\0')))) {
piVar5 = (int *)0x0;
uVar1 = *(uint *)(this_00 + 0x30);
if ((uVar1 != 0xffffffff) &&
(puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) {
if (*(uint *)(puVar12 + 8) == uVar1 >> 0xc) {
piVar5 = *(int **)(puVar12 + 4);
}
else {
piVar5 = (int *)0x0;
}
}
puVar6 = ::operator_new(0x484c);
puVar6[8] = 0;
puVar6[9] = 0;
puVar6[10] = 0;
puVar6[3] = 0;
puVar6[4] = 0;
puVar6[5] = 0;
puVar6[6] = 0;
puVar6[7] = 0;
puVar6[2] = 0;
*(undefined1 *)(puVar6 + 0xc) = 0;
*(undefined1 *)((int)puVar6 + 0x31) = 0;
puVar6[0xb] = 0;
*puVar6 = &PTR__SurvivorLegsRegroup_00d0c528;
puVar6[1] = &PTR__SurvivorLegsRegroup_00d0c690;
puVar6[0xd] = 0xffffffff;
/* try { // try from 0095d50b to 0095d50f has its CatchHandler @ 0095e0b7 */
PathFollower::PathFollower((PathFollower *)(puVar6 + 0xe));
puVar6[0xe] = &PTR__ChasePath_00bfaa48;
puVar6[0x1206] = &PTR_NetworkStateChanged_00c0b6e0;
puVar6[0x1207] = 0;
puVar6[0x1208] = 0xbf800000;
puVar6[0x1209] = &PTR_NetworkStateChanged_00c0b6e0;
puVar6[0x120a] = 0;
puVar6[0x120b] = 0xbf800000;
puVar6[0x120c] = &PTR_NetworkStateChanged_00c0b6e0;
puVar6[0x120d] = 0;
puVar6[0x120e] = 0xbf800000;
puVar6[0x120f] = 0xffffffff;
puVar6[0x1210] = 1;
puVar6[0x1211] = &PTR_NetworkStateChanged_00c23e10;
puVar6[0x1212] = 0xbf800000;
if (piVar5 == (int *)0x0) {
puVar6[0xd] = 0xffffffff;
}
else {
/* try { // try from 0095d5a8 to 0095d5aa has its CatchHandler @ 0095e09f */
puVar7 = (undefined4 *)(**(code **)(*piVar5 + 0xc))(piVar5);
puVar6[0xd] = *puVar7;
}
*(undefined4 *)this = 2;
*(undefined4 **)(this + 4) = puVar6;
*(char **)(this + 8) = "I\'m too far away from the closest human survivor";
*(undefined4 *)(param_1 + 0x20) = 0;
*(undefined4 *)(param_1 + 0x24) = 0;
*(undefined4 *)(param_1 + 0x28) = 0;
*(undefined4 *)(param_1 + 0x2c) = 0;
return this;
}
cVar2 = CTerrorGameRules::IsScavengeMode();
if (((((((cVar2 == '\0') &&
(cVar2 = SurvivorBot::IsAvailable((SurvivorBot *)param_2), cVar2 != '\0')) &&
(uVar1 = *(uint *)(this_00 + 0x30), uVar1 != 0xffffffff)) &&
((puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc &&
(*(uint *)(puVar12 + 8) == uVar1 >> 0xc)))) &&
((*(CTerrorPlayer **)(puVar12 + 4) != (CTerrorPlayer *)0x0 &&
((36.0 < *(float *)(this_00 + 0x34) &&
(cVar2 = CTerrorPlayer::IsInCombat(*(CTerrorPlayer **)(puVar12 + 4),false), cVar2 != '\0'
)))))) &&
(cVar2 = CTerrorPlayer::IsInCombat((CTerrorPlayer *)param_2,false), cVar2 == '\0')) &&
((cVar2 = SurvivorTeamSituation::IsAnyTeammateNearCheckpoint(this_00), cVar2 == '\0' &&
(cVar2 = CDirector::IsFinaleVehicleReady(TheDirector), cVar2 == '\0')))) {
uVar1 = *(uint *)(this_00 + 0x30);
if ((uVar1 == 0xffffffff) ||
((puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 == (undefined *)0xfffffffc ||
(*(uint *)(puVar12 + 8) != uVar1 >> 0xc)))) {
pCVar9 = (CTerrorPlayer *)0x0;
}
else {
pCVar9 = *(CTerrorPlayer **)(puVar12 + 4);
}
cVar2 = SurvivorBot::IsReachable((SurvivorBot *)param_2,pCVar9);
if (cVar2 != '\0') {
uVar1 = *(uint *)(this_00 + 0x30);
if (((uVar1 == 0xffffffff) ||
(puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 == (undefined *)0xfffffffc))
|| (*(uint *)(puVar12 + 8) != uVar1 >> 0xc)) {
pCVar9 = (CTerrorPlayer *)0x0;
}
else {
pCVar9 = *(CTerrorPlayer **)(puVar12 + 4);
}
this_01 = ::operator_new(0x484c);
/* try { // try from 0095da85 to 0095da89 has its CatchHandler @ 0095e0dc */
SurvivorLegsCoverFriendInCombat::SurvivorLegsCoverFriendInCombat(this_01,pCVar9);
*(undefined4 *)this = 2;
*(SurvivorLegsCoverFriendInCombat **)(this + 4) = this_01;
*(char **)(this + 8) = "Moving to assist human in combat";
*(undefined4 *)(param_1 + 0x20) = 0;
*(undefined4 *)(param_1 + 0x24) = 0;
*(undefined4 *)(param_1 + 0x28) = 0;
*(undefined4 *)(param_1 + 0x2c) = 0;
return this;
}
}
}
if (*(int *)(SurvivorBotDebugTeamMovement._28_4_ + 0x30) != 0) {
piVar5 = (int *)(**(code **)(*(int *)param_2 + 0x9a0))(param_2);
cVar2 = (**(code **)(*piVar5 + 0x168))(piVar5);
if (cVar2 != '\0') {
pVVar8 = (Vector *)
(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xd4))((int)param_2 + 0x4028);
NDebugOverlay::Circle(pVVar8,10.0,0xff,0,0,0xff,true,0.1);
}
}
LAB_0095d1ce:
*(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.