L L4D2node

PlayerSaveData::Restore

0x008faf60 · 9663 bytes · __thiscall

_ZN14PlayerSaveData7RestoreEP13CTerrorPlayer

Decompiled

undefined (2 params)

/* PlayerSaveData::Restore(CTerrorPlayer*) */

void __thiscall PlayerSaveData::Restore(PlayerSaveData *this,CTerrorPlayer *param_1)

{
  code *pcVar1;
  CBaseEdict *pCVar2;
  uint *puVar3;
  uint uVar4;
  code *pcVar5;
  CDirector *pCVar6;
  char cVar7;
  int *piVar8;
  undefined4 uVar9;
  int iVar10;
  char *pcVar11;
  int iVar12;
  int iVar13;
  float fVar14;
  float fVar15;
  undefined **ppuVar16;
  char *pcVar17;
  float fVar18;
  int *piVar19;
  Checkpoint *pCVar20;
  KeyValues *pKVar21;
  undefined *puVar22;
  CTerrorPlayer *pCVar23;
  float *pfVar24;
  longdouble lVar25;
  longdouble lVar26;
  undefined ***local_74;
  float local_60;
  float local_5c;
  float local_58;
  undefined **local_54;
  float local_50;
  float local_4c;
  undefined4 local_48;
  undefined4 local_44;
  undefined4 local_40;
  undefined **local_3c;
  float local_38;
  float local_34 [9];
  
  pfVar24 = (float *)&stack0xffffff54;
  (**(code **)(*engine + 0x40))();
  (**(code **)(*(int *)param_1 + 0xb8))();
  UTIL_LogPrintf("Restoring player %s(%d) after changelevel\n");
  cVar7 = CTerrorPlayer::TakeOverBot(param_1,true);
  if (cVar7 != '\0') {
    PlayerReporter::CreateAwardTemplatesForPlayer(ThePlayerReporter,param_1);
    piVar8 = (int *)(**(code **)(*gameeventmanager + 0x1c))();
    if (piVar8 != (int *)0x0) {
      pcVar1 = *(code **)(*piVar8 + 0x30);
      (**(code **)(*engine + 0x40))();
      (*pcVar1)();
      (**(code **)(*gameeventmanager + 0x20))();
    }
    uVar9 = KeyValues::GetInt(*(KeyValues **)this,"missionIDSpawnedOn",0);
    *(undefined4 *)(param_1 + 0x3a88) = uVar9;
    uVar9 = KeyValues::GetInt(*(KeyValues **)this,"teamSpawnedOn",0);
    *(undefined4 *)(param_1 + 0x3a8c) = uVar9;
    KeyValues::SetInt(*(KeyValues **)this,"tookOverBot",1);
    iVar10 = KeyValues::GetInt(*(KeyValues **)this,"idle",0);
    if (iVar10 != 0) {
      lVar25 = (longdouble)CountdownTimer::Now();
      if ((float)lVar25 + 5.0 != *(float *)(param_1 + 0x3fd8)) {
        (**(code **)(*(int *)(param_1 + 0x3fd0) + 4))();
        *(float *)(param_1 + 0x3fd8) = (float)lVar25 + 5.0;
      }
      if (*(float *)(param_1 + 0x3fd4) != 5.0) {
        (**(code **)(*(int *)(param_1 + 0x3fd0) + 4))();
        *(undefined4 *)(param_1 + 0x3fd4) = 0x40a00000;
      }
    }
    return;
  }
  cVar7 = CDirector::IsInTransition(TheDirector);
  if (cVar7 == '\0') {
    iVar10 = KeyValues::GetInt(*(KeyValues **)this,"teamNumber",0);
    if (iVar10 == 2) {
      iVar10 = UTIL_HumansOnTeam(2,false);
      if (*(int *)(ZombieSurvivorLimit._28_4_ + 0x30) <= iVar10) {
        iVar10 = UTIL_HumansOnTeam(3,false);
        if (iVar10 < *(int *)(ZombieMaxPlayerZombies._28_4_ + 0x30)) {
          KeyValues::SetInt(*(KeyValues **)this,"teamNumber",3);
          KeyValues::SetInt(*(KeyValues **)this,"state",6);
          KeyValues::SetInt(*(KeyValues **)this,"health",0);
          KeyValues::SetFloat(*(KeyValues **)this,"healthBuffer",0.0);
          KeyValues::SetInt(*(KeyValues **)this,"fumes",0);
          KeyValues::SetInt(*(KeyValues **)this,"incapacitated",0);
          while (pKVar21 = (KeyValues *)KeyValues::FindKey(*(KeyValues **)this,"weapon",false),
                pKVar21 != (KeyValues *)0x0) {
            KeyValues::RemoveSubKey(*(KeyValues **)this,pKVar21);
            KeyValues::deleteThis();
          }
        }
        else {
          KeyValues::SetInt(*(KeyValues **)this,"teamNumber",1);
          KeyValues::SetInt(*(KeyValues **)this,"state",6);
          KeyValues::SetInt(*(KeyValues **)this,"health",0);
          KeyValues::SetFloat(*(KeyValues **)this,"healthBuffer",0.0);
          KeyValues::SetInt(*(KeyValues **)this,"fumes",0);
          KeyValues::SetInt(*(KeyValues **)this,"incapacitated",0);
          while (pKVar21 = (KeyValues *)KeyValues::FindKey(*(KeyValues **)this,"weapon",false),
                pKVar21 != (KeyValues *)0x0) {
            KeyValues::RemoveSubKey(*(KeyValues **)this,pKVar21);
            KeyValues::deleteThis();
          }
        }
      }
    }
    else {
      iVar10 = KeyValues::GetInt(*(KeyValues **)this,"teamNumber",0);
      if ((iVar10 == 3) &&
         (iVar10 = UTIL_HumansOnTeam(3,false),
         *(int *)(ZombieMaxPlayerZombies._28_4_ + 0x30) <= iVar10)) {
        iVar10 = UTIL_HumansOnTeam(2,false);
        if (iVar10 < *(int *)(ZombieSurvivorLimit._28_4_ + 0x30)) {
          KeyValues::SetInt(*(KeyValues **)this,"teamNumber",2);
          KeyValues::SetInt(*(KeyValues **)this,"state",6);
          KeyValues::SetInt(*(KeyValues **)this,"health",0);
          KeyValues::SetFloat(*(KeyValues **)this,"healthBuffer",0.0);
          KeyValues::SetInt(*(KeyValues **)this,"fumes",0);
          KeyValues::SetInt(*(KeyValues **)this,"incapacitated",0);
          while (pKVar21 = (KeyValues *)KeyValues::FindKey(*(KeyValues **)this,"weapon",false),
                pKVar21 != (KeyValues *)0x0) {
            KeyValues::RemoveSubKey(*(KeyValues **)this,pKVar21);
            KeyValues::deleteThis();
          }
        }
        else {
          KeyValues::SetInt(*(KeyValues **)this,"teamNumber",1);
          KeyValues::SetInt(*(KeyValues **)this,"state",6);
          KeyValues::SetInt(*(KeyValues **)this,"health",0);
          KeyValues::SetFloat(*(KeyValues **)this,"healthBuffer",0.0);
          KeyValues::SetInt(*(KeyValues **)this,"fumes",0);
          KeyValues::SetInt(*(KeyValues **)this,"incapacitated",0);
          while (pKVar21 = (KeyValues *)KeyValues::FindKey(*(KeyValues **)this,"weapon",false),
                pKVar21 != (KeyValues *)0x0) {
            KeyValues::RemoveSubKey(*(KeyValues **)this,pKVar21);
            KeyValues::deleteThis();
          }
        }
      }
    }
  }
  iVar10 = KeyValues::GetInt(*(KeyValues **)this,"teamNumber",0);
  if (iVar10 == 3) {
    KeyValues::SetInt(*(KeyValues **)this,"teamNumber",3);
    KeyValues::SetInt(*(KeyValues **)this,"state",6);
    KeyValues::SetInt(*(KeyValues **)this,"health",0);
    KeyValues::SetFloat(*(KeyValues **)this,"healthBuffer",0.0);
    KeyValues::SetInt(*(KeyValues **)this,"fumes",0);
    KeyValues::SetInt(*(KeyValues **)this,"incapacitated",0);
    while (pKVar21 = (KeyValues *)KeyValues::FindKey(*(KeyValues **)this,"weapon",false),
          pKVar21 != (KeyValues *)0x0) {
      KeyValues::RemoveSubKey(*(KeyValues **)this,pKVar21);
      KeyValues::deleteThis();
    }
  }
  pcVar11 = (char *)KeyValues::GetString(*(KeyValues **)this,"ModelName","");
  iVar10 = GetCharacterFromModel(pcVar11);
  iVar12 = CTerrorGameRules::GetSurvivorSet();
  iVar13 = KeyValues::GetInt(*(KeyValues **)this,"SurvivorSet",iVar12);
  if (iVar12 != iVar13) {
    switch(iVar10) {
    case 0:
      iVar10 = 0x10;
      break;
    case 1:
      iVar10 = 0x14;
      break;
    case 2:
      iVar10 = 0x1c;
      break;
    case 3:
      iVar10 = 0x18;
      break;
    case 4:
      iVar10 = 0;
      break;
    case 5:
      iVar10 = 4;
      break;
    case 6:
      iVar10 = 0xc;
      break;
    case 7:
      iVar10 = 8;
      break;
    default:
      iVar10 = iVar10 << 2;
    }
    KeyValues::SetString(*(KeyValues **)this,"ModelName",*(char **)((int)SurvivorModels + iVar10));
  }
  pcVar1 = *(code **)(*(int *)param_1 + 0x194);
  KeyValues::GetInt(*(KeyValues **)this,"teamNumber",0);
  (*pcVar1)();
  iVar10 = KeyValues::GetInt(*(KeyValues **)this,"playerClass",0);
  if (iVar10 != *(int *)(param_1 + 0x290c)) {
    if (param_1[0x6c] == (CTerrorPlayer)0x0) {
      pCVar2 = *(CBaseEdict **)(param_1 + 0x30);
      if (pCVar2 != (CBaseEdict *)0x0) {
        *(uint *)pCVar2 = *(uint *)pCVar2 | 0x101;
        iVar12 = CBaseEdict::GetChangeAccessor(pCVar2);
        *(undefined2 *)(iVar12 + 2) = 0;
      }
    }
    else {
      param_1[0x70] = (CTerrorPlayer)((byte)param_1[0x70] | 1);
    }
    *(int *)(param_1 + 0x290c) = iVar10;
  }
  iVar10 = KeyValues::GetInt(*(KeyValues **)this,"wantsToPlay",0);
  CTerrorPlayer::SetWantsToPlay(param_1,iVar10 != 0);
  iVar10 = KeyValues::GetInt(*(KeyValues **)this,"wantsToPlay",0);
  if (iVar10 != 0) {
    KeyValues::GetString(*(KeyValues **)this,"idealName","");
    UTIL_LogPrintf("%s is waiting to play\n");
  }
  iVar10 = KeyValues::GetInt(*(KeyValues **)this,"teamNumber",0);
  if ((iVar10 == 2) && (iVar10 = KeyValues::GetInt(*(KeyValues **)this,"state",0), iVar10 != 0)) {
    cVar7 = CDirector::IsInTransition(TheDirector);
    if (cVar7 == '\0') {
      KeyValues::GetString(*(KeyValues **)this,"idealName","");
      UTIL_LogPrintf("Respawning dead survivor %s\n");
      pCVar20 = (Checkpoint *)TerrorNavMesh::GetInitialCheckpoint(TheNavMesh);
      CTerrorPlayer::CheckpointRespawn(param_1,pCVar20);
    }
    else {
      CCSPlayer::State_Transition();
      if (param_1[0x104] != (CTerrorPlayer)0x2) {
        (**(code **)(*(int *)param_1 + 0x21c))();
        param_1[0x104] = (CTerrorPlayer)0x2;
      }
    }
  }
  else {
    KeyValues::GetString(*(KeyValues **)this,"idealName","");
    UTIL_LogPrintf("Respawning %s\n");
    iVar10 = CBaseEntity::GetTeamNumber((CBaseEntity *)param_1);
    if ((iVar10 == 3) ||
       ((iVar10 = CBaseEntity::GetTeamNumber((CBaseEntity *)param_1), iVar10 != 2 ||
        (iVar10 = KeyValues::GetInt(*(KeyValues **)this,"state",0), iVar10 != 0)))) {
      CCSPlayer::State_Transition();
      if (param_1[0x104] != (CTerrorPlayer)0x2) {
        (**(code **)(*(int *)param_1 + 0x21c))();
        param_1[0x104] = (CTerrorPlayer)0x2;
      }
    }
    else {
      CCSPlayer::State_Transition();
      (**(code **)(*(int *)param_1 + 100))();
    }
    iVar10 = KeyValues::GetInt(*(KeyValues **)this,"after_finale",0);
    if (iVar10 != 0) {
      KeyValues::SetInt(*(KeyValues **)this,"health",100);
      KeyValues::SetFloat(*(KeyValues **)this,"healthBuffer",0.0);
    }
    cVar7 = (**(code **)(*(int *)param_1 + 0x558))();
    if (cVar7 == '\0') {
      iVar10 = KeyValues::GetInt(*(KeyValues **)this,"health",0);
      if (iVar10 != *(int *)(param_1 + 0x100)) {
        (**(code **)(*(int *)param_1 + 0x214))();
        *(int *)(param_1 + 0x100) = iVar10;
      }
      lVar25 = (longdouble)KeyValues::GetFloat(*(KeyValues **)this,"healthBuffer",0.0);
      CTerrorPlayer::SetHealthBuffer(param_1,(float)lVar25);
      iVar10 = KeyValues::GetInt(*(KeyValues **)this,"incapacitated",0);
      if ((CTerrorPlayer)(iVar10 != 0) != param_1[0x2d94]) {
        if (param_1[0x6c] == (CTerrorPlayer)0x0) {
          pCVar2 = *(CBaseEdict **)(param_1 + 0x30);
          if (pCVar2 != (CBaseEdict *)0x0) {
            *(uint *)pCVar2 = *(uint *)pCVar2 | 0x101;
            iVar12 = CBaseEdict::GetChangeAccessor(pCVar2);
            *(undefined2 *)(iVar12 + 2) = 0;
          }
        }
        else {
          param_1[0x70] = (CTerrorPlayer)((byte)param_1[0x70] | 1);
        }
        param_1[0x2d94] = (CTerrorPlayer)(iVar10 != 0);
      }
      iVar10 = KeyValues::GetInt(*(KeyValues **)this,"fumes",0);
      if ((CTerrorPlayer)(iVar10 != 0) != param_1[0x32fc]) {
        if (param_1[0x6c] == (CTerrorPlayer)0x0) {
          pCVar2 = *(CBaseEdict **)(param_1 + 0x30);
          if (pCVar2 != (CBaseEdict *)0x0) {
            *(uint *)pCVar2 = *(uint *)pCVar2 | 0x101;
            iVar12 = CBaseEdict::GetChangeAccessor(pCVar2);
            *(undefined2 *)(iVar12 + 2) = 0;
          }
        }
        else {
          param_1[0x70] = (CTerrorPlayer)((byte)param_1[0x70] | 1);
        }
        param_1[0x32fc] = (CTerrorPlayer)(iVar10 != 0);
      }
    }
  }
  iVar10 = CBaseEntity::GetTeamNumber((CBaseEntity *)param_1);
  cVar7 = IsASurvivorTeam(iVar10);
  if (((cVar7 != '\0') &&
      (pcVar11 = (char *)KeyValues::GetString(*(KeyValues **)this,"modelName",""), *pcVar11 != '\0')
      ) && (0 < DAT_01017434)) {
    pcVar17 = (char *)*SurvivorModels;
    if (pcVar11 != pcVar17) {
      iVar10 = 0;
      do {
        iVar12 = _V_stricmp(pcVar17,pcVar11);
        if (iVar12 == 0) break;
        iVar10 = iVar10 + 1;
        if (DAT_01017434 <= iVar10) goto LAB_008fb345;
        pcVar17 = (char *)SurvivorModels[iVar10];
      } while (pcVar11 != pcVar17);
    }
    (**(code **)(*(int *)param_1 + 0x70))();
  }
LAB_008fb345:
  iVar10 = KeyValues::GetInt(*(KeyValues **)this,"playerClass",0);
  if (iVar10 != *(int *)(param_1 + 0x290c)) {
    if (param_1[0x6c] == (CTerrorPlayer)0x0) {
      pCVar2 = *(CBaseEdict **)(param_1 + 0x30);
      if (pCVar2 != (CBaseEdict *)0x0) {
        *(uint *)pCVar2 = *(uint *)pCVar2 | 0x101;
        iVar12 = CBaseEdict::GetChangeAccessor(pCVar2);
        *(undefined2 *)(iVar12 + 2) = 0;
      }
    }
    else {
      param_1[0x70] = (CTerrorPlayer)((byte)param_1[0x70] | 1);
    }
    *(int *)(param_1 + 0x290c) = iVar10;
  }
  (**(code **)(*(int *)param_1 + 0x8a8))();
  iVar10 = CBaseEntity::GetTeamNumber((CBaseEntity *)param_1);
  piVar8 = (int *)&SurvivorModels;
  if (iVar10 == 3) {
    iVar12 = (**(code **)(*(int *)param_1 + 0x544))();
    iVar10 = 0;
    if (iVar12 != 9) {
      iVar10 = iVar12;
    }
    piVar8 = &InfectedModels + iVar10 * 5;
    if ((&DAT_0101736c)[iVar10 * 5] == 0) {
      piVar8 = &DAT_0101739c;
    }
  }
  pcVar11 = (char *)KeyValues::GetString(*(KeyValues **)this,"modelName","");
  if ((*pcVar11 != '\0') && (0 < piVar8[3])) {
    pcVar17 = *(char **)*piVar8;
    if (pcVar11 != pcVar17) {
      iVar10 = 0;
      do {
        iVar12 = _V_stricmp(pcVar17,pcVar11);
        if (iVar12 == 0) break;
        iVar10 = iVar10 + 1;
        if (piVar8[3] <= iVar10) goto LAB_008fb3e0;
        pcVar17 = *(char **)(*piVar8 + iVar10 * 4);
      } while (pcVar11 != pcVar17);
    }
    (**(code **)(*(int *)param_1 + 0x70))();
  }
LAB_008fb3e0:
  pcVar1 = *(code **)(*(int *)param_1 + 0x920);
  KeyValues::GetInt(*(KeyValues **)this,"character",0);
  (*pcVar1)();
  iVar10 = CBaseEntity::GetTeamNumber((CBaseEntity *)param_1);
  cVar7 = IsASurvivorTeam(iVar10);
  if (cVar7 != '\0') {
    KeyValues::GetString(*(KeyValues **)this,"modelName","");
    (**(code **)(*(int *)param_1 + 0x20))();
    pfVar24 = (float *)&stack0xffffff50;
    (**(code **)(*(int *)param_1 + 0xb8))();
    UTIL_LogPrintf("(SKIN) Survivor %s changed model to %s (wanted %s) via RestoreModelData\n");
  }
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"skin";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.3197133e-38;
  iVar10 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  if (iVar10 != *(int *)(param_1 + 0x458)) {
    if (param_1[0x6c] == (CTerrorPlayer)0x0) {
      puVar3 = *(uint **)(param_1 + 0x30);
      if (puVar3 != (uint *)0x0) {
        *puVar3 = *puVar3 | 0x101;
        *pfVar24 = (float)puVar3;
        pfVar24[-1] = 1.3197191e-38;
        iVar12 = CBaseEdict::GetChangeAccessor((CBaseEdict *)*pfVar24);
        *(undefined2 *)(iVar12 + 2) = 0;
      }
    }
    else {
      param_1[0x70] = (CTerrorPlayer)((byte)param_1[0x70] | 1);
    }
    *(int *)(param_1 + 0x458) = iVar10;
  }
  *pfVar24 = (float)TheDirector;
  pfVar24[-1] = 1.3197226e-38;
  cVar7 = CDirector::IsTransitionScenarioRestart();
  if (cVar7 == '\0') {
    iVar10 = *(int *)param_1;
    *pfVar24 = (float)param_1;
    pcVar1 = *(code **)(iVar10 + 300);
    pfVar24[-1] = 1.3202488e-38;
    cVar7 = (*pcVar1)();
    if (cVar7 != '\0') {
      pfVar24[2] = 0.0;
      pfVar24[1] = (float)"ducked";
      *pfVar24 = (float)*(undefined4 *)this;
      pfVar24[-1] = 1.3202535e-38;
      iVar10 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
      if ((CTerrorPlayer)(iVar10 != 0) != param_1[0x1a90]) {
        iVar12 = *(int *)(param_1 + 0x1a40);
        pfVar24[1] = (float)(param_1 + 0x1a90);
        *pfVar24 = (float)(param_1 + 0x1a40);
        pcVar1 = *(code **)(iVar12 + 4);
        pfVar24[-1] = 1.3202593e-38;
        (*pcVar1)();
        param_1[0x1a90] = (CTerrorPlayer)(iVar10 != 0);
      }
      pfVar24[2] = 0.0;
      pfVar24[1] = (float)"ducking";
      *pfVar24 = (float)*(undefined4 *)this;
      pfVar24[-1] = 1.3202638e-38;
      iVar10 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
      if ((CTerrorPlayer)(iVar10 != 0) != param_1[0x1a91]) {
        iVar12 = *(int *)(param_1 + 0x1a40);
        *pfVar24 = (float)(param_1 + 0x1a40);
        pfVar24[1] = (float)(param_1 + 0x1a91);
        pcVar1 = *(code **)(iVar12 + 4);
        pfVar24[-1] = 1.3202695e-38;
        (*pcVar1)();
        param_1[0x1a91] = (CTerrorPlayer)(iVar10 != 0);
      }
      pfVar24[2] = 0.0;
      pfVar24[1] = (float)"duckedFlag";
      *pfVar24 = (float)*(undefined4 *)this;
      pfVar24[-1] = 1.320274e-38;
      iVar10 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
      if (iVar10 == 0) {
        iVar10 = *g_pGameRules;
        *pfVar24 = (float)g_pGameRules;
        pcVar1 = *(code **)(iVar10 + 0x7c);
        pfVar24[-1] = 1.3205639e-38;
        iVar12 = (*pcVar1)();
        iVar10 = *g_pGameRules;
        *pfVar24 = (float)g_pGameRules;
        pcVar1 = *(code **)(iVar10 + 0x7c);
        pfVar24[-1] = 1.3205664e-38;
        iVar10 = (*pcVar1)();
        pfVar24[2] = (float)(iVar12 + 0x18);
        *pfVar24 = (float)param_1;
        pfVar24[1] = (float)(iVar10 + 0xc);
        pfVar24[-1] = 1.3205691e-38;
        CBaseEntity::SetCollisionBounds
                  ((CBaseEntity *)*pfVar24,(Vector *)pfVar24[1],(Vector *)pfVar24[2]);
      }
      else {
        pfVar24[1] = 2.8026e-45;
        *pfVar24 = (float)param_1;
        pfVar24[-1] = 1.3202773e-38;
        CBaseEntity::AddFlag((CBaseEntity *)*pfVar24,(int)pfVar24[1]);
        iVar10 = *g_pGameRules;
        *pfVar24 = (float)g_pGameRules;
        pcVar1 = *(code **)(iVar10 + 0x7c);
        pfVar24[-1] = 1.3202792e-38;
        iVar12 = (*pcVar1)();
        iVar10 = *g_pGameRules;
        *pfVar24 = (float)g_pGameRules;
        pcVar1 = *(code **)(iVar10 + 0x7c);
        pfVar24[-1] = 1.3202817e-38;
        iVar10 = (*pcVar1)();
        pfVar24[2] = (float)(iVar12 + 0x30);
        *pfVar24 = (float)param_1;
        pfVar24[1] = (float)(iVar10 + 0x24);
        pfVar24[-1] = 1.3202844e-38;
        CBaseEntity::SetCollisionBounds
                  ((CBaseEntity *)*pfVar24,(Vector *)pfVar24[1],(Vector *)pfVar24[2]);
      }
      iVar10 = *(int *)param_1;
      *pfVar24 = (float)param_1;
      pcVar1 = *(code **)(iVar10 + 0x558);
      pfVar24[-1] = 1.3202859e-38;
      cVar7 = (*pcVar1)();
      if (cVar7 == '\0') {
        *pfVar24 = (float)&local_60;
        pfVar24[-1] = 1.3202898e-38;
        GetTransitionedLandmarkOffset();
        pfVar24[2] = (float)&DAT_00d539c2;
        pfVar24[1] = (float)"pos";
        *pfVar24 = (float)*(undefined4 *)this;
        pfVar24[-1] = 1.3202939e-38;
        uVar9 = KeyValues::GetString((KeyValues *)*pfVar24,(char *)pfVar24[1],(char *)pfVar24[2]);
        pfVar24[4] = (float)&local_4c;
        pfVar24[3] = (float)&local_50;
        pfVar24[1] = (float)"%f %f %f";
        local_54 = vec3_origin;
        *pfVar24 = (float)uVar9;
        local_50 = DAT_01053d4c;
        local_4c = DAT_01053d50;
        pfVar24[2] = (float)&local_54;
        pfVar24[-1] = 1.3203029e-38;
        sscanf((char *)*pfVar24,(char *)pfVar24[1]);
        pfVar24[2] = (float)&DAT_00d539c2;
        pfVar24[1] = (float)"angles";
        *pfVar24 = (float)*(undefined4 *)this;
        pfVar24[-1] = 1.3203065e-38;
        uVar9 = KeyValues::GetString((KeyValues *)*pfVar24,(char *)pfVar24[1],(char *)pfVar24[2]);
        pfVar24[2] = (float)&local_48;
        pfVar24[1] = (float)"%f %f %f";
        *pfVar24 = (float)uVar9;
        local_48 = vec3_angle;
        local_44 = DAT_01053d40;
        local_40 = DAT_01053d44;
        pfVar24[4] = (float)&local_40;
        pfVar24[3] = (float)&local_44;
        pfVar24[-1] = 1.320315e-38;
        sscanf((char *)*pfVar24,(char *)pfVar24[1]);
        pfVar24[2] = 0.0;
        pfVar24[1] = (float)"positionFixedUp";
        *pfVar24 = (float)*(undefined4 *)this;
        pfVar24[-1] = 1.3203187e-38;
        iVar10 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
        if (iVar10 == 0) {
          pfVar24[1] = (float)&local_48;
          *pfVar24 = (float)&local_54;
          local_54 = (undefined **)((float)local_54 + local_60);
          local_50 = local_50 + local_5c;
          local_4c = local_4c + local_58;
          pfVar24[-1] = 1.3207871e-38;
          HackRotateAroundLandmark((Vector *)*pfVar24,(QAngle *)pfVar24[1]);
          *(double *)(pfVar24 + 5) = (double)local_4c;
          *(double *)(pfVar24 + 3) = (double)local_50;
          *(double *)(pfVar24 + 1) = (double)(float)local_54;
          *pfVar24 = (float)"%f %f %f";
          pfVar24[-1] = 1.3207947e-38;
          fVar14 = (float)UTIL_VarArgs((char *)*pfVar24);
          pfVar24[1] = (float)"pos";
          pfVar24[2] = fVar14;
          *pfVar24 = (float)*(undefined4 *)this;
          pfVar24[-1] = 1.3207978e-38;
          KeyValues::SetString((KeyValues *)*pfVar24,(char *)pfVar24[1],(char *)pfVar24[2]);
          pfVar24[2] = 1.4013e-45;
          pfVar24[1] = (float)"positionFixedUp";
          *pfVar24 = (float)*(undefined4 *)this;
          pfVar24[-1] = 1.3208014e-38;
          KeyValues::SetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
        }
        pfVar24[2] = 0.0;
        pfVar24[1] = (float)"after_finale";
        *pfVar24 = (float)*(undefined4 *)this;
        pfVar24[-1] = 1.3203235e-38;
        iVar10 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
        ppuVar16 = local_54;
        fVar14 = local_50;
        fVar15 = local_4c;
        if (iVar10 != 0) {
          *pfVar24 = (float)param_1;
          pfVar24[-1] = 1.3207705e-38;
          iVar10 = CBaseEntity::GetTeamNumber((CBaseEntity *)*pfVar24);
          ppuVar16 = vec3_origin;
          fVar14 = DAT_01053d4c;
          fVar15 = DAT_01053d50;
          if (iVar10 == 2) {
            pfVar24[3] = 0.0;
            pfVar24[2] = 0.0;
            local_3c = vec3_origin;
            local_38 = DAT_01053d4c;
            local_34[0] = DAT_01053d50;
            pfVar24[1] = (float)&local_3c;
            *pfVar24 = (float)*(undefined4 *)(param_1 + 0x2ba0);
            pfVar24[-1] = 1.3209036e-38;
            GetPlayerSpawnPosition();
            ppuVar16 = local_3c;
            fVar14 = local_38;
            fVar15 = local_34[0];
          }
        }
        local_4c = fVar15;
        local_50 = fVar14;
        local_54 = ppuVar16;
        fVar15 = local_4c;
        fVar14 = local_50;
        ppuVar16 = local_54;
        local_74 = &local_3c;
        pfVar24[2] = (float)&DAT_00d539c2;
        pfVar24[1] = (float)"idealName";
        *pfVar24 = (float)*(undefined4 *)this;
        pfVar24[-1] = 1.3203333e-38;
        fVar18 = (float)KeyValues::GetString
                                  ((KeyValues *)*pfVar24,(char *)pfVar24[1],(char *)pfVar24[2]);
        *pfVar24 = (float)"%s wants to respawn at %f %f %f\n";
        pfVar24[1] = fVar18;
        *(double *)(pfVar24 + 6) = (double)fVar15;
        *(double *)(pfVar24 + 4) = (double)fVar14;
        *(double *)(pfVar24 + 2) = (double)(float)ppuVar16;
        pfVar24[-1] = 1.3203426e-38;
        UTIL_LogPrintf((char *)*pfVar24);
        pfVar24[2] = 0.0;
        pfVar24[1] = (float)"teamNumber";
        *pfVar24 = (float)*(undefined4 *)this;
        pfVar24[-1] = 1.3203463e-38;
        fVar14 = (float)KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
        pfVar24[2] = 0.0;
        pfVar24[1] = (float)"duckedFlag";
        *pfVar24 = (float)*(undefined4 *)this;
        pfVar24[-1] = 1.3203504e-38;
        iVar10 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
        pfVar24[5] = (float)&local_48;
        pfVar24[3] = (float)(uint)(iVar10 != 0);
        pfVar24[4] = fVar14;
        *pfVar24 = (float)local_54;
        pfVar24[1] = local_50;
        pfVar24[2] = local_4c;
        pfVar24[-1] = 1.3203578e-38;
        GetSafeSpawnPos(local_74,param_1);
        fVar15 = local_34[0];
        fVar14 = local_38;
        ppuVar16 = local_3c;
        pfVar24[2] = (float)&DAT_00d539c2;
        pfVar24[1] = (float)"idealName";
        local_54 = local_3c;
        local_50 = local_38;
        *pfVar24 = (float)*(undefined4 *)this;
        local_4c = local_34[0];
        pfVar24[-1] = 1.3203677e-38;
        fVar18 = (float)KeyValues::GetString
                                  ((KeyValues *)*pfVar24,(char *)pfVar24[1],(char *)pfVar24[2]);
        *pfVar24 = (float)"%s gets respawn pos %f %f %f\n";
        pfVar24[1] = fVar18;
        *(double *)(pfVar24 + 6) = (double)fVar15;
        *(double *)(pfVar24 + 4) = (double)fVar14;
        *(double *)(pfVar24 + 2) = (double)(float)ppuVar16;
        pfVar24[-1] = 1.3203771e-38;
        UTIL_LogPrintf((char *)*pfVar24);
        pfVar24[2] = 0.0;
        pfVar24[1] = (float)"teamNumber";
        *pfVar24 = (float)*(undefined4 *)this;
        pfVar24[-1] = 1.3203808e-38;
        iVar10 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
        *pfVar24 = (float)iVar10;
        pfVar24[-1] = 1.3203819e-38;
        cVar7 = IsASurvivorTeam(iVar10);
        if (cVar7 != '\0') {
          *pfVar24 = (float)"%f %f %f";
          *(double *)(pfVar24 + 5) = (double)DAT_01053d50;
          *(double *)(pfVar24 + 3) = (double)DAT_01053d4c;
          *(double *)(pfVar24 + 1) = (double)(float)vec3_origin;
          pfVar24[-1] = 1.3208121e-38;
          fVar14 = (float)UTIL_VarArgs((char *)*pfVar24);
          pfVar24[1] = (float)"vel";
          pfVar24[2] = fVar14;
          *pfVar24 = (float)*(undefined4 *)this;
          pfVar24[-1] = 1.3208152e-38;
          KeyValues::SetString((KeyValues *)*pfVar24,(char *)pfVar24[1],(char *)pfVar24[2]);
        }
        pfVar24[2] = (float)&DAT_00d539c2;
        pfVar24[1] = (float)"vel";
        *pfVar24 = (float)*(undefined4 *)this;
        pfVar24[-1] = 1.3203867e-38;
        uVar9 = KeyValues::GetString((KeyValues *)*pfVar24,(char *)pfVar24[1],(char *)pfVar24[2]);
        pfVar24[4] = (float)local_34;
        pfVar24[3] = (float)&local_38;
        pfVar24[1] = (float)"%f %f %f";
        local_3c = vec3_origin;
        *pfVar24 = (float)uVar9;
        local_38 = DAT_01053d4c;
        local_34[0] = DAT_01053d50;
        pfVar24[2] = (float)local_74;
        pfVar24[-1] = 1.3203956e-38;
        sscanf((char *)*pfVar24,(char *)pfVar24[1]);
        iVar10 = *(int *)param_1;
        pfVar24[2] = (float)&local_48;
        *pfVar24 = (float)param_1;
        pfVar24[3] = (float)local_74;
        pfVar24[1] = (float)&local_54;
        pcVar1 = *(code **)(iVar10 + 0x1dc);
        pfVar24[-1] = 1.3203997e-38;
        (*pcVar1)();
        pfVar24[1] = (float)&local_48;
        *pfVar24 = (float)param_1;
        pfVar24[-1] = 1.3204014e-38;
        CBaseEntity::SetAbsAngles((CBaseEntity *)*pfVar24,(QAngle *)pfVar24[1]);
      }
    }
  }
  local_74 = &local_3c;
  iVar10 = *(int *)param_1;
  *pfVar24 = (float)param_1;
  pcVar1 = *(code **)(iVar10 + 300);
  pfVar24[-1] = 1.3197261e-38;
  cVar7 = (*pcVar1)();
  if (cVar7 == '\0') {
    pfVar24[2] = (float)&DAT_00d539c2;
    pfVar24[1] = (float)"idealName";
    *pfVar24 = (float)*(undefined4 *)this;
    pfVar24[-1] = 1.320239e-38;
    fVar14 = (float)KeyValues::GetString
                              ((KeyValues *)*pfVar24,(char *)pfVar24[1],(char *)pfVar24[2]);
    *pfVar24 = (float)"Creating viewmodels for %s (transitioned dead)\n";
    pfVar24[1] = fVar14;
    pfVar24[-1] = 1.3202412e-38;
    DevMsg((char *)*pfVar24);
    iVar10 = *(int *)param_1;
    pfVar24[1] = 1.4013e-45;
    *pfVar24 = (float)param_1;
    pcVar1 = *(code **)(iVar10 + 0x564);
    pfVar24[-1] = 1.3202439e-38;
    (*pcVar1)();
    iVar10 = *(int *)param_1;
    pfVar24[1] = 0.0;
    *pfVar24 = (float)param_1;
    pcVar1 = *(code **)(iVar10 + 0x564);
    pfVar24[-1] = 1.3202465e-38;
    (*pcVar1)();
  }
  *pfVar24 = (float)param_1;
  pfVar24[-1] = 1.3197283e-38;
  CBasePlayer::ResetFragCount((CBasePlayer *)*pfVar24);
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"kills";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.319732e-38;
  fVar14 = (float)KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  *pfVar24 = (float)param_1;
  pfVar24[1] = fVar14;
  pfVar24[-1] = 1.3197336e-38;
  CBasePlayer::IncrementFragCount((CBasePlayer *)*pfVar24,(int)pfVar24[1]);
  *pfVar24 = (float)param_1;
  pfVar24[-1] = 1.3197348e-38;
  CBasePlayer::ResetDeathCount((CBasePlayer *)*pfVar24);
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"deaths";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.3197384e-38;
  fVar14 = (float)KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  *pfVar24 = (float)param_1;
  pfVar24[1] = fVar14;
  pfVar24[-1] = 1.3197401e-38;
  CBasePlayer::IncrementDeathCount((CBasePlayer *)*pfVar24,(int)pfVar24[1]);
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"survivorKills";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.3197437e-38;
  uVar9 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  *(undefined4 *)(param_1 + 0x307c) = uVar9;
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"currentReviveCount";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.3197482e-38;
  iVar10 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  if (iVar10 != *(int *)(param_1 + 0x2e54)) {
    if (param_1[0x6c] == (CTerrorPlayer)0x0) {
      puVar3 = *(uint **)(param_1 + 0x30);
      if (puVar3 != (uint *)0x0) {
        *puVar3 = *puVar3 | 0x101;
        *pfVar24 = (float)puVar3;
        pfVar24[-1] = 1.319754e-38;
        iVar12 = CBaseEdict::GetChangeAccessor((CBaseEdict *)*pfVar24);
        *(undefined2 *)(iVar12 + 2) = 0;
      }
    }
    else {
      param_1[0x70] = (CTerrorPlayer)((byte)param_1[0x70] | 1);
    }
    *(int *)(param_1 + 0x2e54) = iVar10;
  }
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"missionReviveCount";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.3197593e-38;
  uVar9 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  *(undefined4 *)(param_1 + 0x2e5c) = uVar9;
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"thirdStrike";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.3197638e-38;
  iVar10 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  if ((CTerrorPlayer)(iVar10 != 0) != param_1[0x2e58]) {
    if (param_1[0x6c] == (CTerrorPlayer)0x0) {
      puVar3 = *(uint **)(param_1 + 0x30);
      if (puVar3 != (uint *)0x0) {
        *puVar3 = *puVar3 | 0x101;
        *pfVar24 = (float)puVar3;
        pfVar24[-1] = 1.31977e-38;
        iVar12 = CBaseEdict::GetChangeAccessor((CBaseEdict *)*pfVar24);
        *(undefined2 *)(iVar12 + 2) = 0;
      }
    }
    else {
      param_1[0x70] = (CTerrorPlayer)((byte)param_1[0x70] | 1);
    }
    param_1[0x2e58] = (CTerrorPlayer)(iVar10 != 0);
  }
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"restoreState";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.3197753e-38;
  iVar10 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  if (iVar10 == 1) {
    pfVar24[2] = 2.8026e-45;
    pfVar24[1] = (float)"restoreState";
    *pfVar24 = (float)*(undefined4 *)this;
    pfVar24[-1] = 1.3205978e-38;
    KeyValues::SetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  }
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"lastPrimaryWeaponId";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.3197802e-38;
  uVar9 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  *(undefined4 *)(param_1 + 0x3f90) = uVar9;
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"lastPrimaryWeaponAmmo";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.3197847e-38;
  uVar9 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  *(undefined4 *)(param_1 + 0x3f94) = uVar9;
  pfVar24[2] = 1.4013e-45;
  pfVar24[1] = (float)"lastSecondaryWeaponId";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.3197891e-38;
  uVar9 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  *(undefined4 *)(param_1 + 0x3f98) = uVar9;
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"lastHadElites";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.3197936e-38;
  iVar10 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  pCVar6 = TheDirector;
  param_1[0x3f9c] = (CTerrorPlayer)(iVar10 != 0);
  *pfVar24 = (float)pCVar6;
  pfVar24[-1] = 1.3197967e-38;
  cVar7 = CDirector::IsTransitionScenarioRestart();
  if (cVar7 == '\0') {
    iVar10 = *(int *)param_1;
    *pfVar24 = (float)param_1;
    pcVar1 = *(code **)(iVar10 + 300);
    pfVar24[-1] = 1.3204228e-38;
    cVar7 = (*pcVar1)();
    if (cVar7 != '\0') {
      iVar10 = *(int *)param_1;
      *pfVar24 = (float)param_1;
      pcVar1 = *(code **)(iVar10 + 0x558);
      pfVar24[-1] = 1.3204255e-38;
      cVar7 = (*pcVar1)();
      if (cVar7 == '\0') {
        *pfVar24 = (float)param_1;
        pfVar24[-1] = 1.3204277e-38;
        CBaseCombatCharacter::RemoveAllWeapons((CBaseCombatCharacter *)*pfVar24);
        *pfVar24 = (float)*(undefined4 *)this;
        pfVar24[-1] = 1.3204291e-38;
        iVar10 = KeyValues::GetFirstSubKey((KeyValues *)*pfVar24);
        while (iVar10 != 0) {
          *pfVar24 = (float)iVar10;
          pfVar24[-1] = 1.320436e-38;
          uVar9 = KeyValues::GetName((KeyValues *)*pfVar24);
          pfVar24[1] = (float)"weapon";
          *pfVar24 = (float)uVar9;
          pfVar24[-1] = 1.3204382e-38;
          iVar12 = _V_stricmp((char *)*pfVar24,(char *)pfVar24[1]);
          if (iVar12 == 0) {
            pfVar24[2] = 0.0;
            pfVar24[1] = (float)"weaponID";
            *pfVar24 = (float)iVar10;
            pfVar24[-1] = 1.3204421e-38;
            fVar14 = (float)KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],
                                              (int)pfVar24[2]);
            if (fVar14 != 0.0) {
              pfVar24[2] = 0.0;
              pfVar24[1] = (float)"meleeWeapon";
              *pfVar24 = (float)iVar10;
              pfVar24[-1] = 1.3204463e-38;
              iVar12 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
              if (iVar12 == 0) {
                *pfVar24 = fVar14;
                pfVar24[-1] = 1.3207636e-38;
                fVar15 = (float)WeaponIDToAlias((int)*pfVar24);
                *pfVar24 = (float)"weapon_%s";
                pfVar24[1] = fVar15;
                pfVar24[-1] = 1.3207658e-38;
                fVar15 = (float)UTIL_VarArgs((char *)*pfVar24);
              }
              else {
                pfVar24[2] = (float)&DAT_00d539c2;
                pfVar24[1] = (float)"meleeWeaponName";
                *pfVar24 = (float)iVar10;
                pfVar24[-1] = 1.3204508e-38;
                fVar15 = (float)KeyValues::GetString
                                          ((KeyValues *)*pfVar24,(char *)pfVar24[1],
                                           (char *)pfVar24[2]);
              }
              pcVar1 = *(code **)(*(int *)param_1 + 0x6c0);
              pfVar24[2] = 0.0;
              pfVar24[1] = (float)"reloaded";
              *pfVar24 = (float)iVar10;
              pfVar24[-1] = 1.3204564e-38;
              fVar18 = (float)KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],
                                                (int)pfVar24[2]);
              pfVar24[4] = 0.0;
              pfVar24[2] = fVar18;
              pfVar24[3] = 1.4013e-45;
              pfVar24[1] = fVar15;
              *pfVar24 = (float)param_1;
              pfVar24[-1] = 1.3204613e-38;
              iVar12 = (*pcVar1)();
              if (iVar12 != 0) {
                pfVar24[3] = 0.0;
                pfVar24[2] = (float)&CWeaponCSBase::typeinfo;
                pfVar24[1] = (float)&CBaseEntity::typeinfo;
                *pfVar24 = (float)iVar12;
                pfVar24[-1] = 1.320467e-38;
                piVar8 = (int *)__dynamic_cast();
                if (piVar8 != (int *)0x0) {
                  pfVar24[2] = 0.0;
                  pfVar24[1] = (float)"weaponskin";
                  *pfVar24 = (float)iVar10;
                  pfVar24[-1] = 1.3204717e-38;
                  iVar12 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],
                                             (int)pfVar24[2]);
                  if (iVar12 != piVar8[0x116]) {
                    if ((char)piVar8[0x1b] == '\0') {
                      puVar3 = (uint *)piVar8[0xc];
                      if (puVar3 != (uint *)0x0) {
                        *puVar3 = *puVar3 | 0x101;
                        *pfVar24 = (float)puVar3;
                        pfVar24[-1] = 1.3204775e-38;
                        iVar13 = CBaseEdict::GetChangeAccessor((CBaseEdict *)*pfVar24);
                        *(undefined2 *)(iVar13 + 2) = 0;
                      }
                    }
                    else {
                      *(byte *)(piVar8 + 0x1c) = *(byte *)(piVar8 + 0x1c) | 1;
                    }
                    piVar8[0x116] = iVar12;
                  }
                  iVar12 = *piVar8;
                  *pfVar24 = (float)piVar8;
                  pcVar1 = *(code **)(iVar12 + 0x500);
                  pfVar24[-1] = 1.3204807e-38;
                  piVar19 = (int *)(*pcVar1)();
                  if (piVar19 != (int *)0x0) {
                    pfVar24[2] = 0.0;
                    pfVar24[1] = (float)"dual";
                    *pfVar24 = (float)iVar10;
                    pfVar24[-1] = 1.3204854e-38;
                    iVar12 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],
                                               (int)pfVar24[2]);
                    if (iVar12 != 0) {
                      iVar12 = *piVar19;
                      *pfVar24 = (float)piVar19;
                      pcVar1 = *(code **)(iVar12 + 0x71c);
                      pfVar24[-1] = 1.32082e-38;
                      (*pcVar1)();
                    }
                    pfVar24[2] = 0.0;
                    pfVar24[1] = (float)"reloaded";
                    *pfVar24 = (float)iVar10;
                    pfVar24[-1] = 1.3204899e-38;
                    iVar12 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],
                                               (int)pfVar24[2]);
                    if ((iVar12 != 0) && (*(char *)((int)piVar19 + 0x17e2) != '\0')) {
                      if ((char)piVar19[0x1b] == '\0') {
                        puVar3 = (uint *)piVar19[0xc];
                        if (puVar3 != (uint *)0x0) {
                          *puVar3 = *puVar3 | 0x101;
                          *pfVar24 = (float)puVar3;
                          pfVar24[-1] = 1.3208575e-38;
                          iVar12 = CBaseEdict::GetChangeAccessor((CBaseEdict *)*pfVar24);
                          *(undefined2 *)(iVar12 + 2) = 0;
                        }
                      }
                      else {
                        *(byte *)(piVar19 + 0x1c) = *(byte *)(piVar19 + 0x1c) | 1;
                      }
                      *(undefined1 *)((int)piVar19 + 0x17e2) = 0;
                    }
                    fVar14 = 0.0;
                    do {
                      *pfVar24 = fVar14;
                      pfVar24[-1] = 1.3204944e-38;
                      fVar15 = (float)UpgradeToString();
                      *pfVar24 = (float)"UPGRADE_%s";
                      pfVar24[1] = fVar15;
                      pfVar24[-1] = 1.3204967e-38;
                      fVar15 = (float)UTIL_VarArgs((char *)*pfVar24);
                      pfVar24[2] = 0.0;
                      pfVar24[1] = fVar15;
                      *pfVar24 = (float)iVar10;
                      pfVar24[-1] = 1.3204995e-38;
                      iVar12 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],
                                                 (int)pfVar24[2]);
                      if (iVar12 != 0) {
                        iVar12 = *piVar19;
                        pfVar24[1] = fVar14;
                        *pfVar24 = (float)piVar19;
                        pcVar1 = *(code **)(iVar12 + 0x6a8);
                        pfVar24[-1] = 1.3207618e-38;
                        (*pcVar1)();
                      }
                      fVar14 = (float)((int)fVar14 + 1);
                    } while (fVar14 != 4.2039e-45);
                    pfVar24[2] = 0.0;
                    pfVar24[1] = (float)"upgradedAmmoCount";
                    *pfVar24 = (float)iVar10;
                    pfVar24[-1] = 1.3205055e-38;
                    cVar7 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],
                                              (int)pfVar24[2]);
                    if (cVar7 != (char)piVar19[0x5e4]) {
                      if ((char)piVar19[0x1b] == '\0') {
                        puVar3 = (uint *)piVar19[0xc];
                        if (puVar3 != (uint *)0x0) {
                          *puVar3 = *puVar3 | 0x101;
                          *pfVar24 = (float)puVar3;
                          pfVar24[-1] = 1.3205116e-38;
                          iVar12 = CBaseEdict::GetChangeAccessor((CBaseEdict *)*pfVar24);
                          *(undefined2 *)(iVar12 + 2) = 0;
                        }
                      }
                      else {
                        *(byte *)(piVar19 + 0x1c) = *(byte *)(piVar19 + 0x1c) | 1;
                      }
                      *(char *)(piVar19 + 0x5e4) = cVar7;
                    }
                  }
                  pfVar24[2] = 0.0;
                  pfVar24[1] = (float)"currentMagazine";
                  *pfVar24 = (float)iVar10;
                  pfVar24[-1] = 1.3205171e-38;
                  iVar12 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],
                                             (int)pfVar24[2]);
                  if (iVar12 != piVar8[0x508]) {
                    if ((char)piVar8[0x1b] == '\0') {
                      puVar3 = (uint *)piVar8[0xc];
                      if (puVar3 != (uint *)0x0) {
                        *puVar3 = *puVar3 | 0x101;
                        *pfVar24 = (float)puVar3;
                        pfVar24[-1] = 1.3205229e-38;
                        iVar13 = CBaseEdict::GetChangeAccessor((CBaseEdict *)*pfVar24);
                        *(undefined2 *)(iVar13 + 2) = 0;
                      }
                    }
                    else {
                      *(byte *)(piVar8 + 0x1c) = *(byte *)(piVar8 + 0x1c) | 1;
                    }
                    piVar8[0x508] = iVar12;
                  }
                  iVar12 = *piVar8;
                  *pfVar24 = (float)piVar8;
                  pcVar1 = *(code **)(iVar12 + 0x55c);
                  pfVar24[-1] = 1.3205261e-38;
                  fVar14 = (float)(*pcVar1)();
                  if (fVar14 != -NAN) {
                    pfVar24[2] = 0.0;
                    pfVar24[1] = (float)"extraAmmo";
                    *pfVar24 = (float)iVar10;
                    pfVar24[-1] = 1.320531e-38;
                    fVar15 = (float)KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],
                                                      (int)pfVar24[2]);
                    pfVar24[2] = fVar14;
                    pfVar24[1] = fVar15;
                    *pfVar24 = (float)param_1;
                    pfVar24[-1] = 1.3205336e-38;
                    CBaseCombatCharacter::SetAmmoCount
                              ((CBaseCombatCharacter *)*pfVar24,(int)pfVar24[1],(int)pfVar24[2]);
                  }
                  goto LAB_008fc848;
                }
              }
              pfVar24[1] = fVar14;
              *pfVar24 = (float)"Couldn\'t give unknown weapon %d\n";
              pfVar24[-1] = 1.3208623e-38;
              Warning();
            }
          }
