IIntention::SelectTargetPoint
0x007535d0 · 331 bytes · __cdecl
_ZNK10IIntention17SelectTargetPointEPK8INextBotPK20CBaseCombatCharacter
Decompiled
undefined (2 params)
/* IIntention::SelectTargetPoint(INextBot const*, CBaseCombatCharacter const*) const */
INextBot * IIntention::SelectTargetPoint(INextBot *param_1,CBaseCombatCharacter *param_2)
{
undefined4 uVar1;
int iVar2;
code *pcVar3;
int iVar4;
int *piVar5;
CBaseCombatCharacter **ppCVar6;
int in_stack_0000000c;
int in_stack_00000010;
int local_60;
CBaseCombatCharacter *local_5c;
int local_58 [9];
undefined1 local_34 [8];
float local_2c;
float local_28;
float local_24;
float local_20;
ppCVar6 = &local_5c;
local_5c = param_2;
iVar4 = (**(code **)(*(int *)param_2 + 8))();
do {
if (iVar4 == 0) {
ppCVar6[4] = (CBaseCombatCharacter *)&local_28;
ppCVar6[3] = (CBaseCombatCharacter *)local_34;
ppCVar6[2] = (CBaseCombatCharacter *)(in_stack_00000010 + 0x1a8);
ppCVar6[1] = (CBaseCombatCharacter *)(in_stack_00000010 + 0x19c);
*ppCVar6 = (CBaseCombatCharacter *)(in_stack_00000010 + 0x194);
ppCVar6[-1] = (CBaseCombatCharacter *)0x7536d0;
CCollisionProperty::CollisionAABBToWorldAABB
((CCollisionProperty *)*ppCVar6,(Vector *)ppCVar6[1],(Vector *)ppCVar6[2],
(Vector *)ppCVar6[3],(Vector *)ppCVar6[4]);
if ((*(byte *)(in_stack_00000010 + 0x14d) & 8) != 0) {
*ppCVar6 = (CBaseCombatCharacter *)in_stack_00000010;
ppCVar6[-1] = (CBaseCombatCharacter *)0x753730;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*ppCVar6);
}
uVar1 = *(undefined4 *)(in_stack_00000010 + 0x2e0);
*(undefined4 *)(param_1 + 4) = *(undefined4 *)(in_stack_00000010 + 0x2e4);
*(undefined4 *)param_1 = uVar1;
*(float *)(param_1 + 8) = (local_20 - local_2c) * 0.7 + *(float *)(in_stack_00000010 + 0x2e8);
return param_1;
}
ppCVar6[3] = (CBaseCombatCharacter *)0xfffffffe;
ppCVar6[2] = (CBaseCombatCharacter *)&IContextualQuery::typeinfo;
ppCVar6[1] = (CBaseCombatCharacter *)&INextBotEventResponder::typeinfo;
*ppCVar6 = (CBaseCombatCharacter *)iVar4;
ppCVar6[-1] = (CBaseCombatCharacter *)0x753646;
piVar5 = (int *)__dynamic_cast();
if (piVar5 != (int *)0x0) {
iVar2 = *piVar5;
ppCVar6[1] = (CBaseCombatCharacter *)piVar5;
ppCVar6[3] = (CBaseCombatCharacter *)in_stack_00000010;
*ppCVar6 = (CBaseCombatCharacter *)&local_28;
ppCVar6[2] = (CBaseCombatCharacter *)in_stack_0000000c;
pcVar3 = *(code **)(iVar2 + 0x14);
ppCVar6[-1] = (CBaseCombatCharacter *)0x753664;
(*pcVar3)();
ppCVar6 = ppCVar6 + -1;
if (((vec3_origin != local_28) || (DAT_01053d4c != local_24)) || (DAT_01053d50 != local_20)) {
*(float *)param_1 = local_28;
*(float *)(param_1 + 4) = local_24;
*(float *)(param_1 + 8) = local_20;
return param_1;
}
}
iVar2 = *(int *)param_2;
ppCVar6[1] = (CBaseCombatCharacter *)iVar4;
*ppCVar6 = param_2;
pcVar3 = *(code **)(iVar2 + 0xc);
ppCVar6[-1] = (CBaseCombatCharacter *)0x753620;
iVar4 = (*pcVar3)();
} while( true );
}
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.