L L4D2node

WriteRemoteVProfGroupData

0x0022f7d0 · 1250 bytes · __cdecl

_Z25WriteRemoteVProfGroupDataR17VProfListenInfo_t

Decompiled

undefined (1 param)

/* WriteRemoteVProfGroupData(VProfListenInfo_t&) */

void WriteRemoteVProfGroupData(VProfListenInfo_t *param_1)

{
  char *pcVar1;
  undefined4 uVar2;
  int iVar3;
  byte *pbVar4;
  byte bVar5;
  VProfListenInfo_t VVar6;
  char cVar7;
  int iVar8;
  int iVar9;
  int in_GS_OFFSET;
  undefined *apuStack_b0 [2];
  int aiStack_a8 [5];
  VProfListenInfo_t *local_94;
  byte *local_90;
  VProfListenInfo_t *local_8c;
  int local_88;
  int local_84;
  int local_80;
  byte local_70 [4];
  byte local_6c [4];
  undefined4 local_68;
  VProfListenInfo_t local_64;
  undefined1 local_63;
  undefined1 local_62;
  undefined1 local_61;
  undefined4 local_60;
  byte local_5c;
  undefined1 local_5b;
  undefined1 local_5a;
  undefined1 local_59;
  int local_58 [4];
  int local_48;
  byte local_43;
  undefined4 local_3c;
  int local_38;
  byte local_24;
  int local_20;
  
  local_94 = param_1;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  apuStack_b0[1] = g_pVProfileForDisplay;
  apuStack_b0[0] = (undefined *)0x22f7ff;
  iVar8 = CVProfile::GetNumBudgetGroups();
  local_90 = *(byte **)(param_1 + 0x14);
  iVar3 = -((iVar8 * 4 + 0xfU & 0xfffffff0) + 0x10);
  local_88 = (int)&local_90 + iVar3;
  if (0 < iVar8) {
    local_8c = param_1 + 8;
    iVar9 = 0;
    local_84 = 0;
    local_80 = iVar8;
    do {
      while( true ) {
        pcVar1 = *(char **)(*(int *)(g_pVProfileForDisplay + 0x10a0) + iVar9 * 8);
        *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22f86f;
        iVar8 = FindSentGroupIndex(param_1,pcVar1);
        if (-1 < iVar8) break;
        *(undefined4 *)((int)aiStack_a8 + iVar3) = *(undefined4 *)(param_1 + 0x14);
        *(VProfListenInfo_t **)((int)aiStack_a8 + iVar3 + -4) = local_8c;
        *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22f888;
        iVar8 = CUtlVector<CUtlString,CUtlMemory<CUtlString,int>>::InsertBefore
                          (*(CUtlVector<CUtlString,CUtlMemory<CUtlString,int>> **)
                            ((int)aiStack_a8 + iVar3 + -4),*(int *)((int)aiStack_a8 + iVar3));
        *(char **)((int)aiStack_a8 + iVar3) = pcVar1;
        *(int *)((int)aiStack_a8 + iVar3 + -4) = iVar8 * 0x10 + *(int *)(param_1 + 8);
        *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22f89a;
        CUtlString::operator=
                  (*(CUtlString **)((int)aiStack_a8 + iVar3 + -4),
                   *(char **)((int)aiStack_a8 + iVar3));
        *(int *)(local_88 + local_84 * 4) = iVar9;
        iVar9 = iVar9 + 1;
        local_84 = local_84 + 1;
        if (iVar9 == local_80) goto LAB_0022f8b8;
      }
      iVar9 = iVar9 + 1;
    } while (iVar9 != local_80);
LAB_0022f8b8:
    if (local_84 != 0) {
      *(undefined4 *)((int)aiStack_a8 + iVar3 + 8) = 0;
      *(undefined4 *)((int)aiStack_a8 + iVar3 + 4) = 0x400;
      *(undefined4 *)((int)aiStack_a8 + iVar3) = 0x400;
      *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
      *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22f903;
      CUtlBuffer::CUtlBuffer
                (*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4),*(int *)((int)aiStack_a8 + iVar3),
                 *(int *)((int)aiStack_a8 + iVar3 + 4),*(int *)((int)aiStack_a8 + iVar3 + 8));
      pbVar4 = local_90;
      if ((local_43 & 1) == 0) {
        *(undefined4 *)((int)aiStack_a8 + iVar3) = 4;
        *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
        local_68 = pbVar4;
        *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22fb7a;
        cVar7 = CUtlBuffer::CheckPut
                          (*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4),
                           *(int *)((int)aiStack_a8 + iVar3));
        if (cVar7 != '\0') {
          if ((local_24 & 1) == 0) {
            *(byte **)(local_58[0] + (local_48 - local_38)) = local_90;
          }
          else {
            iVar8 = (local_48 - local_38) + local_58[0];
            if (iVar8 != 0) {
              VVar6 = local_68._3_1_;
              *(undefined4 *)((int)aiStack_a8 + iVar3 + 4) = 4;
              *(int *)((int)aiStack_a8 + iVar3 + -4) = iVar8;
              local_64 = VVar6;
              local_63 = local_68._2_1_;
              local_62 = local_68._1_1_;
              local_61 = (undefined1)local_68;
              *(VProfListenInfo_t **)((int)aiStack_a8 + iVar3) = &local_64;
              *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22fbcc;
              _V_memcpy(*(void **)((int)aiStack_a8 + iVar3 + -4),*(void **)((int)aiStack_a8 + iVar3)
                        ,*(int *)((int)aiStack_a8 + iVar3 + 4));
            }
          }
          *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
          local_48 = local_48 + 4;
          *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22fbdd;
          CUtlBuffer::AddNullTermination(*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4));
        }
      }
      else {
        *(byte **)((int)aiStack_a8 + iVar3 + 4) = local_90;
        *(undefined **)((int)aiStack_a8 + iVar3) = &DAT_002ad982;
        *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
                    /* try { // try from 0022f922 to 0022fc97 has its CatchHandler @ 0022fccb */
        *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22f927;
        CUtlBuffer::Printf(*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4),
                           *(char **)((int)aiStack_a8 + iVar3));
      }
      iVar8 = local_84;
      if ((local_43 & 1) == 0) {
        *(undefined4 *)((int)aiStack_a8 + iVar3) = 4;
        *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
        local_60 = iVar8;
        *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22fc39;
        cVar7 = CUtlBuffer::CheckPut
                          (*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4),
                           *(int *)((int)aiStack_a8 + iVar3));
        if (cVar7 != '\0') {
          if ((local_24 & 1) == 0) {
            *(int *)(local_58[0] + (local_48 - local_38)) = local_84;
          }
          else {
            iVar8 = (local_48 - local_38) + local_58[0];
            if (iVar8 != 0) {
              bVar5 = local_60._3_1_;
              *(undefined4 *)((int)aiStack_a8 + iVar3 + 4) = 4;
              *(int *)((int)aiStack_a8 + iVar3 + -4) = iVar8;
              local_5c = bVar5;
              local_5b = local_60._2_1_;
              local_5a = local_60._1_1_;
              local_59 = (undefined1)local_60;
              *(byte **)((int)aiStack_a8 + iVar3) = &local_5c;
              *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22fc87;
              _V_memcpy(*(void **)((int)aiStack_a8 + iVar3 + -4),*(void **)((int)aiStack_a8 + iVar3)
                        ,*(int *)((int)aiStack_a8 + iVar3 + 4));
            }
          }
          *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
          local_48 = local_48 + 4;
          *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22fc98;
          CUtlBuffer::AddNullTermination(*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4));
        }
      }
      else {
        *(undefined **)((int)aiStack_a8 + iVar3) = &DAT_002ad982;
        *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
        *(int *)((int)aiStack_a8 + iVar3 + 4) = iVar8;
        *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22f948;
        CUtlBuffer::Printf(*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4),
                           *(char **)((int)aiStack_a8 + iVar3));
      }
      local_80 = 0;
      local_8c = &local_64;
      local_90 = &local_5c;
      do {
        pbVar4 = local_90;
        iVar8 = *(int *)(local_88 + local_80 * 4);
        *(int *)((int)aiStack_a8 + iVar3) = iVar8;
        *(byte **)((int)aiStack_a8 + iVar3 + 0x10) = pbVar4;
        *(VProfListenInfo_t **)((int)aiStack_a8 + iVar3 + 0xc) = local_8c;
        *(byte **)((int)aiStack_a8 + iVar3 + 8) = local_6c;
        *(byte **)((int)aiStack_a8 + iVar3 + 4) = local_70;
        *(undefined **)((int)aiStack_a8 + iVar3 + -4) = g_pVProfileForDisplay;
        *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22fa53;
        CVProfile::GetBudgetGroupColor
                  (*(int *)((int)aiStack_a8 + iVar3 + -4),*(int **)((int)aiStack_a8 + iVar3),
                   *(int **)((int)aiStack_a8 + iVar3 + 4),*(int **)((int)aiStack_a8 + iVar3 + 8),
                   *(int **)((int)aiStack_a8 + iVar3 + 0xc));
        bVar5 = local_70[0];
        if ((local_43 & 1) == 0) {
          *(undefined4 *)((int)aiStack_a8 + iVar3) = 1;
          *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
          *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22fa71;
          cVar7 = CUtlBuffer::CheckPut
                            (*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4),
                             *(int *)((int)aiStack_a8 + iVar3));
          if (cVar7 == '\0') goto LAB_0022f984;
          *(byte *)(local_58[0] + (local_48 - local_38)) = bVar5;
          local_48 = local_48 + 1;
          *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
          *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22fa93;
          CUtlBuffer::AddNullTermination(*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4));
          if ((local_43 & 1) != 0) goto LAB_0022f992;
