L L4D2node

SurvivorLegsStayClose::Update

0x0095d1b0 · 3741 bytes · __thiscall

_ZN21SurvivorLegsStayClose6UpdateEP11SurvivorBotf

Decompiled

undefined (3 params)

/* SurvivorLegsStayClose::Update(SurvivorBot*, float) */

SurvivorLegsStayClose * __thiscall
SurvivorLegsStayClose::Update(SurvivorLegsStayClose *this,SurvivorBot *param_1,float param_2)

{
  uint uVar1;
  char cVar2;
  SurvivorTeamSituation *this_00;
  CBaseEntity *pCVar3;
  int iVar4;
  int *piVar5;
  undefined4 *puVar6;
  undefined4 *puVar7;
  Vector *pVVar8;
  CTerrorPlayer *pCVar9;
  SurvivorLegsCoverFriendInCombat *this_01;
  SurvivorIntention *this_02;
  SurvivorLegsRetreat *pSVar10;
  int iVar11;
  undefined *puVar12;
  CBaseCombatCharacter *pCVar13;
  CBaseEntity *this_03;
  longdouble lVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  uint *local_20;
  
  cVar2 = (**(code **)(*(int *)param_2 + 0x89c))(param_2);
  if (cVar2 != '\0') goto LAB_0095d1ce;
  this_00 = (SurvivorTeamSituation *)SurvivorBot::GetTeamSituation((SurvivorBot *)param_2);
  cVar2 = SurvivorTeamSituation::IsAnyTeammateNearCheckpoint(this_00);
  if (cVar2 != '\0') {
    puVar6 = ::operator_new(0x68);
    *(undefined4 *)this = 1;
    puVar6[8] = 0;
    puVar6[9] = 0;
    puVar6[10] = 0;
    puVar6[3] = 0;
    puVar6[4] = 0;
    puVar6[5] = 0;
    puVar6[6] = 0;
    puVar6[7] = 0;
    puVar6[2] = 0;
    *(undefined1 *)(puVar6 + 0xc) = 0;
    *(undefined1 *)((int)puVar6 + 0x31) = 0;
    puVar6[0xb] = 0;
    *puVar6 = &PTR__SurvivorLegsMoveOn_00d0c388;
    puVar6[1] = &PTR__SurvivorLegsMoveOn_00d0c4f0;
    puVar6[0xd] = &PTR_NetworkStateChanged_00c0b6e0;
    puVar6[0xe] = 0;
    puVar6[0xf] = 0xbf800000;
    puVar6[0x10] = &PTR_NetworkStateChanged_00c0b6e0;
    puVar6[0x11] = 0;
    puVar6[0x12] = 0xbf800000;
    puVar6[0x13] = &PTR_NetworkStateChanged_00c0b6e0;
    puVar6[0x14] = 0;
    puVar6[0x15] = 0xbf800000;
    puVar6[0x17] = &PTR_NetworkStateChanged_00c0b6e0;
    puVar6[0x18] = 0;
    puVar6[0x19] = 0xbf800000;
    *(undefined4 **)(this + 4) = puVar6;
    *(undefined4 *)(this + 8) = 0;
    return this;
  }
  if (0 < *(int *)(TheDirector + 0x460)) {
    if ((*(byte *)((int)param_2 + 0x14d) & 8) != 0) {
      CBaseEntity::CalcAbsolutePosition((CBaseEntity *)param_2);
    }
    pCVar3 = (CBaseEntity *)
             CDirector::GetClosestActivePipeBomb(TheDirector,(Vector *)((int)param_2 + 0x2e0));
    if (pCVar3 != (CBaseEntity *)0x0) {
      lVar14 = (longdouble)SurvivorBot::GetAvoidRange((SurvivorBot *)param_2,pCVar3);
      if (((byte)pCVar3[0x14d] & 8) != 0) {
        CBaseEntity::CalcAbsolutePosition(pCVar3);
      }
      if ((*(byte *)((int)param_2 + 0x14d) & 8) != 0) {
        CBaseEntity::CalcAbsolutePosition((CBaseEntity *)param_2);
      }
      fVar15 = *(float *)((int)param_2 + 0x2e4) - *(float *)(pCVar3 + 0x2e4);
      fVar17 = *(float *)((int)param_2 + 0x2e8) - *(float *)(pCVar3 + 0x2e8);
      fVar16 = *(float *)((int)param_2 + 0x2e0) - *(float *)(pCVar3 + 0x2e0);
      if (fVar15 * fVar15 + fVar17 * fVar17 + fVar16 * fVar16 <=
          (float)lVar14 * 1.5 * (float)lVar14 * 1.5) {
        pSVar10 = ::operator_new(0x482c);
                    /* try { // try from 0095d875 to 0095d879 has its CatchHandler @ 0095e0ee */
        SurvivorLegsRetreat::SurvivorLegsRetreat(pSVar10,pCVar3);
        *(undefined4 *)this = 2;
        *(SurvivorLegsRetreat **)(this + 4) = pSVar10;
        *(char **)(this + 8) = "Retreating from nearby pipe bomb!";
        *(undefined4 *)(param_1 + 0x20) = 0;
        *(undefined4 *)(param_1 + 0x24) = 0;
        *(undefined4 *)(param_1 + 0x28) = 0;
        *(undefined4 *)(param_1 + 0x2c) = 0;
        return this;
      }
    }
  }
  cVar2 = CDirector::IsFinale(TheDirector);
  if (cVar2 != '\0') {
    piVar5 = *(int **)(TheDirector + 0x638);
    if (*piVar5 == 5) {
      if (((char)piVar5[0x44] != '\0') && (*(char *)((int)piVar5 + 0x111) == '\0'))
      goto LAB_0095d601;
    }
    else if (piVar5[1] == 6) {
LAB_0095d601:
      cVar2 = SurvivorBot::IsAllowedToMoveToRescueVehicle((SurvivorBot *)param_2);
      if (cVar2 != '\0') {
        puVar6 = ::operator_new(0x4818);
        puVar6[8] = 0;
        puVar6[9] = 0;
        puVar6[10] = 0;
        puVar6[3] = 0;
        puVar6[4] = 0;
        puVar6[5] = 0;
        puVar6[6] = 0;
        puVar6[7] = 0;
        puVar6[2] = 0;
        *(undefined1 *)(puVar6 + 0xc) = 0;
        *(undefined1 *)((int)puVar6 + 0x31) = 0;
        puVar6[0xb] = 0;
        *puVar6 = &PTR__SurvivorLegsMeetRescueVehicleArrival_00d0b1e8;
        puVar6[1] = &PTR__SurvivorLegsMeetRescueVehicleArrival_00d0b350;
                    /* try { // try from 0095d91e to 0095d922 has its CatchHandler @ 0095e085 */
        PathFollower::PathFollower((PathFollower *)(puVar6 + 0xd));
        *(undefined4 *)this = 1;
        *(undefined4 **)(this + 4) = puVar6;
        *(char **)(this + 8) = "Moving to meet the incoming rescue vehicle";
        return this;
      }
    }
  }
  cVar2 = CDirector::IsFinale(TheDirector);
  if (((cVar2 != '\0') && (cVar2 = CDirector::IsFinaleVehicleReady(TheDirector), cVar2 != '\0')) &&
     (cVar2 = SurvivorBot::IsAllowedToMoveToRescueVehicle((SurvivorBot *)param_2), cVar2 != '\0')) {
    puVar6 = ::operator_new(0x4814);
    puVar6[8] = 0;
    puVar6[9] = 0;
    puVar6[10] = 0;
    puVar6[3] = 0;
    puVar6[4] = 0;
    puVar6[5] = 0;
    puVar6[6] = 0;
    puVar6[7] = 0;
    puVar6[2] = 0;
    *(undefined1 *)(puVar6 + 0xc) = 0;
    *(undefined1 *)((int)puVar6 + 0x31) = 0;
    puVar6[0xb] = 0;
    *puVar6 = &PTR__SurvivorLegsEnterRescueVehicle_00d0b388;
    puVar6[1] = &PTR__SurvivorLegsEnterRescueVehicle_00d0b4f0;
                    /* try { // try from 0095d845 to 0095d849 has its CatchHandler @ 0095e0f0 */
    PathFollower::PathFollower((PathFollower *)(puVar6 + 0xd));
    *(undefined4 *)this = 1;
    *(undefined4 **)(this + 4) = puVar6;
    *(char **)(this + 8) = "The rescue vehicle is here!!!";
    return this;
  }
  iVar4 = (**(code **)(*(int *)param_2 + 0x9a8))(param_2);
  if (*(int *)(iVar4 + 0x70) < 1) {
    local_20 = (uint *)0x0;
  }
  else {
    local_20 = *(uint **)(iVar4 + 100);
    uVar1 = *local_20;
    if (((uVar1 == 0xffffffff) ||
        (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 == (undefined *)0xfffffffc)) ||
       (*(uint *)(puVar12 + 8) != uVar1 >> 0xc)) {
      local_20 = (uint *)0x0;
    }
    else if (*(int *)(puVar12 + 4) == 0) {
      local_20 = (uint *)0x0;
    }
  }
  uVar1 = *(uint *)(this_00 + 0x50);
  if (((uVar1 != 0xffffffff) &&
      (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
     ((*(uint *)(puVar12 + 8) == uVar1 >> 0xc &&
      (((*(CTerrorPlayer **)(puVar12 + 4) != (CTerrorPlayer *)0x0 &&
        (iVar4 = CTerrorPlayer::GetMovingPlatform(*(CTerrorPlayer **)(puVar12 + 4)), iVar4 != 0)) &&
       (iVar11 = CTerrorPlayer::GetMovingPlatform((CTerrorPlayer *)param_2), iVar4 != iVar11)))))) {
    puVar6 = ::operator_new(0x4840);
    puVar6[8] = 0;
    puVar6[9] = 0;
    puVar6[10] = 0;
    puVar6[3] = 0;
    puVar6[4] = 0;
    puVar6[5] = 0;
    puVar6[6] = 0;
    puVar6[7] = 0;
    puVar6[2] = 0;
    *(undefined1 *)(puVar6 + 0xc) = 0;
    *(undefined1 *)((int)puVar6 + 0x31) = 0;
    puVar6[0xb] = 0;
    *puVar6 = &PTR__SurvivorLegsApproachElevator_00d0cba8;
    puVar6[1] = &PTR__SurvivorLegsApproachElevator_00d0cd10;
                    /* try { // try from 0095de3d to 0095de41 has its CatchHandler @ 0095e0b5 */
    PathFollower::PathFollower((PathFollower *)(puVar6 + 0xd));
    puVar6[0xd] = &PTR__ChasePath_00bfaa48;
    *(undefined4 *)this = 2;
    puVar6[0x1205] = &PTR_NetworkStateChanged_00c0b6e0;
    puVar6[0x1206] = 0;
    puVar6[0x1207] = 0xbf800000;
    puVar6[0x1208] = &PTR_NetworkStateChanged_00c0b6e0;
    puVar6[0x1209] = 0;
    puVar6[0x120a] = 0xbf800000;
    puVar6[0x120b] = &PTR_NetworkStateChanged_00c0b6e0;
    puVar6[0x120c] = 0;
    puVar6[0x120d] = 0xbf800000;
    puVar6[0x120e] = 0xffffffff;
    puVar6[0x120f] = 1;
    *(undefined4 **)(this + 4) = puVar6;
    *(undefined4 *)(param_1 + 0x20) = 0;
    *(undefined4 *)(param_1 + 0x24) = 0;
    *(undefined4 *)(param_1 + 0x28) = 0;
    *(undefined4 *)(param_1 + 0x2c) = 0;
    *(char **)(this + 8) = "Joining team leader on a platform";
    return this;
  }
  if (((local_20 != (uint *)0x0) && (uVar1 = *local_20, uVar1 != 0xffffffff)) &&
     (((puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc &&
       ((*(uint *)(puVar12 + 8) == uVar1 >> 0xc &&
        (piVar5 = *(int **)(puVar12 + 4), piVar5 != (int *)0x0)))) &&
      (cVar2 = (**(code **)(*piVar5 + 300))(piVar5), cVar2 != '\0')))) {
    pCVar3 = (CBaseEntity *)0x0;
    uVar1 = *local_20;
    if (((uVar1 != 0xffffffff) &&
        (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
      pCVar3 = *(CBaseEntity **)(puVar12 + 4);
    }
    iVar4 = CBaseEntity::GetTeamNumber(pCVar3);
    if (((iVar4 == 3) && (iVar4 = (**(code **)(*(int *)pCVar3 + 0x544))(pCVar3), iVar4 == 7)) &&
       (lVar14 = (longdouble)IntervalTimer::Now(), (float)lVar14 - (float)local_20[6] < 3.0)) {
      piVar5 = (int *)0x0;
      uVar1 = *local_20;
      if (((uVar1 != 0xffffffff) &&
          (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
         (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
        piVar5 = *(int **)(puVar12 + 4);
      }
      piVar5 = (int *)(**(code **)(*piVar5 + 0x148))(piVar5);
      piVar5 = (int *)(**(code **)(*piVar5 + 0xc4))(piVar5);
      cVar2 = (**(code **)(*piVar5 + 0x114))(piVar5,2);
      if ((cVar2 == '\0') && (cVar2 = IsTimeOfDayBetween(2,4), cVar2 == '\0')) {
        (**(code **)(*(int *)param_2 + 0x988))(param_2,0xbf800000);
      }
    }
    pCVar13 = (CBaseCombatCharacter *)0x0;
    uVar1 = *local_20;
    if (((uVar1 != 0xffffffff) &&
        (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
      pCVar13 = *(CBaseCombatCharacter **)(puVar12 + 4);
    }
    this_02 = (SurvivorIntention *)(**(code **)(*(int *)param_2 + 0x9a8))(param_2);
    cVar2 = SurvivorIntention::IsImmediatelyDangerousTo(this_02,(CTerrorPlayer *)param_2,pCVar13);
    if ((cVar2 != '\0') && ((char)local_20[10] != '\0')) {
      uVar1 = *local_20;
      pCVar3 = (CBaseEntity *)0x0;
      if ((uVar1 != 0xffffffff) &&
         ((puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc &&
          (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)))) {
        pCVar3 = *(CBaseEntity **)(puVar12 + 4);
      }
      this_03 = (CBaseEntity *)0x0;
      lVar14 = (longdouble)SurvivorBot::GetAvoidRange((SurvivorBot *)param_2,pCVar3);
      uVar1 = *local_20;
      if (((uVar1 != 0xffffffff) &&
          (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
         (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
        this_03 = *(CBaseEntity **)(puVar12 + 4);
      }
      if (((byte)this_03[0x14d] & 8) != 0) {
        CBaseEntity::CalcAbsolutePosition(this_03);
      }
      if ((*(byte *)((int)param_2 + 0x14d) & 8) != 0) {
        CBaseEntity::CalcAbsolutePosition((CBaseEntity *)param_2);
      }
      fVar17 = *(float *)((int)param_2 + 0x2e0) - *(float *)(this_03 + 0x2e0);
      fVar15 = *(float *)((int)param_2 + 0x2e4) - *(float *)(this_03 + 0x2e4);
      fVar16 = *(float *)((int)param_2 + 0x2e8) - *(float *)(this_03 + 0x2e8);
      if (fVar15 * fVar15 + fVar17 * fVar17 + fVar16 * fVar16 < (float)lVar14 * (float)lVar14) {
        pCVar3 = (CBaseEntity *)0x0;
        uVar1 = *local_20;
        if (((uVar1 != 0xffffffff) &&
            (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc))
           && (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
          pCVar3 = *(CBaseEntity **)(puVar12 + 4);
        }
        iVar4 = CBaseEntity::GetTeamNumber(pCVar3);
        if (((iVar4 != 3) || (iVar4 = (**(code **)(*(int *)pCVar3 + 0x544))(pCVar3), iVar4 != 0)) ||
           ((cVar2 = SurvivorTeamSituation::IsAnyTeammateNearCheckpoint(this_00), cVar2 == '\0' &&
            (cVar2 = CDirector::IsFinaleVehicleReady(TheDirector), cVar2 == '\0')))) {
          pCVar3 = (CBaseEntity *)0x0;
          uVar1 = *local_20;
          if (((uVar1 != 0xffffffff) &&
              (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)
              ) && (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
            pCVar3 = *(CBaseEntity **)(puVar12 + 4);
          }
          pSVar10 = ::operator_new(0x482c);
                    /* try { // try from 0095dcfa to 0095dcfe has its CatchHandler @ 0095e0ca */
          SurvivorLegsRetreat::SurvivorLegsRetreat(pSVar10,pCVar3);
          *(undefined4 *)this = 2;
          *(SurvivorLegsRetreat **)(this + 4) = pSVar10;
          *(char **)(this + 8) = "Retreating from dangerous threat!";
          *(undefined4 *)(param_1 + 0x20) = 0;
          *(undefined4 *)(param_1 + 0x24) = 0;
          *(undefined4 *)(param_1 + 0x28) = 0;
          *(undefined4 *)(param_1 + 0x2c) = 0;
          return this;
        }
      }
    }
  }
  piVar5 = (int *)(**(code **)(*(int *)param_2 + 0x9a0))(param_2);
  cVar2 = (**(code **)(*piVar5 + 0x174))(piVar5);
  if (cVar2 == '\0') {
    uVar1 = *(uint *)(this_00 + 0x30);
    if (((uVar1 != 0xffffffff) &&
        (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
       (((*(uint *)(puVar12 + 8) == uVar1 >> 0xc &&
         ((*(CTerrorPlayer **)(puVar12 + 4) != (CTerrorPlayer *)0x0 &&
          ((float)*(int *)((int)param_2 + 0x2ba0) * 10.0 +
           *(float *)(SurvivorBotSeparationDangerMinRange._28_4_ + 0x2c) <
           *(float *)(this_00 + 0x34))))) &&
        (cVar2 = SurvivorBot::IsReachable((SurvivorBot *)param_2,*(CTerrorPlayer **)(puVar12 + 4)),
        cVar2 != '\0')))) {
      piVar5 = (int *)0x0;
      uVar1 = *(uint *)(this_00 + 0x30);
      if ((uVar1 != 0xffffffff) &&
         (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) {
        if (*(uint *)(puVar12 + 8) == uVar1 >> 0xc) {
          piVar5 = *(int **)(puVar12 + 4);
        }
        else {
          piVar5 = (int *)0x0;
        }
      }
      puVar6 = ::operator_new(0x484c);
      puVar6[8] = 0;
      puVar6[9] = 0;
      puVar6[10] = 0;
      puVar6[3] = 0;
      puVar6[4] = 0;
      puVar6[5] = 0;
      puVar6[6] = 0;
      puVar6[7] = 0;
      puVar6[2] = 0;
      *(undefined1 *)(puVar6 + 0xc) = 0;
      *(undefined1 *)((int)puVar6 + 0x31) = 0;
      puVar6[0xb] = 0;
      *puVar6 = &PTR__SurvivorLegsRegroup_00d0c528;
      puVar6[1] = &PTR__SurvivorLegsRegroup_00d0c690;
      puVar6[0xd] = 0xffffffff;
                    /* try { // try from 0095d50b to 0095d50f has its CatchHandler @ 0095e0b7 */
      PathFollower::PathFollower((PathFollower *)(puVar6 + 0xe));
      puVar6[0xe] = &PTR__ChasePath_00bfaa48;
      puVar6[0x1206] = &PTR_NetworkStateChanged_00c0b6e0;
      puVar6[0x1207] = 0;
      puVar6[0x1208] = 0xbf800000;
      puVar6[0x1209] = &PTR_NetworkStateChanged_00c0b6e0;
      puVar6[0x120a] = 0;
      puVar6[0x120b] = 0xbf800000;
      puVar6[0x120c] = &PTR_NetworkStateChanged_00c0b6e0;
      puVar6[0x120d] = 0;
      puVar6[0x120e] = 0xbf800000;
      puVar6[0x120f] = 0xffffffff;
      puVar6[0x1210] = 1;
      puVar6[0x1211] = &PTR_NetworkStateChanged_00c23e10;
      puVar6[0x1212] = 0xbf800000;
      if (piVar5 == (int *)0x0) {
        puVar6[0xd] = 0xffffffff;
      }
      else {
                    /* try { // try from 0095d5a8 to 0095d5aa has its CatchHandler @ 0095e09f */
        puVar7 = (undefined4 *)(**(code **)(*piVar5 + 0xc))(piVar5);
        puVar6[0xd] = *puVar7;
      }
      *(undefined4 *)this = 2;
      *(undefined4 **)(this + 4) = puVar6;
      *(char **)(this + 8) = "I\'m too far away from the closest human survivor";
      *(undefined4 *)(param_1 + 0x20) = 0;
      *(undefined4 *)(param_1 + 0x24) = 0;
      *(undefined4 *)(param_1 + 0x28) = 0;
      *(undefined4 *)(param_1 + 0x2c) = 0;
      return this;
    }
    cVar2 = CTerrorGameRules::IsScavengeMode();
    if (((((((cVar2 == '\0') &&
            (cVar2 = SurvivorBot::IsAvailable((SurvivorBot *)param_2), cVar2 != '\0')) &&
           (uVar1 = *(uint *)(this_00 + 0x30), uVar1 != 0xffffffff)) &&
          ((puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc &&
           (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)))) &&
         ((*(CTerrorPlayer **)(puVar12 + 4) != (CTerrorPlayer *)0x0 &&
          ((36.0 < *(float *)(this_00 + 0x34) &&
           (cVar2 = CTerrorPlayer::IsInCombat(*(CTerrorPlayer **)(puVar12 + 4),false), cVar2 != '\0'
           )))))) &&
        (cVar2 = CTerrorPlayer::IsInCombat((CTerrorPlayer *)param_2,false), cVar2 == '\0')) &&
       ((cVar2 = SurvivorTeamSituation::IsAnyTeammateNearCheckpoint(this_00), cVar2 == '\0' &&
        (cVar2 = CDirector::IsFinaleVehicleReady(TheDirector), cVar2 == '\0')))) {
      uVar1 = *(uint *)(this_00 + 0x30);
      if ((uVar1 == 0xffffffff) ||
         ((puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 == (undefined *)0xfffffffc ||
          (*(uint *)(puVar12 + 8) != uVar1 >> 0xc)))) {
        pCVar9 = (CTerrorPlayer *)0x0;
      }
      else {
        pCVar9 = *(CTerrorPlayer **)(puVar12 + 4);
      }
      cVar2 = SurvivorBot::IsReachable((SurvivorBot *)param_2,pCVar9);
      if (cVar2 != '\0') {
        uVar1 = *(uint *)(this_00 + 0x30);
        if (((uVar1 == 0xffffffff) ||
            (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 == (undefined *)0xfffffffc))
           || (*(uint *)(puVar12 + 8) != uVar1 >> 0xc)) {
          pCVar9 = (CTerrorPlayer *)0x0;
        }
        else {
          pCVar9 = *(CTerrorPlayer **)(puVar12 + 4);
        }
        this_01 = ::operator_new(0x484c);
                    /* try { // try from 0095da85 to 0095da89 has its CatchHandler @ 0095e0dc */
        SurvivorLegsCoverFriendInCombat::SurvivorLegsCoverFriendInCombat(this_01,pCVar9);
        *(undefined4 *)this = 2;
        *(SurvivorLegsCoverFriendInCombat **)(this + 4) = this_01;
        *(char **)(this + 8) = "Moving to assist human in combat";
        *(undefined4 *)(param_1 + 0x20) = 0;
        *(undefined4 *)(param_1 + 0x24) = 0;
        *(undefined4 *)(param_1 + 0x28) = 0;
        *(undefined4 *)(param_1 + 0x2c) = 0;
        return this;
      }
    }
  }
  if (*(int *)(SurvivorBotDebugTeamMovement._28_4_ + 0x30) != 0) {
    piVar5 = (int *)(**(code **)(*(int *)param_2 + 0x9a0))(param_2);
    cVar2 = (**(code **)(*piVar5 + 0x168))(piVar5);
    if (cVar2 != '\0') {
      pVVar8 = (Vector *)
               (**(code **)(*(int *)((int)param_2 + 0x4028) + 0xd4))((int)param_2 + 0x4028);
      NDebugOverlay::Circle(pVVar8,10.0,0xff,0,0,0xff,true,0.1);
    }
  }
LAB_0095d1ce:
  *(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)