CTerrorPlayer::AvoidPlayers
0x004f5490 · 3838 bytes · __thiscall
_ZN13CTerrorPlayer12AvoidPlayersEP8CUserCmd
Decompiled
undefined (2 params)
/* CTerrorPlayer::AvoidPlayers(CUserCmd*) */
void __thiscall CTerrorPlayer::AvoidPlayers(CTerrorPlayer *this,CUserCmd *param_1)
{
uint uVar1;
uint uVar2;
code *pcVar3;
char cVar4;
byte bVar5;
int *piVar6;
int iVar7;
CTerrorPlayer *pCVar8;
undefined4 uVar9;
float *pfVar10;
float *pfVar11;
undefined4 uVar12;
undefined *puVar13;
undefined4 extraout_ECX;
uint uVar14;
uint *puVar15;
uint *puVar16;
CUserCmd *pCVar17;
undefined4 *puVar18;
byte bVar19;
longdouble lVar20;
float fVar21;
float fVar22;
float fVar23;
float fVar24;
float fVar25;
float fVar26;
float fVar27;
uint auStackY_188 [6];
float *local_170;
float *local_144;
CUserCmd *local_140;
float *local_134;
float local_130;
float local_128;
float local_124;
float local_120;
float local_11c;
float local_118;
float local_114;
float local_110;
float local_10c;
float local_108;
float local_104;
float local_100;
float local_fc;
float local_f8;
float local_f4;
float local_f0;
float local_ec;
float local_e8;
float local_e4;
undefined4 local_e0 [3];
float local_d4;
float local_d0;
float local_cc;
float local_c8;
float local_c4;
float local_c0;
float local_bc;
float local_b8;
float local_b4;
float local_b0;
float local_ac;
float local_a8;
float local_a4;
float local_a0;
float local_9c;
undefined1 local_98 [12];
undefined1 local_8c [12];
undefined **local_80 [4];
float local_70;
float local_6c;
float local_68;
float local_44;
char local_3a;
char local_39;
bVar19 = 0;
local_170 = (float *)0x4f54aa;
cVar4 = (**(code **)(*(int *)this + 300))();
if (cVar4 != '\0') {
if (0.0 < *(float *)(this + 0x2e74)) {
local_170 = (float *)0x4f54cc;
lVar20 = (longdouble)CountdownTimer::Now();
if ((float)lVar20 < *(float *)(this + 0x2e74)) {
return;
}
}
local_170 = (float *)0x4f54f5;
cVar4 = CTerrorPlayerAnimState::IsHealing(*(CTerrorPlayerAnimState **)(this + 0x2910));
if ((((cVar4 == '\0') &&
((((uVar14 = *(uint *)(this + 0x3e68), uVar14 == 0xffffffff ||
(puVar13 = g_pEntityList + (uVar14 & 0xfff) * 0x10, puVar13 == (undefined *)0xfffffffc))
|| (*(uint *)(puVar13 + 8) != uVar14 >> 0xc)) || (*(int *)(puVar13 + 4) == 0)))) &&
(((uVar1 = *(uint *)(this + 0x3e48), uVar1 == 0xffffffff ||
(puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar13 == (undefined *)0xfffffffc)) ||
((*(uint *)(puVar13 + 8) != uVar1 >> 0xc || (*(int *)(puVar13 + 4) == 0)))))) &&
(((((uVar2 = *(uint *)(this + 0x3edc), uVar2 == 0xffffffff ||
(puVar13 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar13 == (undefined *)0xfffffffc))
|| (*(uint *)(puVar13 + 8) != uVar2 >> 0xc)) || (*(int *)(puVar13 + 4) == 0)) &&
((((uVar2 = *(uint *)(this + 0x3ee0), uVar2 == 0xffffffff ||
(puVar13 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar13 == (undefined *)0xfffffffc))
|| (*(uint *)(puVar13 + 8) != uVar2 >> 0xc)) || (*(int *)(puVar13 + 4) == 0)))))) {
if (((((uVar14 == 0xffffffff) ||
(puVar13 = g_pEntityList + (uVar14 & 0xfff) * 0x10, puVar13 == (undefined *)0xfffffffc))
|| ((*(uint *)(puVar13 + 8) != uVar14 >> 0xc || (*(int *)(puVar13 + 4) == 0)))) &&
(((uVar1 == 0xffffffff ||
(puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar13 == (undefined *)0xfffffffc))
|| ((*(uint *)(puVar13 + 8) != uVar1 >> 0xc || (*(int *)(puVar13 + 4) == 0)))))) &&
((((uVar14 = *(uint *)(this + 0x33c4), uVar14 == 0xffffffff ||
(puVar13 = g_pEntityList + (uVar14 & 0xfff) * 0x10, puVar13 == (undefined *)0xfffffffc))
|| (*(uint *)(puVar13 + 8) != uVar14 >> 0xc)) ||
((*(int *)(puVar13 + 4) == 0 || (this[0x39f1] != (CTerrorPlayer)0x0)))))) {
local_170 = (float *)0x4f5655;
cVar4 = (**(code **)(*(int *)this + 0x7e8))();
if (cVar4 != '\0') {
return;
}
}
local_170 = (float *)0x4f5668;
cVar4 = (**(code **)(*(int *)this + 0x558))();
if (cVar4 == '\0') {
local_170 = (float *)0x4f5678;
piVar6 = (int *)CBaseEntity::GetTeam((CBaseEntity *)this);
if (piVar6 != (int *)0x0) {
if (AvoidPlayers(CUserCmd*)::vecUp == '\0') {
local_170 = (float *)0x4f61b4;
iVar7 = __cxa_guard_acquire();
if (iVar7 != 0) {
AvoidPlayers(CUserCmd*)::vecUp = 0.0;
DAT_00fa42ac = 0.0;
DAT_00fa42b0 = 1.0;
local_170 = (float *)0x4f61e6;
__cxa_guard_release();
}
}
if (((byte)this[0x14d] & 8) != 0) {
local_170 = (float *)0x4f61a3;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
}
fVar27 = *(float *)(this + 0x2e0);
fVar26 = *(float *)(this + 0x2e4);
fVar24 = *(float *)(this + 0x2e8);
local_170 = (float *)0x4f56e1;
(**(code **)(*(int *)this + 0x5b0))();
local_170 = &local_11c;
auStackY_188[5] = 0x4f56f7;
auStackY_188[5] = (**(code **)(*(int *)this + 0x5b4))();
uVar14 = 0;
fVar24 = fVar24 + (local_114 - local_120) * 0.5;
local_128 = local_128 + fVar27;
local_120 = local_120 + fVar24;
local_114 = local_114 + fVar24;
local_124 = local_124 + fVar26;
local_11c = local_11c + fVar27;
local_118 = local_118 + fVar26;
puVar16 = auStackY_188 + 5;
while( true ) {
iVar7 = *piVar6;
*puVar16 = (uint)piVar6;
pcVar3 = *(code **)(iVar7 + 0x354);
puVar16[-1] = 0x4f582c;
iVar7 = (*pcVar3)();
if (iVar7 <= (int)uVar14) break;
iVar7 = *piVar6;
puVar16[1] = uVar14;
*puVar16 = (uint)piVar6;
pcVar3 = *(code **)(iVar7 + 0x358);
puVar16[-1] = 0x4f5843;
pCVar8 = (CTerrorPlayer *)(*pcVar3)();
puVar15 = puVar16;
if ((pCVar8 != (CTerrorPlayer *)0x0) && (this != pCVar8)) {
uVar1 = *(uint *)(pCVar8 + 0x3e68);
if ((((uVar1 == 0xffffffff) ||
(((puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10,
puVar13 == (undefined *)0xfffffffc || (*(uint *)(puVar13 + 8) != uVar1 >> 0xc))
|| (*(int *)(puVar13 + 4) == 0)))) &&
((((uVar1 = *(uint *)(pCVar8 + 0x3e48), uVar1 == 0xffffffff ||
(puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10,
puVar13 == (undefined *)0xfffffffc)) ||
(*(uint *)(puVar13 + 8) != uVar1 >> 0xc)) || (*(int *)(puVar13 + 4) == 0)))) &&
(((uVar1 = *(uint *)(pCVar8 + 0x33c4), uVar1 == 0xffffffff ||
(puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10,
puVar13 == (undefined *)0xfffffffc)) ||
((*(uint *)(puVar13 + 8) != uVar1 >> 0xc ||
((*(int *)(puVar13 + 4) == 0 || (pCVar8[0x39f1] != (CTerrorPlayer)0x0)))))))) {
iVar7 = *(int *)pCVar8;
*puVar16 = (uint)pCVar8;
pcVar3 = *(code **)(iVar7 + 0x7e8);
puVar16[-1] = 0x4f581a;
cVar4 = (*pcVar3)();
if (cVar4 != '\0') goto LAB_004f581e;
}
iVar7 = *(int *)pCVar8;
*puVar16 = (uint)pCVar8;
pcVar3 = *(code **)(iVar7 + 0x558);
puVar16[-1] = 0x4f58a3;
cVar4 = (*pcVar3)();
if ((cVar4 == '\0') && (((byte)pCVar8[0x1b4] & 4) == 0)) {
if (((byte)pCVar8[0x14d] & 8) != 0) {
*puVar16 = (uint)pCVar8;
puVar16[-1] = 0x4f58c9;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*puVar16);
}
fVar22 = *(float *)(pCVar8 + 0x2e0);
iVar7 = *(int *)pCVar8;
fVar23 = *(float *)(pCVar8 + 0x2e4);
fVar21 = *(float *)(pCVar8 + 0x2e8);
*puVar16 = (uint)&local_70;
puVar16[1] = (uint)pCVar8;
pcVar3 = *(code **)(iVar7 + 0x5b0);
puVar16[-1] = 0x4f5914;
uVar9 = (*pcVar3)();
puVar16[-1] = uVar9;
local_110 = local_70;
local_10c = local_6c;
local_108 = local_68;
iVar7 = *(int *)pCVar8;
puVar16[-1] = (uint)&local_70;
*puVar16 = (uint)pCVar8;
pcVar3 = *(code **)(iVar7 + 0x5b4);
puVar16[-2] = 0x4f594e;
uVar9 = (*pcVar3)();
puVar16[-2] = uVar9;
puVar16[1] = (uint)&local_104;
*puVar16 = (uint)&local_110;
local_104 = local_70 + fVar22;
puVar16[-1] = (uint)&local_11c;
local_110 = local_110 + fVar22;
puVar16[-2] = (uint)&local_128;
local_100 = local_6c + fVar23;
fVar21 = (local_68 - local_108) * 0.5 + fVar21;
local_10c = local_10c + fVar23;
local_108 = local_108 + fVar21;
local_fc = fVar21 + local_68;
puVar16[-3] = 0x4f5a11;
cVar4 = IsBoxIntersectingBox
((Vector *)puVar16[-2],(Vector *)puVar16[-1],(Vector *)*puVar16,
(Vector *)puVar16[1]);
puVar15 = puVar16 + -2;
if (cVar4 != '\0') {
iVar7 = *(int *)this;
puVar16[-2] = (uint)this;
pcVar3 = *(code **)(iVar7 + 0x778);
puVar16[-3] = 0x4f5a27;
cVar4 = (*pcVar3)();
if (cVar4 == '\0') {
iVar7 = *(int *)pCVar8;
puVar16[-2] = (uint)pCVar8;
pcVar3 = *(code **)(iVar7 + 0x778);
puVar16[-3] = 0x4f61f6;
cVar4 = (*pcVar3)();
if (cVar4 != '\0') {
return;
}
}
iVar7 = *(int *)this;
puVar16[-2] = (uint)this;
pcVar3 = *(code **)(iVar7 + 0x778);
puVar16[-3] = 0x4f5a3a;
cVar4 = (*pcVar3)();
bVar5 = 0;
if (cVar4 != '\0') {
iVar7 = *(int *)pCVar8;
puVar16[-2] = (uint)pCVar8;
pcVar3 = *(code **)(iVar7 + 0x778);
puVar16[-3] = 0x4f627e;
bVar5 = (*pcVar3)();
bVar5 = bVar5 ^ 1;
}
iVar7 = *(int *)pCVar8;
puVar16[-2] = (uint)pCVar8;
pcVar3 = *(code **)(iVar7 + 0x288);
puVar16[-3] = 0x4f5a55;
pfVar10 = (float *)(*pcVar3)();
fVar27 = *pfVar10 - fVar27;
fVar26 = pfVar10[1] - fVar26;
fVar24 = pfVar10[2] - fVar24;
iVar7 = *(int *)(pCVar8 + 0x194);
puVar16[-2] = (uint)(pCVar8 + 0x194);
pcVar3 = *(code **)(iVar7 + 4);
puVar16[-3] = 0x4f5aab;
pfVar10 = (float *)(*pcVar3)();
iVar7 = *(int *)(pCVar8 + 0x194);
puVar16[-2] = (uint)(pCVar8 + 0x194);
pcVar3 = *(code **)(iVar7 + 8);
puVar16[-3] = 0x4f5abf;
pfVar11 = (float *)(*pcVar3)();
fVar22 = SQRT((pfVar11[1] - pfVar10[1]) * (pfVar11[1] - pfVar10[1]) +
(*pfVar11 - *pfVar10) * (*pfVar11 - *pfVar10));
fVar23 = SQRT(fVar27 * fVar27 + fVar26 * fVar26 + fVar24 * fVar24);
if (fVar22 == 0.0) {
local_130 = (float)((uint)(float)*(int *)(player_max_separation_force._28_4_ +
0x30) & -(uint)(0.0 <= fVar23));
}
else {
local_130 = (fVar23 - fVar22) / -fVar22;
if (1.0 <= local_130) {
local_130 = 1.0;
}
if (local_130 <= 0.0) {
local_130 = 0.0;
}
local_130 = local_130 *
(float)*(int *)(player_max_separation_force._28_4_ + 0x30);
}
if (bVar5 != 0) {
local_130 = local_130 * *(float *)(sb_pushscale._28_4_ + 0x2c);
}
if (local_130 < 0.01) {
return;
}
if (((byte)this[0x14d] & 0x10) != 0) {
puVar16[-2] = (uint)this;
puVar16[-3] = 0x4f5bbb;
CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)puVar16[-2]);
}
if (*(float *)(this + 0x278) * *(float *)(this + 0x278) +
*(float *)(this + 0x274) * *(float *)(this + 0x274) <= 0.1) {
pCVar17 = param_1 + 0xc;
pfVar10 = &local_70;
for (iVar7 = 3; iVar7 != 0; iVar7 = iVar7 + -1) {
*pfVar10 = *(float *)pCVar17;
pCVar17 = pCVar17 + (uint)bVar19 * -8 + 4;
pfVar10 = pfVar10 + (uint)bVar19 * -2 + 1;
}
*puVar16 = (uint)&local_f8;
puVar16[1] = 0;
puVar16[-1] = 0;
puVar16[-2] = (uint)&local_70;
local_70 = 0.0;
puVar16[-3] = 0x4f6399;
AngleVectors((QAngle *)puVar16[-2],(Vector *)puVar16[-1],(Vector *)*puVar16,
(Vector *)puVar16[1]);
}
else {
if (((byte)this[0x14d] & 0x10) != 0) {
puVar16[-2] = (uint)this;
puVar16[-3] = 0x4f5bf5;
CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)puVar16[-2]);
}
fVar22 = *(float *)(this + 0x278);
fVar23 = *(float *)(this + 0x274);
puVar16[-2] = (uint)&local_f8;
local_f4 = DAT_00fa42b0 * fVar23;
local_f8 = -(fVar22 * DAT_00fa42b0);
local_f0 = AvoidPlayers(CUserCmd*)::vecUp * fVar22 - DAT_00fa42ac * fVar23;
puVar16[-3] = 0x4f5c65;
VectorNormalize((Vector *)puVar16[-2]);
}
local_140 = param_1 + 0xc;
local_144 = &local_70;
if (fVar26 * local_f4 + fVar27 * local_f8 + fVar24 * local_f0 < 0.0) {
local_ec = local_f8 * local_130;
local_e8 = local_f4 * local_130;
local_e4 = local_f0 * local_130;
}
else {
fVar27 = -local_130;
local_ec = local_f8 * fVar27;
local_e8 = local_f4 * fVar27;
local_e4 = fVar27 * local_f0;
}
fVar27 = *(float *)(this + 0x1ff8);
if (((byte)this[0x150] & 2) != 0) {
puVar16[-2] = (uint)this;
puVar16[-3] = 0x4f6303;
iVar7 = CBaseEntity::GetGroundEntity((CBaseEntity *)puVar16[-2]);
if (iVar7 != 0) {
fVar27 = fVar27 * 1.3333334;
}
}
if (fVar27 * fVar27 <
local_e8 * local_e8 + local_ec * local_ec + local_e4 * local_e4) {
puVar16[-2] = (uint)&local_ec;
puVar16[-3] = 0x4f62ac;
VectorNormalize((Vector *)puVar16[-2]);
local_ec = local_ec * fVar27;
local_e8 = local_e8 * fVar27;
local_e4 = fVar27 * local_e4;
}
local_134 = &local_ec;
puVar18 = local_e0;
for (iVar7 = 3; iVar7 != 0; iVar7 = iVar7 + -1) {
*puVar18 = *(undefined4 *)local_140;
local_140 = local_140 + (uint)bVar19 * -8 + 4;
puVar18 = puVar18 + (uint)bVar19 * -2 + 1;
}
*puVar16 = (uint)&local_c8;
puVar16[-1] = (uint)&local_d4;
puVar16[-2] = (uint)local_e0;
puVar16[1] = 0;
local_e0[0] = 0;
puVar16[-3] = 0x4f5da4;
AngleVectors((QAngle *)puVar16[-2],(Vector *)puVar16[-1],(Vector *)*puVar16,
(Vector *)puVar16[1]);
pfVar10 = &local_bc;
for (iVar7 = 3; iVar7 != 0; iVar7 = iVar7 + -1) {
*pfVar10 = *local_134;
local_134 = local_134 + (uint)bVar19 * -2 + 1;
pfVar10 = pfVar10 + (uint)bVar19 * -2 + 1;
}
puVar16[-2] = (uint)&local_bc;
puVar16[-3] = 0x4f5dc8;
VectorNormalize((Vector *)puVar16[-2]);
puVar16[1] = 0;
*puVar16 = 8;
puVar16[-1] = 0;
puVar16[-2] = (uint)local_80;
puVar16[-3] = 0x4f5dea;
CTraceFilterSimple::CTraceFilterSimple
((CTraceFilterSimple *)puVar16[-2],(IHandleEntity *)puVar16[-1],*puVar16
,(_func_bool_IHandleEntity_ptr_int *)puVar16[1]);
iVar7 = *(int *)this;
local_80[0] = &PTR_ShouldHitEntity_00c54558;
puVar16[-1] = 0;
puVar16[-2] = (uint)this;
pcVar3 = *(code **)(iVar7 + 0x7a0);
puVar16[-3] = 0x4f5e04;
uVar9 = (*pcVar3)();
iVar7 = *(int *)this;
puVar16[-2] = (uint)local_8c;
puVar16[-1] = (uint)this;
pcVar3 = *(code **)(iVar7 + 0x5b4);
puVar16[-3] = 0x4f5e1f;
(*pcVar3)();
puVar16[-3] = extraout_ECX;
iVar7 = *(int *)this;
puVar16[-2] = (uint)this;
puVar16[-3] = (uint)local_98;
pcVar3 = *(code **)(iVar7 + 0x5b0);
puVar16[-4] = 0x4f5e2f;
uVar12 = (*pcVar3)();
puVar16[-4] = uVar12;
fVar26 = local_b8 * 20.0;
uVar14 = *(uint *)(this + 0x14c);
fVar27 = *(float *)(this + 0x1acc);
fVar24 = local_b4 * 20.0;
fVar22 = local_bc * 20.0;
if ((uVar14 & 0x800) != 0) {
puVar16[-4] = (uint)this;
puVar16[-5] = 0x4f5ea8;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)puVar16[-4]);
uVar14 = *(uint *)(this + 0x14c);
}
fVar25 = local_bc * 20.0;
fVar21 = local_b8 * 20.0;
fVar23 = local_b4 * 20.0;
local_a4 = fVar22 + *(float *)(this + 0x2e0);
local_a0 = *(float *)(this + 0x2e4) + fVar26;
local_9c = (*(float *)(this + 0x2e8) + fVar24) - fVar27;
if ((uVar14 & 0x800) != 0) {
puVar16[-4] = (uint)this;
puVar16[-5] = 0x4f5f4f;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)puVar16[-4]);
}
fVar27 = *(float *)(this + 0x2e0);
fVar26 = *(float *)(this + 0x2e4);
fVar24 = *(float *)(this + 0x2e8);
puVar16[1] = (uint)local_80;
puVar16[2] = (uint)local_144;
puVar16[-2] = (uint)local_98;
local_b0 = fVar25 + fVar27;
local_ac = fVar21 + fVar26;
*puVar16 = uVar9;
puVar16[-1] = (uint)local_8c;
puVar16[-3] = (uint)&local_a4;
puVar16[-4] = (uint)&local_b0;
local_a8 = fVar23 + fVar24;
puVar16[-5] = 0x4f5fd5;
UTIL_TraceHull((Vector *)puVar16[-4],(Vector *)puVar16[-3],(Vector *)puVar16[-2],
(Vector *)puVar16[-1],*puVar16,(ITraceFilter *)puVar16[1],
(CGameTrace *)puVar16[2]);
if (((1.0 <= local_44) && (local_3a == '\0')) && (local_39 == '\0')) {
return;
}
fVar26 = (local_c4 * local_b8 + local_c8 * local_bc + local_c0 * local_b4) *
local_130 + *(float *)(param_1 + 0x1c);
fVar27 = (local_b8 * local_d0 + local_bc * local_d4 + local_b4 * local_cc) *
local_130 + *(float *)(param_1 + 0x18);
*(float *)(param_1 + 0x1c) = fVar26;
*(float *)(param_1 + 0x18) = fVar27;
fVar24 = ABS(*(float *)(cl_forwardspeed._28_4_ + 0x2c)) / fVar27;
if (fVar27 <= ABS(*(float *)(cl_forwardspeed._28_4_ + 0x2c))) {
if (-ABS(*(float *)(cl_backspeed._28_4_ + 0x2c)) <= fVar27) {
fVar24 = 1.0;
}
else {
fVar24 = ABS(*(float *)(cl_backspeed._28_4_ + 0x2c)) / ABS(fVar27);
}
}
uVar14 = -(uint)(ABS(*(float *)(cl_sidespeed._28_4_ + 0x2c)) < ABS(fVar26));
fVar22 = (float)(~uVar14 & 0x3f800000 |
(uint)(ABS(*(float *)(cl_sidespeed._28_4_ + 0x2c)) / ABS(fVar26))
& uVar14);
if (fVar24 <= fVar22) {
fVar22 = fVar24;
}
*(float *)(param_1 + 0x18) = fVar27 * fVar22;
*(float *)(param_1 + 0x1c) = fVar26 * fVar22;
return;
}
}
}
LAB_004f581e:
uVar14 = uVar14 + 1;
puVar16 = puVar15;
}
}
}
}
}
return;
}
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.