CreatePhysicsProp
0x007f77a0 · 1469 bytes · __cdecl
_Z17CreatePhysicsPropPKcRK6VectorS3_PK13IHandleEntitybS0_
Decompiled
undefined (6 params)
/* CreatePhysicsProp(char const*, Vector const&, Vector const&, IHandleEntity const*, bool, char
const*) */
CBaseEntity *
CreatePhysicsProp(char *param_1,Vector *param_2,Vector *param_3,IHandleEntity *param_4,bool param_5,
char *param_6)
{
int *piVar1;
bool bVar2;
short sVar3;
int iVar4;
int iVar5;
CBaseEntity *pCVar6;
int in_GS_OFFSET;
CTraceFilterSimple local_2dc [16];
float local_2cc;
float local_2c8;
float local_2c4;
float local_2bc;
float local_2b8;
float local_2b4;
float local_2ac;
float local_2a8;
float local_2a4;
float local_29c;
float local_298;
float 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_25c;
float local_258;
float local_254;
float local_248;
char local_23e;
char local_220 [512];
int local_20;
piVar1 = mdlcache;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
(**(code **)(*mdlcache + 0x68))(mdlcache);
/* try { // try from 007f7806 to 007f7d06 has its CatchHandler @ 007f7d69 */
sVar3 = (**(code **)(*mdlcache + 0x18))(mdlcache,param_1);
if (sVar3 != -1) {
iVar4 = (**(code **)(*mdlcache + 0x28))(mdlcache,sVar3);
if (iVar4 != 0) {
if (param_5) {
/* try { // try from 007f7d4c to 007f7d4e has its CatchHandler @ 007f7d69 */
iVar5 = (**(code **)(*mdlcache + 0x30))(mdlcache,sVar3);
if (iVar5 == 0) {
pCVar6 = (CBaseEntity *)0x0;
goto LAB_007f7d07;
}
}
local_28c = 0;
local_2bc = *(float *)param_3 - *(float *)param_2;
local_2b4 = *(float *)(param_3 + 8) - *(float *)(param_2 + 8);
local_2b8 = *(float *)(param_3 + 4) - *(float *)(param_2 + 4);
local_287 = local_2b4 * local_2b4 + local_2bc * local_2bc + local_2b8 * local_2b8 != 0.0;
local_29c = (*(float *)(iVar4 + 0x74) - *(float *)(iVar4 + 0x68)) * 0.5;
local_294 = (*(float *)(iVar4 + 0x7c) - *(float *)(iVar4 + 0x70)) * 0.5;
local_298 = (*(float *)(iVar4 + 0x78) - *(float *)(iVar4 + 0x6c)) * 0.5;
local_2ac = (*(float *)(iVar4 + 0x74) + *(float *)(iVar4 + 0x68)) * 0.5;
local_2a8 = (*(float *)(iVar4 + 0x78) + *(float *)(iVar4 + 0x6c)) * 0.5;
local_2a4 = (*(float *)(iVar4 + 0x7c) + *(float *)(iVar4 + 0x70)) * 0.5;
local_2cc = *(float *)param_2 + local_2ac;
local_2c8 = *(float *)(param_2 + 4) + local_2a8;
local_288 = local_294 * local_294 + local_29c * local_29c + local_298 * local_298 < 1e-06;
local_2c4 = *(float *)(param_2 + 8) + local_2a4;
local_2ac = -local_2ac;
local_2a8 = -local_2a8;
local_2a4 = -local_2a4;
CTraceFilterSimple::CTraceFilterSimple
(local_2dc,param_4,0,(_func_bool_IHandleEntity_ptr_int *)0x0);
(**(code **)(*enginetrace + 0x14))(enginetrace,&local_2cc,0x202400b,local_2dc);
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
DebugDrawLine(local_274,(Vector *)&local_268,0xff,0xff,0,true,-1.0);
}
if (((local_248 != 1.0) ||
(SQRT((*(float *)(param_3 + 4) - *(float *)(param_2 + 4)) *
(*(float *)(param_3 + 4) - *(float *)(param_2 + 4)) +
(*(float *)param_3 - *(float *)param_2) * (*(float *)param_3 - *(float *)param_2) +
(*(float *)(param_3 + 8) - *(float *)(param_2 + 8)) *
(*(float *)(param_3 + 8) - *(float *)(param_2 + 8))) <= 0.01)) &&
(local_23e == '\0')) {
local_268 = local_268 + local_25c;
local_264 = local_264 + local_258;
local_260 = local_260 + local_254;
bVar2 = (bool)CBaseEntity::IsPrecacheAllowed();
CBaseEntity::SetAllowPrecache(true);
iVar4 = CreateEntityByName(param_6,-1,true);
if (iVar4 == 0) {
pCVar6 = (CBaseEntity *)0x0;
}
else {
pCVar6 = (CBaseEntity *)
__dynamic_cast(iVar4,&CBaseEntity::typeinfo,&CPhysicsProp::typeinfo,0);
if (pCVar6 != (CBaseEntity *)0x0) {
V_snprintf(local_220,0x200,"%.10f %.10f %.10f",(double)local_268,(double)local_264,
(double)local_260);
(**(code **)(*(int *)pCVar6 + 0x84))(pCVar6,"origin",local_220);
V_snprintf(local_220,0x200,"%.10f %.10f %.10f",0,0,0);
(**(code **)(*(int *)pCVar6 + 0x84))(pCVar6,"angles",local_220);
(**(code **)(*(int *)pCVar6 + 0x84))(pCVar6,"model",param_1);
(**(code **)(*(int *)pCVar6 + 0x84))(pCVar6,"fademindist",&DAT_00c0af6c);
(**(code **)(*(int *)pCVar6 + 0x84))(pCVar6,"fademaxdist",&DAT_00c09604);
(**(code **)(*(int *)pCVar6 + 0x84))(pCVar6,"fadescale",&DAT_00cbe2d5);
(**(code **)(*(int *)pCVar6 + 0x84))(pCVar6,"inertiaScale",&DAT_00c096e0);
(**(code **)(*(int *)pCVar6 + 0x84))(pCVar6,"physdamagescale",&DAT_00c22998);
(**(code **)(*(int *)pCVar6 + 0x6c))(pCVar6);
DispatchSpawn(pCVar6,true);
(**(code **)(*(int *)pCVar6 + 0x94))(pCVar6);
}
}
CBaseEntity::SetAllowPrecache(bVar2);
goto LAB_007f7d07;
}
}
}
pCVar6 = (CBaseEntity *)0x0;
LAB_007f7d07:
(**(code **)(*piVar1 + 0x6c))(piVar1);
if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
return pCVar6;
}
/* 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.