-
Автор темы
- #1
создал тему чтобы не пришлось заходить в дискорд или делать ещё какие либо действия
Код:
local function vtable_entry(instance, index, type)
return ffi.cast(type, (ffi.cast("void***", instance)[0])[index])
end
local function vtable_thunk(index, typestring)
local t = ffi.typeof(typestring)
return function(instance, ...)
assert(instance ~= nil)
if instance then
return vtable_entry(instance, index, t)(instance, ...)
end
end
end
local function vtable_bind(module, interface, index, typestring)
local instance = Utils.CreateInterface(module, interface) or error("invalid interface")
local fnptr = vtable_entry(instance, index, ffi.typeof(typestring)) or error("invalid vtable")
return function(...)
return fnptr(instance, ...)
end
end
function table.keys(array) local out = {} for key, k in pairs(array) do table.insert(out, key) end return out end
function table.find(array, to_find) for i, k in ipairs(array) do return k == to_find end end
function table.filter(array, func)
local filtered = {}
for i, k in ipairs(array) do
if func(k) then
table.insert(filtered, k)
end
end
return filtered
end
local files = {}
ffi.cdef[[
typedef struct {
uint8_t r;
uint8_t g;
uint8_t b;
uint8_t a;
} color_struct_t;
typedef void (__cdecl* console_color_print)(void*,const color_struct_t&, const char*, ...);
bool URLDownloadToFileA(void* LPUNKNOWN, const char* LPCSTR, const char* LPCSTR2, int a, int LPBINDSTATUSCALLBACK);
bool CreateDirectoryA(const char* lpPathName, void* lpSecurityAttributes);
bool DeleteUrlCacheEntryA(const char* lpszUrlName);
]]
local console = {}
console.interface_type = ffi.typeof("uintptr_t**")
console.cvar_interface = ffi.cast(console.interface_type, Utils.CreateInterface("vstdlib.dll", "VEngineCvar007"))
console._print = ffi.cast("console_color_print", console.cvar_interface[0][25])
console.color_print = function(color, text)
if color == nil then
return
end
local col = ffi.new("color_struct_t")
col.r = color.r * 255
col.g = color.g * 255
col.b = color.b * 255
col.a = color.a * 255
console._print(console.cvar_interface, col, text)
end
console.print = function(...)
console.color_print(Color.RGBA(118, 200, 232), '[Aarne.club] ')
for i, v in ipairs({...}) do
local color = v[2] or Color.RGBA(255, 255, 255)
local text = v[1] or ''
console.color_print(color, text)
end
print('')
end
--@nope: uwu colored printi :33333
local uwu = {}
uwu.calc_count = function(string, search)
local count = 0
for i = 1, #string do
if string:sub(i, i) == search then
count = count + 1
end
end
return count
end
--@note: ДА У МЕНЯ ЧУТЬ МАЗГА НАХЪУЙ НЕ ВЗАРВАЛАСЬ ТАКОЕ ДЕЛАТЬ ЕБАНЫЙ РОТ
uwu.print = function(_string, vector, alpha, font, shadow)
local string = _string
local old_text_size = 0
for i = 1, uwu.calc_count(string, "{") do
local start_prefix = string:find('{')
local end_prefix = string:find('}')
local string_color = string:sub(start_prefix, end_prefix)
local load_color = loadstring('return ' .. string_color)()
local next_string = string:sub(end_prefix + 1)
local next_prefix_start = next_string:find('{')
local new_string = next_prefix_start and next_string:sub(1, next_prefix_start - 1) or next_string
string = next_string
if (vector or alpha or font or shadow) then
local color = Color.new(unpack(load_color))
color.a = alpha
Render.ShadowText(new_string, Vector2.new(vector.x + old_text_size, vector.y), color, font, shadow, false)
old_text_size = old_text_size + Render.CalcTextSize(new_string, font.size, font.init).x
goto skip
end
console.color_print(Color.new(unpack(load_color)), new_string)
::skip::
end
end
files.default_path = 'nl\\aarne.club'
files.UrlMon = ffi.load('UrlMon')
files.WinInet = ffi.load('WinInet')
files.Gdi32 = ffi.load('Gdi32')
files.download = function(self, url, file_name, path)
path = path and path or self.default_path
path = path .. '\\' .. file_name
self.WinInet.DeleteUrlCacheEntryA(url)
self.UrlMon.URLDownloadToFileA(nil, url, path, 0, 0)
local log = ('Successfully downloaded (%s) to (%s) folder'):format(file_name, self.default_path)
Cheat.AddEvent(log)
uwu.print(('{0.54, 0.83, 1}[Aarne.club] {1, 1, 1}Successfully downloaded {0.78, 1, 0}%s {1, 1, 1}to {0.78, 1, 0}%s {1, 1, 1}folder \n'):format(file_name, self.default_path))
end
files.create_directory = function(self, path)
path = path and path or self.default_path
ffi.C.CreateDirectoryA(path, NULL)
local log = ('Successfully created (%s) folder'):format(path)
Cheat.AddEvent(log)
uwu.print(('{0.54, 0.83, 1}[Aarne.club] {1, 1, 1}Successfully created {0.78, 1, 0}%s {1, 1, 1}folder \n'):format(path))
end
local http = Panorama.LoadString([[
return {
request: function(url, options){
$.AsyncWebRequest(url, options);
}
}
]])()
local json = Panorama.LoadString([[
return {
encode: JSON.stringify,
parse: JSON.parse
};
]])()
local ffi_handler = {}
local animation_breaker = {}
ffi_handler.sigs = {
get_pose_params = {"client.dll", "55 8B EC 8B 45 08 57 8B F9 8B 4F 04 85 C9 75 15"} -- https://github.com/perilouswithadollarsign/cstrike15_src/blob/master/public/studio.cpp#L931
}
ffi_handler.offsets = {
animstate = 0x9960, -- m_bIsScoped - 20
landing_anim = 0x109, -- аэээ ну из структуры анимстейта просто взять
m_pStudioHdr = 0x2950, -- https://github.com/frk1/hazedumper/blob/master/csgo.json#L55
}
ffi_handler.bind_argument = function(fn, arg)
return function(...)
return fn(arg, ...)
end
end
ffi_handler.interface_type = ffi.typeof("uintptr_t**")
ffi_handler.i_client_entity_list = ffi.cast(ffi_handler.interface_type, Utils.CreateInterface("client.dll", "VClientEntityList003"))
ffi_handler.get_client_entity = ffi_handler.bind_argument(ffi.cast("void*(__thiscall*)(void*, int)", ffi_handler.i_client_entity_list[0][3]), ffi_handler.i_client_entity_list)
ffi_handler.get_pose_parameters = ffi.cast( "struct {char pad[8]; float m_flStart; float m_flEnd; float m_flState;}*(__thiscall* )( void*, int )", Utils.PatternScan(unpack(ffi_handler.sigs.get_pose_params)))
animation_breaker.cache = {}
local base64 = {}
local b = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
base64.encode = function(string)
return ((string:gsub('.', function(x)
local r, b = '', x:byte()
for i = 8, 1, -1 do
r = r .. (b % 2 ^ i - b % 2 ^ (i - 1) > 0 and '1' or '0')
end
return r;
end) .. '0000'):gsub('%d%d%d?%d?%d?%d?', function(x)
if (#x < 6) then
return ''
end
local c = 0
for i = 1, 6 do
c = c + (x:sub(i, i) == '1' and 2 ^ (6 - i) or 0)
end
return b:sub(c + 1, c + 1)
end) .. ({ '', '==', '=' })[#string % 3 + 1])
end
base64.decode = function(string)
string = string.gsub(string, '[^' .. b .. '=]', '')
return (string:gsub('.', function(x)
if (x == '=') then
return ''
end
local r, f = '', (b:find(x) - 1)
for i = 6, 1, -1 do
r = r .. (f % 2 ^ i -f % 2 ^ (i - 1) > 0 and '1' or '0')
end
return r;
end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x)
if (#x ~= 8) then
return ''
end
local c = 0
for i = 1, 8 do
c = c + (x:sub(i, i) == '1' and 2 ^ (8 - i) or 0)
end
return string.char(c)
end))
end
local defines = {}
local draggables = {
create_draggable = function(start_position_x, start_position_y, starting_size_x, starting_size_y, name, callback_fn)
return {
position_x = start_position_x:GetInt(),
position_y = start_position_y:GetInt(),
size_x = starting_size_x,
size_y = starting_size_y,
started_dragging = false,
initial_drag_pos = Vector2.new(0, 0),
drag_pos = Vector2.new(0, 0),
callback_function = callback_fn,
update = function(self)
if Cheat.IsMenuVisible() then
local mouse_position = Cheat.GetMousePos()
local is_in_bounds = (mouse_position.x >= self.position_x and mouse_position.y >= self.position_y and mouse_position.x <= self.position_x + self.size_x and mouse_position.y <= self.position_y + self.size_y)
if (is_in_bounds or self.started_dragging) and Cheat.IsKeyDown(1) and (defines.mouse_target == 0 or defines.mouse_target == name) then
defines.mouse_target = name
if not self.started_dragging then
self.started_dragging = true
self.initial_drag_pos = Vector2.new(mouse_position.x - self.position_x, mouse_position.y - self.position_y)
else
self.position_x = mouse_position.x - self.initial_drag_pos.x
self.position_y = mouse_position.y - self.initial_drag_pos.y
start_position_x:SetInt(math.floor(tonumber(self.position_x)))
start_position_y:SetInt(math.floor(tonumber(self.position_y)))
end
elseif not Cheat.IsKeyDown(1) then
defines.mouse_target = 0
self.started_dragging = false
self.initial_drag_pos = self.drag_pos
end
end
self.callback_function(self)
end
}
end
}
local clipboard = {}
clipboard.GetClipboardTextCount = vtable_bind("vgui2.dll", "VGUI_System010", 7, "int(__thiscall*)(void*)")
clipboard.SetClipboardText = vtable_bind("vgui2.dll", "VGUI_System010", 9, "void(__thiscall*)(void*, const char*, int)")
clipboard.GetClipboardText = vtable_bind("vgui2.dll", "VGUI_System010", 11, "int(__thiscall*)(void*, int, const char*, int)")
local new_char_arr = ffi.typeof("char[?]")
clipboard.paste = function()
local len = clipboard.GetClipboardTextCount()
if len > 0 then
local char_arr = new_char_arr(len)
clipboard.GetClipboardText(0, char_arr, len)
return ffi.string(char_arr, len - 1)
end
end
clipboard.copy = function(string)
string = tostring(string)
clipboard.SetClipboardText(string, string.len(string))
Cheat.AddEvent('Config successfully copied to clipboard')
uwu.print('{0.54, 0.83, 1}[Aarne.club] {1, 1, 1}Config successfully copied to clipboard \n')
end
math.pi_divided = math.pi / 180
function math.clamp(value, min, max)
return math.min(max, math.max(min, value))
end
function math.lerp(start, end_pos, time)
if time == nil then
time = 0.095
end
time = math.clamp(GlobalVars.frametime * (time * 175), 0, 1)
if type(start) == "userdata" then
local r, g, b, a = start.r, start.g, start.b, start.a
local e_r, e_g, e_b, e_a = end_pos.r, end_pos.g, end_pos.b, end_pos.a
r = math.lerp(r, e_r, time)
g = math.lerp(g, e_g, time)
b = math.lerp(b, e_b, time)
a = math.lerp(a, e_a, time)
return Color.new(r, g, b, a)
end
local delta = end_pos - start
delta = delta * time
delta = delta + start
if end_pos == 0 and delta < 0.01 and delta > -0.01 then
delta = 0
elseif end_pos == 1 and delta < 1.01 and delta > 0.99 then
delta = 1
end
return delta
end
function math.closest_point_on_ray(ray_from, ray_to, desired_point)
local to = desired_point - ray_from
local direction = ray_to - ray_from
local ray_length = direction:Length()
direction = direction / 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 Vector.new(ray_from.x + direction.x * direction_along, ray_from.y + direction.y * direction_along, ray_from.z + direction.z * direction_along)
end
function math.normalize(ang)
while (ang > 180.0) do
ang = ang - 360.0
end
while (ang < -180.0) do
ang = ang + 360.0
end
return ang
end
function Render.ShadowText(string, vector, color, font, shadow, centered)
if not centered then centered = false end
if shadow then
Render.Text(string, vector + 1, Color.new(0.0, 0.0, 0.0, color.a), font.size, font.init, false, centered)
end
Render.Text(string, vector, color, font.size, font.init, false, centered)
end
function Render.HorizontalGradient(x, y, w, h, color_1, color_2)
Render.GradientBoxFilled(Vector2.new(x, y), Vector2.new(x + w / 2, y + h), color_2, color_1, color_2, color_1)
Render.GradientBoxFilled(Vector2.new(x + w / 2, y), Vector2.new(x + w, y + h), color_1, color_2, color_1, color_2)
end
function Render.FilledBox(x, y, w, h, color)
Render.BoxFilled(Vector2.new(x, y), Vector2.new(x, y) + Vector2.new(w, h), color)
end
function C_BasePlayer:IsEnemy()
return EntityList.GetLocalPlayer() and self:IsTeamMate() == false
end
function C_BasePlayer:IsScoped()
return self:GetProp("m_bIsScoped")
end
uwu.print(('{0.54, 0.83, 1}[Aarne.club] {1, 1, 1}Welcome back, {0.78, 1, 0}%s \n'):format(Cheat.GetCheatUserName()))
local tabs = {
global = "Global",
antiaim = "Anti-Aim",
antibruteforce = "Anti-Bruteforce",
visual = "Visuals",
config = "Config",
playerlist = "Player List"
}
local vars = {}
vars.screen = EngineClient:GetScreenSize()
vars.thirdperson = Menu.FindVar("Visuals", "View", "Thirdperson", "Enable Thirdperson")
vars.minimum_damage = Menu.FindVar("Aimbot", "Ragebot", "Accuracy", "Minimum Damage")
local font = {}
-- @note: uwu?
files:create_directory()
files:download('https://fontsforyou.com/downloads/99851-smallestpixel7', 'smallest_pixel-7.ttf')
font.verdana = {}
font.verdana.size = 12
font.verdana.init = Render.InitFont("Verdana", font.verdana.size)
font.arrow = {}
font.arrow.size = 15
font.arrow.init = Render.InitFont("Verdana", font.arrow.size, {"b"})
font.verdana_r = {}
font.verdana_r.size = 12
font.verdana_r.init = Render.InitFont("Verdana", font.verdana_r.size, {'r'})
font.slow = {}
font.slow.size = 14
font.slow.init = Render.InitFont("Verdana", font.slow.size, {"b"})
font.slow2 = {}
font.slow2.size = 27
font.slow2.init = Render.InitFont("Verdana", font.slow.size, {"b"})
font.pixel = {}
font.pixel.size = 10
font.pixel.init = Render.InitFont('nl\\aarne.club\\smallest_pixel-7.ttf', font.pixel.size, {"r"})
font.prediction = {}
font.prediction.size = 12
font.prediction.init = Render.InitFont("Verdana", font.prediction.size, {"b"})
vars.dt_ref = Menu.FindVar("Aimbot", "Ragebot", "Exploits", "Double Tap")
vars.hs_ref = Menu.FindVar("Aimbot", "Ragebot", "Exploits", "Hide Shots")
vars.slowmo_ref = Menu.FindVar("Aimbot", "Anti Aim", "Misc", "Slow Walk")
vars.fakelag_ref = Menu.FindVar("Aimbot", "Anti Aim", "Fake Lag", "Enable Fake Lag")
local menu = {}
local playerlist = {}
playerlist.data = {}
playerlist.hitboxes = { 'head', 'neck', 'pelvis', 'stomach', 'lower chest', 'chest', 'upper chest', 'right thigh', 'left thigh', 'right calf',
'left calf', 'right foot', 'left foot', 'right hand', 'left hand', 'right upper arm', 'right forearm', 'left upper arm', 'left forearm' }
playerlist.ClearData = function(self)
for player_name, menu_items in pairs(self.data) do
for menu_item_name, menu_item in pairs(menu_items) do
Menu.DestroyItem(menu_item)
end
end
self.data = {}
end
playerlist.UpdateData = function(self)
self:ClearData()
local players = EntityList.GetPlayers()
if not players or #players < 1 then
return
end
for i, player in ipairs(players) do
if player:IsEnemy() then
local player_name = player:GetName()
self.data[player_name] = {
['Override'] = Menu.Switch(tabs.playerlist, player_name, ('Override %s'):format(player_name), false),
['Ignore Target'] = Menu.Switch(tabs.playerlist, player_name, 'Ignore Target', false),
['High Priority'] = Menu.Switch(tabs.playerlist, player_name, 'High Priority', false),
['Force Safety'] = Menu.Switch(tabs.playerlist, player_name, 'Force Safety', false),
['Hitbox System'] = Menu.Switch(tabs.playerlist, player_name, 'Hitbox System', false, 'For "Disable Hitbox" and "Disable Multipoint" work you need to enable this switch.'),
['Disable Hitbox'] = Menu.MultiCombo(tabs.playerlist, player_name, 'Disable Hitbox', self.hitboxes, 0, 'Enable "Hitbox System" for this feature to work.'),
['Disable Multipoint'] = Menu.MultiCombo(tabs.playerlist, player_name, 'Disable Multipoint', self.hitboxes, 0, 'Enable "Hitbox System" for this feature to work.'),
['Trashtalk'] = Menu.Switch(tabs.playerlist, player_name, 'Trashtalk', false),
['Trashtalk Text'] = Menu.TextBox(tabs.playerlist, player_name, 'Trashtalk Text', 64, ''),
}
end
end
end
playerlist:UpdateData()
playerlist.menu_keys_update = function() if #table.keys(playerlist.data) < 1 then return {'No Enemies'} end return table.keys(playerlist.data) end
playerlist.menu_keys = playerlist.menu_keys_update()
playerlist.menu_target = Menu.Combo(tabs.playerlist, 'Player List', 'Target', playerlist.menu_keys, 0)
playerlist.MenuVisible = function(self)
local taget_index = self.menu_target:Get()
local target_name = self.menu_keys[taget_index + 1]
for name, k in pairs(self.data) do
local state = (name == target_name)
for menu_name, menu_item in pairs(self.data[name]) do
self.data[name][menu_name]:SetVisible(state)
end
end
end
playerlist:MenuVisible()
playerlist.menu_target:RegisterCallback(function()
playerlist:MenuVisible()
end)
playerlist.menu_update_targets = Menu.Button(tabs.playerlist, 'Player List', 'Update Targets', '', function()
playerlist:UpdateData()
playerlist.menu_keys = playerlist.menu_keys_update()
playerlist.menu_target:UpdateList(playerlist.menu_keys)
playerlist:MenuVisible()
end)
playerlist.on_prediction = function(self)
local players = EntityList.GetPlayers()
if not players or #players < 1 then
return
end
for i, player in ipairs(players) do
if player:IsEnemy() then
local player_name = player:GetName()
if playerlist.data[player_name] then
local data = playerlist.data[player_name]
if data['Override']:Get() then
local player_index = player:EntIndex()
if data['Ignore Target']:Get() then
RageBot.IgnoreTarget(player_index)
end
if data['Force Safety']:Get() then
RageBot.ForceSafety(player_index)
end
if data['High Priority']:Get() then
RageBot.SetTargetPriority(player_index, 100)
end
if data['Hitbox System']:Get() then
for i = 0, 18 do
if data['Disable Hitbox']:Get(i + 1) then
RageBot.EnableHitbox(player_index, i, false)
end
if data['Disable Multipoint']:Get(i + 1) then
RageBot.EnableMultipoints(player_index, i, false)
end
end
end
end
end
end
end
end
local antiaim = {}
antiaim.state_list = {"Shared", "Standing", "Moving", "Crouching", "Slowwalk", "Air", "On Use", "Roll"}
antiaim.features_list = {"Override", "Disable Anti-Bruteforce", "Yaw Add Left", "Yaw Add Right", "Yaw Modifier", "Modifier Degree", "Fake Limit Type", "Left Limit", "Right Limit", "Fake Options", "LBY Mode", "Freestanding Desync", "Desync On Shot"}
menu["Anti-Aim"] = {}
menu["Anti-Aim"]["Anti-Aim"] = {}
antiaim_menu = menu["Anti-Aim"]["Anti-Aim"]
conditions_menu = menu["Anti-Aim"]
antiaim_menu["Enable Anti-Aim"] = Menu.Switch(tabs.antiaim, "Main", "Enable Anti-Aim", false)
antiaim_menu["Anti-Aim on Use"] = Menu.Switch(tabs.antiaim, "Main", "Anti-Aim on Use", false)
antiaim_menu["Anti-Backstab"] = Menu.Switch(tabs.antiaim, "Main", "Anti-Backstab", false)
antiaim_menu["Roll Anti-Aim"] = Menu.Switch(tabs.antiaim, "Main", "Roll Anti-Aim", false)
antiaim_menu["Roll on Manuals"] = Menu.Switch(tabs.antiaim, "Main", "Roll on Manuals", false, 'Will work only if u enable any manual (left, rigth)')
antiaim_menu["Roll Left"] = Menu.SliderInt(tabs.antiaim, "Main", "Roll Left", 45, -45, 45)
antiaim_menu["Roll Right"] = Menu.SliderInt(tabs.antiaim, "Main", "Roll Right", -45, -45, 45)
antiaim_menu["Conditions"] = Menu.Switch(tabs.antiaim, "Main", "Conditions", false)
antiaim_menu["Yaw Base"] = Menu.Combo(tabs.antiaim, "Main", "Yaw Base", {"Forward", "Backward", "Right", "Left", "At Target", "Freestanding"}, 0)
antiaim_menu["Tab"] = Menu.Combo(tabs.antiaim, "Main", "Condition", antiaim.state_list, 0)
for i, state in pairs(antiaim.state_list) do
conditions_menu[state] = {
["Override"] = Menu.Switch(tabs.antiaim, state, ("Override %s"):format(state), false),
["Disable Anti-Bruteforce"] = Menu.Switch(tabs.antiaim, state, "Disable Anti-Bruteforce", false),
["Yaw Add Left"] = Menu.SliderInt(tabs.antiaim, state, "Yaw Left", 0, -180, 180),
["Yaw Add Right"] = Menu.SliderInt(tabs.antiaim, state, "Yaw Right", 0, -180, 180),
["Yaw Modifier"] = Menu.Combo(tabs.antiaim, state, "Yaw Modifier", {"Disable", "Center", "Offset", "Random", "Spin"}, 0),
["Modifier Degree"] = Menu.SliderInt(tabs.antiaim, state, "Modifier Degree", 0, -180, 180),
["Fake Limit Type"] = Menu.Combo(tabs.antiaim, state, "Fake Limit Type", {"Static", "Jitter"}, 0),
["Left Limit"] = Menu.SliderInt(tabs.antiaim, state, "Fake Limit Left", 0, 0, 60),
["Right Limit"] = Menu.SliderInt(tabs.antiaim, state, "Fake Limit Right", 0, 0, 60),
["Fake Options"] = Menu.MultiCombo(tabs.antiaim, state, "Fake Options", {"Avoid Overlap", "Jitter", "Randomize Jitter"}, 0),
["LBY Mode"] = Menu.Combo(tabs.antiaim, state, "LBY Mode", {"Disable", "Opposite", "Sway"}, 0),
["Freestanding Desync"] = Menu.Combo(tabs.antiaim, state, "Freestanding Desync", {"Off", "Peek Fake", "Peek Real"}, 0),
["Desync On Shot"] = Menu.Combo(tabs.antiaim, state, "Desync On Shot", {"Disable", "Opposite", "Freestanding", "Switch"}, 0),
}
end
antiaim.update_menu = function()
local is_conditions = antiaim_menu["Conditions"]:Get()
antiaim_menu["Tab"]:SetVisible(is_conditions)
if not is_conditions then
antiaim_menu["Tab"]:Set(0)
end
antiaim_menu["Roll Right"]:SetVisible(antiaim_menu["Roll Anti-Aim"]:Get())
antiaim_menu["Roll Left"]:SetVisible(antiaim_menu["Roll Anti-Aim"]:Get())
antiaim_menu["Roll on Manuals"]:SetVisible(antiaim_menu["Roll Anti-Aim"]:Get())
for i, state in pairs(antiaim.state_list) do
local tab_index = (antiaim_menu["Tab"]:Get() + 1)
local tab_name = antiaim.state_list[tab_index]
local menu_antiaim = conditions_menu[state]
local menu_state = (tab_name == state)
for i, feature in pairs(antiaim.features_list) do
menu_antiaim[feature]:SetVisible(menu_state)
end
conditions_menu["Shared"]["Override"]:SetVisible(false)
end
end
antiaim.update_menu()
antiaim_menu["Tab"]:RegisterCallback(antiaim.update_menu)
antiaim_menu["Conditions"]:RegisterCallback(antiaim.update_menu)
antiaim_menu["Roll Anti-Aim"]:RegisterCallback(antiaim.update_menu)
antiaim.hostage_distance = function()
local local_player = EntityList.GetLocalPlayer()
if not local_player then
return false
end
local host_ent = EntityList.GetEntitiesByClassID(97)
local multi_hosts_dist = {}
for i, host in pairs(host_ent) do
local host_origin = host:GetRenderOrigin()
local local_origin = local_player:GetRenderOrigin()
local dist = host_origin:DistTo(local_origin)
table.insert(multi_hosts_dist, dist)
end
local min_dist = math.floor(math.min(unpack(multi_hosts_dist)))
if math.floor(min_dist) < 70 and not (math.floor(min_dist) == 0) then
return false
end
return true
end
antiaim.defuse_bomb_distance = function()
local local_player = EntityList.GetLocalPlayer()
if not local_player then
return false
end
local curr_team = local_player:GetProp("m_iTeamNum")
local bomb_ent = EntityList.GetEntitiesByClassID(129)
if table.getn(bomb_ent) > 0 then
local bomb_origin = bomb_ent[1]:GetRenderOrigin()
local local_origin = local_player:GetRenderOrigin()
local dist = bomb_origin:DistTo(local_origin)
if dist <= 90 and curr_team ~= 2 then
return false
end
end
return true
end
antiaim.legit_aa_time = GlobalVars.realtime
antiaim.in_use = false
antiaim.allow_on_use = function()
if not antiaim_menu["Enable Anti-Aim"]:Get() then
return
end
if not antiaim_menu["Anti-Aim on Use"]:Get() then
return
end
if Cheat.IsKeyDown(0x45) and antiaim.defuse_bomb_distance() and antiaim.hostage_distance() then
antiaim.in_use = false
if (GlobalVars.realtime >= antiaim.legit_aa_time + 0.2) then
if (antiaim.in_use == false) then
EngineClient.ExecuteClientCmd("+use")
antiaim.in_use = true
end
if (antiaim.in_use == true) then
EngineClient.ExecuteClientCmd("-use")
end
else
if (antiaim.in_use == true) then
EngineClient.ExecuteClientCmd("-use")
antiaim.in_use = false
end
antiaim.legit_aa_time = GlobalVars.realtime
end
else
antiaim.in_use = false
end
end
antiaim.GetManuals = function()
local get_yaw_base = antiaim.refs["Yaw Base"]:Get()
local freestand = (get_yaw_base == 5)
local right = (get_yaw_base == 2)
local left = (get_yaw_base == 3)
local any = (left or right or freestand)
return {
any = any,
left = left,
right = right,
}
end
antiaim.get_roll_state = function()
if not antiaim_menu["Enable Anti-Aim"]:Get() then
return false
end
if not antiaim_menu["Roll Anti-Aim"]:Get() then
return false
end
if antiaim_menu["Roll on Manuals"]:Get() and not (antiaim.GetManuals().right or antiaim.GetManuals().left) then
return false
end
return true
end
antiaim.GetPlayerState = function()
local local_player = EntityList.GetLocalPlayer()
if not local_player then
return nil
end
local flags = local_player:GetProp("m_fFlags")
local velocity = local_player:GetProp("m_vecVelocity"):Length2D()
local is_in_air = bit.band(flags, 1)
local is_crouching = bit.band(flags, 6)
if antiaim.get_roll_state() then return 'Roll' end
if antiaim.in_use then return "On Use" end
if (is_in_air == 0) or Cheat.IsKeyDown(0x20) then return "Air" end
if (is_crouching == 6) then return "Crouching" end
if vars.slowmo_ref:Get() and velocity > 3 then return "Slowwalk" end
if velocity > 3 then return "Moving" end
return "Standing"
end
antiaim.GetDesync = function()
local local_player = EntityList.GetLocalPlayer()
if not local_player then
return 0
end
local degree = math.normalize(AntiAim.GetCurrentRealRotation() - local_player:GetProp("m_angEyeAngles[1]"))
return math.abs(math.floor(tonumber(string.format("%.2f", (math.clamp(degree, AntiAim.GetMinDesyncDelta(), AntiAim.GetMaxDesyncDelta()))))))
end
antiaim.refs = {}
antiaim.refs["Pitch"] = Menu.FindVar("Aimbot", "Anti Aim", "Main", "Pitch")
antiaim.refs["Yaw Base"] = Menu.FindVar("Aimbot", "Anti Aim", "Main", "Yaw Base")
antiaim.refs["Yaw Add"] = Menu.FindVar("Aimbot", "Anti Aim", "Main", "Yaw Add")
antiaim.refs["Yaw Modifier"] = Menu.FindVar("Aimbot", "Anti Aim", "Main", "Yaw Modifier")
antiaim.refs["Modifier Degree"] = Menu.FindVar("Aimbot", "Anti Aim", "Main", "Modifier Degree")
antiaim.refs["Left Limit"] = Menu.FindVar("Aimbot", "Anti Aim", "Fake Angle", "Left Limit")
antiaim.refs["Right Limit"] = Menu.FindVar("Aimbot", "Anti Aim", "Fake Angle", "Right Limit")
antiaim.refs["Fake Options"] = Menu.FindVar("Aimbot", "Anti Aim", "Fake Angle", "Fake Options")
antiaim.refs["LBY Mode"] = Menu.FindVar("Aimbot", "Anti Aim", "Fake Angle", "LBY Mode")
antiaim.refs["Freestanding Desync"] = Menu.FindVar("Aimbot", "Anti Aim", "Fake Angle", "Freestanding Desync")
antiaim.refs["Desync On Shot"] = Menu.FindVar("Aimbot", "Anti Aim", "Fake Angle", "Desync On Shot")
antiaim.antibruteforce = {}
antiaim.antibruteforce.limits = {
min = 2,
max = 10,
}
menu["Anti-Aim"]["Anti-Bruteforce"] = {}
menu["Anti-Aim"]["Anti-Bruteforce"]["Enable Anti-Bruteforce"] = Menu.Switch(tabs.antibruteforce, "Anti-Bruteforce", "Enable", false)
menu["Anti-Aim"]["Anti-Bruteforce"]["Phases Count"] = Menu.SliderInt(tabs.antibruteforce, 'Anti-Bruteforce', 'Phases Count', antiaim.antibruteforce.limits.min, antiaim.antibruteforce.limits.min, antiaim.antibruteforce.limits.max)
menu["Anti-Aim"]["Anti-Bruteforce"]["Phases Count"]:SetVisible(false)
antiaim.antibruteforce.create_phase = Menu.Button(tabs.antibruteforce, 'Anti-Bruteforce', 'Create new phase', '', function()
if menu["Anti-Aim"]["Anti-Bruteforce"]["Phases Count"]:Get() < antiaim.antibruteforce.limits.max then
menu["Anti-Aim"]["Anti-Bruteforce"]["Phases Count"]:Set(menu["Anti-Aim"]["Anti-Bruteforce"]["Phases Count"]:Get() + 1)
end
end)
antiaim.antibruteforce.remove_phase = Menu.Button(tabs.antibruteforce, 'Anti-Bruteforce', 'Remove last phase', '', function()
if menu["Anti-Aim"]["Anti-Bruteforce"]["Phases Count"]:Get() > antiaim.antibruteforce.limits.min then
menu["Anti-Aim"]["Anti-Bruteforce"]["Phases Count"]:Set(menu["Anti-Aim"]["Anti-Bruteforce"]["Phases Count"]:Get() - 1)
end
end)
menu["Anti-Aim"]["Anti-Bruteforce Phases"] = {}
for i = 1, antiaim.antibruteforce.limits.max do
menu["Anti-Aim"]["Anti-Bruteforce Phases"][i] = Menu.SliderInt(tabs.antibruteforce, 'Phases', ('[Phase %i] Fake Limit'):format(i), 0, -60, 60)
end
antiaim.antibruteforce.MenuVisible = function()
local global_state = menu["Anti-Aim"]["Anti-Bruteforce"]["Enable Anti-Bruteforce"]:Get()
antiaim.antibruteforce.create_phase:SetVisible(global_state)
antiaim.antibruteforce.remove_phase:SetVisible(global_state)
for i = 1, #menu["Anti-Aim"]["Anti-Bruteforce Phases"] do
if menu["Anti-Aim"]["Anti-Bruteforce Phases"][i] then
menu["Anti-Aim"]["Anti-Bruteforce Phases"][i]:SetVisible(i <= menu["Anti-Aim"]["Anti-Bruteforce"]["Phases Count"]:Get() and global_state)
end
end
end
antiaim.antibruteforce.MenuVisible()
menu["Anti-Aim"]["Anti-Bruteforce"]["Enable Anti-Bruteforce"]:RegisterCallback(antiaim.antibruteforce.MenuVisible)
antiaim.antibruteforce.create_phase:RegisterCallback(antiaim.antibruteforce.MenuVisible)
antiaim.antibruteforce.remove_phase:RegisterCallback(antiaim.antibruteforce.MenuVisible)
antiaim.antibruteforce.work_blyad = true
antiaim.antibruteforce.distance = 150 -- дистанция при которой он работает
antiaim.antibruteforce.last_handled_tick = -1 -- последний тик когда сработал антибрут
antiaim.antibruteforce.current_phase = 0 -- текущая фаза -- 0 = выключено
antiaim.antibruteforce.update_time = 0 -- время последнего срабатывания
antiaim.antibruteforce.active_time = 5 -- seconds
antiaim.antibruteforce.on_event = function(event)
if not menu["Anti-Aim"]["Anti-Bruteforce"]["Enable Anti-Bruteforce"]:Get() then
return
end
if event:GetName() ~= "bullet_impact" then
return
end
if not antiaim.antibruteforce.work_blyad then
return
end
if antiaim.antibruteforce.last_handled_tick == GlobalVars.tickcount then
return
end
local localplayer = EntityList.GetLocalPlayer()
if not localplayer or not localplayer:IsAlive() then
return
end
local userid = event:GetInt("userid")
local player_object = EntityList.GetPlayerForUserID(userid)
if not player_object or player_object:IsDormant() or player_object:IsTeamMate() then
return
end
local eye_position = localplayer:GetEyePosition()
if not eye_position then
return
end
local enemy_eye_position = player_object:GetEyePosition()
if not enemy_eye_position then
return
end
local impact_vector = Vector.new(event:GetFloat("x"), event:GetFloat("y"), event:GetFloat("z"))
local distance_to_local = math.closest_point_on_ray(enemy_eye_position, impact_vector, eye_position):DistTo(eye_position)
if distance_to_local > antiaim.antibruteforce.distance then
return
end
antiaim.antibruteforce.last_handled_tick = GlobalVars.tickcount
-- это сделано что бы начинать антибрут с фазы которая противоположна текущему углу
if antiaim.antibruteforce.current_phase ~= 0 then
antiaim.antibruteforce.current_phase = antiaim.antibruteforce.current_phase + 1
if antiaim.antibruteforce.current_phase > menu["Anti-Aim"]["Anti-Bruteforce"]["Phases Count"]:Get() then
antiaim.antibruteforce.current_phase = 1
end
else
local inverter = AntiAim.GetInverterState() and 1 or -1
antiaim.antibruteforce.current_phase = 1
for i = 1, menu["Anti-Aim"]["Anti-Bruteforce"]["Phases Count"]:Get() do
local angle = menu["Anti-Aim"]["Anti-Bruteforce Phases"][i]:Get()
if angle * inverter > 0 then
antiaim.antibruteforce.current_phase = i
break
end
end
end
antiaim.antibruteforce.update_time = GlobalVars.realtime + antiaim.antibruteforce.active_time
end
local antibackstab = {}
antibackstab.update = function()
if not antiaim_menu["Anti-Backstab"]:Get() then
return false
end
local local_player = EntityList.GetLocalPlayer()
if not local_player or not local_player:IsAlive() then
return false
end
local players = EntityList.GetPlayers()
if not players or #players < 0 then
return false
end
local local_origin = local_player:GetRenderOrigin()
local enemy_w_knife = table.filter(players, function(player)
return (not player:IsDormant() and player:IsEnemy() and player:IsAlive() and player:GetActiveWeapon() and player:GetActiveWeapon():IsKnife())
end)
local dist_to_local_enemy = table.filter(enemy_w_knife, function(player)
return (local_origin:DistTo(player:GetRenderOrigin()) < 150)
end)
if #dist_to_local_enemy > 0 then
return true
end
return false
end
antiaim.angle_vec = function(angles)
local forward, right = Vector.new(), Vector.new()
local pitch, yaw, roll = angles.pitch * math.pi_divided, angles.yaw * math.pi_divided, angles.roll * math.pi_divided
local cp = math.cos(pitch)
local sp = math.sin(pitch)
local cy = math.cos(yaw)
local sy = math.sin(yaw)
local cr = math.cos(roll)
local sr = math.sin(roll)
forward.x = cp * cy
forward.y = cp * sy
forward.z = -sp
right.x = -1 * sr * sp * cy + -1 * cr * -sy
right.y = -1 * sr * sp * sy + -1 * cr * cy
right.z = -1 * sr * cp
return forward, right
end
antiaim.actual_mov = Vector2.new(0, 0)
antiaim.mov_fix = function(cmd)
local frL, riL = antiaim.angle_vec(QAngle.new(0, cmd.viewangles.yaw, 0))
local frC, riC = antiaim.angle_vec(cmd.viewangles)
frL.z = 0
riL.z = 0
frC.z = 0
riC.z = 0
frL = frL / frL:Length()
riL = riL / riL:Length()
frC = frC / frC:Length()
riC = riC / riC:Length()
local worldCoords = frL * actual_mov.x + riL * actual_mov.y;
cmd.sidemove = (frC.x * worldCoords.y - frC.y * worldCoords.x) / (riC.y * frC.x - riC.x * frC.y)
cmd.forwardmove = (riC.y * worldCoords.x - riC.x * worldCoords.y) / (riC.y * frC.x - riC.x * frC.y)
end
antiaim.roll = function(cmd)
if not antiaim.get_roll_state() then
return
end
cmd.viewangles.roll = AntiAim.GetInverterState() and antiaim_menu["Roll Left"]:Get() or antiaim_menu["Roll Right"]:Get()
end
antiaim.roll_movement = function(cmd)
if not antiaim.get_roll_state() then
return
end
actual_mov = Vector2.new(cmd.forwardmove, cmd.sidemove)
antiaim.mov_fix(cmd)
end
antiaim.on_prediction = function()
if not antiaim_menu["Enable Anti-Aim"]:Get() then
return
end
local player_state = antiaim.GetPlayerState()
if not player_state then
return
end
local is_inverted = AntiAim.GetInverterState()
local data = conditions_menu[player_state]
if not (data["Override"]:Get() and antiaim_menu["Conditions"]:Get()) then
data = conditions_menu["Shared"]
end
for key, aa_ref in pairs(antiaim.refs) do
local get_value = function()
if (key == "Pitch") then
return antiaim.in_use and 0 or 1
end
if (key == "Yaw Base") then
return antiaim.in_use and 0 or antiaim_menu["Yaw Base"]:Get()
end
if antiaim.antibruteforce.current_phase ~= 0 and key == "Yaw Modifier" then
return 0
end
if (key == "Yaw Add") then
return is_inverted and data["Yaw Add Left"]:Get() or data["Yaw Add Right"]:Get()
end
if (data["Fake Limit Type"]:Get() == 1) then
local tickcount = GlobalVars.tickcount % 4 > 1
if (key == "Left Limit") then
return tickcount and data["Left Limit"]:Get() or 18
end
if (key == "Right Limit") then
return tickcount and data["Right Limit"]:Get() or 18
end
end
return data[key]:Get()
end
local value = get_value()
antiaim.refs[key]:Set(value)
end
if antibackstab.update() and not antiaim.in_use then
antiaim.refs["Yaw Base"]:Set(4)
antiaim.refs["Yaw Add"]:Set(180)
end
antiaim.antibruteforce.work_blyad = not data["Disable Anti-Bruteforce"]:Get()
if not antiaim.antibruteforce.work_blyad or antiaim.antibruteforce.current_phase == 0 or antiaim.antibruteforce.update_time < GlobalVars.realtime then
antiaim.antibruteforce.current_phase = 0
return
end
local menu_item = menu["Anti-Aim"]["Anti-Bruteforce Phases"][antiaim.antibruteforce.current_phase]
if not menu_item then
return
end
local angle = menu_item:Get()
AntiAim.OverrideInverter(angle < 0)
AntiAim.OverrideLimit(math.abs(angle))
end
menu["Anti-Aim"]["Animations"] = {}
menu["Anti-Aim"]["Animations"]["Pitch on Land"] = Menu.Switch(tabs.antiaim, "Misc", "Pitch on Land", false)
menu["Anti-Aim"]["Animations"]["Static Air Legs"] = Menu.Switch(tabs.antiaim, "Misc", "Static Air Legs", false)
menu["Anti-Aim"]["Animations"]["Static Landing Legs"] = Menu.Switch(tabs.antiaim, "Misc", "Static Landing Legs", false)
animation_breaker.set_params = function(player_ptr, layer, start_val, end_val)
player_ptr = ffi.cast("unsigned int", player_ptr)
if player_ptr == 0x0 then
return false
end
local studio_hdr = ffi.cast("void**", player_ptr + ffi_handler.offsets.m_pStudioHdr)[0]
if studio_hdr == nil then
return false
end
local pose_params = ffi_handler.get_pose_parameters(studio_hdr, layer)
if pose_params == nil then
return
end
if animation_breaker.cache[layer] == nil then
animation_breaker.cache[layer] = {}
animation_breaker.cache[layer].m_flStart = pose_params.m_flStart
animation_breaker.cache[layer].m_flEnd = pose_params.m_flEnd
animation_breaker.cache[layer].m_flState = pose_params.m_flState
animation_breaker.cache[layer].installed = false
return true
end
if start_val ~= nil and not animation_breaker.cache[layer].installed then
pose_params.m_flStart = start_val
pose_params.m_flEnd = end_val
pose_params.m_flState = (pose_params.m_flStart + pose_params.m_flEnd) / 2
animation_breaker.cache[layer].installed = true
return true
end
if animation_breaker.cache[layer].installed then
pose_params.m_flStart = animation_breaker.cache[layer].m_flStart
pose_params.m_flEnd = animation_breaker.cache[layer].m_flEnd
pose_params.m_flState = animation_breaker.cache[layer].m_flState
animation_breaker.cache[layer].installed = false
return true
end
return false
end
animation_breaker.handle_prediction = function(cmd)
local local_player = ffi_handler.get_client_entity(EngineClient.GetLocalPlayer())
if local_player == nil then
return
end
local local_player_addr = ffi.cast("unsigned int", local_player)
if local_player_addr == 0x0 then
return
end
local animstate = ffi.cast( "void**", local_player_addr + ffi_handler.offsets.animstate)[0]
if animstate == nil then
return
end
animstate = ffi.cast("unsigned int", animstate)
if animstate == 0x0 then
return
end
local landing_anim = ffi.cast("bool*", animstate + ffi_handler.offsets.landing_anim)[0]
if landing_anim == nil then
return
end
if menu["Anti-Aim"]["Animations"]["Static Landing Legs"]:Get() then
animation_breaker.set_params(local_player, 0, -180, -179)
end
if menu["Anti-Aim"]["Animations"]["Static Air Legs"]:Get() then
animation_breaker.set_params(local_player, 6, 0.9, 1)
end
if menu["Anti-Aim"]["Animations"]["Pitch on Land"]:Get() and landing_anim and bit.band(cmd.buttons, 2) == 0 then
animation_breaker.set_params(local_player, 12, 0.999, 1)
end
end
animation_breaker.handle_cmove = function()
local local_player = ffi_handler.get_client_entity(EngineClient.GetLocalPlayer())
if local_player == nil then
return
end
for k, v in pairs(animation_breaker.cache) do
animation_breaker.set_params(local_player, k)
end
end
animation_breaker.on_destroy = function()
local local_player = ffi_handler.get_client_entity(EngineClient.GetLocalPlayer())
if local_player == nil then
return
end
for k, v in pairs(animation_breaker.cache) do
animation_breaker.set_params(local_player, k)
end
end
menu["Visual"] = {}
local binds = {}
menu["Visual"]["Binds"] = {}
binds_menu = menu["Visual"]["Binds"]
binds_menu["Enable indicators"] = Menu.MultiCombo(tabs.visual, "Visual", "Indicators", {"Desync & Line / State", "Script name", "Binds", "Min. Damage"}, 0)
binds_menu["Binds"] = Menu.MultiCombo(tabs.visual, "Visual", "Binds", {"Double Tap", "Hide Shots", "Minimum Damage"}, 0)
binds_menu["Indicators Type"] = Menu.Combo(tabs.visual, "Visual", "Indicators type", {"Default", "Pixel"}, 0)
binds_menu["Min Damage X"] = Menu.SliderInt(tabs.visual, "Colors", "[Min. Damage] X", math.floor(vars.screen.x / 2), 0, math.floor(vars.screen.x))
binds_menu["Min Damage Y"] = Menu.SliderInt(tabs.visual, "Colors", "[Min. Damage] Y", math.floor(vars.screen.y / 2), 0, math.floor(vars.screen.y))
binds_menu["Script name Color"] = Menu.ColorEdit(tabs.visual, "Colors", "[Indicators] Script name", Color.RGBA(150, 150, 255))
binds_menu["Desync Line Color"] = Menu.ColorEdit(tabs.visual, "Colors", "[Indicators] Desync", Color.RGBA(150, 150, 255))
binds.menu_update = function()
local state = binds_menu["Enable indicators"]
binds_menu["Script name Color"]:SetVisible(state:Get(2))
binds_menu["Desync Line Color"]:SetVisible(state:Get(1))
binds_menu["Min Damage X"]:SetVisible(state:Get(4))
binds_menu["Min Damage Y"]:SetVisible(state:Get(4))
binds_menu["Binds"]:SetVisible(state:Get(3))
end
binds.menu_update()
binds_menu["Enable indicators"]:RegisterCallback(binds.menu_update)
local min_damage = {}
min_damage.on_draw = function()
if not binds_menu["Enable indicators"]:Get(4) then
return
end
local local_player = EntityList.GetLocalPlayer()
if not local_player or not local_player:IsAlive() then
return
end
local x, y = binds_menu["Min Damage X"]:Get(), binds_menu["Min Damage Y"]:Get()
Render.Text(tostring(vars.minimum_damage:Get()), Vector2.new(x, y), Color.new(1.0, 1.0, 1.0), font.pixel.size, font.pixel.init, true)
end
local mt = {
name = "",
alpha = 0,
add_y = 13,
color = Color.RGBA(0, 255, 0),
GetName = function(self)
return self.name
end,
GetColor = function(self)
return self.color
end,
GetBool = function()
return true
end,
CustomRender = function(name, vector, color)
Render.ShadowText(name, vector, color, font.verdana, true, true)
end,
}
binds.data = {}
binds.data.CreateObject = function(self, array)
table.insert(self, setmetatable(array, {__index = mt}))
end
-- @type: default
binds.data:CreateObject({
name = "0°",
GetName = function(self)
local desync = antiaim.GetDesync()
self.name = ("%s°"):format(desync)
return self.name
end,
GetColor = function()
local color = binds_menu["Desync Line Color"]:Get()
color.a = 1.0
return color
end,
GetBool = function()
return binds_menu["Enable indicators"]:Get(1) and binds_menu["Indicators Type"]:Get() == 0 and antiaim.antibruteforce.current_phase == 0
end,
CustomRender = function(name, vector, color)
local w = (90 / 60 * antiaim.GetDesync())
Render.ShadowText(name, Vector2.new(vector.x, vector.y - 10), Color.new(1.0, 1.0, 1.0, color.a), font.verdana, true, true)
Render.HorizontalGradient(vector.x - w / 2, vector.y, w, 1, color, Color.new(color.r, color.g, color.b, 0))
end,
})
binds.data:CreateObject({
name = "",
GetName = function(self)
local desync = antiaim.GetDesync()
self.name = ("%s°"):format(desync)
return self.name
end,
GetColor = function()
local color = binds_menu["Desync Line Color"]:Get()
color.a = 1.0
return color
end,
GetBool = function()
return binds_menu["Enable indicators"]:Get(1) and binds_menu["Indicators Type"]:Get() == 0 and antiaim.antibruteforce.current_phase ~= 0
end,
CustomRender = function(name, vector, color)
local w = 90 / 5 * (antiaim.antibruteforce.update_time - GlobalVars.realtime)
name = ('Phase: %s'):format(antiaim.antibruteforce.current_phase)
Render.ShadowText(name, Vector2.new(vector.x, vector.y - 10), Color.new(1.0, 1.0, 1.0, color.a), font.verdana, true, true)
Render.HorizontalGradient(vector.x - w / 2, vector.y, w, 1, color, Color.new(color.r, color.g, color.b, 0))
end,
})
binds.data:CreateObject({
name = "AARNE YAW",
GetName = function(self)
if antiaim.in_use then
return "LEGIT AA"
end
if antiaim.GetManuals().any then
return "MANUAL AA"
end
return self.name
end,
GetColor = function()
local color = binds_menu["Script name Color"]:Get()
color.a = 1.0
return color
end,
GetBool = function()
return binds_menu["Enable indicators"]:Get(2) and binds_menu["Indicators Type"]:Get() == 0
end,
})
binds.data:CreateObject({
name = "DT",
GetColor = function()
local dt_charge = Exploits.GetCharge()
return Color.new(1.0 - (1.0 * dt_charge), dt_charge, 0.0)
end,
GetBool = function()
if vars.dt_ref:Get() and binds_menu["Enable indicators"]:Get(3) and binds_menu["Indicators Type"]:Get() == 0 and binds_menu["Binds"]:Get(1) then
return true
end
return false
end,
CustomRender = function(name, vector, color)
local dt_charge = Exploits.GetCharge()
Render.ShadowText(name, vector, color, font.verdana, true, true)
Render.Circle(Vector2.new(vector.x - 13, vector.y), 4, 30, color, 1.6, 0, 360 * dt_charge)
end,
})
binds.data:CreateObject({
name = "ON-SHOT",
GetBool = function()
if vars.hs_ref:Get() and not vars.dt_ref:Get() and binds_menu["Enable indicators"]:Get(3) and binds_menu["Indicators Type"]:Get() == 0 and binds_menu["Binds"]:Get(2) then
return true
end
return false
end,
})
binds.data:CreateObject({
name = "DMG",
GetBool = function()
local CheatBinds = Cheat.GetBinds()
for i, bind in ipairs(CheatBinds) do
local bind_name = bind:GetName()
local bind_is_active = bind:IsActive()
if (bind_name == "Minimum Damage") and bind_is_active and binds_menu["Enable indicators"]:Get(3) and binds_menu["Indicators Type"]:Get() == 0 and binds_menu["Binds"]:Get(3) then
return true
end
end
return false
end
})
-- @type: pixel
local pixel_color_1 = Color.new(1.0, 1.0, 1.0)
local pixel_color_2 = Color.new(1.0, 1.0, 1.0)
binds.data:CreateObject({
name = "AARNE-YAW",
add_y = 10,
GetName = function(self)
return self.name
end,
GetColor = function()
local color = binds_menu["Script name Color"]:Get()
color.a = 1.0
return color
end,
GetBool = function()
return binds_menu["Enable indicators"]:Get(2) and binds_menu["Indicators Type"]:Get() == 1
end,
CustomRender = function(name, vector, color)
local is_inverted = AntiAim.GetInverterState()
pixel_color_1 = math.lerp(pixel_color_1, is_inverted and Color.new(1.0, 1.0, 1.0, color.a) or color)
pixel_color_2 = math.lerp(pixel_color_2, is_inverted and color or Color.new(1.0, 1.0, 1.0, color.a))
Render.Text("AARNE-\x20\x20\x20", vector, pixel_color_1, font.pixel.size, font.pixel.init, true, true)
local text_size = Render.CalcTextSize("AARNE-", font.pixel.size, font.pixel.init) - Render.CalcTextSize("\x20\x20\x20", font.pixel.size, font.pixel.init)
vector.x = vector.x + text_size.x
Render.Text("YAW", vector, pixel_color_2, font.pixel.size, font.pixel.init, true, true)
end,
})
binds.data:CreateObject({
name = '',
add_y = 10,
GetName = function()
return ('PHASE: %s'):format(antiaim.antibruteforce.current_phase)
end,
GetColor = function()
return Color.new(1.0, 1.0, 1.0)
end,
GetBool = function()
return binds_menu["Enable indicators"]:Get(1) and binds_menu["Indicators Type"]:Get() == 1 and antiaim.antibruteforce.current_phase ~= 0
end,
CustomRender = function(name, vector, color)
Render.Text(name, vector, color, font.pixel.size, font.pixel.init, true, true)
local name_size = Render.CalcTextSize(name, font.pixel.size, font.pixel.init)
local val = antiaim.antibruteforce.update_time - GlobalVars.realtime
Render.Circle(Vector2.new(vector.x - name_size.x / 2 - 6, vector.y), 3, 30, color, 1, 0, 360 / 5 * val)
end,
})
binds.data:CreateObject({
name = "",
add_y = 10,
GetName = function(self)
local state = antiaim.GetPlayerState()
if state then
return ("%s"):format(state)
end
return self.name
end,
GetColor = function()
return Color.new(1.0, 1.0, 1.0)
end,
GetBool = function()
return binds_menu["Enable indicators"]:Get(1) and binds_menu["Indicators Type"]:Get() == 1 and antiaim.antibruteforce.current_phase == 0
end,
CustomRender = function(name, vector, color)
Render.Text(name, vector, color, font.pixel.size, font.pixel.init, true, true)
end,
})
binds.data:CreateObject({
name = "DT",
add_y = 10,
GetColor = function()
local dt_charge = Exploits.GetCharge()
return Color.new(1.0 - (1.0 * dt_charge), dt_charge, 0.0)
end,
GetBool = function()
if vars.dt_ref:Get() and binds_menu["Enable indicators"]:Get(3) and binds_menu["Indicators Type"]:Get() == 1 and binds_menu["Binds"]:Get(1) then
return true
end
return false
end,
CustomRender = function(name, vector, color)
Render.Text(name, vector, color, font.pixel.size, font.pixel.init, true, true)
end,
})
binds.data:CreateObject({
name = "HS",
add_y = 10,
GetBool = function()
if vars.hs_ref:Get() and not vars.dt_ref:Get() and binds_menu["Enable indicators"]:Get(3) and binds_menu["Indicators Type"]:Get() == 1 and binds_menu["Binds"]:Get(2) then
return true
end
return false
end,
CustomRender = function(name, vector, color)
Render.Text(name, vector, color, font.pixel.size, font.pixel.init, true, true)
end,
})
binds.data:CreateObject({
name = "DMG",
add_y = 10,
GetColor = function()
return Color.RGBA(204, 183, 106)
end,
GetBool = function()
local CheatBinds = Cheat.GetBinds()
for i, bind in ipairs(CheatBinds) do
local bind_name = bind:GetName()
local bind_is_active = bind:IsActive()
if (bind_name == "Minimum Damage") and bind_is_active and binds_menu["Enable indicators"]:Get(3) and binds_menu["Indicators Type"]:Get() == 1 and binds_menu["Binds"]:Get(3) then
return true
end
end
return false
end,
CustomRender = function(name, vector, color)
Render.Text(name, vector, color, font.pixel.size, font.pixel.init, true, true)
end,
})
binds.GetActiveBinds = function(self)
local active_binds = {}
for i, data in ipairs(self.data) do
data.alpha = math.lerp(data.alpha, data:GetBool() and 255 or 0, 0.095)
if data.alpha > 1 then
table.insert(active_binds, data)
end
end
return active_binds
end
binds.on_draw = function()
local local_player = EntityList.GetLocalPlayer()
if not local_player or not local_player:IsAlive() then
return
end
local x, y, plus = vars.screen.x / 2, vars.screen.y / 2, 0
local active_data = binds:GetActiveBinds()
for i, data in pairs(active_data) do
local alpha = data.alpha / 255
local color = data:GetColor()
local name = data:GetName()
color.a = alpha
local off = y + (plus * data.add_y) + 30
data.CustomRender(name, Vector2.new(x, off), color)
plus = plus + alpha
end
end
local arrows = {}
menu["Visual"]["Arrows"] = {}
arrows_menu = menu["Visual"]["Arrows"]
arrows_menu["Arrows"] = Menu.Combo(tabs.visual, "Visual", "Arrows", {"Disable", "Default", "TeamSkeet"}, 0)
arrows_menu["Size"] = Menu.SliderInt(tabs.visual, "Visual", "[Arrow] Size", 9, 0, 50)
arrows_menu["Distance"] = Menu.SliderInt(tabs.visual, "Visual", "[Arrow] Distance", 43, 0, 60)
arrows_menu["Arrow Color"] = Menu.ColorEdit(tabs.visual, "Colors", "[Arrows] Color", Color.RGBA(150, 150, 255))
arrows_menu["Inverted Color"] = Menu.ColorEdit(tabs.visual, "Colors", "[Arrows] Inverted Color", Color.RGBA(150, 150, 255))
arrows.update_menu = function()
local state = arrows_menu["Arrows"]:Get()
arrows_menu["Size"]:SetVisible(state == 2)
arrows_menu["Distance"]:SetVisible(state == 1 or state == 2)
arrows_menu["Arrow Color"]:SetVisible(state == 1 or state == 2)
arrows_menu["Inverted Color"]:SetVisible(state == 2)
end
arrows.update_menu()
arrows_menu["Arrows"]:RegisterCallback(arrows.update_menu)
arrows.by_text = function(x, y, arr_col, is_manual)
local distance = arrows_menu["Distance"]:Get()
local arrow = ""
local dist = 0
if is_manual.left then
arrow = "<"
dist = -distance
end
if is_manual.right then
arrow = ">"
dist = distance
end
Render.ShadowText(arrow, Vector2.new(x + dist, y), arr_col, font.arrow, true, true)
end
arrows.by_poly = function(x, y, arr_col, inv_col, is_manual)
local distance, height, size = arrows_menu["Distance"]:Get(), arrows_menu["Size"]:Get(), 5 + arrows_menu["Size"]:Get()
local m_left = is_manual.left and arr_col or Color.RGBA(17, 17, 17, 130)
local m_right = is_manual.right and arr_col or Color.RGBA(17, 17, 17, 130)
local s_right = AntiAim.GetInverterState() and Color.RGBA(17, 17, 17, 130) or inv_col
local s_left = AntiAim.GetInverterState() and inv_col or Color.RGBA(17, 17, 17, 130)
Render.PolyFilled(m_left, Vector2.new(x - distance, y - height), Vector2.new(x - (distance + size), y), Vector2.new(x - distance, y + height))
Render.PolyFilled(m_right, Vector2.new(x + distance, y - height), Vector2.new(x + (distance + size), y), Vector2.new(x + distance, y + height))
Render.BoxFilled(Vector2.new(x - (distance - 2), y - height), Vector2.new(x - (distance - 2) + 2, y + height), s_left)
Render.BoxFilled(Vector2.new(x + (distance - 2), y - height), Vector2.new(x + (distance - 2) - 2, y + height), s_right)
end
arrows.on_draw = function()
local local_player = EntityList.GetLocalPlayer()
if not local_player or not local_player:IsAlive() then
return
end
local state = arrows_menu["Arrows"]:Get()
if state == 0 then
return
end
local x, y = vars.screen.x / 2, vars.screen.y / 2
local is_manual = antiaim.GetManuals()
local arr_col = arrows_menu["Arrow Color"]:Get()
local inv_col = arrows_menu["Inverted Color"]:Get()
arr_col.a = 1.0
inv_col.a = 1.0
if state == 1 then
arrows.by_text(x, y, arr_col, is_manual)
end
if state == 2 then
arrows.by_poly(x, y, arr_col, inv_col, is_manual)
end
end
menu["Visual"]["Hitlogs"] = {}
menu["Visual"]["Hitlogs"]["Draw Type"] = Menu.MultiCombo(tabs.visual, "Visual", "Hitlogs", {"Custom Render", "Under Crosshair", "Console Print", }, 0)
local hitlogs = {}
hitlogs.data = {}
hitlogs.count = {
"st",
"nd",
"rd"
}
hitlogs.shots = 0
hitlogs.hitgroup_names = {'head', 'chest', 'stomach', 'left arm', 'right arm', 'left leg', 'right leg', 'neck', '?', 'gear' }
hitlogs.reasons = { "hit", "resolver", "spread", "occlusion", "prediction error" }
hitlogs.reset = function(event)
if event:GetName() == "round_start" then
hitlogs.shots = 0
end
end
hitlogs.shot_data = {}
hitlogs.on_ragebot = function(shot)
hitlogs.shot_data = {
backtrack = shot.backtrack,
hitchance = shot.hitchance,
damage = shot.damage,
angle = shot.angle,
}
end
hitlogs.on_registered_shot = function(shot)
local reason = hitlogs.reasons[shot.reason + 1]
local name = EntityList.GetPlayer(shot.target_index):GetName() or "?"
local hitchance = math.floor(shot.hitchance + 0.5)
hitlogs.shots = hitlogs.shots + 1
local count_shot = ("%i%s"):format(hitlogs.shots, hitlogs.count[hitlogs.shots] or "th")
local log = nil
local print_log = nil
if reason == "hit" then
print_log = ("{1, 1, 1}Registered {0.78, 1, 0}%s {1, 1, 1}shot in {0.78, 1, 0}%s's %s {1, 1, 1}[damage: {0.78, 1, 0}%s{1, 1, 1}/{0.78, 1, 0}%s {1, 1, 1}| hitchance: {0.78, 1, 0}%s{1, 1, 1}/{0.78, 1, 0}%s {1, 1, 1}| history: {0.78, 1, 0}%s{1, 1, 1}]"):format(count_shot, name, hitlogs.hitgroup_names[shot.hitgroup], shot.damage, hitlogs.shot_data.damage, hitchance, hitlogs.shot_data.hitchance, shot.backtrack)
log = ("Registered %s shot in %s's %s [damage: %s/%s | hitchance: %s/%s | history: %s]"):format(count_shot, name, hitlogs.hitgroup_names[shot.hitgroup], shot.damage, hitlogs.shot_data.damage, hitchance, hitlogs.shot_data.hitchance, shot.backtrack)
else
print_log = ("{1, 1, 1}Missed {1, 0, 0}%s {1, 1, 1}shot in {1, 0, 0}%s's %s {1, 1, 1}due to {1, 0, 0}%s {1, 1, 1}[damage: {1, 0, 0}%s{1, 1, 1}/{1, 0, 0}%s {1, 1, 1}| hitchance: {1, 0, 0}%s{1, 1, 1}/{1, 0, 0}%s {1, 1, 1}| history: {1, 0, 0}%s{1, 1, 1}]"):format(count_shot, name, hitlogs.hitgroup_names[shot.hitgroup + 1], reason, shot.damage, hitlogs.shot_data.damage, hitchance, hitlogs.shot_data.hitchance, shot.backtrack)
log = ("Missed %s shot in %s's %s due to %s [damage: %s/%s | hitchance: %s/%s | history: %s]"):format(count_shot, name, hitlogs.hitgroup_names[shot.hitgroup + 1], reason, shot.damage, hitlogs.shot_data.damage, hitchance, hitlogs.shot_data.hitchance, shot.backtrack)
end
if menu["Visual"]["Hitlogs"]["Draw Type"]:GetBool(3) then
uwu.print('{0.54, 0.83, 1}[Aarne.club] ' .. print_log .. '\n')
end
if log and menu["Visual"]["Hitlogs"]["Draw Type"]:GetBool(1) then
table.insert(hitlogs.data, {
log = print_log,
alpha = 1,
realtime = GlobalVars.realtime,
})
end
end
hitlogs.on_draw = function()
if not menu["Visual"]["Hitlogs"]["Draw Type"]:GetBool(1) then
return
end
local x, y, plus = 5, 5, 0
for i, data in ipairs(hitlogs.data) do
data.alpha = math.lerp(data.alpha, (data.realtime + 5 < GlobalVars.realtime) and 0 or 255, 0.095)
local alpha = data.alpha / 255
local off = y + 13 * plus
uwu.print(data.log, Vector2.new(x, off), alpha, font.verdana_r, false)
--Render.ShadowText(data.log, Vector2.new(x, off), Color.new(1.0, 1.0, 1.0, alpha), font.verdana_r, true)
plus = plus + alpha
if data.alpha <= 0 then
table.remove(hitlogs.data, i)
end
end
end
hitlogs.on_hurt = function(event)
if not (event:GetName() == "player_hurt") then
return
end
if not menu["Visual"]["Hitlogs"]["Draw Type"]:GetBool(2) then
return
end
local local_player = EntityList.GetLocalPlayer()
local userid = EntityList.GetPlayerForUserID(event:GetInt("userid", 0))
local attacker = EntityList.GetPlayerForUserID(event:GetInt("attacker", 0))
if not (local_player == attacker) then
return
end
local target_name = userid:GetName()
local health = event:GetInt("health", 0)
local damage = event:GetInt("dmg_health", 0)
local hitgroup = event:GetInt("hitgroup", 0)
local hitgroup_name = hitlogs.hitgroup_names[hitgroup] or "?"
local log = ("%s %s -%s (%s)"):format(target_name, hitgroup_name, damage, health)
binds.data:CreateObject({
name = log,
time = GlobalVars.realtime,
GetBool = function(self)
if self.time + 5 < GlobalVars.realtime then
return false
end
return true
end,
GetColor = function()
if health <= 0 then
return Color.new(0.5, 0.2, 0.2)
end
return Color.new(1.0, 1.0, 1.0)
end,
CustomRender = function(name, vector, color)
vector.y = vector.y + 20
Render.ShadowText(name, vector, color, font.verdana, true, true)
end
})
end
local snaplines = {}
menu["Visual"]["Snaplines"] = {}
menu["Visual"]["Snaplines"]["Enable and Color"] = Menu.SwitchColor(tabs.visual, "Visual", "Snaplines", false, Color.RGBA(255, 255, 255, 100))
snaplines.on_draw = function()
if not menu["Visual"]["Snaplines"]["Enable and Color"]:GetBool() then
return
end
local snap_color = menu["Visual"]["Snaplines"]["Enable and Color"]:GetColor()
local hitbox = 4
local players = EntityList.GetPlayers()
local local_player = EntityList.GetLocalPlayer()
if not local_player or not local_player:IsAlive() or not players or #players < 1 then
return
end
local local_hitbox = local_player:GetHitboxCenter(hitbox)
local local_hitbox_2d = Render.WorldToScreen(local_hitbox)
if not vars.thirdperson:Get() then
local_hitbox_2d = Vector2.new(vars.screen.x / 2, vars.screen.y)
end
for i, player in ipairs(players) do
if player:IsEnemy() and player:IsAlive() and not player:IsDormant() then
local player_hitbox = player:GetHitboxCenter(hitbox)
local player_hitbox_2d = Render.WorldToScreen(player_hitbox)
Render.Line(local_hitbox_2d, player_hitbox_2d, snap_color)
end
end
end
local hitmarker = {}
menu["Visual"]["Hitmarker"] = {}
menu["Visual"]["Hitmarker"]["Enable Hitmarker"] = Menu.MultiCombo(tabs.visual, "Visual", "Hitmarker", {'Damage', 'Сross'}, 0)
menu["Visual"]["Hitmarker"]['Color'] = Menu.ColorEdit(tabs.visual, 'Colors', '[Hitmarker] Color', Color.RGBA(255, 255, 255))
hitmarker.update_menu = function()
local state = menu["Visual"]["Hitmarker"]["Enable Hitmarker"]:Get(1) or menu["Visual"]["Hitmarker"]["Enable Hitmarker"]:Get(2)
menu["Visual"]["Hitmarker"]['Color']:SetVisible(state)
end
hitmarker.update_menu()
menu["Visual"]["Hitmarker"]["Enable Hitmarker"]:RegisterCallback(hitmarker.update_menu)
hitmarker.data = {}
hitmarker.on_hurt = function(event)
if not menu["Visual"]["Hitmarker"]["Enable Hitmarker"]:Get(1) and not menu["Visual"]["Hitmarker"]["Enable Hitmarker"]:Get(2) then
return
end
if not (event:GetName() == "player_hurt") then
return
end
local local_player = EntityList.GetLocalPlayer()
if not local_player then
return
end
local userid = EntityList.GetPlayerForUserID(event:GetInt("userid", 0))
local attacker = EntityList.GetPlayerForUserID(event:GetInt("attacker", 0))
if not (local_player == attacker) then
return
end
local local_weapon = local_player:GetActiveWeapon()
if not local_weapon or not local_weapon:IsGun() then
return
end
local damage = event:GetInt("dmg_health", 0)
local hitgroup = event:GetInt("hitgroup", 0)
local userid_hitbox = userid:GetHitboxCenter(hitgroup)
local color = menu["Visual"]["Hitmarker"]['Color']:Get()
table.insert(hitmarker.data, {
alpha = 1,
move = 1,
color = color,
damage = damage,
hitgroup = hitgroup,
userid_hitbox = userid_hitbox,
realtime = GlobalVars.realtime,
})
end
hitmarker.on_draw = function()
for i, data in ipairs(hitmarker.data) do
local hitgroup = data.hitgroup
local userid_hitbox = data.userid_hitbox
if not userid_hitbox or not userid_hitbox.x then
return
end
local userid_hitbox_2d = Render.WorldToScreen(userid_hitbox)
local damage = tostring(data.damage)
data.alpha = math.lerp(data.alpha, data.move >= 200 and 0 or 255, 0.095)
local alpha = data.alpha / 255
data.color.a = alpha
if menu["Visual"]["Hitmarker"]["Enable Hitmarker"]:Get(2) then
Render.FilledBox(userid_hitbox_2d.x - 4.5, userid_hitbox_2d.y, 10, 1, data.color)
Render.FilledBox(userid_hitbox_2d.x, userid_hitbox_2d.y - 4.5, 1, 10, data.color)
end
data.move = math.lerp(data.move, 255, 0.005)
userid_hitbox_2d.y = userid_hitbox_2d.y - (70 * data.move / 255)
if menu["Visual"]["Hitmarker"]["Enable Hitmarker"]:Get(1) then
Render.ShadowText(damage, userid_hitbox_2d, data.color, font.verdana_r, true, true)
end
if data.move >= 200 then
if data.alpha < 1 then
table.remove(hitmarker.data, i)
end
end
end
end
local scope_line = {}
scope_line.var = Menu.FindVar("Visuals", "View", "Camera", "Remove Scope")
menu["Visual"]["Custom Scope"] = {}
scope_line_menu = menu["Visual"]["Custom Scope"]
scope_line_menu["Enable"] = Menu.Switch(tabs.visual, "Visual", "Custom Scope", false)
scope_line_menu["Offset"] = Menu.SliderInt(tabs.visual, "Visual", "Offset", 10, 0, 500)
scope_line_menu["Length"] = Menu.SliderInt(tabs.visual, "Visual", "Length", 60, 0, 1000)
scope_line_menu["Color 1"] = Menu.ColorEdit(tabs.visual, "Colors", "[Custom Scope] Start", Color.RGBA(255, 255, 255))
scope_line_menu["Color 2"] = Menu.ColorEdit(tabs.visual, "Colors", "[Custom Scope] End", Color.RGBA(255, 255, 255, 0))
scope_line.update_menu = function()
for key, menu in pairs(scope_line_menu) do
local state = scope_line_menu["Enable"]:Get()
if not (key == "Enable") then
menu:SetVisible(state)
end
end
end
scope_line.update_menu()
scope_line_menu["Enable"]:RegisterCallback(scope_line.update_menu)
scope_line.anim_num = 0
scope_line.on_draw = function()
if not scope_line_menu["Enable"]:Get() then
return
end
scope_line.var:SetInt(2)
local local_player = EntityList.GetLocalPlayer()
local state = (not local_player or not local_player:IsAlive() or not local_player:GetProp("m_bIsScoped"))
scope_line.anim_num = math.lerp(scope_line.anim_num, state and 0 or 255, 0.095)
local alpha = scope_line.anim_num / 255
scope_line.offset = scope_line_menu["Offset"] :Get() * alpha
scope_line.length = scope_line_menu["Length"]:Get() * alpha
scope_line.col_1 = scope_line_menu["Color 1"]:Get()
scope_line.col_2 = scope_line_menu["Color 2"]:Get()
scope_line.width = 1
scope_line.col_1.a = scope_line.col_1.a * alpha
scope_line.col_2.a = scope_line.col_2.a * alpha
scope_line.start_x = vars.screen.x / 2
scope_line.start_y = vars.screen.y / 2
--Left
Render.GradientBoxFilled(Vector2.new(scope_line.start_x - scope_line.offset, scope_line.start_y), Vector2.new(scope_line.start_x - scope_line.offset - scope_line.length, scope_line.start_y + scope_line.width), scope_line.col_1, scope_line.col_2, scope_line.col_1, scope_line.col_2)
--Right
Render.GradientBoxFilled(Vector2.new(scope_line.start_x + scope_line.offset, scope_line.start_y), Vector2.new(scope_line.start_x + scope_line.offset + scope_line.length, scope_line.start_y + scope_line.width), scope_line.col_1, scope_line.col_2, scope_line.col_1, scope_line.col_2)
--Up
Render.GradientBoxFilled(Vector2.new(scope_line.start_x, scope_line.start_y + scope_line.offset), Vector2.new(scope_line.start_x + scope_line.width, scope_line.start_y + scope_line.offset + scope_line.length), scope_line.col_1, scope_line.col_1, scope_line.col_2, scope_line.col_2)
--Down
Render.GradientBoxFilled(Vector2.new(scope_line.start_x, scope_line.start_y - scope_line.offset), Vector2.new(scope_line.start_x + scope_line.width, scope_line.start_y - scope_line.offset - scope_line.length), scope_line.col_1, scope_line.col_1, scope_line.col_2, scope_line.col_2)
end
local sloweddown = {}
menu["Visual"]["Velocity Recovery"] = {}
menu["Visual"]["Velocity Recovery"]["Enable"] = Menu.Switch(tabs.visual, "Visual", "Velocity Recovery", false)
menu["Visual"]["Velocity Recovery"]["X"] = Menu.SliderInt(tabs.visual, 'Visual', 'Velocity Recovery X', math.floor(vars.screen.x / 2), 0, math.floor(vars.screen.x))
menu["Visual"]["Velocity Recovery"]["Y"] = Menu.SliderInt(tabs.visual, 'Visual', 'Velocity Recovery Y', 300, 0, math.floor(vars.screen.y))
menu["Visual"]["Velocity Recovery"]["X"]:SetVisible(false)
menu["Visual"]["Velocity Recovery"]["Y"]:SetVisible(false)
sloweddown.anim_line = 0
sloweddown.on_draw = draggables.create_draggable(menu["Visual"]["Velocity Recovery"]["X"], menu["Visual"]["Velocity Recovery"]["Y"], 160, 40, 3, function(self)
if not menu["Visual"]["Velocity Recovery"]["Enable"]:Get() then
return
end
local local_player = EntityList.GetLocalPlayer()
if not local_player or not local_player:IsAlive() then
return
end
local vel = local_player:GetProp("m_flVelocityModifier")
if vel == 1 and not Cheat.IsMenuVisible() then
return
end
local color = Color.new(1.0 - (1.0 * vel), vel / 2, 0.0)
local alpha = math.abs(GlobalVars.curtime * 2 % 2 - 1)
local text = ("Recovery: %s%%"):format(math.floor(vel * 100))
local text_width = 105
sloweddown.anim_line = math.lerp(sloweddown.anim_line, math.floor((text_width - 2) * vel), 0.095)
local x, y = self.position_x, self.position_y
Render.PolyFilled(Color.new(0, 0, 0, 0.2 * alpha), Vector2.new(x + 20, y - 4), Vector2.new(x - 3, y + 42), Vector2.new(x + 43, y + 42))
Render.PolyFilled(Color.new(color.r, color.g, color.b, alpha), Vector2.new(x + 20, y + 0), Vector2.new(x + 0, y + 40), Vector2.new(x + 40, y + 40))
Render.ShadowText("!", Vector2.new(x + 15, y + 10), Color.new(0.0, 0.0, 0.0, 0.7 * alpha), font.slow2)
Render.ShadowText(text, Vector2.new(x + 50, y + 5), Color.new(1.0, 1.0, 1.0), font.slow, true)
Render.Box(Vector2.new(x + 50, y + 25), Vector2.new(x + 55 + text_width, y + 40), Color.new(0.0, 0.0, 0.0))
Render.BoxFilled(Vector2.new(x + 51, y + 26), Vector2.new(x + 54 + text_width, y + 39), Color.new(0.0, 0.0, 0.0, 0.3))
Render.BoxFilled(Vector2.new(x + 51, y + 26), Vector2.new(x + 56 + sloweddown.anim_line, y + 39), color)
end)
menu["Global"] = {}
local max_misses = {}
menu["Global"]['Max Misses'] = {
['Enable'] = Menu.Switch(tabs.global, 'Rage', 'Max. Misses', false, 'After Х misses, script disable head for ragebot.'),
['Max'] = Menu.SliderInt(tabs.global, 'Rage', 'Max.', 2, 1, 10)
}
max_misses.update_menu = function()
local val = menu["Global"]['Max Misses']['Enable']:Get()
menu["Global"]['Max Misses']['Max']:SetVisible(val)
end
max_misses.update_menu()
menu["Global"]['Max Misses']['Enable']:RegisterCallback(max_misses.update_menu)
max_misses.data = {}
max_misses.on_registered_shot = function(shot)
if shot.reason ~= 1 then
return
end
if not max_misses.data[shot.target_index] then
max_misses.data[shot.target_index] = {
esp_bool = false,
shots = 0,
}
end
max_misses.data[shot.target_index].shots = max_misses.data[shot.target_index].shots + 1
end
max_misses.on_prediction = function()
if not menu["Global"]['Max Misses']['Enable']:Get() then
return
end
for player_index, data in pairs(max_misses.data) do
if data.shots >= menu["Global"]['Max Misses']['Max']:Get() then
data.esp_bool = true
RageBot.EnableHitbox(player_index, 0, false)
end
end
end
max_misses.reset_data = function(event)
if event:GetName() ~= 'round_start' then
return
end
max_misses.data = {}
end
ESP.CustomText("Body", "enemies", "BODY", function(ent)
local data = max_misses.data[ent:EntIndex()]
if data and data.esp_bool then
return 'BODY'
end
end)
local teleport = {}
menu['Global']['Teleport'] = {}
teleport.csgo_weapons = { [1] = "Deagle", [2] = "Pistols", [3] = "Pistols", [4] = "Pistols", [5] = "Pistols", [6] = "Pistols", [7] = "Rifle/LMG", [8] = "Rifle/LMG", [9] = "AWP", [10] = "Rifle/LMG", [11] = "AutoSnipers", [12] = "Rifle/LMG", [13] = "Rifle/LMG", [14] = "Rifle/LMG", [15] = "Rifle/LMG", [16] = "Rifle/LMG", [17] = "SMG", [18] = "SMG", [19] = "SMG", [20] = "Scout", [21] = "Rifle/LMG", [22] = "Rifle/LMG", [23] = "SMG", [24] = "SMG", [25] = "Shotgun", [26] = "SMG", [27] = "Shotgun", [28] = "Rifle/LMG", [29] = "Shotgun", [30] = "Pistols", [31] = "Taser", [32] = "Pistols", [33] = "SMG", [34] = "SMG", [35] = "Shotgun", [36] = "Pistols", [37] = "AutoSnipers", [38] = "AutoSnipers", [39] = "Rifle/LMG", [40] = "Scout", [41] = "Other", [42] = "Other", [43] = "Nades", [44] = "Nades", [45] = "Nades", [46] = "Nades", [47] = "Nades", [48] = "Nades", [49] = "Other", [59] = "Other", [60] = "Rifle/LMG", [61] = "Pistols", [63] = "Pistols", [64] = "Pistols", [500] = "Other", [505] = "Other", [506] = "Other", [507] = "Other", [508] = "Other", [509] = "Other", [512] = "Other", [514] = "Other", [515] = "Other", [516] = "Other", [197108] = "Other", [197113] = "Other", [197114] = "Other", [197115] = "Other", [197116] = "Other", [197123] = "Other", [197120] = "Other", [197128] = "Other", [197124] = "Other", [197130] = "Other", [197122] = "Other", [197117] = "Other", [197131] = "Other", [197127] = "Other", [197111] = "Other", [197125] = "Other", [197126] = "Other", [197129] = "Other", [197133] = "Other", [262205] = "Pistols", [262208] = "Pistols" }
teleport.weapons_list = {}
teleport.weapon_list_names = {}
for k, v in pairs(teleport.csgo_weapons) do
if teleport.weapons_list[v] == nil then
teleport.weapons_list[v] = {}
table.insert(teleport.weapon_list_names, v)
end
table.insert(teleport.weapons_list[v], k)
end
table.sort(teleport.weapon_list_names)
teleport.combo_weapon_ids = {}
menu['Global']['Teleport']['Enable'] = Menu.Switch(tabs.global, 'Rage', 'Teleport In Air', false)
menu['Global']['Teleport']['Weapons'] = Menu.MultiCombo(tabs.global, 'Rage', 'Weapons', (function()
local tbl = {}
for k, v in pairs(teleport.weapon_list_names) do
table.insert(tbl, v)
teleport.combo_weapon_ids[v] = k
end
return tbl
end)(), 0)
teleport.update_menu = function()
menu['Global']['Teleport']['Weapons']:SetVisible(menu['Global']['Teleport']['Enable']:Get())
end
teleport.update_menu()
menu['Global']['Teleport']['Enable']:RegisterCallback(teleport.update_menu)
teleport.min_penetrate_damage = 10
teleport.on_prediction = function()
if not menu['Global']['Teleport']['Enable']:Get() then
return
end
if not vars.dt_ref:Get() then
return
end
if Exploits.GetCharge() ~= 1 then
return
end
local localplayer = EntityList.GetLocalPlayer()
if localplayer == nil or not localplayer:IsAlive() then
return
end
local active_weapon = localplayer:GetActiveWeapon()
if active_weapon == nil then
return
end
active_weapon = active_weapon:GetWeaponID()
local group_name = teleport.csgo_weapons[active_weapon]
if group_name == nil then
return
end
local is_allowed_by_combo = bit.band(menu['Global']['Teleport']['Weapons']:Get(), bit.lshift(1, teleport.combo_weapon_ids[group_name] - 1)) ~= 0
if not is_allowed_by_combo then
return
end
local flags = localplayer:GetProp("m_fFlags")
local on_ground = bit.band(flags, bit.lshift(1, 0)) ~= 0
if on_ground then
return
end
local players = EntityList.GetPlayers()
if #players == 1 then
return
end
local local_player_hitbox = localplayer:GetHitboxCenter(6)
for k, current_player in ipairs(players) do
if current_player == local_player or current_player:IsDormant() or current_player:IsTeamMate() or not current_player:IsAlive() then
goto skip
end
local player_eye = current_player:GetEyePosition()
local penetrated_bullet = Cheat.FireBullet(current_player, player_eye, local_player_hitbox)
if penetrated_bullet.trace.hit_entity ~= nil and penetrated_bullet.damage > teleport.min_penetrate_damage and penetrated_bullet.trace.hit_entity:EntIndex() == localplayer:EntIndex() then
Exploits.ForceTeleport()
break
end
::skip::
end
end
local aimbot = {}
menu["Global"]["Dormant"] = {}
menu["Global"]["Dormant"]["Dormant Enable"] = Menu.Switch(tabs.global, "Rage", "Dormant Aimbot", false, 'shit like russian army')
menu["Global"]["Dormant"]["Auto Stop"] = Menu.Switch(tabs.global, "Rage", "Auto Stop", false)
menu["Global"]["Dormant"]["Auto Scope"] = Menu.Switch(tabs.global, "Rage", "Auto Scope", false)
menu["Global"]["Dormant"]["Minimum Damage"] = Menu.SliderInt(tabs.global, "Rage", "Minimum Damage", 5, 1, 100)
aimbot.update_menu = function()
local state = menu["Global"]["Dormant"]["Dormant Enable"]:Get()
menu["Global"]["Dormant"]["Minimum Damage"]:SetVisible(state)
menu["Global"]["Dormant"]["Auto Stop"]:SetVisible(state)
menu["Global"]["Dormant"]["Auto Scope"]:SetVisible(state)
end
aimbot.update_menu()
menu["Global"]["Dormant"]["Dormant Enable"]:RegisterCallback(aimbot.update_menu)
aimbot.esp_data = {}
--@note: premium autostop
aimbot.auto_stop = function(cmd)
cmd.forwardmove = cmd.forwardmove - cmd.forwardmove / 1.5
cmd.sidemove = cmd.sidemove - cmd.sidemove / 1.5
end
aimbot.auto_scope = function(local_player, weapon, cmd)
local flags = local_player:GetProp("m_fFlags")
local scoped = local_player:IsScoped()
if (weapon:IsSniper() == true and scoped == false and bit.band(flags, 1) == 1) then
cmd.buttons = bit.bor(cmd.buttons, 2048)
end
end
aimbot.on_prediction = function(cmd)
if not menu["Global"]["Dormant"]["Dormant Enable"]:Get() then
return
end
local local_player = EntityList.GetLocalPlayer()
if not local_player or not local_player:IsAlive() then
return
end
local local_weapon = local_player:GetActiveWeapon()
if local_weapon == nil then
return
end
local flags = local_player:GetProp("m_fFlags")
local on_ground = bit.band(flags, bit.lshift(1, 0)) ~= 0
if not on_ground then
return
end
local players = EntityList.GetPlayers()
if #players == 1 then
return
end
local weapon_inaccuracy = 1 / local_weapon:GetInaccuracy(local_weapon)
local min_damage = menu["Global"]["Dormant"]["Minimum Damage"]:Get()
local is_autostop = menu["Global"]["Dormant"]["Auto Stop"]:Get()
local is_autoscope = menu["Global"]["Dormant"]["Auto Scope"]:Get()
local local_eye = local_player:GetEyePosition()
local esp_data = {}
for i, player in ipairs(players) do
if not player:IsEnemy() or not player:IsAlive() or (player:GetESPAlpha() == 1) then
goto skip
end
local trace_bullet = Cheat.FireBullet(local_player, local_eye, player:GetHitboxCenter(5))
for i = 0, 18 do
local trace_bullet_hitbox = Cheat.FireBullet(local_player, local_eye, player:GetHitboxCenter(i))
if trace_bullet_hitbox.damage >= min_damage then
trace_bullet = trace_bullet_hitbox
end
end
if trace_bullet.trace.hit_entity and not EntityList.GetPlayer(trace_bullet.trace.hit_entity:EntIndex()):IsEnemy() then
goto skip
end
if trace_bullet.damage >= min_damage and not local_weapon:IsReloading() and local_weapon:IsSniper() then
esp_data[player:EntIndex()] = true
if is_autoscope then
aimbot.auto_scope(local_player, local_weapon, cmd)
end
if is_autostop then
aimbot.auto_stop(cmd)
end
if weapon_inaccuracy >= 90 and local_player:IsScoped() and local_weapon:GetProp("m_flNextPrimaryAttack") < GlobalVars.curtime then
local angle = Cheat.VectorToAngle(trace_bullet.trace.endpos - local_eye)
local m_aimPunchAngle = local_player:GetProp("m_aimPunchAngle")
local aim_punch = QAngle.new(m_aimPunchAngle.x, m_aimPunchAngle.y, 0.0)
aim_punch.yaw = aim_punch.yaw * 2
aim_punch.pitch = aim_punch.pitch * 2
cmd.viewangles = angle - aim_punch
cmd.buttons = bit.bor(cmd.buttons, 1)
break
end
end
::skip::
end
aimbot.esp_data = esp_data
end
ESP.CustomText("Dormant Aimbot", "enemies", "DA", function(ent)
if aimbot.esp_data[ent:EntIndex()] then
return 'DA'
end
end)
local global = {}
menu["Global"]["Custom Hitchances"] = {}
menu["Global"]["Custom Hitchances"]["Custom Hitchance"] = Menu.Switch(tabs.global, "Rage", "Custom Hitchance", false)
menu["Global"]["Custom Hitchances"]["In Air Hitchance"] = Menu.SliderInt(tabs.global, "Rage", "In Air Hitchance", 60, 0, 100)
menu["Global"]["Custom Hitchances"]["No Scope Hitchance"] = Menu.SliderInt(tabs.global, "Rage", "No Scope Hitchance", 60, 0, 100)
global.update_menu = function()
local state = menu["Global"]["Custom Hitchances"]["Custom Hitchance"]:Get()
menu["Global"]["Custom Hitchances"]["In Air Hitchance"]:SetVisible(state)
menu["Global"]["Custom Hitchances"]["No Scope Hitchance"]:SetVisible(state)
end
global.update_menu()
menu["Global"]["Custom Hitchances"]["Custom Hitchance"]:RegisterCallback(global.update_menu)
global.hitchances = function()
if not menu["Global"]["Custom Hitchances"]["Custom Hitchance"]:Get() then
return
end
local local_player = EntityList.GetLocalPlayer()
if not local_player then
return
end
local players = EntityList.GetPlayers()
if #players < 1 then
return
end
local state = antiaim.GetPlayerState()
if state and (state == "Air") then
local in_air_hitchance = menu["Global"]["Custom Hitchances"]["In Air Hitchance"]:Get()
for i, player in ipairs(players) do
RageBot.OverrideHitchance(player:EntIndex(), in_air_hitchance)
end
return
end
local local_weapon = local_player:GetActiveWeapon()
if local_weapon and local_weapon:IsSniper() and not local_player:IsScoped() then
local no_scope_hitchance = menu["Global"]["Custom Hitchances"]["No Scope Hitchance"]:Get()
for i, player in ipairs(players) do
RageBot.OverrideHitchance(player:EntIndex(), no_scope_hitchance)
end
end
end
local fakelag = {}
menu["Global"]["Fake Lag"] = {}
menu["Global"]["Fake Lag"]["Disable lags on Hide Shots"] = Menu.Switch(tabs.global, "Rage", "Disable lags on Hide Shots", false, 'Disable your Fake Lags in Menu when you use Hide Shots')
fakelag.update_menu = function()
if menu["Global"]["Fake Lag"]["Disable lags on Hide Shots"]:Get() then
vars.fakelag_ref:Set(not vars.hs_ref:Get())
end
end
fakelag.update_menu()
vars.hs_ref:RegisterCallback(fakelag.update_menu)
menu["Global"]["Fake Lag"]["Disable lags on Hide Shots"]:RegisterCallback(fakelag.update_menu)
local clantag = {}
menu["Global"]["ClanTag"] = {}
menu["Global"]["ClanTag"]["ClanTag"] = Menu.Switch(tabs.global, "Other", "ClanTag", false)
clantag.ffi = ffi.cast('int(__fastcall*)(const char*, const char*)', Utils.PatternScan('engine.dll', '53 56 57 8B DA 8B F9 FF 15'))
clantag.last = nil
clantag.set = function(tag)
if tag == clantag.last then
return
end
clantag.ffi(tag, tag)
clantag.last = tag
end
clantag.build = function(tag)
local ret = {}
for i = 1, #tag do
table.insert(ret, tag:sub(1, i))
end
for i = 1, 4 do
table.insert(ret, tag)
end
for i = 1, #tag do
table.insert(ret, tag:sub(i, #tag))
end
table.insert(ret, '')
return ret
end
clantag.tag = clantag.build("aarne.club")
clantag.on_draw = function()
if not menu["Global"]["ClanTag"]["ClanTag"]:Get() then
return
end
if not EngineClient.IsConnected() then
return
end
local net_channel_info = EngineClient.GetNetChannelInfo()
if not net_channel_info then
return
end
local latency = net_channel_info:GetLatency(0) / GlobalVars.interval_per_tick
local tickcount_pred = GlobalVars.tickcount + latency
local iter = math.floor(math.fmod(tickcount_pred / 13, #clantag.tag)) + 1
clantag.set(clantag.tag[iter])
end
clantag.destroy = function()
clantag.set("")
end
menu["Global"]["ClanTag"]["ClanTag"]:RegisterCallback(clantag.destroy)
local trashtalk = {}
trashtalk.phrases = {
"Меф, кокс, героин, гашик, эксзи, амф, лучшие закладки вашего города писать в тг - fipp1337",
"you are welcome - www.aarne.club",
"Мы убили долбаёба и положили его в подвал, он там тухнет",
"Тебя ебут в жопу, ты хочешь быть как Playboi Carti (Да ну нахуй)",
"У тебя нет девушки, ты ебёшь кошку, ты — зоофил",
"Благодари Дога то, что я не умер тебя",
"ХАХАЗВАЗХВЗАХВХА НИЩЕНКА В ЧЕСТЬ ТЕБЯ РЕКУ НАЗВАЛИ",
"ЗА КЕМ ДОЖРАЛ?!",
"Почему твоя мать подписана у меня как 'Дроп' ?",
"Нигга, ты не true",
"Убил беременную тёлку,у неё была двойня. Триплкилл",
"Ты гандон, я уеду в тюрьму и выебу там твоего папу",
"Ты не ебал тёлок — ты день и ночь на PornHub'е",
"Damn, ебашу налегке",
"твоя шалава типа гроб, положил в нее лил пипку",
"А ты ебаный бич",
"Закопал его живым и он уже в могиле помер",
"Ты ебаная шлюха, иди нюхай меф с моего хуя",
"Его башка будто мяч — я пинал пыром",
"Чё ты мне хочешь сказать? Уебан, помолчи, не давал тебе голос",
"Он ещё даже тёлку не трахал, но уже убил человека",
"A МАМЕ? А ПАПЕ??",
"москаль, в ад",
'лови чек на сабку хуесос нищий http://t.me/CryptoBot?start=CQzZkcNF3QN',
"иди с медведями сфоткайся",
"одной ногой играю (◣◢)",
"LIFEHACK BITCH!!! (◣◢)",
"мёда похавай, москаль",
"hs бомjара",
"я сейчас начну кое-что про маму говорить и мне будет всё равно, что у меня мама дома",
"куда слетел тапок?!",
"ща ебало будет плоским",
"иди голубей покорми",
"ебать я твоей матери кормушку расхуячил",
"иди на алике силиконовые мозги вгетай себе, москаль",
"я сожрал твою мать нахуй, и её кости хрустели, как чипсы русская картошка",
"в лобби безмамный бот",
"нахуя бычок об жопу тушишь?",
"ты ден? ты наверное себе мозги мамкиными сигами задымил все",
"Powered by www.aarne.club",
"Заскамил узбека я думал это был таджик",
"oh no cringe",
'Мальчик, блять, остынь...',
'Aarne.club - чтобы не быть Броук Боем',
'в гулаг ублюдок',
'no-life user',
'и-и-и-иди нахуй шлюха',
'ОПРАВДАЙСЯ МНЕ В ХУЙ..',
'уничтожен',
'1 TON жира в тебе, хуесос...',
'У сестры знакомый военный говорит завтра ВСУ будут брать Белгород чтобы окружить Донбасс',
'Слава Белгородской Народной Республике!',
'где ты был 8 лет хуесос ебучий',
'сегодня видел как ты бабку за сахар пырнул ха-ха',
'Zаглотнул хуяку V рот уебан',
'удобряй землю чмырь',
'owned by bandera-script',
}
menu["Global"]["Trashtalk"] = {}
menu["Global"]["Trashtalk"]["Enable Trashtalk"] = Menu.Switch(tabs.global, "Other", "Trashtalk", false)
trashtalk.on_kill = function(event)
if (event:GetName() == "player_death") then
local local_player = EntityList.GetLocalPlayer()
if not local_player then
return
end
local userid = EntityList.GetPlayerForUserID(event:GetInt("userid", 0))
local attacker = EntityList.GetPlayerForUserID(event:GetInt("attacker", 0))
if (attacker == local_player and local_player ~= userid) then
local phrase = menu["Global"]["Trashtalk"]["Enable Trashtalk"]:Get() and trashtalk.phrases[Utils.RandomInt(1, #trashtalk.phrases)] or ''
local userid_name = userid:GetName()
if playerlist.data[userid_name] and playerlist.data[userid_name]['Override']:Get() and playerlist.data[userid_name]['Trashtalk']:Get() then
phrase = playerlist.data[userid_name]['Trashtalk Text']:Get()
end
local to_say = ("say %s"):format(phrase)
EngineClient.ExecuteClientCmd(to_say)
end
end
end
local hitsound = {}
hitsound.data = {
["Skeet"] = "buttons\\arena_switch_press_02",
["Custom"] = "Custom",
}
hitsound.get_pairs = function()
local keys = {}
for key, index in pairs(hitsound.data) do
table.insert(keys, key)
end
return keys
end
hitsound.keys = hitsound.get_pairs()
menu["Global"]["Hitsound"] = {}
menu["Global"]["Hitsound"]["Enable"] = Menu.Switch(tabs.global, "Other", "Hitsound", false)
menu["Global"]["Hitsound"]["Sounds"] = Menu.Combo(tabs.global, "Other", "Sounds", hitsound.keys, 0)
menu["Global"]["Hitsound"]["Custom"] = Menu.TextBox(tabs.global, "Other", "Custom", 64, "", "All csgo sounds\npaste.dy.fi/isy/plain")
menu["Global"]["Hitsound"]["Volume"] = Menu.SliderInt(tabs.global, "Other", "Volume", 100, 0, 100)
hitsound.update_menu = function()
local state = menu["Global"]["Hitsound"]["Enable"]:Get()
local main = menu["Global"]["Hitsound"]["Sounds"]:Get()
menu["Global"]["Hitsound"]["Sounds"]:SetVisible(state)
menu["Global"]["Hitsound"]["Custom"]:SetVisible(hitsound.data[hitsound.keys[main + 1]] == "Custom" and state)
menu["Global"]["Hitsound"]["Volume"]:SetVisible(state)
end
hitsound.update_menu()
menu["Global"]["Hitsound"]["Enable"]:RegisterCallback(hitsound.update_menu)
menu["Global"]["Hitsound"]["Sounds"]:RegisterCallback(hitsound.update_menu)
hitsound.on_hurt = function(event)
if not menu["Global"]["Hitsound"]["Enable"]:Get() then
return
end
if not (event:GetName() == "player_hurt") then
return
end
local local_player = EntityList.GetLocalPlayer()
local userid = EntityList.GetPlayerForUserID(event:GetInt("userid", 0))
local attacker = EntityList.GetPlayerForUserID(event:GetInt("attacker", 0))
if not (attacker == local_player) then
return
end
local hitsound_index = menu["Global"]["Hitsound"]["Sounds"]:Get()
local hitsound_volume = menu["Global"]["Hitsound"]["Volume"]:Get() / 100
local hitsound_check = hitsound.data[hitsound.keys[hitsound_index + 1]]
local hitsound_name = hitsound_check == "Custom" and menu["Global"]["Hitsound"]["Custom"]:Get() or hitsound_check
local to_execute = ("playvol %s %s"):format(hitsound_name, hitsound_volume)
EngineClient.ExecuteClientCmd(to_execute)
end
local radar = {}
menu["Global"]["Radar"] = {}
menu["Global"]["Radar"]["Disable Radar"] = Menu.Switch(tabs.global, "Other", "Disable Radar", false)
radar.var = CVar.FindVar("cl_drawhud_force_radar")
radar.on_click = function()
radar.var:SetInt(menu["Global"]["Radar"]["Disable Radar"]:Get() and -1 or 0)
end
radar.on_click()
menu["Global"]["Radar"]["Disable Radar"]:RegisterCallback(radar.on_click)
local molotov = {}
menu["Global"]["Molotov"] = {}
menu["Global"]["Molotov"]["Molotov Ignore-Z"] = Menu.Switch(tabs.global, "Other", "Molotov Ignore-Z", false)
menu["Global"]["Molotov"]["Molotov Wireframe"] = Menu.Switch(tabs.global, "Other", "Molotov Wireframe", false)
molotov.materials = {
"particle/fire_burning_character/fire_env_fire_depthblend_oriented",
"particle/fire_burning_character/fire_burning_character",
"particle/fire_explosion_1/fire_explosion_1_oriented",
"particle/fire_explosion_1/fire_explosion_1_bright",
"particle/fire_burning_character/fire_burning_character_depthblend",
"particle/fire_burning_character/fire_env_fire_depthblend",
}
molotov.on_draw = function()
for k, v in ipairs(molotov.materials) do
local material = MatSystem.FindMaterial(v, "")
if material ~= nil then
material:SetMaterialVarFlag(bit.lshift(1, 28), menu["Global"]["Molotov"]["Molotov Wireframe"]:GetBool()) -- Wireframe
material:SetMaterialVarFlag(bit.lshift(1, 15), menu["Global"]["Molotov"]["Molotov Ignore-Z"]:GetBool()) -- IgnoreZ
end
end
end
molotov.on_destroy = function()
for k, v in pairs(molotov.materials) do
local material = MatSystem.FindMaterial(v, "")
if material ~= nil then
material:SetMaterialVarFlag(bit.lshift(1, 28), false) -- Wireframe
material:SetMaterialVarFlag(bit.lshift(1, 15), false) -- IgnoreZ
end
end
end
local thirdperson = {}
menu["Global"]["Thirdperson"] = {}
thirdperson_menu = menu["Global"]["Thirdperson"]
thirdperson_menu["Disable 3D Person Anim"] = Menu.Switch(tabs.global, "Other", "Disable Thirdperson Anim.", false)
thirdperson.on_value = function()
local state = thirdperson_menu["Disable 3D Person Anim"]:Get()
Cheat.SetThirdPersonAnim(not state)
end
thirdperson.on_value()
thirdperson_menu["Disable 3D Person Anim"]:RegisterCallback(thirdperson.on_value)
local configs = {}
configs.default = "eyJWaXN1YWwiOnsiSGl0bG9ncyI6eyJEcmF3IFR5cGUiOjV9LCJBcnJvd3MiOnsiQXJyb3dzIjoxLCJTaXplIjo0LCJJbnZlcnRlZCBDb2xvciI6eyIxIjowLjU4ODIzNTMxODY2MDczNjEsIjIiOjAuNTg4MjM1MzE4NjYwNzM2MSwiMyI6MSwiNCI6MX0sIkRpc3RhbmNlIjozMywiQXJyb3cgQ29sb3IiOnsiMSI6MC40OTkxODIwNDU0NTk3NDczLCIyIjowLjU0NzI5OTAyNzQ0MjkzMjEsIjMiOjAuODM1MzY1ODMxODUxOTU5MiwiNCI6MX19LCJCaW5kcyI6eyJNaW4gRGFtYWdlIFgiOjkzMywiRW5hYmxlIGluZGljYXRvcnMiOjcsIkluZGljYXRvcnMgVHlwZSI6MSwiTWluIERhbWFnZSBZIjo1MTcsIkJpbmRzIjo3LCJEZXN5bmMgTGluZSBDb2xvciI6eyIxIjowLjQ5ODAzOTIxNTgwMzE0NjM2LCIyIjowLjU0OTAxOTYzNDcyMzY2MzMsIjMiOjAuODM1Mjk0MTI3NDY0Mjk0NCwiNCI6MX0sIlNjcmlwdCBuYW1lIENvbG9yIjp7IjEiOjAuNDk4MDM5MjE1ODAzMTQ2MzYsIjIiOjAuNTQ5MDE5NjM0NzIzNjYzMywiMyI6MC44MzUyOTQxMjc0NjQyOTQ0LCI0IjoxfX0sIkhpdG1hcmtlciI6eyJFbmFibGUgSGl0bWFya2VyIjoyLCJDb2xvciI6eyIxIjoxLCIyIjoxLCIzIjoxLCI0IjoxfX0sIlZlbG9jaXR5IFJlY292ZXJ5Ijp7IkVuYWJsZSI6ZmFsc2V9LCJTbmFwbGluZXMiOnsiRW5hYmxlIGFuZCBDb2xvciI6ZmFsc2V9LCJDdXN0b20gU2NvcGUiOnsiRW5hYmxlIjp0cnVlLCJPZmZzZXQiOjEwLCJDb2xvciAyIjp7IjEiOjEsIjIiOjEsIjMiOjEsIjQiOjB9LCJMZW5ndGgiOjYwLCJDb2xvciAxIjp7IjEiOjEsIjIiOjEsIjMiOjEsIjQiOjAuMzc4MDQ4Nzc3NTgwMjYxMjN9fX0sIkdsb2JhbCI6eyJDbGFuVGFnIjp7IkNsYW5UYWciOnRydWV9LCJGYWtlIExhZyI6eyJEaXNhYmxlIGxhZ3Mgb24gSGlkZSBTaG90cyI6dHJ1ZX0sIk1vbG90b3YiOnsiTW9sb3RvdiBJZ25vcmUtWiI6ZmFsc2UsIk1vbG90b3YgV2lyZWZyYW1lIjpmYWxzZX0sIlRyYXNodGFsayI6eyJFbmFibGUgVHJhc2h0YWxrIjp0cnVlfSwiRG9ybWFudCI6eyJEb3JtYW50IEVuYWJsZSI6ZmFsc2UsIkF1dG8gU2NvcGUiOmZhbHNlLCJBdXRvIFN0b3AiOmZhbHNlLCJNaW5pbXVtIERhbWFnZSI6NX0sIlJhZGFyIjp7IkRpc2FibGUgUmFkYXIiOnRydWV9LCJUaGlyZHBlcnNvbiI6eyJEaXNhYmxlIDNEIFBlcnNvbiBBbmltIjp0cnVlfSwiSGl0c291bmQiOnsiRW5hYmxlIjp0cnVlLCJTb3VuZHMiOjAsIkN1c3RvbSI6IiIsIlZvbHVtZSI6NTB9LCJUZWxlcG9ydCI6eyJFbmFibGUiOnRydWUsIldlYXBvbnMiOjI2NX0sIkN1c3RvbSBIaXRjaGFuY2VzIjp7IkluIEFpciBIaXRjaGFuY2UiOjEwMCwiQ3VzdG9tIEhpdGNoYW5jZSI6ZmFsc2UsIk5vIFNjb3BlIEhpdGNoYW5jZSI6MTAwfX0sIkFudGktQWltIjp7IkNyb3VjaGluZyI6eyJMZWZ0IExpbWl0Ijo2MCwiRmFrZSBMaW1pdCBUeXBlIjowLCJZYXcgQWRkIFJpZ2h0IjoyMCwiT3ZlcnJpZGUiOnRydWUsIkxCWSBNb2RlIjoxLCJGYWtlIE9wdGlvbnMiOjIsIk1vZGlmaWVyIERlZ3JlZSI6MjIsIkRpc2FibGUgQW50aS1CcnV0ZWZvcmNlIjpmYWxzZSwiWWF3IEFkZCBMZWZ0IjotMjAsIkZyZWVzdGFuZGluZyBEZXN5bmMiOjAsIkRlc3luYyBPbiBTaG90IjoxLCJSaWdodCBMaW1pdCI6NjAsIllhdyBNb2RpZmllciI6MX0sIlN0YW5kaW5nIjp7IkxlZnQgTGltaXQiOjAsIkZha2UgTGltaXQgVHlwZSI6MCwiWWF3IEFkZCBSaWdodCI6MCwiT3ZlcnJpZGUiOmZhbHNlLCJMQlkgTW9kZSI6MCwiRmFrZSBPcHRpb25zIjowLCJNb2RpZmllciBEZWdyZWUiOjAsIkRpc2FibGUgQW50aS1CcnV0ZWZvcmNlIjpmYWxzZSwiWWF3IEFkZCBMZWZ0IjowLCJGcmVlc3RhbmRpbmcgRGVzeW5jIjowLCJEZXN5bmMgT24gU2hvdCI6MCwiUmlnaHQgTGltaXQiOjAsIllhdyBNb2RpZmllciI6MH0sIlNsb3d3YWxrIjp7IkxlZnQgTGltaXQiOjAsIkZha2UgTGltaXQgVHlwZSI6MCwiWWF3IEFkZCBSaWdodCI6MCwiT3ZlcnJpZGUiOmZhbHNlLCJMQlkgTW9kZSI6MCwiRmFrZSBPcHRpb25zIjowLCJNb2RpZmllciBEZWdyZWUiOjAsIkRpc2FibGUgQW50aS1CcnV0ZWZvcmNlIjpmYWxzZSwiWWF3IEFkZCBMZWZ0IjowLCJGcmVlc3RhbmRpbmcgRGVzeW5jIjowLCJEZXN5bmMgT24gU2hvdCI6MCwiUmlnaHQgTGltaXQiOjAsIllhdyBNb2RpZmllciI6MH0sIkFudGktQnJ1dGVmb3JjZSBQaGFzZXMiOnsiMSI6NjAsIjIiOi02MCwiMyI6MCwiNCI6MCwiNSI6MCwiNiI6MCwiNyI6MCwiOCI6MCwiOSI6MCwiMTAiOjB9LCJPbiBVc2UiOnsiTGVmdCBMaW1pdCI6NjAsIkZha2UgTGltaXQgVHlwZSI6MCwiWWF3IEFkZCBSaWdodCI6MCwiT3ZlcnJpZGUiOnRydWUsIkxCWSBNb2RlIjoxLCJGYWtlIE9wdGlvbnMiOjAsIk1vZGlmaWVyIERlZ3JlZSI6MCwiRGlzYWJsZSBBbnRpLUJydXRlZm9yY2UiOmZhbHNlLCJZYXcgQWRkIExlZnQiOjAsIkZyZWVzdGFuZGluZyBEZXN5bmMiOjEsIkRlc3luYyBPbiBTaG90IjoxLCJSaWdodCBMaW1pdCI6NjAsIllhdyBNb2RpZmllciI6MH0sIlNoYXJlZCI6eyJMZWZ0IExpbWl0IjoxOCwiRmFrZSBMaW1pdCBUeXBlIjowLCJZYXcgQWRkIFJpZ2h0IjowLCJPdmVycmlkZSI6ZmFsc2UsIkxCWSBNb2RlIjoxLCJGYWtlIE9wdGlvbnMiOjIsIk1vZGlmaWVyIERlZ3JlZSI6NTQsIkRpc2FibGUgQW50aS1CcnV0ZWZvcmNlIjp0cnVlLCJZYXcgQWRkIExlZnQiOjAsIkZyZWVzdGFuZGluZyBEZXN5bmMiOjAsIkRlc3luYyBPbiBTaG90IjoxLCJSaWdodCBMaW1pdCI6MTgsIllhdyBNb2RpZmllciI6MX0sIkFpciI6eyJMZWZ0IExpbWl0Ijo0NywiRmFrZSBMaW1pdCBUeXBlIjoxLCJZYXcgQWRkIFJpZ2h0IjotNywiT3ZlcnJpZGUiOmZhbHNlLCJMQlkgTW9kZSI6MCwiRmFrZSBPcHRpb25zIjoyLCJNb2RpZmllciBEZWdyZWUiOjEsIkRpc2FibGUgQW50aS1CcnV0ZWZvcmNlIjpmYWxzZSwiWWF3IEFkZCBMZWZ0IjotNywiRnJlZXN0YW5kaW5nIERlc3luYyI6MCwiRGVzeW5jIE9uIFNob3QiOjIsIlJpZ2h0IExpbWl0Ijo0NywiWWF3IE1vZGlmaWVyIjoxfSwiTW92aW5nIjp7IkxlZnQgTGltaXQiOjAsIkZha2UgTGltaXQgVHlwZSI6MCwiWWF3IEFkZCBSaWdodCI6MCwiT3ZlcnJpZGUiOmZhbHNlLCJMQlkgTW9kZSI6MCwiRmFrZSBPcHRpb25zIjowLCJNb2RpZmllciBEZWdyZWUiOjAsIkRpc2FibGUgQW50aS1CcnV0ZWZvcmNlIjpmYWxzZSwiWWF3IEFkZCBMZWZ0IjowLCJGcmVlc3RhbmRpbmcgRGVzeW5jIjowLCJEZXN5bmMgT24gU2hvdCI6MCwiUmlnaHQgTGltaXQiOjAsIllhdyBNb2RpZmllciI6MH0sIkFudGktQWltIjp7IllhdyBCYXNlIjo0LCJSb2xsIG9uIE1hbnVhbHMiOmZhbHNlLCJDb25kaXRpb25zIjp0cnVlLCJBbnRpLUFpbSBvbiBVc2UiOnRydWUsIkFudGktQmFja3N0YWIiOnRydWUsIlJvbGwgTGVmdCI6LTQ1LCJSb2xsIFJpZ2h0Ijo0NSwiRW5hYmxlIEFudGktQWltIjp0cnVlLCJUYWIiOjAsIlJvbGwgQW50aS1BaW0iOmZhbHNlfSwiQW5pbWF0aW9ucyI6eyJTdGF0aWMgQWlyIExlZ3MiOnRydWUsIlBpdGNoIG9uIExhbmQiOmZhbHNlLCJTdGF0aWMgTGFuZGluZyBMZWdzIjp0cnVlfSwiQW50aS1CcnV0ZWZvcmNlIjp7IkVuYWJsZSBBbnRpLUJydXRlZm9yY2UiOnRydWUsIlBoYXNlcyBDb3VudCI6Mn0sIlJvbGwiOnsiTGVmdCBMaW1pdCI6NjAsIkZha2UgTGltaXQgVHlwZSI6MCwiWWF3IEFkZCBSaWdodCI6MCwiT3ZlcnJpZGUiOnRydWUsIkxCWSBNb2RlIjowLCJGYWtlIE9wdGlvbnMiOjAsIk1vZGlmaWVyIERlZ3JlZSI6MCwiRGlzYWJsZSBBbnRpLUJydXRlZm9yY2UiOnRydWUsIllhdyBBZGQgTGVmdCI6MCwiRnJlZXN0YW5kaW5nIERlc3luYyI6MCwiRGVzeW5jIE9uIFNob3QiOjEsIlJpZ2h0IExpbWl0Ijo2MCwiWWF3IE1vZGlmaWVyIjowfX19"
configs.data = {}
configs.update = function()
for tab_name, tab in pairs(menu) do
configs.data[tab_name] = {}
for global_item_name, tab2 in pairs(tab) do
configs.data[tab_name][global_item_name] = {}
for item_name, item in pairs(tab2) do
local value = item:Get()
-- @note: крутой метод получения макак
if type(value) == 'userdata' then
local color = item:Get()
value = {color.r, color.g, color.b, color.a}
end
configs.data[tab_name][global_item_name][item_name] = value
end
end
end
end
configs.load = function(values)
if values == nil then
Cheat.AddEvent("Something went wrong... Check the config data again")
uwu.print('{0.54, 0.83, 1}[Aarne.club] {1, 1, 1}Something went wrong... Check the {0.78, 1, 0}config data {1, 1, 1}again \n')
return
end
for tab_name, tab in pairs(menu) do
for global_item_name, tab2 in pairs(tab) do
for item_name, item in pairs(tab2) do
local value = values[tab_name]
if value == nil then
--print('[Error] tab_name ' .. tab_name)
goto skip
end
value = values[tab_name][global_item_name]
if value == nil then
--print('[Error] global_item_name ' .. global_item_name)
goto skip
end
value = values[tab_name][global_item_name][item_name]
if value == nil then
local error_log = ('Failed to load config for (%s) children item of (%s) item'):format(item_name, global_item_name)
Cheat.AddEvent(error_log)
uwu.print(('{0.54, 0.83, 1}[Aarne.club] {1, 1, 1}Failed to load config for {0.78, 1, 0}%s {1, 1, 1}children item of {0.78, 1, 0}%s {1, 1, 1}item \n'):format(item_name, global_item_name))
goto skip
end
if type(value) == 'table' then
value = Color.new(unpack(value))
end
--print(tab_name, global_item_name, item_name, value)
menu[tab_name][global_item_name][item_name]:Set(value)
::skip::
end
end
end
fakelag.update_menu()
radar.on_click()
aimbot.update_menu()
global.update_menu()
arrows.update_menu()
antiaim.update_menu()
scope_line.update_menu()
hitsound.update_menu()
hitmarker.update_menu()
teleport.update_menu()
antiaim.antibruteforce.MenuVisible()
Cheat.AddEvent('Config successfully loaded!')
uwu.print('{0.54, 0.83, 1}[Aarne.club] {1, 1, 1}Config {0.78, 1, 0}successfully {1, 1, 1}loaded!\n')
end
configs.url = 'https://625c894695cd5855d6139e9b.mockapi.io/api/v1/config/'
configs.create_config = function(config_password, config_name, config_data)
http.request(configs.url, {
type = 'POST',
data = {
config_password = config_password,
config_name = config_name,
config_data = config_data,
}
})
end
configs.delete_config = function(id)
http.request(configs.url .. id, {type = 'DELETE'})
end
configs.all_configs = {}
configs.my_configs = {}
configs.parse_configs = function()
configs.all_configs = {}
local parse_configs = json.parse(Http.Get(configs.url))
for i, next_config_data in ipairs(parse_configs) do
for key, data in pairs(next_config_data) do
configs.all_configs[tostring(next_config_data.config_name)] = {
id = next_config_data.id,
config_data = next_config_data.config_data,
config_password = next_config_data.config_password,
}
end
end
end
configs.parse_configs()
configs.ui = {}
configs.ui.name = Menu.TextBox(tabs.config, 'Create', 'Config Name', 64, '')
configs.ui.password = Menu.TextBox(tabs.config, 'Create', 'Config Password', 64, '', 'You need to set a password for further access to delete the config.')
configs.ui.upload = Menu.Button(tabs.config, 'Create', 'Upload Config', '')
configs.ui.configs = Menu.Combo(tabs.config, 'Cloud', 'Configs', {'no configs :('}, 0)
configs.ui.access_password = Menu.TextBox(tabs.config, 'Cloud', 'Config Password', 64, '', 'Enter the password for the config to access the delete.')
configs.ui.update_configs = Menu.Button(tabs.config, 'Cloud', 'Update List', '')
configs.ui.load = Menu.Button(tabs.config, 'Cloud', 'Load Config', '')
configs.ui.delete = Menu.Button(tabs.config, 'Cloud', 'Delete Config', '')
configs.update_configs_list = function()
configs.parse_configs()
local config_names = table.keys(configs.all_configs)
if (#config_names < 1) then
config_names = {'no configs :('}
end
configs.ui.configs:UpdateList(config_names)
Cheat.AddEvent('Config list successfully updated!')
end
configs.update_configs_list()
configs.ui.update_configs:RegisterCallback(configs.update_configs_list)
configs.upload = function()
local config_names = table.keys(configs.all_configs)
configs.update()
local response = json.encode(configs.data)
local encoded_config = base64.encode(response)
local config_password = configs.ui.password:Get()
local config_name = configs.ui.name:Get()
local config_data = encoded_config
if table.find(config_names, config_name) then
Cheat.AddEvent('This name already exists.')
return
end
configs.create_config(config_password, config_name, config_data)
Cheat.AddEvent('Config successfully uploaded!')
configs.update_configs_list()
end
configs.ui.upload:RegisterCallback(configs.upload)
configs.delete_my_config = function()
local config_index = configs.ui.configs:Get()
local config_names = table.keys(configs.all_configs)
local config_name = config_names[config_index + 1]
local config_password = configs.ui.access_password:Get()
if not configs.all_configs[config_name] then
Cheat.AddEvent('This config does not exist.')
return
end
local config_data = configs.all_configs[config_name]
if not (config_data.config_password == config_password) then
Cheat.AddEvent('Wrong config password.')
return
end
configs.delete_config(config_data.id)
Cheat.AddEvent('Config successfully deleted!')
configs.update_configs_list()
end
configs.ui.delete:RegisterCallback(configs.delete_my_config)
configs.load_config = function()
local config_index = configs.ui.configs:Get()
local config_names = table.keys(configs.all_configs)
local config_name = config_names[config_index + 1]
if not configs.all_configs[config_name] then
Cheat.AddEvent('This config does not exist.')
return
end
local config_data = configs.all_configs[config_name].config_data
local decoded_config_data = base64.decode(config_data)
local json_to_table = json.parse(decoded_config_data)
configs.load(json_to_table)
end
configs.ui.load:RegisterCallback(configs.load_config)
Menu.Button(tabs.config, 'Recommendations', 'Discord Server', '', function()
Panorama.Open().SteamOverlayAPI.OpenExternalBrowserURL('https://discord.gg/tSjcsbmMFF')
end)
Menu.Button(tabs.config, 'Recommendations', 'NL Config', '', function()
Panorama.Open().SteamOverlayAPI.OpenExternalBrowserURL('https://en.neverlose.cc/market/item?id=VKC48g')
end)
Menu.Button(tabs.config, 'Recommendations', 'Solus UI', '', function()
Panorama.Open().SteamOverlayAPI.OpenExternalBrowserURL('https://en.neverlose.cc/market/item?id=XjP7t5')
end)
local callbacks = {}
callbacks.on_prediction = function(cmd)
animation_breaker.handle_prediction(cmd)
aimbot.on_prediction(cmd)
global.hitchances()
antiaim.on_prediction()
antiaim.allow_on_use()
teleport.on_prediction()
antiaim.roll(cmd)
playerlist:on_prediction()
max_misses.on_prediction()
end
callbacks.on_createmove = function(cmd)
animation_breaker.handle_cmove()
antiaim.roll_movement(cmd)
end
callbacks.on_evets = function(event)
antiaim.antibruteforce.on_event(event)
hitmarker.on_hurt(event)
trashtalk.on_kill(event)
hitlogs.on_hurt(event)
hitlogs.reset(event)
hitsound.on_hurt(event)
max_misses.reset_data(event)
end
callbacks.on_draw = function()
scope_line.on_draw()
hitmarker.on_draw()
snaplines.on_draw()
molotov.on_draw()
hitlogs.on_draw()
arrows.on_draw()
binds.on_draw()
sloweddown.on_draw:update()
min_damage.on_draw()
clantag.on_draw()
end
callbacks.on_destroy = function()
animation_breaker.on_destroy()
molotov.on_destroy()
clantag.destroy()
end
callbacks.on_registered_shot = function(shot)
hitlogs.on_registered_shot(shot)
max_misses.on_registered_shot(shot)
end
callbacks.on_ragebot = function(shot)
hitlogs.on_ragebot(shot)
end
Cheat.RegisterCallback("draw", callbacks.on_draw)
Cheat.RegisterCallback("events", callbacks.on_evets)
Cheat.RegisterCallback("destroy", callbacks.on_destroy)
Cheat.RegisterCallback("prediction", callbacks.on_prediction)
Cheat.RegisterCallback("createmove", callbacks.on_createmove)
Cheat.RegisterCallback("ragebot_shot", callbacks.on_ragebot)
Cheat.RegisterCallback("registered_shot", callbacks.on_registered_shot)