L L4D2node

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