LAB_008fc848:
          *pfVar24 = (float)iVar10;
          pfVar24[-1] = 1.3204335e-38;
          iVar10 = KeyValues::GetNextKey((KeyValues *)*pfVar24);
        }
        pfVar24[2] = 0.0;
        pfVar24[1] = (float)"restoreSecondaryWeaponName";
        *pfVar24 = (float)*(undefined4 *)this;
        pfVar24[-1] = 1.3206599e-38;
        fVar14 = (float)KeyValues::GetString
                                  ((KeyValues *)*pfVar24,(char *)pfVar24[1],(char *)pfVar24[2]);
        if (fVar14 != 0.0) {
          iVar10 = *(int *)param_1;
          pfVar24[1] = 1.4013e-45;
          *pfVar24 = (float)param_1;
          pcVar1 = *(code **)(iVar10 + 0x484);
          pfVar24[-1] = 1.3206634e-38;
          fVar15 = (float)(*pcVar1)();
          if (fVar15 != 0.0) {
            pfVar24[1] = fVar15;
            *pfVar24 = (float)param_1;
            pfVar24[-1] = 1.320666e-38;
            CBaseCombatCharacter::Weapon_Detach
                      ((CBaseCombatCharacter *)*pfVar24,(CBaseCombatWeapon *)pfVar24[1]);
            *pfVar24 = fVar15;
            pfVar24[-1] = 1.3206676e-38;
            UTIL_Remove((CBaseEntity *)*pfVar24);
          }
          iVar10 = *(int *)param_1;
          pfVar24[4] = 0.0;
          pfVar24[3] = 1.4013e-45;
          pfVar24[2] = 0.0;
          pfVar24[1] = fVar14;
          *pfVar24 = (float)param_1;
          pcVar1 = *(code **)(iVar10 + 0x6c0);
          pfVar24[-1] = 1.3206731e-38;
          (*pcVar1)();
        }
        pfVar24[2] = (float)&DAT_00d539c2;
        pfVar24[1] = (float)"activeWeapon";
        *pfVar24 = (float)*(undefined4 *)this;
        pfVar24[-1] = 1.3206767e-38;
        uVar9 = KeyValues::GetString((KeyValues *)*pfVar24,(char *)pfVar24[1],(char *)pfVar24[2]);
        *pfVar24 = (float)uVar9;
        pfVar24[-1] = 1.3206778e-38;
        fVar14 = (float)AliasToWeaponID((char *)*pfVar24);
        *pfVar24 = (float)param_1;
        pfVar24[1] = fVar14;
        pfVar24[-1] = 1.3206795e-38;
        piVar8 = (int *)CCSPlayer::GetCSWeapon((CCSPlayer *)*pfVar24,(int)pfVar24[1]);
        if (piVar8 != (int *)0x0) {
          iVar10 = *(int *)param_1;
          pfVar24[2] = 0.0;
          pfVar24[1] = (float)piVar8;
          *pfVar24 = (float)param_1;
          pcVar1 = *(code **)(iVar10 + 0x474);
          pfVar24[-1] = 1.3206836e-38;
          (*pcVar1)();
          pfVar24[2] = 0.0;
          pfVar24[1] = (float)"incapacitated";
          *pfVar24 = (float)*(undefined4 *)this;
          pfVar24[-1] = 1.3206872e-38;
          iVar10 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
          if (iVar10 != 0) {
            iVar10 = *piVar8;
            pfVar24[1] = 0.0;
            *pfVar24 = (float)piVar8;
            pcVar1 = *(code **)(iVar10 + 0x428);
            pfVar24[-1] = 1.320759e-38;
            (*pcVar1)();
          }
        }
        pfVar24[2] = 0.0;
        pfVar24[1] = (float)"flashlight";
        *pfVar24 = (float)*(undefined4 *)this;
        pfVar24[-1] = 1.320692e-38;
        iVar12 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
        iVar10 = *(int *)param_1;
        pfVar24[1] = 0.0;
        *pfVar24 = (float)param_1;
        if (iVar12 == 0) {
          pcVar1 = *(code **)(iVar10 + 0x5fc);
          pfVar24[-1] = 1.3207054e-38;
          (*pcVar1)();
        }
        else {
          pcVar1 = *(code **)(iVar10 + 0x5f8);
          pfVar24[-1] = 1.3206952e-38;
          (*pcVar1)();
        }
      }
    }
  }
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"hasUsedFlashlight";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.3198015e-38;
  iVar10 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  param_1[0x3377] = (CTerrorPlayer)(iVar10 != 0);
  iVar10 = 0;
  pCVar23 = param_1 + 0x2d14;
  do {
    while( true ) {
      fVar14 = *(float *)(gpGlobals + 0xc);
      *pfVar24 = (float)iVar10;
      pfVar24[-1] = 1.319811e-38;
      fVar15 = (float)ZombieClassName();
      pfVar24[2] = (float)"timestamp";
      pfVar24[1] = fVar15;
      *pfVar24 = (float)"%s_%s";
      pfVar24[-1] = 1.3198144e-38;
      fVar15 = (float)UTIL_VarArgs((char *)*pfVar24);
      pfVar24[2] = 0.0;
      pfVar24[1] = fVar15;
      *pfVar24 = (float)*(undefined4 *)this;
      pfVar24[-1] = 1.3198174e-38;
      lVar25 = (longdouble)KeyValues::GetFloat((KeyValues *)*pfVar24,(char *)pfVar24[1],pfVar24[2]);
      *(float *)(pCVar23 + -0x24) = fVar14 - (float)lVar25;
      *pfVar24 = (float)iVar10;
      pfVar24[-1] = 1.3198216e-38;
      fVar14 = (float)ZombieClassName();
      pfVar24[2] = (float)"spawns";
      pfVar24[1] = fVar14;
      *pfVar24 = (float)"%s_%s";
      pfVar24[-1] = 1.319825e-38;
      fVar14 = (float)UTIL_VarArgs((char *)*pfVar24);
      pfVar24[2] = 0.0;
      pfVar24[1] = fVar14;
      *pfVar24 = (float)*(undefined4 *)this;
      pfVar24[-1] = 1.3198281e-38;
      ppuVar16 = (undefined **)
                 KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
      pfVar24[2] = 5.60519e-45;
      *pfVar24 = (float)pCVar23;
      pfVar24[1] = (float)local_74;
      pfVar24[-1] = 1.3198322e-38;
      local_3c = ppuVar16;
      iVar12 = memcmp((void *)*pfVar24,(void *)pfVar24[1],(size_t)pfVar24[2]);
      if (iVar12 == 0) break;
      if (param_1[0x6c] == (CTerrorPlayer)0x0) {
        puVar3 = *(uint **)(param_1 + 0x30);
        if (puVar3 != (uint *)0x0) {
          *puVar3 = *puVar3 | 0x101;
          *pfVar24 = (float)puVar3;
          pfVar24[-1] = 1.3198393e-38;
          iVar12 = CBaseEdict::GetChangeAccessor((CBaseEdict *)*pfVar24);
          *(undefined2 *)(iVar12 + 2) = 0;
        }
      }
      else {
        param_1[0x70] = (CTerrorPlayer)((byte)param_1[0x70] | 1);
      }
      iVar10 = iVar10 + 1;
      *(undefined ***)pCVar23 = ppuVar16;
      pCVar23 = pCVar23 + 4;
      if (iVar10 == 9) goto LAB_008fb7e7;
    }
    iVar10 = iVar10 + 1;
    pCVar23 = pCVar23 + 4;
  } while (iVar10 != 9);
