L L4D2node

CVScriptGameSystem::FrameUpdatePostEntityThink

0x00b5b510 · 446 bytes · __cdecl

_ZN18CVScriptGameSystem26FrameUpdatePostEntityThinkEv

Decompiled

undefined (0 params)

/* WARNING: Removing unreachable block (ram,0x00b5b658) */
/* WARNING: Removing unreachable block (ram,0x00b5b690) */
/* CVScriptGameSystem::FrameUpdatePostEntityThink() */

void CVScriptGameSystem::FrameUpdatePostEntityThink(void)

{
  int iVar1;
  int *piVar2;
  int iVar3;
  int local_18;
  
  if (g_pScriptVM != (int *)0x0) {
    (**(code **)(*g_pScriptVM + 0x24))(g_pScriptVM,*(undefined4 *)(gpGlobals + 0xc));
  }
  CScrollingScreenOverlay::Draw((CScrollingScreenOverlay *)g_ScriptErrorScreenOverlay);
  if ((*(int *)(developer._28_4_ + 0x30) != 0) && (g_bVscriptGameDebugEnabled != '\0')) {
    local_18 = -1;
                    /* try { // try from 00b5b582 to 00b5b607 has its CatchHandler @ 00b5b6d6 */
    iVar3 = (**(code **)(*g_pScriptVM + 0xd0))(g_pScriptVM);
    if (iVar3 - 1U < 0xfffffffe) {
                    /* try { // try from 00b5b6af to 00b5b6b1 has its CatchHandler @ 00b5b6d6 */
      local_18 = (**(code **)(*g_pScriptVM + 0x40))(g_pScriptVM,iVar3);
    }
    iVar3 = (**(code **)(*g_pScriptVM + 0x48))(g_pScriptVM,"ScriptDebugDraw",local_18,0);
    if (iVar3 != 0) {
      (**(code **)(*g_pScriptVM + 0x50))(g_pScriptVM,iVar3,0,0,0,local_18,1);
      (**(code **)(*g_pScriptVM + 0x4c))(g_pScriptVM,iVar3);
    }
    piVar2 = g_pScriptVM;
    if (local_18 != -1) {
      if ((g_pScriptVM != (int *)0x0) &&
         (0 < CUtlVectorUltraConservative<HSCRIPT__**,CUtlVectorUltraConservativeAllocator>::
              StaticData()::staticData)) {
        iVar3 = 0;
        do {
          (**(code **)(*piVar2 + 0x4c))
                    (piVar2,**(undefined4 **)
                              (&CUtlRBTree<CUtlMap<int,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<int,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<int,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                                ::Links(unsigned_short)::s_Sentinel + iVar3 * 4));
          iVar1 = iVar3 * 4;
          iVar3 = iVar3 + 1;
          **(undefined4 **)
            (&CUtlRBTree<CUtlMap<int,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<int,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<int,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
              ::Links(unsigned_short)::s_Sentinel + iVar1) = 0xffffffff;
        } while (iVar3 < CUtlVectorUltraConservative<HSCRIPT__**,CUtlVectorUltraConservativeAllocator>
                         ::StaticData()::staticData);
      }
      if ((local_18 != 0) && (piVar2 != (int *)0x0)) {
        (**(code **)(*piVar2 + 0x44))(piVar2,local_18);
      }
    }
  }
  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)