DisplayStuckDump
0x00759510 · 1911 bytes · unknown
_Z16DisplayStuckDumpv
Decompiled
undefined (0 params)
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* DisplayStuckDump() */
void DisplayStuckDump(void)
{
float fVar1;
char cVar2;
int iVar3;
char *pcVar4;
int iVar5;
char *pcVar6;
char *pcVar7;
int in_GS_OFFSET;
bool bVar8;
bool bVar9;
byte bVar10;
longdouble lVar11;
double dVar12;
undefined1 *puVar13;
char local_75c [256];
CFmtStrN<256> local_65c [5];
char local_657 [263];
char local_550 [256];
float local_450;
long local_44c;
float local_448;
float local_444;
float local_440;
float local_43c;
float local_438;
float local_434;
char local_430 [1024];
float local_30;
float local_2c;
float local_28;
float local_24;
int local_20;
bVar10 = 0;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
cVar2 = (**(code **)(*engine + 0x148))(engine);
puVar13 = s_stuckDumpDelayTimer;
if (cVar2 == '\0') {
lVar11 = (longdouble)CountdownTimer::Now();
if (((float)s_stuckDumpDelayTimer._8_4_ <= (float)lVar11) && (s_stuckDumpFilename != '\0')) {
iVar3 = (**(code **)(filesystem[1] + 8))(filesystem + 1,&s_stuckDumpFilename,"r",0);
if (iVar3 == 0) {
pcVar4 = "Cannot open stuck dump file \'%s\'\n";
Msg("Cannot open stuck dump file \'%s\'\n",&s_stuckDumpFilename);
s_stuckDumpFilename = '\0';
puVar13 = pcVar4;
}
else {
s_stuckDumpFilename = '\0';
bVar8 = true;
while (cVar2 = (**(code **)(*filesystem + 0x5c))(filesystem,iVar3), cVar2 == '\0') {
(**(code **)(*filesystem + 0x60))(filesystem,local_75c,0x100,iVar3);
pcVar4 = strtok(local_75c," :");
if (pcVar4 != (char *)0x0) {
if (bVar8) {
iVar5 = 6;
bVar8 = false;
pcVar6 = "STUCK";
do {
if (iVar5 == 0) break;
iVar5 = iVar5 + -1;
bVar8 = *pcVar4 == *pcVar6;
pcVar4 = pcVar4 + (uint)bVar10 * -2 + 1;
pcVar6 = pcVar6 + (uint)bVar10 * -2 + 1;
} while (bVar8);
if (!bVar8) goto LAB_0075967d;
pcVar4 = strtok((char *)0x0," \n");
_V_strcpy(local_550,pcVar4);
strtok((char *)0x0," ");
pcVar4 = strtok((char *)0x0," \n");
dVar12 = strtod(pcVar4,(char **)0x0);
bVar8 = false;
local_450 = (float)dVar12;
}
else {
iVar5 = 9;
bVar9 = true;
pcVar6 = pcVar4;
pcVar7 = "Entindex";
do {
if (iVar5 == 0) break;
iVar5 = iVar5 + -1;
bVar9 = *pcVar6 == *pcVar7;
pcVar6 = pcVar6 + (uint)bVar10 * -2 + 1;
pcVar7 = pcVar7 + (uint)bVar10 * -2 + 1;
} while (bVar9);
if (bVar9) {
pcVar4 = strtok((char *)0x0," :\n");
local_44c = strtol(pcVar4,(char **)0x0,10);
}
else {
iVar5 = 9;
bVar9 = false;
pcVar6 = pcVar4;
pcVar7 = "Behavior";
do {
if (iVar5 == 0) break;
iVar5 = iVar5 + -1;
bVar9 = *pcVar6 == *pcVar7;
pcVar6 = pcVar6 + (uint)bVar10 * -2 + 1;
pcVar7 = pcVar7 + (uint)bVar10 * -2 + 1;
} while (bVar9);
if (bVar9) {
pcVar4 = strtok((char *)0x0,"\n");
_V_strcpy(local_430,pcVar4);
}
else {
iVar5 = 7;
bVar9 = false;
pcVar6 = pcVar4;
pcVar7 = "Origin";
do {
if (iVar5 == 0) break;
iVar5 = iVar5 + -1;
bVar9 = *pcVar6 == *pcVar7;
pcVar6 = pcVar6 + (uint)bVar10 * -2 + 1;
pcVar7 = pcVar7 + (uint)bVar10 * -2 + 1;
} while (bVar9);
if (bVar9) {
pcVar4 = strtok((char *)0x0," :\n");
dVar12 = strtod(pcVar4,(char **)0x0);
local_448 = (float)dVar12;
pcVar4 = strtok((char *)0x0," :\n");
dVar12 = strtod(pcVar4,(char **)0x0);
local_444 = (float)dVar12;
pcVar4 = strtok((char *)0x0," :\n");
dVar12 = strtod(pcVar4,(char **)0x0);
local_440 = (float)dVar12;
}
else {
iVar5 = 7;
bVar9 = false;
pcVar6 = pcVar4;
pcVar7 = "Angles";
do {
if (iVar5 == 0) break;
iVar5 = iVar5 + -1;
bVar9 = *pcVar6 == *pcVar7;
pcVar6 = pcVar6 + (uint)bVar10 * -2 + 1;
pcVar7 = pcVar7 + (uint)bVar10 * -2 + 1;
} while (bVar9);
if (bVar9) {
pcVar4 = strtok((char *)0x0," :\n");
dVar12 = strtod(pcVar4,(char **)0x0);
local_434 = (float)dVar12;
pcVar4 = strtok((char *)0x0," :\n");
dVar12 = strtod(pcVar4,(char **)0x0);
local_43c = (float)dVar12;
pcVar4 = strtok((char *)0x0," :\n");
dVar12 = strtod(pcVar4,(char **)0x0);
local_438 = (float)dVar12;
}
else {
iVar5 = 0xc;
bVar9 = false;
pcVar6 = pcVar4;
pcVar7 = "Approaching";
do {
if (iVar5 == 0) break;
iVar5 = iVar5 + -1;
bVar9 = *pcVar6 == *pcVar7;
pcVar6 = pcVar6 + (uint)bVar10 * -2 + 1;
pcVar7 = pcVar7 + (uint)bVar10 * -2 + 1;
} while (bVar9);
if (bVar9) {
pcVar4 = strtok((char *)0x0," :\n");
dVar12 = strtod(pcVar4,(char **)0x0);
local_30 = (float)dVar12;
pcVar4 = strtok((char *)0x0," :\n");
dVar12 = strtod(pcVar4,(char **)0x0);
local_2c = (float)dVar12;
pcVar4 = strtok((char *)0x0," :\n");
dVar12 = strtod(pcVar4,(char **)0x0);
local_28 = (float)dVar12;
}
else {
iVar5 = 5;
bVar9 = false;
pcVar6 = "Time";
do {
if (iVar5 == 0) break;
iVar5 = iVar5 + -1;
bVar9 = *pcVar4 == *pcVar6;
pcVar4 = pcVar4 + (uint)bVar10 * -2 + 1;
pcVar6 = pcVar6 + (uint)bVar10 * -2 + 1;
} while (bVar9);
if (bVar9) {
pcVar4 = strtok((char *)0x0," :\n");
dVar12 = strtod(pcVar4,(char **)0x0);
local_24 = (float)dVar12;
if ((((*(float *)(nb_stuck_dump_filter_time_start._28_4_ + 0x2c) <=
local_24) &&
(local_24 < *(float *)(nb_stuck_dump_filter_time_end._28_4_ + 0x2c)
|| local_24 ==
*(float *)(nb_stuck_dump_filter_time_end._28_4_ + 0x2c))) &&
((*(int *)(nb_stuck_dump_filter_entindex._28_4_ + 0x30) < 1 ||
(*(int *)(nb_stuck_dump_filter_entindex._28_4_ + 0x30) == local_44c))
)) && (*(float *)(nb_stuck_dump_filter_min_duration._28_4_ + 0x2c) <=
local_450)) {
pcVar4 = "FCVAR_NEVER_AS_STRING";
if ((nb_stuck_dump_filter_identifier[0x15] & 0x10) == 0) {
pcVar4 = "";
if (*(char **)(nb_stuck_dump_filter_identifier._28_4_ + 0x24) !=
(char *)0x0) {
pcVar4 = *(char **)(nb_stuck_dump_filter_identifier._28_4_ + 0x24);
}
}
if (*pcVar4 != '\0') {
iVar5 = _V_strlen(pcVar4);
iVar5 = V_strnicmp(pcVar4,local_550,iVar5);
if (iVar5 != 0) goto LAB_0075967d;
}
if (((((-0.01 < local_30) && (local_30 < 0.01)) && (-0.01 < local_2c))
&& ((local_2c < 0.01 && (-0.01 < local_28)))) && (local_28 < 0.01))
{
local_30 = local_448;
local_2c = local_444;
local_28 = local_440;
}
NDebugOverlay::HorzArrow
((Vector *)&local_448,(Vector *)&local_30,3.0,0xff,100,0,0xff,
true,9999.9);
if (*(int *)(nb_stuck_dump_show_details._28_4_ + 0x30) != 0) {
CFmtStrN<256>::CFmtStrN(local_65c,"%s:%s",local_550,local_430);
NDebugOverlay::Text((Vector *)&local_448,local_657,false,9999.9);
}
}
LAB_0075967d:
bVar8 = true;
}
}
}
}
}
}
}
}
}
puVar13 = (undefined1 *)(filesystem + 1);
(**(code **)(filesystem[1] + 0xc))(puVar13,iVar3);
}
}
}
else {
lVar11 = (longdouble)CountdownTimer::Now();
fVar1 = (float)lVar11 + 1.0;
if ((float)lVar11 + 1.0 == (float)s_stuckDumpDelayTimer._8_4_) {
fVar1 = (float)s_stuckDumpDelayTimer._8_4_;
}
s_stuckDumpDelayTimer._8_4_ = fVar1;
if ((float)s_stuckDumpDelayTimer._4_4_ != 1.0) {
s_stuckDumpDelayTimer._4_4_ = 0x3f800000;
}
}
if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
/* WARNING: Subroutine does not return */
__stack_chk_fail(puVar13);
}
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.