ChargerAttack::Update
0x00a89650 · 5842 bytes · __thiscall
_ZN13ChargerAttack6UpdateEP7Chargerf
Decompiled
undefined (3 params)
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* ChargerAttack::Update(Charger*, float) */
ChargerAttack * __thiscall ChargerAttack::Update(ChargerAttack *this,Charger *param_1,float param_2)
{
Charger *pCVar1;
uint uVar2;
code *pcVar3;
bool bVar4;
char cVar5;
Charger CVar6;
int *piVar7;
int *piVar8;
int *piVar9;
uint *puVar10;
CBaseEntity *pCVar11;
int iVar12;
int iVar13;
CNavArea *this_00;
undefined4 *puVar14;
ChargerEvade *pCVar15;
void *pvVar16;
undefined4 uVar17;
Vector *pVVar18;
CTerrorPlayer *pCVar19;
float fVar20;
undefined *puVar21;
CDirector *pCVar22;
float *pfVar23;
int iVar24;
longdouble lVar25;
int *local_ac;
float local_a8;
float local_a4;
float local_a0;
int local_94;
int local_90;
int local_88;
int local_84;
int local_80;
int local_7c;
int local_78;
int local_74;
undefined **local_70;
float local_6c;
CBaseEntity *local_68;
undefined4 local_64;
undefined4 local_60;
undefined4 local_5c;
float local_44;
int local_24;
pfVar23 = (float *)&stack0xffffff14;
piVar7 = (int *)(**(code **)(*(int *)param_2 + 0x9b4))();
piVar8 = (int *)(**(code **)(*(int *)param_2 + 0x9b0))();
if (((0.0 < *(float *)(param_1 + 0x4868)) &&
(lVar25 = (longdouble)CountdownTimer::Now(), *(float *)(param_1 + 0x4868) <= (float)lVar25))
&& (iVar24 = (**(code **)(*(int *)param_2 + 0x52c))(), iVar24 != 0)) {
if (*(float *)(param_1 + 0x4868) != -1.0) {
(**(code **)(*(int *)(param_1 + 0x4860) + 4))();
*(undefined4 *)(param_1 + 0x4868) = 0xbf800000;
}
if ((*(byte *)((int)param_2 + 0x14d) & 8) != 0) {
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)param_2);
}
this_00 = (CNavArea *)(**(code **)(*(int *)param_2 + 0x52c))();
cVar5 = CNavArea::Contains(this_00,(Vector *)((int)param_2 + 0x2e0));
if (cVar5 == '\0') {
puVar14 = ::operator_new(0x34);
puVar14[8] = 0;
puVar14[9] = 0;
puVar14[10] = 0;
puVar14[3] = 0;
puVar14[4] = 0;
puVar14[5] = 0;
puVar14[6] = 0;
puVar14[7] = 0;
puVar14[2] = 0;
*(undefined1 *)(puVar14 + 0xc) = 0;
*(undefined1 *)((int)puVar14 + 0x31) = 0;
puVar14[0xb] = 0;
*puVar14 = &PTR__ChargerReturnToNavMesh_00d2f388;
puVar14[1] = &PTR__ChargerReturnToNavMesh_00d2f4ec;
*(undefined4 **)(this + 4) = puVar14;
*(undefined4 *)(param_1 + 0x20) = 0;
*(undefined4 *)(param_1 + 0x24) = 0;
*(undefined4 *)(param_1 + 0x28) = 0;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 *)this = 2;
*(char **)(this + 8) = "Off the mesh, returning";
return this;
}
}
uVar2 = *(uint *)(param_1 + 0x34);
pCVar19 = (CTerrorPlayer *)0x0;
if (((uVar2 != 0xffffffff) &&
(puVar21 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar21 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar21 + 8) == uVar2 >> 0xc)) {
pCVar19 = *(CTerrorPlayer **)(puVar21 + 4);
}
piVar9 = (int *)BossZombiePlayerBot::ChooseVictim
((BossZombiePlayerBot *)param_2,pCVar19,4,(CBaseCombatCharacter *)0x0);
if (piVar9 == (int *)0x0) {
*(undefined4 *)(param_1 + 0x34) = 0xffffffff;
LAB_00a8973d:
(**(code **)(*piVar8 + 0xe0))();
*(undefined4 *)this = 0;
*(undefined4 *)(this + 4) = 0;
*(undefined4 *)(this + 8) = 0;
return this;
}
puVar10 = (uint *)(**(code **)(*piVar9 + 0xc))();
puVar21 = g_pEntityList;
uVar2 = *puVar10;
*(uint *)(param_1 + 0x34) = uVar2;
if (((uVar2 == 0xffffffff) ||
(puVar21 = puVar21 + (uVar2 & 0xfff) * 0x10, puVar21 == (undefined *)0xfffffffc)) ||
((*(uint *)(puVar21 + 8) != uVar2 >> 0xc ||
((*(int **)(puVar21 + 4) == (int *)0x0 ||
(cVar5 = (**(code **)(**(int **)(puVar21 + 4) + 300))(), cVar5 == '\0'))))))
goto LAB_00a8973d;
if (0 < *(int *)(param_1 + 0x443c)) {
piVar9 = (int *)(**(code **)(*(int *)param_2 + 0x9b0))();
cVar5 = (**(code **)(*piVar9 + 0x114))();
if (cVar5 != '\0') {
iVar24 = (int)param_2 + 0x4028;
local_70 = &PTR_operator___00d20e60;
local_6c = (float)iVar24;
local_64 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc0))();
pCVar11 = (CBaseEntity *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xb4))();
iVar12 = (**(code **)(*(int *)pCVar11 + 0x14c))();
local_60 = 0x3f800000;
if (iVar12 != 0) {
local_60 = *(undefined4 *)(iVar12 + 0x1cec);
}
cVar5 = (**(code **)(*(int *)pCVar11 + 0x16c))();
local_68 = (CBaseEntity *)0x0;
if (cVar5 != '\0') {
local_68 = pCVar11;
}
iVar12 = CBaseEntity::GetTeamNumber(pCVar11);
local_5c = 9;
if (iVar12 == 3) {
local_5c = (**(code **)(*(int *)pCVar11 + 0x544))();
}
uVar2 = *(uint *)(param_1 + 0x34);
local_a8 = 0.0;
if (((uVar2 != 0xffffffff) &&
(puVar21 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar21 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar21 + 8) == uVar2 >> 0xc)) {
local_a8 = *(float *)(puVar21 + 4);
}
pCVar1 = param_1 + 0x38;
piVar7 = (int *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc0))();
cVar5 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0x104))();
if (((cVar5 == '\0') && (cVar5 = (**(code **)(*piVar7 + 0xd4))(), cVar5 == '\0')) &&
((cVar5 = (**(code **)(*(int *)(param_1 + 0x38) + 0x80))(), cVar5 == '\0' &&
(cVar5 = (**(code **)(*(int *)(param_1 + 0x38) + 0x80))(), cVar5 == '\0')))) {
(**(code **)(*(int *)(param_1 + 0x38) + 0x90))();
piVar8 = (int *)&stack0xffffff10;
local_88 = local_7c;
local_84 = local_78;
local_80 = local_74;
pcVar3 = *(code **)(*piVar7 + 0x158);
(**(code **)(*piVar7 + 300))();
cVar5 = (*pcVar3)();
if (cVar5 != '\0') {
if (*(int *)(DirectChaseNavCheck._28_4_ + 0x30) != 0) {
pVVar18 = (Vector *)(**(code **)(*piVar7 + 300))();
cVar5 = CNavMesh::DoesRayStayWithinMesh(TheNavMesh,pVVar18,(Vector *)&local_7c);
if (cVar5 == '\0') goto LAB_00a8aa6f;
}
(**(code **)(*piVar7 + 0x120))();
(**(code **)(*piVar7 + 0xb4))();
piVar7 = (int *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc4))();
(**(code **)(*piVar7 + 0xc4))();
(**(code **)(*(int *)(param_1 + 0x38) + 0x48))();
param_1[0x4844] = (Charger)0x1;
goto LAB_00a89a35;
}
LAB_00a8aa6f:
piVar7 = &local_88;
piVar8 = (int *)&stack0xffffff10;
}
else {
piVar7 = (int *)0x0;
piVar8 = (int *)&stack0xffffff14;
}
local_94 = 0;
local_90 = 0;
if (_towlower == 0) {
local_74 = 0;
}
else {
*piVar8 = _towlower;
piVar8[1] = (int)&local_94;
piVar8[0xb] = (int)"ChasePath::Update";
piVar8[10] = (int)"NextBot";
piVar8[9] = (int)"(%s)%s";
piVar8[8] = (int)&ChasePath::Update(INextBot*,CBaseEntity*,IPathCost_const&,Vector*)::tm_fmt
;
piVar8[7] = 0x68;
piVar8[6] = (int)"/data/src/game/server/nextbot/path/nextbotchasepath.h";
piVar8[5] = 0;
piVar8[3] = 0;
piVar8[4] = 0;
piVar8[2] = 0;
pcVar3 = *(code **)(_towlower + 0x50);
piVar8[-1] = 0xa8994f;
(*pcVar3)();
local_74 = _towlower;
}
iVar12 = _DAT_0105db00;
local_7c = local_94;
local_78 = local_90;
if ((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) {
/* try { // try from 00a89982 to 00a89986 has its CatchHandler @ 00a8add0 */
piVar8[-1] = 0xa89987;
iVar13 = ThreadGetCurrentId();
if (iVar12 == iVar13) {
if ((char *)*_DAT_0105d15c != "ChasePath::Update") {
piVar8[4] = 4;
piVar8[3] = (int)"NextBot";
piVar8[2] = 0;
piVar8[1] = (int)"ChasePath::Update";
*piVar8 = (int)_DAT_0105d15c;
/* try { // try from 00a8a500 to 00a8a523 has its CatchHandler @ 00a8add0 */
piVar8[-1] = 0xa8a505;
_DAT_0105d15c =
(int *)CVProfNode::GetSubNode
((char *)*piVar8,piVar8[1],(char *)piVar8[2],piVar8[3]);
}
puVar10 = (uint *)(_DAT_0105d1e8 + 4 + _DAT_0105d15c[0x1c] * 8);
*puVar10 = *puVar10 | 4;
*piVar8 = (int)_DAT_0105d15c;
piVar8[-1] = 0xa8a524;
CVProfNode::EnterScope();
DAT_0105d158 = '\0';
}
}
piVar8[4] = (int)piVar7;
piVar8[3] = (int)&local_70;
piVar8[1] = iVar24;
*piVar8 = (int)pCVar1;
piVar8[2] = (int)local_a8;
/* try { // try from 00a899b7 to 00a899c7 has its CatchHandler @ 00a8adc0 */
piVar8[-1] = 0xa899bc;
ChasePath::RefreshPath
((ChasePath *)*piVar8,(INextBot *)piVar8[1],(CBaseEntity *)piVar8[2],
(IPathCost *)piVar8[3],(Vector *)piVar8[4]);
piVar8[1] = iVar24;
*piVar8 = (int)pCVar1;
piVar8[-1] = 0xa899c8;
PathFollower::Update((PathFollower *)*piVar8,(INextBot *)piVar8[1]);
iVar12 = _DAT_0105db00;
if ((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) {
piVar8[-1] = 0xa899e5;
iVar13 = ThreadGetCurrentId();
if (iVar12 == iVar13) {
*piVar8 = (int)_DAT_0105d15c;
piVar8[-1] = 0xa8a4ad;
cVar5 = CVProfNode::ExitScope();
if (cVar5 != '\0') {
_DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
}
DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
}
}
if (local_74 != 0) {
piVar8[5] = 0;
piVar8[4] = 0;
piVar8[3] = 0;
*piVar8 = local_74;
piVar8[1] = local_7c;
piVar8[2] = local_78;
pcVar3 = *(code **)(local_74 + 0x54);
piVar8[-1] = 0xa89a20;
(*pcVar3)();
}
iVar12 = *(int *)(param_1 + 0x38);
*piVar8 = (int)pCVar1;
pcVar3 = *(code **)(iVar12 + 0x44);
piVar8[-1] = 0xa89a2f;
CVar6 = (Charger)(*pcVar3)();
param_1[0x4844] = CVar6;
LAB_00a89a35:
piVar8[2] = (int)local_a8;
piVar8[1] = iVar24;
*piVar8 = (int)pCVar1;
piVar8[-1] = 0xa89a57;
DirectChasePath::NotifyVictim
((DirectChasePath *)*piVar8,(INextBot *)piVar8[1],(CBaseEntity *)piVar8[2]);
*(undefined4 *)this = 0;
*(undefined4 *)(this + 4) = 0;
*(undefined4 *)(this + 8) = 0;
return this;
}
}
(**(code **)(*piVar7 + 0xc4))();
if ((*(char *)((int)param_2 + 0x4324) != '\0') &&
(cVar5 = (**(code **)(*(int *)param_2 + 0x99c))(), cVar5 == '\0')) {
if (((*(byte *)((int)param_2 + 0x153) & 8) != 0) ||
((((cVar5 = CDirector::IsFinale(TheDirector), cVar5 != '\0' ||
(*(char *)(*(int *)(TheDirector + 0x638) + 0x111) != '\0')) ||
(cVar5 = CDirectorTacticalServices::IsVisibleToTeam
(*(CDirectorTacticalServices **)(TheDirector + 0x628),
(CBaseEntity *)param_2,2,0,0.0,(TerrorNavArea *)0x0), cVar5 != '\0'))
|| (cVar5 = (**(code **)(*(int *)param_2 + 0x998))(), pCVar22 = TheDirector, cVar5 != '\0'))
)) {
pCVar22 = TheDirector;
*(undefined1 *)((int)param_2 + 0x4324) = 0;
}
fVar20 = *(float *)(pCVar22 + 0x29c);
if ((fVar20 <= 0.0) ||
(lVar25 = (longdouble)CountdownTimer::Now(), 2.0 <= fVar20 - (float)lVar25)) {
uVar2 = *(uint *)(param_1 + 0x34);
pCVar19 = (CTerrorPlayer *)0x0;
if ((uVar2 != 0xffffffff) &&
((puVar21 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar21 != (undefined *)0xfffffffc &&
(*(uint *)(puVar21 + 8) == uVar2 >> 0xc)))) {
pCVar19 = *(CTerrorPlayer **)(puVar21 + 4);
}
cVar5 = BossZombiePlayerBot::IsBehind((BossZombiePlayerBot *)param_2,pCVar19);
if (cVar5 == '\0') goto LAB_00a8a350;
}
*(undefined1 *)((int)param_2 + 0x4324) = 0;
goto LAB_00a8a350;
}
uVar2 = *(uint *)(param_1 + 0x34);
iVar24 = 0;
if (((uVar2 != 0xffffffff) &&
(puVar21 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar21 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar21 + 8) == uVar2 >> 0xc)) {
iVar24 = *(int *)(puVar21 + 4);
}
if ((0.0 < *(float *)(iVar24 + 0x2dbc)) &&
(lVar25 = (longdouble)CountdownTimer::Now(), (float)lVar25 < *(float *)(iVar24 + 0x2dbc))) {
pCVar15 = ::operator_new(0x4818);
/* try { // try from 00a89e91 to 00a89e95 has its CatchHandler @ 00a8adae */
ChargerEvade::ChargerEvade(pCVar15);
*(undefined4 *)(param_1 + 0x20) = 0;
*(undefined4 *)(param_1 + 0x24) = 0;
*(undefined4 *)(param_1 + 0x28) = 0;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 *)this = 2;
*(ChargerEvade **)(this + 4) = pCVar15;
*(char **)(this + 8) = "Let the survivor get back up!";
return this;
}
cVar5 = (**(code **)(*(int *)param_2 + 0x99c))();
if (cVar5 != '\0') {
pCVar15 = ::operator_new(0x4818);
/* try { // try from 00a8a821 to 00a8a825 has its CatchHandler @ 00a8adb2 */
ChargerEvade::ChargerEvade(pCVar15);
*(undefined4 *)(param_1 + 0x20) = 0;
*(undefined4 *)(param_1 + 0x24) = 0;
*(undefined4 *)(param_1 + 0x28) = 0;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 *)this = 2;
*(ChargerEvade **)(this + 4) = pCVar15;
*(char **)(this + 8) = "Director told me to retreat!";
return this;
}
fVar20 = (float)((int)param_2 + 0x4028);
cVar5 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0x11c))();
if (cVar5 == '\0') {
bVar4 = false;
}
else {
local_70 = &PTR_operator___00d20e60;
local_6c = fVar20;
local_64 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc0))();
pCVar11 = (CBaseEntity *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xb4))();
iVar24 = (**(code **)(*(int *)pCVar11 + 0x14c))();
if (iVar24 == 0) {
local_60 = 0x3f800000;
}
else {
local_60 = *(undefined4 *)(iVar24 + 0x1cec);
}
cVar5 = (**(code **)(*(int *)pCVar11 + 0x16c))();
local_68 = (CBaseEntity *)0x0;
if (cVar5 != '\0') {
local_68 = pCVar11;
}
iVar24 = CBaseEntity::GetTeamNumber(pCVar11);
local_5c = 9;
if (iVar24 == 3) {
local_5c = (**(code **)(*(int *)pCVar11 + 0x544))();
}
uVar2 = *(uint *)(param_1 + 0x34);
local_a8 = 0.0;
if (((uVar2 != 0xffffffff) &&
(puVar21 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar21 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar21 + 8) == uVar2 >> 0xc)) {
local_a8 = *(float *)(puVar21 + 4);
}
pCVar1 = param_1 + 0x38;
piVar7 = (int *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc0))();
cVar5 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0x104))();
if ((((cVar5 == '\0') && (cVar5 = (**(code **)(*piVar7 + 0xd4))(), cVar5 == '\0')) &&
(cVar5 = (**(code **)(*(int *)(param_1 + 0x38) + 0x80))(), cVar5 == '\0')) &&
(cVar5 = (**(code **)(*(int *)(param_1 + 0x38) + 0x80))(), cVar5 == '\0')) {
(**(code **)(*(int *)(param_1 + 0x38) + 0x90))();
pfVar23 = (float *)&stack0xffffff10;
local_88 = local_7c;
local_84 = local_78;
local_80 = local_74;
pcVar3 = *(code **)(*piVar7 + 0x158);
(**(code **)(*piVar7 + 300))();
cVar5 = (*pcVar3)();
if (cVar5 == '\0') {
LAB_00a8ad15:
local_ac = &local_88;
pfVar23 = (float *)&stack0xffffff10;
goto LAB_00a8a068;
}
if (*(int *)(DirectChaseNavCheck._28_4_ + 0x30) != 0) {
pVVar18 = (Vector *)(**(code **)(*piVar7 + 300))();
cVar5 = CNavMesh::DoesRayStayWithinMesh(TheNavMesh,pVVar18,(Vector *)&local_7c);
if (cVar5 == '\0') goto LAB_00a8ad15;
}
(**(code **)(*piVar7 + 0x120))();
(**(code **)(*piVar7 + 0xb4))();
piVar7 = (int *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc4))();
(**(code **)(*piVar7 + 0xc4))();
(**(code **)(*(int *)(param_1 + 0x38) + 0x48))();
param_1[0x4844] = (Charger)0x1;
}
else {
local_ac = (int *)0x0;
pfVar23 = (float *)&stack0xffffff14;
LAB_00a8a068:
local_94 = 0;
local_90 = 0;
if (_towlower == 0) {
local_74 = 0;
}
else {
*pfVar23 = (float)_towlower;
pfVar23[1] = (float)&local_94;
pfVar23[0xb] = (float)"ChasePath::Update";
pfVar23[10] = (float)"NextBot";
pfVar23[9] = (float)"(%s)%s";
pfVar23[8] = (float)&ChasePath::Update(INextBot*,CBaseEntity*,IPathCost_const&,Vector*)::
tm_fmt;
pfVar23[7] = 1.45735e-43;
pfVar23[6] = (float)"/data/src/game/server/nextbot/path/nextbotchasepath.h";
pfVar23[5] = 0.0;
pfVar23[3] = 0.0;
pfVar23[4] = 0.0;
pfVar23[2] = 0.0;
pcVar3 = *(code **)(_towlower + 0x50);
pfVar23[-1] = 1.5486087e-38;
(*pcVar3)();
local_74 = _towlower;
}
iVar24 = _DAT_0105db00;
local_7c = local_94;
local_78 = local_90;
if ((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) {
/* try { // try from 00a8a122 to 00a8a126 has its CatchHandler @ 00a8adaa */
pfVar23[-1] = 1.5486174e-38;
iVar12 = ThreadGetCurrentId();
if (iVar24 == iVar12) {
if ((char *)*_DAT_0105d15c != "ChasePath::Update") {
pfVar23[4] = 5.60519e-45;
pfVar23[3] = (float)"NextBot";
pfVar23[2] = 0.0;
pfVar23[1] = (float)"ChasePath::Update";
*pfVar23 = (float)_DAT_0105d15c;
/* try { // try from 00a8aae2 to 00a8ab05 has its CatchHandler @ 00a8adaa */
pfVar23[-1] = 1.5489672e-38;
_DAT_0105d15c =
(int *)CVProfNode::GetSubNode
((char *)*pfVar23,(int)pfVar23[1],(char *)pfVar23[2],
(int)pfVar23[3]);
}
puVar10 = (uint *)(_DAT_0105d1e8 + 4 + _DAT_0105d15c[0x1c] * 8);
*puVar10 = *puVar10 | 4;
*pfVar23 = (float)_DAT_0105d15c;
pfVar23[-1] = 1.5489715e-38;
CVProfNode::EnterScope();
DAT_0105d158 = '\0';
}
}
pfVar23[1] = fVar20;
pfVar23[4] = (float)local_ac;
pfVar23[3] = (float)&local_70;
pfVar23[2] = local_a8;
*pfVar23 = (float)pCVar1;
/* try { // try from 00a8a15b to 00a8a171 has its CatchHandler @ 00a8ad89 */
pfVar23[-1] = 1.5486254e-38;
ChasePath::RefreshPath
((ChasePath *)*pfVar23,(INextBot *)pfVar23[1],(CBaseEntity *)pfVar23[2],
(IPathCost *)pfVar23[3],(Vector *)pfVar23[4]);
pfVar23[1] = fVar20;
*pfVar23 = (float)pCVar1;
pfVar23[-1] = 1.5486279e-38;
PathFollower::Update((PathFollower *)*pfVar23,(INextBot *)pfVar23[1]);
iVar24 = _DAT_0105db00;
if ((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) {
pfVar23[-1] = 1.5486328e-38;
iVar12 = ThreadGetCurrentId();
if (iVar24 == iVar12) {
*pfVar23 = (float)_DAT_0105d15c;
pfVar23[-1] = 1.548975e-38;
cVar5 = CVProfNode::ExitScope();
if (cVar5 != '\0') {
_DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
}
DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
}
}
if (local_74 != 0) {
pfVar23[5] = 0.0;
pfVar23[4] = 0.0;
pfVar23[3] = 0.0;
*pfVar23 = (float)local_74;
pfVar23[1] = (float)local_7c;
pfVar23[2] = (float)local_78;
pcVar3 = *(code **)(local_74 + 0x54);
pfVar23[-1] = 1.5486416e-38;
(*pcVar3)();
}
iVar24 = *(int *)(param_1 + 0x38);
*pfVar23 = (float)pCVar1;
pcVar3 = *(code **)(iVar24 + 0x44);
pfVar23[-1] = 1.5486437e-38;
CVar6 = (Charger)(*pcVar3)();
param_1[0x4844] = CVar6;
}
pfVar23[1] = fVar20;
pfVar23[2] = local_a8;
*pfVar23 = (float)pCVar1;
pfVar23[-1] = 1.5486485e-38;
DirectChasePath::NotifyVictim
((DirectChasePath *)*pfVar23,(INextBot *)pfVar23[1],(CBaseEntity *)pfVar23[2]);
if (param_1[0x4844] == (Charger)0x0) {
local_a4 = 0.0;
uVar2 = *(uint *)(param_1 + 0x34);
if (((uVar2 != 0xffffffff) &&
(puVar21 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar21 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar21 + 8) == uVar2 >> 0xc)) {
local_a4 = *(float *)(puVar21 + 4);
}
pfVar23[1] = param_2;
*pfVar23 = (float)param_1;
pfVar23[2] = local_a4;
pfVar23[-1] = 1.5486613e-38;
cVar5 = ShouldEvadeVictim((ChargerAttack *)*pfVar23,(Charger *)pfVar23[1],
(CTerrorPlayer *)pfVar23[2]);
if (cVar5 != '\0') {
*pfVar23 = 2.58624e-41;
pfVar23[-1] = 1.548664e-38;
pvVar16 = ::operator_new((uint)*pfVar23);
*pfVar23 = (float)pvVar16;
/* try { // try from 00a8a279 to 00a8a27d has its CatchHandler @ 00a8add2 */
pfVar23[-1] = 1.5486655e-38;
ChargerEvade::ChargerEvade((ChargerEvade *)*pfVar23);
goto LAB_00a8a27e;
}
iVar24 = *(int *)param_2;
*pfVar23 = param_2;
pcVar3 = *(code **)(iVar24 + 0x9b0);
pfVar23[-1] = 1.5487637e-38;
piVar7 = (int *)(*pcVar3)();
local_a4 = 0.0;
pcVar3 = *(code **)(*piVar7 + 0xb4);
uVar2 = *(uint *)(param_1 + 0x34);
if (((uVar2 != 0xffffffff) &&
(puVar21 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar21 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar21 + 8) == uVar2 >> 0xc)) {
local_a4 = *(float *)(puVar21 + 4);
}
if ((*(byte *)((int)local_a4 + 0x14d) & 8) != 0) {
*pfVar23 = local_a4;
pfVar23[-1] = 1.5489837e-38;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*pfVar23);
}
pfVar23[2] = 1.0;
*pfVar23 = (float)piVar7;
pfVar23[1] = (float)((int)local_a4 + 0x2e0);
pfVar23[-1] = 1.548783e-38;
(*pcVar3)();
}
bVar4 = true;
}
iVar24 = *piVar8;
*pfVar23 = (float)piVar8;
pcVar3 = *(code **)(iVar24 + 0x114);
pfVar23[-1] = 1.5487864e-38;
cVar5 = (*pcVar3)();
if (cVar5 == '\0') {
*pfVar23 = param_2;
pfVar23[-1] = 1.5487886e-38;
cVar5 = CTerrorPlayer::IsCustomAbilityReadyToFire((CTerrorPlayer *)*pfVar23);
if (cVar5 != '\0') {
local_a0 = 0.0;
uVar2 = *(uint *)(param_1 + 0x34);
if (((uVar2 != 0xffffffff) &&
(puVar21 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar21 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar21 + 8) == uVar2 >> 0xc)) {
local_a0 = *(float *)(puVar21 + 4);
}
pfVar23[1] = param_2;
*pfVar23 = (float)param_1;
pfVar23[2] = local_a0;
pfVar23[-1] = 1.5488001e-38;
cVar5 = ShouldChargeAtVictim
((ChargerAttack *)*pfVar23,(Charger *)pfVar23[1],(CTerrorPlayer *)pfVar23[2]
);
if (cVar5 != '\0') {
*(undefined1 *)((int)param_2 + 0x4324) = 0;
pCVar1 = param_1 + 0x4854;
*pfVar23 = (float)pCVar1;
pfVar23[-1] = 1.5489882e-38;
lVar25 = (longdouble)CountdownTimer::Now();
if ((float)lVar25 + 3.0 != *(float *)(param_1 + 0x485c)) {
iVar24 = *(int *)(param_1 + 0x4854);
*pfVar23 = (float)pCVar1;
pfVar23[1] = (float)(param_1 + 0x485c);
pcVar3 = *(code **)(iVar24 + 4);
pfVar23[-1] = 1.5490539e-38;
(*pcVar3)();
*(float *)(param_1 + 0x485c) = (float)lVar25 + 3.0;
}
if (*(float *)(param_1 + 0x4858) != 3.0) {
iVar24 = *(int *)(param_1 + 0x4854);
*pfVar23 = (float)pCVar1;
pfVar23[1] = (float)(param_1 + 0x4858);
pcVar3 = *(code **)(iVar24 + 4);
pfVar23[-1] = 1.5489985e-38;
(*pcVar3)();
*(undefined4 *)(param_1 + 0x4858) = 0x40400000;
}
uVar2 = *(uint *)(param_1 + 0x34);
fVar20 = 0.0;
if (((uVar2 != 0xffffffff) &&
(puVar21 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar21 != (undefined *)0xfffffffc))
&& (*(uint *)(puVar21 + 8) == uVar2 >> 0xc)) {
fVar20 = *(float *)(puVar21 + 4);
}
*pfVar23 = 1.17709e-43;
pfVar23[-1] = 1.5490084e-38;
pvVar16 = ::operator_new((uint)*pfVar23);
pfVar23[1] = fVar20;
*pfVar23 = (float)pvVar16;
/* try { // try from 00a8ac16 to 00a8ac1a has its CatchHandler @ 00a8add4 */
pfVar23[-1] = 1.5490103e-38;
ChargerChargeAtVictim::ChargerChargeAtVictim
((ChargerChargeAtVictim *)*pfVar23,(CTerrorPlayer *)pfVar23[1]);
*(undefined4 *)(param_1 + 0x20) = 0;
*(undefined4 *)(param_1 + 0x24) = 0;
*(undefined4 *)(param_1 + 0x28) = 0;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 *)this = 2;
*(void **)(this + 4) = pvVar16;
*(char **)(this + 8) = "Charging!!";
return this;
}
}
*pfVar23 = (float)(param_1 + 0x4854);
pfVar23[-1] = 1.5488032e-38;
lVar25 = (longdouble)CountdownTimer::Now();
if (*(float *)(param_1 + 0x485c) <= (float)lVar25) {
local_a0 = 0.0;
pcVar3 = *(code **)(*(int *)((int)param_2 + 0x4028) + 0x114);
uVar2 = *(uint *)(param_1 + 0x34);
if (((uVar2 != 0xffffffff) &&
(puVar21 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar21 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar21 + 8) == uVar2 >> 0xc)) {
local_a0 = *(float *)(puVar21 + 4);
}
pfVar23[2] = 36.0;
*pfVar23 = fVar20;
pfVar23[1] = local_a0;
pfVar23[-1] = 1.5488214e-38;
cVar5 = (*pcVar3)();
if (cVar5 != '\0') {
uVar2 = *(uint *)(param_1 + 0x34);
fVar20 = 0.0;
if (((uVar2 != 0xffffffff) &&
(puVar21 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar21 != (undefined *)0xfffffffc))
&& (*(uint *)(puVar21 + 8) == uVar2 >> 0xc)) {
fVar20 = *(float *)(puVar21 + 4);
}
pfVar23[3] = 0.0;
pfVar23[2] = 0.8;
pfVar23[1] = fVar20;
*pfVar23 = param_2;
pfVar23[-1] = 1.5488332e-38;
cVar5 = UTIL_IsFacingWithinTolerance
((CBaseEntity *)*pfVar23,(CBaseEntity *)pfVar23[1],pfVar23[2],
(float *)pfVar23[3]);
if (cVar5 == '\0') {
if (!bVar4) {
uVar2 = *(uint *)(param_1 + 0x34);
if (((uVar2 == 0xffffffff) ||
(puVar21 = g_pEntityList + (uVar2 & 0xfff) * 0x10,
puVar21 == (undefined *)0xfffffffc)) || (*(uint *)(puVar21 + 8) != uVar2 >> 0xc)) {
fVar20 = 0.0;
}
else {
fVar20 = *(float *)(puVar21 + 4);
}
pfVar23[2] = fVar20;
pfVar23[1] = param_2;
*pfVar23 = (float)param_1;
pfVar23[-1] = 1.5490325e-38;
cVar5 = ShouldEvadeVictim((ChargerAttack *)*pfVar23,(Charger *)pfVar23[1],
(CTerrorPlayer *)pfVar23[2]);
if (cVar5 != '\0') {
*pfVar23 = 2.58624e-41;
pfVar23[-1] = 1.5490353e-38;
pvVar16 = ::operator_new((uint)*pfVar23);
*pfVar23 = (float)pvVar16;
/* try { // try from 00a8acd2 to 00a8acd6 has its CatchHandler @ 00a8ad77 */
pfVar23[-1] = 1.5490367e-38;
ChargerEvade::ChargerEvade((ChargerEvade *)*pfVar23);
LAB_00a8a27e:
*(undefined4 *)(param_1 + 0x20) = 0;
*(undefined4 *)(param_1 + 0x24) = 0;
*(undefined4 *)(param_1 + 0x28) = 0;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 *)this = 2;
*(void **)(this + 4) = pvVar16;
*(undefined4 *)(this + 8) = 0;
return this;
}
}
}
else {
uVar2 = *(uint *)(param_1 + 0x34);
piVar7 = (int *)0x0;
if (((uVar2 != 0xffffffff) &&
(puVar21 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar21 != (undefined *)0xfffffffc)
) && (*(uint *)(puVar21 + 8) == uVar2 >> 0xc)) {
piVar7 = *(int **)(puVar21 + 4);
}
iVar24 = *piVar7;
*pfVar23 = (float)piVar7;
pcVar3 = *(code **)(iVar24 + 0x288);
pfVar23[-1] = 1.5488424e-38;
fVar20 = (float)(*pcVar3)();
iVar24 = *(int *)param_2;
*pfVar23 = param_2;
pcVar3 = *(code **)(iVar24 + 0x288);
pfVar23[-1] = 1.5488443e-38;
uVar17 = (*pcVar3)();
pfVar23[3] = param_2;
pfVar23[5] = (float)&local_70;
pfVar23[4] = 0.0;
pfVar23[2] = 9.422334e-38;
pfVar23[1] = fVar20;
*pfVar23 = (float)uVar17;
pfVar23[-1] = 1.5488497e-38;
UTIL_TraceLine((Vector *)*pfVar23,(Vector *)pfVar23[1],(uint)pfVar23[2],
(IHandleEntity *)pfVar23[3],(int)pfVar23[4],(CGameTrace *)pfVar23[5]);
if (local_44 != 1.0) {
uVar2 = *(uint *)(param_1 + 0x34);
if (((uVar2 == 0xffffffff) ||
(puVar21 = g_pEntityList + (uVar2 & 0xfff) * 0x10,
puVar21 == (undefined *)0xfffffffc)) || (*(uint *)(puVar21 + 8) != uVar2 >> 0xc)) {
iVar24 = 0;
}
else {
iVar24 = *(int *)(puVar21 + 4);
}
if (local_24 != iVar24) goto LAB_00a8a350;
}
iVar24 = *(int *)param_2;
pfVar23[1] = -1.0;
*pfVar23 = param_2;
pcVar3 = *(code **)(iVar24 + 0x940);
pfVar23[-1] = 1.5488619e-38;
(*pcVar3)();
}
}
}
}
LAB_00a8a350:
*(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.