L L4D2node

SurvivorLegsMoveOn::Update

0x009600a0 · 3726 bytes · __thiscall

_ZN18SurvivorLegsMoveOn6UpdateEP11SurvivorBotf

Decompiled

undefined (3 params)

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

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

{
  char cVar1;
  SurvivorTeamSituation *this_00;
  int iVar2;
  CNavArea *pCVar3;
  Vector *pVVar4;
  int *piVar5;
  int iVar6;
  undefined4 *puVar7;
  undefined4 uVar8;
  undefined4 uVar9;
  SurvivorLegsCoverOrphan *this_01;
  undefined4 *puVar10;
  SurvivorLegsCoverFriendInCombat *this_02;
  CTerrorPlayer *pCVar11;
  undefined *puVar12;
  uint uVar13;
  SurvivorTeamSituation *pSVar14;
  uint uVar15;
  longdouble lVar16;
  float fVar17;
  CTerrorPlayer *local_4c;
  float local_48;
  int local_30;
  undefined4 local_2c;
  undefined4 local_28;
  int local_24;
  int local_20;
  
  this_00 = (SurvivorTeamSituation *)SurvivorBot::GetTeamSituation((SurvivorBot *)param_2);
  piVar5 = *(int **)(TheDirector + 0x638);
  if (*piVar5 == 5) {
    if (((char)piVar5[0x44] == '\0') || (*(char *)((int)piVar5 + 0x111) != '\0')) goto LAB_009600d1;
  }
  else if (piVar5[1] != 6) {
LAB_009600d1:
    lVar16 = (longdouble)CountdownTimer::Now();
    if ((*(float *)(param_1 + 0x54) <= (float)lVar16) && (*(int *)(TheDirector + 0x1c0) < 1)) {
      lVar16 = (longdouble)RandomFloat(0x40400000,0x40a00000);
      fVar17 = (float)lVar16;
      lVar16 = (longdouble)CountdownTimer::Now();
      if ((float)lVar16 + fVar17 != *(float *)(param_1 + 0x54)) {
        (**(code **)(*(int *)(param_1 + 0x4c) + 4))(param_1 + 0x4c,param_1 + 0x54);
        *(float *)(param_1 + 0x54) = (float)lVar16 + fVar17;
      }
      if (fVar17 != *(float *)(param_1 + 0x50)) {
        (**(code **)(*(int *)(param_1 + 0x4c) + 4))(param_1 + 0x4c,param_1 + 0x50);
        *(float *)(param_1 + 0x50) = fVar17;
      }
      pCVar3 = (CNavArea *)(**(code **)(*(int *)param_2 + 0x52c))(param_2);
      if ((pCVar3 != (CNavArea *)0x0) && ((*(uint *)(pCVar3 + 300) & 0x140) != 0)) {
        local_30 = 0;
        local_2c = 0;
        local_28 = 0;
        local_24 = 0;
        local_20 = 0;
                    /* try { // try from 00960436 to 009604c3 has its CatchHandler @ 00960fbf */
        pVVar4 = (Vector *)
                 (**(code **)(*(int *)((int)param_2 + 0x4028) + 0xd4))((int)param_2 + 0x4028);
        SearchSurroundingAreas<FindBattlestationScan>
                  (pCVar3,pVVar4,(FindBattlestationScan *)&local_30,500.0,0,-1);
        iVar2 = 0;
        if (0 < local_24) {
          do {
            fVar17 = *(float *)(*(int *)(local_30 + iVar2 * 4) + 0x154);
            lVar16 = (longdouble)CTerrorPlayer::GetFlowDistance((CTerrorPlayer *)param_2,0);
            if (fVar17 <= (float)lVar16) {
              puVar7 = ::operator_new(0x483c);
              puVar7[8] = 0;
              puVar7[9] = 0;
              puVar7[10] = 0;
              puVar7[3] = 0;
              puVar7[4] = 0;
              puVar7[5] = 0;
              puVar7[6] = 0;
              puVar7[7] = 0;
              puVar7[2] = 0;
              *(undefined1 *)(puVar7 + 0xc) = 0;
              *(undefined1 *)((int)puVar7 + 0x31) = 0;
              puVar7[0xb] = 0;
              *puVar7 = &PTR__SurvivorLegsBattleStations_00d0ae48;
              puVar7[1] = &PTR__SurvivorLegsBattleStations_00d0afb0;
                    /* try { // try from 00960528 to 0096052c has its CatchHandler @ 00960fe6 */
              PathFollower::PathFollower((PathFollower *)(puVar7 + 0xd));
              puVar7[0x1206] = &PTR_NetworkStateChanged_00c0b6e0;
              puVar7[0x1207] = 0;
              puVar7[0x1208] = 0xbf800000;
              puVar7[0x1209] = &PTR_NetworkStateChanged_00c0b6e0;
              puVar7[0x120a] = 0;
              puVar7[0x120b] = 0xbf800000;
              puVar7[0x120c] = &PTR_NetworkStateChanged_00c0b6e0;
              puVar7[0x120d] = 0;
              puVar7[0x120e] = 0xbf800000;
              *(undefined4 *)(param_1 + 0x20) = 0;
              *(undefined4 *)(param_1 + 0x24) = 0;
              *(undefined4 *)(param_1 + 0x28) = 0;
              *(undefined4 *)(param_1 + 0x2c) = 0;
              local_24 = 0;
              *(undefined4 **)(this + 4) = puVar7;
              *(undefined4 *)this = 2;
              *(char **)(this + 8) = "I\'ve entered a battlefield";
              CUtlMemory<TerrorNavArea*,int>::Purge((CUtlMemory<TerrorNavArea*,int> *)&local_30);
              local_20 = local_30;
              CUtlMemory<TerrorNavArea*,int>::Purge((CUtlMemory<TerrorNavArea*,int> *)&local_30);
              return this;
            }
            iVar2 = iVar2 + 1;
          } while (iVar2 < local_24);
        }
        local_24 = 0;
        CUtlMemory<TerrorNavArea*,int>::Purge((CUtlMemory<TerrorNavArea*,int> *)&local_30);
        local_20 = local_30;
        CUtlMemory<TerrorNavArea*,int>::Purge((CUtlMemory<TerrorNavArea*,int> *)&local_30);
      }
    }
  }
  if (*(int *)(this_00 + 0xc4) == 0) goto LAB_00960105;
  piVar5 = (int *)(**(code **)(*(int *)param_2 + 0x9a0))(param_2);
  cVar1 = (**(code **)(*piVar5 + 0xd4))(piVar5);
  if (cVar1 != '\0') goto LAB_00960105;
  cVar1 = SurvivorBot::IsAvailable((SurvivorBot *)param_2);
  if (cVar1 != '\0') {
    if (*(int *)(this_00 + 0xc4) < 1) {
      local_4c = (CTerrorPlayer *)0x0;
    }
    else {
      iVar2 = 0;
      local_4c = (CTerrorPlayer *)0x0;
      local_48 = 3.4028235e+38;
      pSVar14 = this_00;
      do {
        uVar15 = *(uint *)(pSVar14 + 0x88);
        pCVar11 = (CTerrorPlayer *)0x0;
        if (((uVar15 != 0xffffffff) &&
            (puVar12 = g_pEntityList + (uVar15 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc))
           && (*(uint *)(puVar12 + 8) == uVar15 >> 0xc)) {
          pCVar11 = *(CTerrorPlayer **)(puVar12 + 4);
        }
        cVar1 = CTerrorPlayer::IsInCombat(pCVar11,true);
        if (cVar1 != '\0') {
          uVar15 = *(uint *)(pSVar14 + 0x88);
          pCVar11 = (CTerrorPlayer *)0x0;
          if (((uVar15 != 0xffffffff) &&
              (puVar12 = g_pEntityList + (uVar15 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc
              )) && (*(uint *)(puVar12 + 8) == uVar15 >> 0xc)) {
            pCVar11 = *(CTerrorPlayer **)(puVar12 + 4);
          }
          cVar1 = SurvivorBot::IsAbleToCoverFriend((SurvivorBot *)param_2,pCVar11);
          if (cVar1 == '\0') {
            uVar15 = *(uint *)(pSVar14 + 0x88);
            pCVar11 = (CTerrorPlayer *)0x0;
            if (((uVar15 != 0xffffffff) &&
                (puVar12 = g_pEntityList + (uVar15 & 0xfff) * 0x10,
                puVar12 != (undefined *)0xfffffffc)) && (*(uint *)(puVar12 + 8) == uVar15 >> 0xc)) {
              pCVar11 = *(CTerrorPlayer **)(puVar12 + 4);
            }
            piVar5 = (int *)SurvivorTeamSituation::GetPathToFriend(this_00,pCVar11);
            if (piVar5 == (int *)0x0) {
              cVar1 = INextBot::IsDebugging((INextBot *)((int)param_2 + 0x4028),0x100);
              if (cVar1 != '\0') {
                uVar15 = *(uint *)(pSVar14 + 0x88);
                piVar5 = (int *)0x0;
                if (((uVar15 != 0xffffffff) &&
                    (puVar12 = g_pEntityList + (uVar15 & 0xfff) * 0x10,
                    puVar12 != (undefined *)0xfffffffc)) &&
                   (*(uint *)(puVar12 + 8) == uVar15 >> 0xc)) {
                  piVar5 = *(int **)(puVar12 + 4);
                }
                uVar8 = (**(code **)(*piVar5 + 0xb8))(piVar5);
                uVar9 = (**(code **)(*(int *)param_2 + 0x9b8))(param_2);
                DevMsg("%3.2f: ERROR SurvivorBot %s can\'t move to help %s - no path\n",
                       (double)*(float *)(gpGlobals + 0xc),uVar9,uVar8);
              }
            }
            else {
              lVar16 = (longdouble)(**(code **)(*piVar5 + 8))(piVar5);
              if ((float)lVar16 < local_48) {
                lVar16 = (longdouble)(**(code **)(*piVar5 + 8))(piVar5);
                uVar15 = *(uint *)(pSVar14 + 0x88);
                local_4c = (CTerrorPlayer *)0x0;
                local_48 = (float)lVar16;
                if (((uVar15 != 0xffffffff) &&
                    (puVar12 = g_pEntityList + (uVar15 & 0xfff) * 0x10,
                    puVar12 != (undefined *)0xfffffffc)) &&
                   (*(uint *)(puVar12 + 8) == uVar15 >> 0xc)) {
                  local_4c = *(CTerrorPlayer **)(puVar12 + 4);
                }
              }
            }
          }
        }
        iVar2 = iVar2 + 1;
        pSVar14 = pSVar14 + 4;
      } while (iVar2 < *(int *)(this_00 + 0xc4));
    }
    cVar1 = CTerrorGameRules::IsScavengeMode();
    if ((cVar1 == '\0') && (cVar1 = CTerrorGameRules::IsVersusMode(), cVar1 == '\0')) {
      if (((local_4c != (CTerrorPlayer *)0x0) &&
          ((cVar1 = (**(code **)(*(int *)local_4c + 0x778))(local_4c), cVar1 == '\0' ||
           ((cVar1 = SurvivorTeamSituation::IsAnyTeammateNearCheckpoint(this_00), cVar1 == '\0' &&
            (cVar1 = CDirector::IsFinaleVehicleReady(TheDirector), cVar1 == '\0')))))) &&
         (cVar1 = SurvivorBot::IsReachable((SurvivorBot *)param_2,local_4c), cVar1 != '\0')) {
        this_02 = ::operator_new(0x484c);
                    /* try { // try from 00960f40 to 00960f44 has its CatchHandler @ 00960f96 */
        SurvivorLegsCoverFriendInCombat::SurvivorLegsCoverFriendInCombat(this_02,local_4c);
        *(undefined4 *)(param_1 + 0x20) = 0;
        *(undefined4 *)(param_1 + 0x24) = 0;
        *(undefined4 *)(param_1 + 0x28) = 0;
        *(undefined4 *)(param_1 + 0x2c) = 0;
        *(undefined4 *)this = 2;
        *(SurvivorLegsCoverFriendInCombat **)(this + 4) = this_02;
        *(char **)(this + 8) = "A friend is in combat and I\'m not - moving to assist";
        return this;
      }
      uVar15 = *(uint *)(this_00 + 0xd710);
      if (uVar15 != 0xffffffff) {
        uVar13 = uVar15 & 0xfff;
        puVar7 = (undefined4 *)(g_pEntityList + uVar13 * 0x10 + 4);
        if (((puVar7 != (undefined4 *)0x0) &&
            (*(uint *)(g_pEntityList + uVar13 * 0x10 + 8) == uVar15 >> 0xc)) &&
           (iVar2 = *(int *)(g_pEntityList + uVar13 * 0x10 + 4), iVar2 != 0)) {
          if (0.0 < *(float *)(iVar2 + 0x2f64)) {
            lVar16 = (longdouble)IntervalTimer::Now();
            if ((float)lVar16 - *(float *)(iVar2 + 0x2f64) <= 3.0) goto LAB_009606dd;
            uVar15 = *(uint *)(this_00 + 0xd710);
            piVar5 = (int *)0x0;
            if ((uVar15 != 0xffffffff) &&
               (puVar7 = (undefined4 *)(g_pEntityList + (uVar15 & 0xfff) * 0x10 + 4),
               puVar7 != (undefined4 *)0x0)) goto LAB_00960a2f;
          }
          else {
LAB_00960a2f:
            if (puVar7[1] == uVar15 >> 0xc) {
              piVar5 = (int *)*puVar7;
            }
            else {
              piVar5 = (int *)0x0;
            }
          }
          cVar1 = (**(code **)(*piVar5 + 0x778))(piVar5);
          if ((cVar1 == '\0') &&
             (cVar1 = SurvivorBot::IsEscortingHumanPlayers((SurvivorBot *)param_2), cVar1 == '\0'))
          {
            pCVar11 = (CTerrorPlayer *)0x0;
            uVar15 = *(uint *)(this_00 + 0xd710);
            if ((uVar15 != 0xffffffff) &&
               ((puVar12 = g_pEntityList + (uVar15 & 0xfff) * 0x10,
                puVar12 != (undefined *)0xfffffffc && (*(uint *)(puVar12 + 8) == uVar15 >> 0xc)))) {
              pCVar11 = *(CTerrorPlayer **)(puVar12 + 4);
            }
            this_01 = ::operator_new(0x484c);
                    /* try { // try from 00960aad to 00960ab1 has its CatchHandler @ 00960faa */
            SurvivorLegsCoverOrphan::SurvivorLegsCoverOrphan(this_01,pCVar11);
            *(undefined4 *)(param_1 + 0x20) = 0;
            *(undefined4 *)(param_1 + 0x24) = 0;
            *(undefined4 *)(param_1 + 0x28) = 0;
            *(undefined4 *)(param_1 + 0x2c) = 0;
            *(undefined4 *)this = 2;
            *(SurvivorLegsCoverOrphan **)(this + 4) = this_01;
            *(char **)(this + 8) = "A friend is orphaned, and I\'m the closest to him";
            return this;
          }
        }
      }
    }
LAB_009606dd:
    fVar17 = *(float *)(SurvivorBotSeparationDangerMaxRange._28_4_ + 0x2c);
    cVar1 = SurvivorBot::IsEscortingHumanPlayers((SurvivorBot *)param_2);
    if (cVar1 != '\0') {
      lVar16 = (longdouble)SurvivorBot::GetEscortRange();
      fVar17 = (float)lVar16 + 48.0;
    }
    uVar15 = *(uint *)(this_00 + 0x30);
    if (((((uVar15 != 0xffffffff) &&
          (puVar12 = g_pEntityList + (uVar15 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc))
         && (*(uint *)(puVar12 + 8) == uVar15 >> 0xc)) &&
        ((*(CTerrorPlayer **)(puVar12 + 4) != (CTerrorPlayer *)0x0 &&
         (fVar17 < *(float *)(this_00 + 0x34))))) &&
       (cVar1 = SurvivorBot::IsReachable((SurvivorBot *)param_2,*(CTerrorPlayer **)(puVar12 + 4)),
       cVar1 != '\0')) {
      piVar5 = (int *)0x0;
      uVar15 = *(uint *)(this_00 + 0x30);
      if (((uVar15 != 0xffffffff) &&
          (puVar12 = g_pEntityList + (uVar15 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc))
         && (*(uint *)(puVar12 + 8) == uVar15 >> 0xc)) {
        piVar5 = *(int **)(puVar12 + 4);
      }
      puVar7 = ::operator_new(0x484c);
      puVar7[8] = 0;
      puVar7[9] = 0;
      puVar7[10] = 0;
      puVar7[3] = 0;
      puVar7[4] = 0;
      puVar7[5] = 0;
      puVar7[6] = 0;
      puVar7[7] = 0;
      puVar7[2] = 0;
      *(undefined1 *)(puVar7 + 0xc) = 0;
      *(undefined1 *)((int)puVar7 + 0x31) = 0;
      puVar7[0xb] = 0;
      *puVar7 = &PTR__SurvivorLegsRegroup_00d0c528;
      puVar7[1] = &PTR__SurvivorLegsRegroup_00d0c690;
      puVar7[0xd] = 0xffffffff;
                    /* try { // try from 00960e1b to 00960e1f has its CatchHandler @ 00960f7c */
      PathFollower::PathFollower((PathFollower *)(puVar7 + 0xe));
      puVar7[0xe] = &PTR__ChasePath_00bfaa48;
      puVar7[0x1206] = &PTR_NetworkStateChanged_00c0b6e0;
      puVar7[0x1207] = 0;
      puVar7[0x1208] = 0xbf800000;
      puVar7[0x1209] = &PTR_NetworkStateChanged_00c0b6e0;
      puVar7[0x120a] = 0;
      puVar7[0x120b] = 0xbf800000;
      puVar7[0x120c] = &PTR_NetworkStateChanged_00c0b6e0;
      puVar7[0x120d] = 0;
      puVar7[0x120e] = 0xbf800000;
      puVar7[0x120f] = 0xffffffff;
      puVar7[0x1210] = 1;
      puVar7[0x1211] = &PTR_NetworkStateChanged_00c23e10;
      puVar7[0x1212] = 0xbf800000;
      if (piVar5 == (int *)0x0) {
        puVar7[0xd] = 0xffffffff;
      }
      else {
                    /* try { // try from 00960eb4 to 00960eb6 has its CatchHandler @ 00960fac */
        puVar10 = (undefined4 *)(**(code **)(*piVar5 + 0xc))(piVar5);
        puVar7[0xd] = *puVar10;
      }
      *(undefined4 *)(param_1 + 0x20) = 0;
      *(undefined4 *)(param_1 + 0x24) = 0;
      *(undefined4 *)(param_1 + 0x28) = 0;
      *(undefined4 *)(param_1 + 0x2c) = 0;
      *(undefined4 *)this = 2;
      *(undefined4 **)(this + 4) = puVar7;
      *(char **)(this + 8) = "I\'m too far away from the closest human survivor";
      return this;
    }
  }
  lVar16 = (longdouble)SurvivorTeamSituation::GetTimeSinceAnyFriendVisible(this_00);
  if ((3.0 < (float)lVar16) &&
     (iVar2 = SurvivorTeamSituation::GetClosestReachableFriend(this_00), iVar2 != 0)) {
    puVar7 = ::operator_new(0x484c);
    puVar7[8] = 0;
    puVar7[9] = 0;
    puVar7[10] = 0;
    puVar7[3] = 0;
    puVar7[4] = 0;
    puVar7[5] = 0;
    puVar7[6] = 0;
    puVar7[7] = 0;
    puVar7[2] = 0;
    *(undefined1 *)(puVar7 + 0xc) = 0;
    *(undefined1 *)((int)puVar7 + 0x31) = 0;
    puVar7[0xb] = 0;
    *puVar7 = &PTR__SurvivorLegsRegroup_00d0c528;
    puVar7[1] = &PTR__SurvivorLegsRegroup_00d0c690;
    puVar7[0xd] = 0xffffffff;
                    /* try { // try from 00960b82 to 00960b86 has its CatchHandler @ 00960fa8 */
    PathFollower::PathFollower((PathFollower *)(puVar7 + 0xe));
    puVar7[0xe] = &PTR__ChasePath_00bfaa48;
    puVar7[0x1206] = &PTR_NetworkStateChanged_00c0b6e0;
    puVar7[0x1207] = 0;
    puVar7[0x1208] = 0xbf800000;
    puVar7[0x1209] = &PTR_NetworkStateChanged_00c0b6e0;
    puVar7[0x120a] = 0;
    puVar7[0x120b] = 0xbf800000;
    puVar7[0x120c] = &PTR_NetworkStateChanged_00c0b6e0;
    puVar7[0x120d] = 0;
    puVar7[0x120e] = 0xbf800000;
    puVar7[0x120f] = 0xffffffff;
    puVar7[0x1210] = 1;
    puVar7[0x1211] = &PTR_NetworkStateChanged_00c23e10;
    puVar7[0x1212] = 0xbf800000;
    puVar7[0xd] = 0xffffffff;
    *(undefined4 *)(param_1 + 0x20) = 0;
    *(undefined4 *)(param_1 + 0x24) = 0;
    *(undefined4 *)(param_1 + 0x28) = 0;
    *(undefined4 *)(param_1 + 0x2c) = 0;
    *(undefined4 *)this = 2;
    *(undefined4 **)(this + 4) = puVar7;
    *(char **)(this + 8) = "I\'ve lost sight of the team";
    return this;
  }
  uVar15 = *(uint *)(this_00 + 0x50);
  if (((((uVar15 != 0xffffffff) &&
        (puVar12 = g_pEntityList + (uVar15 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar12 + 8) == uVar15 >> 0xc)) &&
      ((*(CTerrorPlayer **)(puVar12 + 4) != (CTerrorPlayer *)0x0 &&
       (iVar2 = CTerrorPlayer::GetMovingPlatform(*(CTerrorPlayer **)(puVar12 + 4)), iVar2 != 0))))
     && (iVar6 = CTerrorPlayer::GetMovingPlatform((CTerrorPlayer *)param_2), iVar2 != iVar6)) {
    puVar7 = ::operator_new(0x4840);
    puVar7[8] = 0;
    puVar7[9] = 0;
    puVar7[10] = 0;
    puVar7[3] = 0;
    puVar7[4] = 0;
    puVar7[5] = 0;
    puVar7[6] = 0;
    puVar7[7] = 0;
    puVar7[2] = 0;
    *(undefined1 *)(puVar7 + 0xc) = 0;
    *(undefined1 *)((int)puVar7 + 0x31) = 0;
    puVar7[0xb] = 0;
    *puVar7 = &PTR__SurvivorLegsApproachElevator_00d0cba8;
    puVar7[1] = &PTR__SurvivorLegsApproachElevator_00d0cd10;
                    /* try { // try from 00960822 to 00960826 has its CatchHandler @ 00960ffc */
    PathFollower::PathFollower((PathFollower *)(puVar7 + 0xd));
    puVar7[0xd] = &PTR__ChasePath_00bfaa48;
    puVar7[0x1205] = &PTR_NetworkStateChanged_00c0b6e0;
    puVar7[0x1206] = 0;
    puVar7[0x1207] = 0xbf800000;
    puVar7[0x1208] = &PTR_NetworkStateChanged_00c0b6e0;
    puVar7[0x1209] = 0;
    puVar7[0x120a] = 0xbf800000;
    puVar7[0x120b] = &PTR_NetworkStateChanged_00c0b6e0;
    puVar7[0x120c] = 0;
    puVar7[0x120d] = 0xbf800000;
    puVar7[0x120e] = 0xffffffff;
    puVar7[0x120f] = 1;
    *(undefined4 *)(param_1 + 0x20) = 0;
    *(undefined4 *)(param_1 + 0x24) = 0;
    *(undefined4 *)(param_1 + 0x28) = 0;
    *(undefined4 *)(param_1 + 0x2c) = 0;
    *(undefined4 *)this = 2;
    *(undefined4 **)(this + 4) = puVar7;
    *(char **)(this + 8) = "Joining team leader on a platform";
    return this;
  }
LAB_00960105:
  iVar2 = SurvivorBot::GetPace((SurvivorBot *)param_2);
  if (iVar2 != 0) {
    if (iVar2 == 1) {
      (**(code **)(*(int *)param_2 + 0x988))(param_2,0xbf800000);
      cVar1 = SurvivorBot::IsEscortingHumanPlayers((SurvivorBot *)param_2);
    }
    else {
      cVar1 = SurvivorBot::IsEscortingHumanPlayers((SurvivorBot *)param_2);
    }
    if ((cVar1 == '\0') || (cVar1 = SurvivorBot::AreAnyHumanSurvivorsInCheckpoint(), cVar1 != '\0'))
    {
      MoveTowardsNextCheckpoint((SurvivorLegsMoveOn *)param_1,(SurvivorBot *)param_2);
    }
    *(undefined4 *)this = 0;
    *(undefined4 *)(this + 4) = 0;
    *(undefined4 *)(this + 8) = 0;
    return this;
  }
  piVar5 = (int *)(**(code **)(*(int *)param_2 + 0x9a0))(param_2);
  (**(code **)(*piVar5 + 0x170))(piVar5,"Pace == STOP");
  *(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)