L L4D2node

CDirectorChallengeMode::OnFinaleEscapeForceSurvivorPositions

0x008995b0 · 410 bytes · __cdecl

_ZN22CDirectorChallengeMode36OnFinaleEscapeForceSurvivorPositionsERK10CUtlVectorIP13CTerrorPlayer10CUtlMemoryIS2_iEE

Decompiled

undefined (1 param)

/* CDirectorChallengeMode::OnFinaleEscapeForceSurvivorPositions(CUtlVector<CTerrorPlayer*,
   CUtlMemory<CTerrorPlayer*, int> > const&) */

void CDirectorChallengeMode::OnFinaleEscapeForceSurvivorPositions(CUtlVector *param_1)

{
  uint uVar1;
  CBaseEdict *this;
  char cVar2;
  int iVar3;
  undefined *puVar4;
  undefined *puVar5;
  int *piVar6;
  
  if ((((((*param_1 != (CUtlVector)0x0) &&
         (iVar3 = CDirector::GetScriptValue(TheDirector,"cm_FirstManOut",0), puVar5 = g_pEntityList,
         iVar3 != 0)) && (uVar1 = *(uint *)(param_1 + 0x13c), uVar1 != 0xffffffff)) &&
       ((puVar4 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar4 != (undefined *)0xfffffffc &&
        (*(uint *)(puVar4 + 8) == uVar1 >> 0xc)))) &&
      ((*(int *)(puVar4 + 4) != 0 &&
       ((iVar3 = __dynamic_cast(*(int *)(puVar4 + 4),&CBaseEntity::typeinfo,&CBaseTrigger::typeinfo,
                                0), iVar3 != 0 && (*(int *)(iVar3 + 0x560) != 0)))))) &&
     ((((1 < *(int *)(iVar3 + 0x560) &&
        ((((uVar1 = *(uint *)(TheDirector + 0x3a4), uVar1 != 0xffffffff &&
           (puVar4 = puVar5 + (uVar1 & 0xfff) * 0x10, puVar4 != (undefined *)0xfffffffc)) &&
          (*(uint *)(puVar4 + 8) == uVar1 >> 0xc)) &&
         ((piVar6 = *(int **)(puVar4 + 4), piVar6 != (int *)0x0 &&
          (cVar2 = (**(code **)(*piVar6 + 0x16c))(piVar6), puVar5 = g_pEntityList, cVar2 != '\0'))))
        )) || ((((uVar1 = **(uint **)(iVar3 + 0x554), uVar1 != 0xffffffff &&
                 ((puVar5 = puVar5 + (uVar1 & 0xfff) * 0x10, puVar5 != (undefined *)0xfffffffc &&
                  (*(uint *)(puVar5 + 8) == uVar1 >> 0xc)))) &&
                (piVar6 = *(int **)(puVar5 + 4), piVar6 != (int *)0x0)) &&
               (cVar2 = (**(code **)(*piVar6 + 0x16c))(piVar6), cVar2 != '\0')))) &&
      (*(char *)((int)piVar6 + 0x2e59) == '\0')))) {
    if ((char)piVar6[0x1b] == '\0') {
      this = (CBaseEdict *)piVar6[0xc];
      if (this != (CBaseEdict *)0x0) {
        *(uint *)this = *(uint *)this | 0x101;
        iVar3 = CBaseEdict::GetChangeAccessor(this);
        *(undefined2 *)(iVar3 + 2) = 0;
      }
    }
    else {
      *(byte *)(piVar6 + 0x1c) = *(byte *)(piVar6 + 0x1c) | 1;
    }
    *(undefined1 *)((int)piVar6 + 0x2e59) = 1;
    return;
  }
  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)