L L4D2node

Action<Hunter>::InvokeOnEnd

0x00aa0fd0 · 459 bytes · __thiscall

_ZN6ActionI6HunterE11InvokeOnEndEPS0_P8BehaviorIS0_EPS1_.part.64

Decompiled

undefined (4 params)

/* Action<Hunter>::InvokeOnEnd(Hunter*, Behavior<Hunter>*, Action<Hunter>*) [clone .part.64] */

void __thiscall
Action<Hunter>::InvokeOnEnd(Action<Hunter> *this,Hunter *param_1,Behavior *param_2,Action *param_3)

{
  char *pcVar1;
  INextBot *this_00;
  int iVar2;
  char cVar3;
  int *in_EAX;
  undefined4 uVar4;
  int in_ECX;
  Hunter *in_EDX;
  int in_GS_OFFSET;
  Behavior *pBVar5;
  Action *in_stack_ffffffb0;
  undefined1 local_24;
  undefined1 local_23;
  undefined1 local_22;
  undefined1 local_21;
  int local_20;
  
  this_00 = (INextBot *)(in_EDX + 0x4028);
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  cVar3 = INextBot::IsDebugging(this_00,1);
  if ((cVar3 != '\0') || (*(int *)(NextBotDebugHistory._28_4_ + 0x30) != 0)) {
    uVar4 = (**(code **)(*(int *)in_EDX + 0x9a4))();
    local_24 = 0xff;
    local_23 = 0xff;
    local_22 = 0x96;
    local_21 = 0xff;
    INextBot::DebugConColorMsg
              (this_00,1,&local_24,"%3.2f: %s:%s: ",(double)*(float *)(gpGlobals + 0xc),uVar4,
               in_ECX + 0x11);
    local_24 = 0xff;
    local_23 = 0;
    local_22 = 0;
    local_21 = 0xff;
    INextBot::DebugConColorMsg(this_00,1,&local_24," ENDING ");
    uVar4 = (**(code **)(*in_EAX + 0xa4))();
    local_24 = 0xff;
    local_23 = 0xff;
    local_22 = 0xff;
    local_21 = 0xff;
    INextBot::DebugConColorMsg(this_00,1,&local_24,uVar4);
    in_stack_ffffffb0 = (Action *)&DAT_00cff71e;
    local_24 = 0xff;
    local_23 = 0xff;
    local_22 = 0xff;
    local_21 = 0xff;
    INextBot::DebugConColorMsg(this_00,1,&local_24);
  }
  *(undefined1 *)(in_EAX + 0xc) = 0;
  pBVar5 = (Behavior *)this;
  (**(code **)(*in_EAX + 0xb8))();
  iVar2 = in_EAX[4];
  while (iVar2 != 0) {
    pcVar1 = (char *)(iVar2 + 0x30);
    iVar2 = *(int *)(iVar2 + 0x14);
    if (*pcVar1 != '\0') {
      InvokeOnEnd(this,in_EDX,pBVar5,in_stack_ffffffb0);
    }
  }
  if ((in_EAX[6] != 0) && (*(char *)(in_EAX[6] + 0x30) != '\0')) {
    InvokeOnEnd(this,in_EDX,pBVar5,in_stack_ffffffb0);
  }
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  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)