LAB_008fb7e7:
  *(undefined4 *)(param_1 + 0x2d48) = 0;
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"minDeadDuration";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.3198502e-38;
  lVar25 = (longdouble)KeyValues::GetFloat((KeyValues *)*pfVar24,(char *)pfVar24[1],pfVar24[2]);
  *(float *)(param_1 + 0x2d4c) = (float)lVar25;
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"maxDeadDuration";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.3198561e-38;
  lVar25 = (longdouble)KeyValues::GetFloat((KeyValues *)*pfVar24,(char *)pfVar24[1],pfVar24[2]);
  if ((float)lVar25 != *(float *)(param_1 + 0x2d50)) {
    if (param_1[0x6c] == (CTerrorPlayer)0x0) {
      puVar3 = *(uint **)(param_1 + 0x30);
      if (puVar3 != (uint *)0x0) {
        *puVar3 = *puVar3 | 0x101;
        *pfVar24 = (float)puVar3;
        pfVar24[-1] = 1.3204182e-38;
        iVar10 = CBaseEdict::GetChangeAccessor((CBaseEdict *)*pfVar24);
        *(undefined2 *)(iVar10 + 2) = 0;
      }
    }
    else {
      param_1[0x70] = (CTerrorPlayer)((byte)param_1[0x70] | 1);
    }
    *(float *)(param_1 + 0x2d50) = (float)lVar25;
  }
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"totalDeadDuration";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.3198627e-38;
  lVar25 = (longdouble)KeyValues::GetFloat((KeyValues *)*pfVar24,(char *)pfVar24[1],pfVar24[2]);
  if ((float)lVar25 != *(float *)(param_1 + 0x2d54)) {
    if (param_1[0x6c] == (CTerrorPlayer)0x0) {
      puVar3 = *(uint **)(param_1 + 0x30);
      if (puVar3 != (uint *)0x0) {
        *puVar3 = *puVar3 | 0x101;
        *pfVar24 = (float)puVar3;
        pfVar24[-1] = 1.3204095e-38;
        iVar10 = CBaseEdict::GetChangeAccessor((CBaseEdict *)*pfVar24);
        *(undefined2 *)(iVar10 + 2) = 0;
      }
    }
    else {
      param_1[0x70] = (CTerrorPlayer)((byte)param_1[0x70] | 1);
    }
    *(float *)(param_1 + 0x2d54) = (float)lVar25;
  }
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"deadCount";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.3198693e-38;
  uVar9 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  puVar22 = g_pEntityList;
  *(undefined4 *)(param_1 + 0x2d58) = uVar9;
  uVar4 = *(uint *)(param_1 + 0x30bc);
  if ((((uVar4 != 0xffffffff) &&
       (puVar22 = puVar22 + (uVar4 & 0xfff) * 0x10, puVar22 != (undefined *)0xfffffffc)) &&
      (*(uint *)(puVar22 + 8) == uVar4 >> 0xc)) && (*(int *)(puVar22 + 4) != 0)) {
    pfVar24[2] = 0.0;
    uVar9 = 0;
    pfVar24[1] = (float)"abilityTimerDuration";
    *pfVar24 = (float)*(undefined4 *)this;
    pfVar24[-1] = 1.3205444e-38;
    lVar25 = (longdouble)KeyValues::GetFloat((KeyValues *)*pfVar24,(char *)pfVar24[1],pfVar24[2]);
    pfVar24[2] = 0.0;
    pfVar24[1] = (float)"abilityTimerTime";
    *pfVar24 = (float)*(undefined4 *)this;
    pfVar24[-1] = 1.3205499e-38;
    lVar26 = (longdouble)KeyValues::GetFloat((KeyValues *)*pfVar24,(char *)pfVar24[1],pfVar24[2]);
    uVar4 = *(uint *)(param_1 + 0x30bc);
    if (((uVar4 != 0xffffffff) &&
        (puVar22 = g_pEntityList + (uVar4 & 0xfff) * 0x10, puVar22 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar22 + 8) == uVar4 >> 0xc)) {
      uVar9 = *(undefined4 *)(puVar22 + 4);
    }
    pfVar24[2] = (float)lVar25;
    pfVar24[1] = (float)lVar26;
    *pfVar24 = (float)uVar9;
    pfVar24[-1] = 1.3205614e-38;
    CBaseAbility::StartActivationTimer((CBaseAbility *)*pfVar24,pfVar24[1],pfVar24[2]);
  }
  iVar10 = *(int *)param_1;
  *pfVar24 = (float)param_1;
  pcVar1 = *(code **)(iVar10 + 0x288);
  pfVar24[-1] = 1.3198785e-38;
  fVar14 = (float)(*pcVar1)();
  pfVar24[6] = 0.0;
  pfVar24[1] = fVar14;
  pfVar24[5] = 1.4013e-45;
  pfVar24[4] = 1.4013e-45;
  pfVar24[3] = 1000.0;
  pfVar24[2] = 0.0;
  *pfVar24 = (float)TheNavMesh;
  pfVar24[-1] = 1.3198865e-38;
  iVar10 = CNavMesh::GetNearestNavArea
                     ((CNavMesh *)*pfVar24,(Vector *)pfVar24[1],*(bool *)(pfVar24 + 2),pfVar24[3],
                      *(bool *)(pfVar24 + 4),*(bool *)(pfVar24 + 5),*(bool *)(pfVar24 + 6));
  if (iVar10 != 0) {
    iVar10 = *(int *)param_1;
    *pfVar24 = (float)param_1;
    pcVar1 = *(code **)(iVar10 + 0x288);
    pfVar24[-1] = 1.3198892e-38;
    fVar14 = (float)(*pcVar1)();
    pfVar24[6] = 0.0;
    pfVar24[1] = fVar14;
    pfVar24[5] = 1.4013e-45;
    pfVar24[4] = 1.4013e-45;
    pfVar24[3] = 1000.0;
    pfVar24[2] = 0.0;
    *pfVar24 = (float)TheNavMesh;
    pfVar24[-1] = 1.3198972e-38;
    iVar10 = CNavMesh::GetNearestNavArea
                       ((CNavMesh *)*pfVar24,(Vector *)pfVar24[1],*(bool *)(pfVar24 + 2),pfVar24[3],
                        *(bool *)(pfVar24 + 4),*(bool *)(pfVar24 + 5),*(bool *)(pfVar24 + 6));
    if ((*(byte *)(iVar10 + 300) & 0x80) != 0) goto LAB_008fb96a;
  }
  iVar10 = 0;
  pCVar23 = param_1 + 0x38dc;
  do {
    while( true ) {
      *pfVar24 = (float)iVar10;
      pfVar24[-1] = 1.3199905e-38;
      fVar14 = (float)ZombieClassName();
      pfVar24[2] = (float)"missionZombieKills";
      pfVar24[1] = fVar14;
      *pfVar24 = (float)"%s_%s";
      pfVar24[-1] = 1.3199939e-38;
      fVar14 = (float)UTIL_VarArgs((char *)*pfVar24);
      pfVar24[2] = 0.0;
      pfVar24[1] = fVar14;
      *pfVar24 = (float)*(undefined4 *)this;
      pfVar24[-1] = 1.3199974e-38;
      ppuVar16 = (undefined **)
                 KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
      pfVar24[2] = 5.60519e-45;
      *pfVar24 = (float)pCVar23;
      pfVar24[1] = (float)local_74;
      pfVar24[-1] = 1.3200013e-38;
      local_3c = ppuVar16;
      iVar12 = memcmp((void *)*pfVar24,(void *)pfVar24[1],(size_t)pfVar24[2]);
      if (iVar12 == 0) break;
      if (param_1[0x6c] == (CTerrorPlayer)0x0) {
        puVar3 = *(uint **)(param_1 + 0x30);
        if (puVar3 != (uint *)0x0) {
          *puVar3 = *puVar3 | 0x101;
          *pfVar24 = (float)puVar3;
          pfVar24[-1] = 1.320007e-38;
          iVar12 = CBaseEdict::GetChangeAccessor((CBaseEdict *)*pfVar24);
          *(undefined2 *)(iVar12 + 2) = 0;
        }
      }
      else {
        param_1[0x70] = (CTerrorPlayer)((byte)param_1[0x70] | 1);
      }
      iVar10 = iVar10 + 1;
      *(undefined ***)pCVar23 = ppuVar16;
      pCVar23 = pCVar23 + 4;
      if (iVar10 == 9) goto LAB_008fbc91;
    }
    iVar10 = iVar10 + 1;
    pCVar23 = pCVar23 + 4;
  } while (iVar10 != 9);
