ExplosionCreate
0x0069a900 · 641 bytes · __cdecl
_Z15ExplosionCreateRK6VectorRK6QAngleP11CBaseEntityiiifS6_iPK7CHandleIS5_E7Class_T
Decompiled
undefined (11 params)
/* ExplosionCreate(Vector const&, QAngle const&, CBaseEntity*, int, int, int, float, CBaseEntity*,
int, CHandle<CBaseEntity> const*, Class_T) */
void ExplosionCreate(Vector *param_1,QAngle *param_2,CBaseEntity *param_3,undefined4 param_4,
int param_5,uint param_6,float param_7,int *param_8,int param_9,int *param_10,
int param_11)
{
CBaseEdict *pCVar1;
int *piVar2;
int iVar3;
int *piVar4;
int in_GS_OFFSET;
undefined4 local_b4 [3];
undefined4 local_a8;
undefined4 local_a4;
char local_a0 [128];
int local_20;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
piVar2 = (int *)CBaseEntity::Create("env_explosion",param_1,param_2,param_3);
V_snprintf(local_a0,0x80,"%3d",param_4);
(**(code **)(*piVar2 + 0x84))(piVar2,"iMagnitude",local_a0);
param_6 = param_6 | piVar2[0x52];
if (piVar2[0x52] != param_6) {
if ((char)piVar2[0x1b] == '\0') {
pCVar1 = (CBaseEdict *)piVar2[0xc];
if (pCVar1 != (CBaseEdict *)0x0) {
*(uint *)pCVar1 = *(uint *)pCVar1 | 0x101;
iVar3 = CBaseEdict::GetChangeAccessor(pCVar1);
*(undefined2 *)(iVar3 + 2) = 0;
}
}
else {
*(byte *)(piVar2 + 0x1c) = *(byte *)(piVar2 + 0x1c) | 1;
}
piVar2[0x52] = param_6;
}
if (param_5 != 0) {
V_snprintf(local_a0,0x80,"%d",param_5);
(**(code **)(*piVar2 + 0x84))(piVar2,"iRadiusOverride",local_a0);
}
if (param_7 != 0.0) {
V_snprintf(local_a0,0x80,"%.3f",(double)param_7);
(**(code **)(*piVar2 + 0x84))(piVar2,"DamageForce",local_a0);
}
if (*(char *)((int)piVar2 + 0x121) != '\x05') {
if ((char)piVar2[0x1b] == '\0') {
pCVar1 = (CBaseEdict *)piVar2[0xc];
if (pCVar1 != (CBaseEdict *)0x0) {
*(uint *)pCVar1 = *(uint *)pCVar1 | 0x101;
iVar3 = CBaseEdict::GetChangeAccessor(pCVar1);
*(undefined2 *)(iVar3 + 2) = 0;
}
}
else {
*(byte *)(piVar2 + 0x1c) = *(byte *)(piVar2 + 0x1c) | 1;
}
*(undefined1 *)((int)piVar2 + 0x121) = 5;
}
(**(code **)(*piVar2 + 0x50))(piVar2,param_3);
(**(code **)(*piVar2 + 100))(piVar2);
if (param_8 == (int *)0x0) {
piVar2[0x116] = -1;
}
else {
piVar4 = (int *)(**(code **)(*param_8 + 0xc))(param_8);
piVar2[0x116] = *piVar4;
}
piVar2[0x117] = param_9;
if (param_10 != (int *)0x0) {
piVar2[0x119] = *param_10;
}
piVar2[0x118] = param_11;
local_b4[0] = 0;
local_a8 = 0xffffffff;
local_a4 = 0;
(**(code **)(*piVar2 + 0xb4))(piVar2,"Explode",0,0,local_b4,0);
if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
return;
}
/* WARNING: Subroutine does not return */
__stack_chk_fail();
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
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.
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.