CTankClaw::OnHit
0x00561860 · 3722 bytes · __thiscall
_ZN9CTankClaw5OnHitER10CGameTraceRK6Vectorb
Decompiled
undefined (4 params)
/* CTankClaw::OnHit(CGameTrace&, Vector const&, bool) */
undefined4 __thiscall
CTankClaw::OnHit(CTankClaw *this,CGameTrace *param_1,Vector *param_2,bool param_3)
{
CBaseEntity *pCVar1;
code *pcVar2;
float fVar3;
uint *puVar4;
uint uVar5;
CTakeDamageInfo *pCVar6;
bool bVar7;
char cVar8;
byte bVar9;
CBaseEntity *this_00;
int iVar10;
int *piVar11;
undefined4 uVar12;
CBasePropDoor *this_01;
int iVar13;
Vector *pVVar14;
CBaseEntity *this_02;
undefined4 extraout_EDX;
undefined *puVar15;
int *piVar16;
float *pfVar17;
longdouble lVar18;
int aiStackY_120 [2];
float fStackY_118;
char *pcVar19;
float local_d4;
float local_cc;
undefined4 *local_c4;
Vector local_b4 [12];
Vector local_a8 [12];
undefined **local_9c [8];
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;
int local_48;
undefined4 local_44;
undefined4 local_40;
undefined4 local_3c;
undefined4 local_38;
undefined2 local_34;
undefined4 local_30;
undefined4 local_2c;
undefined4 local_28;
undefined1 local_24;
undefined1 local_23;
piVar16 = (int *)&stack0xfffffef4;
piVar11 = (int *)&stack0xfffffef4;
pfVar17 = (float *)&stack0xfffffef4;
this_00 = (CBaseEntity *)CTerrorWeapon::GetPlayerOwner((CTerrorWeapon *)this);
if (this_00 == (CBaseEntity *)0x0) {
return 0;
}
pCVar1 = *(CBaseEntity **)(param_1 + 0x4c);
if (pCVar1 == (CBaseEntity *)0x0) {
return 0;
}
cVar8 = (**(code **)(*(int *)pCVar1 + 0x16c))();
this_02 = (CBaseEntity *)0x0;
if (cVar8 != '\0') {
this_02 = pCVar1;
}
if (!param_3) goto LAB_005618cd;
lVar18 = (longdouble)CDirector::GetTankDamage(TheDirector,pCVar1);
local_cc = (float)lVar18;
if ((((this[0x17f0] == (CTankClaw)0x0) &&
(cVar8 = (**(code **)(*(int *)this_00 + 0x778))(), cVar8 == '\0')) &&
(this_02 != (CBaseEntity *)0x0)) &&
(cVar8 = (**(code **)(*(int *)this_02 + 0x7e8))(), cVar8 != '\0')) {
if (((byte)this_02[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition(this_02);
}
fVar3 = *(float *)(this_02 + 0x2e8);
iVar10 = (**(code **)(*(int *)this_00 + 0x288))();
local_cc = (float)((uint)local_cc & -(uint)(*(float *)(iVar10 + 8) <= fVar3));
}
if ((*(char **)(pCVar1 + 0x7c) == "prop_door*") ||
(cVar8 = CBaseEntity::ClassMatchesComplex(pCVar1,"prop_door*"), cVar8 != '\0')) {
this_01 = (CBasePropDoor *)__dynamic_cast();
if (this_01 == (CBasePropDoor *)0x0) goto LAB_005622b0;
cVar8 = (**(code **)(*(int *)this_01 + 0x478))();
if (cVar8 != '\0') {
iVar10 = (**(code **)(*(int *)this_00 + 0x52c))();
if (((iVar10 == 0) ||
(iVar10 = (**(code **)(*(int *)this_00 + 0x52c))(), (*(byte *)(iVar10 + 0x12d) & 8) == 0))
&& ((this_01[0x1624] != (CBasePropDoor)0x0 ||
(cVar8 = (**(code **)(*(int *)this_01 + 0x484))(), cVar8 == '\0')))) {
piVar11 = (int *)(**(code **)(*gameeventmanager + 0x1c))();
if (piVar11 != (int *)0x0) {
pcVar2 = *(code **)(*piVar11 + 0x30);
(**(code **)(*engine + 0x40))();
(*pcVar2)();
(**(code **)(*gameeventmanager + 0x20))();
}
CBasePropDoor::OnInfectedAttack(this_01);
return 0;
}
if ((this_01[0x1624] == (CBasePropDoor)0x0) && (this_01[0x105] != (CBasePropDoor)0x2)) {
if (*(int *)(this_01 + 0x15f4) == 0) {
local_7c = 0;
local_70 = 0xffffffff;
local_6c = 0;
(**(code **)(*(int *)this_01 + 0xb4))();
return 0;
}
local_7c = 0;
local_70 = 0xffffffff;
local_6c = 0;
(**(code **)(*(int *)this_01 + 0xb4))();
return 0;
}
}
CBasePropDoor::OnInfectedAttack(this_01);
bVar7 = false;
local_cc = *(float *)(ZombieDoorPoundDamage._28_4_ + 0x2c) * 20.0;
}
else if ((*(char **)(pCVar1 + 0x7c) == "func_door*") ||
(cVar8 = CBaseEntity::ClassMatchesComplex(pCVar1,"func_door*"), cVar8 != '\0')) {
piVar11 = (int *)__dynamic_cast();
if (piVar11 == (int *)0x0) goto LAB_005622b0;
(**(code **)(*piVar11 + 0x1ac))();
bVar7 = false;
pfVar17 = (float *)&stack0xfffffef4;
}
else if (this_02 == (CBaseEntity *)0x0) {
iVar10 = (**(code **)(*(int *)this_00 + 0x144))();
if (iVar10 == 0) {
pcVar19 = "Claw.Hit";
}
else {
CBaseEntity::EmitSound(pCVar1,"Claw.HitFlesh",0.0,(float *)0x0);
pcVar19 = "HulkZombie.Punch";
}
CBaseEntity::EmitSound(this_00,pcVar19,0.0,(float *)0x0);
LAB_005622b0:
bVar7 = false;
pfVar17 = (float *)&stack0xfffffef4;
}
else {
if (local_cc == 0.0) {
return 0;
}
iVar10 = CBaseEntity::GetTeamNumber(this_02);
cVar8 = IsASurvivorTeam(iVar10);
if (cVar8 != '\0') {
iVar10 = (**(code **)(*(int *)this_02 + 0x52c))();
iVar13 = (**(code **)(*(int *)this_00 + 0x52c))();
if (((iVar13 != 0) && (iVar10 != 0)) &&
(((byte)(*(uint *)(iVar10 + 300) >> 0xb) & 1) !=
((byte)(*(uint *)(iVar13 + 300) >> 0xb) & 1))) {
pVVar14 = (Vector *)(**(code **)(*(int *)this + 0x288))();
iVar10 = CGlobalEntityList::FindEntityByClassnameWithin
((CGlobalEntityList *)gEntList,(CBaseEntity *)0x0,"prop_door*",pVVar14,
40.0);
if (((iVar10 != 0) && (piVar11 = (int *)__dynamic_cast(), piVar11 != (int *)0x0)) &&
((cVar8 = (**(code **)(*piVar11 + 0x478))(), cVar8 != '\0' && (piVar11[0x57d] == 0)))) {
return 0;
}
}
uVar5 = *(uint *)(this_02 + 0x3e68);
piVar11 = (int *)&stack0xfffffef4;
if (((uVar5 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar5 & 0xfff) * 0x10, piVar11 = (int *)&stack0xfffffef4,
puVar15 != (undefined *)0xfffffffc)) &&
((piVar11 = (int *)&stack0xfffffef4, *(uint *)(puVar15 + 8) == uVar5 >> 0xc &&
(pCVar6 = *(CTakeDamageInfo **)(puVar15 + 4), piVar11 = (int *)&stack0xfffffef4,
pCVar6 != (CTakeDamageInfo *)0x0)))) {
ClearMultiDamage();
AngleVectors((QAngle *)(this + 0x3a8),local_b4,(Vector *)0x0,(Vector *)0x0);
CTakeDamageInfo::CTakeDamageInfo
((CTakeDamageInfo *)&local_7c,(CBaseEntity *)this,this_00,250.0,0x80,0);
(**(code **)(*(int *)this + 0x700))();
(**(code **)(*(int *)this_00 + 0x478))();
CalculateMeleeDamageForce((CTakeDamageInfo *)&local_7c,local_a8,(Vector *)local_9c,1.0);
CBaseEntity::DispatchTraceAttack(pCVar6,(Vector *)&local_7c,(CGameTrace *)local_b4);
ApplyMultiDamage();
piVar11 = (int *)&stack0xfffffeec;
}
uVar5 = *(uint *)(this_02 + 0x33c4);
if ((((uVar5 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc))
&& (*(uint *)(puVar15 + 8) == uVar5 >> 0xc)) &&
(iVar10 = *(int *)(puVar15 + 4), iVar10 != 0)) {
piVar11[1] = 0;
*piVar11 = iVar10;
piVar11[-1] = 0x56255d;
CTerrorPlayer::ReleaseTongueVictim((CTerrorPlayer *)*piVar11,SUB41(piVar11[1],0));
}
}
local_c4 = &local_7c;
fVar3 = *(float *)(ZombieAttackMovementPenalty._28_4_ + 0x2c);
if (fVar3 != *(float *)(this_00 + 0x2854)) {
if (this_00[0x6c] == (CBaseEntity)0x0) {
puVar4 = *(uint **)(this_00 + 0x30);
if (puVar4 != (uint *)0x0) {
*puVar4 = *puVar4 | 0x101;
*piVar11 = (int)puVar4;
piVar11[-1] = 0x562589;
iVar10 = CBaseEdict::GetChangeAccessor((CBaseEdict *)*piVar11);
*(undefined2 *)(iVar10 + 2) = 0;
}
}
else {
this_00[0x70] = (CBaseEntity)((byte)this_00[0x70] | 1);
}
*(float *)(this_00 + 0x2854) = fVar3;
}
*piVar11 = (int)local_c4;
piVar11[-1] = 0x56212f;
CRecipientFilter::CRecipientFilter((CRecipientFilter *)*piVar11);
*piVar11 = (int)local_c4;
/* try { // try from 00562132 to 00562163 has its CatchHandler @ 00562738 */
piVar11[-1] = 0x562137;
CRecipientFilter::MakeReliable((CRecipientFilter *)*piVar11);
piVar11[1] = (int)this_00;
*piVar11 = (int)local_c4;
piVar11[-1] = 0x562143;
CRecipientFilter::AddRecipient((CRecipientFilter *)*piVar11,(CBasePlayer *)piVar11[1]);
piVar11[1] = (int)"Splatter";
*piVar11 = (int)local_c4;
piVar11[-1] = 0x562153;
UserMessageBegin((IRecipientFilter *)*piVar11,(char *)piVar11[1]);
*piVar11 = 1;
piVar11[-1] = 0x56215f;
MessageWriteByte(*piVar11);
piVar11[-1] = 0x562164;
MessageEnd();
*piVar11 = (int)local_c4;
piVar11[-1] = 0x56216c;
CRecipientFilter::~CRecipientFilter((CRecipientFilter *)*piVar11);
bVar7 = true;
pfVar17 = (float *)piVar11;
}
local_c4 = &local_7c;
if (local_cc < 1.0) {
uVar12 = 0;
}
else {
iVar10 = *(int *)this;
pfVar17[3] = *(float *)param_2;
pfVar17[4] = *(float *)(param_2 + 4);
fVar3 = *(float *)(param_2 + 8);
pfVar17[2] = (float)pCVar1;
pfVar17[5] = fVar3;
pfVar17[1] = (float)this;
*pfVar17 = (float)local_a8;
pcVar2 = *(code **)(iVar10 + 0x700);
pfVar17[-1] = 7.907971e-39;
(*pcVar2)();
*pfVar17 = (float)pCVar1;
pfVar17[-1] = (float)this;
pfVar17[-2] = 7.907997e-39;
cVar8 = IsPhysicsTarget((CTankClaw *)pfVar17[-1],(CBaseEntity *)*pfVar17);
local_d4 = 1.0;
if (cVar8 != '\0') {
if (((byte)pCVar1[0x14d] & 8) != 0) {
pfVar17[-1] = (float)pCVar1;
pfVar17[-2] = 7.910548e-39;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)pfVar17[-1]);
if (((byte)pCVar1[0x14d] & 8) != 0) {
pfVar17[-1] = (float)pCVar1;
pfVar17[-2] = 7.910586e-39;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)pfVar17[-1]);
}
}
pfVar17[8] = -NAN;
pfVar17[7] = 0.0;
pfVar17[6] = 0.0;
pfVar17[3] = *(float *)(pCVar1 + 0x37c);
pfVar17[4] = *(float *)(pCVar1 + 0x380);
pfVar17[5] = *(float *)(pCVar1 + 900);
*pfVar17 = (float)*(undefined4 *)(pCVar1 + 0x2e0);
pfVar17[1] = *(float *)(pCVar1 + 0x2e4);
fVar3 = *(float *)(pCVar1 + 0x2e8);
pfVar17[-1] = (float)"tank_object_throw";
pfVar17[2] = fVar3;
pfVar17[-2] = 7.908194e-39;
DispatchParticleEffect();
pfVar17[1] = *(float *)param_2;
pfVar17[2] = *(float *)(param_2 + 4);
fVar3 = *(float *)(param_2 + 8);
*pfVar17 = (float)pCVar1;
pfVar17[3] = fVar3;
pfVar17[-1] = (float)this;
pfVar17[-2] = 7.908256e-39;
lVar18 = (longdouble)GetPushForce();
pfVar17[2] = 0.0;
pfVar17[1] = (float)&CPhysicsProp::typeinfo;
*pfVar17 = (float)&CBaseEntity::typeinfo;
pfVar17[-1] = (float)pCVar1;
local_d4 = (float)lVar18;
pfVar17[-2] = 7.908309e-39;
iVar10 = __dynamic_cast();
if (iVar10 != 0) {
fVar3 = *(float *)(gpGlobals + 0xc);
*pfVar17 = (float)this_00;
pfVar17[-1] = (float)iVar10;
pfVar17[1] = fVar3 + 5.0;
pfVar17[-2] = 7.908367e-39;
CBreakableProp::SetPhysicsAttacker
((CBreakableProp *)pfVar17[-1],(CBasePlayer *)*pfVar17,pfVar17[1]);
}
}
bVar9 = 1;
if (this_02 != (CBaseEntity *)0x0) {
iVar10 = *(int *)this_02;
pfVar17[-1] = (float)this_02;
pcVar2 = *(code **)(iVar10 + 0x7e8);
pfVar17[-2] = 7.908403e-39;
bVar9 = (*pcVar2)();
bVar9 = bVar9 ^ 1;
}
pfVar17[1] = (float)this_00;
pfVar17[4] = 0.0;
pfVar17[3] = 1.79366e-43;
pfVar17[2] = local_cc;
*pfVar17 = (float)this;
pfVar17[-1] = (float)local_c4;
pfVar17[-2] = 7.908504e-39;
CTakeDamageInfo::CTakeDamageInfo
((CTakeDamageInfo *)pfVar17[-1],(CBaseEntity *)*pfVar17,(CBaseEntity *)pfVar17[1],
pfVar17[2],(int)pfVar17[3],(int)pfVar17[4]);
iVar10 = *(int *)this_00;
*pfVar17 = (float)this_00;
pfVar17[-1] = (float)local_9c;
pcVar2 = *(code **)(iVar10 + 0x478);
pfVar17[-2] = 7.908525e-39;
(*pcVar2)();
pfVar17[-2] = (float)extraout_EDX;
pfVar17[-1] = (float)local_a8;
pfVar17[1] = local_d4;
pfVar17[-2] = (float)local_c4;
*pfVar17 = (float)local_9c;
pfVar17[-3] = 7.908585e-39;
CalculateMeleeDamageForce
((CTakeDamageInfo *)pfVar17[-2],(Vector *)pfVar17[-1],(Vector *)*pfVar17,pfVar17[1]);
pfVar17[-3] = 7.908592e-39;
ClearMultiDamage();
pfVar17[1] = (float)param_1;
pfVar17[-1] = (float)local_c4;
*pfVar17 = (float)param_2;
pfVar17[-2] = (float)pCVar1;
pfVar17[-3] = 7.908641e-39;
CBaseEntity::DispatchTraceAttack
((CTakeDamageInfo *)pfVar17[-2],(Vector *)pfVar17[-1],(CGameTrace *)*pfVar17);
pfVar17[-3] = 7.908648e-39;
ApplyMultiDamage();
if (cVar8 != '\0') {
pfVar17[1] = 0.0;
*pfVar17 = (float)&CPhysicsProp::typeinfo;
pfVar17[-1] = (float)&CBaseEntity::typeinfo;
pfVar17[-2] = (float)pCVar1;
pfVar17[-3] = 7.908737e-39;
piVar11 = (int *)__dynamic_cast();
if (piVar11 != (int *)0x0) {
pfVar17[-2] = (float)piVar11;
pfVar17[-3] = 7.90877e-39;
CPhysicsProp::OnHitByTank((CPhysicsProp *)pfVar17[-2]);
if ((*(char *)((int)piVar11 + 0x105) == '\x02') && (piVar11[0x596] == 0)) {
iVar10 = *piVar11;
pfVar17[-2] = (float)piVar11;
pcVar2 = *(code **)(iVar10 + 0x470);
pfVar17[-3] = 7.910628e-39;
cVar8 = (*pcVar2)();
if (cVar8 == '\0') goto LAB_00561eda;
}
pfVar17[-3] = 7.908829e-39;
cVar8 = CTerrorGameRules::HasPlayerControlledZombies();
if (cVar8 == '\0') {
pfVar17[-1] = (float)piVar11;
pfVar17[-2] = (float)TheDirector;
pfVar17[-3] = 7.911433e-39;
CDirector::FadeOutOnAllTanksDead((CDirector *)pfVar17[-2],(CBaseEntity *)pfVar17[-1]);
}
else {
pfVar17[1] = 60.0;
*pfVar17 = 40.0;
pfVar17[-1] = (float)piVar11;
pfVar17[-2] = (float)TheDirector;
pfVar17[-3] = 7.908912e-39;
CDirector::FadeOutAfterDelay
((CDirector *)pfVar17[-2],(CBaseEntity *)pfVar17[-1],*pfVar17,pfVar17[1]);
}
}
}
LAB_00561eda:
if ((bVar9 != 0) && (this_02 != (CBaseEntity *)0x0)) {
iVar10 = *(int *)this_02;
pfVar17[-2] = (float)this_02;
pcVar2 = *(code **)(iVar10 + 0x7e8);
pfVar17[-3] = 7.910138e-39;
cVar8 = (*pcVar2)();
if (cVar8 != '\0') {
uVar12 = 1;
pfVar17 = pfVar17 + -2;
goto LAB_00561ee4;
}
}
uVar12 = 0;
pfVar17 = pfVar17 + -2;
}
LAB_00561ee4:
piVar16 = (int *)pfVar17;
if (bVar7) {
iVar10 = *(int *)this;
pfVar17[2] = (float)uVar12;
*pfVar17 = (float)this;
pfVar17[1] = (float)this_02;
pcVar2 = *(code **)(iVar10 + 0x710);
pfVar17[-1] = 7.908992e-39;
(*pcVar2)();
}
LAB_005618cd:
local_c4 = &local_7c;
local_7c = *(undefined4 *)(param_1 + 0xc);
local_64 = 0;
local_34 = *(undefined2 *)(param_1 + 0x40);
local_60 = 0;
local_78 = *(undefined4 *)(param_1 + 0x10);
local_5c = 0;
local_74 = *(undefined4 *)(param_1 + 0x14);
local_28 = *(undefined4 *)(param_1 + 0x50);
local_70 = *(undefined4 *)param_1;
local_58 = 0;
local_6c = *(undefined4 *)(param_1 + 4);
local_68 = *(undefined4 *)(param_1 + 8);
local_54 = 0;
local_50 = 0;
local_4c = 0;
local_44 = 0x3f800000;
local_38 = 0;
local_40 = 0;
local_3c = 0;
local_30 = 0;
local_24 = 0;
local_23 = 0;
local_2c = 4;
if (*(int *)(*(int *)(param_1 + 0x4c) + 0x30) == 0) {
local_48 = 0;
}
else {
local_48 = *(int *)(*(int *)(param_1 + 0x4c) + 0x30) - *(int *)(gpGlobals + 0x58) >> 4;
}
*piVar16 = (int)local_9c;
piVar16[-1] = 0x5619a5;
CRecipientFilter::CRecipientFilter((CRecipientFilter *)*piVar16);
*piVar16 = (int)local_9c;
local_9c[0] = &PTR__CPASFilter_00bfaf28;
piVar16[1] = (int)local_c4;
/* try { // try from 005619bc to 005619c0 has its CatchHandler @ 00562750 */
piVar16[-1] = 0x5619c1;
CRecipientFilter::AddRecipientsByPAS((CRecipientFilter *)*piVar16,(Vector *)piVar16[1]);
if (((byte)this_00[0x14d] & 8) != 0) {
*piVar16 = (int)this_00;
piVar16[-1] = 0x561a68;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar16);
}
local_58 = *(undefined4 *)(this_00 + 0x37c);
local_54 = *(undefined4 *)(this_00 + 0x380);
local_50 = *(undefined4 *)(this_00 + 900);
piVar16[3] = (int)local_c4;
piVar16[2] = (int)"KnifeSlash";
piVar16[1] = 0;
*piVar16 = (int)local_9c;
local_4c = 1;
/* try { // try from 00561a19 to 00561ae1 has its CatchHandler @ 00562762 */
piVar16[-1] = 0x561a1e;
DispatchEffect((IRecipientFilter *)*piVar16,(float)piVar16[1],(char *)piVar16[2],
(CEffectData *)piVar16[3]);
if (this_02 != (CBaseEntity *)0x0) {
*piVar16 = (int)this_02;
piVar16[-1] = 0x561a30;
iVar10 = CBaseEntity::GetTeamNumber((CBaseEntity *)*piVar16);
*piVar16 = iVar10;
piVar16[-1] = 0x561a38;
cVar8 = IsASurvivorTeam(iVar10);
if (cVar8 != '\0') {
if (*(int *)(this_00 + 0x3a78) != 0) {
if (this_00[0x6c] == (CBaseEntity)0x0) {
puVar4 = *(uint **)(this_00 + 0x30);
if (puVar4 != (uint *)0x0) {
*puVar4 = *puVar4 | 0x101;
*piVar16 = (int)puVar4;
/* try { // try from 00561f32 to 00561f36 has its CatchHandler @ 00562762 */
piVar16[-1] = 0x561f37;
iVar10 = CBaseEdict::GetChangeAccessor((CBaseEdict *)*piVar16);
*(undefined2 *)(iVar10 + 2) = 0;
}
}
else {
this_00[0x70] = (CBaseEntity)((byte)this_00[0x70] | 1);
}
*(undefined4 *)(this_00 + 0x3a78) = 0;
}
pCVar1 = this_00 + 0x3a7c;
*piVar16 = (int)pCVar1;
piVar16[-1] = 0x561a8c;
lVar18 = (longdouble)CountdownTimer::Now();
if ((float)lVar18 + 2.0 != *(float *)(this_00 + 0x3a84)) {
iVar10 = *(int *)(this_00 + 0x3a7c);
*piVar16 = (int)pCVar1;
piVar16[1] = (int)(this_00 + 0x3a84);
/* try { // try from 005621e3 to 005621e5 has its CatchHandler @ 00562762 */
pcVar2 = *(code **)(iVar10 + 4);
piVar16[-1] = 0x5621e6;
(*pcVar2)();
*(float *)(this_00 + 0x3a84) = (float)lVar18 + 2.0;
}
if (*(float *)(this_00 + 0x3a80) != 2.0) {
iVar10 = *(int *)(this_00 + 0x3a7c);
*piVar16 = (int)pCVar1;
piVar16[1] = (int)(this_00 + 0x3a80);
pcVar2 = *(code **)(iVar10 + 4);
piVar16[-1] = 0x561ae2;
(*pcVar2)();
*(undefined4 *)(this_00 + 0x3a80) = 0x40000000;
}
}
}
*piVar16 = (int)local_9c;
local_9c[0] = &PTR__CPASFilter_00bfaf28;
piVar16[-1] = 0x561a4e;
CRecipientFilter::~CRecipientFilter((CRecipientFilter *)*piVar16);
return 0;
}
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.