ChargerAssault::Update
0x00a7ce20 · 5281 bytes · __thiscall
_ZN14ChargerAssault6UpdateEP7Chargerf
Decompiled
undefined (3 params)
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* ChargerAssault::Update(Charger*, float) */
ChargerAssault * __thiscall
ChargerAssault::Update(ChargerAssault *this,Charger *param_1,float param_2)
{
Charger *pCVar1;
uint uVar2;
code *pcVar3;
char cVar4;
Charger CVar5;
int *piVar6;
int *piVar7;
int *piVar8;
uint *puVar9;
CBaseEntity *pCVar10;
int iVar11;
int iVar12;
CNavArea *this_00;
undefined4 *puVar13;
int iVar14;
float *pfVar15;
float *pfVar16;
void *pvVar17;
Vector *pVVar18;
CTerrorPlayer *pCVar19;
undefined *puVar20;
float *pfVar21;
float fVar22;
longdouble lVar23;
float *local_fc;
float local_f8;
int local_f4;
float local_f0;
float local_e4;
int local_e0;
float local_dc;
int local_d8;
int local_d4;
float local_cc;
float local_c8;
float local_c4;
float local_bc;
float local_b8;
float local_b4;
undefined4 local_ac;
undefined4 local_a8;
undefined4 local_a4;
undefined4 local_9c;
undefined4 local_98;
undefined4 local_94;
undefined4 local_8c;
undefined1 local_88;
undefined1 local_87;
undefined **local_70;
float local_6c;
CBaseEntity *local_68;
undefined4 local_64;
undefined4 local_60;
undefined4 local_5c;
float local_44;
int local_24;
pfVar21 = (float *)&stack0xfffffec4;
piVar6 = (int *)(**(code **)(*(int *)param_2 + 0x9b4))();
piVar7 = (int *)(**(code **)(*(int *)param_2 + 0x9b0))();
if (((0.0 < *(float *)(param_1 + 0x4868)) &&
(lVar23 = (longdouble)CountdownTimer::Now(), *(float *)(param_1 + 0x4868) <= (float)lVar23))
&& (iVar14 = (**(code **)(*(int *)param_2 + 0x52c))(), iVar14 != 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))();
cVar4 = CNavArea::Contains(this_00,(Vector *)((int)param_2 + 0x2e0));
if (cVar4 == '\0') {
puVar13 = ::operator_new(0x34);
puVar13[8] = 0;
puVar13[9] = 0;
puVar13[10] = 0;
puVar13[3] = 0;
puVar13[4] = 0;
puVar13[5] = 0;
puVar13[6] = 0;
puVar13[7] = 0;
puVar13[2] = 0;
*(undefined1 *)(puVar13 + 0xc) = 0;
*(undefined1 *)((int)puVar13 + 0x31) = 0;
puVar13[0xb] = 0;
*puVar13 = &PTR__ChargerReturnToNavMesh_00d2f388;
puVar13[1] = &PTR__ChargerReturnToNavMesh_00d2f4ec;
*(undefined4 **)(this + 4) = puVar13;
*(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) &&
(puVar20 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar20 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar20 + 8) == uVar2 >> 0xc)) {
pCVar19 = *(CTerrorPlayer **)(puVar20 + 4);
}
piVar8 = (int *)BossZombiePlayerBot::ChooseVictim
((BossZombiePlayerBot *)param_2,pCVar19,4,(CBaseCombatCharacter *)0x0);
if (piVar8 == (int *)0x0) {
*(undefined4 *)(param_1 + 0x34) = 0xffffffff;
LAB_00a7cf0d:
(**(code **)(*piVar7 + 0xe0))();
*(undefined4 *)this = 0;
*(undefined4 *)(this + 4) = 0;
*(undefined4 *)(this + 8) = 0;
return this;
}
puVar9 = (uint *)(**(code **)(*piVar8 + 0xc))();
puVar20 = g_pEntityList;
uVar2 = *puVar9;
*(uint *)(param_1 + 0x34) = uVar2;
if (((uVar2 == 0xffffffff) ||
(puVar20 = puVar20 + (uVar2 & 0xfff) * 0x10, puVar20 == (undefined *)0xfffffffc)) ||
((*(uint *)(puVar20 + 8) != uVar2 >> 0xc ||
((*(int **)(puVar20 + 4) == (int *)0x0 ||
(cVar4 = (**(code **)(**(int **)(puVar20 + 4) + 300))(), cVar4 == '\0'))))))
goto LAB_00a7cf0d;
if (0 < *(int *)(param_1 + 0x443c)) {
piVar8 = (int *)(**(code **)(*(int *)param_2 + 0x9b0))();
cVar4 = (**(code **)(*piVar8 + 0x114))();
if (cVar4 != '\0') {
iVar14 = (int)param_2 + 0x4028;
local_70 = &PTR_operator___00d20e60;
local_6c = (float)iVar14;
local_64 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc0))();
pCVar10 = (CBaseEntity *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xb4))();
iVar11 = (**(code **)(*(int *)pCVar10 + 0x14c))();
local_60 = 0x3f800000;
if (iVar11 != 0) {
local_60 = *(undefined4 *)(iVar11 + 0x1cec);
}
cVar4 = (**(code **)(*(int *)pCVar10 + 0x16c))();
local_68 = (CBaseEntity *)0x0;
if (cVar4 != '\0') {
local_68 = pCVar10;
}
iVar11 = CBaseEntity::GetTeamNumber(pCVar10);
local_5c = 9;
if (iVar11 == 3) {
local_5c = (**(code **)(*(int *)pCVar10 + 0x544))();
}
uVar2 = *(uint *)(param_1 + 0x34);
local_f8 = 0.0;
if (((uVar2 != 0xffffffff) &&
(puVar20 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar20 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar20 + 8) == uVar2 >> 0xc)) {
local_f8 = *(float *)(puVar20 + 4);
}
pCVar1 = param_1 + 0x38;
piVar6 = (int *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc0))();
cVar4 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0x104))();
if (((cVar4 == '\0') && (cVar4 = (**(code **)(*piVar6 + 0xd4))(), cVar4 == '\0')) &&
((cVar4 = (**(code **)(*(int *)(param_1 + 0x38) + 0x80))(), cVar4 == '\0' &&
(cVar4 = (**(code **)(*(int *)(param_1 + 0x38) + 0x80))(), cVar4 == '\0')))) {
(**(code **)(*(int *)(param_1 + 0x38) + 0x90))();
piVar7 = (int *)&stack0xfffffec0;
local_dc = local_cc;
local_d8 = (int)local_c8;
local_d4 = (int)local_c4;
pcVar3 = *(code **)(*piVar6 + 0x158);
(**(code **)(*piVar6 + 300))();
cVar4 = (*pcVar3)();
if (cVar4 != '\0') {
if (*(int *)(DirectChaseNavCheck._28_4_ + 0x30) != 0) {
pVVar18 = (Vector *)(**(code **)(*piVar6 + 300))();
cVar4 = CNavMesh::DoesRayStayWithinMesh(TheNavMesh,pVVar18,(Vector *)&local_cc);
if (cVar4 == '\0') goto LAB_00a7e295;
}
(**(code **)(*piVar6 + 0x120))();
(**(code **)(*piVar6 + 0xb4))();
piVar6 = (int *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc4))();
(**(code **)(*piVar6 + 0xc4))();
(**(code **)(*(int *)(param_1 + 0x38) + 0x48))();
param_1[0x4844] = (Charger)0x1;
goto LAB_00a7d217;
}
LAB_00a7e295:
pfVar21 = &local_dc;
piVar7 = (int *)&stack0xfffffec0;
}
else {
pfVar21 = (float *)0x0;
piVar7 = (int *)&stack0xfffffec4;
}
local_e4 = 0.0;
local_e0 = 0;
if (_towlower == 0) {
local_c4 = 0.0;
}
else {
*piVar7 = _towlower;
piVar7[1] = (int)&local_e4;
piVar7[0xb] = (int)"ChasePath::Update";
piVar7[10] = (int)"NextBot";
piVar7[9] = (int)"(%s)%s";
piVar7[8] = (int)&ChasePath::Update(INextBot*,CBaseEntity*,IPathCost_const&,Vector*)::tm_fmt
;
piVar7[7] = 0x68;
piVar7[6] = (int)"/data/src/game/server/nextbot/path/nextbotchasepath.h";
piVar7[5] = 0;
piVar7[3] = 0;
piVar7[4] = 0;
piVar7[2] = 0;
pcVar3 = *(code **)(_towlower + 0x50);
piVar7[-1] = 0xa7d11f;
(*pcVar3)();
local_c4 = (float)_towlower;
}
iVar11 = _DAT_0105db00;
local_cc = local_e4;
local_c8 = (float)local_e0;
if ((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) {
/* try { // try from 00a7d15b to 00a7d15f has its CatchHandler @ 00a7e36e */
piVar7[-1] = 0xa7d160;
iVar12 = ThreadGetCurrentId();
if (iVar11 == iVar12) {
if ((char *)*_DAT_0105d15c != "ChasePath::Update") {
piVar7[4] = 4;
piVar7[3] = (int)"NextBot";
piVar7[2] = 0;
piVar7[1] = (int)"ChasePath::Update";
*piVar7 = (int)_DAT_0105d15c;
/* try { // try from 00a7e100 to 00a7e123 has its CatchHandler @ 00a7e36e */
piVar7[-1] = 0xa7e105;
_DAT_0105d15c =
(int *)CVProfNode::GetSubNode
((char *)*piVar7,piVar7[1],(char *)piVar7[2],piVar7[3]);
}
puVar9 = (uint *)(_DAT_0105d1e8 + 4 + _DAT_0105d15c[0x1c] * 8);
*puVar9 = *puVar9 | 4;
*piVar7 = (int)_DAT_0105d15c;
piVar7[-1] = 0xa7e124;
CVProfNode::EnterScope();
DAT_0105d158 = '\0';
}
}
piVar7[4] = (int)pfVar21;
piVar7[3] = (int)&local_70;
piVar7[1] = iVar14;
*piVar7 = (int)pCVar1;
piVar7[2] = (int)local_f8;
/* try { // try from 00a7d190 to 00a7d1a0 has its CatchHandler @ 00a7e384 */
piVar7[-1] = 0xa7d195;
ChasePath::RefreshPath
((ChasePath *)*piVar7,(INextBot *)piVar7[1],(CBaseEntity *)piVar7[2],
(IPathCost *)piVar7[3],(Vector *)piVar7[4]);
piVar7[1] = iVar14;
*piVar7 = (int)pCVar1;
piVar7[-1] = 0xa7d1a1;
PathFollower::Update((PathFollower *)*piVar7,(INextBot *)piVar7[1]);
iVar11 = _DAT_0105db00;
if ((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) {
piVar7[-1] = 0xa7d1be;
iVar12 = ThreadGetCurrentId();
if (iVar11 == iVar12) {
*piVar7 = (int)_DAT_0105d15c;
piVar7[-1] = 0xa7e0ad;
cVar4 = CVProfNode::ExitScope();
if (cVar4 != '\0') {
_DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
}
DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
}
}
if (local_c4 != 0.0) {
piVar7[5] = 0;
piVar7[4] = 0;
piVar7[3] = 0;
*piVar7 = (int)local_c4;
piVar7[1] = (int)local_cc;
piVar7[2] = (int)local_c8;
pcVar3 = *(code **)((int)local_c4 + 0x54);
piVar7[-1] = 0xa7d202;
(*pcVar3)();
}
iVar11 = *(int *)(param_1 + 0x38);
*piVar7 = (int)pCVar1;
pcVar3 = *(code **)(iVar11 + 0x44);
piVar7[-1] = 0xa7d211;
CVar5 = (Charger)(*pcVar3)();
param_1[0x4844] = CVar5;
LAB_00a7d217:
piVar7[2] = (int)local_f8;
piVar7[1] = iVar14;
*piVar7 = (int)pCVar1;
piVar7[-1] = 0xa7d239;
DirectChasePath::NotifyVictim
((DirectChasePath *)*piVar7,(INextBot *)piVar7[1],(CBaseEntity *)piVar7[2]);
*(undefined4 *)this = 0;
*(undefined4 *)(this + 4) = 0;
*(undefined4 *)(this + 8) = 0;
return this;
}
}
(**(code **)(*piVar6 + 0xc4))();
fVar22 = (float)((int)param_2 + 0x4028);
cVar4 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0x11c))();
if (cVar4 != '\0') {
local_70 = &PTR_operator___00d20e60;
local_6c = fVar22;
local_64 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc0))();
pCVar10 = (CBaseEntity *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xb4))();
iVar14 = (**(code **)(*(int *)pCVar10 + 0x14c))();
if (iVar14 == 0) {
local_60 = 0x3f800000;
}
else {
local_60 = *(undefined4 *)(iVar14 + 0x1cec);
}
cVar4 = (**(code **)(*(int *)pCVar10 + 0x16c))();
local_68 = (CBaseEntity *)0x0;
if (cVar4 != '\0') {
local_68 = pCVar10;
}
iVar14 = CBaseEntity::GetTeamNumber(pCVar10);
local_5c = 9;
if (iVar14 == 3) {
local_5c = (**(code **)(*(int *)pCVar10 + 0x544))();
}
uVar2 = *(uint *)(param_1 + 0x34);
local_f8 = 0.0;
if (((uVar2 != 0xffffffff) &&
(puVar20 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar20 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar20 + 8) == uVar2 >> 0xc)) {
local_f8 = *(float *)(puVar20 + 4);
}
pCVar1 = param_1 + 0x38;
piVar6 = (int *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc0))();
cVar4 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0x104))();
if (((cVar4 == '\0') && (cVar4 = (**(code **)(*piVar6 + 0xd4))(), cVar4 == '\0')) &&
((cVar4 = (**(code **)(*(int *)(param_1 + 0x38) + 0x80))(), cVar4 == '\0' &&
(cVar4 = (**(code **)(*(int *)(param_1 + 0x38) + 0x80))(), cVar4 == '\0')))) {
(**(code **)(*(int *)(param_1 + 0x38) + 0x90))();
pfVar21 = (float *)&stack0xfffffec0;
local_dc = local_cc;
local_d8 = (int)local_c8;
local_d4 = (int)local_c4;
pcVar3 = *(code **)(*piVar6 + 0x158);
(**(code **)(*piVar6 + 300))();
cVar4 = (*pcVar3)();
if (cVar4 == '\0') {
LAB_00a7e315:
local_fc = &local_dc;
pfVar21 = (float *)&stack0xfffffec0;
goto LAB_00a7d779;
}
if (*(int *)(DirectChaseNavCheck._28_4_ + 0x30) != 0) {
pVVar18 = (Vector *)(**(code **)(*piVar6 + 300))();
cVar4 = CNavMesh::DoesRayStayWithinMesh(TheNavMesh,pVVar18,(Vector *)&local_cc);
if (cVar4 == '\0') goto LAB_00a7e315;
}
(**(code **)(*piVar6 + 0x120))();
(**(code **)(*piVar6 + 0xb4))();
piVar6 = (int *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc4))();
(**(code **)(*piVar6 + 0xc4))();
(**(code **)(*(int *)(param_1 + 0x38) + 0x48))();
param_1[0x4844] = (Charger)0x1;
}
else {
local_fc = (float *)0x0;
pfVar21 = (float *)&stack0xfffffec4;
LAB_00a7d779:
local_e4 = 0.0;
local_e0 = 0;
if (_towlower == 0) {
local_c4 = 0.0;
}
else {
*pfVar21 = (float)_towlower;
pfVar21[1] = (float)&local_e4;
pfVar21[0xb] = (float)"ChasePath::Update";
pfVar21[10] = (float)"NextBot";
pfVar21[9] = (float)"(%s)%s";
pfVar21[8] = (float)&ChasePath::Update(INextBot*,CBaseEntity*,IPathCost_const&,Vector*)::
tm_fmt;
pfVar21[7] = 1.45735e-43;
pfVar21[6] = (float)"/data/src/game/server/nextbot/path/nextbotchasepath.h";
pfVar21[5] = 0.0;
pfVar21[3] = 0.0;
pfVar21[4] = 0.0;
pfVar21[2] = 0.0;
pcVar3 = *(code **)(_towlower + 0x50);
pfVar21[-1] = 1.5414006e-38;
(*pcVar3)();
local_c4 = (float)_towlower;
}
iVar14 = _DAT_0105db00;
local_cc = local_e4;
local_c8 = (float)local_e0;
if ((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) {
/* try { // try from 00a7da4b to 00a7daaf has its CatchHandler @ 00a7e36a */
pfVar21[-1] = 1.5414844e-38;
iVar11 = ThreadGetCurrentId();
if (iVar14 == iVar11) {
if ((char *)*_DAT_0105d15c != "ChasePath::Update") {
pfVar21[4] = 5.60519e-45;
pfVar21[3] = (float)"NextBot";
pfVar21[2] = 0.0;
pfVar21[1] = (float)"ChasePath::Update";
*pfVar21 = (float)_DAT_0105d15c;
pfVar21[-1] = 1.5414935e-38;
_DAT_0105d15c =
(int *)CVProfNode::GetSubNode
((char *)*pfVar21,(int)pfVar21[1],(char *)pfVar21[2],
(int)pfVar21[3]);
}
puVar9 = (uint *)(_DAT_0105d1e8 + 4 + _DAT_0105d15c[0x1c] * 8);
*puVar9 = *puVar9 | 4;
*pfVar21 = (float)_DAT_0105d15c;
pfVar21[-1] = 1.5414978e-38;
CVProfNode::EnterScope();
DAT_0105d158 = '\0';
}
}
pfVar21[1] = fVar22;
pfVar21[4] = (float)local_fc;
pfVar21[3] = (float)&local_70;
pfVar21[2] = local_f8;
*pfVar21 = (float)pCVar1;
/* try { // try from 00a7d860 to 00a7d876 has its CatchHandler @ 00a7e346 */
pfVar21[-1] = 1.5414156e-38;
ChasePath::RefreshPath
((ChasePath *)*pfVar21,(INextBot *)pfVar21[1],(CBaseEntity *)pfVar21[2],
(IPathCost *)pfVar21[3],(Vector *)pfVar21[4]);
pfVar21[1] = fVar22;
*pfVar21 = (float)pCVar1;
pfVar21[-1] = 1.5414181e-38;
PathFollower::Update((PathFollower *)*pfVar21,(INextBot *)pfVar21[1]);
iVar14 = _DAT_0105db00;
if ((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) {
pfVar21[-1] = 1.5414732e-38;
iVar11 = ThreadGetCurrentId();
if (iVar14 == iVar11) {
*pfVar21 = (float)_DAT_0105d15c;
pfVar21[-1] = 1.5414767e-38;
cVar4 = CVProfNode::ExitScope();
if (cVar4 != '\0') {
_DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
}
DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
}
}
if (local_c4 != 0.0) {
pfVar21[5] = 0.0;
pfVar21[4] = 0.0;
pfVar21[3] = 0.0;
*pfVar21 = local_c4;
pfVar21[1] = local_cc;
pfVar21[2] = local_c8;
pcVar3 = *(code **)((int)local_c4 + 0x54);
pfVar21[-1] = 1.5414303e-38;
(*pcVar3)();
}
iVar14 = *(int *)(param_1 + 0x38);
*pfVar21 = (float)pCVar1;
pcVar3 = *(code **)(iVar14 + 0x44);
pfVar21[-1] = 1.5414324e-38;
CVar5 = (Charger)(*pcVar3)();
param_1[0x4844] = CVar5;
}
pfVar21[1] = fVar22;
pfVar21[2] = local_f8;
*pfVar21 = (float)pCVar1;
pfVar21[-1] = 1.5414371e-38;
DirectChasePath::NotifyVictim
((DirectChasePath *)*pfVar21,(INextBot *)pfVar21[1],(CBaseEntity *)pfVar21[2]);
if (param_1[0x4844] == (Charger)0x0) {
iVar14 = *(int *)param_2;
*pfVar21 = param_2;
pcVar3 = *(code **)(iVar14 + 0x9b0);
pfVar21[-1] = 1.5414405e-38;
piVar6 = (int *)(*pcVar3)();
local_f4 = 0;
pcVar3 = *(code **)(*piVar6 + 0xb4);
uVar2 = *(uint *)(param_1 + 0x34);
if (((uVar2 != 0xffffffff) &&
(puVar20 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar20 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar20 + 8) == uVar2 >> 0xc)) {
local_f4 = *(int *)(puVar20 + 4);
}
if ((*(byte *)(local_f4 + 0x14d) & 8) != 0) {
*pfVar21 = (float)local_f4;
pfVar21[-1] = 1.5417097e-38;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*pfVar21);
}
pfVar21[2] = 1.0;
pfVar21[1] = (float)(local_f4 + 0x2e0);
*pfVar21 = (float)piVar6;
pfVar21[-1] = 1.5414612e-38;
(*pcVar3)();
}
}
iVar14 = *piVar7;
*pfVar21 = (float)piVar7;
pcVar3 = *(code **)(iVar14 + 0x114);
pfVar21[-1] = 1.5414636e-38;
cVar4 = (*pcVar3)();
if (cVar4 == '\0') {
*pfVar21 = param_2;
pfVar21[-1] = 1.5415034e-38;
cVar4 = CTerrorPlayer::IsCustomAbilityReadyToFire((CTerrorPlayer *)*pfVar21);
if (cVar4 != '\0') {
local_f0 = 0.0;
uVar2 = *(uint *)(param_1 + 0x34);
if (((uVar2 != 0xffffffff) &&
(puVar20 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar20 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar20 + 8) == uVar2 >> 0xc)) {
local_f0 = *(float *)(puVar20 + 4);
}
pfVar21[1] = param_2;
*pfVar21 = (float)param_1;
pfVar21[2] = local_f0;
pfVar21[-1] = 1.5415166e-38;
cVar4 = ShouldChargeAtVictim
((ChargerAssault *)*pfVar21,(Charger *)pfVar21[1],
(CTerrorPlayer *)pfVar21[2]);
if (cVar4 != '\0') {
pCVar1 = param_1 + 0x4854;
*(undefined1 *)((int)param_2 + 0x4324) = 0;
*pfVar21 = (float)pCVar1;
pfVar21[-1] = 1.5417451e-38;
lVar23 = (longdouble)CountdownTimer::Now();
if ((float)lVar23 + 3.0 != *(float *)(param_1 + 0x485c)) {
iVar14 = *(int *)(param_1 + 0x4854);
*pfVar21 = (float)pCVar1;
pfVar21[1] = (float)(param_1 + 0x485c);
pcVar3 = *(code **)(iVar14 + 4);
pfVar21[-1] = 1.5417887e-38;
(*pcVar3)();
*(float *)(param_1 + 0x485c) = (float)lVar23 + 3.0;
}
if (*(float *)(param_1 + 0x4858) != 3.0) {
iVar14 = *(int *)(param_1 + 0x4854);
*pfVar21 = (float)pCVar1;
pfVar21[1] = (float)(param_1 + 0x4858);
pcVar3 = *(code **)(iVar14 + 4);
pfVar21[-1] = 1.5417555e-38;
(*pcVar3)();
*(undefined4 *)(param_1 + 0x4858) = 0x40400000;
}
uVar2 = *(uint *)(param_1 + 0x34);
fVar22 = 0.0;
if (((uVar2 != 0xffffffff) &&
(puVar20 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar20 != (undefined *)0xfffffffc))
&& (*(uint *)(puVar20 + 8) == uVar2 >> 0xc)) {
fVar22 = *(float *)(puVar20 + 4);
}
*pfVar21 = 1.17709e-43;
pfVar21[-1] = 1.5417653e-38;
pvVar17 = ::operator_new((uint)*pfVar21);
pfVar21[1] = fVar22;
*pfVar21 = (float)pvVar17;
/* try { // try from 00a7e22e to 00a7e232 has its CatchHandler @ 00a7e372 */
pfVar21[-1] = 1.5417673e-38;
ChargerChargeAtVictim::ChargerChargeAtVictim
((ChargerChargeAtVictim *)*pfVar21,(CTerrorPlayer *)pfVar21[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) = pvVar17;
*(char **)(this + 8) = "Charging!!";
return this;
}
}
*pfVar21 = (float)(param_1 + 0x4854);
pfVar21[-1] = 1.5415197e-38;
lVar23 = (longdouble)CountdownTimer::Now();
if (*(float *)(param_1 + 0x485c) <= (float)lVar23) {
local_f0 = 0.0;
pcVar3 = *(code **)(*(int *)((int)param_2 + 0x4028) + 0x114);
uVar2 = *(uint *)(param_1 + 0x34);
if (((uVar2 != 0xffffffff) &&
(puVar20 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar20 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar20 + 8) == uVar2 >> 0xc)) {
local_f0 = *(float *)(puVar20 + 4);
}
pfVar21[2] = 36.0;
*pfVar21 = fVar22;
pfVar21[1] = local_f0;
pfVar21[-1] = 1.5415379e-38;
cVar4 = (*pcVar3)();
if (cVar4 != '\0') {
uVar2 = *(uint *)(param_1 + 0x34);
fVar22 = 0.0;
if (((uVar2 != 0xffffffff) &&
(puVar20 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar20 != (undefined *)0xfffffffc))
&& (*(uint *)(puVar20 + 8) == uVar2 >> 0xc)) {
fVar22 = *(float *)(puVar20 + 4);
}
pfVar21[3] = 0.0;
pfVar21[2] = 0.8;
pfVar21[1] = fVar22;
*pfVar21 = param_2;
pfVar21[-1] = 1.5415497e-38;
cVar4 = UTIL_IsFacingWithinTolerance
((CBaseEntity *)*pfVar21,(CBaseEntity *)pfVar21[1],pfVar21[2],
(float *)pfVar21[3]);
if (cVar4 != '\0') {
uVar2 = *(uint *)(param_1 + 0x34);
piVar6 = (int *)0x0;
if (((uVar2 != 0xffffffff) &&
(puVar20 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar20 != (undefined *)0xfffffffc)
) && (*(uint *)(puVar20 + 8) == uVar2 >> 0xc)) {
piVar6 = *(int **)(puVar20 + 4);
}
iVar14 = *piVar6;
*pfVar21 = (float)piVar6;
pcVar3 = *(code **)(iVar14 + 0x288);
pfVar21[-1] = 1.541559e-38;
pfVar15 = (float *)(*pcVar3)();
iVar14 = *(int *)param_2;
*pfVar21 = param_2;
pcVar3 = *(code **)(iVar14 + 0x288);
pfVar21[-1] = 1.5415609e-38;
pfVar16 = (float *)(*pcVar3)();
local_bc = *pfVar15 - *pfVar16;
local_b8 = pfVar15[1] - pfVar16[1];
local_b4 = pfVar15[2] - pfVar16[2];
local_88 = 1;
local_94 = 0;
local_98 = 0;
local_9c = 0;
local_8c = 0;
local_a4 = 0;
local_a8 = 0;
local_ac = 0;
local_87 = local_b8 * local_b8 + local_bc * local_bc + local_b4 * local_b4 != 0.0;
local_cc = *pfVar16;
local_c8 = pfVar16[1];
local_c4 = pfVar16[2];
*pfVar21 = (float)&local_dc;
pfVar21[3] = 0.0;
pfVar21[2] = 0.0;
pfVar21[1] = param_2;
pfVar21[-1] = 1.5415949e-38;
CTraceFilterSimple::CTraceFilterSimple
((CTraceFilterSimple *)*pfVar21,(IHandleEntity *)pfVar21[1],(int)pfVar21[2],
(_func_bool_IHandleEntity_ptr_int *)pfVar21[3]);
iVar14 = *enginetrace;
pfVar21[4] = (float)&local_70;
pfVar21[3] = (float)&local_dc;
pfVar21[1] = (float)&local_cc;
pfVar21[2] = 9.422334e-38;
*pfVar21 = (float)enginetrace;
pcVar3 = *(code **)(iVar14 + 0x14);
pfVar21[-1] = 1.5416014e-38;
(*pcVar3)();
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
pfVar21[6] = -1.0;
pfVar21[5] = 1.4013e-45;
pfVar21[4] = 0.0;
pfVar21[3] = 0.0;
pfVar21[2] = 3.57331e-43;
pfVar21[1] = (float)&local_64;
*pfVar21 = (float)&local_70;
pfVar21[-1] = 1.5416108e-38;
DebugDrawLine((Vector *)*pfVar21,(Vector *)pfVar21[1],(int)pfVar21[2],(int)pfVar21[3],
(int)pfVar21[4],*(bool *)(pfVar21 + 5),pfVar21[6]);
}
if (local_44 != 1.0) {
uVar2 = *(uint *)(param_1 + 0x34);
iVar14 = 0;
if (((uVar2 != 0xffffffff) &&
(puVar20 = g_pEntityList + (uVar2 & 0xfff) * 0x10,
puVar20 != (undefined *)0xfffffffc)) && (*(uint *)(puVar20 + 8) == uVar2 >> 0xc)) {
iVar14 = *(int *)(puVar20 + 4);
}
if (local_24 != iVar14) goto LAB_00a7d9c4;
}
iVar14 = *(int *)param_2;
pfVar21[1] = -1.0;
*pfVar21 = param_2;
pcVar3 = *(code **)(iVar14 + 0x940);
pfVar21[-1] = 1.5416237e-38;
(*pcVar3)();
}
}
}
}
LAB_00a7d9c4:
*(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.