SendPropArray3
0x0058ff50 · 964 bytes · __cdecl
_Z14SendPropArray3PKciii8SendPropPFPvPKS1_PKvS6_P20CSendProxyRecipientsiEh
Decompiled
undefined (7 params)
/* SendPropArray3(char const*, int, int, int, SendProp, void* (*)(SendProp const*, void const*, void
const*, CSendProxyRecipients*, int), unsigned char) */
undefined4 *
SendPropArray3(undefined4 *param_1,uint param_2,undefined4 param_3,int param_4,uint param_5,
int param_6,code *param_7,undefined1 param_8)
{
uint uVar1;
undefined4 *puVar2;
uint uVar3;
uint *puVar4;
uint *puVar5;
int *piVar6;
uint *puVar7;
uint local_20;
*param_1 = &PTR__SendProp_00c54c98;
param_1[0x12] = 0;
param_1[0x10] = 0;
param_1[10] = 0;
param_1[0xb] = 0;
param_1[0xf] = 0;
param_1[3] = 0;
param_1[4] = 0;
param_1[5] = 0;
param_1[0xd] = 0;
param_1[6] = 0;
param_1[7] = 0;
param_1[8] = 1;
param_1[9] = 0xffffffff;
param_1[1] = 0;
*(undefined1 *)(param_1 + 0xe) = 0x80;
param_1[2] = 6;
param_1[0xc] = param_2;
param_1[0x11] = param_7;
param_1[0x13] = param_3;
/* try { // try from 0058fff4 to 005902d2 has its CatchHandler @ 00590314 */
puVar2 = operator_new(0x54);
puVar2[2] = 0;
puVar2[3] = 0;
puVar2[4] = 0;
puVar2[5] = 0;
puVar2[6] = 0;
puVar2[1] = 0;
*puVar2 = &PTR__SendProp_00c54c98;
puVar2[0xc] = 0;
puVar2[0x13] = 0;
puVar2[0x12] = 0;
puVar2[0x10] = 0;
puVar2[10] = 0;
puVar2[0xb] = 0;
puVar2[0xf] = 0;
puVar2[0xd] = 0;
puVar2[7] = 0;
puVar2[8] = 1;
puVar2[9] = 0xffffffff;
puVar2[0x11] = 0;
*(undefined1 *)(puVar2 + 0xe) = 0x80;
puVar2[1] = *(undefined4 *)(param_6 + 4);
puVar2[2] = *(undefined4 *)(param_6 + 8);
puVar2[3] = *(undefined4 *)(param_6 + 0xc);
puVar2[4] = *(undefined4 *)(param_6 + 0x10);
puVar2[5] = *(undefined4 *)(param_6 + 0x14);
puVar2[6] = *(undefined4 *)(param_6 + 0x18);
puVar2[7] = *(undefined4 *)(param_6 + 0x1c);
puVar2[8] = *(undefined4 *)(param_6 + 0x20);
puVar2[9] = *(undefined4 *)(param_6 + 0x24);
puVar2[10] = *(undefined4 *)(param_6 + 0x28);
puVar2[0xb] = *(undefined4 *)(param_6 + 0x2c);
puVar2[0xc] = *(undefined4 *)(param_6 + 0x30);
puVar2[0xd] = *(undefined4 *)(param_6 + 0x34);
*(undefined1 *)(puVar2 + 0xe) = *(undefined1 *)(param_6 + 0x38);
puVar2[0xf] = *(undefined4 *)(param_6 + 0x3c);
puVar2[0x10] = *(undefined4 *)(param_6 + 0x40);
puVar2[0x11] = *(undefined4 *)(param_6 + 0x44);
puVar2[0x12] = *(undefined4 *)(param_6 + 0x48);
puVar2[0x13] = *(undefined4 *)(param_6 + 0x4c);
puVar2[0x14] = *(undefined4 *)(param_6 + 0x50);
param_1[6] = puVar2;
if ((param_7 == SendProxy_DataTableToDataTable) || (param_7 == SendProxy_DataTablePtrToDataTable))
{
param_1[0xf] = 0x200;
}
uVar3 = 0xffffffff;
if (param_5 < 0x1840001) {
uVar3 = param_5 * 0x54 + 4;
}
puVar4 = operator_new__(uVar3);
uVar3 = 0;
*puVar4 = param_5;
puVar5 = puVar4 + 1;
if (param_5 != 0) {
do {
uVar3 = uVar3 + 1;
*puVar5 = (uint)&PTR__SendProp_00c54c98;
puVar5[0xc] = 0;
puVar5[0x13] = 0;
puVar5[0x12] = 0;
puVar5[0x10] = 0;
puVar5[10] = 0;
puVar5[0xb] = 0;
puVar5[2] = 0;
puVar5[0xf] = 0;
puVar5[3] = 0;
puVar5[4] = 0;
puVar5[5] = 0;
puVar5[0xd] = 0;
puVar5[6] = 0;
puVar5[7] = 0;
puVar5[8] = 1;
puVar5[9] = 0xffffffff;
puVar5[0x11] = 0;
puVar5[1] = 0;
*(undefined1 *)(puVar5 + 0xe) = 0x80;
puVar5 = puVar5 + 0x15;
} while (param_5 != uVar3);
if (0 < (int)param_5) {
uVar3 = 0;
local_20 = 0;
puVar5 = puVar4;
puVar7 = puVar4 + 0x14;
do {
puVar5[2] = *(uint *)(param_6 + 4);
puVar5[3] = *(uint *)(param_6 + 8);
puVar5[4] = *(uint *)(param_6 + 0xc);
puVar5[5] = *(uint *)(param_6 + 0x10);
puVar5[6] = *(uint *)(param_6 + 0x14);
puVar5[7] = *(uint *)(param_6 + 0x18);
puVar5[8] = *(uint *)(param_6 + 0x1c);
puVar5[9] = *(uint *)(param_6 + 0x20);
puVar5[10] = *(uint *)(param_6 + 0x24);
puVar5[0xb] = *(uint *)(param_6 + 0x28);
puVar5[0xc] = *(uint *)(param_6 + 0x2c);
puVar5[0xd] = *(uint *)(param_6 + 0x30);
puVar5[0xe] = *(uint *)(param_6 + 0x34);
*(undefined1 *)(puVar5 + 0xf) = *(undefined1 *)(param_6 + 0x38);
puVar5[0x10] = *(uint *)(param_6 + 0x3c);
puVar5[0x11] = *(uint *)(param_6 + 0x40);
puVar5[0x12] = *(uint *)(param_6 + 0x44);
puVar5[0x13] = *(uint *)(param_6 + 0x48);
puVar5[0x14] = *(uint *)(param_6 + 0x4c);
puVar5[0x15] = *(uint *)(param_6 + 0x50);
*puVar7 = local_20;
uVar1 = (&s_ElementNames)[uVar3];
uVar3 = uVar3 + 1;
puVar5[0xc] = param_2;
puVar5[0xd] = uVar1;
local_20 = local_20 + param_4;
puVar5 = puVar5 + 0x15;
puVar7 = puVar7 + 0x15;
} while (uVar3 != param_5);
}
}
piVar6 = operator_new(0x14);
piVar6[2] = param_2;
piVar6[3] = 0;
*(byte *)(piVar6 + 4) = *(byte *)(piVar6 + 4) & 0xf8;
*piVar6 = (int)(puVar4 + 1);
piVar6[1] = param_5;
param_1[0x12] = piVar6;
*(undefined1 *)(param_1 + 0xe) = param_8;
return param_1;
}
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.