0% found this document useful (0 votes)
26 views8 pages

AAStates

Uploaded by

gregorydcfake
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
26 views8 pages

AAStates

Uploaded by

gregorydcfake
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 8

local menu = require("oop_menu")

if not MENU_LIB_ERROR_OUTDATED then


return error("Outdated \"Object-oriented gui\" lib.")
elseif MENU_LIB_VER < 1.1 then
return MENU_LIB_ERROR_OUTDATED()
end

function table.find(t, value)


for _, v in pairs(t) do
if v == value then
return true
end
end
return false
end

function math.clamp(v, min, max)


return v < min and min or v > max and max or v
end

function math.calc_fov(Start, End, Angle)


local Direction = (End - Start):normalize()
local Forward, Right, Up = math.angle_vectors(Angle)
return math.max(math.deg(math.acos(Forward:dot(Direction))), 0)
end

local function SetAllVisible(t, v)


for _, element in pairs(t) do
if element and element.set_visible then
element:set_visible(v)
end
end
end

local function MenuElementName(p, n)


return string.format("[%s] %s", p, n)
end

local References =
{
Pitch = menu.get_reference("rage>anti-aim>angles>pitch"),
Yaw = menu.get_reference("rage>anti-aim>angles>yaw"),
YawAdd = menu.get_reference("rage>anti-aim>angles>yaw add"),
YawAddValue = menu.get_reference("rage>anti-aim>angles>add"),
FreeStand = menu.get_reference("rage>anti-aim>angles>freestand"),
AtFOVTarget = menu.get_reference("rage>anti-aim>angles>at fov target"),
Spin = menu.get_reference("rage>anti-aim>angles>spin"),
SpinRange = menu.get_reference("rage>anti-aim>angles>spin range"),
SpinSpeed = menu.get_reference("rage>anti-aim>angles>spin speed"),
Jitter = menu.get_reference("rage>anti-aim>angles>jitter"),
RandomJitter = menu.get_reference("rage>anti-aim>angles>random"),
JitterRange = menu.get_reference("rage>anti-aim>angles>jitter range"),
AntiAimOverride = menu.get_reference("rage>anti-aim>angles>antiaim
override"),
Back = menu.get_reference("rage>anti-aim>angles>back"),
Left = menu.get_reference("rage>anti-aim>angles>left"),
Right = menu.get_reference("rage>anti-aim>angles>right"),
Fake = menu.get_reference("rage>anti-aim>desync>fake"),
FakeAmount = menu.get_reference("rage>anti-aim>desync>fake amount"),
CompensateAngle = menu.get_reference("rage>anti-aim>desync>compensate
angle"),
FreestandFake = menu.get_reference("rage>anti-aim>desync>freestand
fake"),
FlipFakeWithJitter = menu.get_reference("rage>anti-aim>desync>flip fake with
jitter"),
LegSlide = menu.get_reference("rage>anti-aim>desync>leg slide"),
RollLean = menu.get_reference("rage>anti-aim>desync>roll lean"),
LeanAmount = menu.get_reference("rage>anti-aim>desync>lean amount"),
EnsureLean = menu.get_reference("rage>anti-aim>desync>ensure lean"),
FlipLeanWithJitter = menu.get_reference("rage>anti-aim>desync>flip lean with
jitter"),
}
SetAllVisible(References, false)

local ExtraRefs =
{
FakeDuck = menu.get_reference("misc>movement>fake duck"),
Slide = menu.get_reference("misc>movement>slide")
}

local AAStates = {"General", "Standing", "Crouching", "Fake duck", "Moving",


"Accelerating", "Slow walk", "In air", "In air crouch", "In air knife", "Taser",
"Enemy missed"}
local AAStateCombo = menu.add_combo("AA State", "rage>anti-aim>angles", AAStates)

local AAStateMenuElements = {}
for i, State in pairs(AAStates) do

local function FormatStateName(n)


return MenuElementName(State, n)
end

local NewTable =
{
OverrideGeneralConfig = (i ~= 1) and
menu.add_checkbox(FormatStateName((State:len() >= 12) and "Override general" or
"Override general config"), "rage>anti-aim>angles"),
CrouchOnly = (State == "In air knife") and
menu.add_checkbox(FormatStateName("Crouching only"), "rage>anti-aim>angles"),
FovThreshhold = (State == "Enemy missed") and
menu.add_slider(FormatStateName("Fov threshhold"), "rage>anti-aim>angles", 0, 90,
1),
HoldTime = (State == "Enemy missed") and
menu.add_slider(FormatStateName("Hold time (MS)"), "rage>anti-aim>angles", 500,
3000, 1),
Pitch = menu.add_combo(FormatStateName("Pitch"),
"rage>anti-aim>angles", References.Pitch:get_combo_items()),
Yaw = menu.add_combo(FormatStateName("Yaw"),
"rage>anti-aim>angles", References.Yaw:get_combo_items()),
YawAdd = menu.add_checkbox(FormatStateName("Yaw add"),
"rage>anti-aim>angles"),
YawAddValue = menu.add_slider(FormatStateName("Add"),
"rage>anti-aim>angles", -180, 180, 1),
AtFOVTarget = menu.add_checkbox(FormatStateName("At fov
target"), "rage>anti-aim>angles"),
Spin = menu.add_checkbox(FormatStateName("Spin"),
"rage>anti-aim>angles"),
SpinRange = menu.add_slider(FormatStateName("Range"),
"rage>anti-aim>angles", 0, 360, 1),
SpinSpeed = menu.add_slider(FormatStateName("Speed"),
"rage>anti-aim>angles", 0, 360, 1),
Jitter = menu.add_checkbox(FormatStateName("Jitter"),
"rage>anti-aim>angles"),
JitterRange = menu.add_slider(FormatStateName("Range "),
"rage>anti-aim>angles", 0, 360, 1),
RandomJitter = menu.add_checkbox(FormatStateName("Random
jitter"), "rage>anti-aim>angles"),
JitterFreeze = menu.add_checkbox(FormatStateName("Jitter
freeze"), "rage>anti-aim>angles"),
HoldChance = menu.add_slider(FormatStateName("Freeze chance"),
"rage>anti-aim>angles", 10, 95, 1),
Fake = menu.add_checkbox(FormatStateName("Fake"),
"rage>anti-aim>desync"),
FakeAmount = menu.add_slider(FormatStateName("Amount"),
"rage>anti-aim>desync", -100, 100, 1),
CompensateAngle = menu.add_slider(FormatStateName("Compensate
angle"), "rage>anti-aim>desync", 0, 100, 1),
RandomFake = menu.add_combo(FormatStateName("Random fake"),
"rage>anti-aim>desync", {"Off", "Random value", "Random side"}),
FreestandFake = menu.add_combo(FormatStateName("Freestand fake"),
"rage>anti-aim>desync", References.FreestandFake:get_combo_items()),
FlipFakeWithJitter = menu.add_checkbox(FormatStateName("Flip fake with
jitter"), "rage>anti-aim>desync"),
LegSlide = menu.add_combo(FormatStateName("Leg slide"),
"rage>anti-aim>desync", References.LegSlide:get_combo_items()),
RollLean = menu.add_combo(FormatStateName("Roll"),
"rage>anti-aim>desync", References.RollLean:get_combo_items()),
LeanAmount = menu.add_slider(FormatStateName("Amount "),
"rage>anti-aim>desync", -100, 100, 1),
FlipLeanWithJitter = menu.add_checkbox(FormatStateName("Flip roll with
jitter"), "rage>anti-aim>desync"),
Callbacks = {}
}

local function BindVisible(a, b, custom_compare)


if not a or not b then
utils.error_print("Cannot bind visible. %s %s", tostring(a),
tostring(b))
return
end

local cb = function ()
local Value = b:get()
local ActiveState = AAStates[AAStateCombo:get() + 1] == State

if custom_compare then
a:set_visible(custom_compare(Value) and ActiveState)
else
a:set_visible(Value and ActiveState)
end
end

b:add_callback(cb)
table.insert(NewTable.Callbacks, cb)
utils.run_delayed(500, cb)
end

local JitterFreezeFunc = function (v)


return v and NewTable.JitterFreeze:get()
end

BindVisible(NewTable.YawAddValue, NewTable.YawAdd)
BindVisible(NewTable.SpinRange, NewTable.Spin)
BindVisible(NewTable.SpinSpeed, NewTable.Spin)
BindVisible(NewTable.RandomJitter, NewTable.Jitter)
BindVisible(NewTable.JitterRange, NewTable.Jitter)
BindVisible(NewTable.JitterFreeze, NewTable.Jitter)
BindVisible(NewTable.HoldChance, NewTable.Jitter, JitterFreezeFunc)
BindVisible(NewTable.HoldChance, NewTable.JitterFreeze, JitterFreezeFunc)
BindVisible(NewTable.FakeAmount, NewTable.Fake)
BindVisible(NewTable.CompensateAngle, NewTable.Fake)
BindVisible(NewTable.FreestandFake, NewTable.Fake)
BindVisible(NewTable.FlipFakeWithJitter, NewTable.Fake)
BindVisible(NewTable.LeanAmount, NewTable.RollLean, function (v) return v ~= 0
end)
BindVisible(NewTable.FlipLeanWithJitter, NewTable.RollLean, function (v) return
v ~= 0 end)

AAStateMenuElements[State] = NewTable
end

AAStateCombo:add_callback(function (value)
for StateName, Elements in pairs(AAStateMenuElements) do
SetAllVisible(Elements, AAStates[value + 1] == StateName)

for _, Callback in pairs(Elements.Callbacks) do


if Callback then
Callback()
end
end
end
end, true)

local FreestandOverride = menu.add_checkbox("Freestand ", "rage>anti-


aim>angles")
local ClampFreestandingJitter = menu.add_checkbox("Freestand clamp jitter",
"rage>anti-aim>angles")

local AntiAimOverride = menu.add_checkbox("Antiaim override ", "rage>anti-


aim>angles")
local Back = menu.add_checkbox("Back ", "rage>anti-aim>angles")
local Left = menu.add_checkbox("Left ", "rage>anti-aim>angles")
local Right = menu.add_checkbox("Right ", "rage>anti-aim>angles")
local EnsureLean = menu.add_checkbox("Ensure lean ", "rage>anti-aim>desync")

-- Do this so they are at the bottom of everything


menu.add_keybind(FreestandOverride)
menu.add_keybind(Back)
menu.add_keybind(Left)
menu.add_keybind(Right)
menu.add_keybind(EnsureLean)

References.FreeStand:bind_to(FreestandOverride)
References.AntiAimOverride:bind_to(AntiAimOverride)

AntiAimOverride:add_callback(function (v)
Back:set_visible(v)
Left:set_visible(v)
Right:set_visible(v)
end, true)

References.Back:bind_to(Back)
References.Left:bind_to(Left)
References.Right:bind_to(Right)
References.EnsureLean:bind_to(EnsureLean)

local OnGroundTicks = 1
local OldSpeed = 0
local EnemyMissedTime = 0
local CustomJitterSwitch = 1

local function IsOvr(state)


local Elements = AAStateMenuElements[state]
return Elements.OverrideGeneralConfig ~= nil and
Elements.OverrideGeneralConfig:get()
end

local DrawAAState = false


local CurrentState = "General"

function on_setup_move(cmd)

local LocalPlayer = entities[engine.get_local_player()]


if not LocalPlayer or not LocalPlayer:is_alive() then
return
end

local State = "General"


local Buttons = cmd:get_buttons()
local OnGround = bit.band(LocalPlayer:get_prop("m_fFlags") or 0, 1) ==
1
local Velocity = math.vec3(LocalPlayer:get_prop("m_vecVelocity[0]") or
0, LocalPlayer:get_prop("m_vecVelocity[1]") or 0,
LocalPlayer:get_prop("m_vecVelocity[2]") or 0)
local Speed = Velocity:length2d()
local FakeDucking = ExtraRefs.FakeDuck:get() == 1
local Crouching = bit.band(Buttons, csgo.in_duck) ~= 0
local SlowWalking = ExtraRefs.Slide:get() == 1
local ActiveWeapon = LocalPlayer:get_weapon()
local WeaponInfo = ActiveWeapon and
utils.get_weapon_info(ActiveWeapon:get_prop("m_iItemDefinitionIndex") or -1)

if OnGround then
OnGroundTicks = OnGroundTicks + 1
else
OnGroundTicks = 0
end

if IsOvr("Enemy missed") and global_vars.realtime - EnemyMissedTime <


AAStateMenuElements["Enemy missed"].HoldTime:get() / 1000 then
State = "Enemy missed"
elseif WeaponInfo and WeaponInfo.console_name == "weapon_taser" and
IsOvr("Taser") then
State = "Taser"
elseif FakeDucking and IsOvr("Fake duck") then
State = "Fake duck"
else
-- In air
if OnGroundTicks <= 1 then
if Crouching and IsOvr("In air crouch") then
State = "In air crouch"
else
State = "In air"
end

if IsOvr("In air knife") and ActiveWeapon then


if WeaponInfo then
if string.find(WeaponInfo.console_name, "knife_") then
if AAStateMenuElements["In air knife"].CrouchOnly:get()
then
if Crouching then
State = "In air knife"
end
else
State = "In air knife"
end
end
end
end
-- On ground
else
if Crouching and IsOvr("Crouching") then
State = "Crouching"
elseif SlowWalking and IsOvr("Slow walk") then
State = "Slow walk"
elseif Speed - OldSpeed > 2 and IsOvr("Accelerating") then
State = "Accelerating"
elseif Speed > 5 then
State = "Moving"
else
State = "Standing"
end
end
end
OldSpeed = Speed

local Settings = AAStateMenuElements[State]


if Settings.OverrideGeneralConfig and not Settings.OverrideGeneralConfig:get()
then
State = "General"
Settings = AAStateMenuElements["General"]
end

CurrentState = State

for ItemName, Item in pairs(Settings) do


if References[ItemName] and Item then
References[ItemName]:set(Item:get())
end
end
local RandomFake = Settings.RandomFake:get()
if RandomFake == 1 then
References.FakeAmount:set(utils.random_int(-100, 100))
elseif RandomFake == 2 then
References.FakeAmount:set(References.FakeAmount:get() *
(utils.random_int(0, 1) == 0 and 1 or -1))
end

if FreestandOverride:get() and ClampFreestandingJitter:get() then


References.JitterRange:set(math.clamp(References.JitterRange:get(), 0, 30))
end

-- Cant jitter while defusing cuz retarded valve feature


if Settings.Jitter:get() and Settings.JitterFreeze:get() and not
LocalPlayer:get_prop("m_bIsDefusing") then
References.Jitter:set(false)
local HadYawAdd = References.YawAdd:get() == 1
References.YawAdd:set(true)
References.YawAddValue:set((HadYawAdd and References.YawAddValue:get() or
0) + (References.JitterRange:get() / 2) * CustomJitterSwitch)

if info.fatality.lag_ticks == 0 and utils.random_int(0, 100) <= (100 -


Settings.HoldChance:get()) then
CustomJitterSwitch = -CustomJitterSwitch
end
end
end

function on_player_hurt(event)
local Hurt = engine.get_player_for_user_id(event:get_int("userid"))
local Attacker =
entities[engine.get_player_for_user_id(event:get_int("attacker"))]

if Hurt ~= engine.get_local_player() or not Attacker:is_enemy() then


return
end

EnemyMissedTime = 0
end

if DrawAAState then
function on_paint()
local LP = entities[engine.get_local_player()]
if CurrentState == "General" or not LP or not LP:is_alive() then
return
end

local ScreenSizeX, ScreenSizeY = render.get_screen_size()


render.text(render.font_control, ScreenSizeX - 5, 5, string.format("aa->%s",
string.lower(CurrentState)), render.color("#FFFFFF"), render.align_right)
end
end

local FovHitboxes = {0, 2, 5}


function on_bullet_impact(event)

local Settings = AAStateMenuElements["Enemy missed"]


if not Settings.OverrideGeneralConfig:get() then
return
end

local LocalPlayer = entities[engine.get_local_player()]


local Shooter =
entities[engine.get_player_for_user_id(event:get_int("userid"))]
if not LocalPlayer or not Shooter or not Shooter:is_enemy() then
return
end

local LEyePos = math.vec3(LocalPlayer:get_eye_position())


local EyePos = math.vec3(Shooter:get_eye_position())
local ImpactPos = math.vec3(event:get_float("x"), event:get_float("y"),
event:get_float("z"))
local Angle = math.vector_angles((ImpactPos - EyePos):normalize())

local HasFov = false


for _, Hitbox in pairs(FovHitboxes) do
local HitboxPos = math.vec3(LocalPlayer:get_hitbox_position(Hitbox))
local FovToHitbox = math.calc_fov(EyePos, HitboxPos, Angle)
if FovToHitbox <= Settings.FovThreshhold:get() then
HasFov = true
break
end
end

if not HasFov then


return
end

-- Prob a better way to do this


if (EyePos:dist(ImpactPos) + 32) - EyePos:dist(LEyePos) < 0 then
return
end

EnemyMissedTime = global_vars.realtime
end

You might also like