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