SendPropUtlVector
0x000d6670 · 1377 bytes · __cdecl
_Z17SendPropUtlVectorPciiPFvPviiEi8SendPropPFS0_PKS3_PKvS7_P20CSendProxyRecipientsiE
Decompiled
undefined (7 params)
/* SendPropUtlVector(char*, int, int, void (*)(void*, int, int), int, SendProp, void* (*)(SendProp
const*, void const*, void const*, CSendProxyRecipients*, int)) */
void SendPropUtlVector(SendProp *param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
undefined4 param_5,uint param_6,int param_7,code *param_8)
{
undefined4 *puVar1;
uint uVar2;
uint uVar3;
uint *puVar4;
int iVar5;
char *pcVar6;
SendTable *pSVar7;
uint *puVar8;
SendProp *pSVar9;
int iVar10;
uint uVar11;
code *pcVar12;
undefined4 uVar13;
uint local_d4;
SendProp local_c4 [4];
undefined4 local_c0;
undefined4 local_bc;
undefined4 local_b8;
undefined4 local_b4;
undefined4 local_b0;
undefined4 local_ac;
undefined4 local_a8;
undefined4 local_a4;
undefined4 local_a0;
undefined4 local_9c;
undefined4 local_98;
undefined4 local_94;
undefined4 local_90;
SendProp local_8c;
undefined4 local_88;
undefined4 local_84;
undefined4 local_80;
undefined4 local_7c;
undefined4 local_78;
undefined4 local_74;
SendProp local_70 [4];
uint local_6c;
uint local_68;
uint local_64;
uint local_60;
uint local_5c;
uint local_58;
uint local_54;
uint local_50;
uint local_4c;
uint local_48;
uint local_44;
uint local_40;
uint local_3c;
undefined1 local_38;
uint local_34;
uint local_30;
uint local_2c;
uint local_28;
uint local_24;
uint local_20;
SendProp::SendProp(param_1);
*(undefined4 *)(param_1 + 8) = 6;
*(undefined4 *)(param_1 + 0x30) = param_2;
*(undefined4 *)(param_1 + 0x4c) = 0;
*(code **)(param_1 + 0x44) = param_8;
if ((param_8 == SendProxy_DataTableToDataTable) || (param_8 == SendProxy_DataTablePtrToDataTable))
{
*(undefined4 *)(param_1 + 0x3c) = 0x200;
}
/* try { // try from 000d66c6 to 000d673d has its CatchHandler @ 000d6c48 */
puVar1 = operator_new(0x18);
*puVar1 = 0;
puVar1[1] = 0;
puVar1[5] = param_6;
puVar1[3] = param_4;
puVar1[2] = param_5;
puVar1[4] = param_3;
if (*(int *)(param_7 + 8) == 6) {
*puVar1 = *(undefined4 *)(param_7 + 0x44);
}
else {
puVar1[1] = *(undefined4 *)(param_7 + 0x40);
}
uVar2 = param_6 + 1;
uVar3 = 0xffffffff;
if (uVar2 < 0x1840001) {
uVar3 = uVar2 * 0x54 + 4;
}
puVar4 = operator_new__(uVar3);
*puVar4 = uVar2;
local_d4 = param_6;
pSVar9 = (SendProp *)(puVar4 + 1);
if (uVar2 != 0) {
do {
/* try { // try from 000d6763 to 000d6767 has its CatchHandler @ 000d6bdb */
SendProp::SendProp(pSVar9);
local_d4 = local_d4 - 1;
pSVar9 = pSVar9 + 0x54;
} while (local_d4 != 0xffffffff);
}
/* try { // try from 000d6782 to 000d6786 has its CatchHandler @ 000d6c48 */
pSVar9 = operator_new(0x54);
/* try { // try from 000d6790 to 000d6794 has its CatchHandler @ 000d6c4c */
SendProp::SendProp(pSVar9);
if ((int)param_6 < 1) {
iVar10 = 0;
}
else {
iVar10 = 0;
uVar3 = param_6;
do {
iVar10 = iVar10 + 1;
uVar3 = (int)uVar3 >> 1;
} while (uVar3 != 0);
}
/* try { // try from 000d67bd to 000d6907 has its CatchHandler @ 000d6c48 */
iVar5 = AllocateStringHelper("lengthprop%d",param_6);
SendPropInt((char *)local_c4,iVar5,0,0,iVar10,
(_func_void_SendProp_ptr_void_ptr_void_ptr_DVariant_ptr_int_int *)&DAT_00000001,'0');
*(undefined4 *)(pSVar9 + 4) = local_c0;
*(undefined4 *)(pSVar9 + 8) = local_bc;
*(undefined4 *)(pSVar9 + 0xc) = local_b8;
*(undefined4 *)(pSVar9 + 0x10) = local_b4;
*(undefined4 *)(pSVar9 + 0x14) = local_b0;
*(undefined4 *)(pSVar9 + 0x18) = local_ac;
*(undefined4 *)(pSVar9 + 0x1c) = local_a8;
*(undefined4 *)(pSVar9 + 0x20) = local_a4;
*(undefined4 *)(pSVar9 + 0x24) = local_a0;
*(undefined4 *)(pSVar9 + 0x28) = local_9c;
*(undefined4 *)(pSVar9 + 0x2c) = local_98;
*(undefined4 *)(pSVar9 + 0x30) = local_94;
*(undefined4 *)(pSVar9 + 0x34) = local_90;
pSVar9[0x38] = local_8c;
*(undefined4 *)(pSVar9 + 0x3c) = local_88;
*(undefined4 *)(pSVar9 + 0x40) = local_84;
*(undefined4 *)(pSVar9 + 0x44) = local_80;
*(undefined4 *)(pSVar9 + 0x48) = local_7c;
*(undefined4 *)(pSVar9 + 0x4c) = local_78;
*(undefined4 *)(pSVar9 + 0x50) = local_74;
SendProp::~SendProp(local_c4);
*(undefined4 **)(pSVar9 + 0x50) = puVar1;
pcVar6 = (char *)AllocateUniqueDataTableName(true,"_LPT_%s_%d",param_2,param_6);
pSVar7 = operator_new(0x14);
/* try { // try from 000d6927 to 000d692b has its CatchHandler @ 000d6c25 */
SendTable::SendTable(pSVar7,pSVar9,1,pcVar6);
uVar13 = 0x80;
pcVar12 = SendProxy_LengthTable;
/* try { // try from 000d695c to 000d6b88 has its CatchHandler @ 000d6c48 */
SendPropDataTable((char *)local_70,0x2a3c28,(SendTable *)0x0,
(_func_void_ptr_SendProp_ptr_void_ptr_void_ptr_CSendProxyRecipients_ptr_int *)
pSVar7,'`');
puVar4[2] = local_6c;
puVar4[3] = local_68;
puVar4[4] = local_64;
puVar4[5] = local_60;
puVar4[6] = local_5c;
puVar4[7] = local_58;
puVar4[8] = local_54;
puVar4[9] = local_50;
puVar4[10] = local_4c;
puVar4[0xb] = local_48;
puVar4[0xc] = local_44;
puVar4[0xd] = local_40;
puVar4[0xe] = local_3c;
*(undefined1 *)(puVar4 + 0xf) = local_38;
puVar4[0x10] = local_34;
puVar4[0x11] = local_30;
puVar4[0x12] = local_2c;
puVar4[0x13] = local_28;
puVar4[0x14] = local_24;
puVar4[0x15] = local_20;
SendProp::~SendProp(local_70);
puVar4[0x15] = (uint)puVar1;
uVar3 = AllocateStringHelper("%s",param_2);
if (0 < (int)param_6) {
iVar10 = 0;
uVar11 = 0;
puVar8 = puVar4;
do {
while( true ) {
puVar8[0x17] = *(uint *)(param_7 + 4);
puVar8[0x18] = *(uint *)(param_7 + 8);
puVar8[0x19] = *(uint *)(param_7 + 0xc);
puVar8[0x1a] = *(uint *)(param_7 + 0x10);
puVar8[0x1b] = *(uint *)(param_7 + 0x14);
puVar8[0x1c] = *(uint *)(param_7 + 0x18);
puVar8[0x1d] = *(uint *)(param_7 + 0x1c);
puVar8[0x1e] = *(uint *)(param_7 + 0x20);
puVar8[0x1f] = *(uint *)(param_7 + 0x24);
puVar8[0x20] = *(uint *)(param_7 + 0x28);
puVar8[0x21] = *(uint *)(param_7 + 0x2c);
puVar8[0x22] = *(uint *)(param_7 + 0x30);
puVar8[0x23] = *(uint *)(param_7 + 0x34);
*(undefined1 *)(puVar8 + 0x24) = *(undefined1 *)(param_7 + 0x38);
puVar8[0x25] = *(uint *)(param_7 + 0x3c);
puVar8[0x26] = *(uint *)(param_7 + 0x40);
puVar8[0x27] = *(uint *)(param_7 + 0x44);
puVar8[0x28] = *(uint *)(param_7 + 0x48);
puVar8[0x29] = *(uint *)(param_7 + 0x4c);
puVar8[0x2a] = *(uint *)(param_7 + 0x50);
*(undefined4 *)((int)puVar4 + iVar10 + 0xa4) = 0;
puVar8[0x22] = (uint)(&s_ElementNames)[uVar11];
puVar8[0x21] = uVar3;
*(undefined4 **)((int)puVar4 + iVar10 + 0xa8) = puVar1;
puVar8[0x1f] = uVar11;
if (*(int *)(param_7 + 8) != 6) break;
uVar11 = uVar11 + 1;
puVar8 = puVar8 + 0x15;
*(code **)((int)puVar4 + iVar10 + 0x9c) = SendProxy_UtlVectorElement_DataTable;
*(undefined4 *)((int)puVar4 + iVar10 + 0x94) = 0x200;
iVar10 = iVar10 + 0x54;
if (uVar11 == param_6) goto LAB_000d6b59;
}
uVar11 = uVar11 + 1;
puVar8 = puVar8 + 0x15;
*(code **)((int)puVar4 + iVar10 + 0x98) = SendProxy_UtlVectorElement;
iVar10 = iVar10 + 0x54;
} while (uVar11 != param_6);
}
LAB_000d6b59:
pcVar6 = (char *)AllocateUniqueDataTableName(true,"_ST_%s_%d",param_2,param_6,pcVar12,uVar13);
pSVar7 = operator_new(0x14);
/* try { // try from 000d6ba6 to 000d6baa has its CatchHandler @ 000d6c4e */
SendTable::SendTable(pSVar7,(SendProp *)(puVar4 + 1),uVar2,pcVar6);
*(SendTable **)(param_1 + 0x48) = pSVar7;
return;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
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.
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.