L L4D2node

CPointScriptTemplate::CreateInstance

0x007e07f0 · 1505 bytes · __thiscall

_ZN20CPointScriptTemplate14CreateInstanceERK6VectorRK6QAngleP10CUtlVectorIP11CBaseEntity10CUtlMemoryIS8_iEES8_b

Decompiled

undefined (6 params)

/* CPointScriptTemplate::CreateInstance(Vector const&, QAngle const&, CUtlVector<CBaseEntity*,
   CUtlMemory<CBaseEntity*, int> >*, CBaseEntity*, bool) */

undefined4 __thiscall
CPointScriptTemplate::CreateInstance
          (CPointScriptTemplate *this,Vector *param_1,QAngle *param_2,CUtlVector *param_3,
          CBaseEntity *param_4,bool param_5)

{
  code *pcVar1;
  undefined1 *puVar2;
  uint *puVar3;
  int iVar4;
  CUtlVector *pCVar5;
  CPointScriptTemplate *pCVar6;
  QAngle *pQVar7;
  undefined4 ****ppppuVar8;
  undefined4 uVar9;
  undefined4 *puVar10;
  undefined4 *****pppppuVar11;
  undefined1 *puVar12;
  int iVar13;
  int iVar14;
  undefined4 *****pppppuVar15;
  int *piVar16;
  char **ppcVar17;
  undefined4 *****pppppuVar18;
  int *piVar19;
  int in_GS_OFFSET;
  undefined3 in_stack_00000019;
  undefined4 uStack_210;
  char *local_20c [2];
  int aiStack_204 [7];
  undefined4 local_1e8;
  int *local_1e4;
  CUtlVector *local_1e0;
  CPointScriptTemplate *local_1dc;
  QAngle *local_1d8;
  Vector *local_1d4;
  undefined4 ****local_1d0;
  undefined4 ****local_1cc;
  undefined4 ****local_1c8;
  int *local_1c4;
  undefined4 ****local_1c0;
  undefined4 ****local_1b8;
  undefined4 local_1b4;
  undefined4 local_1b0;
  undefined1 local_1ac [12];
  undefined1 local_1a0 [64];
  undefined1 local_160 [64];
  undefined1 local_120 [64];
  undefined4 ***local_e0 [16];
  undefined1 local_a0 [64];
  undefined4 ****local_60;
  undefined4 local_5c;
  undefined2 local_58;
  ushort local_56;
  undefined4 ****local_54;
  undefined4 local_50;
  undefined2 local_4c;
  ushort local_4a;
  uint local_48;
  undefined4 local_44;
  undefined2 local_40;
  ushort local_3e;
  undefined4 ***local_3c [2];
  undefined4 local_34;
  int local_20;
  
  local_1d4 = param_1;
  local_1d8 = param_2;
  local_1e0 = param_3;
  local_1e8 = _param_5;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  local_1c8 = *(undefined4 *****)(this + 0x50c);
  if ((undefined4 *****)local_1c8 == (undefined4 *****)0x0) {
    local_20c[0] = "CreateInstance called on a point_template that has no templates: %s\n";
    local_20c[1] = &DAT_00d539c2;
    if (*(undefined1 **)(this + 0x154) != (undefined1 *)0x0) {
      local_20c[1] = *(undefined1 **)(this + 0x154);
    }
    uStack_210 = 0x7e085e;
    Msg();
    uVar9 = 0;
    ppcVar17 = local_20c;
    goto LAB_007e0860;
  }
  iVar4 = -((int)local_1c8 * 0x10 + 0x10);
  ppcVar17 = (char **)((int)local_20c + iVar4);
  *(undefined4 *)((int)aiStack_204 + iVar4 + -4) = 1;
  local_1e4 = (int *)((int)aiStack_204 + iVar4 + 0x14);
  *(undefined4 *)((int)local_20c + iVar4) = TheDirector;
  *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e08b4;
  puVar10 = (undefined4 *)CDirector::GetScriptScope();
  if (puVar10 != (undefined4 *)0x0) {
    iVar13 = *g_pScriptVM;
    *(undefined4 *)((int)aiStack_204 + iVar4 + 4) = 0;
    uVar9 = *puVar10;
    *(char **)((int)aiStack_204 + iVar4 + -4) = "InstanceTemplateSpawnTables";
    *(int **)((int)local_20c + iVar4) = g_pScriptVM;
    *(undefined4 *)((int)aiStack_204 + iVar4) = uVar9;
    pcVar1 = *(code **)(iVar13 + 0x48);
    *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e08e1;
    pppppuVar11 = (undefined4 *****)(*pcVar1)();
    if (pppppuVar11 != (undefined4 *****)0x0) {
      local_1c4 = (int *)((CONCAT31(local_1c4._1_3_,(char)(*(uint *)(this + 0x148) >> 1)) ^ 1) &
                         0xffffff01);
      local_1c0 = *(undefined4 ******)(this + 0x530);
      local_1cc = *(undefined4 ******)(this + 0x52c);
      pppppuVar18 = &local_60;
      do {
        *pppppuVar18 = (undefined4 ****)0x0;
        pppppuVar15 = pppppuVar18 + 3;
        *(undefined2 *)(pppppuVar18 + 2) = 0;
        *(undefined2 *)((int)pppppuVar18 + 10) = 0;
        pppppuVar18 = pppppuVar15;
      } while (pppppuVar15 != (undefined4 *****)local_3c);
      if ((local_56 & 1) != 0) {
        local_1d0 = pppppuVar11;
        *(undefined4 *****)((int)local_20c + iVar4) = local_60;
        *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0955;
        free(*(void **)((int)local_20c + iVar4));
        local_56 = local_56 & 0xfffe;
        pppppuVar11 = (undefined4 *****)local_1d0;
      }
      local_5c = 0;
      local_58 = 0x20;
      local_60 = local_1cc;
      if ((local_4a & 1) != 0) {
        local_1cc = pppppuVar11;
        *(undefined4 *****)((int)local_20c + iVar4) = local_54;
        *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0990;
        free(*(void **)((int)local_20c + iVar4));
        local_4a = local_4a & 0xfffe;
        pppppuVar11 = (undefined4 *****)local_1cc;
      }
      local_50 = 0;
      local_4c = 0x20;
      local_54 = local_1c0;
      if ((local_3e & 1) != 0) {
        local_1c0 = pppppuVar11;
        *(uint *)((int)local_20c + iVar4) = local_48;
        *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e09cb;
        free(*(void **)((int)local_20c + iVar4));
        local_3e = local_3e & 0xfffe;
        pppppuVar11 = (undefined4 *****)local_1c0;
      }
      local_40 = 6;
      local_44 = 0;
      local_48 = (uint)local_1c4 & 0xff;
      iVar13 = *g_pScriptVM;
      *(undefined4 *)((int)aiStack_204 + iVar4 + 0x10) = 1;
      uVar9 = *puVar10;
      *(undefined4 *)((int)aiStack_204 + iVar4 + 8) = 0;
      *(undefined4 *)((int)aiStack_204 + iVar4 + 4) = 3;
      *(undefined4 ******)((int)aiStack_204 + iVar4) = &local_60;
      *(undefined4 ******)((int)aiStack_204 + iVar4 + -4) = pppppuVar11;
      *(undefined4 *)((int)aiStack_204 + iVar4 + 0xc) = uVar9;
      *(int **)((int)local_20c + iVar4) = g_pScriptVM;
                    /* try { // try from 007e0a27 to 007e0a29 has its CatchHandler @ 007e0cb0 */
      pcVar1 = *(code **)(iVar13 + 0x50);
      *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0a2a;
      (*pcVar1)();
      pppppuVar11 = (undefined4 *****)local_3c;
      do {
        pppppuVar18 = pppppuVar11 + -3;
        if ((*(byte *)((int)pppppuVar11 + -2) & 1) != 0) {
          *(undefined4 *****)((int)local_20c + iVar4) = *pppppuVar18;
          *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0a40;
          free(*(void **)((int)local_20c + iVar4));
          *(ushort *)((int)pppppuVar11 + -2) = *(ushort *)((int)pppppuVar11 + -2) & 0xfffe;
        }
        *pppppuVar18 = (undefined4 ****)0x0;
        pppppuVar11[-2] = (undefined4 ****)0x0;
        *(undefined2 *)(pppppuVar11 + -1) = 0;
        pppppuVar11 = pppppuVar18;
      } while (pppppuVar18 != &local_60);
    }
  }
  piVar16 = local_1e4;
  if ((int)local_1c8 < 1) {
    *(undefined4 *)((int)aiStack_204 + iVar4) = 1;
    *(int **)((int)aiStack_204 + iVar4 + -4) = piVar16;
    *(undefined4 *****)((int)local_20c + iVar4) = local_1c8;
    *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0db8;
    SpawnHierarchicalList
              (*(int *)((int)local_20c + iVar4),
               *(HierarchicalSpawn_t **)((int)aiStack_204 + iVar4 + -4),
               *(bool *)((int)aiStack_204 + iVar4));
    if ((char)local_1e8 != '\0') goto LAB_007e0d05;
LAB_007e0dc5:
    uVar9 = 1;
    ppcVar17 = (char **)((int)local_20c + iVar4);
  }
  else {
    local_1c0 = (undefined4 *****)0x0;
    local_1c4 = local_1e4;
    local_1dc = this + 0x2e0;
    do {
      puVar10 = (undefined4 *)(*(int *)(this + 0x500) + (int)local_1c0 * 8);
      puVar2 = (undefined1 *)*puVar10;
      puVar12 = &DAT_00d539c2;
      if (puVar2 != (undefined1 *)0x0) {
        puVar12 = puVar2;
      }
      *(undefined4 *)((int)aiStack_204 + iVar4 + -4) = puVar10[1];
      *(undefined1 **)((int)local_20c + iVar4) = puVar12;
      *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0c21;
      iVar13 = ScriptCreateEntityFromTable
                         (*(char **)((int)local_20c + iVar4),
                          *(HSCRIPT__ **)((int)aiStack_204 + iVar4 + -4));
      if (iVar13 == 0) {
        *(char **)((int)local_20c + iVar4) =
             "Failed to initialize templated entity with spawn table\n";
        *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0ca4;
        Msg();
        uVar9 = 0;
        goto LAB_007e0860;
      }
      if (((byte)this[0x14d] & 8) != 0) {
        *(CPointScriptTemplate **)((int)local_20c + iVar4) = this;
        *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0c42;
        CBaseEntity::CalcAbsolutePosition(*(CBaseEntity **)((int)local_20c + iVar4));
        if (((byte)this[0x14d] & 8) != 0) {
          *(CPointScriptTemplate **)((int)local_20c + iVar4) = this;
          *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0c57;
          CBaseEntity::CalcAbsolutePosition(*(CBaseEntity **)((int)local_20c + iVar4));
        }
      }
      pCVar6 = local_1dc;
      *(CPointScriptTemplate **)((int)aiStack_204 + iVar4) = this + 0x37c;
      *(CPointScriptTemplate **)((int)aiStack_204 + iVar4 + -4) = pCVar6;
      *(undefined1 **)((int)local_20c + iVar4) = local_1a0;
      *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0aba;
      VMatrix::SetupMatrixOrgAngles
                (*(VMatrix **)((int)local_20c + iVar4),*(Vector **)((int)aiStack_204 + iVar4 + -4),
                 *(QAngle **)((int)aiStack_204 + iVar4));
      *(undefined1 **)((int)aiStack_204 + iVar4 + -4) = local_160;
      *(undefined1 **)((int)local_20c + iVar4) = local_1a0;
      *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0acc;
      VMatrix::InverseTR(*(VMatrix **)((int)local_20c + iVar4),
                         *(VMatrix **)((int)aiStack_204 + iVar4 + -4));
      local_1cc = (undefined4 ****)(iVar13 + 0x37c);
      if ((*(byte *)(iVar13 + 0x14d) & 8) != 0) {
        *(int *)((int)local_20c + iVar4) = iVar13;
        *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0c6e;
        CBaseEntity::CalcAbsolutePosition(*(CBaseEntity **)((int)local_20c + iVar4));
        if ((*(byte *)(iVar13 + 0x14d) & 8) != 0) {
          *(int *)((int)local_20c + iVar4) = iVar13;
          *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0c89;
          CBaseEntity::CalcAbsolutePosition(*(CBaseEntity **)((int)local_20c + iVar4));
        }
      }
      *(undefined4 *****)((int)aiStack_204 + iVar4) = local_1cc;
      *(int *)((int)aiStack_204 + iVar4 + -4) = iVar13 + 0x2e0;
      *(undefined1 **)((int)local_20c + iVar4) = local_120;
      local_1cc = (undefined4 ****)local_120;
      *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0b01;
      VMatrix::SetupMatrixOrgAngles
                (*(VMatrix **)((int)local_20c + iVar4),*(Vector **)((int)aiStack_204 + iVar4 + -4),
                 *(QAngle **)((int)aiStack_204 + iVar4));
      ppppuVar8 = local_1cc;
      *(undefined1 **)((int)local_20c + iVar4) = local_160;
      *(undefined4 *****)((int)aiStack_204 + iVar4) = local_e0;
      local_1d0 = local_e0;
      *(undefined4 *****)((int)aiStack_204 + iVar4 + -4) = ppppuVar8;
      *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0b29;
      MatrixMultiply(*(VMatrix **)((int)local_20c + iVar4),
                     *(VMatrix **)((int)aiStack_204 + iVar4 + -4),
                     *(VMatrix **)((int)aiStack_204 + iVar4));
      pQVar7 = local_1d8;
      *(undefined1 **)((int)local_20c + iVar4) = local_a0;
      *(QAngle **)((int)aiStack_204 + iVar4) = pQVar7;
      *(Vector **)((int)aiStack_204 + iVar4 + -4) = local_1d4;
      *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0b45;
      VMatrix::SetupMatrixOrgAngles
                (*(VMatrix **)((int)local_20c + iVar4),*(Vector **)((int)aiStack_204 + iVar4 + -4),
                 *(QAngle **)((int)aiStack_204 + iVar4));
      ppppuVar8 = local_1d0;
      *(undefined4 ******)((int)aiStack_204 + iVar4) = &local_60;
      *(undefined1 **)((int)local_20c + iVar4) = local_a0;
      local_1cc = &local_60;
      *(undefined4 *****)((int)aiStack_204 + iVar4 + -4) = ppppuVar8;
      *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0b6a;
      MatrixMultiply(*(VMatrix **)((int)local_20c + iVar4),
                     *(VMatrix **)((int)aiStack_204 + iVar4 + -4),
                     *(VMatrix **)((int)aiStack_204 + iVar4));
      ppppuVar8 = local_54;
      *(undefined1 **)((int)aiStack_204 + iVar4 + -4) = local_1ac;
      uVar9 = local_34;
      local_1b8 = ppppuVar8;
      local_1b4 = local_44;
      *(undefined4 *****)((int)local_20c + iVar4) = local_1cc;
      local_1b0 = uVar9;
      *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0ba3;
      MatrixToAngles(*(VMatrix **)((int)local_20c + iVar4),
                     *(QAngle **)((int)aiStack_204 + iVar4 + -4));
      *(int *)((int)local_20c + iVar4) = iVar13;
      *(undefined4 ******)((int)aiStack_204 + iVar4 + -4) = &local_1b8;
      *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0bb5;
      CBaseEntity::SetAbsOrigin
                (*(CBaseEntity **)((int)local_20c + iVar4),
                 *(Vector **)((int)aiStack_204 + iVar4 + -4));
      *(undefined1 **)((int)aiStack_204 + iVar4 + -4) = local_1ac;
      *(int *)((int)local_20c + iVar4) = iVar13;
      *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0bc1;
      CBaseEntity::SetAbsAngles
                (*(CBaseEntity **)((int)local_20c + iVar4),
                 *(QAngle **)((int)aiStack_204 + iVar4 + -4));
      piVar19 = local_1c4;
      piVar16 = local_1e4;
      local_1c0 = (undefined4 ****)((int)local_1c0 + 1);
      local_1c4 = local_1c4 + 4;
      *piVar19 = iVar13;
      piVar19[1] = 0;
      piVar19[2] = 0;
    } while (local_1c0 != local_1c8);
    *(undefined4 *)((int)aiStack_204 + iVar4) = 1;
    *(int **)((int)aiStack_204 + iVar4 + -4) = piVar16;
    *(undefined4 *****)((int)local_20c + iVar4) = local_1c8;
    *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0cf8;
    SpawnHierarchicalList
              (*(int *)((int)local_20c + iVar4),
               *(HierarchicalSpawn_t **)((int)aiStack_204 + iVar4 + -4),
               *(bool *)((int)aiStack_204 + iVar4));
    if ((char)local_1e8 != '\0') {
LAB_007e0d05:
      piVar16 = *(int **)(gpGlobals + 0xc);
      if ((int)local_1c8 < 1) goto LAB_007e0dc5;
      pppppuVar18 = (undefined4 *****)0x0;
      pppppuVar11 = (undefined4 *****)local_1c8;
      piVar19 = local_1e4;
      do {
        iVar13 = *piVar19;
        if ((iVar13 != 0) && ((float)piVar16 != *(float *)(iVar13 + 0x98))) {
          if (*(char *)(iVar13 + 0x6c) == '\0') {
            puVar3 = *(uint **)(iVar13 + 0x30);
            if (puVar3 != (uint *)0x0) {
              *puVar3 = *puVar3 | 0x101;
              *(uint **)((int)local_20c + iVar4) = puVar3;
              local_1c4 = piVar16;
              local_1c0 = pppppuVar11;
              *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0d7a;
              iVar14 = CBaseEdict::GetChangeAccessor(*(CBaseEdict **)((int)local_20c + iVar4));
              *(undefined2 *)(iVar14 + 2) = 0;
              pppppuVar11 = (undefined4 *****)local_1c0;
              piVar16 = local_1c4;
            }
          }
          else {
            *(byte *)(iVar13 + 0x70) = *(byte *)(iVar13 + 0x70) | 1;
          }
          *(int **)(iVar13 + 0x98) = piVar16;
        }
        pppppuVar18 = (undefined4 *****)((int)pppppuVar18 + 1);
        piVar19 = piVar19 + 4;
      } while (pppppuVar18 != pppppuVar11);
    }
    pCVar5 = local_1e0;
    iVar13 = 0;
    piVar16 = local_1e4;
    do {
      if (*piVar16 != 0) {
        *(int **)((int)aiStack_204 + iVar4) = piVar16;
        uVar9 = *(undefined4 *)(pCVar5 + 0xc);
        *(CUtlVector **)((int)local_20c + iVar4) = pCVar5;
        *(undefined4 *)((int)aiStack_204 + iVar4 + -4) = uVar9;
        *(undefined4 *)((int)&uStack_210 + iVar4) = 0x7e0df9;
        CUtlVector<CBaseEntity*,CUtlMemory<CBaseEntity*,int>>::InsertBefore
                  (*(CUtlVector<CBaseEntity*,CUtlMemory<CBaseEntity*,int>> **)
                    ((int)local_20c + iVar4),*(int *)((int)aiStack_204 + iVar4 + -4),
                   *(CBaseEntity ***)((int)aiStack_204 + iVar4));
      }
      iVar13 = iVar13 + 1;
      piVar16 = piVar16 + 4;
    } while (iVar13 < (int)local_1c8);
    uVar9 = 1;
    ppcVar17 = (char **)((int)local_20c + iVar4);
  }
LAB_007e0860:
  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
    return uVar9;
  }
                    /* WARNING: Subroutine does not return */
  *(undefined1 **)((int)ppcVar17 + -4) = &LAB_007e0cb0;
  __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)