LAB_0022faa8:
          bVar5 = local_6c[0];
          *(undefined4 *)((int)aiStack_a8 + iVar3) = 1;
          *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
          *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22fab8;
          cVar7 = CUtlBuffer::CheckPut
                            (*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4),
                             *(int *)((int)aiStack_a8 + iVar3));
          if (cVar7 == '\0') goto LAB_0022f9a6;
          *(byte *)(local_58[0] + (local_48 - local_38)) = bVar5;
          local_48 = local_48 + 1;
          *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
          *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22fada;
          CUtlBuffer::AddNullTermination(*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4));
          if ((local_43 & 1) != 0) goto LAB_0022f9b4;
LAB_0022faf0:
          VVar6 = local_64;
          *(undefined4 *)((int)aiStack_a8 + iVar3) = 1;
          *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
          *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22fb00;
          cVar7 = CUtlBuffer::CheckPut
                            (*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4),
                             *(int *)((int)aiStack_a8 + iVar3));
          if (cVar7 == '\0') goto LAB_0022f9c8;
          *(VProfListenInfo_t *)(local_58[0] + (local_48 - local_38)) = VVar6;
          local_48 = local_48 + 1;
          *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
          *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22fb22;
          CUtlBuffer::AddNullTermination(*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4));
          if ((local_43 & 1) != 0) goto LAB_0022f9d6;
