L L4D2node

SurvivorAttack::SelectTarget

0x00918cb0 · 1505 bytes · __thiscall

_ZN14SurvivorAttack12SelectTargetEP11SurvivorBot

Decompiled

undefined (2 params)

/* SurvivorAttack::SelectTarget(SurvivorBot*) */

undefined4 __thiscall SurvivorAttack::SelectTarget(SurvivorAttack *this,SurvivorBot *param_1)

{
  int iVar1;
  code *pcVar2;
  int iVar3;
  int *piVar4;
  uint uVar5;
  char cVar6;
  int iVar7;
  uint *puVar8;
  undefined4 uVar9;
  int *piVar10;
  int *piVar11;
  int *piVar12;
  uint uVar13;
  uint uVar14;
  undefined *puVar15;
  undefined *puVar16;
  int iVar17;
  uint *puVar18;
  uint *puVar19;
  int in_GS_OFFSET;
  float fVar20;
  int aiStack_1a8 [3];
  float local_16c;
  float local_168;
  float local_164;
  float local_160;
  float local_15c;
  float local_154;
  float local_150;
  uint local_14c;
  SurvivorBot *local_148;
  float local_144;
  float local_140;
  float local_13c;
  int *local_138;
  float local_134;
  int *local_130;
  undefined **local_12c;
  undefined1 local_128;
  undefined1 local_127;
  undefined4 local_24;
  int local_20;
  
  puVar18 = (uint *)&stack0xfffffe64;
  puVar19 = (uint *)&stack0xfffffe64;
  puVar8 = (uint *)&stack0xfffffe64;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  cVar6 = IsBlindedByVomit(this,param_1);
  if (cVar6 != '\0') {
LAB_00918ea8:
    uVar9 = 0;
    goto LAB_00918eaa;
  }
  if (*(int *)(gpGlobals + 4) == *(int *)(this + 0x50)) {
    uVar14 = *(uint *)(this + 0x4c);
    if (((uVar14 == 0xffffffff) ||
        (puVar16 = g_pEntityList + (uVar14 & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)) ||
       (*(uint *)(puVar16 + 8) != uVar14 >> 0xc)) goto LAB_00918ea8;
  }
  else {
    local_148 = param_1;
    CBasePlayer::EyeVectors((CBasePlayer *)param_1,(Vector *)&local_144,(Vector *)0x0,(Vector *)0x0)
    ;
    local_138 = (int *)0x0;
    iVar17 = 0;
    local_134 = 3.4028235e+38;
    local_130 = (int *)0x0;
    iVar7 = (**(code **)(*(int *)param_1 + 0x9a8))();
    puVar16 = g_pEntityList;
    piVar12 = (int *)&stack0xfffffe64;
    if (0 < *(int *)(iVar7 + 0x70)) {
      do {
        while (((uVar14 = *(uint *)(iVar17 * 0x2c + *(int *)(iVar7 + 100)), uVar14 == 0xffffffff ||
                (puVar15 = puVar16 + (uVar14 & 0xfff) * 0x10, puVar15 == (undefined *)0xfffffffc))
               || ((*(uint *)(puVar15 + 8) != uVar14 >> 0xc ||
                   (piVar4 = *(int **)(puVar15 + 4), piVar4 == (int *)0x0))))) {
          iVar17 = iVar17 + 1;
          puVar18 = (uint *)piVar12;
          if (*(int *)(iVar7 + 0x70) <= iVar17) goto LAB_00918dd0;
        }
        iVar1 = *piVar4;
        *piVar12 = (int)piVar4;
        pcVar2 = *(code **)(iVar1 + 300);
        piVar12[-1] = 0x918dba;
        cVar6 = (*pcVar2)();
        piVar11 = piVar12;
        if (cVar6 != '\0') {
          iVar3 = *(int *)(local_148 + 0x4028);
          iVar1 = *(int *)(SurvivorBotCloseThreatRange._28_4_ + 0x2c);
          piVar12[1] = (int)piVar4;
          *piVar12 = (int)(local_148 + 0x4028);
          piVar12[2] = iVar1;
          pcVar2 = *(code **)(iVar3 + 0x114);
          piVar12[-1] = 0x918ef8;
          cVar6 = (*pcVar2)();
          if (cVar6 == '\0') {
            if (local_130 == (int *)0x0) {
              iVar1 = *(int *)local_148;
              *piVar12 = (int)local_148;
              pcVar2 = *(code **)(iVar1 + 0x9ac);
              piVar12[-1] = 0x918f1b;
              piVar10 = (int *)(*pcVar2)();
              iVar1 = *piVar10;
              piVar12[2] = 0;
              piVar12[1] = (int)piVar4;
              *piVar12 = (int)piVar10;
              pcVar2 = *(code **)(iVar1 + 0xf8);
              piVar12[-1] = 0x918f32;
              cVar6 = (*pcVar2)();
              if (cVar6 != '\0') {
                local_130 = piVar4;
              }
            }
          }
          else {
            iVar1 = *(int *)local_148;
            piVar12[1] = (int)local_148;
            *piVar12 = (int)&local_154;
            pcVar2 = *(code **)(iVar1 + 0x234);
            piVar12[-1] = 0x918f63;
            (*pcVar2)();
            iVar1 = *piVar4;
            piVar12[-1] = (int)&local_160;
            *piVar12 = (int)piVar4;
            pcVar2 = *(code **)(iVar1 + 0x234);
            piVar12[-2] = 0x918f7b;
            (*pcVar2)();
            local_164 = 0.0;
            piVar12[-2] = (int)&local_16c;
            local_16c = local_160 - local_154;
            local_168 = local_15c - local_150;
            piVar12[-3] = 0x918fc6;
            VectorNormalize((Vector *)piVar12[-2]);
            fVar20 = 1.0 - (local_16c * local_144 + local_168 * local_140 + 1.0 +
                           local_164 * local_13c) * 0.5;
            piVar11 = piVar12 + -2;
            if (fVar20 < local_134) {
              iVar1 = *(int *)local_148;
              piVar12[-2] = (int)local_148;
              pcVar2 = *(code **)(iVar1 + 0x9ac);
              piVar12[-3] = 0x91903e;
              piVar11 = (int *)(*pcVar2)();
              iVar1 = *piVar11;
              *piVar12 = 0;
              piVar12[-1] = (int)piVar4;
              piVar12[-2] = (int)piVar11;
              pcVar2 = *(code **)(iVar1 + 0xf8);
              piVar12[-3] = 0x919055;
              cVar6 = (*pcVar2)();
              piVar11 = piVar12 + -2;
              if (cVar6 != '\0') {
                piVar11 = piVar12 + -2;
                local_138 = piVar4;
                local_134 = fVar20;
              }
            }
          }
        }
        iVar17 = iVar17 + 1;
        puVar16 = g_pEntityList;
        piVar12 = piVar11;
        puVar18 = (uint *)piVar11;
      } while (iVar17 < *(int *)(iVar7 + 0x70));
    }
LAB_00918dd0:
    iVar7 = 0;
    uVar14 = *(uint *)(this + 0x4c);
    if (((uVar14 != 0xffffffff) &&
        (puVar15 = puVar16 + (uVar14 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar15 + 8) == uVar14 >> 0xc)) {
      iVar7 = *(int *)(puVar15 + 4);
    }
    piVar12 = local_138;
    puVar19 = puVar18;
    if ((local_138 == (int *)0x0) && (piVar12 = local_130, local_130 == (int *)0x0)) {
      *(undefined4 *)(this + 0x4c) = 0xffffffff;
      if (this[0x80] == (SurvivorAttack)0x0) {
        *(undefined4 *)(this + 0x50) = *(undefined4 *)(gpGlobals + 4);
        uVar9 = 0;
        puVar8 = puVar18;
        goto LAB_00918eaa;
      }
      uVar14 = 0xffffffff;
      iVar17 = 0;
LAB_009190b0:
      if (iVar7 != iVar17) {
        iVar7 = *(int *)param_1;
        *puVar18 = (uint)param_1;
        pcVar2 = *(code **)(iVar7 + 0x9a8);
        puVar18[-1] = 0x9190c9;
        piVar12 = (int *)(*pcVar2)();
        iVar7 = piVar12[0x18];
        if (iVar7 < 1) {
          iVar7 = *piVar12;
          *puVar18 = (uint)piVar12;
          pcVar2 = *(code **)(iVar7 + 0xb0);
          puVar18[-1] = 0x919279;
          piVar12 = (int *)(*pcVar2)();
          iVar7 = *piVar12;
          *puVar18 = (uint)piVar12;
          pcVar2 = *(code **)(iVar7 + 0x13c);
          puVar18[-1] = 0x919284;
          uVar14 = (*pcVar2)();
          puVar18[3] = uVar14;
          fVar20 = *(float *)(gpGlobals + 0xc);
          *puVar18 = (uint)"%3.2f: %s: PopLegsStack: Underflow\n";
          *(double *)(puVar18 + 1) = (double)fVar20;
          puVar18[-1] = 0x9192a7;
          DevMsg((char *)*puVar18);
        }
        else {
          iVar17 = iVar7 + -1;
          piVar12[0x18] = iVar17;
          piVar4 = (int *)piVar12[iVar7 + 8];
          if (piVar4 != (int *)0x0) {
            iVar7 = *piVar4;
            *puVar18 = (uint)piVar4;
            pcVar2 = *(code **)(iVar7 + 4);
            puVar18[-1] = 0x9190ec;
            (*pcVar2)();
            iVar17 = piVar12[0x18];
          }
          uVar14 = piVar12[iVar17 + 8];
          if (((uVar14 != 0) && (uVar5 = piVar12[6], uVar5 != 0)) &&
             (piVar12 = *(int **)(uVar14 + 8), piVar12 != (int *)0x0)) {
            iVar7 = *piVar12;
            puVar18[1] = (uint)piVar12;
            *puVar18 = (uint)&local_154;
            puVar18[3] = 0;
            puVar18[2] = uVar5;
            pcVar2 = *(code **)(iVar7 + 0xc0);
            puVar18[-1] = 0x919132;
            (*pcVar2)();
            puVar18[1] = uVar14;
            *puVar18 = uVar5;
            puVar18[2] = (uint)local_154;
            puVar18[3] = (uint)local_150;
            puVar18[4] = local_14c;
            puVar18[-1] = *(undefined4 *)(uVar14 + 8);
            puVar18[-2] = 0x919166;
            iVar7 = Action<SurvivorBot>::ApplyResult();
            *(int *)(uVar14 + 8) = iVar7;
            puVar19 = puVar18 + -1;
            if (iVar7 != 0) {
              *puVar18 = 1;
              puVar18[-1] = uVar5 + 0x4028;
              puVar18[-2] = 0x919187;
              cVar6 = INextBot::IsDebugging((INextBot *)puVar18[-1],*puVar18);
              puVar19 = puVar18 + -1;
              if (cVar6 != '\0') {
                local_127 = 0;
                local_24 = 0;
                local_12c = &PTR_InitQuietTruncation_00c08ee8;
                local_128 = 1;
                pcVar2 = *(code **)(*(int *)(uVar5 + 0x4028) + 0x144);
                puVar18[-1] = *(undefined4 *)(uVar14 + 8);
                puVar18[-2] = 0x9191c4;
                uVar13 = Action<SurvivorBot>::DebugString((Action<SurvivorBot> *)puVar18[-1]);
                puVar18[1] = uVar14 + 0x11;
                puVar18[2] = uVar13;
                *puVar18 = (uint)"%s: %s";
                puVar18[-1] = (uint)&local_12c;
                puVar18[-2] = 0x9191e2;
                uVar9 = CFmtStrN<256>::sprintf((CFmtStrN<256> *)puVar18[-1],(char *)*puVar18);
                puVar18[-1] = uVar5 + 0x4028;
                *puVar18 = uVar9;
                puVar18[-2] = 0x9191eb;
                (*pcVar2)();
                puVar19 = puVar18 + -1;
              }
            }
          }
        }
        puVar16 = g_pEntityList;
        this[0x80] = (SurvivorAttack)0x0;
        uVar14 = *(uint *)(this + 0x4c);
      }
    }
    else {
      iVar17 = *piVar12;
      *puVar18 = (uint)piVar12;
      pcVar2 = *(code **)(iVar17 + 0xc);
      puVar18[-1] = 0x918e16;
      puVar8 = (uint *)(*pcVar2)();
      puVar16 = g_pEntityList;
      uVar14 = *puVar8;
      *(uint *)(this + 0x4c) = uVar14;
      if (this[0x80] != (SurvivorAttack)0x0) {
        iVar17 = 0;
        if (((uVar14 != 0xffffffff) &&
            (puVar15 = puVar16 + (uVar14 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
           (*(uint *)(puVar15 + 8) == uVar14 >> 0xc)) {
          iVar17 = *(int *)(puVar15 + 4);
        }
        goto LAB_009190b0;
      }
    }
    *(undefined4 *)(this + 0x50) = *(undefined4 *)(gpGlobals + 4);
    uVar9 = 0;
    puVar8 = puVar19;
    if (((uVar14 == 0xffffffff) ||
        (puVar16 = puVar16 + (uVar14 & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)) ||
       (*(uint *)(puVar16 + 8) != uVar14 >> 0xc)) goto LAB_00918eaa;
  }
  uVar9 = *(undefined4 *)(puVar16 + 4);
  puVar8 = puVar19;
LAB_00918eaa:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    *(undefined **)((int)puVar8 + -4) = &UNK_009192bd;
    __stack_chk_fail();
  }
  return uVar9;
}

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)