L L4D2node

CServerRemoteAccess::LookupValue

0x0020f010 · 1582 bytes · __thiscall

_ZN19CServerRemoteAccess11LookupValueEPKcR10CUtlBuffer

Decompiled

undefined (3 params)

/* CServerRemoteAccess::LookupValue(char const*, CUtlBuffer&) */

undefined4 __thiscall
CServerRemoteAccess::LookupValue(CServerRemoteAccess *this,char *param_1,CUtlBuffer *param_2)

{
  int iVar1;
  code *pcVar2;
  undefined4 *puVar3;
  int iVar4;
  char cVar5;
  char *pcVar6;
  undefined4 uVar7;
  int iVar8;
  uint uVar9;
  void *pvVar10;
  undefined1 *puVar11;
  int iVar12;
  int in_GS_OFFSET;
  longdouble lVar13;
  undefined4 uStackY_250;
  int local_240 [3];
  undefined8 local_234;
  undefined4 local_22c;
  ConVarRef local_228;
  undefined1 local_227;
  undefined1 local_226;
  undefined1 local_225;
  char local_220 [512];
  int local_20;
  
  puVar11 = &stack0xfffffdb4;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  uStackY_250 = 0x20f03c;
  pcVar6 = (char *)LookupStringValue(this,param_1);
  if (pcVar6 == (char *)0x0) {
    uStackY_250 = 0x20f118;
    iVar12 = _V_stricmp(param_1,"stats");
    if (iVar12 == 0) {
      uStackY_250 = 0x20f29a;
      GetStatsString(this,local_220,0x200);
      uStackY_250 = 0x20f2a6;
      CUtlBuffer::PutString(param_2,local_220);
      if (((((byte)param_2[0x15] & 1) != 0) && (*(int *)(param_2 + 0x10) != 0)) &&
         (*(char *)(*(int *)param_2 + ((*(int *)(param_2 + 0x10) + -1) - *(int *)(param_2 + 0x20)))
          == '\n')) {
        iVar12 = 0;
        if (((byte)param_2[0x15] & 0x10) == 0) {
          iVar12 = *(int *)(param_2 + 0x18);
        }
        while (iVar12 = iVar12 + -1, -1 < iVar12) {
          uStackY_250 = 0x20f2e5;
          cVar5 = CUtlBuffer::CheckPut(param_2,1);
          if (cVar5 != '\0') {
            *(undefined1 *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20)))
                 = 9;
            *(int *)(param_2 + 0x10) = *(int *)(param_2 + 0x10) + 1;
            uStackY_250 = 0x20f301;
            CUtlBuffer::AddNullTermination(param_2);
          }
        }
      }
LAB_0020f308:
      uStackY_250 = 0x20f318;
      cVar5 = CUtlBuffer::CheckPut(param_2,1);
      puVar11 = &stack0xfffffdb4;
      if (cVar5 != '\0') {
        *(undefined1 *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) = 0
        ;
        *(int *)(param_2 + 0x10) = *(int *)(param_2 + 0x10) + 1;
        uStackY_250 = 0x20f338;
        CUtlBuffer::AddNullTermination(param_2);
        puVar11 = &stack0xfffffdb4;
      }
    }
    else {
      uStackY_250 = 0x20f130;
      iVar12 = _V_stricmp(param_1,"banlist");
      if (iVar12 == 0) {
        uVar7 = 1;
        uStackY_250 = 0x20f351;
        GetUserBanList(this,param_2);
        goto LAB_0020f073;
      }
      uStackY_250 = 0x20f148;
      iVar12 = _V_stricmp(param_1,"playerlist");
      if (iVar12 == 0) {
        uVar7 = 1;
        uStackY_250 = 0x20f367;
        GetPlayerList(this,param_2);
        puVar11 = &stack0xfffffdb4;
        goto LAB_0020f073;
      }
      uStackY_250 = 0x20f160;
      iVar12 = _V_stricmp(param_1,"maplist");
      if (iVar12 == 0) {
        uVar7 = 1;
        uStackY_250 = 0x20f37d;
        GetMapList(this,param_2);
        puVar11 = &stack0xfffffdb4;
        goto LAB_0020f073;
      }
      uStackY_250 = 0x20f178;
      iVar12 = _V_stricmp(param_1,"uptime");
      if (iVar12 == 0) {
        uStackY_250 = 0x20f387;
        lVar13 = (longdouble)Plat_FloatTime();
        local_234 = (double)lVar13;
        if (((byte)param_2[0x15] & 1) == 0) {
          uStackY_250 = 0x20f590;
          local_22c = (int)lVar13;
          cVar5 = CUtlBuffer::CheckPut(param_2,4);
          if (cVar5 != '\0') {
            if (((byte)param_2[0x34] & 1) == 0) {
              *(int *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) =
                   (int)lVar13;
            }
            else {
              pvVar10 = (void *)((*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20)) +
                                *(int *)param_2);
              if (pvVar10 != (void *)0x0) {
                local_228 = local_22c._3_1_;
                local_227 = local_22c._2_1_;
                local_226 = local_22c._1_1_;
                local_225 = (undefined1)local_22c;
                uStackY_250 = 0x20f612;
                _V_memcpy(pvVar10,&local_228,4);
              }
            }
            *(int *)(param_2 + 0x10) = *(int *)(param_2 + 0x10) + 4;
            uStackY_250 = 0x20f5b5;
            CUtlBuffer::AddNullTermination(param_2);
          }
        }
        else {
          uStackY_250 = 0x20f3b7;
          CUtlBuffer::Printf(param_2,"%d");
        }
        if (((((byte)param_2[0x15] & 1) != 0) && (*(int *)(param_2 + 0x10) != 0)) &&
           (*(char *)(*(int *)param_2 + ((*(int *)(param_2 + 0x10) + -1) - *(int *)(param_2 + 0x20))
                     ) == '\n')) {
          iVar12 = 0;
          if (((byte)param_2[0x15] & 0x10) == 0) {
            iVar12 = *(int *)(param_2 + 0x18);
          }
          while (iVar12 = iVar12 + -1, -1 < iVar12) {
            uStackY_250 = 0x20f409;
            cVar5 = CUtlBuffer::CheckPut(param_2,1);
            if (cVar5 != '\0') {
              *(undefined1 *)
               (*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) = 9;
              *(int *)(param_2 + 0x10) = *(int *)(param_2 + 0x10) + 1;
              uStackY_250 = 0x20f425;
              CUtlBuffer::AddNullTermination(param_2);
            }
          }
        }
        goto LAB_0020f058;
      }
      uStackY_250 = 0x20f190;
      iVar12 = _V_stricmp(param_1,"ipaddress");
      if (iVar12 == 0) {
        uStackY_250 = 0x20f434;
        uVar9 = NET_GetUDPPort(DAT_003b7f68);
        uStackY_250 = 0x20f44b;
        local_240[0] = netadr_s::ToString((netadr_s *)&net_local_adr,true);
        uStackY_250 = 0x20f471;
        local_240[1] = uVar9 & 0xffff;
        V_snprintf(local_220,0x19,"%s:%i");
        uStackY_250 = 0x20f47d;
        CUtlBuffer::PutString(param_2,local_220);
        if (((((byte)param_2[0x15] & 1) != 0) && (*(int *)(param_2 + 0x10) != 0)) &&
           (*(char *)(*(int *)param_2 + ((*(int *)(param_2 + 0x10) + -1) - *(int *)(param_2 + 0x20))
                     ) == '\n')) {
          iVar12 = 0;
          if (((byte)param_2[0x15] & 0x10) == 0) {
            iVar12 = *(int *)(param_2 + 0x18);
          }
          while (iVar12 = iVar12 + -1, -1 < iVar12) {
            uStackY_250 = 0x20f4c8;
            cVar5 = CUtlBuffer::CheckPut(param_2,1);
            if (cVar5 != '\0') {
              *(undefined1 *)
               (*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) = 9;
              *(int *)(param_2 + 0x10) = *(int *)(param_2 + 0x10) + 1;
              uStackY_250 = 0x20f4e4;
              CUtlBuffer::AddNullTermination(param_2);
            }
          }
        }
        goto LAB_0020f308;
      }
      uStackY_250 = 0x20f1a8;
      iVar12 = _V_stricmp(param_1,"mapcycle");
      if (iVar12 != 0) {
        if (((((byte)param_2[0x15] & 1) != 0) && (*(int *)(param_2 + 0x10) != 0)) &&
           (*(char *)(*(int *)param_2 + ((*(int *)(param_2 + 0x10) + -1) - *(int *)(param_2 + 0x20))
                     ) == '\n')) {
          iVar12 = 0;
          if (((byte)param_2[0x15] & 0x10) == 0) {
            iVar12 = *(int *)(param_2 + 0x18);
          }
          while (iVar12 = iVar12 + -1, -1 < iVar12) {
            uStackY_250 = 0x20f523;
            cVar5 = CUtlBuffer::CheckPut(param_2,1);
            if (cVar5 != '\0') {
              *(undefined1 *)
               (*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) = 9;
              *(int *)(param_2 + 0x10) = *(int *)(param_2 + 0x10) + 1;
              uStackY_250 = 0x20f53f;
              CUtlBuffer::AddNullTermination(param_2);
            }
          }
        }
        uStackY_250 = 0x20f551;
        uVar7 = CUtlBuffer::CheckPut(param_2,1);
        puVar11 = &stack0xfffffdb4;
        if ((char)uVar7 != '\0') {
          uVar7 = 0;
          *(undefined1 *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) =
               0;
          *(int *)(param_2 + 0x10) = *(int *)(param_2 + 0x10) + 1;
          uStackY_250 = 0x20f575;
          CUtlBuffer::AddNullTermination(param_2);
          puVar11 = &stack0xfffffdb4;
        }
        goto LAB_0020f073;
      }
      uStackY_250 = 0x20f1c6;
      ConVarRef::ConVarRef(&local_228,"mapcyclefile");
      uStackY_250 = 0x20f1ce;
      uVar7 = ConVarRef::IsValid(&local_228);
      puVar11 = &stack0xfffffdb4;
      if ((char)uVar7 == '\0') goto LAB_0020f06e;
      local_240[0] = 0;
      uStackY_250 = 0x20f206;
      iVar12 = (**(code **)(*(int *)(g_pFileSystem + 4) + 8))();
      puVar11 = &stack0xfffffdb4;
      if (iVar12 == 0) goto LAB_0020f073;
      uStackY_250 = 0x20f225;
      iVar8 = (**(code **)(*(int *)(g_pFileSystem + 4) + 0x18))();
      iVar4 = -((iVar8 + 0x10U & 0xfffffff0) + 0x10);
      iVar1 = (int)&local_234 + iVar4 + 4;
      if (iVar8 == 0) {
LAB_0020f241:
        *(undefined1 **)(&stack0xfffffdb8 + iVar4) = &DAT_002c79d4;
      }
      else {
        local_234 = (double)CONCAT44(local_234._4_4_,iVar8);
        puVar3 = *(undefined4 **)(g_pFileSystem + 4);
        *(int *)(&stack0xfffffdbc + iVar4) = iVar8;
        *(int *)((int)local_240 + iVar4) = iVar12;
        *(int *)(&stack0xfffffdb8 + iVar4) = iVar1;
        *(int *)(&stack0xfffffdb4 + iVar4) = g_pFileSystem + 4;
        pcVar2 = (code *)*puVar3;
        *(undefined4 *)((int)&uStackY_250 + iVar4) = 0x20f63b;
        iVar8 = (*pcVar2)();
        if (iVar8 == 0) goto LAB_0020f241;
        *(undefined1 *)(iVar1 + (int)local_234) = 0;
        *(int *)(&stack0xfffffdb8 + iVar4) = iVar1;
      }
      *(CUtlBuffer **)(&stack0xfffffdb4 + iVar4) = param_2;
      *(undefined4 *)((int)&uStackY_250 + iVar4) = 0x20f251;
      CUtlBuffer::PutString
                (*(CUtlBuffer **)(&stack0xfffffdb4 + iVar4),*(char **)(&stack0xfffffdb8 + iVar4));
      *(undefined4 *)(&stack0xfffffdb8 + iVar4) = 0;
      *(CUtlBuffer **)(&stack0xfffffdb4 + iVar4) = param_2;
      *(undefined4 *)((int)&uStackY_250 + iVar4) = 0x20f261;
      CUtlBuffer::PutChar(*(CUtlBuffer **)(&stack0xfffffdb4 + iVar4),(&stack0xfffffdb8)[iVar4]);
      iVar1 = *(int *)(g_pFileSystem + 4);
      *(int *)(&stack0xfffffdb8 + iVar4) = iVar12;
      *(int *)(&stack0xfffffdb4 + iVar4) = g_pFileSystem + 4;
      pcVar2 = *(code **)(iVar1 + 0xc);
      *(undefined4 *)((int)&uStackY_250 + iVar4) = 0x20f276;
      (*pcVar2)();
      puVar11 = &stack0xfffffdb4 + iVar4;
    }
  }
  else {
    uStackY_250 = 0x20f050;
    CUtlBuffer::PutString(param_2,pcVar6);
    if (((((byte)param_2[0x15] & 1) != 0) && (*(int *)(param_2 + 0x10) != 0)) &&
       (*(char *)(*(int *)param_2 + ((*(int *)(param_2 + 0x10) + -1) - *(int *)(param_2 + 0x20))) ==
        '\n')) {
      iVar12 = 0;
      if (((byte)param_2[0x15] & 0x10) == 0) {
        iVar12 = *(int *)(param_2 + 0x18);
      }
      while (iVar12 = iVar12 + -1, -1 < iVar12) {
        uStackY_250 = 0x20f0c5;
        cVar5 = CUtlBuffer::CheckPut(param_2,1);
        if (cVar5 != '\0') {
          *(undefined1 *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) =
               9;
          *(int *)(param_2 + 0x10) = *(int *)(param_2 + 0x10) + 1;
          uStackY_250 = 0x20f0e1;
          CUtlBuffer::AddNullTermination(param_2);
        }
      }
    }
LAB_0020f058:
    uStackY_250 = 0x20f068;
    uVar7 = CUtlBuffer::CheckPut(param_2,1);
    puVar11 = &stack0xfffffdb4;
    if ((char)uVar7 != '\0') {
      *(undefined1 *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) = 0;
      *(int *)(param_2 + 0x10) = *(int *)(param_2 + 0x10) + 1;
      uStackY_250 = 0x20f100;
      CUtlBuffer::AddNullTermination(param_2);
      puVar11 = &stack0xfffffdb4;
      goto LAB_0020f073;
    }
  }
LAB_0020f06e:
  uVar7 = 1;
LAB_0020f073:
  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
    return uVar7;
  }
                    /* WARNING: Subroutine does not return */
  *(undefined4 *)(puVar11 + -4) = 0x20f619;
  __stack_chk_fail();
}

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)