LAB_0022fb30:
          bVar5 = local_5c;
          *(undefined4 *)((int)aiStack_a8 + iVar3) = 1;
          *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
          *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22fb40;
          cVar7 = CUtlBuffer::CheckPut
                            (*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4),
                             *(int *)((int)aiStack_a8 + iVar3));
          if (cVar7 != '\0') {
            *(byte *)(local_58[0] + (local_48 - local_38)) = bVar5;
            local_48 = local_48 + 1;
            *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
            *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22fb62;
            CUtlBuffer::AddNullTermination(*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4));
          }
        }
        else {
          *(uint *)((int)aiStack_a8 + iVar3 + 4) = (uint)local_70[0];
          *(undefined **)((int)aiStack_a8 + iVar3) = &DAT_002b1114;
          *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
          *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22f984;
          CUtlBuffer::Printf(*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4),
                             *(char **)((int)aiStack_a8 + iVar3));
LAB_0022f984:
          if ((local_43 & 1) == 0) goto LAB_0022faa8;
LAB_0022f992:
          *(uint *)((int)aiStack_a8 + iVar3 + 4) = (uint)local_6c[0];
          *(undefined **)((int)aiStack_a8 + iVar3) = &DAT_002b1114;
          *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
          *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22f9a6;
          CUtlBuffer::Printf(*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4),
                             *(char **)((int)aiStack_a8 + iVar3));