LAB_008fbc91:
  fVar14 = 0.0;
  pCVar23 = param_1 + 0x3664;
  do {
    while( true ) {
      pfVar24[1] = fVar14;
      *pfVar24 = (float)"award_%d";
      pfVar24[-1] = 1.3200201e-38;
      fVar15 = (float)UTIL_VarArgs((char *)*pfVar24);
      pfVar24[2] = 0.0;
      pfVar24[1] = fVar15;
      *pfVar24 = (float)*(undefined4 *)this;
      pfVar24[-1] = 1.3200236e-38;
      ppuVar16 = (undefined **)
                 KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
      pfVar24[2] = 5.60519e-45;
      *pfVar24 = (float)pCVar23;
      pfVar24[1] = (float)local_74;
      pfVar24[-1] = 1.3200275e-38;
      local_3c = ppuVar16;
      iVar10 = memcmp((void *)*pfVar24,(void *)pfVar24[1],(size_t)pfVar24[2]);
      if (iVar10 == 0) break;
      if (param_1[0x6c] == (CTerrorPlayer)0x0) {
        puVar3 = *(uint **)(param_1 + 0x30);
        if (puVar3 != (uint *)0x0) {
          *puVar3 = *puVar3 | 0x101;
          *pfVar24 = (float)puVar3;
          pfVar24[-1] = 1.3200332e-38;
          iVar10 = CBaseEdict::GetChangeAccessor((CBaseEdict *)*pfVar24);
          *(undefined2 *)(iVar10 + 2) = 0;
        }
      }
      else {
        param_1[0x70] = (CTerrorPlayer)((byte)param_1[0x70] | 1);
      }
      pCVar23 = pCVar23 + 4;
      *(undefined ***)(param_1 + 0x3664 + (int)fVar14 * 4) = ppuVar16;
      fVar14 = (float)((int)fVar14 + 1);
      if (fVar14 == 2.08793e-43) goto LAB_008fbd46;
    }
    fVar14 = (float)((int)fVar14 + 1);
    pCVar23 = pCVar23 + 4;
  } while (fVar14 != 2.08793e-43);
