L L4D2node

RecreateTransitionedPlayers

0x008f6750 · 304 bytes · __cdecl

_Z27RecreateTransitionedPlayersP9KeyValues

Decompiled

undefined (1 param)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* RecreateTransitionedPlayers(KeyValues*) */

void RecreateTransitionedPlayers(KeyValues *param_1)

{
  KeyValues *this;
  char *pcVar1;
  int iVar2;
  undefined4 local_10;
  
  CUtlVector<PlayerSaveData,CUtlMemory<PlayerSaveData,int>>::RemoveAll
            ((CUtlVector<PlayerSaveData,CUtlMemory<PlayerSaveData,int>> *)&g_SavedPlayers);
  CUtlMemory<PlayerSaveData,int>::Purge((CUtlMemory<PlayerSaveData,int> *)&g_SavedPlayers);
  _DAT_0100e51c = g_SavedPlayers;
  CUtlVector<SurvivorBotSaveData,CUtlMemory<SurvivorBotSaveData,int>>::RemoveAll
            ((CUtlVector<SurvivorBotSaveData,CUtlMemory<SurvivorBotSaveData,int>> *)
             &g_SavedSurvivorBots);
  CUtlMemory<SurvivorBotSaveData,int>::Purge
            ((CUtlMemory<SurvivorBotSaveData,int> *)&g_SavedSurvivorBots);
  _DAT_0100e508 = g_SavedSurvivorBots;
  this = (KeyValues *)KeyValues::GetFirstSubKey(param_1);
  do {
    if (this == (KeyValues *)0x0) {
      return;
    }
    while ((pcVar1 = (char *)KeyValues::GetName(this), pcVar1 == "player" ||
           (iVar2 = _V_stricmp("player",pcVar1), iVar2 == 0))) {
      local_10 = KeyValues::MakeCopy(this);
                    /* try { // try from 008f685e to 008f6862 has its CatchHandler @ 008f6898 */
      CUtlVector<PlayerSaveData,CUtlMemory<PlayerSaveData,int>>::InsertBefore
                ((CUtlVector<PlayerSaveData,CUtlMemory<PlayerSaveData,int>> *)&g_SavedPlayers,
                 DAT_0100e518,(PlayerSaveData *)&local_10);
      KeyValues::deleteThis();
      this = (KeyValues *)KeyValues::GetNextKey(this);
      if (this == (KeyValues *)0x0) {
        return;
      }
    }
    pcVar1 = (char *)KeyValues::GetName(this);
    if ((pcVar1 == "survivorbot") || (iVar2 = _V_stricmp("survivorbot",pcVar1), iVar2 == 0)) {
      local_10 = KeyValues::MakeCopy(this);
                    /* try { // try from 008f67fa to 008f67fe has its CatchHandler @ 008f6883 */
      CUtlVector<SurvivorBotSaveData,CUtlMemory<SurvivorBotSaveData,int>>::InsertBefore
                ((CUtlVector<SurvivorBotSaveData,CUtlMemory<SurvivorBotSaveData,int>> *)
                 &g_SavedSurvivorBots,DAT_0100e504,(SurvivorBotSaveData *)&local_10);
      KeyValues::deleteThis();
    }
    this = (KeyValues *)KeyValues::GetNextKey(this);
  } while( true );
}

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)