L L4D2node

SendPropUtlVector

0x00590940 · 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 00590996 to 00590a0d has its CatchHandler @ 00590f18 */
  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 00590a33 to 00590a37 has its CatchHandler @ 00590eab */
      SendProp::SendProp(pSVar9);
      local_d4 = local_d4 - 1;
      pSVar9 = pSVar9 + 0x54;
    } while (local_d4 != 0xffffffff);
  }
                    /* try { // try from 00590a52 to 00590a56 has its CatchHandler @ 00590f18 */
  pSVar9 = operator_new(0x54);
                    /* try { // try from 00590a60 to 00590a64 has its CatchHandler @ 00590f1c */
  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 00590a8d to 00590bd7 has its CatchHandler @ 00590f18 */
  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 *)0x1,'\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 00590bf7 to 00590bfb has its CatchHandler @ 00590ef5 */
  SendTable::SendTable(pSVar7,pSVar9,1,pcVar6);
  uVar13 = 0x80;
  pcVar12 = SendProxy_LengthTable;
                    /* try { // try from 00590c2c to 00590e58 has its CatchHandler @ 00590f18 */
  SendPropDataTable((char *)local_70,0xc55bf8,(SendTable *)0x0,
                    (_func_void_ptr_SendProp_ptr_void_ptr_void_ptr_CSendProxyRecipients_ptr_int *)
                    pSVar7,'0');
  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] = (&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_00590e29;
      }
      uVar11 = uVar11 + 1;
      puVar8 = puVar8 + 0x15;
      *(code **)((int)puVar4 + iVar10 + 0x98) = SendProxy_UtlVectorElement;
      iVar10 = iVar10 + 0x54;
    } while (uVar11 != param_6);
  }
LAB_00590e29:
  pcVar6 = (char *)AllocateUniqueDataTableName(true,"_ST_%s_%d",param_2,param_6,pcVar12,uVar13);
  pSVar7 = operator_new(0x14);
                    /* try { // try from 00590e76 to 00590e7a has its CatchHandler @ 00590f1e */
  SendTable::SendTable(pSVar7,(SendProp *)(puVar4 + 1),uVar2,pcVar6);
  *(SendTable **)(param_1 + 0x48) = pSVar7;
  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)