V_pretifymem
0x00b7b810 · 560 bytes · __cdecl
_Z12V_pretifymemfib
Decompiled
undefined (3 params)
/* V_pretifymem(float, int, bool) */
char * V_pretifymem(float param_1,int param_2,bool param_3)
{
char *pcVar1;
char cVar2;
int iVar3;
char *pcVar4;
char *__s;
int in_GS_OFFSET;
float fVar5;
char *pcVar6;
float local_74;
char local_68 [8];
char local_60;
char local_5f [31];
char local_40 [32];
int local_20;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
if (param_3) {
fVar5 = 1048576.0;
local_74 = 1024.0;
}
else {
fVar5 = 1e+06;
local_74 = 1000.0;
}
iVar3 = V_pretifymem(float,int,bool)::current * 0x20;
V_pretifymem(float,int,bool)::current = V_pretifymem(float,int,bool)::current + 1 & 7;
pcVar1 = V_pretifymem(float,int,bool)::output + iVar3;
if (fVar5 < param_1) {
local_74 = param_1 / fVar5;
pcVar6 = " MB";
}
else if (local_74 < param_1) {
local_74 = param_1 / local_74;
pcVar6 = " KB";
}
else {
local_74 = param_1;
pcVar6 = " bytes";
}
V_snprintf(local_68,8,pcVar6);
if (1e-05 <= ABS(local_74 - (float)(int)local_74)) {
iVar3 = 0;
if (-1 < param_2) {
iVar3 = param_2;
}
V_snprintf(local_40,0x20,"%%.%if%s",iVar3,local_68);
V_snprintf(&local_60,0x20,local_40,(double)local_74);
}
else {
V_snprintf(&local_60,0x20,"%i%s",(int)local_74,local_68);
}
__s = &local_60;
pcVar6 = strchr(__s,0x2e);
if (pcVar6 == (char *)0x0) {
pcVar6 = strchr(__s,0x20);
}
pcVar6 = pcVar6 + (-3 - (int)__s);
pcVar4 = pcVar1;
while (local_60 != '\0') {
if (((-1 < (int)pcVar6) && (pcVar6 == (char *)(((int)pcVar6 / 3) * 3))) && (pcVar4 != pcVar1)) {
*pcVar4 = ',';
pcVar4 = pcVar4 + 1;
}
__s = __s + 1;
pcVar6 = pcVar6 + -1;
cVar2 = *__s;
*pcVar4 = local_60;
pcVar4 = pcVar4 + 1;
local_60 = cVar2;
}
iVar3 = *(int *)(in_GS_OFFSET + 0x14);
*pcVar4 = '\0';
if (local_20 == iVar3) {
return pcVar1;
}
/* WARNING: Subroutine does not return */
__stack_chk_fail();
}
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.