SurvivorBehavior::SelectMoreDangerousThreat
0x009281d0 · 362 bytes · __thiscall
_ZNK16SurvivorBehavior25SelectMoreDangerousThreatEPK8INextBotPK20CBaseCombatCharacterPS3_S6_
Decompiled
undefined (5 params)
/* SurvivorBehavior::SelectMoreDangerousThreat(INextBot const*, CBaseCombatCharacter const*,
CBaseCombatCharacter*, CBaseCombatCharacter*) const */
CBaseCombatCharacter * __thiscall
SurvivorBehavior::SelectMoreDangerousThreat
(SurvivorBehavior *this,INextBot *param_1,CBaseCombatCharacter *param_2,
CBaseCombatCharacter *param_3,CBaseCombatCharacter *param_4)
{
char cVar1;
int *piVar2;
SurvivorIntention *pSVar3;
int iVar4;
int iVar5;
CBaseCombatCharacter *pCVar6;
piVar2 = (int *)(**(code **)(*(int *)param_1 + 0xbc))(param_1);
if ((param_2 == (CBaseCombatCharacter *)0x0) ||
(cVar1 = (**(code **)(*(int *)param_2 + 0x16c))(param_2), cVar1 == '\0')) {
param_2 = (CBaseCombatCharacter *)0x0;
}
pSVar3 = (SurvivorIntention *)(**(code **)(*piVar2 + 0x9a8))(piVar2);
cVar1 = SurvivorIntention::IsImmediatelyDangerousTo(pSVar3,(CTerrorPlayer *)param_2,param_3);
if (cVar1 == '\0') {
pSVar3 = (SurvivorIntention *)(**(code **)(*piVar2 + 0x9a8))(piVar2);
cVar1 = SurvivorIntention::IsImmediatelyDangerousTo(pSVar3,(CTerrorPlayer *)param_2,param_4);
if (cVar1 != '\0') {
return param_4;
}
iVar4 = CTerrorPlayer::ClassifyZombie((CBaseEntity *)param_3);
iVar5 = CTerrorPlayer::ClassifyZombie((CBaseEntity *)param_4);
if (iVar4 != iVar5) {
if (iVar4 == 8) {
return param_3;
}
if (iVar5 == 8) {
return param_4;
}
}
pSVar3 = (SurvivorIntention *)(**(code **)(*piVar2 + 0x9a8))(piVar2);
cVar1 = SurvivorIntention::IsDangerousTo(pSVar3,(CTerrorPlayer *)param_2,param_3);
if (cVar1 == '\0') {
pSVar3 = (SurvivorIntention *)(**(code **)(*piVar2 + 0x9a8))(piVar2);
cVar1 = SurvivorIntention::IsDangerousTo(pSVar3,(CTerrorPlayer *)param_2,param_4);
if (cVar1 != '\0') {
return param_4;
}
goto LAB_00928300;
}
pSVar3 = (SurvivorIntention *)(**(code **)(*piVar2 + 0x9a8))();
cVar1 = SurvivorIntention::IsDangerousTo(pSVar3,(CTerrorPlayer *)param_2,param_4);
}
else {
pSVar3 = (SurvivorIntention *)(**(code **)(*piVar2 + 0x9a8))();
cVar1 = SurvivorIntention::IsImmediatelyDangerousTo(pSVar3,(CTerrorPlayer *)param_2,param_4);
}
if (cVar1 == '\0') {
return param_3;
}
LAB_00928300:
pCVar6 = (CBaseCombatCharacter *)SelectCloserThreat(this,(CTerrorPlayer *)param_2,param_3,param_4)
;
return pCVar6;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
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.
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.