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