CCarriedProp::CreatePhysObject
0x0052f8d0 · 1666 bytes · __thiscall
_ZN12CCarriedProp16CreatePhysObjectEv
Decompiled
undefined (1 param)
/* CCarriedProp::CreatePhysObject() */
int * __thiscall CCarriedProp::CreatePhysObject(CCarriedProp *this)
{
float fVar1;
float fVar2;
float fVar3;
float fVar4;
float fVar5;
code *pcVar6;
int *piVar7;
char cVar8;
byte bVar9;
short sVar10;
CBasePlayer *this_00;
uint uVar11;
int iVar12;
int iVar13;
int *piVar14;
uint *puVar15;
undefined4 *puVar16;
int in_GS_OFFSET;
float fVar17;
float local_31c;
float local_318;
float local_314;
float local_300;
float local_2fc;
float local_2f8;
float local_2f4;
float local_2f0;
float local_2ec;
float local_2e8;
float local_2e4;
float local_2e0;
CTraceFilterSimple local_2dc [16];
float local_2cc;
float local_2c8;
float local_2c4;
float local_2bc;
float local_2b8;
float local_2b4;
undefined4 local_2ac;
undefined4 local_2a8;
undefined4 local_2a4;
undefined4 local_29c;
undefined4 local_298;
undefined4 local_294;
undefined4 local_28c;
undefined1 local_288;
undefined1 local_287;
Vector local_274 [12];
float local_268;
float local_264;
float local_260;
float local_248;
undefined1 local_220 [512];
int local_20;
puVar15 = (uint *)&stack0xfffffcb4;
puVar16 = (undefined4 *)&stack0xfffffcb4;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
this_00 = (CBasePlayer *)CBaseCombatWeapon::GetOwner((CBaseCombatWeapon *)this);
if (this_00 != (CBasePlayer *)0x0) {
cVar8 = (**(code **)(*(int *)this_00 + 0x16c))();
piVar7 = mdlcache;
if (cVar8 != '\0') {
(**(code **)(*mdlcache + 0x68))();
/* try { // try from 0052f929 to 0052fe53 has its CatchHandler @ 0052ff5e */
uVar11 = (**(code **)(*(int *)this + 0x730))();
sVar10 = (**(code **)(*mdlcache + 0x18))();
if (sVar10 == -1) {
LAB_0052fe88:
piVar14 = (int *)0x0;
}
else {
iVar12 = (**(code **)(*mdlcache + 0x28))();
if (iVar12 == 0) goto LAB_0052fe88;
iVar13 = (**(code **)(*mdlcache + 0x30))();
if (iVar13 == 0) goto LAB_0052fe88;
fVar17 = *(float *)(iVar12 + 0x68);
fVar1 = *(float *)(iVar12 + 0x6c);
fVar2 = *(float *)(iVar12 + 0x70);
fVar3 = *(float *)(iVar12 + 0x74);
fVar4 = *(float *)(iVar12 + 0x78);
fVar5 = *(float *)(iVar12 + 0x7c);
CBasePlayer::EyeVectors(this_00,(Vector *)&local_300,(Vector *)0x0,(Vector *)0x0);
(**(code **)(*(int *)this_00 + 0x234))();
local_314 = (local_300 * 20.0 + local_2f4) - (fVar17 + fVar3) * 0.5;
local_318 = (local_2fc * 20.0 + local_2f0) - (fVar1 + fVar4) * 0.5;
local_31c = (local_2f8 * 20.0 + local_2ec) - (fVar2 + fVar5) * 0.5;
(**(code **)(*(int *)this_00 + 0x234))();
puVar15 = (uint *)&stack0xfffffcac;
local_28c = 0;
local_2bc = local_314 - local_2e8;
local_2b8 = local_318 - local_2e4;
local_288 = 1;
local_2cc = local_2e8;
local_2b4 = local_31c - local_2e0;
local_2c8 = local_2e4;
local_2c4 = local_2e0;
local_294 = 0;
local_298 = 0;
local_29c = 0;
local_287 = local_2bc * local_2bc + local_2b8 * local_2b8 + local_2b4 * local_2b4 != 0.0;
local_2a4 = 0;
local_2a8 = 0;
local_2ac = 0;
CTraceFilterSimple::CTraceFilterSimple
(local_2dc,(IHandleEntity *)this_00,0,(_func_bool_IHandleEntity_ptr_int *)0x0);
(**(code **)(*enginetrace + 0x14))();
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
DebugDrawLine(local_274,(Vector *)&local_268,0xff,0,0,true,-1.0);
}
if (local_248 < 1.0) {
/* try { // try from 0052fe9f to 0052fef7 has its CatchHandler @ 0052ff5e */
(**(code **)(*(int *)this_00 + 0x234))();
puVar15 = (uint *)&stack0xfffffca8;
local_2cc = local_2e8 - local_268;
local_2c8 = local_2e4 - local_264;
local_2c4 = local_2e0 - local_260;
VectorNormalize((Vector *)&local_2cc);
fVar17 = *(float *)(iVar12 + 0x78);
if (*(float *)(iVar12 + 0x78) <= *(float *)(iVar12 + 0x74)) {
fVar17 = *(float *)(iVar12 + 0x74);
}
local_314 = local_2cc * fVar17 + local_268;
local_318 = local_2c8 * fVar17 + local_264;
local_31c = fVar17 * local_2c4 + local_260;
}
puVar15[-1] = 0x52fc45;
bVar9 = CBaseEntity::IsPrecacheAllowed();
*puVar15 = 1;
puVar15[-1] = 0x52fc57;
CBaseEntity::SetAllowPrecache(SUB41(*puVar15,0));
puVar15[2] = 1;
puVar15[1] = 0xffffffff;
*puVar15 = (uint)"physics_prop";
puVar15[-1] = 0x52fc73;
piVar14 = (int *)CreateEntityByName((char *)*puVar15,puVar15[1],SUB41(puVar15[2],0));
if (piVar14 != (int *)0x0) {
*(double *)(puVar15 + 7) = (double)local_31c;
*(double *)(puVar15 + 5) = (double)local_318;
*(double *)(puVar15 + 3) = (double)local_314;
puVar15[2] = (uint)&DAT_00c341c0;
puVar15[1] = 0x200;
*puVar15 = (uint)local_220;
puVar15[-1] = 0x52fcce;
V_snprintf((char *)*puVar15,puVar15[1],(char *)puVar15[2]);
iVar12 = *piVar14;
puVar15[2] = (uint)local_220;
puVar15[1] = (uint)"origin";
*puVar15 = (uint)piVar14;
pcVar6 = *(code **)(iVar12 + 0x84);
puVar15[-1] = 0x52fce5;
(*pcVar6)();
*(double *)(puVar15 + 7) = (double)DAT_01053d44;
*(double *)(puVar15 + 5) = (double)DAT_01053d40;
*(double *)(puVar15 + 3) = (double)vec3_angle;
puVar15[2] = (uint)&DAT_00c341c0;
puVar15[1] = 0x200;
*puVar15 = (uint)local_220;
puVar15[-1] = 0x52fd30;
V_snprintf((char *)*puVar15,puVar15[1],(char *)puVar15[2]);
iVar12 = *piVar14;
puVar15[2] = (uint)local_220;
puVar15[1] = (uint)"angles";
*puVar15 = (uint)piVar14;
pcVar6 = *(code **)(iVar12 + 0x84);
puVar15[-1] = 0x52fd47;
(*pcVar6)();
iVar12 = *piVar14;
puVar15[1] = (uint)"model";
*puVar15 = (uint)piVar14;
puVar15[2] = uVar11;
pcVar6 = *(code **)(iVar12 + 0x84);
puVar15[-1] = 0x52fd64;
(*pcVar6)();
iVar12 = *piVar14;
puVar15[2] = (uint)&DAT_00c0af6c;
puVar15[1] = (uint)"fademindist";
*puVar15 = (uint)piVar14;
pcVar6 = *(code **)(iVar12 + 0x84);
puVar15[-1] = 0x52fd7f;
(*pcVar6)();
iVar12 = *piVar14;
puVar15[2] = (uint)&DAT_00c09604;
puVar15[1] = (uint)"fademaxdist";
*puVar15 = (uint)piVar14;
pcVar6 = *(code **)(iVar12 + 0x84);
puVar15[-1] = 0x52fd9a;
(*pcVar6)();
iVar12 = *piVar14;
puVar15[2] = (uint)&DAT_00cbe2d5;
puVar15[1] = (uint)"fadescale";
*puVar15 = (uint)piVar14;
pcVar6 = *(code **)(iVar12 + 0x84);
puVar15[-1] = 0x52fdb5;
(*pcVar6)();
iVar12 = *piVar14;
puVar15[2] = (uint)&DAT_00c096e0;
puVar15[1] = (uint)"inertiaScale";
*puVar15 = (uint)piVar14;
pcVar6 = *(code **)(iVar12 + 0x84);
puVar15[-1] = 0x52fdd0;
(*pcVar6)();
iVar12 = *piVar14;
puVar15[2] = (uint)&DAT_00c22998;
puVar15[1] = (uint)"physdamagescale";
*puVar15 = (uint)piVar14;
pcVar6 = *(code **)(iVar12 + 0x84);
puVar15[-1] = 0x52fdeb;
(*pcVar6)();
iVar12 = *piVar14;
puVar15[2] = (uint)&DAT_00cbe2d5;
puVar15[1] = (uint)"glow";
*puVar15 = (uint)piVar14;
pcVar6 = *(code **)(iVar12 + 0x84);
puVar15[-1] = 0x52fe06;
(*pcVar6)();
iVar12 = *piVar14;
*puVar15 = (uint)piVar14;
pcVar6 = *(code **)(iVar12 + 0x6c);
puVar15[-1] = 0x52fe0e;
(*pcVar6)();
puVar15[1] = 1;
*puVar15 = (uint)piVar14;
puVar15[-1] = 0x52fe1e;
DispatchSpawn((CBaseEntity *)*puVar15,SUB41(puVar15[1],0));
iVar12 = *piVar14;
*puVar15 = (uint)piVar14;
pcVar6 = *(code **)(iVar12 + 0x94);
puVar15[-1] = 0x52fe29;
(*pcVar6)();
puVar15[1] = 0xb;
*puVar15 = (uint)piVar14;
puVar15[-1] = 0x52fe39;
CBaseEntity::SetCollisionGroup((CBaseEntity *)*puVar15,puVar15[1]);
iVar12 = *piVar14;
puVar15[1] = (uint)this_00;
*puVar15 = (uint)piVar14;
pcVar6 = *(code **)(iVar12 + 0x50);
puVar15[-1] = 0x52fe45;
(*pcVar6)();
}
*puVar15 = (uint)bVar9;
puVar15[-1] = 0x52fe54;
CBaseEntity::SetAllowPrecache(SUB41(*puVar15,0));
}
iVar12 = *piVar7;
*puVar15 = (uint)piVar7;
pcVar6 = *(code **)(iVar12 + 0x6c);
puVar15[-1] = 0x52fe62;
(*pcVar6)();
puVar16 = puVar15;
goto LAB_0052fe6a;
}
}
piVar14 = (int *)0x0;
LAB_0052fe6a:
if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
return piVar14;
}
/* WARNING: Subroutine does not return */
*(undefined1 **)((int)puVar16 + -4) = &LAB_0052ff5e;
__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.