LAB_008fbd46:
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"tankTickets";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.320042e-38;
  iVar10 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  if (iVar10 != *(int *)(param_1 + 0x3088)) {
    if (param_1[0x6c] == (CTerrorPlayer)0x0) {
      puVar3 = *(uint **)(param_1 + 0x30);
      if (puVar3 != (uint *)0x0) {
        *puVar3 = *puVar3 | 0x101;
        *pfVar24 = (float)puVar3;
        pfVar24[-1] = 1.3200477e-38;
        iVar12 = CBaseEdict::GetChangeAccessor((CBaseEdict *)*pfVar24);
        *(undefined2 *)(iVar12 + 2) = 0;
      }
    }
    else {
      param_1[0x70] = (CTerrorPlayer)((byte)param_1[0x70] | 1);
    }
    *(int *)(param_1 + 0x3088) = iVar10;
  }
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"missionSurvivorDamage";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.320053e-38;
  iVar10 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  if (iVar10 != *(int *)(param_1 + 0x3084)) {
    if (param_1[0x6c] == (CTerrorPlayer)0x0) {
      puVar3 = *(uint **)(param_1 + 0x30);
      if (puVar3 != (uint *)0x0) {
        *puVar3 = *puVar3 | 0x101;
        *pfVar24 = (float)puVar3;
        pfVar24[-1] = 1.3200593e-38;
        iVar12 = CBaseEdict::GetChangeAccessor((CBaseEdict *)*pfVar24);
        *(undefined2 *)(iVar12 + 2) = 0;
      }
    }
    else {
      param_1[0x70] = (CTerrorPlayer)((byte)param_1[0x70] | 1);
    }
    *(int *)(param_1 + 0x3084) = iVar10;
  }
