L L4D2node

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 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)