L L4D2node

CTerrorPlayer::ModifyOrAppendCriteria

0x009f55d0 · 7559 bytes · __thiscall

_ZN13CTerrorPlayer22ModifyOrAppendCriteriaER14AI_CriteriaSet

Decompiled

undefined (2 params)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CTerrorPlayer::ModifyOrAppendCriteria(AI_CriteriaSet&) */

void __thiscall CTerrorPlayer::ModifyOrAppendCriteria(CTerrorPlayer *this,AI_CriteriaSet *param_1)

{
  CDirector *pCVar1;
  char cVar2;
  int iVar3;
  int *piVar4;
  char *pcVar5;
  undefined4 uVar6;
  int iVar7;
  CWeaponCSBase *this_00;
  uint uVar8;
  CBaseEntity *pCVar9;
  uint uVar10;
  undefined *puVar11;
  int in_GS_OFFSET;
  longdouble lVar12;
  float fVar13;
  double dVar14;
  undefined4 local_27c;
  undefined4 local_278;
  undefined4 local_274;
  int local_270;
  undefined4 local_26c;
  undefined4 local_268;
  undefined4 local_264;
  undefined4 local_260;
  CTerrorPlayer *local_25c;
  undefined4 local_258;
  undefined4 local_254;
  undefined1 local_250;
  int local_24c;
  char local_248 [12];
  undefined4 local_23c;
  undefined **local_238;
  undefined1 local_234;
  char local_233 [259];
  undefined4 local_130;
  undefined **local_12c;
  undefined1 local_128;
  char local_127 [259];
  undefined4 local_24;
  int local_20;
  
  local_27c = 0;
  local_278 = 0;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  if (___atan2f_finite == (CTerrorPlayer *)0x0) {
    local_25c = (CTerrorPlayer *)0x0;
  }
  else {
    (**(code **)(___atan2f_finite + 0x50))
              (___atan2f_finite,&local_27c,0,0,0,0,
               "/data/src/game/server/terror/terrorplayerresponses.cpp",0x75,
               &ModifyOrAppendCriteria(AI_CriteriaSet&)::tm_fmt,"(%s)%s","Unaccounted",
               "CTerrorPlayer::ModifyOrAppendCriteria");
    local_25c = ___atan2f_finite;
  }
  iVar3 = _DAT_0105db00;
  local_264 = local_27c;
  local_260 = local_278;
                    /* try { // try from 009f5bc6 to 009f5c14 has its CatchHandler @ 009f740d */
  if (((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) &&
     (iVar7 = ThreadGetCurrentId(), iVar3 == iVar7)) {
    if (*(char **)_DAT_0105d15c != "CTerrorPlayer::ModifyOrAppendCriteria") {
      _DAT_0105d15c =
           (CTerrorPlayer *)
           CVProfNode::GetSubNode((char *)_DAT_0105d15c,0xd1be98,(char *)0x1,0xbfafa1);
    }
    CVProfNode::EnterScope();
    DAT_0105d158 = '\0';
  }
  local_238 = &PTR_InitQuietTruncation_00c08ee8;
  local_234 = 1;
  local_233[0] = '\0';
  local_130 = 0;
                    /* try { // try from 009f56d7 to 009f5b40 has its CatchHandler @ 009f73e9 */
  iVar3 = CBaseEntity::GetTeam((CBaseEntity *)this);
  if (iVar3 == 0) {
    pcVar5 = "";
  }
  else {
    piVar4 = (int *)CBaseEntity::GetTeam((CBaseEntity *)this);
    pcVar5 = (char *)(**(code **)(*piVar4 + 0x32c))(piVar4);
  }
  AI_CriteriaSet::AppendCriteria(param_1,"Team",pcVar5,1.0);
  iVar3 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
  if (iVar3 == 3) {
    uVar6 = (**(code **)(*(int *)this + 0x544))(this);
    pcVar5 = (char *)ZombieClassName(uVar6);
    AI_CriteriaSet::AppendCriteria(param_1,"Who",pcVar5,1.0);
    if (*(int *)(this + 0x2e88) == 1) {
      AI_CriteriaSet::AppendCriteria(param_1,"InfectedState","Alert",1.0);
    }
    else if (*(int *)(this + 0x2e88) == 2) {
      AI_CriteriaSet::AppendCriteria(param_1,"InfectedState","Engaged",1.0);
    }
    else {
      AI_CriteriaSet::AppendCriteria(param_1,"InfectedState","Normal",1.0);
    }
    goto LAB_009f5762;
  }
  if ((iVar3 != 4) && (iVar3 != 2)) {
    AI_CriteriaSet::AppendCriteria(param_1,"Team","Spectator",1.0);
    goto LAB_009f5762;
  }
  local_128 = 1;
  local_12c = &PTR_InitQuietTruncation_00c08ee8;
  local_127[0] = '\0';
  local_24 = 0;
                    /* try { // try from 009f5c50 to 009f68a8 has its CatchHandler @ 009f73e9 */
  lVar12 = (longdouble)CountdownTimer::Now();
  pcVar5 = "0";
  if ((float)lVar12 < *(float *)(this + 0x2f74)) {
    pcVar5 = "1";
  }
  AI_CriteriaSet::AppendCriteria(param_1,"Coughing",pcVar5,1.0);
  pcVar5 = "1";
  if (((byte)this[0x153] & 8) == 0) {
    pcVar5 = "0";
  }
  AI_CriteriaSet::AppendCriteria(param_1,"OnFire",pcVar5,1.0);
  cVar2 = (**(code **)(*(int *)this + 0x7e8))(this);
  pcVar5 = "0";
  if ((cVar2 != '\0') && (this[0x39f1] == (CTerrorPlayer)0x0)) {
    pcVar5 = "1";
  }
  AI_CriteriaSet::AppendCriteria(param_1,"Incapacitated",pcVar5,1.0);
  pcVar5 = "1";
  if (this[0x39f1] == (CTerrorPlayer)0x0) {
    pcVar5 = "0";
  }
  AI_CriteriaSet::AppendCriteria(param_1,"HangingFromLedge",pcVar5,1.0);
  uVar8 = *(uint *)(this + 0x3e68);
  if ((uVar8 == 0xffffffff) ||
     (puVar11 = g_pEntityList + (uVar8 & 0xfff) * 0x10, puVar11 == (undefined *)0xfffffffc)) {
    pcVar5 = "0";
  }
  else {
    pcVar5 = "0";
    if ((*(uint *)(puVar11 + 8) == uVar8 >> 0xc) && (*(int *)(puVar11 + 4) != 0)) {
      pcVar5 = "1";
    }
  }
  AI_CriteriaSet::AppendCriteria(param_1,"PounceVictim",pcVar5,1.0);
  pcVar5 = "1";
  if (this[0x33dc] == (CTerrorPlayer)0x0) {
    pcVar5 = "0";
  }
  AI_CriteriaSet::AppendCriteria(param_1,"HangingFromTongue",pcVar5,1.0);
  pcVar5 = "1";
  if (this[0x2edc] == (CTerrorPlayer)0x0) {
    pcVar5 = "0";
  }
  AI_CriteriaSet::AppendCriteria(param_1,"Sneaking",pcVar5,1.0);
  this_00 = (CWeaponCSBase *)GetActiveTerrorWeapon(this);
  if (this_00 != (CWeaponCSBase *)0x0) {
    iVar3 = CWeaponCSBase::GetCSWpnData(this_00);
    AI_CriteriaSet::AppendCriteria(param_1,"ActiveWeapon",(char *)(iVar3 + 0xa08),1.0);
  }
  iVar3 = (**(code **)(*(int *)this + 0x52c))(this);
  if (iVar3 == 0) {
    AI_CriteriaSet::AppendCriteria(param_1,"InCheckpoint","0",1.0);
    AI_CriteriaSet::AppendCriteria(param_1,"InStartArea","0",1.0);
    AI_CriteriaSet::AppendCriteria(param_1,"InSafeSpot","0",1.0);
    AI_CriteriaSet::AppendCriteria(param_1,"InBattlefield","0",1.0);
  }
  else {
    uVar8 = *(uint *)(iVar3 + 300);
    if ((uVar8 & 0x100) == 0) {
      if ((uVar8 & 0x800) == 0) {
        if (((uVar8 & 0x80) == 0) && (*(float *)(iVar3 + 0x154) != 0.0)) {
          AI_CriteriaSet::AppendCriteria(param_1,"InBattlefield","0",1.0);
          AI_CriteriaSet::AppendCriteria(param_1,"InCheckpoint","0",1.0);
          goto LAB_009f6e66;
        }
        AI_CriteriaSet::AppendCriteria(param_1,"InBattlefield","0",1.0);
        AI_CriteriaSet::AppendCriteria(param_1,"InCheckpoint","0",1.0);
LAB_009f5ebb:
        AI_CriteriaSet::AppendCriteria(param_1,"InStartArea","1",1.0);
      }
      else {
        if (*(float *)(iVar3 + 0x154) <= *(float *)(TheNavMesh + 0x5f8) &&
            *(float *)(TheNavMesh + 0x5f8) != *(float *)(iVar3 + 0x154)) {
          AI_CriteriaSet::AppendCriteria(param_1,"InBattlefield","0",1.0);
          AI_CriteriaSet::AppendCriteria(param_1,"InCheckpoint","0",1.0);
          goto LAB_009f5ebb;
        }
        AI_CriteriaSet::AppendCriteria(param_1,"InBattlefield","0",1.0);
        AI_CriteriaSet::AppendCriteria(param_1,"InCheckpoint","1",1.0);
        AI_CriteriaSet::AppendCriteria(param_1,"InStartArea","0",1.0);
      }
      AI_CriteriaSet::AppendCriteria(param_1,"InSafeSpot","1",1.0);
    }
    else {
      AI_CriteriaSet::AppendCriteria(param_1,"InBattlefield","1",1.0);
      AI_CriteriaSet::AppendCriteria(param_1,"InCheckpoint","0",1.0);
LAB_009f6e66:
      AI_CriteriaSet::AppendCriteria(param_1,"InStartArea","0",1.0);
      AI_CriteriaSet::AppendCriteria(param_1,"InSafeSpot","0",1.0);
    }
  }
  cVar2 = CDirector::IsFinale(TheDirector);
  if ((((cVar2 == '\0') || (cVar2 = CDirector::IsFinaleVehicleReady(TheDirector), cVar2 == '\0')) ||
      (iVar3 == 0)) || ((*(byte *)(iVar3 + 0x12d) & 0x80) == 0)) {
    pcVar5 = "0";
  }
  else {
    pcVar5 = "1";
  }
  AI_CriteriaSet::AppendCriteria(param_1,"InRescueVehicle",pcVar5,1.0);
  pcVar5 = (char *)SurvivorCharacterName(*(undefined4 *)(this + 0x2ba0));
  AI_CriteriaSet::AppendCriteria(param_1,"Who",pcVar5,1.0);
  FindResponseSubject(this,param_1);
  pcVar5 = (char *)CFmtStrN<256>::sprintf
                             ((CFmtStrN<256> *)&local_238,"%.2f",(double)*(float *)(this + 12000));
  AI_CriteriaSet::AppendCriteria(param_1,"Intensity",pcVar5,1.0);
  pcVar5 = (char *)CFmtStrN<256>::sprintf
                             ((CFmtStrN<256> *)&local_238,"%.2f",(double)*(float *)(this + 0x2ee4));
  AI_CriteriaSet::AppendCriteria(param_1,"TimeAveragedIntensity",pcVar5,1.0);
  iVar3 = 0;
  do {
    uVar6 = ZombieClassName(iVar3);
    CFmtStrN<256>::sprintf((CFmtStrN<256> *)&local_238,"%ssKilled",uVar6);
    CFmtStrN<256>::sprintf
              ((CFmtStrN<256> *)&local_12c,"%d",*(undefined4 *)(this + iVar3 * 4 + 0x38dc));
    AI_CriteriaSet::AppendCriteria(param_1,local_233,local_127,1.0);
    iVar3 = iVar3 + 1;
  } while (iVar3 != 9);
  pcVar5 = (char *)CFmtStrN<256>::sprintf
                             ((CFmtStrN<256> *)&local_238,"%d",*(undefined4 *)(this + 0x2d98));
  AI_CriteriaSet::AppendCriteria(param_1,"ZombiesKilledWhileIncapacitated",pcVar5,1.0);
  local_274 = 0;
  local_270 = 0;
  ForEachPlayer<LiveSurvivorCounter>((LiveSurvivorCounter *)&local_274);
  pcVar5 = (char *)CFmtStrN<256>::sprintf((CFmtStrN<256> *)&local_238,"%d",local_270);
  AI_CriteriaSet::AppendCriteria(param_1,"NumberOfTeamAlive",pcVar5,1.0);
  local_26c = 2;
  local_268 = 0;
  ForEachPlayer<LiveSurvivorCounter>((LiveSurvivorCounter *)&local_26c);
  pcVar5 = (char *)CFmtStrN<256>::sprintf((CFmtStrN<256> *)&local_238,"%d",local_268);
  AI_CriteriaSet::AppendCriteria(param_1,"NumberOfTeamIncapacitated",pcVar5,1.0);
  local_250 = 1;
  local_254 = 2;
  local_24c = 0;
  local_258 = 0xffffffff;
  ForEachPlayer<PlayerCounter>((PlayerCounter *)&local_258);
  pcVar5 = (char *)CFmtStrN<256>::sprintf((CFmtStrN<256> *)&local_238,"%d",local_24c - local_270);
  AI_CriteriaSet::AppendCriteria(param_1,"NumberOfTeamDead",pcVar5,1.0);
  pcVar5 = (char *)CFmtStrN<256>::sprintf
                             ((CFmtStrN<256> *)&local_238,"%d",*(undefined4 *)(this + 0x100));
  AI_CriteriaSet::AppendCriteria(param_1,"CurrentHealth",pcVar5,1.0);
  lVar12 = (longdouble)(**(code **)(*(int *)this + 0x7e4))(this);
  pcVar5 = (char *)CFmtStrN<256>::sprintf((CFmtStrN<256> *)&local_238,"%.0f",(double)(float)lVar12);
  AI_CriteriaSet::AppendCriteria(param_1,"CurrentTemporaryHealth",pcVar5,1.0);
  cVar2 = (**(code **)(*(int *)this + 0x7e8))(this);
  pcVar5 = "1";
  if (cVar2 == '\0') {
    pcVar5 = "0";
  }
  AI_CriteriaSet::AppendCriteria(param_1,"IsIncapacitated",pcVar5,1.0);
  iVar3 = CCSPlayer::GetCSWeapon((CCSPlayer *)this,0xc);
  pcVar5 = "1";
  if (iVar3 == 0) {
    pcVar5 = "0";
  }
  AI_CriteriaSet::AppendCriteria(param_1,"HasFirstAidKit",pcVar5,1.0);
  iVar3 = CCSPlayer::GetCSWeapon((CCSPlayer *)this,0xf);
  pcVar5 = "1";
  if (iVar3 == 0) {
    pcVar5 = "0";
  }
  AI_CriteriaSet::AppendCriteria(param_1,"HasPainPills",pcVar5,1.0);
  iVar3 = CCSPlayer::GetCSWeapon((CCSPlayer *)this,0xe);
  pcVar5 = "1";
  if (iVar3 == 0) {
    pcVar5 = "0";
  }
  AI_CriteriaSet::AppendCriteria(param_1,"HasGrenade",pcVar5,1.0);
  iVar3 = CCSPlayer::GetCSWeapon((CCSPlayer *)this,0xd);
  pcVar5 = "1";
  if (iVar3 == 0) {
    pcVar5 = "0";
  }
  AI_CriteriaSet::AppendCriteria(param_1,"HasMolotov",pcVar5,1.0);
  cVar2 = (**(code **)(*(int *)this + 0x7e8))(this);
  iVar3 = *(int *)(this + 0x2e5c);
  if (cVar2 != '\0') {
    iVar3 = iVar3 + 1;
  }
  pcVar5 = (char *)CFmtStrN<256>::sprintf((CFmtStrN<256> *)&local_238,"%d",iVar3);
  AI_CriteriaSet::AppendCriteria(param_1,"IncapacitatedCount",pcVar5,1.0);
  cVar2 = IsOnThirdStrike(this);
  pcVar5 = "1";
  if (cVar2 == '\0') {
    pcVar5 = "0";
  }
  AI_CriteriaSet::AppendCriteria(param_1,"OnThirdStrike",pcVar5,1.0);
  pCVar1 = TheDirector;
  iVar3 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
  if (iVar3 == 2) {
    uVar8 = ConvertToInternalCharacter(0);
    uVar10 = ConvertToInternalCharacter(*(undefined4 *)(this + 0x2ba0));
    if ((uVar10 < 8) && (uVar8 < 8)) {
      fVar13 = *(float *)(pCVar1 + (uVar8 + uVar10 * 8) * 4 + 0xc);
      if ((float)0x4e6e6b28 <= fVar13) {
        fVar13 = (float)0x4e6e6b28;
      }
      dVar14 = (double)fVar13;
    }
    else {
      dVar14 = 1000000000.0;
    }
    pcVar5 = (char *)CFmtStrN<256>::sprintf((CFmtStrN<256> *)&local_238,"%.1f",dVar14);
    AI_CriteriaSet::AppendCriteria(param_1,"DistToGambler",pcVar5,1.0);
    uVar8 = ConvertToInternalCharacter(1);
    uVar10 = ConvertToInternalCharacter(*(undefined4 *)(this + 0x2ba0));
    if ((uVar10 < 8) && (uVar8 < 8)) {
      fVar13 = *(float *)(pCVar1 + (uVar8 + uVar10 * 8) * 4 + 0xc);
      if ((float)0x4e6e6b28 <= fVar13) {
        fVar13 = (float)0x4e6e6b28;
      }
      dVar14 = (double)fVar13;
    }
    else {
      dVar14 = 1000000000.0;
    }
    pcVar5 = (char *)CFmtStrN<256>::sprintf((CFmtStrN<256> *)&local_238,"%.1f",dVar14);
    AI_CriteriaSet::AppendCriteria(param_1,"DistToProducer",pcVar5,1.0);
    uVar8 = ConvertToInternalCharacter(2);
    uVar10 = ConvertToInternalCharacter(*(undefined4 *)(this + 0x2ba0));
    if ((uVar10 < 8) && (uVar8 < 8)) {
      fVar13 = *(float *)(pCVar1 + (uVar8 + uVar10 * 8) * 4 + 0xc);
      if ((float)0x4e6e6b28 <= fVar13) {
        fVar13 = (float)0x4e6e6b28;
      }
      dVar14 = (double)fVar13;
    }
    else {
      dVar14 = 1000000000.0;
    }
    pcVar5 = (char *)CFmtStrN<256>::sprintf((CFmtStrN<256> *)&local_238,"%.1f",dVar14);
    AI_CriteriaSet::AppendCriteria(param_1,"DistToCoach",pcVar5,1.0);
    uVar8 = ConvertToInternalCharacter(3);
    uVar10 = ConvertToInternalCharacter(*(undefined4 *)(this + 0x2ba0));
    if ((uVar10 < 8) && (uVar8 < 8)) {
      fVar13 = *(float *)(pCVar1 + (uVar8 + uVar10 * 8) * 4 + 0xc);
      if ((float)0x4e6e6b28 <= fVar13) {
        fVar13 = (float)0x4e6e6b28;
      }
      dVar14 = (double)fVar13;
    }
    else {
      dVar14 = 1000000000.0;
    }
    pcVar5 = (char *)CFmtStrN<256>::sprintf((CFmtStrN<256> *)&local_238,"%.1f",dVar14);
    AI_CriteriaSet::AppendCriteria(param_1,"DistToMechanic",pcVar5,1.0);
    iVar3 = CTerrorGameRules::FastGetSurvivorSet();
    if (iVar3 == 1) {
      uVar8 = ConvertToInternalCharacter(4);
      uVar10 = ConvertToInternalCharacter(*(undefined4 *)(this + 0x2ba0));
      if ((uVar10 < 8) && (uVar8 < 8)) {
        fVar13 = *(float *)(pCVar1 + (uVar8 + uVar10 * 8) * 4 + 0xc);
        if ((float)0x4e6e6b28 <= fVar13) {
          fVar13 = (float)0x4e6e6b28;
        }
        dVar14 = (double)fVar13;
      }
      else {
        dVar14 = 1000000000.0;
      }
      pcVar5 = (char *)CFmtStrN<256>::sprintf((CFmtStrN<256> *)&local_238,"%.1f",dVar14);
      AI_CriteriaSet::AppendCriteria(param_1,"DistToNamVet",pcVar5,1.0);
      uVar8 = ConvertToInternalCharacter(5);
      uVar10 = ConvertToInternalCharacter(*(undefined4 *)(this + 0x2ba0));
      if ((uVar10 < 8) && (uVar8 < 8)) {
        fVar13 = *(float *)(pCVar1 + (uVar8 + uVar10 * 8) * 4 + 0xc);
        if ((float)0x4e6e6b28 <= fVar13) {
          fVar13 = (float)0x4e6e6b28;
        }
        dVar14 = (double)fVar13;
      }
      else {
        dVar14 = 1000000000.0;
      }
      pcVar5 = (char *)CFmtStrN<256>::sprintf((CFmtStrN<256> *)&local_238,"%.1f",dVar14);
      AI_CriteriaSet::AppendCriteria(param_1,"DistToTeenGirl",pcVar5,1.0);
      uVar8 = ConvertToInternalCharacter(6);
      uVar10 = ConvertToInternalCharacter(*(undefined4 *)(this + 0x2ba0));
      if ((uVar10 < 8) && (uVar8 < 8)) {
        fVar13 = *(float *)(pCVar1 + (uVar8 + uVar10 * 8) * 4 + 0xc);
        if ((float)0x4e6e6b28 <= fVar13) {
          fVar13 = (float)0x4e6e6b28;
        }
        dVar14 = (double)fVar13;
      }
      else {
        dVar14 = 1000000000.0;
      }
      pcVar5 = (char *)CFmtStrN<256>::sprintf((CFmtStrN<256> *)&local_238,"%.1f",dVar14);
      AI_CriteriaSet::AppendCriteria(param_1,"DistToBiker",pcVar5,1.0);
      uVar8 = ConvertToInternalCharacter(7);
      uVar10 = ConvertToInternalCharacter(*(undefined4 *)(this + 0x2ba0));
      if ((uVar10 < 8) && (uVar8 < 8)) {
        fVar13 = *(float *)(pCVar1 + (uVar8 + uVar10 * 8) * 4 + 0xc);
        if ((float)0x4e6e6b28 <= fVar13) {
          fVar13 = (float)0x4e6e6b28;
        }
        dVar14 = (double)fVar13;
      }
      else {
        dVar14 = 1000000000.0;
      }
      pcVar5 = (char *)CFmtStrN<256>::sprintf((CFmtStrN<256> *)&local_238,"%.1f",dVar14);
      AI_CriteriaSet::AppendCriteria(param_1,"DistToManager",pcVar5,1.0);
    }
    uVar8 = SurvivorResponseCachedInfo::GetClosestSurvivorTo
                      ((SurvivorResponseCachedInfo *)(pCVar1 + 0xc),*(undefined4 *)(this + 0x2ba0));
    if ((uVar8 < 8) && (*(uint *)(this + 0x2ba0) < 8)) {
      fVar13 = *(float *)(pCVar1 + (uVar8 + *(uint *)(this + 0x2ba0) * 8) * 4 + 0xc);
      if ((float)0x4e6e6b28 <= fVar13) {
        fVar13 = (float)0x4e6e6b28;
      }
      dVar14 = (double)fVar13;
    }
    else {
      dVar14 = 1000000000.0;
    }
    pcVar5 = (char *)CFmtStrN<256>::sprintf((CFmtStrN<256> *)&local_238,"%.1f",dVar14);
    AI_CriteriaSet::AppendCriteria(param_1,"DistToClosestSurvivor",pcVar5,1.0);
    pcVar5 = (char *)SurvivorCharacterName(uVar8);
    AI_CriteriaSet::AppendCriteria(param_1,"ClosestSurvivor",pcVar5,1.0);
  }
  pcVar5 = (char *)CFmtStrN<256>::sprintf
                             ((CFmtStrN<256> *)&local_238,"%d",*(undefined4 *)(pCVar1 + 0x10c));
  AI_CriteriaSet::AppendCriteria(param_1,"NumberInSafeSpot",pcVar5,1.0);
  pcVar5 = (char *)CFmtStrN<256>::sprintf
                             ((CFmtStrN<256> *)&local_238,"%d",*(undefined4 *)(pCVar1 + 0x110));
  AI_CriteriaSet::AppendCriteria(param_1,"NumberOutsideSafeSpot",pcVar5,1.0);
  iVar3 = 1;
  local_23c = 0x44480000;
  local_248[0] = '\0';
  local_248[1] = '\0';
  local_248[2] = '\0';
  local_248[3] = '\0';
  local_248[4] = '\0';
  local_248[5] = '\0';
  local_248[6] = '\0';
  local_248[7] = '\0';
  local_248[8] = '\0';
  local_248[9] = '\0';
  if (0 < *(int *)(gpGlobals + 0x14)) {
    do {
      while ((pCVar9 = (CBaseEntity *)UTIL_PlayerByIndex(iVar3), pCVar9 == (CBaseEntity *)0x0 ||
             (*(int *)(pCVar9 + 0x30) == 0))) {
LAB_009f64e8:
        iVar3 = iVar3 + 1;
        if (*(int *)(gpGlobals + 0x14) < iVar3) goto LAB_009f6524;
      }
      if (*(int *)(pCVar9 + 0x30) - *(int *)(gpGlobals + 0x58) >> 4 != 0) {
        cVar2 = (**(code **)(*(int *)pCVar9 + 0x16c))(pCVar9);
        if ((((cVar2 != '\0') && (*(int *)(pCVar9 + 0x1f6c) != 2)) &&
            (iVar7 = (**(code **)(*(int *)pCVar9 + 0x148))(pCVar9), iVar7 == 0)) &&
           ((cVar2 = (**(code **)(*(int *)pCVar9 + 300))(pCVar9), cVar2 != '\0' &&
            (iVar7 = CBaseEntity::GetTeamNumber(pCVar9), iVar7 == 3)))) {
          iVar7 = (**(code **)(*(int *)pCVar9 + 0x544))(pCVar9);
          local_248[iVar7] = '\x01';
        }
        goto LAB_009f64e8;
      }
      iVar3 = iVar3 + 1;
    } while (iVar3 <= *(int *)(gpGlobals + 0x14));
  }
LAB_009f6524:
  iVar3 = TheNextBots();
  uVar8 = (uint)*(ushort *)(iVar3 + 0x10);
  if (uVar8 != 0xffff) {
    iVar7 = *(int *)(iVar3 + 4);
    do {
      piVar4 = *(int **)(iVar7 + uVar8 * 8);
      pCVar9 = (CBaseEntity *)(**(code **)(*piVar4 + 0xb4))(piVar4);
      if (((pCVar9 != (CBaseEntity *)0x0) &&
          (cVar2 = (**(code **)(*(int *)pCVar9 + 300))(pCVar9), cVar2 != '\0')) &&
         (iVar7 = CBaseEntity::GetTeamNumber(pCVar9), iVar7 == 3)) {
        iVar7 = (**(code **)(*(int *)pCVar9 + 0x544))(pCVar9);
        local_248[iVar7] = '\x01';
      }
      iVar7 = *(int *)(iVar3 + 4);
      uVar8 = (uint)*(ushort *)(iVar7 + 6 + uVar8 * 8);
    } while (uVar8 != 0xffff);
  }
  if (local_248[0] != '\0') {
    AI_CriteriaSet::AppendCriteria(param_1,"ZombiePresentNormal","1",1.0);
  }
  if (local_248[1] != '\0') {
    AI_CriteriaSet::AppendCriteria(param_1,"ZombiePresentSmoker","1",1.0);
  }
  if (local_248[2] != '\0') {
    AI_CriteriaSet::AppendCriteria(param_1,"ZombiePresentBoomer","1",1.0);
  }
  if (local_248[3] != '\0') {
    AI_CriteriaSet::AppendCriteria(param_1,"ZombiePresentHunter","1",1.0);
  }
  if (local_248[6] != '\0') {
    AI_CriteriaSet::AppendCriteria(param_1,"ZombiePresentCharger","1",1.0);
  }
  if (local_248[7] != '\0') {
    AI_CriteriaSet::AppendCriteria(param_1,"ZombiePresentWitch","1",1.0);
  }
  if (local_248[8] != '\0') {
                    /* try { // try from 009f698c to 009f73de has its CatchHandler @ 009f73e9 */
    AI_CriteriaSet::AppendCriteria(param_1,"ZombiePresentTank","1",1.0);
  }
LAB_009f5762:
  pcVar5 = (char *)CDirector::GetGameModeBase();
  AI_CriteriaSet::AppendCriteria(param_1,"gamemode",pcVar5,1.0);
  uVar6 = CDirector::GetMapNumber(TheDirector);
  pcVar5 = (char *)UTIL_VarArgs("%i",uVar6);
  AI_CriteriaSet::AppendCriteria(param_1,"Chapter",pcVar5,1.0);
  pcVar5 = *(char **)(gpGlobals + 0x3c);
  if (((pcVar5 != (char *)0x0) && (*pcVar5 != '\0')) && (pcVar5[1] != '\0')) {
    switch(pcVar5[1]) {
    case '1':
      switch(pcVar5[2]) {
      case '0':
        AI_CriteriaSet::AppendCriteria(param_1,"campaign","l4d2_10",1.0);
        break;
      case '1':
        AI_CriteriaSet::AppendCriteria(param_1,"campaign","l4d2_11",1.0);
        break;
      case '2':
        AI_CriteriaSet::AppendCriteria(param_1,"campaign","l4d2_12",1.0);
        break;
      case '3':
        AI_CriteriaSet::AppendCriteria(param_1,"campaign","l4d2_13",1.0);
        break;
      case '4':
        AI_CriteriaSet::AppendCriteria(param_1,"campaign","l4d2_14",1.0);
        break;
      default:
        AI_CriteriaSet::AppendCriteria(param_1,"campaign","l4d2_1",1.0);
      }
      break;
    case '2':
      AI_CriteriaSet::AppendCriteria(param_1,"campaign","l4d2_2",1.0);
      break;
    case '3':
      AI_CriteriaSet::AppendCriteria(param_1,"campaign","l4d2_3",1.0);
      break;
    case '4':
      AI_CriteriaSet::AppendCriteria(param_1,"campaign","l4d2_4",1.0);
      break;
    case '5':
      AI_CriteriaSet::AppendCriteria(param_1,"campaign","l4d2_5",1.0);
      break;
    case '6':
      AI_CriteriaSet::AppendCriteria(param_1,"campaign","l4d2_6",1.0);
      break;
    case '7':
      AI_CriteriaSet::AppendCriteria(param_1,"campaign","l4d2_7",1.0);
      break;
    case '8':
      AI_CriteriaSet::AppendCriteria(param_1,"campaign","l4d2_8",1.0);
      break;
    case '9':
      AI_CriteriaSet::AppendCriteria(param_1,"campaign","l4d2_9",1.0);
      break;
    default:
      AI_CriteriaSet::AppendCriteria(param_1,"campaign","unknown",1.0);
    }
  }
  cVar2 = IsInCombat(this,false);
  pcVar5 = "1";
  if (cVar2 == '\0') {
    pcVar5 = "0";
  }
  AI_CriteriaSet::AppendCriteria(param_1,"InCombat",pcVar5,1.0);
  pcVar5 = "0";
  if (0.0 < *(float *)(this + 0x3bbc)) {
    pcVar5 = "1";
  }
  AI_CriteriaSet::AppendCriteria(param_1,"InCombatMusic",pcVar5,1.0);
  lVar12 = (longdouble)GetTimeSinceLastCombat(this);
  pcVar5 = (char *)CFmtStrN<256>::sprintf((CFmtStrN<256> *)&local_238,"%f",(double)(float)lVar12);
  AI_CriteriaSet::AppendCriteria(param_1,"TimeSinceCombat",pcVar5,1.0);
  lVar12 = (longdouble)GetTimeSinceLastCombatForAllSurvivors(false);
  pcVar5 = (char *)CFmtStrN<256>::sprintf((CFmtStrN<256> *)&local_238,"%f",(double)(float)lVar12);
  AI_CriteriaSet::AppendCriteria(param_1,"TimeSinceGroupInCombat",pcVar5,1.0);
  pcVar5 = "1";
  if (*(int *)(TheDirector + 0x1c0) < 1) {
    pcVar5 = "0";
  }
  AI_CriteriaSet::AppendCriteria(param_1,"TankActive",pcVar5,1.0);
  uVar8 = *(uint *)(this + 0x3ee0);
  if ((uVar8 == 0xffffffff) ||
     (puVar11 = g_pEntityList + (uVar8 & 0xfff) * 0x10, puVar11 == (undefined *)0xfffffffc)) {
    pcVar5 = "0";
  }
  else {
    pcVar5 = "0";
    if ((*(uint *)(puVar11 + 8) == uVar8 >> 0xc) && (*(int *)(puVar11 + 4) != 0)) {
      pcVar5 = "1";
    }
  }
  AI_CriteriaSet::AppendCriteria(param_1,"BeingJockeyed",pcVar5,1.0);
  cVar2 = IsActionBeingPerformedOnMe(this,1);
  pcVar5 = "1";
  if (cVar2 == '\0') {
    pcVar5 = "0";
  }
  AI_CriteriaSet::AppendCriteria(param_1,"BeingHealed",pcVar5,1.0);
  if (((byte)this[0x14d] & 0x10) != 0) {
    CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)this);
  }
  pcVar5 = (char *)CFmtStrN<256>::sprintf
                             ((CFmtStrN<256> *)&local_238,"%d",
                              (int)SQRT(*(float *)(this + 0x278) * *(float *)(this + 0x278) +
                                        *(float *)(this + 0x274) * *(float *)(this + 0x274)));
  AI_CriteriaSet::AppendCriteria(param_1,"MovementSpeed",pcVar5,1.0);
  cVar2 = UTIL_IsLowViolence();
  pcVar5 = "1";
  if (cVar2 == '\0') {
    pcVar5 = "0";
  }
  AI_CriteriaSet::AppendCriteria(param_1,"LowViolence",pcVar5,1.0);
  piVar4 = (int *)(**(code **)(*(int *)this + 0x77c))(this);
  cVar2 = (**(code **)(*piVar4 + 0x10))(piVar4);
  pcVar5 = "1";
  if (cVar2 == '\0') {
    pcVar5 = "0";
  }
  AI_CriteriaSet::AppendCriteria(param_1,"speaking",pcVar5,1.0);
  pcVar5 = (char *)CFmtStrN<256>::sprintf
                             ((CFmtStrN<256> *)&local_238,"%d",*(undefined4 *)(TheDirector + 0x4fc))
  ;
  AI_CriteriaSet::AppendCriteria(param_1,"campaignrandomnum",pcVar5,1.0);
  uVar6 = SurvivorCharacterDisplayName(*(undefined4 *)(TheDirector + 0x500));
  pcVar5 = (char *)CFmtStrN<256>::sprintf((CFmtStrN<256> *)&local_238,"%s",uVar6);
  AI_CriteriaSet::AppendCriteria(param_1,"introactor",pcVar5,1.0);
  CBaseMultiplayerPlayer::ModifyOrAppendCriteria((CBaseMultiplayerPlayer *)this,param_1);
  iVar3 = _DAT_0105db00;
  if (((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) &&
     (iVar7 = ThreadGetCurrentId(), iVar3 == iVar7)) {
    this = _DAT_0105d15c;
    cVar2 = CVProfNode::ExitScope();
    if (cVar2 != '\0') {
      _DAT_0105d15c = *(CTerrorPlayer **)(_DAT_0105d15c + 100);
    }
    DAT_0105d158 = _DAT_0105d15c == (CTerrorPlayer *)0x105d160;
  }
  if (local_25c != (CTerrorPlayer *)0x0) {
    this = local_25c;
    (**(code **)(local_25c + 0x54))(local_25c,local_264,local_260,0,0,0);
  }
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(this);
  }
  return;
}

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)