LAB_008fb96a:
  if (*(int *)(param_1 + 0x3110) != 0) {
    pfVar24[2] = 0.0;
    pfVar24[1] = (float)"hasSaidScenarioJoin";
    *pfVar24 = (float)*(undefined4 *)this;
    pfVar24[-1] = 1.319904e-38;
    iVar10 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
    *(bool *)(*(int *)(param_1 + 0x3110) + 0x120) = iVar10 != 0;
  }
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"missionIDSpawnedOn";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.3199098e-38;
  uVar9 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  *(undefined4 *)(param_1 + 0x3a88) = uVar9;
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"teamSpawnedOn";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.3199143e-38;
  uVar9 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  *(undefined4 *)(param_1 + 0x3a8c) = uVar9;
  if (param_1[0x2d94] != (CTerrorPlayer)0x0) {
    iVar10 = *(int *)param_1;
    *pfVar24 = (float)param_1;
    pcVar1 = *(code **)(iVar10 + 0x924);
    pfVar24[-1] = 1.3204036e-38;
    (*pcVar1)();
  }
  *pfVar24 = (float)local_74;
  pfVar24[-1] = 1.3199185e-38;
  CRecipientFilter::CRecipientFilter((CRecipientFilter *)*pfVar24);
  pfVar24[1] = (float)param_1;
  *pfVar24 = (float)local_74;
  local_3c = &PTR__CSingleUserRecipientFilter_00c08ea8;
                    /* try { // try from 008fba03 to 008fba07 has its CatchHandler @ 008fd59b */
  pfVar24[-1] = 1.3199211e-38;
  CRecipientFilter::AddRecipient((CRecipientFilter *)*pfVar24,(CBasePlayer *)pfVar24[1]);
  *pfVar24 = (float)local_74;
                    /* try { // try from 008fba0e to 008fbac7 has its CatchHandler @ 008fd57f */
  pfVar24[-1] = 1.3199227e-38;
  CRecipientFilter::MakeReliable((CRecipientFilter *)*pfVar24);
  pfVar24[1] = (float)"TransitionRestore";
  *pfVar24 = (float)local_74;
  pfVar24[-1] = 1.3199249e-38;
  UserMessageBegin((IRecipientFilter *)*pfVar24,(char *)pfVar24[1]);
  pfVar24[-1] = 1.3199256e-38;
  MessageEnd();
  iVar10 = *gameeventmanager;
  pfVar24[3] = 0.0;
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"player_transitioned";
  *pfVar24 = (float)gameeventmanager;
  pcVar1 = *(code **)(iVar10 + 0x1c);
  pfVar24[-1] = 1.3199308e-38;
  piVar8 = (int *)(*pcVar1)();
  if (piVar8 != (int *)0x0) {
    pcVar1 = *(code **)(*piVar8 + 0x30);
    iVar10 = *engine;
    pfVar24[1] = *(float *)(param_1 + 0x30);
    *pfVar24 = (float)engine;
    pcVar5 = *(code **)(iVar10 + 0x40);
    pfVar24[-1] = 1.3199356e-38;
    fVar14 = (float)(*pcVar5)();
    pfVar24[2] = fVar14;
    pfVar24[1] = (float)"userid";
    *pfVar24 = (float)piVar8;
    pfVar24[-1] = 1.3199384e-38;
    (*pcVar1)();
    iVar10 = *gameeventmanager;
    pfVar24[2] = 0.0;
    pfVar24[1] = (float)piVar8;
    *pfVar24 = (float)gameeventmanager;
    pcVar1 = *(code **)(iVar10 + 0x20);
    pfVar24[-1] = 1.3199419e-38;
    (*pcVar1)();
  }
  pfVar24[2] = 0.0;
  pfVar24[1] = (float)"idle";
  *pfVar24 = (float)*(undefined4 *)this;
  pfVar24[-1] = 1.3199455e-38;
  iVar10 = KeyValues::GetInt((KeyValues *)*pfVar24,(char *)pfVar24[1],(int)pfVar24[2]);
  if (iVar10 != 0) {
    pCVar23 = param_1 + 0x3fd0;
    *pfVar24 = (float)pCVar23;
    pfVar24[-1] = 1.319948e-38;
    lVar25 = (longdouble)CountdownTimer::Now();
    if ((float)lVar25 + 5.0 != *(float *)(param_1 + 0x3fd8)) {
      iVar10 = *(int *)(param_1 + 0x3fd0);
      *pfVar24 = (float)pCVar23;
      pfVar24[1] = (float)(param_1 + 0x3fd8);
                    /* try { // try from 008fcb33 to 008fcb35 has its CatchHandler @ 008fd57f */
      pcVar1 = *(code **)(iVar10 + 4);
      pfVar24[-1] = 1.3205374e-38;
      (*pcVar1)();
      *(float *)(param_1 + 0x3fd8) = (float)lVar25 + 5.0;
    }
    if (*(float *)(param_1 + 0x3fd4) != 5.0) {
      iVar10 = *(int *)(param_1 + 0x3fd0);
      *pfVar24 = (float)pCVar23;
      pfVar24[1] = (float)(param_1 + 0x3fd4);
                    /* try { // try from 008fbffc to 008fbffe has its CatchHandler @ 008fd57f */
      pcVar1 = *(code **)(iVar10 + 4);
      pfVar24[-1] = 1.3201351e-38;
      (*pcVar1)();
      *(undefined4 *)(param_1 + 0x3fd4) = 0x40a00000;
    }
  }
  local_3c = &PTR__CSingleUserRecipientFilter_00c08ea8;
  *pfVar24 = (float)local_74;
  pfVar24[-1] = 1.3199584e-38;
  CRecipientFilter::~CRecipientFilter((CRecipientFilter *)*pfVar24);
  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)