LAB_0022f9a6:
          if ((local_43 & 1) == 0) goto LAB_0022faf0;
LAB_0022f9b4:
          *(uint *)((int)aiStack_a8 + iVar3 + 4) = (uint)(byte)local_64;
          *(undefined **)((int)aiStack_a8 + iVar3) = &DAT_002b1114;
          *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
          *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22f9c8;
          CUtlBuffer::Printf(*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4),
                             *(char **)((int)aiStack_a8 + iVar3));
LAB_0022f9c8:
          if ((local_43 & 1) == 0) goto LAB_0022fb30;
LAB_0022f9d6:
          *(uint *)((int)aiStack_a8 + iVar3 + 4) = (uint)local_5c;
          *(undefined **)((int)aiStack_a8 + iVar3) = &DAT_002b1114;
          *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
          *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22f9ea;
          CUtlBuffer::Printf(*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4),
                             *(char **)((int)aiStack_a8 + iVar3));
        }
        uVar2 = *(undefined4 *)(*(int *)(g_pVProfileForDisplay + 0x10a0) + iVar8 * 8);
        *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
        *(undefined4 *)((int)aiStack_a8 + iVar3) = uVar2;
        *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22fa04;
        CUtlBuffer::PutString
                  (*(CUtlBuffer **)((int)aiStack_a8 + iVar3 + -4),
                   *(char **)((int)aiStack_a8 + iVar3));
        local_80 = local_80 + 1;
      } while (local_80 < local_84);
      *(undefined4 *)((int)aiStack_a8 + iVar3 + 4) = 1;
      *(undefined4 *)((int)aiStack_a8 + iVar3 + 0xc) = local_3c;
      *(int *)((int)aiStack_a8 + iVar3 + 8) = local_58[0];
      uVar2 = *(undefined4 *)local_94;
      *(undefined1 **)((int)aiStack_a8 + iVar3 + -4) = g_ServerRemoteAccess;
      *(undefined4 *)((int)aiStack_a8 + iVar3) = uVar2;
      *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22fc16;
      CServerRemoteAccess::SendVProfData
                (*(uint *)((int)aiStack_a8 + iVar3 + -4),*(bool *)((int)aiStack_a8 + iVar3),
                 *(void **)((int)aiStack_a8 + iVar3 + 4),*(int *)((int)aiStack_a8 + iVar3 + 8));
      *(int **)((int)aiStack_a8 + iVar3 + -4) = local_58;
      *(undefined4 *)((int)apuStack_b0 + iVar3) = 0x22fc1e;
      CUtlMemory<unsigned_char,int>::Purge
                (*(CUtlMemory<unsigned_char,int> **)((int)aiStack_a8 + iVar3 + -4));
    }
  }
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    *(undefined **)((int)apuStack_b0 + iVar3) = &UNK_0022fce2;
    __stack_chk_fail();
  }
  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)