CTraceFilterMelee::ShouldHitEntity
0x005f2aa0 · 1008 bytes · __thiscall
_ZN17CTraceFilterMelee15ShouldHitEntityEP13IHandleEntityi
Decompiled
undefined (3 params)
/* CTraceFilterMelee::ShouldHitEntity(IHandleEntity*, int) */
uint __thiscall
CTraceFilterMelee::ShouldHitEntity(CTraceFilterMelee *this,IHandleEntity *param_1,int param_2)
{
float fVar1;
uint uVar2;
undefined4 *puVar3;
char cVar4;
int *piVar5;
float *pfVar6;
float *pfVar7;
Vector *pVVar8;
int iVar9;
int iVar10;
undefined *puVar11;
uint uVar12;
CBaseEntity *pCVar13;
float local_94;
float local_90;
float local_8c;
undefined4 local_88;
undefined4 local_84;
undefined4 local_80;
undefined4 local_7c;
undefined4 local_78;
undefined4 local_74;
undefined4 local_70;
undefined4 local_6c;
undefined4 local_68;
undefined4 local_64;
undefined4 local_60;
undefined4 local_5c;
undefined4 local_58;
undefined4 local_54;
undefined4 local_50;
undefined4 local_4c;
uint local_48;
undefined4 local_44;
float local_40;
undefined4 local_3c;
undefined4 local_38;
undefined4 local_34;
undefined4 local_30;
undefined4 local_2c;
undefined4 local_28;
undefined4 local_24;
undefined4 local_20;
cVar4 = StandardFilterRules(param_1,param_2);
if (((cVar4 == '\0') ||
(cVar4 = PassServerEntityFilter(param_1,*(IHandleEntity **)(this + 4)), cVar4 == '\0')) ||
(uVar12 = (**(code **)(*staticpropmgr + 8))(staticpropmgr,param_1), (char)uVar12 != '\0')) {
uVar12 = 0;
}
else if (((param_1 != (IHandleEntity *)0x0) &&
(cVar4 = (**(code **)(*(int *)param_1 + 0x4c))(param_1,*(undefined4 *)(this + 8),param_2)
, cVar4 != '\0')) &&
((cVar4 = (**(code **)(*g_pGameRules + 0x74))
(g_pGameRules,*(undefined4 *)(this + 8),
*(undefined4 *)(param_1 + 0x234)), cVar4 != '\0' &&
(param_1[0x105] != (IHandleEntity)0x0)))) {
uVar2 = *(uint *)(*(int *)(this + 0xc) + 0x34);
piVar5 = (int *)0x0;
if (((uVar2 != 0xffffffff) &&
(puVar11 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar11 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar11 + 8) == uVar2 >> 0xc)) {
piVar5 = *(int **)(puVar11 + 4);
}
pfVar6 = (float *)(**(code **)(*piVar5 + 0x288))(piVar5);
pfVar7 = (float *)(**(code **)(*(int *)param_1 + 0x288))(param_1);
local_94 = *pfVar7 - *pfVar6;
local_90 = pfVar7[1] - pfVar6[1];
local_8c = pfVar7[2] - pfVar6[2];
VectorNormalize((Vector *)&local_94);
puVar3 = *(undefined4 **)(this + 0xc);
local_7c = *puVar3;
local_44 = puVar3[0xe];
local_40 = (float)puVar3[0xf];
local_78 = puVar3[1];
local_74 = puVar3[2];
local_70 = puVar3[3];
local_6c = puVar3[4];
local_68 = puVar3[5];
local_64 = puVar3[6];
local_60 = puVar3[7];
local_5c = puVar3[8];
local_58 = puVar3[9];
local_54 = puVar3[10];
local_50 = puVar3[0xb];
local_4c = puVar3[0xc];
local_48 = puVar3[0xd];
local_34 = puVar3[0x12];
local_3c = puVar3[0x10];
local_38 = puVar3[0x11];
local_30 = puVar3[0x13];
local_24 = puVar3[0x16];
local_2c = puVar3[0x14];
local_28 = puVar3[0x15];
local_20 = puVar3[0x17];
piVar5 = (int *)0x0;
fVar1 = *(float *)(this + 0x14);
if (((local_48 != 0xffffffff) &&
(puVar11 = g_pEntityList + (local_48 & 0xfff) * 0x10, puVar11 != (undefined *)0xfffffffc))
&& (*(uint *)(puVar11 + 8) == local_48 >> 0xc)) {
piVar5 = *(int **)(puVar11 + 4);
}
pVVar8 = (Vector *)(**(code **)(*piVar5 + 0x288))(piVar5);
CalculateMeleeDamageForce((CTakeDamageInfo *)&local_7c,(Vector *)&local_94,pVVar8,fVar1);
piVar5 = (int *)0x0;
if (((local_48 != 0xffffffff) &&
(puVar11 = g_pEntityList + (local_48 & 0xfff) * 0x10, puVar11 != (undefined *)0xfffffffc))
&& (*(uint *)(puVar11 + 8) == local_48 >> 0xc)) {
piVar5 = *(int **)(puVar11 + 4);
}
piVar5 = (int *)(**(code **)(*piVar5 + 0x144))(piVar5);
iVar9 = (**(code **)(*(int *)param_1 + 0x144))(param_1);
if (iVar9 != 0 && piVar5 != (int *)0x0) {
if ((this[0x18] != (CTraceFilterMelee)0x0) ||
(iVar10 = (**(code **)(*piVar5 + 0x4f4))(piVar5,param_1), iVar10 == 1)) {
if (local_40 != 0.0) {
CBaseEntity::TakeDamage((CBaseEntity *)param_1,(CTakeDamageInfo *)&local_7c);
}
pCVar13 = (CBaseEntity *)0x0;
if (((local_48 != 0xffffffff) &&
(puVar11 = g_pEntityList + (local_48 & 0xfff) * 0x10, puVar11 != (undefined *)0xfffffffc
)) && (*(uint *)(puVar11 + 8) == local_48 >> 0xc)) {
pCVar13 = *(CBaseEntity **)(puVar11 + 4);
}
local_88 = local_70;
local_84 = local_6c;
local_80 = local_68;
CSoundEnt::InsertSound(1,(Vector *)&local_88,200,0.2,pCVar13,0,(CBaseEntity *)0x0);
uVar12 = (uint)(iVar9 != 0 && piVar5 != (int *)0x0);
*(IHandleEntity **)(this + 0x10) = param_1;
}
}
else {
*(IHandleEntity **)(this + 0x10) = param_1;
Pickup_ForcePlayerToDropThisObject((CBaseEntity *)param_1);
if (local_40 != 0.0) {
CBaseEntity::TakeDamage((CBaseEntity *)param_1,(CTakeDamageInfo *)&local_7c);
}
}
}
return uVar12;
}
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.