L L4D2node

RestoreTransitionedEntities

0x00863b40 · 3881 bytes · unknown

_Z27RestoreTransitionedEntitiesv

Decompiled

undefined (0 params)

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* RestoreTransitionedEntities() */

void RestoreTransitionedEntities(void)

{
  CBaseEntity *pCVar1;
  int *piVar2;
  float fVar3;
  float fVar4;
  float fVar5;
  float fVar6;
  float fVar7;
  Checkpoint *this;
  float *pfVar8;
  char *pcVar9;
  undefined4 uVar10;
  CBaseEntity *pCVar11;
  undefined1 *puVar12;
  int iVar13;
  int iVar14;
  int in_GS_OFFSET;
  double dVar15;
  double dVar16;
  double dVar17;
  double dVar18;
  double dVar19;
  Color *local_260;
  undefined **local_250;
  float local_24c;
  float local_248;
  int local_240;
  float local_23c;
  float local_238;
  float local_234;
  float local_230;
  float local_22c;
  float local_228;
  CBaseEntity *local_224;
  float local_220;
  float local_21c [126];
  Color local_24;
  undefined1 local_23;
  undefined1 local_22;
  undefined1 local_21;
  int local_20;
  
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  if ((g_bNeedRestore != '\0') &&
     (((DAT_00ffc7f8 != 0 || (DAT_00ffc7e4 != 0)) || (DAT_00ffc7d0 != 0)))) {
    g_bNeedRestore = '\0';
    this = (Checkpoint *)TerrorNavMesh::GetInitialCheckpoint(TheNavMesh);
    if (this == (Checkpoint *)0x0) {
      local_24 = 0;
      local_23 = 0xff;
      local_22 = 0xc0;
      local_21 = 0xff;
      ConColorMsg(&local_24,"Failed to find checkpoint\n");
    }
    else {
      pfVar8 = (float *)Checkpoint::GetExtent(this);
      local_23c = *pfVar8 - 150.0;
      local_238 = pfVar8[1] - 150.0;
      local_234 = pfVar8[2] - 150.0;
      local_230 = pfVar8[3] + 150.0;
      local_22c = pfVar8[4] + 150.0;
      local_228 = pfVar8[5] + 150.0;
      CFlaggedEntitiesEnum::CFlaggedEntitiesEnum
                ((CFlaggedEntitiesEnum *)&local_250,&local_224,0x80,0);
      local_250 = &PTR_EnumElement_00cda948;
      UTIL_EntitiesInBox((Vector *)&local_23c,(Vector *)&local_230,
                         (CFlaggedEntitiesEnum *)&local_250);
      local_24 = 0;
      dVar19 = (double)local_228;
      dVar18 = (double)local_22c;
      dVar17 = (double)local_230;
      dVar16 = (double)local_234;
      dVar15 = (double)local_238;
      local_23 = 0xff;
      uVar10 = (undefined4)((ulonglong)(double)local_23c >> 0x20);
      local_22 = 0xc0;
      local_21 = 0xff;
      iVar14 = local_240;
      ConColorMsg(&local_24,"Checkpoint bounds: %f %f %f --> %f %f %f and has %d weapon spawns\n",
                  SUB84((double)local_23c,0),uVar10,SUB84(dVar15,0),(int)((ulonglong)dVar15 >> 0x20)
                  ,SUB84(dVar16,0),(int)((ulonglong)dVar16 >> 0x20),SUB84(dVar17,0),
                  (int)((ulonglong)dVar17 >> 0x20),dVar18,dVar19,local_240);
      if (0 < local_240) {
        iVar13 = 0;
        do {
          pCVar1 = (&local_224)[iVar13];
          puVar12 = *(undefined1 **)(pCVar1 + 0x7c);
          local_24 = 0;
          local_23 = 0xff;
          local_22 = 0xc0;
          local_21 = 0xff;
          if (puVar12 == (undefined1 *)0x0) {
            puVar12 = &DAT_00d539c2;
          }
          iVar13 = iVar13 + 1;
          ConColorMsg(&local_24,"Removing %s\n",puVar12,uVar10,SUB84(dVar15,0),
                      (int)((ulonglong)dVar15 >> 0x20),SUB84(dVar16,0),
                      (int)((ulonglong)dVar16 >> 0x20),SUB84(dVar17,0),
                      (int)((ulonglong)dVar17 >> 0x20),dVar18,dVar19,iVar14);
          UTIL_Remove(pCVar1);
        } while (iVar13 < local_240);
      }
    }
    local_260 = &local_24;
    local_24 = 0;
    local_23 = 0xff;
    local_22 = 0xc0;
    local_21 = 0xff;
    ConColorMsg(local_260,"Restoring %d transitioned weapon spawns\n",DAT_00ffc7f8);
    fVar7 = DAT_01053d50;
    fVar6 = DAT_01053d4c;
    fVar5 = vec3_origin;
    fVar4 = DAT_01053d44;
    fVar3 = DAT_01053d40;
    pCVar1 = vec3_angle;
    if (0 < DAT_00ffc7f8) {
      iVar14 = 0;
      do {
        piVar2 = *(int **)(g_SavedWeaponSpawns + iVar14 * 4);
        GetTransitionedLandmarkOffset();
        pcVar9 = (char *)KeyValues::GetString((KeyValues *)piVar2[1],"pos","");
        local_23c = fVar5;
        local_238 = fVar6;
        local_234 = fVar7;
        sscanf(pcVar9,"%f %f %f",(Vector *)&local_23c,&local_238,&local_234);
        pcVar9 = (char *)KeyValues::GetString((KeyValues *)piVar2[1],"angles","");
        local_224 = pCVar1;
        local_220 = fVar3;
        local_21c[0] = fVar4;
        sscanf(pcVar9,"%f %f %f",(QAngle *)&local_224,&local_220,local_21c);
        local_23c = local_23c + (float)local_250;
        local_238 = local_238 + local_24c;
        local_234 = local_234 + local_248;
        iVar13 = KeyValues::GetInt((KeyValues *)piVar2[1],"positionFixedUp",0);
        if (iVar13 == 0) {
          HackRotateAroundLandmark((Vector *)&local_23c,(QAngle *)&local_224);
          pcVar9 = (char *)UTIL_VarArgs("%f %f %f",SUB84((double)(float)local_224,0),
                                        (int)((ulonglong)(double)(float)local_224 >> 0x20),
                                        SUB84((double)local_220,0),
                                        (int)((ulonglong)(double)local_220 >> 0x20),
                                        SUB84((double)local_21c[0],0),
                                        (int)((ulonglong)(double)local_21c[0] >> 0x20));
          KeyValues::SetString((KeyValues *)piVar2[1],"angles",pcVar9);
          KeyValues::SetInt((KeyValues *)piVar2[1],"positionFixedUp",1);
        }
        iVar14 = iVar14 + 1;
        pcVar9 = (char *)UTIL_VarArgs("%f %f %f",SUB84((double)local_23c,0),
                                      (int)((ulonglong)(double)local_23c >> 0x20),
                                      SUB84((double)local_238,0),
                                      (int)((ulonglong)(double)local_238 >> 0x20),
                                      SUB84((double)local_234,0),
                                      (int)((ulonglong)(double)local_234 >> 0x20));
        KeyValues::SetString((KeyValues *)piVar2[1],"pos",pcVar9);
        dVar17 = (double)local_234;
        dVar16 = (double)local_238;
        dVar15 = (double)local_23c;
        uVar10 = KeyValues::GetString((KeyValues *)piVar2[1],"classname","");
        local_24 = 0;
        local_23 = 0xff;
        local_22 = 0xc0;
        local_21 = 0xff;
        ConColorMsg(local_260,"Recreating %s at %.0f, %.0f, %.0f\n",uVar10,SUB84(dVar15,0),
                    (int)((ulonglong)dVar15 >> 0x20),SUB84(dVar16,0),
                    (int)((ulonglong)dVar16 >> 0x20),SUB84(dVar17,0),
                    (int)((ulonglong)dVar17 >> 0x20));
        pcVar9 = (char *)KeyValues::GetString((KeyValues *)piVar2[1],"classname","");
        pCVar11 = (CBaseEntity *)CreateEntityByName(pcVar9,-1,true);
        (**(code **)(*piVar2 + 8))(piVar2,pCVar11);
        DispatchSpawn(pCVar11,true);
        (**(code **)(*piVar2 + 0xc))(piVar2,pCVar11);
      } while (iVar14 < DAT_00ffc7f8);
    }
    local_24 = 0;
    local_23 = 0xff;
    local_22 = 0xc0;
    local_21 = 0xff;
    ConColorMsg(local_260,"Restoring %d transitioned weapons\n",DAT_00ffc7e4);
    fVar7 = DAT_01053d50;
    fVar6 = DAT_01053d4c;
    fVar5 = vec3_origin;
    fVar4 = DAT_01053d44;
    fVar3 = DAT_01053d40;
    pCVar1 = vec3_angle;
    if (0 < DAT_00ffc7e4) {
      iVar14 = 0;
      do {
        piVar2 = *(int **)(g_SavedWeapons + iVar14 * 4);
        GetTransitionedLandmarkOffset();
        pcVar9 = (char *)KeyValues::GetString((KeyValues *)piVar2[1],"pos","");
        local_23c = fVar5;
        local_238 = fVar6;
        local_234 = fVar7;
        sscanf(pcVar9,"%f %f %f",(Vector *)&local_23c,&local_238,&local_234);
        pcVar9 = (char *)KeyValues::GetString((KeyValues *)piVar2[1],"angles","");
        local_224 = pCVar1;
        local_220 = fVar3;
        local_21c[0] = fVar4;
        sscanf(pcVar9,"%f %f %f",(QAngle *)&local_224,&local_220,local_21c);
        local_23c = local_23c + (float)local_250;
        local_238 = local_238 + local_24c;
        local_234 = local_234 + local_248;
        iVar13 = KeyValues::GetInt((KeyValues *)piVar2[1],"positionFixedUp",0);
        if (iVar13 == 0) {
          HackRotateAroundLandmark((Vector *)&local_23c,(QAngle *)&local_224);
          pcVar9 = (char *)UTIL_VarArgs("%f %f %f",SUB84((double)(float)local_224,0),
                                        (int)((ulonglong)(double)(float)local_224 >> 0x20),
                                        SUB84((double)local_220,0),
                                        (int)((ulonglong)(double)local_220 >> 0x20),
                                        SUB84((double)local_21c[0],0),
                                        (int)((ulonglong)(double)local_21c[0] >> 0x20));
          KeyValues::SetString((KeyValues *)piVar2[1],"angles",pcVar9);
          KeyValues::SetInt((KeyValues *)piVar2[1],"positionFixedUp",1);
        }
        iVar14 = iVar14 + 1;
        pcVar9 = (char *)UTIL_VarArgs("%f %f %f",SUB84((double)local_23c,0),
                                      (int)((ulonglong)(double)local_23c >> 0x20),
                                      SUB84((double)local_238,0),
                                      (int)((ulonglong)(double)local_238 >> 0x20),
                                      SUB84((double)local_234,0),
                                      (int)((ulonglong)(double)local_234 >> 0x20));
        KeyValues::SetString((KeyValues *)piVar2[1],"pos",pcVar9);
        dVar17 = (double)local_234;
        dVar16 = (double)local_238;
        dVar15 = (double)local_23c;
        uVar10 = KeyValues::GetString((KeyValues *)piVar2[1],"classname","");
        local_24 = 0;
        local_23 = 0xff;
        local_22 = 0xc0;
        local_21 = 0xff;
        ConColorMsg(local_260,"Recreating %s at %.0f, %.0f, %.0f\n",uVar10,SUB84(dVar15,0),
                    (int)((ulonglong)dVar15 >> 0x20),SUB84(dVar16,0),
                    (int)((ulonglong)dVar16 >> 0x20),SUB84(dVar17,0),
                    (int)((ulonglong)dVar17 >> 0x20));
        pcVar9 = (char *)KeyValues::GetString((KeyValues *)piVar2[1],"classname","");
        pCVar11 = (CBaseEntity *)CreateEntityByName(pcVar9,-1,true);
        (**(code **)(*piVar2 + 8))(piVar2,pCVar11);
        DispatchSpawn(pCVar11,true);
        (**(code **)(*piVar2 + 0xc))(piVar2,pCVar11);
      } while (iVar14 < DAT_00ffc7e4);
    }
    local_24 = 0;
    local_23 = 0xff;
    local_22 = 0xc0;
    local_21 = 0xff;
    ConColorMsg(local_260,"Restoring %d transitioned prop_physics\n",DAT_00ffc7d0);
    fVar7 = DAT_01053d50;
    fVar6 = DAT_01053d4c;
    fVar5 = vec3_origin;
    fVar4 = DAT_01053d44;
    fVar3 = DAT_01053d40;
    pCVar1 = vec3_angle;
    if (0 < DAT_00ffc7d0) {
      iVar14 = 0;
      do {
        piVar2 = (int *)(g_SavedPropPhysics + iVar14 * 8);
        GetTransitionedLandmarkOffset();
        pcVar9 = (char *)KeyValues::GetString((KeyValues *)piVar2[1],"pos","");
        local_23c = fVar5;
        local_238 = fVar6;
        local_234 = fVar7;
        sscanf(pcVar9,"%f %f %f",(Vector *)&local_23c,&local_238,&local_234);
        pcVar9 = (char *)KeyValues::GetString((KeyValues *)piVar2[1],"angles","");
        local_224 = pCVar1;
        local_220 = fVar3;
        local_21c[0] = fVar4;
        sscanf(pcVar9,"%f %f %f",(QAngle *)&local_224,&local_220,local_21c);
        local_23c = local_23c + (float)local_250;
        local_238 = local_238 + local_24c;
        local_234 = local_234 + local_248;
        iVar13 = KeyValues::GetInt((KeyValues *)piVar2[1],"positionFixedUp",0);
        if (iVar13 == 0) {
          HackRotateAroundLandmark((Vector *)&local_23c,(QAngle *)&local_224);
          pcVar9 = (char *)UTIL_VarArgs("%f %f %f",SUB84((double)(float)local_224,0),
                                        (int)((ulonglong)(double)(float)local_224 >> 0x20),
                                        SUB84((double)local_220,0),
                                        (int)((ulonglong)(double)local_220 >> 0x20),
                                        SUB84((double)local_21c[0],0),
                                        (int)((ulonglong)(double)local_21c[0] >> 0x20));
          KeyValues::SetString((KeyValues *)piVar2[1],"angles",pcVar9);
          KeyValues::SetInt((KeyValues *)piVar2[1],"positionFixedUp",1);
        }
        iVar14 = iVar14 + 1;
        pcVar9 = (char *)UTIL_VarArgs("%f %f %f",SUB84((double)local_23c,0),
                                      (int)((ulonglong)(double)local_23c >> 0x20),
                                      SUB84((double)local_238,0),
                                      (int)((ulonglong)(double)local_238 >> 0x20),
                                      SUB84((double)local_234,0),
                                      (int)((ulonglong)(double)local_234 >> 0x20));
        KeyValues::SetString((KeyValues *)piVar2[1],"pos",pcVar9);
        dVar17 = (double)local_234;
        dVar16 = (double)local_238;
        dVar15 = (double)local_23c;
        uVar10 = KeyValues::GetString((KeyValues *)piVar2[1],"classname","");
        local_24 = 0;
        local_23 = 0xff;
        local_22 = 0xc0;
        local_21 = 0xff;
        ConColorMsg(local_260,"Recreating %s at %.0f, %.0f, %.0f\n",uVar10,SUB84(dVar15,0),
                    (int)((ulonglong)dVar15 >> 0x20),SUB84(dVar16,0),
                    (int)((ulonglong)dVar16 >> 0x20),SUB84(dVar17,0),
                    (int)((ulonglong)dVar17 >> 0x20));
        pcVar9 = (char *)KeyValues::GetString((KeyValues *)piVar2[1],"classname","");
        pCVar11 = (CBaseEntity *)CreateEntityByName(pcVar9,-1,true);
        (**(code **)(*piVar2 + 8))(piVar2,pCVar11);
        DispatchSpawn(pCVar11,true);
        (**(code **)(*piVar2 + 0xc))(piVar2,pCVar11);
      } while (iVar14 < DAT_00ffc7d0);
    }
  }
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  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)