L L4D2node

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 into addons/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.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)