--- @source amelia.ink
--- @version free
-- ебаная мразь не выключай мне компьютер
local isDebug = false
local found = function (lib)
if not require (lib) then
assert (false, 'Need Subscribe to ' .. lib .. ' in Workshop')
end
return require (lib)
end
local library = {
antiaim_funcs = found ('gamesense/antiaim_funcs'),
base64 = found ('gamesense/base64'),
bit = require ('bit'),
csgo_weapons = found ('gamesense/csgo_weapons'),
entity = found('gamesense/entity'),
vector = require ('vector')
}
local ffi = require 'ffi' or assert (false, 'Allow Unsafe Scripts!')
local ffi_string, ffi_new, ffi_cdef, ffi_typeof, ffi_cast = ffi.string, ffi.new, ffi.cdef, ffi.typeof, ffi.cast
local client_current_threat, color_log, client_draw_text, client_latency, client_set_clan_tag, client_log, client_timestamp, client_userid_to_entindex, client_trace_line, client_set_event_callback, client_screen_size, client_trace_bullet, client_color_log, client_system_time, client_delay_call, client_visible, client_exec, client_eye_position, client_set_cvar, client_scale_damage, client_draw_hitboxes, client_get_cvar, client_camera_angles, client_draw_debug_text, client_random_int, client_random_float, client_create_interface, client_find_signature = client.current_threat, client.color_log, client.draw_text, client.latency, client.set_clan_tag, client.log, client.timestamp, client.userid_to_entindex, client.trace_line, client.set_event_callback, client.screen_size, client.trace_bullet, client.color_log, client.system_time, client.delay_call, client.visible, client.exec, client.eye_position, client.set_cvar, client.scale_damage, client.draw_hitboxes, client.get_cvar, client.camera_angles, client.draw_debug_text, client.random_int, client.random_float, client.create_interface, client.find_signature
local entity_get_origin, entity_get_esp_data, entity_get_player_resource, entity_get_local_player, entity_is_enemy, entity_get_bounding_box, entity_is_dormant, entity_get_steam64, entity_get_player_name, entity_hitbox_position, entity_get_game_rules, entity_get_all, entity_set_prop, entity_is_alive, entity_get_player_weapon, entity_get_prop, entity_get_players, entity_get_classname = entity.get_origin, entity.get_esp_data, entity.get_player_resource, entity.get_local_player, entity.is_enemy, entity.get_bounding_box, entity.is_dormant, entity.get_steam64, entity.get_player_name, entity.hitbox_position, entity.get_game_rules, entity.get_all, entity.set_prop, entity.is_alive, entity.get_player_weapon, entity.get_prop, entity.get_players, entity.get_classname
local globals_realtime, globals_absoluteframetime, globals_tickcount, globals_lastoutgoingcommand, globals_curtime, globals_mapname, globals_tickinterval, globals_framecount, globals_frametime, globals_maxplayers = globals.realtime, globals.absoluteframetime, globals.tickcount, globals.lastoutgoingcommand, globals.curtime, globals.mapname, globals.tickinterval, globals.framecount, globals.frametime, globals.maxplayers
local ui_type, ui_mouse_position, ui_new_slider, ui_new_combobox, ui_reference, ui_is_menu_open, ui_set_visible, ui_new_textbox, ui_new_color_picker, ui_set_callback, ui_set, ui_new_checkbox, ui_new_hotkey, ui_new_button, ui_new_multiselect, ui_get, ui_update, ui_new_label = ui.type, ui.mouse_position, ui.new_slider, ui.new_combobox, ui.reference, ui.is_menu_open, ui.set_visible, ui.new_textbox, ui.new_color_picker, ui.set_callback, ui.set, ui.new_checkbox, ui.new_hotkey, ui.new_button, ui.new_multiselect, ui.get, ui.update, ui.new_label
local renderer_circle_outline, renderer_rectangle, renderer_gradient, renderer_circle, renderer_text, renderer_line, renderer_measure_text, renderer_indicator, renderer_world_to_screen, renderer_triangle = renderer.circle_outline, renderer.rectangle, renderer.gradient, renderer.circle, renderer.text, renderer.line, renderer.measure_text, renderer.indicator, renderer.world_to_screen, renderer.triangle
local math_ceil, math_tan, math_cos, math_sinh, math_pi, math_max, math_atan2, math_floor, math_sqrt, math_deg, math_atan, math_fmod, math_acos, math_pow, math_abs, math_min, math_sin, math_log, math_exp, math_cosh, math_asin, math_rad, math_random = math.ceil, math.tan, math.cos, math.sinh, math.pi, math.max, math.atan2, math.floor, math.sqrt, math.deg, math.atan, math.fmod, math.acos, math.pow, math.abs, math.min, math.sin, math.log, math.exp, math.cosh, math.asin, math.rad, math.random
local table_sort, table_remove, table_concat, table_insert = table.sort, table.remove, table.concat, table.insert
local string_find, string_format, string_gsub, string_len, string_gmatch, string_match, string_reverse, string_upper, string_lower, string_sub = string.find, string.format, string.gsub, string.len, string.gmatch, string.match, string.reverse, string.upper, string.lower, string.sub
local ipairs, assert, pairs, next, tostring, tonumber, setmetatable, unpack, type, getmetatable, pcall, error, toticks = ipairs, assert, pairs, next, tostring, tonumber, setmetatable, unpack, type, getmetatable, pcall, error, toticks
local vtable_bind = vtable_bind
local bit_lshift, bit_band = library.bit.lshift, library.bit.band
local lua = {}
local defines = {}
local conditional_antiaims = {}
local antiaim_on_use = {}
local manual_antiaims = {}
local reference = {
RAGE = {
aimbot = {
min_damage = ui_reference('RAGE', 'Aimbot', 'Minimum damage'),
min_damage_override = {ui_reference('RAGE', 'Aimbot', 'Minimum damage override')},
force_safe_point = ui_reference('RAGE', 'Aimbot', 'Force safe point'),
force_body_aim = ui_reference('RAGE', 'Aimbot', 'Force body aim'),
double_tap = { ui_reference('RAGE', 'Aimbot', 'Double tap') },
},
other = {
quick_peek_assist = { ui_reference('RAGE', 'Other', 'Quick peek assist') },
duck_peek_assist = ui_reference('RAGE', 'Other', 'Duck peek assist'),
},
},
AA = {
angles = {
enabled = ui_reference('AA', 'Anti-aimbot angles', 'Enabled'),
pitch = ui_reference('AA', 'Anti-aimbot angles', 'Pitch'),
pitch_val = select(2, ui_reference('AA', 'Anti-aimbot angles', 'Pitch')),
yaw_base = ui_reference('AA', 'Anti-aimbot angles', 'Yaw base'),
yaw = { ui_reference('AA', 'Anti-aimbot angles', 'Yaw') },
yaw_jitter = { ui_reference('AA', 'Anti-aimbot angles', 'Yaw jitter') },
body_yaw = { ui_reference('AA', 'Anti-aimbot angles', 'Body yaw') },
freestanding_body_yaw = ui_reference('AA', 'Anti-aimbot angles', 'Freestanding body yaw'),
edge_yaw = ui_reference('AA', 'Anti-aimbot angles', 'Edge yaw'),
freestanding = { ui_reference('AA', 'Anti-aimbot angles', 'Freestanding') },
roll = ui_reference('AA', 'Anti-aimbot angles', 'Roll'),
},
fakelag = {
enabled = ui_reference('AA', 'Fake lag', 'Enabled'),
amount = ui_reference('AA', 'Fake lag', 'Amount'),
variance = ui_reference('AA', 'Fake lag', 'Variance'),
limit = ui_reference('AA', 'Fake lag', 'Limit'),
},
other = {
slow_motion = { ui_reference('AA', 'Other', 'Slow motion') },
leg_movement = ui_reference('AA', 'Other', 'Leg movement'),
on_shot_antiaim = { ui_reference('AA', 'Other', 'On shot anti-aim') },
fake_peek = ui_reference('AA', 'Other', 'Fake peek'),
},
},
MISC = {
clantag = ui_reference('Misc', 'Miscellaneous', 'Clan tag spammer'),
color = ui_reference('Misc', 'Settings', 'Menu color'),
},
}
local logistic = {}
local visual_controller = {}
local helpers = {}
local entity_helpers = {}
local animation_breaker = {}
local anti_bruteforce = {}
local hitlogs = {}
local kill_say = {}
defines.colors = {}
defines.colors.menu_r, defines.colors.menu_g, defines.colors.menu_b = ui_get(reference.MISC.color)
defines.convert_color = function(redArg, greenArg, blueArg)
return string_format('\a' .. '%.2x%.2x%.2xFF', redArg, greenArg, blueArg)
end
defines.colors.menu = defines.convert_color(defines.colors.menu_r, defines.colors.menu_g, defines.colors.menu_b)
defines.colors.default = '\aFFFFFFB2'
defines.lua_prefix = 'Ame'..defines.colors.menu..'lia\a323232FF ~ \aFFFFFFB2'
defines.hitgroups= { 'generic', 'head', 'chest', 'stomach', 'left arm', 'right arm', 'left leg', 'right leg', 'neck', '?', 'gear' }
defines.weapon_to_verb = { knife = 'Knifed', hegrenade = 'Naded', inferno = 'Burned' }
defines.weapon_to_kill = { knife = 'knife', hegrenade = 'nade', inferno = 'burn' }
defines.screen_size = client_screen_size()
defines.cvars = {}
do -- CVAR List
defines.cvars.sv_maxusrcmdprocessticks = client_get_cvar("sv_maxusrcmdprocessticks")
defines.cvars.sv_maxunlag = client_get_cvar("sv_maxunlag")
defines.cvars.sv_clockcorrection_msecs = client_get_cvar("sv_clockcorrection_msecs")
defines.cvars.sv_client_min_interp_ratio = client_get_cvar("sv_client_min_interp_ratio")
defines.cvars.sv_client_max_interp_ratio = client_get_cvar("sv_client_max_interp_ratio")
defines.cvars.sv_client_cmdrate_difference=client_get_cvar("sv_client_cmdrate_difference")
defines.cvars.sv_maxcmdrate = client_get_cvar("sv_maxcmdrate")
defines.cvars.sv_maxrate = client_get_cvar("sv_maxrate") -- 0
defines.cvars.sv_minrate = client_get_cvar("sv_minrate") -- 16000
defines.cvars.sv_maxupdaterate = client_get_cvar("sv_maxupdaterate") --64
defines.cvars.sv_minupdaterate = client_get_cvar("sv_minupdaterate") -- 64
end
do --Conditional List
conditional_antiaims.adress = {
IN_ATTACK = bit_lshift(1, 0), -- Fire weapon
IN_JUMP =bit_lshift(1, 1), -- Jump
IN_DUCK =bit_lshift(1, 2), -- Crouch
IN_FORWARD = bit_lshift(1, 3), -- Walk forward
IN_BACK =bit_lshift(1, 4), -- Walk backwards
IN_USE = bit_lshift(1, 5), -- Use (Defuse bomb, etc...)
IN_CANCEL = bit_lshift(1, 6), -- ??
IN_LEFT =bit_lshift(1, 7), -- Walk left
IN_RIGHT = bit_lshift(1, 8), -- Walk right
IN_MOVELEFT =bit_lshift(1, 9), -- Alias? (not sure)
IN_MOVERIGHT = bit_lshift(1, 10), -- Alias? (not sure)
IN_ATTACK2 = bit_lshift(1, 11), -- Secondary fire (Revolver, Glock change fire mode, Famas change fire mode) (not sure)
IN_RUN = bit_lshift(1, 12),
IN_RELOAD = bit_lshift(1, 13), -- Reload weapon
IN_ALT1 =bit_lshift(1, 14),
IN_ALT2 =bit_lshift(1, 15),
IN_SCORE = bit_lshift(1, 16),
IN_SPEED = bit_lshift(1, 17),
IN_WALK =bit_lshift(1, 18), -- Shift
IN_ZOOM =bit_lshift(1, 19), -- Zoom weapon (not sure)
IN_WEAPON1 = bit_lshift(1, 20),
IN_WEAPON2 = bit_lshift(1, 21),
IN_BULLRUSH =bit_lshift(1, 22),
FL_ONGROUND =bit_lshift(1, 0),
FL_DUCKING = bit_lshift(1, 1),
FL_WATERJUMP = bit_lshift(1, 3),
FL_ONTRAIN = bit_lshift(1, 4),
FL_INRAIN = bit_lshift(1, 5),
FL_FROZEN = bit_lshift(1, 6),
FL_ATCONTROLS = bit_lshift(1, 7),
FL_CLIENT = bit_lshift(1, 8),
FL_FAKECLIENT = bit_lshift(1, 9),
FL_INWATER = bit_lshift(1, 10)
}
end
do
helpers.cvars_saved = {
sv_maxusrcmdprocessticks = 16,
sv_maxunlag = 0.500,
sv_clockcorrection_msecs = 0,
sv_client_min_interp_ratio = 1,
sv_client_max_interp_ratio = 2,
sv_client_cmdrate_difference = 30,
sv_maxcmdrate = 0,
sv_maxrate = 0,
sv_minrate = 16000,
sv_maxupdaterate = 64,
sv_minupdaterate = 64
}
end
local native_GetClientEntity = vtable_bind('client.dll', 'VClientEntityList003', 3, 'void*(__thiscall*)(void*, int)')
local native_GetClipboardTextCount = vtable_bind("vgui2.dll", "VGUI_System010", 7, "int(__thiscall*)(void*)")
local native_SetClipboardText = vtable_bind("vgui2.dll", "VGUI_System010", 9, "void(__thiscall*)(void*, const char*, int)")
local native_GetClipboardText = vtable_bind("vgui2.dll", "VGUI_System010", 11, "int(__thiscall*)(void*, int, const char*, int)")
local clipboard = {
get = function ()
local len = native_GetClipboardTextCount()
if (len > 0) then
local char_arr = ffi_typeof("char[?]")(len)
native_GetClipboardText(0, char_arr, len)
local text = ffi_string(char_arr, len - 1)
local suffix = text:find('_amelia')
if suffix then
text = text:sub(1, suffix)
end
return text
end
end,
set = function (text)
text = tostring(text)
native_SetClipboardText(text, string_len(text))
end
}
message = function (r, g, b, ...)
client_color_log(defines.colors.menu_r, defines.colors.menu_g, defines.colors.menu_b, 'amelia\0')
client_color_log(150, 150, 150, ' ~ \0')
client_color_log(r, g, b, string_format(...))
end
die = function (...)
message(255, 145, 145, ...)
error()
end
breathe = function(offset, multiplier)
local speed = globals_realtime() * (multiplier or 1.0);
local factor = speed % math_pi;
local sin = math_sin(factor + (offset or 0));
local abs = math_abs(sin);
return abs
end
hex = function (r, g, b, a)
return string_format('\a%02X%02X%02X%02X', r, g, b, a or 255)
end
int = function(x)
return math_floor(x + 0.5)
end
get_curtime = function(offset)
return globals_curtime() - (offset * globals_tickinterval())
end
lerp = function(x, v, t)
if type(x) == 'table' then
return lerp(x[1], v[1], t), lerp(x[2], v[2], t), lerp(x[3], v[3], t), lerp(x[4], v[4], t)
end
local delta = v - x
if type(delta) == 'number' then
if math_abs(delta) < 0.005 then
return v
end
end
return delta * t + x
end
lerp_st = function (start, vend, time)
return start + (vend - start) * time
end
inverse = function (x, v, t)
if type(x) == 'table' then
return lerp(x[1], v[1], t), lerp(x[2], v[2], t), lerp(x[3], v[3], t), lerp(x[4], v[4], t)
end
local delta = v - x
if type(delta) == 'number' then
if math_abs(delta) < 0.005 then
return v
end
end
return delta * t + x
end
normalize = function(x, min, max)
local delta = max - min
while x < min do
x = x + delta
end
while x > max do
x = x - delta
end
return x
end
time_to_ticks = function(t) return math_floor(0.5 + (t / globals_tickinterval())) end
vec_substract = function(a, b) return { a[1] - b[1], a[2] - b[2], a[3] - b[3] } end
vec_lenght = function(x, y) return (x * x + y * y) end
math_normalize = function (ang)
while (ang > 180.0) do
ang = ang - 360.0
end
while (ang < -180.0) do
ang = ang + 360.0
end
return ang
end
clamp = function(value, min, max)
return math_max(min, math_min(value, max))
end
clamp_str = function(str, max)
str = tostring(str)
if str:len() > max then
str = str:sub(0, max) .. '...'
end
return str
end
angle_to_forward = function (angle_x, angle_y)
local sy = math_sin(math.rad(angle_y))
local cy = math_cos(math.rad(angle_y))
local sp = math_sin(math.rad(angle_x))
local cp = math_cos(math.rad(angle_x))
return cp * cy, cp * sy, -sp
end
math_in_bounds = function (a1, a2, b)
return b.x >= a1.x and b.y >= a1.y and b.x <= a2.x and b.y <= a2.y
end
math_round = function (value)
return math_floor(value + 0.5)
end
math_clamp = function (value, min, max)
return math_min(max, math_max(min, value))
end
math_percent_to_pix = function (percent, axis)
if axis:lower() == "x" then
return library.vector((defines.screen_size.x / 100) * percent, 0)
end
if axis:lower() == "y" then
return library.vector(0, (defines.screen_size.y / 100) * percent)
end
return library.vector((defines.screen_size.x / 100) * percent, (defines.screen_size.y / 100) * percent)
end
linear_interpolation = function (start, _end, time)
return (_end - start) * time + start
end
math_lerp = function (start, _end, time)
time = time or 0.005
time = clamp(globals_frametime() * time * 175.0, 0.01, 1.0)
local a = linear_interpolation(start, _end, time)
if _end == 0.0 and a < 0.01 and a > -0.01 then
a = 0.0
elseif _end == 1.0 and a < 1.01 and a > 0.99 then
a = 1.0
end
return a
end
rotate_point = function (x, y, rot, size)
return math_cos(math_rad(rot)) * size + x, math_sin(math_rad(rot)) * size + y
end
renderer_arrow_left = function (x, y, r, g, b, a, rotation, size)
local x0, y0 = rotate_point(x, y, rotation, 65)
local x1, y1 = rotate_point(x, y, rotation + (size / 3), 55 - (size / 5))
local x2, y2 = rotate_point(x, y, rotation - (size / 100), 65 - (size / 3))
renderer_triangle(x0, y0, x1, y1, x2, y2, r, g, b, a)
end
renderer_arrow_right = function (x, y, r, g, b, a, rotation, size)
local x0, y0 = rotate_point(x, y, rotation, 65)
local x1, y1 = rotate_point(x, y, rotation + (size / 100), 65 - (size / 3))
local x2, y2 = rotate_point(x, y, rotation - (size / 3), 55 - (size / 5))
renderer_triangle(x0, y0, x1, y1, x2, y2, r, g, b, a)
end
math_vector_lerp = function (vecSource, vecDestination, flPercentage)
return vecSource + (vecDestination - vecSource) * flPercentage
end
get_max_body_yaw = function (player)
local x,y = entity_get_prop(player, "m_vecVelocity")
return 58 - 58 * math_sqrt(x ^ 2 + y ^ 2) / 580
end
get_body_yaw = function (player)
local model_yaw = entity_get_prop(player, "m_angAbsRotation")
local eye_yaw = entity_get_prop(player, "m_angEyeAngles")
if model_yaw == nil or eye_yaw == nil then return 0 end
return normalize(model_yaw - eye_yaw)
end
math_closest_point_on_ray = function (ray_from, ray_to, desired_point)
local to = desired_point - ray_from
local direction = ray_to - ray_from
local ray_length = direction:length()
direction.x = direction.x / ray_length
direction.y = direction.y / ray_length
direction.z = direction.z / ray_length
local direction_along = direction.x * to.x + direction.y * to.y + direction.z * to.z
if direction_along < 0 then return ray_from end
if direction_along > ray_length then return ray_to end
return library.vector(ray_from.x + direction.x * direction_along, ray_from.y + direction.y * direction_along, ray_from.z + direction.z * direction_along)
end
math_get_distance = function (x1, y1, z1, x2, y2, z2)
return math_sqrt((x2 - x1)^2 + (y2 - y1)^2 + (z2 - z1)^2)
end
hasFlag = function(espData, flagValue)
return bit_band(espData.flags, flagValue) == flagValue
end
get_player_movement_direction = function ()
local local_player = entity_get_local_player()
if local_player == nil then
return 0
end
local velocity_x = entity_get_prop(local_player, 'm_vecVelocity[0]')
local yaw = client_camera_angles()
local camera_cos = math_cos( math_rad(yaw) )
if velocity_x < 0 and camera_cos < 0 then --LEFT
return 1
elseif velocity_x > 0 and camera_cos > 0 then --RIGHT
return -1
else
return 0
end
end
split = function (inputstr, sep)
if sep == nil then
sep = "%s"
end
local t={}
for str in string_gmatch(inputstr, "([^"..sep.."]+)") do
table_insert(t, str)
end
return t
end
angle_forward = function(angle)
local sin_pitch = math_sin(math_rad(angle[1]))
local cos_pitch = math_cos(math_rad(angle[1]))
local sin_yaw = math_sin(math_rad(angle[2]))
local cos_yaw = math_cos(math_rad(angle[2]))
return {
cos_pitch * cos_yaw,
cos_pitch * sin_yaw,
-sin_pitch
}
end
calculate_damage = function(weapon_idx, local_origin, target_index)
local local_player = entity_get_local_player()
local weapon = library.csgo_weapons[weapon_idx]
local target_origin = library.vector(entity_get_prop(target_index, "m_vecOrigin"))
local distance = local_origin:dist(target_origin)
local weapon_adjust = weapon.damage
local min_dmg_slider = { ui_reference('rage', 'aimbot', 'minimum damage') }
local min_dmg = ui_get(min_dmg_slider[1])
local dmg_after_range = weapon_adjust * math_pow(weapon.range_modifier, distance / 500.0)
local armor = entity_get_prop(target_index, "m_ArmorValue")
local armor_ratio = weapon.armor_ratio
local newdmg = dmg_after_range * (armor_ratio * 1)
if dmg_after_range - (dmg_after_range * (armor_ratio * 0.5)) * 0.5 > armor then
newdmg = dmg_after_range - (armor / 0.5)
end
local health = entity_get_prop(target_index, "m_iHealth")
if newdmg > health then
newdmg = health
end
local pitch, yaw = client_camera_angles()
local fwd = angle_forward({ pitch, yaw, 0 })
local start_pos = { client_eye_position() }
local fraction = client_trace_line(local_player, start_pos[1], start_pos[2], start_pos[3], start_pos[1] + (fwd[1] * 8192), start_pos[2] + (fwd[2] * 8192), start_pos[3] + (fwd[3] * 8192))
local wall_dmg = 0
if fraction < 1 then
local end_pos = {
start_pos[1] + (fwd[1] * (8192 * fraction + 128)),
start_pos[2] + (fwd[2] * (8192 * fraction + 128)),
start_pos[3] + (fwd[3] * (8192 * fraction + 128)),
}
local ent, dmg = client_trace_bullet(local_player, start_pos[1], start_pos[2], start_pos[3], end_pos[1], end_pos[2], end_pos[3])
if ent == nil then
ent = -1
end
wall_dmg = dmg or 0
end
local actual_dmg = min_dmg < newdmg and newdmg - min_dmg or newdmg
if wall_dmg <= 0 then
return actual_dmg
elseif wall_dmg > 0 then
return wall_dmg
else
return
end
end
table.find = function(list, value)
for _, v in pairs(list) do
if v == value then
return _
end
end
return false
end
table.contains = function(tbl, val)
for i=1,#tbl do
if tbl[i] == val then
return true
end
end
return false
end
table.length = function(list)
local length = 0
for _ in pairs(list) do
length = length + 1
end
return length
end
local animations = {
data = { },
process = function (self, name, bool, time)
if not self.data[name] then
self.data[name] = 0
end
local animation = globals_frametime() * (bool and 1 or -1) * (time or 4)
self.data[name] = clamp(self.data[name] + animation, 0, 1)
return self.data[name]
end,
lerp = function (self, start, end_, speed, delta)
if (math_abs(start - end_) < (delta or 0.01)) then
return end_
end
speed = speed or 0.095
local time = globals_frametime() * (175 * speed)
return ((end_ - start) * time + start)
end
}
lua.tab = {
'General',
'Anti Aim',
'Visuals',
'Miscellaneous',
'Keybinds',
'Configs'
}
lua.general = {
anim_fix = {
'Landing Pitch',
'Force Falling',
'Leg Breaker',
'Sliding on Slow-Motion'
},
le_ideal_tick = {
'No Packets on Peek',
'No Choke on Shot'
}
}
lua.misc = {
trash = {
'On Kill',
'On Death',
'On Revenge',
type = {
'Ru',
'Eng'
},
},
}
lua.builder = {
hotkey_states = {
[0] = 'Always on',
'On hotkey',
'Toggle',
'Off hotkey'
},
pitch = {
'Off',
'Default',
'Up',
'Down',
'Minimal',
'Random'
},
yaw_base = {
'Local view',
'At targets'
},
yaw = {
'Off',
'180',
'Spin',
'Static',
'180 Z',
'Crosshair',
'Left/Right'
},
yaw_additions = {
'Based On Tick',
'Based On Distance',
'Randomize',
'Avoid Overlap'
},
rand = {
'Default',
'Flip'
},
aa_overlap = {
'Fake Pitch',
'Fake Yaw',
'Fake Jitter',
'Fake Body Yaw',
'Fake Body Angle'
},
yaw_jitter = {
'Off',
'Offset',
'Center',
'Skitter',
'Random',
'3 Way',
'5 Way'
},
body_yaw = {
'Off',
'Opposite',
'Jitter',
'Static'
},
team = {
none = 0,
spec = 1,
t = 2,
ct = 3,
},
}
lua.anti_aims = {
mode = {
'SSS GHOUL',
'Conditional'
},
states = {
'Global',
'Standing',
'Moving',
'Slow-motion',
'In Air',
'In Air & Crouching',
'Is Falling',
'Is Landing',
'Crouching',
'On Brute Force',
'On Hittable',
'On Fakelags',
'On Use'
},
utils = {
'Disable during Warmup',
'Disable Fake Lags On Exploits',
'Avoid Backstab',
'Force Break LC in Air',
'Defensive Anti-Aim',
'Edge Yaw on Ctrl',
'Safe Head'
},
static = {
'Manual Yaw Base',
'Freestanding'
}
}
lua.other = {
os_type = {
'Default',
'Switch',
'Opposite',
'Randomize'
},
fp_utils = {
'Always',
'On Manuals'
}
}
local tabs = {
general = lua.tab[1],
anti_aim = lua.tab[2],
visuals = lua.tab[3],
misc = lua.tab[4],
keybinds = lua.tab[5],
config = lua.tab[6]
}
local g_drag = {}
g_drag.items = {}
g_drag.target = nil
g_drag.bound = nil
local drag_mt = {}
drag_mt.__index = drag_mt;
local screen = library.vector(client_screen_size())
function drag_mt:get()
return self.x, self.y, self.w, self.h
end
function drag_mt:set(x, y, w, h)
if x ~= nil then
self.x = x
end
if y ~= nil then
self.y = y
end
if w ~= nil then
self.w = w
end
if h ~= nil then
self.h = h
end
end
function drag_mt:is_hovered()
local cursor = library.vector(ui_mouse_position())
if cursor.x < self.x then
return false
end
if cursor.x > self.x + self.w then
return false
end
if cursor.y < self.y then
return false
end
if cursor.y > self.y + self.h then
return false
end
return true
end
g_drag.new = function(x, y, w, h)
local drag_t = {
x = x or 0,
y = y or 0,
w = w or 130,
h = h or 20
}
table_insert(g_drag.items, drag_t)
setmetatable(drag_t, drag_mt)
return drag_t
end
g_drag.get_target = function()
if not client.key_state(0x01) then
g_drag.target = nil
return g_drag.target
end
if g_drag.target ~= nil then
return g_drag.target
end
local target
for _, value in ipairs(g_drag.items) do
if value:is_hovered() then
target = value
end
end
if target == nil then
return
end
local cursor = library.vector(ui_mouse_position())
local pos = library.vector(target.x, target.y)
g_drag.bound = pos - cursor
g_drag.target = target
return target
end
g_drag.paint_ui = function()
local target = g_drag.get_target()
if target == nil then
return
end
local cursor = library.vector(ui_mouse_position())
local new = cursor + g_drag.bound
target:set(
clamp(new.x, 0, screen.x - target.w),
clamp(new.y, 0, screen.y - target.h)
)
end
local callback = {}
local menu_mt = {}
local menu = {}
if not LPH_OBFUSCATED then
LPH_NO_VIRTUALIZE = function(...) return ... end
end
local typeof = type
LPH_NO_VIRTUALIZE(function()
callback.thread = 'main'
callback.history = {}
callback.get = function(key, result_only)
local this = callback.history[key]
if not this then
return
end
if result_only then
return unpack(this.m_result)
end
return this
end
callback.new = function(key, event_name, func)
local this = {}
this.m_key = key
this.m_event_name = event_name
this.m_func = func
this.m_result = {}
local handler = function(...)
callback.thread = event_name
this.m_result = { func(...) }
end
local protect = function(...)
local success, result = pcall(handler, ...)
if success then
return
end
die('|!| callback::new - %s', result)
end
client_set_event_callback(event_name, protect)
this.m_protect = protect
callback.history[key] = this
return this
end
menu_mt.register_callback = function(self, callback)
if not callback then
return false
end
if typeof(self) == 'table' then
self = self.m_reference
end
if not self then
return false
end
if menu.binds[self] == nil then
menu.binds[self] = {}
local refresh = function(item)
for k, v in ipairs(menu.binds[self]) do
v(item)
end
end
ui_set_callback(self, refresh)
end
table_insert(menu.binds[self], callback)
return true
end
menu_mt.get = function(self, refresh)
if not refresh then
return unpack(self.m_value)
end
local protect = function()
return { ui_get(self.m_reference) }
end
local success, result = pcall(protect)
if not success then
return
end
return unpack(result)
end
menu_mt.set = function(self, ...)
if pcall(ui_set, self.m_reference, ...) then
self.m_value = { self:get(true) }
end
end
menu_mt.set_bypass = function(self, ...)
local args = { ... }
client_delay_call(-1, function()
self:set(unpack(args))
end)
end
menu_mt.set_visible = function(self, value)
if pcall(ui_set_visible, self.m_reference, value) then
self.m_visible = value
end
end
menu_mt.update = function(self, ...)
pcall(ui_update, self.m_reference, ...)
end
menu_mt.override = function(self, ...)
pcall(menu.override, self.m_reference, ...)
end
menu_mt.add_as_parent = function(self, callback)
self.m_parent = true
local this = {}
this.original = self
this.callback = callback
table_insert(menu.parents, this)
this.idx = #menu.parents
end
menu.prod = {}
menu.binds = {}
menu.parents = {}
menu.updates = {}
menu.history = {}
menu.list = {};
menu.override = function(id, ...)
if menu.history[callback.thread] == nil then
menu.history[callback.thread] = {}
local handler = function()
local dir = menu.history[callback.thread]
for k, v in pairs(dir) do
if v.active then
v.active = false;
goto skip;
end
ui_set(k, unpack(v.value));
dir[k] = nil;
::skip::
end
end
callback.new('menu::override::' .. callback.thread, callback.thread, handler)
end
local args = { ... }
if #args == 0 then
return
end
if menu.history[callback.thread][id] == nil then
local item = { };
local value = { ui.get(id) };
if ui_type(id) == "hotkey" then
value = {lua.builder.hotkey_states[value[2]]};
end
item.value = value;
menu.history[callback.thread][id] = item;
end
menu.history[callback.thread][id].active = true;
ui_set(id, ...);
end
menu.shutdown = function()
for k, v in pairs(menu.history) do
for x, y in pairs(v) do
if y.backup == nil then
goto skip
end
ui_set(x, unpack(y.backup))
y.backup = nil
::skip::
end
end
end
menu.set_visible = function(x, b)
if typeof(x) == 'table' then
for k, v in pairs(x) do
menu.set_visible(v, b)
end
return
end
ui_set_visible(x, b)
end
menu.refresh = function()
for k, v in pairs(menu.prod) do
for x, y in pairs(v) do
local protect = function()
local state = true
if y.m_parameters.callback ~= nil then
state = y.m_parameters.callback()
end
for k, v in pairs(menu.parents) do
if y.m_parameters.bypass then
if y.m_parameters.bypass[k] then
goto continue
end
end
if y == v.original then
break
end
if not v.callback(y) then
state = false
break
end
::continue::
end
y:set_visible(state)
end
local isSuccess, output = pcall(protect)
if isSuccess then
goto continue
end
if isDebug then
output = string_format('%s, debug info: group = %s, name = %s', output, y.m_group, y.name)
end
die('|!| menu::refresh - %s', output)
::continue::
end
end
end
menu.new = function(group, name, method, arguments, parameters)
if menu.prod[group] == nil then
menu.prod[group] = {}
end
if menu.prod[group][name] ~= nil then
die('|!| menu::new - unable to create element with already used arguments: group = %s, name = %s', group, name)
end
local this = {}
this.m_group = group
this.name = name
this.m_method = method
this.m_arguments = arguments
this.m_parameters = parameters or {}
this.m_grouped = menu.allow_group
this.m_visible = true
setmetatable(this, {
__index = menu_mt
})
local createReference = function()
this.m_reference = this.m_method(unpack(this.m_arguments))
end
local isSuccess, output = pcall(createReference)
if not isSuccess then
if isDebug then
output = f('%s, debug info: group = %s, name = %s', output, group, name)
end
die('|!| menu::new - %s', output)
end
menu.prod[group][name] = this
if this.m_method == ui_new_button then
this:register_callback(this.m_arguments[4])
end
local createCallback = function(item)
local value = { ui_get(item) }
this.m_value = value
end
local protect = function(item)
pcall(createCallback, item)
menu.refresh()
end
this:register_callback(protect)
protect(this.m_reference)
if this.m_parameters.update_per_frame then
table.insert(menu.updates, this)
if not callback.get('menu::update_per_frame') then
callback.new('menu::update_per_frame', 'paint_ui', function()
for k, v in pairs(menu.updates) do
if v:get(true) == v:get() then
goto skip
end
v:set(v:get(true))
menu.refresh()
::skip::
end
end)
end
end
return this
end
menu.register_callback = menu_mt.register_callback
callback.new('menu::shutdown', 'shutdown', menu.shutdown)
end)()
local configs = {
prefix = 'amelia::',
suffix = '_amelia',
key = 'AMELI4vipBCDFGHJKNOPQRSTUVWXYZabcdefghjklmnoqrstuwxyz012356789+/='
}
configs.export = function()
local slot = {};
for k, v in pairs(menu.prod) do
local group = {}
for x, y in pairs(v) do
if y.m_parameters.config == false then
goto skip
end
local value = { y:get(true) }
if #value == 0 then
goto skip
end
group[x] = value
::skip::
end
if next(group) ~= nil then
slot[k] = group
end
end
if next(slot) == nil then
return false
end
local config = {
data = slot,
user = username or 'unknown',
date = '12.12.2012',
build = 'unknown',
}
local success, stringify = pcall(json.stringify, config)
if not success then
return message(255, 255, 255, 'Failed to stringify configuration.')
end
local success, encoded = pcall(library.base64.encode, stringify, configs.key)
if not success then
return message(255, 255, 255, 'Failed to encode configuration.')
end
return configs.prefix .. encoded .. configs.suffix
end
configs.import = function(s)
local config = clipboard.get()
local converted = false;
if type(s) == 'string' then
config = s
end
local prefix_length = #configs.prefix
if config:sub(1, prefix_length) ~= configs.prefix then
return
end
if config:find('_amelia') then
config = config:gsub('_amelia', '')
end
config = config:sub(1 + prefix_length)
local success, decoded = pcall(library.base64.decode, config, configs.key)
if not success then
return message(255, 255, 255, 'Failed to decode configuration.')
end
local successz, parsed = pcall(json.parse, decoded)
if not successz then
return message(255, 255, 255, 'Failed to parse configuration.')
end
if parsed.data == nil then
return
end
for k, v in pairs(parsed.data) do
if menu.prod[k] == nil then
goto skip
end
for x, y in pairs(v) do
if menu.prod[k][x] == nil then
goto skip
end
local value = y;
if type(value[1]) == "boolean" and type(value[2]) == "number" then
menu.prod[k][x]:set(lua.builder.hotkey_states[value[2]]);
goto skip
end
menu.prod[k][x]:set(unpack(value))
::skip::
end
::skip::
end
return config
end
configs.data_slot = database.read('amelia::data_slot')
configs.load_startup = function()
if not configs.data_slot then
return
end
client_delay_call(-1, function()
configs.import(configs.data_slot)
end)
end
configs.shutdown = function()
local encoded = configs.export()
if not encoded then
return
end
database.write('amelia::data_slot', encoded)
end
do
menu.new('amelia', 'Tab Selection', ui_new_combobox, { 'AA', 'Anti-Aimbot angles', defines.lua_prefix..' Tab Selection', unpack(lua.tab) })
menu.prod['amelia']['Tab Selection']:add_as_parent(function(self)
return self.m_group == menu.prod['amelia']['Tab Selection']:get()
end)
end
do
menu.new(tabs.general, 'General', ui_new_checkbox, { 'AA', 'Anti-aimbot angles', 'Enable' .. defines.colors.menu .. ' General' })
menu.prod[ tabs.general ]['General']:add_as_parent(function(self)
if self.m_group ~= tabs.general then
return true
end
return menu.prod[ tabs.general ]['General']:get()
end)
end
menu.new(tabs.general, 'Anim Breaker', ui_new_multiselect, { 'AA', 'Anti-aimbot angles', defines.colors.menu .. 'Animation Fix Breaker', unpack(lua.general.anim_fix) })
menu.new(tabs.general, 'Moonwalk Mode', ui_new_checkbox, { 'AA', 'Anti-aimbot angles', 'Moonwalk Mode'})
menu.new(tabs.general, 'Moonwalk In Air', ui_new_checkbox, { 'AA', 'Anti-aimbot angles', 'Moonwalk In Air Mode'})
menu.new(tabs.general, 'Ideal Tick', ui_new_checkbox, { 'AA', 'Anti-aimbot angles', 'Ideal Tick'})
menu.new(tabs.general, 'Ideal Options', ui_new_multiselect, { 'AA', 'Anti-aimbot angles', 'Options', unpack(lua.general.le_ideal_tick) }, {
config = false,
callback = function()
return menu.prod[ tabs.general ]['Ideal Tick']:get()
end
})
do
menu.new(tabs.anti_aim, 'Controller', ui_new_checkbox, { 'AA', 'Anti-aimbot angles', 'Enable' .. defines.colors.menu .. ' Anti Aim' })
menu.prod[ tabs.anti_aim ]['Controller']:add_as_parent(function(self)
if self.m_group ~= tabs.anti_aim then
return true
end
return menu.prod[ tabs.anti_aim ]['Controller']:get()
end)
end
menu.new(tabs.anti_aim, 'Functions', ui_new_multiselect, { 'AA', 'Anti-aimbot angles', defines.colors.menu .. 'Anti Aim Utils', unpack(lua.anti_aims.utils) })
menu.new(tabs.anti_aim, 'Static On Manuals', ui_new_multiselect, { 'AA', 'Anti-aimbot angles', 'Static Body Yaw On', unpack(lua.anti_aims.static) })
menu.new(tabs.anti_aim, 'Type', ui_new_combobox, { 'AA', 'Anti-aimbot angles', 'Mode', unpack(lua.anti_aims.mode) })
menu.new(tabs.anti_aim, 'PlayerCondition', ui_new_combobox, { 'AA', 'Anti-aimbot angles', 'Current State', unpack(lua.anti_aims.states) }, {
config = false,
callback = function()
return menu.prod[ tabs.anti_aim ]['Type']:get() == 'Conditional'
end
})
do
local spacing = ''
for key, value in ipairs(lua.anti_aims.states) do
local is_visible = function ()
return menu.prod[ tabs.anti_aim ]['Type']:get() == 'Conditional'
and menu.prod[ tabs.anti_aim ]['PlayerCondition']:get() == value
end
if value ~= lua.anti_aims.states[ 1 ] then
local override = value .. '::override'
menu.new(tabs.anti_aim, override, ui_new_checkbox, { 'AA', 'Anti-aimbot angles', 'Enable\x20' .. defines.colors.menu .. value }, {
callback = is_visible
})
is_visible = function()
return menu.prod[ tabs.anti_aim ]['Type']:get() == 'Conditional'
and menu.prod[ tabs.anti_aim ]['PlayerCondition']:get() == value
and menu.prod[ tabs.anti_aim ][value .. '::override']:get()
end
end
menu.new(tabs.anti_aim, value .. '::pitch', ui_new_combobox, { 'AA', 'Anti-aimbot angles', 'Pitch' .. spacing, unpack(lua.builder.pitch) }, {
callback = is_visible
})
menu.new(tabs.anti_aim, value .. '::yaw_base', ui_new_combobox, { 'AA', 'Anti-aimbot angles', 'Yaw Base' .. spacing, unpack(lua.builder.yaw_base) }, {
callback = is_visible
})
menu.new(tabs.anti_aim, value .. '::yaw', ui_new_combobox, { 'AA', 'Anti-aimbot angles', 'Yaw' .. spacing, unpack(lua.builder.yaw) }, {
callback = is_visible
})
menu.new(tabs.anti_aim, value .. '::yaw_amount', ui_new_slider, { 'AA', 'Anti-aimbot angles', '\n yaw_amount' .. spacing, -180, 180, 0, true, '°' }, {
callback = function()
return is_visible()
and menu.prod[ tabs.anti_aim ][value .. '::yaw']:get() ~= lua.builder.yaw[1] -- число в списке больше первого
and menu.prod[ tabs.anti_aim ][value .. '::yaw']:get() ~= lua.builder.yaw[#lua.builder.yaw] -- конечное число в списке
end
})
menu.new(tabs.anti_aim, value .. '::yaw_left', ui_new_slider, { 'AA', 'Anti-aimbot angles', 'Yaw Left' .. spacing, -180, 180, 0, true, '°' }, {
callback = function()
return is_visible()
and menu.prod[ tabs.anti_aim ][value .. '::yaw']:get() == lua.builder.yaw[#lua.builder.yaw]
end
})
menu.new(tabs.anti_aim, value .. '::yaw_right', ui_new_slider, { 'AA', 'Anti-aimbot angles', 'Yaw Right' .. spacing, -180, 180, 0, true, '°' }, {
callback = function()
return is_visible()
and menu.prod[ tabs.anti_aim ][value .. '::yaw']:get() == lua.builder.yaw[#lua.builder.yaw]
end
})
menu.new(tabs.anti_aim, value .. '::os_cond', ui_new_combobox, { 'AA', 'Anti-aimbot angles', 'On shot anti-aim' .. spacing, unpack(lua.other.os_type) }, {
callback = is_visible
})
menu.new(tabs.anti_aim, value .. '::yaw_additions', ui_new_multiselect, { 'AA', 'Anti-aimbot angles', defines.colors.menu .. 'Yaw Additions' .. spacing, unpack(lua.builder.yaw_additions) }, {
callback = function()
return is_visible()
and menu.prod[ tabs.anti_aim ][value .. '::yaw']:get() ~= lua.builder.yaw[1]
end
})
menu.new(tabs.anti_aim, value .. '::yaw_tick_slider', ui_new_slider, { 'AA', 'Anti-aimbot angles', '\n Yaw Tick' .. spacing, 1, 10, 0, true, 't' }, {
callback = function()
return is_visible()
and menu.prod[ tabs.anti_aim ][value .. '::yaw']:get() ~= lua.builder.yaw[1]
and table.find(menu.prod[ tabs.anti_aim ][value .. '::yaw_additions']:get(), 'Based On Tick')
end
})
menu.new(tabs.anti_aim, value .. '::yaw_randomize', ui_new_combobox, { 'AA', 'Anti-aimbot angles', 'Yaw Randomize' .. spacing, unpack(lua.builder.rand) }, {
callback = function()
return is_visible()
and menu.prod[ tabs.anti_aim ][value .. '::yaw']:get() ~= lua.builder.yaw[1]
and table.find(menu.prod[ tabs.anti_aim ][value .. '::yaw_additions']:get(), 'Randomize')
end
})
menu.new(tabs.anti_aim, value .. '::yaw_rand_slider', ui_new_slider, { 'AA', 'Anti-aimbot angles', '\n max rand val' .. spacing, -180, 180, 0, true, '°' }, {
callback = function()
return is_visible()
and menu.prod[ tabs.anti_aim ][value .. '::yaw']:get() ~= lua.builder.yaw[1]
and table.find(menu.prod[ tabs.anti_aim ][value .. '::yaw_additions']:get(), 'Randomize')
end
})
menu.new(tabs.anti_aim, value .. '::avoid_overlap', ui_new_multiselect, { 'AA', 'Anti-aimbot angles', defines.colors.menu .. 'Overlap Type' .. spacing, unpack(lua.builder.aa_overlap) }, {
callback = function()
return is_visible()
and menu.prod[ tabs.anti_aim ][value .. '::yaw']:get() ~= lua.builder.yaw[1]
and table.find(menu.prod[ tabs.anti_aim ][value .. '::yaw_additions']:get(), 'Avoid Overlap')
end
})
menu.new(tabs.anti_aim, value .. '::yaw_jitter', ui_new_combobox, { 'AA', 'Anti-aimbot angles', 'Yaw Jitter' .. spacing, unpack(lua.builder.yaw_jitter) }, {
callback = is_visible
})
menu.new(tabs.anti_aim, value .. '::yaw_jitter_type', ui_new_combobox, { 'AA', 'Anti-aimbot angles', 'Yaw Jitter Type' .. spacing, { 'Static', 'Switch Min/Max', 'Random' } }, {
callback = function ()
return is_visible()
and menu.prod[ tabs.anti_aim ][value .. '::yaw_jitter']:get() ~= lua.builder.yaw_jitter[ 1 ]
end
})
menu.new(tabs.anti_aim, value .. '::jitter_amount', ui_new_slider, { 'AA', 'Anti-aimbot angles', '\n jitter_amount' .. spacing, -180, 180, 0, true, '°' }, {
callback = function()
return is_visible()
and menu.prod[ tabs.anti_aim ][value .. '::yaw_jitter']:get() ~= lua.builder.yaw_jitter[1]
end
})
menu.new(tabs.anti_aim, value .. '::jitter_amount2', ui_new_slider, { 'AA', 'Anti-aimbot angles', '\n jitter_amount 2' .. spacing, -180, 180, 0, true, '°' }, {
callback = function()
return is_visible()
and menu.prod[ tabs.anti_aim ][value .. '::yaw_jitter']:get() ~= lua.builder.yaw_jitter[ 1 ]
and menu.prod[ tabs.anti_aim ][value .. '::yaw_jitter_type']:get() ~= 'Static'
end
})
menu.new(tabs.anti_aim, value .. '::body_yaw', ui_new_combobox, { 'AA', 'Anti-aimbot angles', 'Body yaw' .. spacing, unpack(lua.builder.body_yaw) }, {
callback = is_visible
})
menu.new(tabs.anti_aim, value .. '::body_yaw_amount', ui_new_slider, { 'AA', 'Anti-aimbot angles', '\n body_yaw_amount' .. spacing, -180, 180, 0, true, '°' }, {
callback = function()
return is_visible()
and menu.prod[ tabs.anti_aim ][value .. '::body_yaw']:get() ~= lua.builder.body_yaw[1]
end
})
menu.new(tabs.anti_aim, value .. '::freestanding_body_yaw', ui_new_checkbox, { 'AA', 'Anti-aimbot angles', 'Freestanding body yaw' .. spacing, false }, {
callback = function()
return is_visible()
and menu.prod[ tabs.anti_aim ][value .. '::body_yaw']:get() ~= lua.builder.body_yaw[1]
and menu.prod[ tabs.anti_aim ][value .. '::body_yaw']:get() ~= lua.builder.body_yaw[3]
end
})
spacing = spacing .. '\x20'
end
end
do
menu.new(tabs.visuals, 'Visuals', ui_new_checkbox, { 'AA', 'Anti-aimbot angles', 'Enable' .. defines.colors.menu .. ' Visuals' })
menu.prod[ tabs.visuals ]['Visuals']:add_as_parent(function(self)
if self.m_group ~= tabs.visuals then
return true
end
return menu.prod[ tabs.visuals ]['Visuals']:get()
end)
end
menu.new(tabs.visuals, 'Anti Aim Arrow', ui_new_combobox, { 'AA', 'Anti-aimbot angles', 'Anti Aim Arrow', {'Disabled', 'Simple', 'Legacy', 'Modern'} })
menu.new(tabs.visuals, 'Arrow Color 1', ui_new_color_picker, { 'AA', 'Anti-aimbot angles', 'Arrow Background Color', defines.colors.menu_r, defines.colors.menu_g, defines.colors.menu_b, 255 }, {
callback = function()
return menu.prod[ tabs.visuals ]['Anti Aim Arrow']:get() ~= 'Disabled'
end
})
menu.new(tabs.visuals, 'Arrow Color Text', ui_new_label, { 'AA', 'Anti-aimbot angles', defines.colors.menu .. 'Desync Color' }, {
callback = function()
return menu.prod[ tabs.visuals ]['Anti Aim Arrow']:get() == 'Modern'
end
})
menu.new(tabs.visuals, 'Arrow Color 2', ui_new_color_picker, { 'AA', 'Anti-aimbot angles', 'Desync Color', 225, 225, 225, 255}, {
callback = function()
return menu.prod[ tabs.visuals ]['Anti Aim Arrow']:get() == 'Modern'
end
})
menu.new(tabs.visuals, 'Crosshair Indicators', ui_new_combobox, { 'AA', 'Anti-aimbot angles', 'Crosshair Indicators', {'Disabled', 'Gradient', 'Legacy'} })
menu.new(tabs.visuals, 'Gradient 1', ui_new_color_picker, { 'AA', 'Anti-aimbot angles', 'Background Color', 225, 225, 225, 255 }, {
callback = function()
return menu.prod[ tabs.visuals ]['Crosshair Indicators']:get() ~= 'Disabled'
end
})
menu.new(tabs.visuals, 'Gradient 2 Text', ui_new_label, { 'AA', 'Anti-aimbot angles', defines.colors.menu .. 'Gradient Color' }, {
callback = function()
return menu.prod[ tabs.visuals ]['Crosshair Indicators']:get() == 'Gradient'
end
})
menu.new(tabs.visuals, 'Gradient 2', ui_new_color_picker, { 'AA', 'Anti-aimbot angles', 'Gradient Color', defines.colors.menu_r, defines.colors.menu_g, defines.colors.menu_b, 255 }, {
callback = function()
return menu.prod[ tabs.visuals ]['Crosshair Indicators']:get() == 'Gradient'
end
})
menu.new(tabs.visuals, 'Logs', ui_new_checkbox, { 'AA', 'Anti-aimbot angles', 'Enable ' .. defines.colors.menu .. 'Logs' })
menu.new(tabs.visuals, 'Events', ui_new_multiselect, { 'AA', 'Anti-aimbot angles', defines.colors.menu .. 'Events', {'Lua Notify', 'Hit', 'Miss'} }, {
callback = function()
return menu.prod[ tabs.visuals ]['Logs']:get()
end
})
menu.new(tabs.visuals, 'Logs Style', ui_new_multiselect, { 'AA', 'Anti-aimbot angles', defines.colors.menu .. 'Style', {'Amelia', 'Console Panel'} }, {
callback = function()
return menu.prod[ tabs.visuals ]['Logs']:get()
end
})
do
menu.new(tabs.misc, 'Miscellaneous', ui_new_checkbox, { 'AA', 'Anti-aimbot angles', 'Enable' .. defines.colors.menu .. ' Miscellaneous' })
menu.prod[ tabs.misc ]['Miscellaneous']:add_as_parent(function(self)
if self.m_group ~= tabs.misc then
return true
end
return menu.prod[ tabs.misc ]['Miscellaneous']:get()
end)
end
menu.new(tabs.misc, 'Clan Tag Spammer', ui_new_checkbox, { 'AA', 'Anti-aimbot angles', 'Clan Tag Spammer' })
menu.new(tabs.misc, 'Talk *****', ui_new_multiselect, { 'AA', 'Anti-aimbot angles', defines.colors.menu .. 'Talk *****', {'On Kill', 'On Death', 'Revenge'} })
menu.new(tabs.misc, 'Talk ***** Disabler', ui_new_checkbox, { 'AA', 'Anti-aimbot angles', 'Disable During Warmup' })
menu.new(tabs.misc, 'Fast Ladder', ui_new_checkbox, { 'AA', 'Anti-aimbot angles', 'Fast Ladder' })
menu.new(tabs.keybinds, 'Manual Left', ui_new_hotkey, { 'AA', 'Anti-aimbot angles', 'Manual Left' })
menu.new(tabs.keybinds, 'Manual Right', ui_new_hotkey, { 'AA', 'Anti-aimbot angles', 'Manual Right' })
menu.new(tabs.keybinds, 'Manual Forward', ui_new_hotkey, { 'AA', 'Anti-aimbot angles', 'Manual Forward' })
menu.new(tabs.keybinds, 'Freestanding Bound', ui_new_hotkey, { 'AA', 'Anti-aimbot angles', 'Freestanding' })
menu.new(tabs.config, 'DefaultConfig', ui_new_button, { 'AA', 'Anti-aimbot angles', 'Load Default Config', function() end })
menu.new(tabs.config, 'ExportConfig', ui_new_button, { 'AA', 'Anti-aimbot angles', 'Export settings to clipboard', function() end })
menu.new(tabs.config, 'ImportConfig', ui_new_button, { 'AA', 'Anti-aimbot angles', 'Import settings from clipboard', function() end })
--TODO: ДОБАВИТЬ КОНФИГ
menu.prod[ tabs.config ]['DefaultConfig']:register_callback(function ()
local decoded = configs.import('amelia::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Uj4qHfm5UTZbUj4yVOp6SxBFX1GdXEM1WSR2phzqpghspI4mYfl6aS42T2BdXjNtXSh6VOp6SxBIVSVdZSwzphzqpghypIwdXjNmXjY6HkhdZ09xWSZlZEp6SyMZDEBBXeMMWTpcBeMLYj90U1dmXjY6HkhdZ09nWTNzVTpeHhqeGOMTUTgeTOueK2BtZSGlWS5kHfm5UTZbYj4sV49yXvhgVTpeHhquTOueP13cNj4oVSwdV2F6HkhdZ09xUS5gT2GqWSNhYep6SyMZDEBPXv92DS0tZvhtXfl6aS42T14rX2RsZEp6SxzxFRzqpg0tZjhsVyl6YvhzU1ceHhqePShsWS0dXEBZDEBGX2VmXjY6HkhdZ09qVSVzpfmXDPIzTOueOS3cKShxpEUcK2BtZSGlWS5kHfm5UTZbZvhfW09yXvhgVTpeHhqwTOueOTFcNj4qXvhsVyl6aS42T1whVkKeHhquTOueQ2NdXjNmXjY6HkhdZ09zWSGoT2GqWSNhYep6Sy4ZDEBJXeMpWTNzUSBqVPl6WjhzZvRxT14rX2RsZEp6SyMZDEBJXeMEYkRzVOMvX2BfVPl6X2GbU19sVEp6SxBOUS5gX10majQeTOueOTFcPv4sVvhsVyl6aS42T14rX2RsZEp6SyIxTOueP13cOvhzZv4eXvQ6HkhdZ09nWTNzVTBbZihuVOp6SxBPZv4zWSFeTOueQ1wtZx0rX2NmX136Hj91VTBxWSNhpfmXZiB0VRzqpg9spIdmZiNdUjwhHfm5UTZbZvhfW09yXvhgVTpeHhqwTOueQ2NdXjNmXjY6Hj41X1hgT191VTBqUTAeHhr7bRzqpghspI4mYfl6Uj9gaR95UTYeHhqeQ2NdZvhfphzqpg9spIdmZiNdUjwhHfmeX1N5T2hdZxp6SxBJYiMtY1hzVOBZDEBBXeMMWTp6HkhdZ09dVvNmZvhtXkFeHhrXpgBdY1RgpI9sp4NmU1qeTRzqpg9spIBxZTNhpIVtYjGhHfmuWTNfWEp6SxBIVSVdZSwzphzqpg9sp4RyVPl6WjhzZvRxT14rX2RsZLpeHhquTOueN1wtUj4qHfm5UTZbUS0tZS5zpfmXDP4ZDEBBYxMFUS5gWS5kHfmeX1N5T2hdZ09dXS90XkKeHhqrGf4ZDEBBYxMvUSwqWS5kHfm5UTZbZvhfW09yXvhgVTpeHhqwTOueOTFcNj4qXvhsVyl6Uj9gaR95UTYeHhqeP2MuX2GmZvQeTOueP13cRTGhHfmnWTNzVTBbUS0tZS5zpfmXF4zqpg0tZjhsVyl6X2GbU19sVEp6SxBPZ1hzU1ceTOuePS91WS5kHfm5UTZbZvhfW09yXvhgVTpeHhqwTOueP13cNj4oVSwdV2F6HjVxVSRyZv4sVvhsV09eX1N5T2hdZxp6S2NxZSRZbTzqpjNdZvQeHepwFe3wFe3xFLIxpkz=_amelia')
if not decoded then
return
end
message(255, 255, 255, 'Succesfully loaded default script settings!')
end)
menu.prod[ tabs.config ]['ExportConfig']:register_callback(function()
local data = configs.export()
clipboard.set(data)
end)
menu.prod[ tabs.config ]['ImportConfig']:register_callback(function()
local decoded = configs.import()
if not decoded then
return
end
message(255, 255, 255, 'Succesfully imported settings from clipboard!')
end)
entity_helpers.local_player = {}
entity_helpers.local_player.last_time = -1
entity_helpers.local_player.cached = {ptr = nil, index = -1}
entity_helpers.local_player.pointer = function()
if entity_helpers.local_player.last_time == globals_tickcount() then
return entity_helpers.local_player.cached.ptr
end
entity_helpers.local_player.cached.ptr = entity_get_local_player()
if entity_helpers.local_player.cached.ptr then
entity_helpers.local_player.cached.index = client_userid_to_entindex(entity_helpers.local_player.cached.ptr)
else
entity_helpers.local_player.cached.index = -1
end
entity_helpers.local_player.last_time = globals_tickcount()
return entity_helpers.local_player.cached.ptr
end
entity_helpers.local_player.index = function()
entity_helpers.local_player.pointer()
return entity_helpers.local_player.cached.index
end
local anti_aim = {
manual_reset = 0,
manual_yaw = 0,
manual_items = {
[ menu.prod[ tabs.keybinds ]['Manual Left'] ] = {
yaw = 1,
state = false,
},
[ menu.prod[ tabs.keybinds ]['Manual Right'] ] = {
yaw = 2,
state = false,
},
[ menu.prod[ tabs.keybinds ]['Manual Forward'] ] = {
yaw = 3,
state = false,
},
},
manual_degree = {
-90,
90,
180,
0,
},
defensive = 0,
ground_ticks = 0,
last_body_yaw = 0,
}
ui_set(menu.prod[ tabs.keybinds ]['Manual Left'].m_reference, 'Toggle')
ui_set(menu.prod[ tabs.keybinds ]['Manual Right'].m_reference, 'Toggle')
ui_set(menu.prod[ tabs.keybinds ]['Manual Forward'].m_reference, 'Toggle')
anti_aim.defens = 0
anti_aim.handle_defensive = function () -- @Credits: Salvatore
local lp = entity_get_local_player()
if lp == nil or not entity_is_alive(lp) then
return
end
local m_tick_base = entity_get_prop(lp, 'm_nTickBase')
local defens = anti_aim.defens
if math_abs(m_tick_base - defens) > 64 then
defens = 0
end
local until_ticks = 0
if m_tick_base > defens then
defens = m_tick_base
elseif defens > m_tick_base then
until_ticks = math_min(14, math_max(0, defens-m_tick_base-1))
end
if defens > 0 then
anti_aim.defensive = until_ticks;
return;
end
end
conditional_antiaims.vulnerable_ticks = 0
anti_aim.is_crouching = function (c)
local local_player = entity_get_local_player()
local flags = entity_get_prop(local_player, "m_fFlags")
local is_crouching = bit_band(flags, conditional_antiaims.adress.FL_DUCKING) ~= 0
local is_fd = ui_get(reference.RAGE.other.duck_peek_assist)
local on_ground = bit_band(flags, conditional_antiaims.adress.FL_ONGROUND) ~= 0 and c.in_jump == 0
if on_ground and (is_crouching or is_fd) then
return true
else
return false
end
end
anti_aim.is_uncrouching = function (c)
local local_player = entity_get_local_player()
local duck_amount = entity_get_prop(local_player, "m_flDuckAmount")
local duck_diff = duck_amount - conditional_antiaims.last_duck_amount
conditional_antiaims.last_duck_amount = duck_amount
if duck_diff < 0 then
return true
else
return false
end
end
anti_aim.air_duck = function (c)
local local_player = entity_get_local_player()
local flags = entity_get_prop(local_player, "m_fFlags")
local on_ground = bit_band(flags, conditional_antiaims.adress.FL_ONGROUND) ~= 0 or c.in_jump == 0
local inair = bit_band(flags, 1 ) == 0 or c.in_jump == 1
if not on_ground and inair and c.in_duck == 1 then
return true
else
return false
end
end
anti_aim.is_air = function (c)
local local_player = entity_get_local_player()
local flags = entity_get_prop(local_player, "m_fFlags")
local on_ground = bit_band(flags, conditional_antiaims.adress.FL_ONGROUND) ~= 0 or c.in_jump == 0
local inair = bit_band(flags, 1 ) == 0 or c.in_jump == 1
if not on_ground and inair then
return true
else
return false
end
end
local wpn_ignored = {
'CKnife',
'CWeaponTaser',
'CC4',
'CHEGrenade',
'CSmokeGrenade',
'CMolotovGrenade',
'CSensorGrenade',
'CFlashbang',
'CDecoyGrenade',
'CIncendiaryGrenade'
}
anti_aim.is_hit = function (c)
local local_player = entity_get_local_player()
if local_player == nil then
return
end
if not entity_is_alive(local_player) then
return
end
local local_origin = library.vector(entity_get_prop(local_player, "m_vecAbsOrigin"))
local players = entity_get_players(true)
if #players == nil or #players == 0 then
return
end
local weapon = entity_get_player_weapon(local_player)
if weapon == nil or table.contains(wpn_ignored, entity_get_classname(weapon)) then
return
end
local weapon_idx = entity_get_prop(weapon, "m_iItemDefinitionIndex")
local espData
local newdmg
for i=1, #players do
local entindex = players[i]
newdmg = calculate_damage(weapon_idx, local_origin, entindex)
espData = entity_get_esp_data(entindex)
end
local scan = entity_get_prop (local_player, 'm_iHealth')
if hasFlag(espData, 2048) and newdmg >= scan then
return true
else
return false
end
end
animation_breaker.cvars = {
ground_ticks = 0,
end_time = 0
}
anti_aim.is_falling = function (c)
local local_player = entity_get_local_player()
local flags = entity_get_prop(local_player, "m_fFlags")
local on_ground = bit_band(flags, conditional_antiaims.adress.FL_ONGROUND) ~= 0 and c.in_jump == 0
local inair = bit_band(flags, 1 ) == 0 and c.in_jump == 1
local on_ground2 = bit_band(flags, 1)
if on_ground2 == 1 then
animation_breaker.cvars.ground_ticks = animation_breaker.cvars.ground_ticks + 1
else
animation_breaker.cvars.ground_ticks = 0
animation_breaker.cvars.end_time = globals_curtime() + 0.3
end
local land = animation_breaker.cvars.ground_ticks > ui_get(reference.AA.fakelag.limit)+1 and animation_breaker.cvars.end_time > globals_curtime()
if entity_get_prop(local_player, "m_MoveType") == 9 then
return
end
if not on_ground and not inair and not land then
return true
else
return false
end
end
anti_aim.is_landing = function (c)
local local_player = entity_get_local_player()
local flags = entity_get_prop(local_player, "m_fFlags")
local on_ground = bit_band(flags, 1)
if on_ground == 1 then
animation_breaker.cvars.ground_ticks = animation_breaker.cvars.ground_ticks + 1
else
animation_breaker.cvars.ground_ticks = 0
animation_breaker.cvars.end_time = globals_curtime() + 0.3
end
local land = animation_breaker.cvars.ground_ticks > ui_get(reference.AA.fakelag.limit)+1 and animation_breaker.cvars.end_time > globals_curtime()
if land then
return true
else
return false
end
end
anti_aim.is_slow = function()
local on_slowwalk = ui_get(reference.AA.other.slow_motion[1]) and ui_get(reference.AA.other.slow_motion[2])
if on_slowwalk then
return true
else
return false
end
end
anti_aim.is_moving = function (c)
local local_player = entity_get_local_player()
local flags = entity_get_prop(local_player, "m_fFlags")
local is_crouching = bit_band(flags, conditional_antiaims.adress.FL_DUCKING) ~= 0
local on_ground = bit_band(flags, conditional_antiaims.adress.FL_ONGROUND) ~= 0 and c.in_jump == 0
local vx, vy, vz = entity_get_prop(entity_get_local_player(), "m_vecVelocity")
local on_still = math_sqrt(vx ^ 2 + vy ^ 2) < 2
if not on_still and on_ground and not is_crouching then
return true
else
return false
end
end
anti_aim.is_standing = function(c)
local local_player = entity_get_local_player()
local flags = entity_get_prop(local_player, "m_fFlags")
local on_ground = bit_band(flags, conditional_antiaims.adress.FL_ONGROUND) ~= 0 and c.in_jump == 0
local vx, vy, vz = entity_get_prop(entity_get_local_player(), "m_vecVelocity")
local on_still = math_sqrt(vx ^ 2 + vy ^ 2) < 2
if on_still and on_ground then
return true
else
return false
end
end
anti_aim.is_fl = function(c)
local local_player = entity_get_local_player()
local vx, vy, vz = entity_get_prop(local_player, "m_vecVelocity")
local is_os = ui_get(reference.AA.other.on_shot_antiaim[1]) and ui_get(reference.AA.other.on_shot_antiaim[2])
local is_dt = ui_get(reference.RAGE.aimbot.double_tap[1]) and ui_get(reference.RAGE.aimbot.double_tap[2])
local on_still = math_sqrt(vx ^ 2 + vy ^ 2) < 2
if not is_dt and not is_os and not on_still then
return true
else
return false
end
end
visual_controller.helpers = {
easeInOut = function(self, t)
return (t > 0.5) and 4*((t-1)^3)+1 or 4*t^3;
end,
clamp = function(self, val, lower, upper)
assert(val and lower and upper, "not very useful error message here")
if lower > upper then lower, upper = upper, lower end -- swap if boundaries supplied the wrong way
return math_max(lower, math_min(upper, val))
end,
split = function(self, inputstr, sep)
if sep == nil then
sep = "%s"
end
local t={}
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
table_insert(t, str)
end
return t
end,
rgba_to_hex = function(self, r, g, b, a)
return library.bit.tohex(
(math_floor(r + 0.5) * 16777216) +
(math_floor(g + 0.5) * 65536) +
(math_floor(b + 0.5) * 256) +
(math_floor(a + 0.5))
)
end,
hex_to_rgba = function(self, hex)
local color = tonumber(hex, 16)
return
math_floor(color / 16777216) % 256,
math_floor(color / 65536) % 256,
math_floor(color / 256) % 256,
color % 256
end,
color_text = function(self, string, r, g, b, a)
local accent = "\a" .. self:rgba_to_hex(r, g, b, a)
local white = "\a" .. self:rgba_to_hex(255, 255, 255, a)
local str = ""
for i, s in ipairs(self:split(string, "$")) do
str = str .. (i % 2 ==( string:sub(1, 1) == "$" and 0 or 1) and white or accent) .. s
end
return str
end
}
visual_controller.notfy = {
rec = function(self, x, y, w, h, radius, color)
radius = math.min(x/2, y/2, radius)
local r, g, b, a = unpack(color)
renderer_rectangle(x, y + radius, w, h - radius*2, r, g, b, a)
renderer_rectangle(x + radius, y, w - radius*2, radius, r, g, b, a)
renderer_rectangle(x + radius, y + h - radius, w - radius*2, radius, r, g, b, a)
renderer_circle(x + radius, y + radius, r, g, b, a, radius, 180, 0.25)
renderer_circle(x - radius + w, y + radius, r, g, b, a, radius, 90, 0.25)
renderer_circle(x - radius + w, y - radius + h, r, g, b, a, radius, 0, 0.25)
renderer_circle(x + radius, y - radius + h, r, g, b, a, radius, -90, 0.25)
end,
rec_outline = function(self, x, y, w, h, radius, thickness, color)
radius = math.min(w/2, h/2, radius)
local r, g, b, a = unpack(color)
if radius == 1 then
renderer_rectangle(x, y, w, thickness, r, g, b, a)
renderer_rectangle(x, y + h - thickness, w , thickness, r, g, b, a)
else
renderer_rectangle(x + radius, y, w - radius*2, thickness, r, g, b, a)
renderer_rectangle(x + radius, y + h - thickness, w - radius*2, thickness, r, g, b, a)
renderer_rectangle(x, y + radius, thickness, h - radius*2, r, g, b, a)
renderer_rectangle(x + w - thickness, y + radius, thickness, h - radius*2, r, g, b, a)
renderer_circle_outline(x + radius, y + radius, r, g, b, a, radius, 180, 0.25, thickness)
renderer_circle_outline(x + radius, y + h - radius, r, g, b, a, radius, 90, 0.25, thickness)
renderer_circle_outline(x + w - radius, y + radius, r, g, b, a, radius, -90, 0.25, thickness)
renderer_circle_outline(x + w - radius, y + h - radius, r, g, b, a, radius, 0, 0.25, thickness)
end
end,
glow_module = function(self, x, y, w, h, width, rounding, accent, accent_inner)
local thickness = 1
local offset = 1
local r, g, b, a = unpack(accent)
if accent_inner then
self:rec(x , y, w, h + 1, rounding, accent_inner)
--renderer.blur(x , y, w, h)
--m_render.rec_outline(x + width*thickness - width*thickness, y + width*thickness - width*thickness, w - width*thickness*2 + width*thickness*2, h - width*thickness*2 + width*thickness*2, color(r, g, b, 255), rounding, thickness)
end
for k = 0, width do
if a * (k/width)^(1) > 5 then
local accent = {r, g, b, a * (k/width)^(2)}
self:rec_outline(x + (k - width - offset)*thickness, y + (k - width - offset) * thickness, w - (k - width - offset)*thickness*2, h + 1 - (k - width - offset)*thickness*2, rounding + thickness * (width - k + offset), thickness, accent)
end
end
end
}
visual_controller.notifications = {
anim_time = 0.45,
max_notifs = 4,
data = {},
new = function(self, timeout, string, r, g, b)
table_insert(self.data, {
time = globals_curtime(),
string = string,
color = {r, g, b, 255},
fraction = 0,
timeout = timeout
})
local time = timeout
for i = #self.data, 1, -1 do
local notif = self.data[i]
if #self.data - i + 1 > self.max_notifs and notif.time + time - globals_curtime() > 0 then
notif.time = globals_curtime() - time
end
end
end,
render = function(self)
local x, y = client_screen_size()
local to_remove = {}
local offset = 0
if not menu.prod[ tabs.visuals ]['Visuals']:get() then
return
end
if not menu.prod[ tabs.visuals ]['Logs']:get() then
return
end
if not table.find(menu.prod[tabs.visuals]['Events']:get(), 'Lua Notify') then
return
end
if not table.find(menu.prod[tabs.visuals]['Logs Style']:get(), 'Amelia') then
return
end
for i = 1, #self.data do
local notif = self.data[i]
local data = {rounding = 3, size = 4, glow = 3, time = notif.timeout}
if notif.time + data.time - globals_curtime() > 0 then
notif.fraction = visual_controller.helpers:clamp(notif.fraction + globals_frametime() / self.anim_time, 0, 1)
else
notif.fraction = visual_controller.helpers:clamp(notif.fraction - globals_frametime() / self.anim_time, 0, 1)
end
if notif.fraction <= 0 and notif.time + data.time - globals_curtime() <= 0 then
table_insert(to_remove, i)
end
local fraction = visual_controller.helpers:easeInOut(notif.fraction)
local r, g, b, a = unpack(notif.color)
local string = visual_controller.helpers:color_text(notif.string, r, g, b, a * fraction)
local strw, strh = renderer_measure_text("", string)
local strw2 = renderer_measure_text("c", " amelia » ")
local paddingx, paddingy = 7, data.size
data.rounding = math_ceil(data.rounding/10 * (strh + paddingy*2)/2)
offset = offset + (strh + paddingy*2 + math_sqrt(data.glow/10)*10 + 5) * fraction
visual_controller.notfy:glow_module(x/2 - (strw + strw2)/2 - paddingx, y - 100 - strh/2 - paddingy - offset, strw + strw2 + paddingx*2, strh + paddingy*2, data.glow, data.rounding, {r, g, b, 45 * fraction}, {20,20,20,105 * fraction})
renderer_text(x/2 + strw2/2, y - 100 - offset, 255, 255, 255, 255 * fraction, "c", 0, string..' ')
renderer_text(x/2 - strw/2, y - 100 - offset, 255, 255, 255, 255 * fraction, "c", 0, visual_controller.helpers:color_text(" $amelia » ", r, g, b, a * fraction))
end
for i = #to_remove, 1, -1 do
table_remove(self.data, to_remove[i])
end
end,
clear = function(self)
self.data = {}
end
}
visual_controller.notifications:new(4, "Current lua version: $debug$", 255, 255, 255)
anti_bruteforce.cvar = {
enable = false,
status = 'false',
reset_time = 0,
timer = 5,
last_tick_triggered = 0,
f_dist = 0,
dist = 65,
shot_time = 0,
side = 0,
last_miss = 0,
best_angle = 0,
invert = false,
can_hit_head = 0,
can_hit = 0
}
anti_bruteforce.is_teammate = function(entity)
local local_player = entity_get_local_player()
if local_player == nil then
return false
end
local local_team = entity_get_prop(local_player, "m_iTeamNum")
local entity_team = entity_get_prop(entity, "m_iTeamNum")
if local_team ~= nil and entity_team ~= nil then
return local_team == entity_team
end
return false
end
anti_bruteforce.bullet_impact = function(...)
local currentTime = globals_curtime()
if currentTime - anti_bruteforce.cvar.last_miss < 0.1 then
return
end
anti_bruteforce.cvar.last_miss = currentTime
local args = {...}
local local_pos = args[3]
local distance = math_closest_point_on_ray(...):dist(local_pos)
if distance > anti_bruteforce.cvar.dist then
return
end
anti_bruteforce.cvar.invert = not anti_bruteforce.cvar.invert
anti_bruteforce.cvar.last_tick_triggered = globals_tickcount()
anti_bruteforce.cvar.reset_time = globals_realtime() + anti_bruteforce.cvar.timer
end
anti_bruteforce.pre_bullet_impact = function(e)
if anti_bruteforce.cvar.enable then
return
end
local me = entity_helpers.local_player.pointer()
if not me or entity_get_prop(me, "m_iHealth") <= 0 then
anti_bruteforce.cvar.enable = false
return
end
local userid = e.userid
if not userid then return end
local player_object = client_userid_to_entindex(userid)
if not player_object or entity_is_dormant(player_object) or not entity_is_enemy(player_object) or anti_bruteforce.is_teammate(player_object) then
anti_bruteforce.cvar.enable = false
return
end
local eye_pos_x, eye_pos_y, eye_pos_z = client_eye_position()
local eye_position = library.vector(eye_pos_x, eye_pos_y, eye_pos_z)
if not eye_position then
anti_bruteforce.cvar.enable = false
return
end
--debug('Local eye position: '..tostring(eye_position))
local enemy_pos_x, enemy_pos_y, enemy_pos_z = entity_get_prop(player_object, "m_vecOrigin")
local eye_offset_z = entity_get_prop(player_object, "m_vecViewOffset[2]")
local eye_x, eye_y, eye_z = enemy_pos_x, enemy_pos_y, enemy_pos_z + eye_offset_z
local eye_enemy_pos = library.vector(eye_x, eye_y, eye_z)
if not eye_enemy_pos then
anti_bruteforce.cvar.enable = false
return
end
--debug('Enemy eye position: '..tostring(eye_enemy_pos))
local x = e.x or -99999
local y = e.y or -99999
local z = e.z or -99999
if x == -99999 or y == -99999 or z == -99999 then
return
end
local impact_vector = library.vector(x, y, z)
if impact_vector == nil or not impact_vector then
return
end
--debug('Impact vector position: '..tostring(impact_vector))
if anti_bruteforce.cvar.last_tick_triggered == globals_tickcount() then
anti_bruteforce.cvar.enable = false
return
end
anti_bruteforce.cvar.shot_time = globals_realtime()
local side = 'left'
if anti_bruteforce.cvar.invert then
side = 'right'
else
side = 'left'
end
local trace_result = client_trace_bullet(me, eye_pos_x, eye_pos_y, eye_pos_z, x, y, z, true)
if trace_result ~= nil then
anti_bruteforce.cvar.enable = false
return
end
local visible = client_visible(x, y, z)
if not visible then
anti_bruteforce.cvar.enable = false
return
end
local name = string_lower(entity_get_player_name(player_object))
local r,g,b = menu.prod[tabs.visuals]['Gradient 2']:get()
visual_controller.notifications:new(3, string_format('%s $triggered$ anti-bruteforce: $switched$ to $%s$ side', name, side), r,g,b)
anti_bruteforce.cvar.enable = true
anti_bruteforce.bullet_impact(impact_vector, eye_enemy_pos, eye_position)
end
anti_bruteforce.reset = function()
anti_bruteforce.cvar.enable = false
anti_bruteforce.cvar.reset_time = 0
anti_bruteforce.cvar.last_tick_triggered = 0
anti_bruteforce.cvar.fs_side = 0
anti_bruteforce.cvar.last_miss = 0
end
anti_bruteforce.work_time = function()
if anti_bruteforce.cvar.shot_time + 0.34 < globals_realtime() then
anti_bruteforce.reset()
end
end
anti_aim.is_brute = function ()
if anti_bruteforce.cvar.enable == true then
return true
else
return false
end
end
local jit_c = 1
local last_body_yaw = 0
local ground_ticks = 0
anti_aim.handle_ground = function()
local lp = entity_get_local_player()
if not lp then
return
end
local flags = entity_get_prop(lp, 'm_fFlags')
if not flags then
return
end
if bit_band(flags, 1) == 0 then
anti_aim.ground_ticks = 0
conditional_antiaims.vulnerable_ticks = 0
elseif anti_aim.ground_ticks <= 5 then
anti_aim.ground_ticks = anti_aim.ground_ticks + 1
end
end
callback.new('AA INFO', 'setup_command', function (cmd)
local lp = entity_get_local_player()
if lp == nil or not entity_is_alive(lp) then
return
end
if entity_get_prop(lp, 'm_hGroundEntity') then
ground_ticks = ground_ticks + 1
else
ground_ticks = 0
end
anti_aim.handle_ground()
if cmd.chokedcommands == 0 then
jit_c = jit_c + 1
end
end)
anti_aim.condition = function(c)
anti_aim.handle_ground()
if c.in_use == 1 then
return lua.anti_aims.states[13]
end
local lp = entity_get_local_player()
if not lp then
return
end
local m_flags = entity_get_prop(lp, 'm_fFlags')
if not m_flags then
return
end
local duck_amount = entity_get_prop(lp, 'm_flDuckAmount')
if not duck_amount then
return
end
local velocity = library.vector(entity_get_prop(lp, 'm_vecVelocity')):length()
if not velocity then
return
end
if anti_aim.is_brute() then
return lua.anti_aims.states[10]
end
if anti_aim.is_fl(c) then
return lua.anti_aims.states[12]
end
if anti_aim.is_hit(c) then
return lua.anti_aims.states[11]
end
if anti_aim.is_air(c) then
return lua.anti_aims.states[anti_aim.air_duck(c) and 6 or 5]
end
if anti_aim.is_crouching(c) then
return lua.anti_aims.states[9]
end
if anti_aim.is_falling(c) then
return lua.anti_aims.states[7]
end
if anti_aim.is_landing(c) then
return lua.anti_aims.states[8]
end
if anti_aim.is_moving(c) and not anti_aim.is_slow() then
return lua.anti_aims.states[3]
end
if anti_aim.is_slow() then
return lua.anti_aims.states[4]
end
return lua.anti_aims.states[2]
end
anti_aim.anti_backstab = function(cmd)
if not table.find(menu.prod[ tabs.anti_aim ]['Functions']:get(), lua.anti_aims.utils[3]) then
return
end
local lp = entity_get_local_player()
if not lp then
return
end
local eye = library.vector(client_eye_position())
local target = {
idx = nil,
distance = 158,
}
local enemies = entity_get_players(true)
for _, entindex in pairs(enemies) do
local weapon = entity_get_player_weapon(entindex)
if not weapon then
goto skip
end
local weapon_name = entity_get_classname(weapon)
if not weapon_name then
goto skip
end
if weapon_name ~= 'CKnife' then
goto skip
end
local origin = library.vector(entity_get_origin(entindex))
local distance = eye:dist(origin)
if distance > target.distance then
goto skip
end
target.idx = entindex
target.distance = distance
::skip::
end
if not target.idx then
return
end
local origin = library.vector(entity_get_origin(target.idx))
local delta = eye - origin
local angle = library.vector(delta:angles())
local camera = library.vector(client_camera_angles())
local yaw = normalize(angle.y - camera.y, -180, 180)
menu.override(reference.AA.angles.yaw_base, lua.builder.yaw_base[1])
menu.override(reference.AA.angles.yaw[2], yaw)
return true
end
anti_aim.handle_manuals = function(c)
for key, value in pairs(anti_aim.manual_items) do
local state, m_mode = ui_get(key.m_reference)
if state == value.state then
goto skip
end
value.state = state
if m_mode == 1 then
anti_aim.manual_yaw = state and value.yaw or anti_aim.manual_reset
goto skip
end
if m_mode == 2 then
if anti_aim.manual_yaw == value.yaw then
anti_aim.manual_yaw = anti_aim.manual_reset
else
anti_aim.manual_yaw = value.yaw
end
goto skip
end
::skip::
end
end
ovp = function()
local overlap = library.antiaim_funcs.get_overlap()
-- Проверяем, было ли значение больше 0.48 на предыдущем вызове
if helpers.prev_value_above_0_48 then
-- Если да, то возвращаем false и сбрасываем флаг prev_value_above_0_48
helpers.prev_value_above_0_48 = false
return false
elseif overlap > 0.48 then
-- Если значение больше 0.48, то запоминаем это и возвращаем true
helpers.prev_value_above_0_48 = true
return true
else
-- Иначе, возвращаем false
return false
end
end
anti_aim.preset = {
-- Stand
[ lua.anti_aims.states[ 2 ] ] = {
pitch = lua.builder.pitch[ 2 ],
yaw = lua.builder.yaw[ 7 ],
yaw_left = -12,
yaw_right = 12,
yaw_jitter = lua.builder.yaw_jitter[ 3 ],
jitter_amount = 28,
body_yaw = lua.builder.body_yaw[ 3 ],
body_yaw_amount = -19,
},
-- other
}
anti_aim.step_3 = 1
anti_aim.step_5 = 1
anti_aim.prev_yaw = 0
anti_aim.way_3 = {-1, 0, 1}
anti_aim.way_5 = {-1, -0.5, 0, 0.5, 1}--{-0.25, 0, 1, 0.5, -0.5} --{-1, -0.5, 0, 0.5, 1}--{-1, 0, -0.5, 0.5, 1} --{0, -0.5, 0.5, 1, -1} --{-1, -0.5, 0, 0.5, 1}
anti_aim.on_warmup = function ()
if not table.find(menu.prod[ tabs.anti_aim ]['Functions']:get(), lua.anti_aims.utils[1]) then
return
end
if entity_get_prop(entity_get_game_rules(), "m_bWarmupPeriod") == 1 then
menu.override(reference.AA.angles.yaw[1], lua.builder.yaw[6])
menu.override(reference.AA.angles.yaw[2], 0)
menu.override(reference.AA.angles.yaw_jitter[1], lua.builder.yaw_jitter[1])
menu.override(reference.AA.angles.body_yaw[1], lua.builder.body_yaw[4])
end
end
anti_aim.on_shot = false
anti_aim.on_aim = function ()
anti_aim.on_shot = true
end
anti_aim.on_shooting = function()
if anti_aim.on_shot == true then
return true
end
end
anti_aim.handle_preset = function(cmd)
if menu.prod[ tabs.anti_aim ]['Type']:get() ~= 'Conditional' then
return
end
local lp = entity_get_local_player()
if not lp then
return
end
local body_yaw = entity_get_prop(lp, 'm_flPoseParameter', 11)
if cmd.chokedcommands == 0 then
anti_aim.last_body_yaw = body_yaw * 120 - 60
end
local condition = callback.get('antiaim::condition', true)
if not condition then
return
end
local preset = anti_aim.preset[condition]
if not preset then
return
end
menu.override(reference.AA.angles.pitch, preset.pitch or lua.builder.pitch[4])
menu.override(reference.AA.angles.yaw_base, preset.yaw_base or lua.builder.yaw_base[2])
local yaw = preset.yaw or lua.builder.yaw[2]
local yaw_amount = preset.yaw_amount or 0
local jitter = preset.yaw_jitter or lua.builder.yaw_jitter[1]
local jitter_amount = preset.jitter_amount or 0
if yaw == lua.builder.yaw[ 7 ] then
yaw = lua.builder.yaw[ 2 ]
if anti_aim.last_body_yaw > 0 then
yaw_amount = preset.yaw_left or 0
elseif anti_aim.last_body_yaw < 0 then
yaw_amount = preset.yaw_right or 0
end
if jitter == lua.builder.yaw_jitter[3] then
jitter_amount = int(jitter_amount / 2)
if anti_aim.last_body_yaw > 0 then
yaw_amount = yaw_amount - jitter_amount
elseif anti_aim.last_body_yaw < 0 then
yaw_amount = yaw_amount + jitter_amount
end
jitter = lua.builder.yaw_jitter[1]
jitter_amount = 0
end
end
if jitter == '3 Way' then
if cmd.chokedcommands == 0 then
anti_aim.prev_yaw = jitter_amount * anti_aim.way_3[anti_aim.step_3]
anti_aim.step_3 = anti_aim.step_3 + 1
if anti_aim.step_3 > #anti_aim.way_3 then
anti_aim.step_3 = 1
end
end
jitter = 'Off'
jitter_amount = 0
yaw_amount = yaw_amount + anti_aim.prev_yaw
end
if jitter == '5 Way' then
if cmd.chokedcommands == 0 then
anti_aim.prev_yaw = jitter_amount * anti_aim.way_5[anti_aim.step_5]
anti_aim.step_5 = anti_aim.step_5 + 1
if anti_aim.step_5 > #anti_aim.way_5 then
anti_aim.step_5 = 1
end
end
jitter = 'Off'
jitter_amount = 0
yaw_amount = yaw_amount + anti_aim.prev_yaw
end
if yaw == lua.builder.yaw[4] then
local angle = library.vector(client_camera_angles())
yaw_amount = yaw_amount + angle.y
yaw_amount = normalize(yaw_amount, -180, 180)
end
menu.override(reference.AA.angles.yaw[1], yaw)
menu.override(reference.AA.angles.yaw[2], normalize(yaw_amount, -180, 180))
menu.override(reference.AA.angles.yaw_jitter[1], jitter)
menu.override(reference.AA.angles.yaw_jitter[2], jitter_amount)
local body_yaw = preset.body_yaw or lua.builder.body_yaw[2]
local freestanding_body_yaw = preset.freestanding_body_yaw or false
if body_yaw == lua.builder.body_yaw[3] then
freestanding_body_yaw = false
end
menu.override(reference.AA.angles.body_yaw[1], 'Static')
menu.override(reference.AA.angles.body_yaw[2], 0)
menu.override(reference.AA.angles.body_yaw[1], body_yaw)
menu.override(reference.AA.angles.body_yaw[2], preset.body_yaw_amount or 180)
menu.override(reference.AA.angles.freestanding_body_yaw, freestanding_body_yaw)
menu.override(reference.AA.angles.roll, preset.roll or 0)
return yaw_amount
end
local last_switch
anti_aim.builder = function(c)
if not menu.prod[ tabs.anti_aim ]['Controller']:get() or menu.prod[ tabs.anti_aim ]['Type']:get() ~= 'Conditional' then
return
end
local lp = entity_get_local_player();
if not lp then
return
end
local body_yaw = entity_get_prop(lp, 'm_flPoseParameter', 11)
if c.chokedcommands == 0 then
anti_aim.last_body_yaw = body_yaw * 120 - 60
end
local condition = callback.get('antiaim::condition', true)
if not condition then
return
end
if not menu.prod[ tabs.anti_aim ][condition .. '::override']:get() then
condition = lua.anti_aims.states[1]
end
menu.override(reference.AA.angles.pitch, menu.prod[ tabs.anti_aim ][ condition .. '::pitch' ]:get())
menu.override(reference.AA.angles.yaw_base, menu.prod[ tabs.anti_aim ][ condition .. '::yaw_base' ]:get())
local yaw = menu.prod[ tabs.anti_aim ][ condition .. '::yaw' ]:get()
local yaw_amount = menu.prod[ tabs.anti_aim ][ condition .. '::yaw_amount' ]:get()
local yaw_jitter = menu.prod[ tabs.anti_aim ][ condition .. '::yaw_jitter' ]:get()
local yaw_jitter_amt = menu.prod[ tabs.anti_aim ][ condition .. '::jitter_amount' ]:get()
local yaw_jitter_amt2 = menu.prod[ tabs.anti_aim ][ condition .. '::jitter_amount2' ]:get()
local yaw_jitter_type = menu.prod[ tabs.anti_aim ][ condition .. '::yaw_jitter_type' ]:get()
if yaw_jitter_type == 'Random' then
if jit_c % 2 == 0 or last_switch == nil then
last_switch = math_random( menu.prod[ tabs.anti_aim ][ condition .. '::jitter_amount' ]:get(), menu.prod[ tabs.anti_aim ][ condition .. '::jitter_amount2' ]:get())
end
yaw_jitter_amt = last_switch
elseif yaw_jitter_type == 'Switch Min/Max' then
yaw_jitter_amt = jit_c % 4 > 1 and menu.prod[ tabs.anti_aim ][ condition .. '::jitter_amount' ]:get() or yaw_jitter_amt2
else
yaw_jitter_amt = menu.prod[ tabs.anti_aim ][ condition .. '::jitter_amount' ]:get()
end
local y_l = menu.prod[ tabs.anti_aim ][ condition .. '::yaw_left' ]:get()
local y_r = menu.prod[ tabs.anti_aim ][ condition .. '::yaw_right' ]:get()
if anti_aim.on_shooting() then
if (menu.prod[tabs.anti_aim][condition .. '::os_cond']:get() == 'Default') or not anti_aim.on_shooting() then
goto skip_check
elseif (menu.prod[tabs.anti_aim][condition .. '::os_cond']:get() == 'Switch') then
menu.override(reference.AA.angles.pitch, lua.builder.pitch[6])
menu.override(reference.AA.angles.body_yaw[1], lua.builder.body_yaw[4])
elseif (menu.prod[tabs.anti_aim][condition .. '::os_cond']:get() == 'Opposite') then
menu.override(reference.AA.angles.pitch, lua.builder.pitch[5])
menu.override(reference.AA.angles.body_yaw[1], lua.builder.body_yaw[2])
elseif (menu.prod[tabs.anti_aim][condition .. '::os_cond']:get() == 'Randomize') then
menu.override(reference.AA.angles.pitch, lua.builder.pitch[6])
menu.override(reference.AA.angles.body_yaw[1], lua.builder.body_yaw[3])
end
anti_aim.on_shot = false
::skip_check::
end
if table.find(menu.prod[tabs.anti_aim][condition .. '::yaw_additions']:get(), 'Based On Distance') then
local players = entity_get_players(true)
local lx, ly, lz = entity_get_prop(entity_get_local_player(), "m_vecOrigin")
local total_distance = 0
for i = 1, #players do
local x, y, z = entity_get_prop(players[i], "m_vecOrigin")
local distance = math_get_distance(lx, ly, lz, x, y, z)
total_distance = total_distance + distance
end
local dist = math_floor(total_distance)
if dist > 350 then
goto skip_check
end
if dist ~= 0 then
yaw_amount = int(yaw_amount / dist)
--print(dist)
end
::skip_check::
end
if table.find(menu.prod[tabs.anti_aim][condition .. '::yaw_additions']:get(), 'Avoid Overlap') then
if not ovp then
goto skip_check
end
if table.find(menu.prod[tabs.anti_aim][condition .. '::avoid_overlap']:get(), 'Fake Pitch') then
menu.override(reference.AA.angles.pitch, ovp and lua.builder.pitch[5])
end
if table.find(menu.prod[tabs.anti_aim][condition .. '::avoid_overlap']:get(), 'Fake Yaw') then
yaw_amount = 0
menu.override(reference.AA.angles.yaw[2], ovp and yaw_amount)
end
if table.find(menu.prod[tabs.anti_aim][condition .. '::avoid_overlap']:get(), 'Fake Jitter') then
yaw_jitter_amt = 0
yaw_jitter = 'Off'
menu.override(reference.AA.angles.yaw_jitter[1], ovp and yaw_jitter)
menu.override(reference.AA.angles.yaw_jitter[2], ovp and yaw_jitter_amt)
end
if table.find(menu.prod[tabs.anti_aim][condition .. '::avoid_overlap']:get(), 'Fake Body Yaw') then
menu.override(reference.AA.angles.body_yaw[1], ovp and lua.builder.body_yaw[1])
end
if table.find(menu.prod[tabs.anti_aim][condition .. '::avoid_overlap']:get(), 'Fake Body Angle') then
menu.override(reference.AA.angles.body_yaw[2], ovp and 0)
end
::skip_check::
end
local currentTick = globals_tickcount()
if yaw == lua.builder.yaw[ 7 ] then
yaw = lua.builder.yaw[ 2 ]
yaw_amount = 0
if table.find(menu.prod[ tabs.anti_aim ][condition .. '::yaw_additions']:get(), 'Based On Tick') then
if anti_aim.last_body_yaw > 0 then
yaw_amount = (currentTick % toticks(menu.prod[ tabs.anti_aim ][ condition .. '::yaw_tick_slider' ]:get())) == 1 and y_l or y_r
elseif anti_aim.last_body_yaw < 0 then
yaw_amount = (currentTick % toticks(menu.prod[ tabs.anti_aim ][ condition .. '::yaw_tick_slider' ]:get())) == 1 and y_r or y_l
end
else
if anti_aim.last_body_yaw > 0 then
yaw_amount = menu.prod[ tabs.anti_aim ][ condition .. '::yaw_left' ]:get()
elseif anti_aim.last_body_yaw < 0 then
yaw_amount = menu.prod[ tabs.anti_aim ][ condition .. '::yaw_right' ]:get()
end
end
if table.find(menu.prod[tabs.anti_aim][condition .. '::yaw_additions']:get(), 'Randomize') then
local rand_integr = menu.prod[ tabs.anti_aim ][ condition .. '::yaw_rand_slider' ]:get()
if (menu.prod[tabs.anti_aim][condition .. '::yaw_randomize']:get() == 'Default') then
yaw_amount = math_random(yaw_amount, rand_integr)
elseif (menu.prod[tabs.anti_aim][condition .. '::yaw_randomize']:get() == 'Flip') then
yaw_amount = client_random_int(yaw_amount, rand_integr)
end
end
if yaw_jitter == 'Center' then
yaw_jitter_amt = int(yaw_jitter_amt / 2)
if anti_aim.last_body_yaw > 0 then
yaw_amount = yaw_amount - yaw_jitter_amt
elseif anti_aim.last_body_yaw < 0 then
yaw_amount = yaw_amount + yaw_jitter_amt
end
yaw_jitter = 'Off'
yaw_jitter_amt = 0
end
end
if yaw_jitter == '3 Way' then
if c.chokedcommands == 0 then
anti_aim.prev_yaw = yaw_jitter_amt * anti_aim.way_3[anti_aim.step_3]
anti_aim.step_3 = anti_aim.step_3 + 1
if anti_aim.step_3 > #anti_aim.way_3 then
anti_aim.step_3 = 1
end
end
yaw_jitter = 'Off'
yaw_jitter_amt = 0
yaw_amount = yaw_amount + anti_aim.prev_yaw
end
if yaw_jitter == '5 Way' then
if c.chokedcommands == 0 then
anti_aim.prev_yaw = yaw_jitter_amt * anti_aim.way_5[anti_aim.step_5]
anti_aim.step_5 = anti_aim.step_5 + 1
if anti_aim.step_5 > #anti_aim.way_5 then
anti_aim.step_5 = 1
end
end
yaw_jitter = 'Off'
yaw_jitter_amt = 0
yaw_amount = yaw_amount + anti_aim.prev_yaw
end
menu.override(reference.AA.angles.yaw[1], yaw)
menu.override(reference.AA.angles.yaw[2], normalize(yaw_amount, -180, 180))
menu.override(reference.AA.angles.yaw_jitter[1], yaw_jitter)
menu.override(reference.AA.angles.yaw_jitter[2], yaw_jitter_amt)
local body_yaw = menu.prod[ tabs.anti_aim ][ condition .. '::body_yaw']:get()
local freestanding_body_yaw = menu.prod[ tabs.anti_aim ][ condition .. '::freestanding_body_yaw']:get()
if body_yaw == lua.builder.body_yaw[3] then
freestanding_body_yaw = false
end
ui_set(reference.AA.angles.body_yaw[1], 'Static')
ui_set(reference.AA.angles.body_yaw[2], 0)
menu.override(reference.AA.angles.body_yaw[1], body_yaw)
menu.override(reference.AA.angles.body_yaw[2], menu.prod[ tabs.anti_aim ][ condition .. '::body_yaw_amount']:get())
menu.override(reference.AA.angles.freestanding_body_yaw, freestanding_body_yaw)
menu.override(reference.AA.angles.roll, 0)
return yaw_amount
end
anti_aim.using = function(cmd)
if not menu.prod[ tabs.anti_aim ]['Controller']:get() then
return
end
if cmd.in_use == 0 then
return
end
local lp = entity_get_local_player()
if not lp then
return
end
local crouch = entity_get_prop(lp, 'm_flDuckAmount') == 1
local team = entity_get_prop(lp, 'm_iTeamNum')
if not team then
return
end
if team == lua.builder.team.t then
if entity_get_prop(lp, 'm_bInBombZone') == 0 then
goto skip_check
end
local m_weapon = entity_get_player_weapon(lp)
if not m_weapon then
goto skip_check
end
local name = entity_get_classname(m_weapon)
if name == 'CC4' then
return
end
::skip_check::
elseif team == lua.builder.team.ct then
local planted_c4 = entity_get_all('CPlantedC4')
if not planted_c4 then
goto skip_check
end
local origin = library.vector(entity_get_origin(lp))
if not origin then
goto skip_check
end
local max_distance = crouch and 42.5 or 60
for _, entity in pairs(planted_c4) do
local position = library.vector(entity_get_origin(entity))
if not position then
goto skip_entity
end
local distance = origin:dist(position)
if distance < max_distance then
return
end
::skip_entity::
end
::skip_check::
end
local camera = library.vector(client_camera_angles())
local forward = library.vector(angle_to_forward(camera:unpack()))
local eye = library.vector(client_eye_position())
local _end = eye + forward * 128
local fraction, entindex = client_trace_line(lp, eye.x, eye.y, eye.z, _end.x, _end.y, _end.z)
if fraction ~= 1 then
if entindex == -1 then
goto skip_check
end
local name = entity_get_classname(entindex)
if name == 'CWorld' then
goto skip_check
end
if name == 'CFuncBrush' then
goto skip_check
end
if name == 'CCSPlayer' then
goto skip_check
end
if name == 'CHostage' then
local hostage_origin = library.vector(entity_get_origin(entindex))
local distance = eye:dist(hostage_origin)
local max_distance = crouch and 76 or 84
if distance < max_distance then
return
end
goto skip_check
end
if true then
return
end
::skip_check::
end
local interface = callback.get('antiaim::condition')
if interface then
interface.recent = {
lua.anti_aims.states[13]
}
end
if not menu.prod[ tabs.anti_aim ]['Type']:get() == 'Conditional' then
menu.override(reference.AA.angles.pitch, lua.builder.pitch[1])
menu.override(reference.AA.angles.yaw_base, lua.builder.yaw_base[1])
menu.override(reference.AA.angles.yaw[1], lua.builder.yaw[2])
menu.override(reference.AA.angles.yaw[2], 180)
end
cmd.in_use = false
return true
end
anti_aim.defensive_antiaim = function(cmd)
if not menu.prod[ tabs.anti_aim ]['Controller']:get() or
not table.find(menu.prod[ tabs.anti_aim ]['Functions']:get(), 'Defensive Anti-Aim') then
return
end
local condition = callback.get('antiaim::condition', true)
local side = anti_aim.last_body_yaw
local camera = get_player_movement_direction ()
local is_qp = ui_get (reference.RAGE.other.quick_peek_assist[1]) and ui_get (reference.RAGE.other.quick_peek_assist[2])
if condition == 'Moving' and is_qp then
if camera == -1 and side > 0 then
menu.override(reference.AA.angles.pitch, lua.builder.pitch [ 6 ])
menu.override(reference.AA.angles.yaw_base, lua.builder.yaw_base [ 1 ])
menu.override(reference.AA.angles.yaw[1], lua.builder.yaw [ 5 ])
menu.override(reference.AA.angles.yaw[2], -90)
menu.override(reference.AA.angles.yaw_jitter[1], lua.builder.yaw_jitter[ 1 ])
menu.override(reference.AA.angles.yaw_jitter[2], 0)
menu.override(reference.AA.angles.body_yaw[1], lua.builder.body_yaw[ 4 ])
menu.override(reference.AA.angles.body_yaw[2], 180)
elseif camera == 1 and side < 0 then
menu.override(reference.AA.angles.pitch, lua.builder.pitch [ 6 ])
menu.override(reference.AA.angles.yaw_base, lua.builder.yaw_base [ 1 ])
menu.override(reference.AA.angles.yaw[1], lua.builder.yaw [ 5 ])
menu.override(reference.AA.angles.yaw[2], 90)
menu.override(reference.AA.angles.yaw_jitter[1], lua.builder.yaw_jitter[ 1 ])
menu.override(reference.AA.angles.yaw_jitter[2], 0)
menu.override(reference.AA.angles.body_yaw[1], lua.builder.body_yaw[ 4 ])
menu.override(reference.AA.angles.body_yaw[2], -180)
end
elseif condition == 'In Air' or condition == 'In Air & Crouching' then
if camera == -1 and side > 0 then
menu.override(reference.AA.angles.pitch, lua.builder.pitch [ 6 ])
menu.override(reference.AA.angles.yaw_base, lua.builder.yaw_base [ 2 ])
menu.override(reference.AA.angles.yaw[1], lua.builder.yaw [ 5 ])
menu.override(reference.AA.angles.yaw[2], -90)
menu.override(reference.AA.angles.yaw_jitter[1], lua.builder.yaw_jitter[ 4 ])
menu.override(reference.AA.angles.yaw_jitter[2], 32)
menu.override(reference.AA.angles.body_yaw[1], lua.builder.body_yaw[ 4 ])
menu.override(reference.AA.angles.body_yaw[2], 9)
elseif camera == 1 and side < 0 then
menu.override(reference.AA.angles.pitch, lua.builder.pitch [ 6 ])
menu.override(reference.AA.angles.yaw_base, lua.builder.yaw_base [ 2 ])
menu.override(reference.AA.angles.yaw[1], lua.builder.yaw [ 5 ])
menu.override(reference.AA.angles.yaw[2], 90)
menu.override(reference.AA.angles.yaw_jitter[1], lua.builder.yaw_jitter[ 4 ])
menu.override(reference.AA.angles.yaw_jitter[2], 32)
menu.override(reference.AA.angles.body_yaw[1], lua.builder.body_yaw[ 4 ])
menu.override(reference.AA.angles.body_yaw[2], -9)
elseif camera == 0 or side == 0 then
menu.override(reference.AA.angles.pitch, lua.builder.pitch [ 6 ])
menu.override(reference.AA.angles.yaw_base, lua.builder.yaw_base [ 2 ])
menu.override(reference.AA.angles.yaw[1], lua.builder.yaw [ 5 ])
menu.override(reference.AA.angles.yaw[2], 0)
menu.override(reference.AA.angles.yaw_jitter[1], lua.builder.yaw_jitter[ 4 ])
menu.override(reference.AA.angles.yaw_jitter[2], 32)
menu.override(reference.AA.angles.body_yaw[1], lua.builder.body_yaw[ 4 ])
menu.override(reference.AA.angles.body_yaw[2], 34)
end
elseif condition == 'Crouching' then
if camera == 0 or side == 0 then
menu.override(reference.AA.angles.pitch, lua.builder.pitch [ 6 ])
menu.override(reference.AA.angles.yaw_base, lua.builder.yaw_base [ 1 ])
menu.override(reference.AA.angles.yaw[1], lua.builder.yaw [ 5 ])
menu.override(reference.AA.angles.yaw[2], 0)
menu.override(reference.AA.angles.yaw_jitter[1], lua.builder.yaw_jitter[ 4 ])
menu.override(reference.AA.angles.yaw_jitter[2], 32)
menu.override(reference.AA.angles.body_yaw[1], lua.builder.body_yaw[ 4 ])
menu.override(reference.AA.angles.body_yaw[2], 34)
end
else
goto skip_check
end
::skip_check::
end
anti_aim.dt_charge = function()
local target = entity_get_local_player()
if not target then
return
end
local weapon = entity_get_player_weapon(target)
if target == nil or weapon == nil then
return false
end
if get_curtime(16) < entity_get_prop(target, 'm_flNextAttack') then
return false
end
if get_curtime(0) < entity_get_prop(weapon, 'm_flNextPrimaryAttack') then
return false
end
return true
end
helpers.is_nade = function()
local local_player = entity_get_local_player()
local weapon = entity_get_player_weapon(local_player)
if weapon ~= nil then
local weapon_class = entity_get_classname(weapon)
local nades = {'CIncendiaryGrenade', 'CMolotovGrenade', 'CHEGrenade', 'CSmokeGrenade', 'CFlashbang', 'CDecoyGrenade'}
for _, nade in ipairs(nades) do
if weapon_class == nade then
return true
end
end
end
return false
end
helpers.is_heavy_pistol = function()
local local_player = entity_get_local_player()
local weapon = entity_get_player_weapon(local_player)
if weapon ~= nil then
local weapon_class = entity_get_classname(weapon)
if weapon_class == "CDEagle" then
return true
end
end
return false
end
helpers.is_knife = function()
local local_player = entity_get_local_player()
local weapon = entity_get_player_weapon(local_player)
if weapon ~= nil then
local weapon_class = entity_get_classname(weapon)
if weapon_class == "CKnife" then
return true
end
end
return false
end
helpers.is_taser = function()
local local_player = entity_get_local_player()
local weapon = entity_get_player_weapon(local_player)
if weapon ~= nil then
local weapon_class = entity_get_classname(weapon)
if weapon_class == "CWeaponTaser" then
return true
end
end
return false
end
anti_aim.safe_head = function ()
local is_knife = helpers.is_knife ()
local get_ze_us = helpers.is_taser ()
if not menu.prod[ tabs.anti_aim ]['Controller']:get() or
not table.find(menu.prod[ tabs.anti_aim ]['Functions']:get(), 'Safe Head') then
return
end
local is_dt_charge = anti_aim.dt_charge ()
local condition = callback.get('antiaim::condition', true)
if condition == 'In Air' or condition == 'In Air & Crouching' then
if is_knife or not is_dt_charge or get_ze_us then
menu.override(reference.AA.angles.pitch, lua.builder.pitch [ 5 ])
menu.override(reference.AA.angles.yaw_base, lua.builder.yaw_base [ 2 ])
menu.override(reference.AA.angles.yaw[1], lua.builder.yaw [ 2 ])
menu.override(reference.AA.angles.yaw[2], 9)
menu.override(reference.AA.angles.yaw_jitter[1], lua.builder.yaw_jitter[ 1 ])
menu.override(reference.AA.angles.yaw_jitter[2], 0)
menu.override(reference.AA.angles.body_yaw[1], lua.builder.body_yaw[ 2 ])
menu.override(reference.AA.angles.body_yaw[2], -9)
return true
end
end
end
anti_aim.disable_fl_on_exploits = function (c)
--#region
local switch = true
local is_os = ui_get(reference.AA.other.on_shot_antiaim[1]) and ui_get(reference.AA.other.on_shot_antiaim[2])
local is_dt = ui_get(reference.RAGE.aimbot.double_tap[1]) and ui_get(reference.RAGE.aimbot.double_tap[2])
local fakelag = reference.AA.fakelag.enabled
if anti_aim.is_standing(c) then
switch = false
elseif is_dt and anti_aim.dt_charge() then
switch = false
elseif is_os then
switch = false
elseif is_dt and helpers.is_heavy_pistol() then
switch = false
elseif is_dt and helpers.is_knife() then
switch = false
elseif helpers.is_nade() then
switch = false
else
switch = true
end
menu.override(fakelag, switch)
end
anti_aim.disable_stocks = function ()
menu.override(reference.AA.angles.yaw[1], lua.builder.yaw[6])
menu.override(reference.AA.angles.yaw[2], 0)
menu.override(reference.AA.angles.yaw_jitter[1], lua.builder.yaw_jitter[1])
menu.override(reference.AA.angles.body_yaw[1], lua.builder.body_yaw[4])
end
anti_aim.main = function(c)
if not menu.prod[ tabs.anti_aim ]['Controller']:get() then
return
end
local manual_yaw = anti_aim.manual_degree[anti_aim.manual_yaw]
local modified_yaw = 0
modified_yaw = modified_yaw + (anti_aim.handle_preset(c) or 0)
modified_yaw = modified_yaw + (anti_aim.builder(c) or 0)
local is_antibackstabing = anti_aim.anti_backstab(c)
if table.find(menu.prod[ tabs.anti_aim ]['Functions']:get(), lua.anti_aims.utils[2]) then
anti_aim.disable_fl_on_exploits(c)
end
local using = anti_aim.using(c)
if using then
return
end
local s_h = anti_aim.safe_head ()
if not manual_yaw then
if not is_antibackstabing then
anti_aim.safe_head ();
if not s_h then
anti_aim.defensive_antiaim(c);
end
end
if ui_get(menu.prod[ tabs.keybinds ]['Freestanding Bound'].m_reference) then
if not ui_get(menu.prod[ tabs.keybinds ]['Freestanding Bound'].m_reference) then
goto skip_check
end
--fsUTIL
if table.find(menu.prod[ tabs.anti_aim ]['Static On Manuals']:get(), 'Freestanding') then
menu.override(reference.AA.angles.yaw_jitter[1], lua.builder.yaw_jitter[1])
menu.override(reference.AA.angles.body_yaw[1], lua.builder.body_yaw[4])
end
menu.override(reference.AA.angles.freestanding[1], true);
menu.override(reference.AA.angles.freestanding[2], lua.builder.hotkey_states[0])
::skip_check::
end
if table.find(menu.prod[ tabs.anti_aim ]['Functions']:get(), 'Edge Yaw on Ctrl') then
if not table.find(menu.prod[ tabs.anti_aim ]['Functions']:get(), 'Edge Yaw on Ctrl') then
goto skip_check
end
local condition = callback.get('antiaim::condition', true)
local state = false
if condition == 'Crouching' then
state = true
end
menu.override(reference.AA.angles.edge_yaw, state)
::skip_check::
end
return
end
if table.find(menu.prod[ tabs.anti_aim ]['Static On Manuals']:get(), 'Manual Yaw Base') then
menu.override(reference.AA.angles.yaw_jitter[1], lua.builder.yaw_jitter[1])
menu.override(reference.AA.angles.body_yaw[1], lua.builder.body_yaw[4])
else
manual_yaw = manual_yaw + modified_yaw
end
menu.override(reference.AA.angles.yaw_base, lua.builder.yaw_base[1])
menu.override(reference.AA.angles.yaw[1], lua.builder.yaw[2])
menu.override(reference.AA.angles.yaw[2], normalize(manual_yaw, -180, 180))
end
anti_aim.on_death = function (e)
if client_userid_to_entindex(e.userid) ~= entity_get_local_player() then
return
end
anti_aim.last_body_yaw = 0
anti_bruteforce.reset()
end
anti_aim.air_defensive = function (cmd)
if not menu.prod[ tabs.anti_aim ]['Controller']:get() then
return
end
local condition = callback.get('antiaim::condition', true)
if not condition then
return
end
local enabled = table.find(menu.prod[ tabs.anti_aim ]['Functions']:get(), 'Force Break LC in Air')
if condition == 'In Air' or condition == 'In Air & Crouching' or condition == 'Is Landing' or condition == 'Crouching' or condition == 'On Hittable' then
cmd.force_defensive = enabled and 1 or 0
end
end
local start = screen / 2 + library.vector(0, 15)
local dmg_drag = g_drag.new(start.x + 10, start.y - 40, 28, 16)
local engine_client = ffi_cast(ffi_typeof('void***'), client_create_interface('engine.dll', 'VEngineClient014'))
local console_is_visible = ffi_cast(ffi_typeof('bool(__thiscall*)(void*)'), engine_client[0][11])
local state_anim = 0
local dt_anim = 0
local damage_anim = 0
local manual_anim_right = 0
local manual_anim_left = 0
local anim = {
damage_hovered = 0,
wtr_hovered = 0,
n = 0
}
do
local elements = {
{'DMG', reference.RAGE.aimbot.min_damage_override[1] and reference.RAGE.aimbot.min_damage_override[2]},
{'OSAA', reference.AA.other.on_shot_antiaim[2]},
{'FS', menu.prod[ tabs.keybinds ]['Freestanding Bound'].m_reference},
{'BAIM', reference.RAGE.aimbot.force_body_aim},
{'SAFE', reference.RAGE.aimbot.force_safe_point},
{'DUCK', reference.RAGE.other.duck_peek_assist}
}
local txt_sizes = { }
local got_sizes = false
visual_controller.inidcators = function()
local lp = entity_get_local_player()
if not lp then
return
end
if not menu.prod[ tabs.visuals ]['Visuals']:get() then
return
end
local valid = lp ~= nil and entity_is_alive(lp)
anim.pulse = math_min(255, 255 - animations:process("Pulse", not (globals_realtime() * 2.5 % 3 >= 1)) * 205) / 255
anim.global_alpha = animations:process('Global', menu.prod[tabs.visuals]['Crosshair Indicators']:get() and valid)
local is_nade = helpers.is_nade()
local key_state_0x09 = client.key_state(0x09) or console_is_visible(engine_client)
anim.n = lerp_st(anim.n, is_nade and (is_nade and 55 or 255) or (key_state_0x09 and (key_state_0x09 and 0 or 255) or 255), globals_frametime() * 8)
if anim.global_alpha < 0.01 or lp == nil then
return
end
if not got_sizes then
for i, v in pairs(elements) do
txt_sizes[v[1]] = library.vector(renderer_measure_text('-', v[1]))
end
got_sizes = true
end
anim.doubletap = animations:process('Double Tap', anti_aim.dt_charge())
local main_color = { menu.prod[tabs.visuals]['Gradient 2']:get() }
local back_color = { menu.prod[tabs.visuals]['Gradient 1']:get() }
local dt_r, dt_g, dt_b = lerp({ 255, 25, 25, 255 }, { 225, 225, 225, 255 }, anim.doubletap)
local condition = callback.get('antiaim::condition', true) or 'UNKNOWN'
anim.cyz = animations:process('swapper cond', condition, 8)
local cond_sz = library.vector(renderer_measure_text('-', '-'..condition:upper()..'-')) do
local pixels = cond_sz.x + 0.40;
state_anim = animations:lerp(state_anim, pixels, 0.075);
if pixels < state_anim then
state_anim = anim.cyz;
end
end
anim.scope = animations:process('Scope', (entity_get_prop(lp, 'm_bIsScoped') == 1), 5)
local add_x = 34 * anim.scope
local cond_centered = (-math_ceil(state_anim) / 2) * (1 - anim.scope) + (5 * anim.scope)
anim.default = animations:process('Default', menu.prod[tabs.visuals]['Crosshair Indicators']:get() == 'Legacy')
anim.fade = animations:process('Fade', menu.prod[tabs.visuals]['Crosshair Indicators']:get() == 'Gradient')
local D_text = 'CHARGING'
local D_text_len = #D_text + 1
local D_light = ''
local D_pos = start + library.vector(add_x, 5)
for idx = 1, D_text_len do
local letter = D_text:sub(idx, idx)
local m_factor = (idx - 1) / D_text_len
local m_breathe = breathe( m_factor * 1.5, 1.5)
local r, g, b, a = lerp({ 225, 225, 225, anim.n }, { 255, 0, 0, anim.n }, m_breathe)
a = anim.n * anim.global_alpha
local m_hex_color = hex(r, g, b, a)
D_light = D_light .. (m_hex_color .. letter)
end
-- BULL IT ***** CODE MADE
local dt_s = 'BREAK'
local d_col = { 255, 255, 255 }
local cya_dt = reference.RAGE.aimbot.double_tap[2]
local is_fd = ui_get(reference.RAGE.other.duck_peek_assist)
local cya_y_ofs = 0
local d_pos = 0
local dt_pos = {renderer_measure_text("-","DT")}
local recharge = ui_get(cya_dt) and (library.antiaim_funcs.get_tickbase_shifting() == 0)
local is_dt_charged = ui_get(cya_dt) and anti_aim.dt_charge() and not is_fd
local is_dt_charging = ui_get(cya_dt) and recharge and not anti_aim.dt_charge() and not is_fd
local is_waiting = ui_get(cya_dt) and is_fd
local cya_dt_released = ui_get(cya_dt)
if is_dt_charged then
dt_s = 'READY'
elseif is_dt_charging then
dt_s = D_light
d_pos = -6
elseif is_waiting then
dt_s = 'WAITING'
d_pos = -3
d_col = { 255, 97, 97 }
elseif cya_dt_released then
dt_s = 'ACTIVE'
d_col = { 150, 200, 59 }
end
if cya_dt_released then
cya_y_ofs = cya_y_ofs + 27
else
cya_y_ofs = cya_y_ofs + 17
end
anim.rat = animations:process('release', (is_dt_charged or is_dt_charging or is_waiting or cya_dt_released), 6)
local dt_vect = library.vector(renderer_measure_text('-', dt_s)) do
local d_pix = dt_vect.x + 0.40;
dt_anim = animations:lerp(dt_anim, d_pix, 0.095)
if d_pix < dt_anim then
dt_anim = anim.rat;
end
end
local d_colorefuled = {
r = math_lerp(255, d_col[1], 6),
g = math_lerp(255, d_col[2], 6),
b = math_lerp(255, d_col[3], 6),
a = math_lerp(255 * anim.n, anim.n, 6)
}
local dt_centered = (-math_ceil(dt_anim) / 2) * (0 - anim.scope) + (9 * anim.scope)
local dt_p_offset = (d_pos - anim.scope) + (4 * anim.scope)
if anim.default > 0.01 then
renderer_text(start.x - 29 + add_x, start.y + 1, 225, 225, 225, anim.n * anim.default * anim.global_alpha, '-', nil, 'AMELIA')
renderer_text(start.x - 1 + add_x, start.y + 1, back_color[1], back_color[2],back_color[3], anim.n * anim.default * anim.pulse * anim.global_alpha, '-', nil, 'ALPHA')
if anim.cyz ~= 0 then
renderer_text(start.x + cond_centered, start.y + 9, 225, 225, 225, anim.n * anim.default * anim.global_alpha * anim.cyz, '-', math_ceil(state_anim) * anim.cyz, '-'..condition:upper()..'-')
end
if anim.rat ~= 0 then
renderer_text(start.x - 19 + dt_centered + dt_p_offset, start.y + 18, 225, 225, 225, anim.n * anim.default * anim.global_alpha * anim.rat, '-', nil, 'DT')
renderer_text(start.x - 19 + dt_pos[1] + 1 + dt_centered + dt_p_offset, start.y + 18, d_colorefuled.r * anim.rat, d_colorefuled.g * anim.rat, d_colorefuled.b * anim.rat, d_colorefuled.a * anim.default * anim.global_alpha * anim.rat, '-', math_ceil(dt_anim) * anim.rat, dt_s)
end
end
local offset = 0
if anim.fade > 0.01 then
local text = 'amelia alpha'
local text_len = #text + 1
local light = ''
local pos = start + library.vector(add_x, 5)
add_x = 5 * anim.scope
for idx = 1, text_len do
local letter = text:sub(idx, idx)
local m_factor = (idx - 1) / text_len
local m_breathe = breathe(1 * m_factor * 1.5, 1.5)
local r, g, b, a = lerp({ main_color[1], main_color[2], main_color[3], anim.n }, { back_color[1], back_color[2], back_color[3], anim.n }, m_breathe)
a = anim.n * anim.fade * anim.global_alpha
local m_hex_color = hex(r, g, b, a)
light = light .. (m_hex_color .. letter)
end
local measure = library.vector(renderer_measure_text('c', light))
renderer_text(pos.x + add_x, pos.y, 255, 255, 255, anim.n * anim.fade * anim.global_alpha, 'cb-', nil, light)
if anim.cyz ~= 0 then
renderer_text(start.x + cond_centered, start.y + 9, 225, 225, 225, anim.n * anim.fade * anim.global_alpha * anim.cyz, '-', math_ceil(state_anim) * anim.cyz, '-'..condition:upper()..'-')
end
if anim.rat ~= 0 then
renderer_text(start.x - 19 + dt_centered + dt_p_offset, start.y + 18, 225, 225, 225, anim.n * anim.fade * anim.global_alpha * anim.rat, '-', nil, 'DT')
renderer_text(start.x - 19 + dt_pos[1] + 1 + dt_centered + dt_p_offset, start.y + 18, d_colorefuled.r * anim.rat, d_colorefuled.g * anim.rat, d_colorefuled.b * anim.rat, d_colorefuled.a * anim.fade * anim.global_alpha * anim.rat, '-', math_ceil(dt_anim) * anim.rat, dt_s)
end
pos = pos + library.vector(0, measure.y * 0.85)
end
for _, element in ipairs(elements) do
local bind_anim = animations:process(('Default_%s'):format(_), ui_get(element[2]), 6)
local b_r, b_g, b_b, b_a = 225, 225, 225, anim.n * anim.global_alpha * bind_anim
if bind_anim ~= 0 then
local w_siz = 0
--[[ if element[1] == 'DT' then
b_r, b_g, b_b, b_a = dt_r, dt_g, dt_b, 255 * anim.global_alpha * bind_anim
end ]]
local size_cur = txt_sizes[element[1]]
local center_x = (-size_cur.x / 2) * (1.3 - anim.scope) + (7 * anim.scope)
if anim.fade > 0.01 or anim.default > 0.01 then
renderer_text(start.x + center_x + w_siz, start.y + cya_y_ofs + offset, b_r, b_g, b_b, b_a, '-', nil, element[1])
end
offset = offset + 8 * bind_anim
end
end
end
end
local ct = screen / 2 - library.vector(0, 1)
local r, g, b = 0, 0, 0
local r_1, g_1, b_1 = 0, 0, 0
anim.zal, anim.zal1 = 0,0
anim.m1, anim.m2, anim.m3 = 0,0,0
anim.m4, anim.m5, anim.m6 = 0,0,0
visual_controller.manual = function ()
local lp = entity_get_local_player()
if not lp then
return
end
if not menu.prod[ tabs.visuals ]['Visuals']:get() then
return
end
local valid = lp ~= nil and entity_is_alive(lp)
anim.pulse1 = math_min(255, 255 - animations:process("Pulsez", not (globals_realtime() * 2.5 % 3 >= 1)) * 205) / 255
anim.global_alpha1 = animations:process('Globalz', menu.prod[tabs.visuals]['Anti Aim Arrow']:get() and valid)
if anim.global_alpha1 < 0.01 or lp == nil then
return
end
local main_color = { menu.prod[tabs.visuals]['Arrow Color 1']:get() }
local back_color = { menu.prod[tabs.visuals]['Arrow Color 2']:get() }
anim.scope1 = animations:process('Scopez', (entity_get_prop(lp, 'm_bIsScoped') == 1), 5)
local add_x = 34 * anim.scope1
anim.default1 = animations:process('Defaultz', menu.prod[tabs.visuals]['Anti Aim Arrow']:get() == 'Simple')
anim.fade1 = animations:process('Fadez', menu.prod[tabs.visuals]['Anti Aim Arrow']:get() == 'Legacy')
anim.modern1 = animations:process('Modernz', menu.prod[tabs.visuals]['Anti Aim Arrow']:get() == 'Modern')
local manual_left = animations:process('manual::left', anti_aim.manual_yaw == 1)
local manual_right = animations:process('manual::right', anti_aim.manual_yaw == 2)
local manual_forward = animations:process('manual::forward', anti_aim.manual_yaw == 3)
local p1_offset = get_player_movement_direction()
local manual_fstand = animations:process('manual::fstand', ui_get(menu.prod[ tabs.keybinds ]['Freestanding Bound'].m_reference) and anti_aim.manual_yaw == 0)
local fstand_right_direction = anti_aim.last_body_yaw > 0
local fstand_left_direction = anti_aim.last_body_yaw < 0
r = animations:lerp(r, anti_aim.last_body_yaw > 0 and main_color[1] or 35, 0.015)
g = animations:lerp(g, anti_aim.last_body_yaw > 0 and main_color[2] or 35, 0.015)
b = animations:lerp(b, anti_aim.last_body_yaw > 0 and main_color[3] or 35, 0.015)
r_1 = animations:lerp(r_1, anti_aim.last_body_yaw < 0 and main_color[1] or 35, 0.015)
g_1 = animations:lerp(g_1, anti_aim.last_body_yaw < 0 and main_color[2] or 35, 0.015)
b_1 = animations:lerp(b_1, anti_aim.last_body_yaw < 0 and main_color[3] or 35, 0.015)
local is_nade = helpers.is_nade()
local key_state_0x09 = client.key_state(0x09) or console_is_visible(engine_client)
anim.m1 = lerp_st(anim.m1, is_nade and (is_nade and 55 or 255) or (key_state_0x09 and (key_state_0x09 and 0 or 255) or 255), globals_frametime() * 8)
anim.m2 = lerp_st(anim.m2, is_nade and (is_nade and 55 or 137) or (key_state_0x09 and (key_state_0x09 and 0 or 137) or 137), globals_frametime() * 8)
anim.zal = animations:lerp(anim.zal, anti_aim.last_body_yaw > 0 and 255 or 55, 0.045)
anim.zal1 = animations:lerp(anim.zal1, anti_aim.last_body_yaw < 0 and 255 or 55, 0.045)
if anim.default1 > 0.01 then
renderer_triangle(ct.x + 55, ct.y + 2, ct.x + 42, ct.y - 7, ct.x + 42, ct.y + 11, 17, 17, 17, anim.m2 * anim.default1)
renderer_triangle(ct.x - 55, ct.y + 2, ct.x - 42, ct.y - 7, ct.x - 42, ct.y + 11, 17, 17, 17, anim.m2 * anim.default1)
renderer_triangle(ct.x + 55, ct.y + 2, ct.x + 42, ct.y - 7, ct.x + 42, ct.y + 11, main_color[1], main_color[2], main_color[3], anim.m1 * anim.default1 * manual_right)
renderer_triangle(ct.x - 55, ct.y + 2, ct.x - 42, ct.y - 7, ct.x - 42, ct.y + 11, main_color[1], main_color[2], main_color[3], anim.m1 * anim.default1 * manual_left)
renderer_rectangle(ct.x + 38, ct.y - 7, 2, 18, 17, 17, 17, anim.m2 * anim.default1)
renderer_rectangle(ct.x - 40, ct.y - 7, 2, 18, 17, 17, 17, anim.m2 * anim.default1)
renderer_rectangle(ct.x + 38, ct.y - 7, 2, 18, r, g, b, anim.m1 * anim.default1)
renderer_rectangle(ct.x - 40, ct.y - 7, 2, 18, r_1, g_1, b_1, anim.m1 * anim.default1)
end
if anim.fade1 > 0.01 then
renderer_text (ct.x + add_x + manual_right * 55, ct.y + 2, main_color[1], main_color[2], main_color[3], anim.m1 * anim.fade1 * manual_right , 'c+', 0, '⮞')
renderer_text (ct.x + add_x - manual_left * 55, ct.y + 2, main_color[1], main_color[2], main_color[3], anim.m1 * anim.fade1 * manual_left , 'c+', 0, '⮜')
renderer_text (ct.x + add_x - manual_forward * -0, ct.y - manual_forward * 15, main_color[1], main_color[2], main_color[3], anim.m1 * anim.fade1 * manual_forward , 'c+', 0, '⮝')
--[[
renderer_arrow_right (ct.x + add_x + manual_left * 27, ct.y + 2, main_color[1], main_color[2], main_color[3], 255 * anim.fade1 * manual_left, 0, 25)
renderer_arrow_left (ct.x + add_x + manual_left * 27, ct.y + 4, main_color[1], main_color[2], main_color[3], 255 * anim.fade1 * manual_left, 0, 25) ]]
renderer_text (ct.x + add_x + manual_fstand * 55, ct.y + 2, r, g, b, anim.zal * anim.fade1 * manual_fstand , 'c+', 0, '⮞')
renderer_text (ct.x + add_x + manual_fstand * 48, ct.y + 2, r, g, b, anim.zal * anim.fade1 * manual_fstand , 'c+', 0, '›')
renderer_text (ct.x + add_x - manual_fstand * 48, ct.y + 2, r_1, g_1, b_1, anim.zal1 * anim.fade1 * manual_fstand , 'c+', 0, '‹')
renderer_text (ct.x + add_x - manual_fstand * 55, ct.y + 2, r_1, g_1, b_1, anim.zal1 * anim.fade1 * manual_fstand , 'c+', 0, '⮜')
end
if anim.modern1 > 0.01 then
local radius = 35
local view = library.vector(client_camera_angles())
local yaw = math_normalize(library.antiaim_funcs.get_abs_yaw() - view.y - 180)
local yaw_add = 30
renderer_arrow_left(ct.x + add_x, ct.y + yaw_add, 17, 17, 17, anim.m2 * anim.modern1, (yaw - 90) * -1, radius)
renderer_arrow_right(ct.x + add_x, ct.y + yaw_add, 17, 17, 17, anim.m2 * anim.modern1, (yaw - 90) * -1, radius)
if anti_aim.last_body_yaw > 0 then
renderer_arrow_left(ct.x + add_x, ct.y + yaw_add, main_color[1], main_color[2], main_color[3], anim.m1 * anim.modern1, (yaw - 90) * -1, radius)
renderer_arrow_right(ct.x + add_x, ct.y + yaw_add, back_color[1], back_color[2], back_color[3], anim.m1 * anim.modern1, (yaw - 90) * -1, radius)
else
renderer_arrow_right(ct.x + add_x, ct.y + yaw_add, main_color[1], main_color[2], main_color[3], anim.m1 * anim.modern1, (yaw - 90) * -1, radius)
renderer_arrow_left(ct.x + add_x, ct.y + yaw_add, back_color[1], back_color[2], back_color[3], anim.m1 * anim.modern1, (yaw - 90) * -1, radius)
end
end
end
animation_breaker.run = function ()
local me = entity_get_local_player()
if not entity_is_alive(me) then
return
end
local flags = entity_get_prop(me, "m_fFlags")
local on_ground = bit_band(flags, 1)
local menu_open = ui_is_menu_open()
local legs_types = {[1] = "Off", [2] = "Always slide", [3] = "Never slide"}
local on_slowwalk = ui_get(reference.AA.other.slow_motion[1]) and ui_get(reference.AA.other.slow_motion[2])
if not menu.prod[ tabs.general ]['General']:get() then
return
end
if table.find(menu.prod[tabs.general]['Anim Breaker']:get(), 'Landing Pitch') then
if on_ground == 1 then
animation_breaker.cvars.ground_ticks = animation_breaker.cvars.ground_ticks + 1
else
animation_breaker.cvars.ground_ticks = 0
animation_breaker.cvars.end_time = globals_curtime() + 1
end
if animation_breaker.cvars.ground_ticks > ui_get(reference.AA.fakelag.limit)+1 and animation_breaker.cvars.end_time > globals_curtime() then
entity_set_prop(me, "m_flPoseParameter", 0.5, 12)
end
end
if table.find(menu.prod[tabs.general]['Anim Breaker']:get(), 'Force Falling') then
if on_ground ~= 1 then
entity_set_prop(me, 'm_flPoseParameter', 1, 6)
entity_set_prop(me, "m_fFlags", library.bit.bor(flags, 256))
end
end
if table.find(menu.prod[tabs.general]['Anim Breaker']:get(), 'Leg Breaker') and not menu_open then
ui_set(reference.AA.other.leg_movement, legs_types[math.random(1, 3)])
entity_set_prop(entity_get_local_player(), "m_flPoseParameter", 8, 0)
end
if table.find(menu.prod[tabs.general]['Anim Breaker']:get(), 'Sliding on Slow-Motion') and on_slowwalk then
ui_set(reference.AA.other.leg_movement, legs_types[2])
entity_set_prop(entity_get_local_player(), "m_flPoseParameter", 8, 0)
end
end
function library.entity.get_health(player)
return player:get_prop('m_iHealth')
end
animation_breaker.moonwalk = function ()
local me = library.entity.get_local_player()
if not me then return end
if me:get_health() <= 0 then return end
local m_fFlags = me:get_prop("m_fFlags")
local vx, vy, vz = me:get_prop("m_vecVelocity")
local player = entity_get_local_player()
if not entity_is_alive(player) then return end
local on_still = math_sqrt(vx ^ 2 + vy ^ 2) < 2
local on_ground = bit_band(m_fFlags, 1) == 1
local legs_types = {[1] = "Off", [2] = "Always slide", [3] = "Never slide"}
if not menu.prod[ tabs.general ]['General']:get() then
return
end
if menu.prod[ tabs.general ]['Moonwalk Mode']:get() then
if not on_still then
local my_animlayer = me:get_anim_overlay(7)
local speed = 0.4
local factor = globals_realtime() * speed % 1
my_animlayer.sequence = 26
my_animlayer.weight = 1
my_animlayer.cycle = factor
else
entity_set_prop(player, "m_flPoseP2arameter", 0, 1) --1,6
end
end
if menu.prod[ tabs.general ]['Moonwalk In Air']:get() then
if not on_ground then
local my_animlayer = me:get_anim_overlay(6)
local speed = 0.4
local factor = globals_realtime() * speed % 1
my_animlayer.sequence = 26
my_animlayer.weight = 1
my_animlayer.cycle = factor
else
entity_set_prop(player, "m_flPoseP2arameter", 6, 0) --1,6
--ui_set(gamesense_refs.leg_movement, legs_types[1])
end
end
end
visual_controller.w = function () visual_controller.notifications:render() end
hitlogs.data = {}
hitlogs.sim, hitlogs.net = {}, {}
hitlogs.cl_data = {
tick_shifted = false,
tick_base = 0
}
hitlogs.ent = function (enemy_only, alive_only)
local enemy_only = enemy_only ~= nil and enemy_only or false
local alive_only = alive_only ~= nil and alive_only or true
local result = {}
local player_resource = entity_get_player_resource()
for player = 1, globals_maxplayers() do
local is_enemy, is_alive = true, true
if enemy_only and not entity_is_enemy(player) then is_enemy = false end
if is_enemy then
if alive_only and entity_get_prop(player_resource, 'm_bAlive', player) ~= 1 then is_alive = false end
if is_alive then table_insert(result, player) end
end
end
return result
end
hitlogs.generate_flags = function (e, on_fire_data)
return {
e.refined and 'R' or '',
e.expired and 'X' or '',
e.noaccept and 'N' or '',
hitlogs.cl_data.tick_shifted and 'S' or '',
on_fire_data.teleported and 'T' or '',
on_fire_data.interpolated and 'I' or '',
on_fire_data.extrapolated and 'E' or '',
on_fire_data.boosted and 'B' or '',
on_fire_data.high_priority and 'H' or ''
}
end
hitlogs.net_upd = function ()
local me = entity_get_local_player()
local players = hitlogs.ent(true, true)
local m_tick_base = entity_get_prop(me, 'm_nTickBase')
local cl_data = hitlogs.cl_data
cl_data.tick_shifted = false
if m_tick_base ~= nil then
if cl_data.tick_base ~= 0 and m_tick_base < cl_data.tick_base then
cl_data.tick_shifted = true
end
cl_data.tick_base = m_tick_base
end
local g_sim_ticks = hitlogs.sim
local g_net_data = hitlogs.net
for i=1, #players do
local idx = players[i]
local prev_tick = g_sim_ticks[idx]
if entity_is_dormant(idx) or not entity_is_alive(idx) then
g_sim_ticks[idx] = nil
g_net_data[idx] = nil
else
local player_origin = { entity_get_origin(idx) }
local simulation_time = time_to_ticks(entity_get_prop(idx, 'm_flSimulationTime'))
if prev_tick ~= nil then
local delta = simulation_time - prev_tick.tick
if delta < 0 or delta > 0 and delta <= 64 then
local m_fFlags = entity_get_prop(idx, 'm_fFlags')
local diff_origin = vec_substract(player_origin, prev_tick.origin)
local teleport_distance = vec_lenght(diff_origin[1], diff_origin[2])
g_net_data[idx] = {
tick = delta-1,
origin = player_origin,
tickbase = delta < 0,
lagcomp = teleport_distance > 4096,
}
end
end
g_sim_ticks[idx] = {
tick = simulation_time,
origin = player_origin,
}
end
end
end
hitlogs.on_fire = function (e)
local data = e
local plist_sp = plist.get(e.target, 'Override safe point')
local checkbox = ui_get(reference.RAGE.aimbot.force_safe_point)
local g_aimbot_data = hitlogs.data
local g_sim_ticks = hitlogs.sim
local g_net_data = hitlogs.net
if g_net_data[e.target] == nil then
g_net_data[e.target] = { }
end
data.teleported = g_net_data[e.target].lagcomp or false
data.choke = g_net_data[e.target].tick or '?'
data.self_choke = globals.chokedcommands()
data.safe_point = ({
['Off'] = 'off',
['On'] = 'true',
['-'] = checkbox
})[plist_sp]
data.pred_dmg = e.damage
g_aimbot_data[e.id] = data
end
ticks_to_time = function(ticks)
return globals_tickinterval() * ticks
end
hitlogs.aimbot = function (e)
if not menu.prod[ tabs.visuals ]['Visuals']:get() then
return
end
if not menu.prod[ tabs.visuals ]['Logs']:get() then
return
end
local g_aimbot_data = hitlogs.data
local g_sim_ticks = hitlogs.sim
local g_net_data = hitlogs.net
if g_aimbot_data [e.id] == nil then
return
end
local on_fire_data = g_aimbot_data[e.id]
local name = string.lower(entity_get_player_name(e.target))
local hgroup = defines.hitgroups[e.hitgroup + 1] or '?'
local aimed_hgroup = defines.hitgroups[on_fire_data.hitgroup + 1] or '?'
local hitchance = math_floor(on_fire_data.hit_chance + 0.5) .. '%'
local health = entity_get_prop(e.target, 'm_iHealth')
local bt = globals_tickcount()-e.tick
local bt_to_ms = math_floor(ticks_to_time(bt) * 100)
local flags = hitlogs.generate_flags(e, on_fire_data)
local d_state = ''
local dmg = on_fire_data.damage - e.damage
if dmg >= 0 then
d_state = '+'
else
d_state = ''
end
local action
if health <= 0 then
action = 'Killed'
elseif health > 0 then
action = 'Hit'
end
if table.find(menu.prod[tabs.visuals]['Events']:get(), 'Hit') and table.find(menu.prod[tabs.visuals]['Logs Style']:get(), 'Console Panel') then
color_log(160, 203, 39, string_format(
'[+] Hit %s\'s %s for %i (%s%d) damage (%s) bt=%ims %s move=%s t=%s',
name, hgroup, e.damage, d_state, dmg, hitchance, bt_to_ms, table_concat(flags), on_fire_data.choke, on_fire_data.self_choke
))
end
local r,g,b = menu.prod[tabs.visuals]['Gradient 2']:get()
if table.find(menu.prod[tabs.visuals]['Events']:get(), 'Hit') and table.find(menu.prod[tabs.visuals]['Logs Style']:get(), 'Amelia') then
if bt_to_ms > 0 then
if action == 'Hit' then
visual_controller.notifications:new(3, string_format('%s $%s$\'$s$ in $%s$ for $%i$ damage bt $%i$ms', action, name, hgroup, e.damage, bt_to_ms), r, g, b)
elseif action == 'Killed' then
visual_controller.notifications:new(3, string_format('%s $%s$\'$s$ in $%s$ bt $%i$ms', action, name, hgroup, bt_to_ms), r, g, b)
end
elseif bt_to_ms <= 0 then
if action == 'Hit' then
visual_controller.notifications:new(3, string_format('%s $%s$\'$s$ in $%s$ for $%i$ damage', action, name, hgroup, e.damage), r, g, b)
elseif action == 'Killed' then
visual_controller.notifications:new(3, string_format('%s $%s$\'$s$ in $%s$', action, name, hgroup), r, g, b)
end
end
end
end
hitlogs.miss = function (e)
if not menu.prod[ tabs.visuals ]['Visuals']:get() then
return
end
if not menu.prod[ tabs.visuals ]['Logs']:get() then
return
end
local g_aimbot_data = hitlogs.data
local g_sim_ticks = hitlogs.sim
local g_net_data = hitlogs.net
if g_aimbot_data [e.id] == nil then
return
end
local on_fire_data = g_aimbot_data[e.id]
local name = string_lower(entity_get_player_name(e.target))
local hgroup = defines.hitgroups[e.hitgroup + 1] or '?'
local hitchance = math_floor(on_fire_data.hit_chance + 0.5) .. '%'
local flags = hitlogs.generate_flags(e, on_fire_data)
local bt = globals_tickcount()-e.tick
local bt_to_ms = math_floor(ticks_to_time(bt) * 100)
local dmg = on_fire_data.pred_dmg - on_fire_data.damage
if table.find(menu.prod[tabs.visuals]['Events']:get(), 'Miss') and table.find(menu.prod[tabs.visuals]['Logs Style']:get(), 'Console Panel') then
color_log(203, 39, 39, string_format(
'[-] Missed %s\'s %s for %i damage (%s) due to %s (%d) bt=%ims %s move=%s t=%s',
name, hgroup, on_fire_data.pred_dmg, hitchance, e.reason, dmg, bt_to_ms, table.concat(flags), on_fire_data.choke, on_fire_data.self_choke
))
end
local miss_r
if e.reason == '?' then
miss_r = 'resolver'
else
miss_r = e.reason
end
if table.find(menu.prod[tabs.visuals]['Events']:get(), 'Miss') and table.find(menu.prod[tabs.visuals]['Logs Style']:get(), 'Amelia') then
visual_controller.notifications:new(3, string_format('Missed $%s$\'$s$ in $%s$ due to $%s$', name, hgroup, miss_r), 228, 39, 39)
end
end
hitlogs.other = function (e)
if not menu.prod[ tabs.visuals ]['Visuals']:get() then
return
end
if not menu.prod[ tabs.visuals ]['Logs']:get() then
return
end
local attacker_id = client_userid_to_entindex(e.attacker)
if attacker_id == nil or attacker_id ~= entity_get_local_player() then
return
end
local group = defines.hitgroups[e.hitgroup + 1] or "?"
if table.find(menu.prod[tabs.visuals]['Events']:get(), 'Hit') and table.find(menu.prod[tabs.visuals]['Logs Style']:get(), 'Console Panel') then
if group == "generic" and defines.weapon_to_verb[e.weapon] ~= nil then
local target_id = client_userid_to_entindex(e.userid)
local target_name = entity_get_player_name(target_id)
print(string_format("%s %s for %i damage (%i remaining) ", defines.weapon_to_verb[e.weapon], string.lower(target_name), e.dmg_health, e.health))
end
end
local health = e.health
local weap = defines.weapon_to_kill[e.weapon]
local r,g,b = menu.prod[tabs.visuals]['Gradient 2']:get()
local action
if table.find(menu.prod[tabs.visuals]['Events']:get(), 'Hit') and table.find(menu.prod[tabs.visuals]['Logs Style']:get(), 'Amelia') then
if group == "generic" and defines.weapon_to_verb[e.weapon] ~= nil then
if health <= 0 then
action = 'Killed'
elseif health > 0 then
action = defines.weapon_to_verb[e.weapon]
end
local target_id = client_userid_to_entindex(e.userid)
local target_name = entity_get_player_name(target_id)
if action == defines.weapon_to_verb[e.weapon] then
visual_controller.notifications:new(3, string_format('%s $%s$ for $%i$ damage ($%i$ remaining)', action, string_lower(target_name), e.dmg_health, e.health), r,g,b)
elseif action == 'Killed' then
visual_controller.notifications:new(3, string_format('%s $%s$ with $%s', action, string_lower(target_name), weap), r,g,b)
end
end
end
end
helpers.fast_ladder = function (c)
local local_player = entity_get_local_player()
local pitch, yaw = math_floor(client_camera_angles())
if not menu.prod[ tabs.misc ]['Miscellaneous']:get() then
return
end
if not menu.prod[ tabs.misc ]['Fast Ladder']:get() then
return
end
if not entity_get_prop(local_player, "m_MoveType") == 9 then
return
end
if entity_get_prop(local_player, "m_MoveType") == 9 then
c.yaw = math_floor(c.yaw+0.5)
c.roll = 0
c.yaw = math_floor(c.yaw+0.5)
if c.forwardmove == 0 then
c.pitch = 89
c.yaw = c.yaw - 180
if c.sidemove ~= 0 then
c.pitch = 89
c.yaw = c.yaw - 180
end
if c.sidemove < 0 then
c.yaw = c.yaw - 180
c.in_moveleft = 0
c.in_moveright = 1
end
if c.sidemove > 0 then
c.yaw = c.yaw - 180
c.in_moveleft = 1
c.in_moveright = 0
end
elseif c.forwardmove > 0 then
if c.pitch < 45 then
c.pitch = 89
c.in_moveright = 1
c.in_moveleft = 0
c.in_forward = 0
c.in_back = 1
if c.sidemove == 0 then
c.yaw = c.yaw + 90
end
if c.sidemove < 0 then
c.yaw = c.yaw + 150
end
if c.sidemove > 0 then
c.yaw = c.yaw + 30
end
end
elseif c.forwardmove < 0 then
c.pitch = 89
c.in_moveleft = 1
c.in_moveright = 0
c.in_forward = 1
c.in_back = 0
if c.sidemove == 0 then
c.yaw = c.yaw + 90
end
if c.sidemove > 0 then
c.yaw = c.yaw + 150
end
if c.sidemove < 0 then
c.yaw = c.yaw + 30
end
end
end
end
helpers.ideal_tick = function ()
if not menu.prod[ tabs.general ]['General']:get() then
return
end
if menu.prod[ tabs.general ]['Ideal Tick']:get() then
return
end
local recharging = ui_get(reference.RAGE.aimbot.double_tap[2]) and (library.antiaim_funcs.get_tickbase_shifting() == 0)
local shoting = anti_aim.on_shot
local timer = globals_curtime()
local me = entity.get_local_player ()
local my_weapon = entity_get_player_weapon(me)
if my_weapon == nil then
return
end
local can_Fire =
(entity_get_prop(me, "m_flNextAttack") <= timer and
entity_get_prop(my_weapon, "m_flNextPrimaryAttack") <= timer)
if table.find(menu.prod[tabs.general]['Ideal Options']:get(), 'No Packets on Peek') then
helpers.cvars_saved.sv_maxunlag = 0.19
helpers.cvars_saved.sv_clockcorrection_msecs = 0
helpers.cvars_saved.sv_client_min_interp_ratio = 0
helpers.cvars_saved.sv_client_min_interp_ratio = 0
helpers.cvars_saved.sv_client_cmdrate_difference = 0
end
if table.find(menu.prod[tabs.general]['Ideal Options']:get(), 'No Choke on Shot') then
if shoting or can_Fire then
helpers.cvars_saved.sv_maxusrcmdprocessticks = 28
helpers.cvars_saved.sv_maxcmdrate = 128
helpers.cvars_saved.sv_maxrate = 0
helpers.cvars_saved.sv_minrate = 0
helpers.cvars_saved.sv_maxupdaterate = 128
helpers.cvars_saved.sv_minupdaterate = 128
end
end
end
helpers.override_max_dt_speed = function ()
local is_dt = ui_get(reference.RAGE.aimbot.double_tap[1]) and ui_get(reference.RAGE.aimbot.double_tap[2])
local is_recharging = ui_get(reference.RAGE.aimbot.double_tap[2]) and (library.antiaim_funcs.get_tickbase_shifting() == 0)
if is_dt and not is_recharging then
helpers.cvars_saved.sv_maxusrcmdprocessticks = 14
helpers.cvars_saved.sv_maxunlag = 0.140
helpers.cvars_saved.sv_clockcorrection_msecs = 4
helpers.cvars_saved.sv_client_min_interp_ratio = 0
helpers.cvars_saved.sv_client_max_interp_ratio = 0
helpers.cvars_saved.sv_client_cmdrate_difference = 0
helpers.cvars_saved.sv_maxcmdrate = 128
helpers.cvars_saved.sv_maxrate = 0
helpers.cvars_saved.sv_minrate = 0
helpers.cvars_saved.sv_maxupdaterate = 128
helpers.cvars_saved.sv_minupdaterate = 128
elseif is_dt and is_recharging then
helpers.cvars_saved.sv_maxunlag = 0
helpers.cvars_saved.sv_clockcorrection_msecs = 0
helpers.cvars_saved.sv_client_min_interp_ratio = 0
helpers.cvars_saved.sv_client_min_interp_ratio = 0
helpers.cvars_saved.sv_client_cmdrate_difference = 0
helpers.cvars_saved.sv_maxusrcmdprocessticks = 28
helpers.cvars_saved.sv_maxcmdrate = 128
helpers.cvars_saved.sv_maxrate = 0
helpers.cvars_saved.sv_minrate = 0
helpers.cvars_saved.sv_maxupdaterate = 128
helpers.cvars_saved.sv_minupdaterate = 128
end
end
helpers.override_cvars = function ()
client_set_cvar(defines.cvars.sv_maxusrcmdprocessticks, helpers.cvars_saved.sv_maxusrcmdprocessticks)
client_set_cvar(defines.cvars.sv_maxusrcmdprocessticks, helpers.cvars_saved.sv_maxunlag)
client_set_cvar(defines.cvars.sv_maxusrcmdprocessticks, helpers.cvars_saved.sv_clockcorrection_msecs)
client_set_cvar(defines.cvars.sv_maxusrcmdprocessticks, helpers.cvars_saved.sv_client_max_interp_ratio)
client_set_cvar(defines.cvars.sv_maxusrcmdprocessticks, helpers.cvars_saved.sv_client_cmdrate_difference)
client_set_cvar(defines.cvars.sv_maxusrcmdprocessticks, helpers.cvars_saved.sv_maxcmdrate)
client_set_cvar(defines.cvars.sv_maxusrcmdprocessticks, helpers.cvars_saved.sv_maxrate)
client_set_cvar(defines.cvars.sv_maxusrcmdprocessticks, helpers.cvars_saved.sv_minrate)
client_set_cvar(defines.cvars.sv_maxusrcmdprocessticks, helpers.cvars_saved.sv_maxupdaterate)
client_set_cvar(defines.cvars.sv_maxusrcmdprocessticks, helpers.cvars_saved.sv_minupdaterate)
end
helpers.cvars_shutdown = function ()
helpers.cvars_saved.sv_maxusrcmdprocessticks = 16
helpers.cvars_saved.sv_maxunlag = 0.500
helpers.cvars_saved.sv_clockcorrection_msecs = 0
helpers.cvars_saved.sv_client_min_interp_ratio = 1
helpers.cvars_saved.sv_client_max_interp_ratio = 2
helpers.cvars_saved.sv_client_cmdrate_difference = 30
helpers.cvars_saved.sv_maxcmdrate = 0
helpers.cvars_saved.sv_maxrate = 0
helpers.cvars_saved.sv_minrate = 16000
helpers.cvars_saved.sv_maxupdaterate = 64
helpers.cvars_saved.sv_minupdaterate = 64
end
menu.visibility = function ()
menu.set_visible(reference.AA.angles, false)
end
menu.visibility_shutdown = function ()
menu.set_visible(reference.AA.angles, true)
end
menu.prevent_mouse = function (cmd)
if ui_is_menu_open() then
cmd.in_attack = false
end
end
--НИЖЕ = ВЫШЕ ПО ЗНАЧЕНИЮ
callback.new('antiaim::condition', 'setup_command', anti_aim.condition)
callback.new('antiaim::handle_manual', 'paint', anti_aim.handle_manuals)
callback.new('antiaim::handle_defensive', 'net_update_end', anti_aim.handle_defensive)
callback.new('antiaim::anti_backstab', 'setup_command', anti_aim.anti_backstab)
callback.new('antiaim::handle_builder', 'setup_command', anti_aim.builder)
callback.new('antiaim::main', 'setup_command', anti_aim.main)
callback.new('antiaim::air_defensive', 'setup_command', anti_aim.air_defensive)
callback.new('antiaim::on_warmup', 'setup_command', anti_aim.on_warmup)
callback.new('roundender', 'round_end', anti_aim.disable_stocks)
callback.new('anti_bruteforce::bullet', 'bullet_impact', anti_bruteforce.pre_bullet_impact)
callback.new('anti_bruteforce::run_command', 'run_command', anti_bruteforce.work_time)
callback.new('::anim_break', 'pre_render', animation_breaker.run)
callback.new('::mwalk', 'pre_render', animation_breaker.moonwalk)
callback.new('ladder', 'setup_command', helpers.fast_ladder)
callback.new('dt_help', 'run_command', helpers.override_cvars)
callback.new('antiaim::on_aim', 'aim_fire', anti_aim.on_aim)
callback.new('hlogs::fire', 'aim_fire', hitlogs.on_fire)
callback.new('hlogs::hit', 'aim_hit', hitlogs.aimbot)
callback.new('hlogs::miss', 'aim_miss', hitlogs.miss)
callback.new('hlogs::other', 'player_hurt', hitlogs.other)
callback.new('hlogs::net', 'net_update_end', hitlogs.net_upd)
callback.new('antiaim::player_death', 'player_death', anti_aim.on_death)
callback.new('anti_bruteforce::discon', 'cs_game_disconnected', anti_bruteforce.reset)
callback.new('anti_bruteforce::new_map', 'game_newmap', anti_bruteforce.reset)
callback.new('anti_bruteforce::client_discon', 'client_disconnect', anti_bruteforce.reset)
callback.new('anti_bruteforce::round_start', 'round_start', anti_bruteforce.reset)
callback.new('anti_bruteforce::round_end', 'round_end', anti_bruteforce.reset)
hitlogs.z = function () visual_controller.notifications:clear() end
callback.new('hlo::discon', 'cs_game_disconnected', hitlogs.z)
callback.new('hlo::new_map', 'game_newmap', hitlogs.z)
callback.new('hlo::client_discon', 'client_disconnect', hitlogs.z)
callback.new('visuals::pidorz', 'paint', visual_controller.w)
callback.new('visuals::indicators', 'paint', visual_controller.inidcators)
callback.new('visuals::indicators', 'paint', visual_controller.manual)
callback.new('visuals::handle_draggables', 'paint_ui', g_drag.paint_ui)
callback.new('menu::visibility', 'paint_ui', menu.visibility)
callback.new('menu::restore', 'pre_config_save', menu.shutdown)
callback.new('menu::shutdown_vis', 'shutdown', menu.visibility_shutdown)
callback.new('menu::shutdown_cvar', 'shutdown', helpers.cvars_shutdown)
callback.new('configs::shutdown', 'shutdown', configs.shutdown)
configs.load_startup()
-- OSTANOVKA
Write, Run & Share Lua code online using OneCompiler's Lua online compiler for free. It's one of the robust, feature-rich online compilers for Lua language, running the latest Lua version 5.4. Getting started with the OneCompiler's Lua editor is easy and fast. The editor shows sample boilerplate code when you choose language as Lua and start coding.
OneCompiler's Lua online editor supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample Lua program which takes name as input and prints hello message with your name.
name = io.read("*a")
print ("Hello ", name)
Lua is a light weight embeddable scripting language which is built on top of C. It is used in almost all kind of applications like games, web applications, mobile applications, image processing etc. It's a very powerful, fast, easy to learn, open-source scripting language.
-- global variables
a = 10
-- local variables
local x = 30
| Value Type | Description |
|---|---|
| number | Represents numbers |
| string | Represents text |
| nil | Differentiates values whether it has data or not |
| boolean | Value can be either true or false |
| function | Represents a sub-routine |
| userdata | Represents arbitary C data |
| thread | Represents independent threads of execution. |
| table | Can hold any value except nil |
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while(condition)
do
--code
end
Repeat-Until is also used to iterate a set of statements based on a condition. It is very similar to Do-While, it is mostly used when you need to execute the statements atleast once.
repeat
--code
until( condition )
For loop is used to iterate a set of statements based on a condition.
for init,max/min value, increment
do
--code
end
Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increase re-usuability and modularity.
optional_function_scope function function_name( argument1, argument2, argument3........, argumentn)
--code
return params with comma seperated
end