L L4D2node

CServerGameClients::ProcessUsercmds

0x006c55c0 · 1084 bytes · __thiscall

_ZN18CServerGameClients15ProcessUsercmdsEP7edict_tP7bf_readiiibb

Decompiled

undefined (8 params)

/* CServerGameClients::ProcessUsercmds(edict_t*, bf_read*, int, int, int, bool, bool) */

longdouble __thiscall
CServerGameClients::ProcessUsercmds
          (CServerGameClients *this,edict_t *param_1,bf_read *param_2,int param_3,int param_4,
          int param_5,bool param_6,bool param_7)

{
  int *piVar1;
  char cVar2;
  char *pcVar3;
  CUserCmd *pCVar4;
  CUserCmd *pCVar5;
  undefined ***pppuVar6;
  undefined ***pppuVar7;
  int iVar8;
  float fVar9;
  int *local_1684;
  undefined **local_1674;
  undefined4 local_1670;
  undefined4 local_166c;
  undefined4 local_1668;
  undefined4 local_1664;
  undefined4 local_1660;
  undefined4 local_165c;
  undefined4 local_1658;
  undefined4 local_1654;
  undefined4 local_1650;
  undefined1 local_164c;
  undefined4 local_1648;
  undefined4 local_1644;
  undefined4 local_1640;
  undefined2 local_163c;
  undefined2 local_163a;
  undefined1 local_1638;
  undefined4 local_1634;
  undefined4 local_1630;
  undefined4 local_162c;
  undefined4 local_1628;
  undefined4 local_1624;
  undefined4 local_1620;
  CUserCmd local_161c [12];
  CUserCmd aCStack_1610 [4];
  CUserCmd aCStack_160c [4];
  CUserCmd aCStack_1608 [44];
  CUserCmd aCStack_15dc [4];
  CUserCmd aCStack_15d8 [4];
  CUserCmd aCStack_15d4 [4];
  CUserCmd aCStack_15d0 [4];
  CUserCmd aCStack_15cc [4];
  CUserCmd aCStack_15c8 [5460];
  undefined **local_74 [22];
  CUserCmd local_1c [12];
  
  pCVar4 = local_161c;
  do {
    *(undefined ***)pCVar4 = &PTR__CUserCmd_00c15058;
    *(undefined4 *)(pCVar4 + 4) = 0;
    pCVar5 = pCVar4 + 0x58;
    *(undefined4 *)(pCVar4 + 8) = 0;
    *(undefined4 *)(pCVar4 + ((int)aCStack_1610 - (int)local_161c)) = 0;
    *(undefined4 *)(pCVar4 + (int)(aCStack_1610 + (4 - (int)local_161c))) = 0;
    *(undefined4 *)(pCVar4 + (int)(aCStack_1610 + (8 - (int)local_161c))) = 0;
    *(undefined2 *)(pCVar4 + 0x38) = 0;
    *(undefined4 *)(pCVar4 + 0x18) = 0;
    *(undefined4 *)(pCVar4 + 0x1c) = 0;
    *(undefined4 *)(pCVar4 + 0x20) = 0;
    *(undefined4 *)(pCVar4 + 0x24) = 0;
    pCVar4[0x28] = (CUserCmd)0x0;
    *(undefined4 *)(pCVar4 + 0x2c) = 0;
    *(undefined4 *)(pCVar4 + 0x30) = 0;
    *(undefined4 *)(pCVar4 + 0x34) = 0;
    *(undefined2 *)(pCVar4 + 0x3a) = 0;
    pCVar4[0x3c] = (CUserCmd)0x0;
    *(undefined4 *)(pCVar4 + ((int)aCStack_15dc - (int)local_161c)) = 0;
    *(undefined4 *)(pCVar4 + (int)(aCStack_15dc + (4 - (int)local_161c))) = 0;
    *(undefined4 *)(pCVar4 + (int)(aCStack_15dc + (8 - (int)local_161c))) = 0;
    *(undefined4 *)(pCVar4 + (int)(aCStack_15dc + (0xc - (int)local_161c))) = 0;
    *(undefined4 *)(pCVar4 + (int)(aCStack_15dc + (0x10 - (int)local_161c))) = 0;
    *(undefined4 *)(pCVar4 + (int)(aCStack_15dc + (0x14 - (int)local_161c))) = 0;
    pCVar4 = pCVar5;
  } while (pCVar5 != local_1c);
  local_1674 = &PTR__CUserCmd_00c15058;
  local_1670 = 0;
  local_166c = 0;
  local_1668 = 0;
  local_1664 = 0;
  local_1660 = 0;
  local_165c = 0;
  local_1658 = 0;
  local_1654 = 0;
  local_1650 = 0;
  local_164c = 0;
  local_1648 = 0;
  local_1644 = 0;
  local_1640 = 0;
  local_163c = 0;
  local_163a = 0;
  local_1638 = 0;
  local_1634 = 0;
  local_1630 = 0;
  local_162c = 0;
  local_1628 = 0;
  local_1624 = 0;
  local_1620 = 0;
                    /* try { // try from 006c57a9 to 006c59b2 has its CatchHandler @ 006c59fd */
  if ((((param_1 == (edict_t *)0x0) &&
       ((param_1 = *(edict_t **)(gpGlobals + 0x58), param_1 == (edict_t *)0x0 ||
        (((byte)*param_1 & 2) != 0)))) || (piVar1 = *(int **)(param_1 + 0xc), piVar1 == (int *)0x0))
     || ((local_1684 = (int *)(**(code **)(*piVar1 + 0x18))(piVar1), local_1684 == (int *)0x0 ||
         (cVar2 = (**(code **)(*local_1684 + 0x16c))(local_1684), cVar2 == '\0')))) {
    if ((uint)param_4 < 0x3f) {
      local_1684 = (int *)0x0;
      goto LAB_006c580c;
    }
    pcVar3 = "unknown";
  }
  else {
    if ((uint)param_4 < 0x3f) {
LAB_006c580c:
      local_1670 = 0;
      local_166c = 0;
      local_1668 = 0;
      iVar8 = param_4 + -1;
      local_1664 = 0;
      local_1660 = 0;
      local_165c = 0;
      local_1658 = 0;
      local_1654 = 0;
      local_1650 = 0;
      local_164c = 0;
      local_1648 = 0;
      local_1644 = 0;
      local_1640 = 0;
      local_163c = 0;
      local_163a = 0;
      local_1638 = 0;
      local_1634 = 0;
      local_1630 = 0;
      local_162c = 0;
      local_1628 = 0;
      local_1624 = 0;
      local_1620 = 0;
      if (iVar8 != -1) {
        pCVar4 = (CUserCmd *)&local_1674;
        pCVar5 = local_161c + iVar8 * 0x58;
        do {
          ReadUsercmd(param_2,pCVar5,pCVar4);
          iVar8 = iVar8 + -1;
          pCVar4 = pCVar5;
          pCVar5 = pCVar5 + -0x58;
        } while (iVar8 != -1);
      }
      piVar1 = mdlcache;
      if ((local_1684 == (int *)0x0) || (param_6)) {
        fVar9 = 0.0;
      }
      else {
        (**(code **)(*mdlcache + 0x68))(mdlcache);
                    /* try { // try from 006c59e2 to 006c59e7 has its CatchHandler @ 006c5a25 */
        (**(code **)(*local_1684 + 0x718))(local_1684,local_161c,param_3,param_4,param_5,param_7);
        fVar9 = *(float *)(gpGlobals + 0x1c);
        (**(code **)(*piVar1 + 0x6c))(piVar1);
      }
      goto LAB_006c5936;
    }
    pcVar3 = (char *)(**(code **)(*local_1684 + 0xb8))(local_1684);
  }
  Msg("CBasePlayer::ProcessUsercmds: too many cmds %i sent for player %s\n",param_4,pcVar3);
  fVar9 = 0.0;
  param_2[4] = (bf_read)0x1;
LAB_006c5936:
  local_1674 = &PTR__CUserCmd_00c15058;
  pppuVar6 = local_74;
  do {
    pppuVar7 = pppuVar6 + -0x16;
    (*(code *)**pppuVar6)(pppuVar6);
    pppuVar6 = pppuVar7;
  } while (pppuVar7 != &local_1674);
  return (longdouble)fVar9;
}

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)