L L4D2node

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 into addons/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.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)