L L4D2node

BoomerAssault::Update

0x00a65310 · 3908 bytes · __thiscall

_ZN13BoomerAssault6UpdateEP6Boomerf

Decompiled

undefined (3 params)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* BoomerAssault::Update(Boomer*, float) */

BoomerAssault * __thiscall BoomerAssault::Update(BoomerAssault *this,Boomer *param_1,float param_2)

{
  uint uVar1;
  code *pcVar2;
  char cVar3;
  Boomer BVar4;
  int *piVar5;
  int *piVar6;
  int *piVar7;
  uint *puVar8;
  int *piVar9;
  CBaseEntity *pCVar10;
  int iVar11;
  int iVar12;
  Boomer *pBVar13;
  int iVar14;
  BoomerVomitOnVictim *this_00;
  Vector *pVVar15;
  CTerrorPlayer *pCVar16;
  float fVar17;
  undefined *puVar18;
  float *pfVar19;
  int *local_68;
  float local_64;
  int local_54;
  int local_50;
  int local_4c;
  int local_48;
  int local_44;
  int local_40;
  int local_3c;
  int local_38;
  undefined **local_34;
  int *local_30;
  CBaseEntity *local_2c;
  undefined4 local_28;
  undefined4 local_24;
  undefined4 local_20;
  
  pfVar19 = (float *)&stack0xffffff54;
  piVar5 = (int *)(**(code **)(*(int *)param_2 + 0x9b4))();
  piVar6 = (int *)(**(code **)(*(int *)param_2 + 0x9b0))();
  pCVar16 = (CTerrorPlayer *)0x0;
  uVar1 = *(uint *)(param_1 + 0x34);
  if (((uVar1 != 0xffffffff) &&
      (puVar18 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar18 != (undefined *)0xfffffffc)) &&
     (*(uint *)(puVar18 + 8) == uVar1 >> 0xc)) {
    pCVar16 = *(CTerrorPlayer **)(puVar18 + 4);
  }
  piVar7 = (int *)BossZombiePlayerBot::ChooseVictim
                            ((BossZombiePlayerBot *)param_2,pCVar16,0,(CBaseCombatCharacter *)0x0);
  if (piVar7 == (int *)0x0) {
    *(undefined4 *)(param_1 + 0x34) = 0xffffffff;
    goto LAB_00a653c4;
  }
  puVar8 = (uint *)(**(code **)(*piVar7 + 0xc))();
  puVar18 = g_pEntityList;
  uVar1 = *puVar8;
  *(uint *)(param_1 + 0x34) = uVar1;
  if (((uVar1 == 0xffffffff) ||
      (puVar18 = puVar18 + (uVar1 & 0xfff) * 0x10, puVar18 == (undefined *)0xfffffffc)) ||
     ((*(uint *)(puVar18 + 8) != uVar1 >> 0xc ||
      ((*(int **)(puVar18 + 4) == (int *)0x0 ||
       (cVar3 = (**(code **)(**(int **)(puVar18 + 4) + 300))(), cVar3 == '\0'))))))
  goto LAB_00a653c4;
  uVar1 = *(uint *)((int)param_2 + 0x30bc);
  if ((uVar1 == 0xffffffff) ||
     (((puVar18 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar18 == (undefined *)0xfffffffc ||
       (*(uint *)(puVar18 + 8) != uVar1 >> 0xc)) ||
      (piVar7 = *(int **)(puVar18 + 4), piVar7 == (int *)0x0)))) {
    *(undefined4 *)this = 3;
    *(undefined4 *)(this + 4) = 0;
    *(char **)(this + 8) = "No ability!";
    return this;
  }
  if (0 < *(int *)(param_1 + 0x443c)) {
    piVar9 = (int *)(**(code **)(*(int *)param_2 + 0x9b0))();
    cVar3 = (**(code **)(*piVar9 + 0x114))();
    if (cVar3 != '\0') {
      iVar11 = (int)param_2 + 0x4028;
      local_34 = &PTR_operator___00d20e60;
      local_30 = (int *)iVar11;
      local_28 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc0))();
      pCVar10 = (CBaseEntity *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xb4))();
      iVar12 = (**(code **)(*(int *)pCVar10 + 0x14c))();
      local_24 = 0x3f800000;
      if (iVar12 != 0) {
        local_24 = *(undefined4 *)(iVar12 + 0x1cec);
      }
      cVar3 = (**(code **)(*(int *)pCVar10 + 0x16c))();
      local_2c = (CBaseEntity *)0x0;
      if (cVar3 != '\0') {
        local_2c = pCVar10;
      }
      iVar12 = CBaseEntity::GetTeamNumber(pCVar10);
      local_20 = 9;
      if (iVar12 == 3) {
        local_20 = (**(code **)(*(int *)pCVar10 + 0x544))();
      }
      local_64 = 0.0;
      uVar1 = *(uint *)(param_1 + 0x34);
      if (((uVar1 != 0xffffffff) &&
          (puVar18 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar18 != (undefined *)0xfffffffc)) &&
         (*(uint *)(puVar18 + 8) == uVar1 >> 0xc)) {
        local_64 = *(float *)(puVar18 + 4);
      }
      pBVar13 = param_1 + 0x38;
      piVar5 = (int *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc0))();
      cVar3 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0x104))();
      if (((cVar3 == '\0') && (cVar3 = (**(code **)(*piVar5 + 0xd4))(), cVar3 == '\0')) &&
         ((cVar3 = (**(code **)(*(int *)(param_1 + 0x38) + 0x80))(), cVar3 == '\0' &&
          (cVar3 = (**(code **)(*(int *)(param_1 + 0x38) + 0x80))(), cVar3 == '\0')))) {
        (**(code **)(*(int *)(param_1 + 0x38) + 0x90))();
        piVar6 = (int *)&stack0xffffff50;
        local_4c = local_40;
        local_48 = local_3c;
        local_44 = local_38;
        pcVar2 = *(code **)(*piVar5 + 0x158);
        (**(code **)(*piVar5 + 300))();
        cVar3 = (*pcVar2)();
        if (cVar3 != '\0') {
          if (*(int *)(DirectChaseNavCheck._28_4_ + 0x30) != 0) {
            pVVar15 = (Vector *)(**(code **)(*piVar5 + 300))();
            cVar3 = CNavMesh::DoesRayStayWithinMesh(TheNavMesh,pVVar15,(Vector *)&local_40);
            if (cVar3 == '\0') goto LAB_00a66251;
          }
          (**(code **)(*piVar5 + 0x120))();
          (**(code **)(*piVar5 + 0xb4))();
          piVar5 = (int *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc4))();
          (**(code **)(*piVar5 + 0xc4))();
          (**(code **)(*(int *)(param_1 + 0x38) + 0x48))();
          param_1[0x4844] = (Boomer)0x1;
          goto LAB_00a65b3f;
        }
