L L4D2node

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 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)