InfectedLeanOnWall::OnStart
0x00a372e0 · 2089 bytes · __thiscall
_ZN18InfectedLeanOnWall7OnStartEP8InfectedP6ActionIS0_E
Decompiled
undefined (3 params)
/* InfectedLeanOnWall::OnStart(Infected*, Action<Infected>*) */
InfectedLeanOnWall * __thiscall
InfectedLeanOnWall::OnStart(InfectedLeanOnWall *this,Infected *param_1,Action *param_2)
{
Action *pAVar1;
float fVar2;
float fVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
IHandleEntity *pIVar8;
int *piVar9;
undefined4 uVar10;
float *pfVar11;
undefined4 *puVar12;
longdouble lVar13;
float fVar14;
float fVar15;
float fVar16;
float fVar17;
float local_12c;
Vector *local_124;
QAngle local_114 [4];
undefined4 local_110;
float local_108;
float local_104;
float local_100;
float local_fc;
float local_f8;
float local_f4;
undefined1 local_f0 [12];
undefined **local_e4 [4];
Action *local_d4;
undefined4 local_d0;
float local_cc;
float local_c8;
float local_c4;
float local_bc;
float local_b8;
float local_b4;
float local_ac;
float local_a8;
float local_a4;
float local_9c;
float local_98;
float local_94;
undefined4 local_8c;
undefined1 local_88;
undefined1 local_87;
float local_70;
float local_6c;
float local_68;
Vector local_64 [32];
float local_44;
char local_3a;
char local_39;
(**(code **)(*(int *)param_2 + 0x24c))(param_2,&local_108,&local_fc,local_f0);
fVar15 = *(float *)(param_1 + 0x34);
fVar17 = *(float *)(param_1 + 0x38);
fVar16 = *(float *)(param_1 + 0x3c);
fVar14 = local_104 * fVar17 + local_108 * fVar15 + local_100 * fVar16;
if (fVar14 < -0.7071) {
*(undefined4 *)(param_1 + 0x44) = 0x23f;
local_70 = -fVar15;
local_6c = -fVar17;
local_68 = -fVar16;
VectorAngles((Vector *)&local_70,local_114);
}
else if (0.7071 < fVar14) {
*(undefined4 *)(param_1 + 0x44) = 0x240;
VectorAngles((Vector *)(param_1 + 0x34),local_114);
}
else {
if (local_f8 * fVar17 + local_fc * fVar15 + fVar16 * local_f4 <= 0.0) {
*(undefined4 *)(param_1 + 0x44) = 0x242;
local_6c = -fVar15;
local_70 = fVar17;
}
else {
*(undefined4 *)(param_1 + 0x44) = 0x241;
local_70 = -fVar17;
local_6c = fVar15;
}
local_68 = 0.0;
VectorAngles((Vector *)&local_70,local_114);
}
local_124 = (Vector *)&local_70;
pAVar1 = param_2 + 0x1a3c;
pIVar8 = (IHandleEntity *)(**(code **)(*(int *)(param_2 + 0x1a3c) + 0xb4))(pAVar1);
CTraceFilterSimple::CTraceFilterSimple
((CTraceFilterSimple *)local_e4,pIVar8,0,IgnoreActorsTraceFilterFunction);
local_e4[0] = &PTR_ShouldHitEntity_00ca96c8;
local_d0 = 0;
local_d4 = pAVar1;
piVar9 = (int *)(**(code **)(*(int *)param_2 + 0x594))(param_2);
lVar13 = (longdouble)(**(code **)(*piVar9 + 0x118))(piVar9);
fVar15 = (float)lVar13 * 0.5;
fVar17 = fVar15 * 0.5;
if (*(int *)(param_1 + 0x44) == 0x240) {
piVar9 = (int *)(**(code **)(*(int *)param_2 + 0x594))(param_2);
lVar13 = (longdouble)(**(code **)(*piVar9 + 0x120))(piVar9);
fVar14 = (float)lVar13 * 0.4;
piVar9 = (int *)(**(code **)(*(int *)param_2 + 0x594))(param_2);
lVar13 = (longdouble)(**(code **)(*piVar9 + 0x120))(piVar9);
fVar16 = (float)lVar13 * 0.6;
}
else {
piVar9 = (int *)(**(code **)(*(int *)param_2 + 0x594))();
lVar13 = (longdouble)(**(code **)(*piVar9 + 0x120))(piVar9);
fVar14 = (float)lVar13 * 0.75;
piVar9 = (int *)(**(code **)(*(int *)param_2 + 0x594))(param_2);
lVar13 = (longdouble)(**(code **)(*piVar9 + 0x120))(piVar9);
fVar16 = (float)lVar13;
}
local_12c = -fVar17;
piVar9 = (int *)(**(code **)(*(int *)param_2 + 0x594))(param_2);
uVar10 = (**(code **)(*piVar9 + 0x130))(piVar9);
fVar2 = *(float *)(param_1 + 0x38);
fVar3 = *(float *)(param_1 + 0x34);
fVar4 = *(float *)(param_1 + 0x3c);
pfVar11 = (float *)(**(code **)(*(int *)(param_2 + 0x1a3c) + 0xd4))(pAVar1);
fVar5 = *pfVar11;
fVar6 = pfVar11[1];
fVar7 = pfVar11[2];
pfVar11 = (float *)(**(code **)(*(int *)(param_2 + 0x1a3c) + 0xd4))(pAVar1);
local_bc = (fVar5 - fVar3 * fVar15) - *pfVar11;
local_b8 = (fVar6 - fVar2 * fVar15) - pfVar11[1];
local_b4 = (fVar7 - fVar4 * fVar15) - pfVar11[2];
local_8c = 0;
local_87 = local_b4 * local_b4 + local_b8 * local_b8 + local_bc * local_bc != 0.0;
local_9c = (fVar17 - local_12c) * 0.5;
local_94 = (fVar16 - fVar14) * 0.5;
local_a4 = (fVar14 + fVar16) * 0.5;
local_88 = local_9c * local_9c + local_9c * local_9c + local_94 * local_94 < 1e-06;
local_ac = (fVar17 + local_12c) * 0.5;
local_cc = *pfVar11 + local_ac;
local_c8 = pfVar11[1] + local_ac;
local_ac = -local_ac;
local_c4 = pfVar11[2] + local_a4;
local_a4 = -local_a4;
local_a8 = local_ac;
local_98 = local_9c;
(**(code **)(*enginetrace + 0x14))(enginetrace,&local_cc,uVar10,local_e4,local_124);
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
DebugDrawLine(local_124,local_64,0xff,0xff,0,true,-1.0);
}
if (((1.0 <= local_44) && (local_3a == '\0')) && (local_39 == '\0')) {
puVar12 = ::operator_new(0x4c);
puVar12[8] = 0;
puVar12[9] = 0;
puVar12[10] = 0;
puVar12[3] = 0;
puVar12[4] = 0;
puVar12[5] = 0;
puVar12[6] = 0;
puVar12[7] = 0;
puVar12[2] = 0;
*(undefined1 *)(puVar12 + 0xc) = 0;
*(undefined1 *)((int)puVar12 + 0x31) = 0;
puVar12[0xb] = 0;
*puVar12 = &PTR__InfectedStandingActivity_00d24c08;
puVar12[1] = &PTR__InfectedStandingActivity_00d24d6c;
puVar12[0xe] = &PTR_NetworkStateChanged_00c0b6e0;
puVar12[0xf] = 0;
puVar12[0x10] = 0xbf800000;
puVar12[0xd] = 0x24c;
puVar12[0x11] = 0;
*(undefined1 *)(puVar12 + 0x12) = 0;
*(undefined4 **)(this + 4) = puVar12;
*(undefined4 *)this = 1;
*(char **)(this + 8) = "No support for lean";
return this;
}
*(undefined4 *)(param_1 + 0x40) = local_110;
piVar9 = (int *)(**(code **)(*(int *)param_2 + 0x594))(param_2);
(**(code **)(*piVar9 + 0xd8))(piVar9,*(undefined4 *)(param_1 + 0x44),1);
lVar13 = (longdouble)RandomFloat(0x40a00000,0x41a00000);
fVar15 = (float)lVar13;
lVar13 = (longdouble)CountdownTimer::Now();
if ((float)lVar13 + fVar15 != *(float *)(param_1 + 0x50)) {
(**(code **)(*(int *)(param_1 + 0x48) + 4))(param_1 + 0x48,param_1 + 0x50);
*(float *)(param_1 + 0x50) = (float)lVar13 + fVar15;
}
if (fVar15 != *(float *)(param_1 + 0x4c)) {
(**(code **)(*(int *)(param_1 + 0x48) + 4))(param_1 + 0x48,param_1 + 0x4c);
*(float *)(param_1 + 0x4c) = fVar15;
}
*(undefined4 *)this = 0;
*(undefined4 *)(this + 4) = 0;
*(undefined4 *)(this + 8) = 0;
return this;
}
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.