CBasePlayer::AutoaimDeflection
0x007b2460 · 2810 bytes · __cdecl
_ZN11CBasePlayer17AutoaimDeflectionER6VectorR16autoaim_params_t
Decompiled
undefined (2 params)
/* CBasePlayer::AutoaimDeflection(Vector&, autoaim_params_t&) */
Vector * CBasePlayer::AutoaimDeflection(Vector *param_1,autoaim_params_t *param_2)
{
float fVar1;
float fVar2;
float fVar3;
float fVar4;
code *pcVar5;
CBaseEdict *pCVar6;
char cVar7;
float *pfVar8;
autoaim_params_t *paVar9;
int iVar10;
undefined *puVar11;
IHandleEntity *pIVar12;
int *piVar13;
int iVar14;
double *pdVar15;
uint *puVar16;
uint uVar17;
int iVar18;
longdouble lVar19;
float fVar20;
float *in_stack_0000000c;
float *in_stack_00000010;
undefined1 local_184 [8];
float local_140;
autoaim_params_t *local_134;
uint local_130;
float local_128;
float local_124;
float local_120;
float local_11c;
float local_118;
float local_114;
Vector local_110 [12];
Vector local_104 [12];
float local_f8;
float local_f4;
float local_f0;
float local_ec;
float local_e8;
float local_e4;
undefined **local_e0 [5];
float local_cc;
float local_c8;
float local_c4;
float local_bc;
float local_b8;
float local_b4;
undefined4 local_ac;
undefined4 local_a8;
undefined4 local_a4;
undefined4 local_9c;
undefined4 local_98;
undefined4 local_94;
undefined4 local_8c;
undefined1 local_88;
undefined1 local_87;
float local_70;
float local_6c;
float local_68;
float local_64;
float local_60;
float local_5c;
float local_44;
autoaim_params_t *local_24;
if (param_2[0x1cc8] != (autoaim_params_t)0x0) {
if (param_2[0x6c] == (autoaim_params_t)0x0) {
pCVar6 = *(CBaseEdict **)(param_2 + 0x30);
if (pCVar6 != (CBaseEdict *)0x0) {
*(uint *)pCVar6 = *(uint *)pCVar6 | 0x101;
iVar14 = CBaseEdict::GetChangeAccessor(pCVar6);
*(undefined2 *)(iVar14 + 2) = 0;
}
}
else {
param_2[0x70] = (autoaim_params_t)((byte)param_2[0x70] | 1);
}
param_2[0x1cc8] = (autoaim_params_t)0x0;
}
pfVar8 = (float *)(**(code **)(*(int *)param_2 + 0x238))();
local_6c = *(float *)(param_2 + 0x1ab4) + pfVar8[1] + *(float *)(param_2 + 0x1f54);
local_68 = *(float *)(param_2 + 0x1ab8) + pfVar8[2] + *(float *)(param_2 + 0x1f58);
local_70 = *(float *)(param_2 + 0x1ab0) + *pfVar8 + *(float *)(param_2 + 0x1f50);
AngleVectors((QAngle *)&local_70,(Vector *)&local_11c,local_110,local_104);
local_128 = local_11c;
local_124 = local_118;
local_120 = local_114;
*(undefined4 *)param_1 = vec3_angle;
*(undefined4 *)(param_1 + 4) = DAT_01053d40;
*(undefined4 *)(param_1 + 8) = DAT_01053d44;
cVar7 = (**(code **)(*(int *)param_2 + 0x4fc))();
pIVar12 = (IHandleEntity *)0x0;
if (cVar7 != '\0') {
pIVar12 = (IHandleEntity *)(**(code **)(*(int *)param_2 + 0x504))();
}
CTraceFilterSkipTwoEntities::CTraceFilterSkipTwoEntities
((CTraceFilterSkipTwoEntities *)local_e0,(IHandleEntity *)param_2,pIVar12,0);
local_88 = 1;
local_e0[0] = &PTR_ShouldHitEntity_00cbb158;
local_94 = 0;
local_bc = local_128 * 16384.0;
local_cc = *in_stack_0000000c;
local_98 = 0;
local_b8 = local_124 * 16384.0;
local_c8 = in_stack_0000000c[1];
local_9c = 0;
local_b4 = local_120 * 16384.0;
local_8c = 0;
local_c4 = in_stack_0000000c[2];
local_a4 = 0;
local_a8 = 0;
local_ac = 0;
local_87 = local_b8 * local_b8 + local_bc * local_bc + local_b4 * local_b4 != 0.0;
(**(code **)(*enginetrace + 0x14))();
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
DebugDrawLine((Vector *)&local_70,(Vector *)&local_64,0xff,0,0,true,-1.0);
}
paVar9 = local_24;
if (((local_24 != (autoaim_params_t *)0x0) && (local_24[0x105] != (autoaim_params_t)0x0)) &&
(cVar7 = (**(code **)(*(int *)local_24 + 300))(), cVar7 != '\0')) {
if (param_2[0x253] == (autoaim_params_t)0x3) {
if (paVar9[0x253] == (autoaim_params_t)0x0) goto LAB_007b26f4;
}
else if (paVar9[0x253] == (autoaim_params_t)0x3) goto LAB_007b26f4;
cVar7 = (**(code **)(*(int *)paVar9 + 0x108))();
if (cVar7 != '\0') {
if ((((byte)paVar9[0x152] & 1) != 0) && (param_2[0x1cc8] != (autoaim_params_t)0x1)) {
if (param_2[0x6c] == (autoaim_params_t)0x0) {
pCVar6 = *(CBaseEdict **)(param_2 + 0x30);
if (pCVar6 != (CBaseEdict *)0x0) {
*(uint *)pCVar6 = *(uint *)pCVar6 | 0x101;
iVar14 = CBaseEdict::GetChangeAccessor(pCVar6);
*(undefined2 *)(iVar14 + 2) = 0;
}
}
else {
param_2[0x70] = (autoaim_params_t)((byte)param_2[0x70] | 1);
}
param_2[0x1cc8] = (autoaim_params_t)0x1;
}
pfVar8 = (float *)(**(code **)(*(int *)paVar9 + 0xc))();
fVar1 = *pfVar8;
*in_stack_00000010 = local_128;
*(undefined1 *)((int)in_stack_00000010 + 0x29) = 0;
in_stack_00000010[1] = local_124;
in_stack_00000010[6] = fVar1;
in_stack_00000010[2] = local_120;
*(undefined1 *)((int)in_stack_00000010 + 0x2a) = 1;
in_stack_00000010[3] = local_64;
in_stack_00000010[4] = local_60;
in_stack_00000010[5] = local_5c;
}
}
LAB_007b26f4:
if (*(char *)(in_stack_00000010 + 10) == '\0') {
fVar1 = in_stack_00000010[9];
if (fVar1 < 0.0) {
piVar13 = (int *)CBaseCombatCharacter::GetActiveWeapon((CBaseCombatCharacter *)param_2);
lVar19 = (longdouble)(**(code **)(*piVar13 + 0x4c4))();
fVar1 = (float)lVar19;
}
pdVar15 = (double *)&stack0xfffffe84;
if ((*(char *)((int)in_stack_00000010 + 0x2a) == '\0') &&
(iVar14 = AimTarget_ListCount(), pdVar15 = (double *)&stack0xfffffe84, 0 < iVar14)) {
iVar18 = 0;
local_134 = (autoaim_params_t *)0x0;
local_140 = 0.0;
puVar16 = (uint *)&stack0xfffffe84;
do {
*puVar16 = iVar18;
puVar16[-1] = 0x7b2ac7;
paVar9 = (autoaim_params_t *)AimTarget_ListElement(*puVar16);
pdVar15 = (double *)puVar16;
if (param_2 != paVar9) {
iVar10 = *(int *)paVar9;
puVar16[1] = (uint)param_2;
*puVar16 = (uint)paVar9;
pcVar5 = *(code **)(iVar10 + 0x108);
puVar16[-1] = 0x7b2adc;
cVar7 = (*pcVar5)();
if (cVar7 != '\0') {
iVar10 = *(int *)paVar9;
*puVar16 = (uint)paVar9;
pcVar5 = *(code **)(iVar10 + 300);
puVar16[-1] = 0x7b2aeb;
cVar7 = (*pcVar5)();
if ((cVar7 != '\0') && (*(uint *)(paVar9 + 0x30) != 0)) {
iVar10 = *g_pGameRules;
puVar16[2] = *(uint *)(paVar9 + 0x30);
puVar16[1] = (uint)param_2;
*puVar16 = (uint)g_pGameRules;
pcVar5 = *(code **)(iVar10 + 0xf4);
puVar16[-1] = 0x7b2b0f;
cVar7 = (*pcVar5)();
if (cVar7 != '\0') {
if (param_2[0x253] == (autoaim_params_t)0x3) {
if (paVar9[0x253] != (autoaim_params_t)0x0) goto LAB_007b2b29;
}
else if (paVar9[0x253] != (autoaim_params_t)0x3) {
LAB_007b2b29:
iVar10 = *(int *)paVar9;
puVar16[1] = (uint)paVar9;
*puVar16 = (uint)&local_f8;
pcVar5 = *(code **)(iVar10 + 0x110);
puVar16[-1] = 0x7b2b3e;
(*pcVar5)();
local_ec = local_f8 - *in_stack_0000000c;
local_e8 = local_f4 - in_stack_0000000c[1];
local_e4 = local_f0 - in_stack_0000000c[2];
if ((in_stack_00000010[8] == 0.0) ||
(pdVar15 = (double *)(puVar16 + -1),
SQRT(local_e8 * local_e8 + local_ec * local_ec) <= in_stack_00000010[8])) {
puVar16[-1] = (uint)&local_ec;
puVar16[-2] = 0x7b2bc9;
VectorNormalize((Vector *)puVar16[-1]);
fVar20 = local_118 * local_e8 + local_11c * local_ec + local_114 * local_e4;
pdVar15 = (double *)(puVar16 + -1);
if (0.0 <= fVar20) {
if (((byte)paVar9[0x151] & 4) == 0) {
puVar16[-1] = (uint)param_2;
puVar16[-2] = 0x7b2c28;
iVar10 = CBaseCombatCharacter::GetActiveWeapon
((CBaseCombatCharacter *)puVar16[-1]);
if ((iVar10 != 0) && (pdVar15 = (double *)(puVar16 + -1), fVar20 < fVar1))
goto LAB_007b2ab0;
}
puVar16[-1] = (uint)param_2;
puVar16[-2] = 0x7b2c4d;
uVar17 = CBaseCombatCharacter::GetActiveWeapon
((CBaseCombatCharacter *)puVar16[-1]);
iVar10 = *(int *)paVar9;
fVar20 = in_stack_00000010[7];
*puVar16 = (uint)paVar9;
puVar16[-1] = (uint)&local_cc;
pcVar5 = *(code **)(iVar10 + 0x110);
puVar16[-2] = 0x7b2c78;
(*pcVar5)();
puVar16[2] = (uint)paVar9;
puVar16[3] = (uint)fVar20;
puVar16[4] = uVar17;
puVar16[1] = (uint)&local_cc;
*puVar16 = (uint)&local_11c;
puVar16[-2] = (uint)param_2;
puVar16[-1] = (uint)in_stack_0000000c;
puVar16[-3] = 0x7b2cba;
lVar19 = (longdouble)
GetAutoaimScore((CBasePlayer *)puVar16[-2],(Vector *)puVar16[-1],
(Vector *)*puVar16,(Vector *)puVar16[1],
(CBaseEntity *)puVar16[2],(float)puVar16[3],
(CBaseCombatWeapon *)puVar16[4]);
pdVar15 = (double *)(puVar16 + -2);
if (local_140 < (float)lVar19) {
*puVar16 = 0x46004003;
puVar16[2] = (uint)&local_70;
puVar16[1] = (uint)local_e0;
puVar16[-1] = (uint)&local_f8;
puVar16[-2] = (uint)in_stack_0000000c;
puVar16[-3] = 0x7b2d0f;
UTIL_TraceLine((Vector *)puVar16[-2],(Vector *)puVar16[-1],*puVar16,
(ITraceFilter *)puVar16[1],(CGameTrace *)puVar16[2]);
if ((local_44 == 1.0) ||
(pdVar15 = (double *)(puVar16 + -2), paVar9 == local_24)) {
local_128 = local_ec;
local_124 = local_e8;
local_120 = local_e4;
pdVar15 = (double *)(puVar16 + -2);
local_140 = (float)lVar19;
local_134 = paVar9;
}
}
}
}
}
}
}
}
}
LAB_007b2ab0:
iVar18 = iVar18 + 1;
puVar16 = (uint *)pdVar15;
} while (iVar18 != iVar14);
if (local_134 != (autoaim_params_t *)0x0) {
*(Vector **)((int)pdVar15 + 4) = param_1;
*(float **)pdVar15 = &local_128;
*(undefined4 *)((int)pdVar15 + -4) = 0x7b2dde;
VectorAngles(*(Vector **)pdVar15,*(QAngle **)((int)pdVar15 + 4));
iVar14 = *(int *)param_2;
*(autoaim_params_t **)pdVar15 = param_2;
pcVar5 = *(code **)(iVar14 + 0x4fc);
*(undefined4 *)((int)pdVar15 + -4) = 0x7b2de9;
cVar7 = (*pcVar5)();
iVar14 = *(int *)param_2;
*(autoaim_params_t **)pdVar15 = param_2;
if (cVar7 == '\0') {
pcVar5 = *(code **)(iVar14 + 0x238);
*(undefined4 *)((int)pdVar15 + -4) = 0x7b2dfc;
pfVar8 = (float *)(*pcVar5)();
fVar20 = pfVar8[1];
fVar2 = pfVar8[2];
fVar3 = *(float *)(param_2 + 0x1ab4);
fVar4 = *(float *)(param_2 + 0x1ab8);
*(float *)param_1 = *(float *)param_1 - (*pfVar8 - *(float *)(param_2 + 0x1ab0));
*(float *)(param_1 + 4) = *(float *)(param_1 + 4) - (fVar20 - fVar3);
*(float *)(param_1 + 8) = *(float *)(param_1 + 8) - (fVar2 - fVar4);
}
else {
pcVar5 = *(code **)(iVar14 + 0x238);
*(undefined4 *)((int)pdVar15 + -4) = 0x7b2f46;
pfVar8 = (float *)(*pcVar5)();
*(float *)param_1 = *(float *)param_1 - *pfVar8;
*(float *)(param_1 + 4) = *(float *)(param_1 + 4) - pfVar8[1];
*(float *)(param_1 + 8) = *(float *)(param_1 + 8) - pfVar8[2];
}
if (param_2[0x1cc8] != (autoaim_params_t)0x1) {
if (param_2[0x6c] == (autoaim_params_t)0x0) {
puVar16 = *(uint **)(param_2 + 0x30);
if (puVar16 != (uint *)0x0) {
*puVar16 = *puVar16 | 0x101;
*(uint **)pdVar15 = puVar16;
*(undefined4 *)((int)pdVar15 + -4) = 0x7b2e75;
iVar14 = CBaseEdict::GetChangeAccessor(*(CBaseEdict **)pdVar15);
*(undefined2 *)(iVar14 + 2) = 0;
}
}
else {
param_2[0x70] = (autoaim_params_t)((byte)param_2[0x70] | 1);
}
param_2[0x1cc8] = (autoaim_params_t)0x1;
}
iVar14 = *(int *)local_134;
*(autoaim_params_t **)pdVar15 = local_134;
pcVar5 = *(code **)(iVar14 + 0xc);
*(undefined4 *)((int)pdVar15 + -4) = 0x7b2e90;
pfVar8 = (float *)(*pcVar5)();
fVar20 = *pfVar8;
*in_stack_00000010 = local_128;
in_stack_00000010[1] = local_124;
in_stack_00000010[6] = fVar20;
in_stack_00000010[2] = local_120;
iVar14 = *(int *)local_134;
*(int *)((int)pdVar15 + 0xc) = 0;
*(float **)((int)pdVar15 + 8) = in_stack_0000000c;
*(autoaim_params_t **)((int)pdVar15 + 4) = local_134;
*(float **)pdVar15 = &local_cc;
pcVar5 = *(code **)(iVar14 + 0x244);
*(undefined4 *)((int)pdVar15 + -4) = 0x7b2edf;
(*pcVar5)();
pdVar15 = (double *)((int)pdVar15 + -4);
in_stack_00000010[3] = local_cc;
*(undefined1 *)((int)in_stack_00000010 + 0x29) = 1;
in_stack_00000010[4] = local_c8;
*(undefined1 *)((int)in_stack_00000010 + 0x2a) = 0;
in_stack_00000010[5] = local_c4;
}
}
if (*(int *)(sv_showdebugtracers._28_4_ + 0x30) == 2) {
fVar20 = in_stack_00000010[8];
if (fVar20 == 0.0) {
fVar20 = 1000.0;
}
if (*(char *)((int)in_stack_00000010 + 0x2a) == '\0') {
local_130 = -(uint)(*(char *)((int)in_stack_00000010 + 0x29) == '\0') & 0x32;
iVar14 = (-(uint)(*(char *)((int)in_stack_00000010 + 0x29) == '\0') & 0xffffff33) + 0xff;
uVar17 = -(uint)(*(char *)((int)in_stack_00000010 + 0x29) == '\0') & 0x32;
}
else {
local_130 = 0xff;
iVar14 = 0;
uVar17 = 0;
}
fVar2 = in_stack_0000000c[1];
fVar3 = in_stack_0000000c[2];
fVar4 = *in_stack_0000000c;
*(uint *)(pdVar15 + 1) = local_130;
*(float **)((int)pdVar15 + 4) = &local_cc;
*(int *)(pdVar15 + 3) = 0x40a00000;
*(int *)((int)pdVar15 + 0x14) = 1;
*(uint *)(pdVar15 + 2) = uVar17;
*(int *)((int)pdVar15 + 0xc) = iVar14;
*(float **)pdVar15 = in_stack_0000000c;
local_cc = fVar20 * local_11c + fVar4;
local_c8 = local_118 * fVar20 + fVar2;
local_c4 = local_114 * fVar20 + fVar3;
*(undefined4 *)((int)pdVar15 + -4) = 0x7b2818;
NDebugOverlay::Line(*(Vector **)pdVar15,*(Vector **)((int)pdVar15 + 4),*(int *)(pdVar15 + 1),
*(int *)((int)pdVar15 + 0xc),*(int *)(pdVar15 + 2),
*(bool *)((int)pdVar15 + 0x14),*(float *)(pdVar15 + 3));
*pdVar15 = (double)fVar1;
*(undefined4 *)((int)pdVar15 + -4) = 0x7b282d;
lVar19 = (longdouble)__acos_finite();
*(uint *)(pdVar15 + 3) = uVar17;
*(int *)((int)pdVar15 + 0x24) = 0x40a00000;
*(int *)(pdVar15 + 4) = 1;
*(uint *)(pdVar15 + 2) = local_130;
*(float **)((int)pdVar15 + 4) = &local_11c;
*(int *)((int)pdVar15 + 0x1c) = 0xff;
*(int *)((int)pdVar15 + 0x14) = iVar14;
*(float *)((int)pdVar15 + 0xc) = fVar20;
*(float *)(pdVar15 + 1) = (float)((double)lVar19 + (double)lVar19);
*(float **)pdVar15 = in_stack_0000000c;
*(undefined4 *)((int)pdVar15 + -4) = 0x7b2897;
NDebugOverlay::Cone(*(Vector **)pdVar15,*(Vector **)((int)pdVar15 + 4),*(float *)(pdVar15 + 1)
,*(float *)((int)pdVar15 + 0xc),*(int *)(pdVar15 + 2),
*(int *)((int)pdVar15 + 0x14),*(int *)(pdVar15 + 3),
*(int *)((int)pdVar15 + 0x1c),*(bool *)(pdVar15 + 4),
*(float *)((int)pdVar15 + 0x24));
if ((*(char *)((int)in_stack_00000010 + 0x2a) != '\0') ||
(*(char *)((int)in_stack_00000010 + 0x29) != '\0')) {
piVar13 = (int *)0x0;
fVar1 = in_stack_00000010[6];
if ((fVar1 != -NAN) &&
((puVar11 = g_pEntityList + ((uint)fVar1 & 0xfff) * 0x10,
puVar11 != (undefined *)0xfffffffc && (*(uint *)(puVar11 + 8) == (uint)fVar1 >> 0xc))))
{
piVar13 = *(int **)(puVar11 + 4);
}
iVar18 = *piVar13;
*(int **)pdVar15 = piVar13;
pcVar5 = *(code **)(iVar18 + 0x10c);
*(undefined4 *)((int)pdVar15 + -4) = 0x7b28e8;
lVar19 = (longdouble)(*pcVar5)();
*(uint *)(pdVar15 + 2) = uVar17;
*(int *)((int)pdVar15 + 0xc) = iVar14;
*(int *)(pdVar15 + 3) = 0x40a00000;
*(uint *)(pdVar15 + 1) = local_130;
*(int *)((int)pdVar15 + 0x14) = 1;
*(float *)((int)pdVar15 + 4) = (float)lVar19;
*(float **)pdVar15 = in_stack_00000010 + 3;
*(undefined4 *)((int)pdVar15 + -4) = 0x7b292c;
NDebugOverlay::Cross
(*(Vector **)pdVar15,*(float *)((int)pdVar15 + 4),*(int *)(pdVar15 + 1),
*(int *)((int)pdVar15 + 0xc),*(int *)(pdVar15 + 2),*(bool *)((int)pdVar15 + 0x14)
,*(float *)(pdVar15 + 3));
return param_1;
}
}
}
return param_1;
}
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.