L L4D2node

ParseSteamInfFile

0x00216580 · 712 bytes · __cdecl

_Z17ParseSteamInfFilePKcRj

Decompiled

undefined (2 params)

/* ParseSteamInfFile(char const*, unsigned int&) */

void ParseSteamInfFile(char *param_1,uint *param_2)

{
  undefined4 *puVar1;
  code *pcVar2;
  int iVar3;
  char *pcVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  undefined4 uVar8;
  uint uVar9;
  int *piVar10;
  int in_GS_OFFSET;
  undefined4 uStack_150;
  int local_14c;
  char *local_148 [2];
  int local_140 [4];
  uint *local_130 [4];
  undefined1 local_120 [255];
  undefined1 local_21;
  int local_20;
  
  local_130[0] = param_2;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  local_14c = g_pFileSystem + 4;
  local_140[0] = 0;
  local_148[1] = "r";
  local_148[0] = param_1;
  uStack_150 = 0x2165c8;
  pcVar4 = (char *)(**(code **)(*(int *)(g_pFileSystem + 4) + 8))();
  piVar10 = &local_14c;
  if (pcVar4 == (char *)0x0) {
LAB_002166e0:
    if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    *(undefined **)((int)piVar10 + -4) = &UNK_0021685e;
    __stack_chk_fail();
  }
  local_14c = g_pFileSystem + 4;
  uStack_150 = 0x2165e7;
  local_148[0] = pcVar4;
  iVar5 = (**(code **)(*(int *)(g_pFileSystem + 4) + 0x18))();
  iVar3 = -((iVar5 + 0x10U & 0xfffffff0) + 0x10);
  iVar7 = (int)local_130 + iVar3;
  puVar1 = *(undefined4 **)(g_pFileSystem + 4);
  *(char **)((int)local_140 + iVar3) = pcVar4;
  *(int *)((int)&local_14c + iVar3) = g_pFileSystem + 4;
  *(int *)((int)local_140 + iVar3 + -4) = iVar5;
  *(int *)((int)local_148 + iVar3) = iVar7;
  pcVar2 = (code *)*puVar1;
  *(undefined4 *)((int)&uStack_150 + iVar3) = 0x216616;
  iVar6 = (*pcVar2)();
  iVar5 = *(int *)(g_pFileSystem + 4);
  *(char **)((int)local_148 + iVar3) = pcVar4;
  *(int *)((int)&local_14c + iVar3) = g_pFileSystem + 4;
  pcVar2 = *(code **)(iVar5 + 0xc);
  *(undefined4 *)((int)&uStack_150 + iVar3) = 0x216630;
  (*pcVar2)();
  *(undefined1 *)(iVar7 + iVar6) = 0;
  iVar5 = 0;
  do {
    *(int *)((int)&local_14c + iVar3) = iVar7;
    *(undefined4 *)((int)&uStack_150 + iVar3) = 0x216648;
    iVar7 = COM_Parse(*(char **)((int)&local_14c + iVar3));
    piVar10 = (int *)((int)&local_14c + iVar3);
    while( true ) {
      if (iVar7 == 0) goto LAB_002166e0;
      *(undefined1 **)((int)&local_14c + iVar3) = &com_token;
      *(undefined4 *)((int)&uStack_150 + iVar3) = 0x21665e;
      iVar6 = _V_strlen(*(char **)((int)&local_14c + iVar3));
      piVar10 = (int *)((int)&local_14c + iVar3);
      if ((iVar6 < 1) || (piVar10 = (int *)((int)&local_14c + iVar3), 3 < iVar5)) goto LAB_002166e0;
      *(char **)((int)&local_14c + iVar3) = "PatchVersion=";
      *(undefined4 *)((int)&uStack_150 + iVar3) = 0x216673;
      uVar8 = _V_strlen(*(char **)((int)&local_14c + iVar3));
      *(char **)((int)local_148 + iVar3) = "PatchVersion=";
      *(undefined4 *)((int)local_140 + iVar3 + -4) = uVar8;
      *(undefined1 **)((int)&local_14c + iVar3) = &com_token;
      *(undefined4 *)((int)&uStack_150 + iVar3) = 0x21668b;
      iVar6 = V_strnicmp(*(char **)((int)&local_14c + iVar3),*(char **)((int)local_148 + iVar3),
                         *(int *)((int)local_140 + iVar3 + -4));
      if (iVar6 != 0) break;
      *(char **)((int)&local_14c + iVar3) = "PatchVersion=";
      iVar5 = iVar5 + 1;
      *(undefined4 *)((int)&uStack_150 + iVar3) = 0x21669e;
      iVar6 = _V_strlen(*(char **)((int)&local_14c + iVar3));
      *(undefined4 *)((int)local_140 + iVar3 + -4) = 0xff;
      *(undefined1 **)((int)&local_14c + iVar3) = local_120;
      *(undefined1 **)((int)local_148 + iVar3) = &com_token + iVar6;
      *(undefined4 *)((int)&uStack_150 + iVar3) = 0x2166b7;
      V_strncpy(*(char **)((int)&local_14c + iVar3),*(char **)((int)local_148 + iVar3),
                *(int *)((int)local_140 + iVar3 + -4));
      *(undefined1 **)((int)local_148 + iVar3) = local_120;
      *(undefined1 **)((int)&local_14c + iVar3) = g_sVersionString;
      local_21 = 0;
      *(undefined4 *)((int)&uStack_150 + iVar3) = 0x2166cb;
      CUtlString::operator=
                (*(CUtlString **)((int)&local_14c + iVar3),*(char **)((int)local_148 + iVar3));
      *(int *)((int)&local_14c + iVar3) = iVar7;
      *(undefined4 *)((int)&uStack_150 + iVar3) = 0x2166d3;
      iVar7 = COM_Parse(*(char **)((int)&local_14c + iVar3));
      piVar10 = (int *)((int)&local_14c + iVar3);
    }
    *(char **)((int)&local_14c + iVar3) = "NetworkVersion=";
    *(undefined4 *)((int)&uStack_150 + iVar3) = 0x21670c;
    uVar8 = _V_strlen(*(char **)((int)&local_14c + iVar3));
    *(char **)((int)local_148 + iVar3) = "NetworkVersion=";
    *(undefined4 *)((int)local_140 + iVar3 + -4) = uVar8;
    *(undefined1 **)((int)&local_14c + iVar3) = &com_token;
    *(undefined4 *)((int)&uStack_150 + iVar3) = 0x216724;
    iVar6 = V_strnicmp(*(char **)((int)&local_14c + iVar3),*(char **)((int)local_148 + iVar3),
                       *(int *)((int)local_140 + iVar3 + -4));
    if (iVar6 == 0) {
      *(char **)((int)&local_14c + iVar3) = "NetworkVersion=";
      iVar5 = iVar5 + 1;
      *(undefined4 *)((int)&uStack_150 + iVar3) = 0x216737;
      iVar6 = _V_strlen(*(char **)((int)&local_14c + iVar3));
      *(undefined4 *)((int)local_140 + iVar3 + -4) = 0xff;
      *(undefined1 **)((int)&local_14c + iVar3) = local_120;
      *(undefined1 **)((int)local_148 + iVar3) = &com_token + iVar6;
      *(undefined4 *)((int)&uStack_150 + iVar3) = 0x216750;
      V_strncpy(*(char **)((int)&local_14c + iVar3),*(char **)((int)local_148 + iVar3),
                *(int *)((int)local_140 + iVar3 + -4));
      *(undefined1 **)((int)local_148 + iVar3) = local_120;
      *(undefined1 **)((int)&local_14c + iVar3) = g_sNetworkVersionString;
      local_21 = 0;
      *(undefined4 *)((int)&uStack_150 + iVar3) = 0x216764;
      CUtlString::operator=
                (*(CUtlString **)((int)&local_14c + iVar3),*(char **)((int)local_148 + iVar3));
    }
    else {
      *(char **)((int)&local_14c + iVar3) = "ProductName=";
      *(undefined4 *)((int)&uStack_150 + iVar3) = 0x21677c;
      uVar8 = _V_strlen(*(char **)((int)&local_14c + iVar3));
      *(char **)((int)local_148 + iVar3) = "ProductName=";
      *(undefined4 *)((int)local_140 + iVar3 + -4) = uVar8;
      *(undefined1 **)((int)&local_14c + iVar3) = &com_token;
      *(undefined4 *)((int)&uStack_150 + iVar3) = 0x216794;
      iVar6 = V_strnicmp(*(char **)((int)&local_14c + iVar3),*(char **)((int)local_148 + iVar3),
                         *(int *)((int)local_140 + iVar3 + -4));
      if (iVar6 == 0) {
        *(char **)((int)&local_14c + iVar3) = "ProductName=";
        iVar5 = iVar5 + 1;
        *(undefined4 *)((int)&uStack_150 + iVar3) = 0x2167a7;
        iVar6 = _V_strlen(*(char **)((int)&local_14c + iVar3));
        *(undefined4 *)((int)local_140 + iVar3 + -4) = 0xff;
        *(undefined1 **)((int)&local_14c + iVar3) = local_120;
        *(undefined1 **)((int)local_148 + iVar3) = &com_token + iVar6;
        *(undefined4 *)((int)&uStack_150 + iVar3) = 0x2167c0;
        V_strncpy(*(char **)((int)&local_14c + iVar3),*(char **)((int)local_148 + iVar3),
                  *(int *)((int)local_140 + iVar3 + -4));
        *(undefined1 **)((int)local_148 + iVar3) = local_120;
        *(undefined1 **)((int)&local_14c + iVar3) = g_sProductString;
        local_21 = 0;
        *(undefined4 *)((int)&uStack_150 + iVar3) = 0x2167d4;
        CUtlString::operator=
                  (*(CUtlString **)((int)&local_14c + iVar3),*(char **)((int)local_148 + iVar3));
      }
      else {
        *(char **)((int)&local_14c + iVar3) = "AppID=";
        *(undefined4 *)((int)&uStack_150 + iVar3) = 0x2167ec;
        uVar8 = _V_strlen(*(char **)((int)&local_14c + iVar3));
        *(char **)((int)local_148 + iVar3) = "AppID=";
        *(undefined4 *)((int)local_140 + iVar3 + -4) = uVar8;
        *(undefined1 **)((int)&local_14c + iVar3) = &com_token;
        *(undefined4 *)((int)&uStack_150 + iVar3) = 0x216804;
        iVar6 = V_strnicmp(*(char **)((int)&local_14c + iVar3),*(char **)((int)local_148 + iVar3),
                           *(int *)((int)local_140 + iVar3 + -4));
        if (iVar6 == 0) {
          *(char **)((int)&local_14c + iVar3) = "AppID=";
          iVar5 = iVar5 + 1;
          *(undefined4 *)((int)&uStack_150 + iVar3) = 0x21681b;
          iVar6 = _V_strlen(*(char **)((int)&local_14c + iVar3));
          *(undefined4 *)((int)local_140 + iVar3 + -4) = 0x1f;
          *(undefined1 **)((int)&local_14c + iVar3) = local_120;
          *(undefined1 **)((int)local_148 + iVar3) = &com_token + iVar6;
          *(undefined4 *)((int)&uStack_150 + iVar3) = 0x216834;
          V_strncpy(*(char **)((int)&local_14c + iVar3),*(char **)((int)local_148 + iVar3),
                    *(int *)((int)local_140 + iVar3 + -4));
          *(undefined4 *)((int)local_140 + iVar3 + -4) = 10;
          *(undefined4 *)((int)local_148 + iVar3) = 0;
          *(undefined1 **)((int)&local_14c + iVar3) = local_120;
          *(undefined4 *)((int)&uStack_150 + iVar3) = 0x21684c;
          uVar9 = strtol(*(char **)((int)&local_14c + iVar3),*(char ***)((int)local_148 + iVar3),
                         *(int *)((int)local_140 + iVar3 + -4));
          *local_130[0] = uVar9;
        }
      }
    }
  } while( true );
}

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)