L L4D2node

Action<Smoker>::OnSpokeConcept

0x00ac45a0 · 1024 bytes · __thiscall

_ZN6ActionI6SmokerE14OnSpokeConceptEP20CBaseCombatCharacter11CAI_ConceptP11AI_Response

Decompiled

undefined (4 params)

/* Action<Smoker>::OnSpokeConcept(CBaseCombatCharacter*, CAI_Concept, AI_Response*) */

void __thiscall
Action<Smoker>::OnSpokeConcept(Action<Smoker> *this,uint param_1,undefined2 *param_3,uint param_4)

{
  float fVar1;
  int iVar2;
  code *pcVar3;
  undefined4 uVar4;
  char cVar5;
  uint uVar6;
  char *pcVar7;
  int *piVar8;
  undefined1 *puVar9;
  Action<Smoker> *pAVar10;
  uint *puVar11;
  uint *puVar12;
  int in_GS_OFFSET;
  uint auStack_94 [15];
  uint local_58;
  uint local_54;
  uint local_50;
  int local_4c;
  int *local_48;
  undefined1 *local_44;
  undefined4 local_40;
  undefined2 local_3c [2];
  undefined4 local_38;
  int local_34;
  int *local_30;
  undefined1 *local_2c;
  undefined4 local_28;
  undefined1 local_24;
  undefined1 local_23;
  undefined1 local_22;
  undefined1 local_21;
  int local_20;
  
  puVar12 = auStack_94 + 2;
  local_50 = param_1;
  local_54 = param_4;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  if (this[0x30] != (Action<Smoker>)0x0) {
    local_34 = 0;
    local_30 = (int *)0x0;
    local_2c = (undefined1 *)0x0;
    local_28 = 1;
    pAVar10 = this;
    puVar12 = auStack_94 + 2;
    do {
      puVar11 = puVar12;
      iVar2 = *(int *)(this + 0x1c);
      uVar6 = 0;
      if (iVar2 != 0) {
        puVar11[1] = 0x80;
        *puVar11 = iVar2 + 0x4028;
        puVar11[-1] = 0xac4694;
        cVar5 = INextBot::IsDebugging((INextBot *)*puVar11,puVar11[1]);
        if ((cVar5 == '\0') && (*(int *)(NextBotDebugHistory._28_4_ + 0x30) == 0)) {
          uVar6 = *(uint *)(this + 0x1c);
        }
        else {
          iVar2 = *(int *)pAVar10;
          *puVar11 = (uint)pAVar10;
          pcVar3 = *(code **)(iVar2 + 0xac);
          puVar11[-1] = 0xac46a7;
          auStack_94[0xe] = (*pcVar3)();
          local_58 = *(int *)(this + 8) + 0x11;
          iVar2 = **(int **)(this + 0x1c);
          *puVar11 = (uint)*(int **)(this + 0x1c);
          pcVar3 = *(code **)(iVar2 + 0x9a4);
          puVar11[-1] = 0xac46c1;
          uVar6 = (*pcVar3)();
          fVar1 = *(float *)(gpGlobals + 0xc);
          puVar11[8] = auStack_94[0xe];
          puVar11[6] = uVar6;
          puVar11[9] = (uint)"OnSpokeConcept";
          *(double *)(puVar11 + 4) = (double)fVar1;
          puVar11[7] = local_58;
          puVar11[3] = (uint)"%3.2f: %s:%s: %s received EVENT %s\n";
          puVar11[2] = (uint)&local_24;
          puVar11[1] = 0x80;
          local_24 = 100;
          local_23 = 100;
          local_22 = 100;
          local_21 = 0xff;
          *puVar11 = *(int *)(this + 0x1c) + 0x4028;
          puVar11[-1] = 0xac4726;
          INextBot::DebugConColorMsg();
          uVar6 = *(uint *)(this + 0x1c);
        }
      }
      local_3c[0] = *param_3;
      pcVar3 = *(code **)(*(int *)pAVar10 + 0x114);
      local_38 = *(undefined4 *)(param_3 + 2);
      puVar11[2] = uVar6;
      *puVar11 = (uint)&local_4c;
      puVar11[1] = (uint)pAVar10;
      puVar11[5] = local_54;
      puVar11[4] = (uint)local_3c;
      puVar11[3] = local_50;
      puVar11[-1] = 0xac464a;
      (*pcVar3)();
      local_30 = local_48;
      local_34 = local_4c;
      local_2c = local_44;
      local_28 = local_40;
      if (local_4c != 0) {
        iVar2 = *(int *)(this + 0x1c);
        if (iVar2 != 0) {
          *puVar11 = 1;
          puVar11[-1] = iVar2 + 0x4028;
          puVar11[-2] = 0xac4750;
          cVar5 = INextBot::IsDebugging((INextBot *)puVar11[-1],*puVar11);
          if (((cVar5 != '\0') || (*(int *)(NextBotDebugHistory._28_4_ + 0x30) != 0)) &&
             (local_34 - 1U < 3)) {
            local_58 = *(int *)(this + 8) + 0x11;
            iVar2 = **(int **)(this + 0x1c);
            puVar11[-1] = (uint)*(int **)(this + 0x1c);
            pcVar3 = *(code **)(iVar2 + 0x9a4);
            puVar11[-2] = 0xac478a;
            uVar6 = (*pcVar3)();
            fVar1 = *(float *)(gpGlobals + 0xc);
            puVar11[5] = uVar6;
            puVar11[6] = local_58;
            puVar11[2] = (uint)"%3.2f: %s:%s: ";
            *(double *)(puVar11 + 3) = (double)fVar1;
            puVar11[1] = (uint)&local_24;
            *puVar11 = 1;
            local_24 = 0xff;
            local_23 = 0xff;
            local_22 = 0;
            local_21 = 0xff;
            puVar11[-1] = *(int *)(this + 0x1c) + 0x4028;
            puVar11[-2] = 0xac47e0;
            INextBot::DebugConColorMsg();
            iVar2 = *(int *)pAVar10;
            puVar11[-1] = (uint)pAVar10;
            pcVar3 = *(code **)(iVar2 + 0xac);
            puVar11[-2] = 0xac47eb;
            uVar6 = (*pcVar3)();
            puVar11[2] = (uint)"%s ";
            puVar11[3] = uVar6;
            puVar11[1] = (uint)&local_24;
            *puVar11 = 1;
            local_24 = 0xff;
            local_23 = 0xff;
            local_22 = 0xff;
            local_21 = 0xff;
            puVar11[-1] = *(int *)(this + 0x1c) + 0x4028;
            puVar11[-2] = 0xac4826;
            INextBot::DebugConColorMsg();
            puVar11[3] = (uint)"OnSpokeConcept";
            puVar11[2] = (uint)"reponded to EVENT %s with ";
            puVar11[1] = (uint)&local_24;
            *puVar11 = 1;
            local_24 = 0xff;
            local_23 = 0xff;
            local_22 = 0;
            local_21 = 0xff;
            puVar11[-1] = *(int *)(this + 0x1c) + 0x4028;
            puVar11[-2] = 0xac4865;
            INextBot::DebugConColorMsg();
            puVar9 = &DAT_00d539c2;
            if (local_30 != (int *)0x0) {
              iVar2 = *local_30;
              puVar11[-1] = (uint)local_30;
              pcVar3 = *(code **)(iVar2 + 0xa4);
              puVar11[-2] = 0xac487c;
              puVar9 = (undefined1 *)(*pcVar3)();
            }
            pcVar7 = "CONTINUE";
            if (local_34 - 1U < 4) {
              pcVar7 = *(char **)(CSWTCH_3231 + (local_34 - 1U) * 4);
            }
            puVar11[3] = (uint)pcVar7;
            puVar11[4] = (uint)puVar9;
            puVar11[2] = (uint)"%s %s ";
            puVar11[1] = (uint)&local_24;
            *puVar11 = 1;
            local_24 = 0xff;
            local_23 = 0;
            local_22 = 0;
            local_21 = 0xff;
            puVar11[-1] = *(int *)(this + 0x1c) + 0x4028;
            puVar11[-2] = 0xac48d4;
            INextBot::DebugConColorMsg();
            puVar11[2] = (uint)&DAT_00c5799e;
            *puVar11 = 1;
            local_24 = 0;
            local_23 = 0xff;
            puVar9 = &DAT_00d539c2;
            if (local_2c != (undefined1 *)0x0) {
              puVar9 = local_2c;
            }
            local_22 = 0;
            local_21 = 0xff;
            puVar11[3] = (uint)puVar9;
            puVar11[1] = (uint)&local_24;
            puVar11[-1] = *(int *)(this + 0x1c) + 0x4028;
            puVar11[-2] = 0xac491c;
            INextBot::DebugConColorMsg();
          }
        }
        puVar11[1] = (uint)"OnSpokeConcept";
        *puVar11 = (uint)&local_34;
        puVar11[-1] = (uint)pAVar10;
        puVar11[-2] = 0xac4933;
        StorePendingEventResult
                  ((Action<Smoker> *)puVar11[-1],(EventDesiredResult *)*puVar11,(char *)puVar11[1]);
        break;
      }
      pAVar10 = *(Action<Smoker> **)(pAVar10 + 0x14);
      puVar12 = puVar11 + -1;
    } while (pAVar10 != (Action<Smoker> *)0x0);
    uVar4 = *(undefined4 *)(param_3 + 2);
    local_58 = CONCAT22(local_58._2_2_,*param_3);
    iVar2 = *(int *)this;
    puVar11[-1] = (uint)this;
    pcVar3 = *(code **)(iVar2 + 8);
    puVar11[-2] = 0xac4945;
    piVar8 = (int *)(*pcVar3)();
    while (puVar12 = puVar11 + -1, piVar8 != (int *)0x0) {
      pcVar3 = *(code **)(*piVar8 + 0x60);
      puVar11[-1] = (uint)piVar8;
      local_3c[0] = (undefined2)local_58;
      puVar11[2] = local_54;
      puVar11[1] = (uint)local_3c;
      *puVar11 = local_50;
      puVar11[-2] = 0xac4992;
      local_38 = uVar4;
      (*pcVar3)();
      iVar2 = *(int *)this;
      *puVar11 = (uint)piVar8;
      puVar11[-1] = (uint)this;
      pcVar3 = *(code **)(iVar2 + 0xc);
      puVar11[-2] = 0xac499e;
      piVar8 = (int *)(*pcVar3)();
    }
  }
  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  puVar12[-1] = (uint)&UNK_00ac49ab;
  __stack_chk_fail();
}

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)