LAB_00a66251:
        piVar5 = &local_4c;
        piVar6 = (int *)&stack0xffffff50;
      }
      else {
        piVar5 = (int *)0x0;
        piVar6 = (int *)&stack0xffffff54;
      }
      local_54 = 0;
      local_50 = 0;
      if (_towlower == 0) {
        local_38 = 0;
      }
      else {
        *piVar6 = _towlower;
        piVar6[1] = (int)&local_54;
        piVar6[0xb] = (int)"ChasePath::Update";
        piVar6[10] = (int)"NextBot";
        piVar6[9] = (int)"(%s)%s";
        piVar6[8] = (int)&ChasePath::Update(INextBot*,CBaseEntity*,IPathCost_const&,Vector*)::tm_fmt
        ;
        piVar6[7] = 0x68;
        piVar6[6] = (int)"/data/src/game/server/nextbot/path/nextbotchasepath.h";
        piVar6[5] = 0;
        piVar6[3] = 0;
        piVar6[4] = 0;
        piVar6[2] = 0;
        pcVar2 = *(code **)(_towlower + 0x50);
        piVar6[-1] = 0xa65a68;
        (*pcVar2)();
        local_38 = _towlower;
      }
      iVar12 = _DAT_0105db00;
      local_40 = local_54;
      local_3c = local_50;
      if ((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) {
                    /* try { // try from 00a65a95 to 00a65a99 has its CatchHandler @ 00a662ef */
        piVar6[-1] = 0xa65a9a;
        iVar14 = ThreadGetCurrentId();
        if (iVar12 == iVar14) {
          if ((char *)*_DAT_0105d15c != "ChasePath::Update") {
            piVar6[4] = 4;
            piVar6[3] = (int)"NextBot";
            piVar6[2] = 0;
            piVar6[1] = (int)"ChasePath::Update";
            *piVar6 = (int)_DAT_0105d15c;
                    /* try { // try from 00a65f60 to 00a65f83 has its CatchHandler @ 00a662ef */
            piVar6[-1] = 0xa65f65;
            _DAT_0105d15c =
                 (int *)CVProfNode::GetSubNode
                                  ((char *)*piVar6,piVar6[1],(char *)piVar6[2],piVar6[3]);
          }
          puVar8 = (uint *)(_DAT_0105d1e8 + 4 + _DAT_0105d15c[0x1c] * 8);
          *puVar8 = *puVar8 | 4;
          *piVar6 = (int)_DAT_0105d15c;
          piVar6[-1] = 0xa65f84;
          CVProfNode::EnterScope();
          DAT_0105d158 = '\0';
        }
      }
      piVar6[4] = (int)piVar5;
      piVar6[3] = (int)&local_34;
      piVar6[1] = iVar11;
      *piVar6 = (int)pBVar13;
      piVar6[2] = (int)local_64;
                    /* try { // try from 00a65abe to 00a65ace has its CatchHandler @ 00a662db */
      piVar6[-1] = 0xa65ac3;
      ChasePath::RefreshPath
                ((ChasePath *)*piVar6,(INextBot *)piVar6[1],(CBaseEntity *)piVar6[2],
                 (IPathCost *)piVar6[3],(Vector *)piVar6[4]);
      piVar6[1] = iVar11;
      *piVar6 = (int)pBVar13;
      piVar6[-1] = 0xa65acf;
      PathFollower::Update((PathFollower *)*piVar6,(INextBot *)piVar6[1]);
      iVar12 = _DAT_0105db00;
      if ((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) {
        piVar6[-1] = 0xa65aec;
        iVar14 = ThreadGetCurrentId();
        if (iVar12 == iVar14) {
          *piVar6 = (int)_DAT_0105d15c;
          piVar6[-1] = 0xa65f9d;
          cVar3 = CVProfNode::ExitScope();
          if (cVar3 != '\0') {
            _DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
          }
          DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
        }
      }
      if (local_38 != 0) {
        piVar6[5] = 0;
        piVar6[4] = 0;
        piVar6[3] = 0;
        *piVar6 = local_38;
        piVar6[1] = local_40;
        piVar6[2] = local_3c;
        pcVar2 = *(code **)(local_38 + 0x54);
        piVar6[-1] = 0xa65b27;
        (*pcVar2)();
      }
      iVar12 = *(int *)(param_1 + 0x38);
      *piVar6 = (int)pBVar13;
      pcVar2 = *(code **)(iVar12 + 0x44);
      piVar6[-1] = 0xa65b36;
      BVar4 = (Boomer)(*pcVar2)();
      param_1[0x4844] = BVar4;
LAB_00a65b3f:
      piVar6[1] = iVar11;
      piVar6[2] = (int)local_64;
      *piVar6 = (int)pBVar13;
      piVar6[-1] = 0xa65b55;
      DirectChasePath::NotifyVictim
                ((DirectChasePath *)*piVar6,(INextBot *)piVar6[1],(CBaseEntity *)piVar6[2]);
      *(undefined4 *)this = 0;
      *(undefined4 *)(this + 4) = 0;
      *(undefined4 *)(this + 8) = 0;
      return this;
    }
  }
  (**(code **)(*piVar5 + 0xc4))();
  if ((((*(int *)(ZombieAllowAIToUseAbilities._28_4_ + 0x30) != 0) &&
       (*(int *)((int)param_2 + 0x4018) == 0)) &&
      (cVar3 = (**(code **)(*piVar7 + 0x32c))(), cVar3 != '\0')) &&
     (cVar3 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0x114))(), cVar3 != '\0')) {
    piVar5 = (int *)(**(code **)(*(int *)param_2 + 0x9bc))();
    cVar3 = (**(code **)(*piVar5 + 0xd0))();
    if (cVar3 != '\0') {
      pCVar16 = (CTerrorPlayer *)0x0;
      uVar1 = *(uint *)(param_1 + 0x34);
      if (((uVar1 != 0xffffffff) &&
          (puVar18 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar18 != (undefined *)0xfffffffc)) &&
         (*(uint *)(puVar18 + 8) == uVar1 >> 0xc)) {
        pCVar16 = *(CTerrorPlayer **)(puVar18 + 4);
      }
      this_00 = ::operator_new(0x48);
                    /* try { // try from 00a65edf to 00a65ee3 has its CatchHandler @ 00a662f2 */
      BoomerVomitOnVictim::BoomerVomitOnVictim(this_00,pCVar16);
      *(undefined4 *)(param_1 + 0x20) = 0;
      *(undefined4 *)(param_1 + 0x24) = 0;
      *(undefined4 *)(param_1 + 0x28) = 0;
      *(undefined4 *)(param_1 + 0x2c) = 0;
      *(undefined4 *)this = 2;
      *(BoomerVomitOnVictim **)(this + 4) = this_00;
      *(char **)(this + 8) = "Launching vomit attack!";
      return this;
    }
  }
  piVar5 = (int *)((int)param_2 + 0x4028);
  cVar3 = (**(code **)(*piVar5 + 0x11c))();
  if (cVar3 != '\0') {
    local_34 = &PTR_operator___00d20e60;
    local_30 = piVar5;
    local_28 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc0))();
    pCVar10 = (CBaseEntity *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xb4))();
    iVar11 = (**(code **)(*(int *)pCVar10 + 0x14c))();
    if (iVar11 == 0) {
      local_24 = 0x3f800000;
    }
    else {
      local_24 = *(undefined4 *)(iVar11 + 0x1cec);
    }
    cVar3 = (**(code **)(*(int *)pCVar10 + 0x16c))();
    local_2c = (CBaseEntity *)0x0;
    if (cVar3 != '\0') {
      local_2c = pCVar10;
    }
    iVar11 = CBaseEntity::GetTeamNumber(pCVar10);
    local_20 = 9;
    if (iVar11 == 3) {
      local_20 = (**(code **)(*(int *)pCVar10 + 0x544))();
    }
    local_64 = 0.0;
    uVar1 = *(uint *)(param_1 + 0x34);
    if (((uVar1 != 0xffffffff) &&
        (puVar18 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar18 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar18 + 8) == uVar1 >> 0xc)) {
      local_64 = *(float *)(puVar18 + 4);
    }
    pBVar13 = param_1 + 0x38;
    piVar7 = (int *)(**(code **)(*(int *)((int)param_2 + 0x4028) + 0xc0))();
    cVar3 = (**(code **)(*(int *)((int)param_2 + 0x4028) + 0x104))();
    if ((((cVar3 == '\0') && (cVar3 = (**(code **)(*piVar7 + 0xd4))(), cVar3 == '\0')) &&
        (cVar3 = (**(code **)(*(int *)(param_1 + 0x38) + 0x80))(), cVar3 == '\0')) &&
       (cVar3 = (**(code **)(*(int *)(param_1 + 0x38) + 0x80))(), cVar3 == '\0')) {
      (**(code **)(*(int *)(param_1 + 0x38) + 0x90))();
      pfVar19 = (float *)&stack0xffffff50;
      local_4c = local_40;
      local_48 = local_3c;
      local_44 = local_38;
      pcVar2 = *(code **)(*piVar7 + 0x158);
      (**(code **)(*piVar7 + 300))();
      cVar3 = (*pcVar2)();
      if (cVar3 == '\0') {
LAB_00a6629c:
        local_68 = &local_4c;
        pfVar19 = (float *)&stack0xffffff50;
        goto LAB_00a65687;
      }
      if (*(int *)(DirectChaseNavCheck._28_4_ + 0x30) != 0) {
        pVVar15 = (Vector *)(**(code **)(*piVar7 + 300))();
        cVar3 = CNavMesh::DoesRayStayWithinMesh(TheNavMesh,pVVar15,(Vector *)&local_40);
        if (cVar3 == '\0') goto LAB_00a6629c;
      }
      (**(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] = (Boomer)0x1;
    }
    else {
      local_68 = (int *)0x0;
      pfVar19 = (float *)&stack0xffffff54;
LAB_00a65687:
      local_54 = 0;
      local_50 = 0;
      if (_towlower == 0) {
        local_38 = 0;
      }
      else {
        *pfVar19 = (float)_towlower;
        pfVar19[1] = (float)&local_54;
        pfVar19[0xb] = (float)"ChasePath::Update";
        pfVar19[10] = (float)"NextBot";
        pfVar19[9] = (float)"(%s)%s";
        pfVar19[8] = (float)&ChasePath::Update(INextBot*,CBaseEntity*,IPathCost_const&,Vector*)::
                             tm_fmt;
        pfVar19[7] = 1.45735e-43;
        pfVar19[6] = (float)"/data/src/game/server/nextbot/path/nextbotchasepath.h";
        pfVar19[5] = 0.0;
        pfVar19[3] = 0.0;
        pfVar19[4] = 0.0;
        pfVar19[2] = 0.0;
        pcVar2 = *(code **)(_towlower + 0x50);
        pfVar19[-1] = 1.52759e-38;
        (*pcVar2)();
        local_38 = _towlower;
      }
      iVar11 = _DAT_0105db00;
      local_40 = local_54;
      local_3c = local_50;
      if ((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) {
                    /* try { // try from 00a6572f to 00a65733 has its CatchHandler @ 00a662eb */
        pfVar19[-1] = 1.5275975e-38;
        iVar12 = ThreadGetCurrentId();
        if (iVar11 == iVar12) {
          if ((char *)*_DAT_0105d15c != "ChasePath::Update") {
            pfVar19[4] = 5.60519e-45;
            pfVar19[3] = (float)"NextBot";
            pfVar19[2] = 0.0;
            pfVar19[1] = (float)"ChasePath::Update";
            *pfVar19 = (float)_DAT_0105d15c;
                    /* try { // try from 00a661c7 to 00a661ea has its CatchHandler @ 00a662eb */
            pfVar19[-1] = 1.5279775e-38;
            _DAT_0105d15c =
                 (int *)CVProfNode::GetSubNode
                                  ((char *)*pfVar19,(int)pfVar19[1],(char *)pfVar19[2],
                                   (int)pfVar19[3]);
          }
          puVar8 = (uint *)(_DAT_0105d1e8 + 4 + _DAT_0105d15c[0x1c] * 8);
          *puVar8 = *puVar8 | 4;
          *pfVar19 = (float)_DAT_0105d15c;
          pfVar19[-1] = 1.5279819e-38;
          CVProfNode::EnterScope();
          DAT_0105d158 = '\0';
        }
      }
      pfVar19[1] = (float)piVar5;
      *pfVar19 = (float)pBVar13;
      pfVar19[4] = (float)local_68;
      pfVar19[3] = (float)&local_34;
      pfVar19[2] = local_64;
                    /* try { // try from 00a65759 to 00a65769 has its CatchHandler @ 00a662ba */
      pfVar19[-1] = 1.5276034e-38;
      ChasePath::RefreshPath
                ((ChasePath *)*pfVar19,(INextBot *)pfVar19[1],(CBaseEntity *)pfVar19[2],
                 (IPathCost *)pfVar19[3],(Vector *)pfVar19[4]);
      pfVar19[1] = (float)piVar5;
      *pfVar19 = (float)pBVar13;
      pfVar19[-1] = 1.527605e-38;
      PathFollower::Update((PathFollower *)*pfVar19,(INextBot *)pfVar19[1]);
      iVar11 = _DAT_0105db00;
      if ((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) {
        pfVar19[-1] = 1.5276095e-38;
        iVar12 = ThreadGetCurrentId();
        if (iVar11 == iVar12) {
          *pfVar19 = (float)_DAT_0105d15c;
          pfVar19[-1] = 1.5279854e-38;
          cVar3 = CVProfNode::ExitScope();
          if (cVar3 != '\0') {
            _DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
          }
          DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
        }
      }
      if (local_38 != 0) {
        pfVar19[5] = 0.0;
        pfVar19[4] = 0.0;
        pfVar19[3] = 0.0;
        *pfVar19 = (float)local_38;
        pfVar19[1] = (float)local_40;
        pfVar19[2] = (float)local_3c;
        pcVar2 = *(code **)(local_38 + 0x54);
        pfVar19[-1] = 1.527618e-38;
        (*pcVar2)();
      }
      iVar11 = *(int *)(param_1 + 0x38);
      *pfVar19 = (float)pBVar13;
      pcVar2 = *(code **)(iVar11 + 0x44);
      pfVar19[-1] = 1.5276196e-38;
      BVar4 = (Boomer)(*pcVar2)();
      param_1[0x4844] = BVar4;
    }
    pfVar19[1] = (float)piVar5;
    *pfVar19 = (float)pBVar13;
    pfVar19[2] = local_64;
    pfVar19[-1] = 1.5276236e-38;
    DirectChasePath::NotifyVictim
              ((DirectChasePath *)*pfVar19,(INextBot *)pfVar19[1],(CBaseEntity *)pfVar19[2]);
    if (*(int *)(param_1 + 0x443c) < 1) {
      iVar11 = *(int *)param_2;
      *pfVar19 = param_2;
      pcVar2 = *(code **)(iVar11 + 0x9b0);
      pfVar19[-1] = 1.5276269e-38;
      piVar7 = (int *)(*pcVar2)();
      pcVar2 = *(code **)(*piVar7 + 0xb4);
      uVar1 = *(uint *)(param_1 + 0x34);
      iVar11 = 0;
      if (((uVar1 != 0xffffffff) &&
          (puVar18 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar18 != (undefined *)0xfffffffc)) &&
         (*(uint *)(puVar18 + 8) == uVar1 >> 0xc)) {
        iVar11 = *(int *)(puVar18 + 4);
      }
      if ((*(byte *)(iVar11 + 0x14d) & 8) != 0) {
        *pfVar19 = (float)iVar11;
        pfVar19[-1] = 1.5279984e-38;
        CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*pfVar19);
      }
      pfVar19[2] = 1.0;
      pfVar19[1] = (float)(iVar11 + 0x2e0);
      *pfVar19 = (float)piVar7;
      pfVar19[-1] = 1.5276418e-38;
      (*pcVar2)();
    }
  }
  iVar11 = *piVar6;
  *pfVar19 = (float)piVar6;
  pcVar2 = *(code **)(iVar11 + 0x114);
  pfVar19[-1] = 1.5276437e-38;
  cVar3 = (*pcVar2)();
  if (cVar3 == '\0') {
    fVar17 = 0.0;
    pcVar2 = *(code **)(*(int *)((int)param_2 + 0x4028) + 0x114);
    uVar1 = *(uint *)(param_1 + 0x34);
    if (((uVar1 != 0xffffffff) &&
        (puVar18 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar18 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar18 + 8) == uVar1 >> 0xc)) {
      fVar17 = *(float *)(puVar18 + 4);
    }
    pfVar19[2] = 50.0;
    pfVar19[1] = fVar17;
    *pfVar19 = (float)piVar5;
    pfVar19[-1] = 1.527657e-38;
    cVar3 = (*pcVar2)();
    if (cVar3 != '\0') {
      iVar11 = *(int *)param_2;
      pfVar19[1] = -1.0;
      *pfVar19 = param_2;
      pcVar2 = *(code **)(iVar11 + 0x940);
      pfVar19[-1] = 1.5276608e-38;
      (*pcVar2)();
    }
  }
LAB_00a653c4:
  *(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)