L L4D2node

GCSDK::CSchema::SetFieldRandom

0x0008d3b0 · 547 bytes · __thiscall

_ZN5GCSDK7CSchema14SetFieldRandomEPhiPbb

Decompiled

undefined (5 params)

/* GCSDK::CSchema::SetFieldRandom(unsigned char*, int, bool*, bool) */

void __thiscall
GCSDK::CSchema::SetFieldRandom(CSchema *this,uchar *param_1,int param_2,bool *param_3,bool param_4)

{
  uchar uVar1;
  undefined1 uVar2;
  uint uVar3;
  uint *puVar4;
  int iVar5;
  uint uVar6;
  undefined1 *puVar7;
  undefined1 *puVar8;
  int in_GS_OFFSET;
  undefined1 *local_244;
  undefined1 auStack_221 [513];
  int local_20;
  
  puVar4 = (uint *)(param_2 * 0x118 + *(int *)(this + 0x88));
  *param_3 = false;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  if (*puVar4 == 1) {
    uVar3 = UNRandFast();
    uVar6 = puVar4[1];
    uVar3 = uVar3 % uVar6;
    if (uVar3 != 0) {
      uVar6 = 0;
      do {
        iVar5 = puVar4[0x45] + uVar6;
        uVar6 = uVar6 + 1;
        uVar1 = CHRandFast();
        param_1[iVar5] = uVar1;
      } while (uVar6 != uVar3);
      uVar6 = puVar4[1];
    }
    if (uVar3 < uVar6) {
      do {
        uVar6 = uVar3 + 1;
        param_1[puVar4[0x45] + uVar3] = '\0';
        uVar3 = uVar6;
      } while (uVar6 < puVar4[1]);
    }
  }
  else if (*puVar4 < 2) {
    uVar6 = UNRandFast();
    uVar6 = uVar6 & 0x1ff;
    if (*puVar4 == 1) {
      if (uVar6 != 1) {
        puVar8 = auStack_221 + 1;
        do {
          uVar2 = CHRandFast();
          puVar7 = puVar8 + 1;
          *puVar8 = uVar2;
          puVar8 = puVar7;
        } while (puVar7 != auStack_221 + uVar6);
      }
      auStack_221[uVar6] = 0;
    }
    else if (uVar6 != 0) {
      puVar8 = auStack_221 + 1;
      do {
        uVar2 = UNRandFast();
        puVar7 = puVar8 + 1;
        *puVar8 = uVar2;
        puVar8 = puVar7;
      } while (puVar7 != auStack_221 + 1 + uVar6);
    }
    local_244 = auStack_221 + 1;
    BSetVarField(this,param_1,(VarField_t *)(param_1 + puVar4[0x45]),local_244,uVar6,param_3,param_4
                );
  }
  else {
    uVar6 = 0;
    if (puVar4[1] != 0) {
      do {
        iVar5 = puVar4[0x45] + uVar6;
        uVar6 = uVar6 + 1;
        uVar1 = UNRandFast();
        param_1[iVar5] = uVar1;
      } while (uVar6 < puVar4[1]);
    }
  }
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  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)