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 intoaddons/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.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.