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 intoaddons/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.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.