Загрузка данных
--by scriptleaks https://discord.gg/n4DpEunxbj t.me/scriptleakslol
if ffi == nil then
return gui.notify:add(gui.notification("WARNING!", "ENABLE \"UNSAFE LOCAL SCRIPTS\" IN LUA SETTINGS AND RELOAD THE SCRIPT!", draw.textures.icon_close))
end
print("██████╗░███╗░░██╗██████╗░")
print("██╔══██╗████╗░██║██╔══██╗")
print("██████╔╝██╔██╗██║██║░░██║")
print("██╔═══╝░██║╚████║██║░░██║")
print("██║░░░░░██║░╚███║██████╔╝")
print("╚═╝░░░░░╚═╝░░╚══╝╚═════╝░")
game.engine:ClientCmd("r_show_build_info false")
resource_path = "fatality/PND"--ws.GetResourceDir()
build = "default"
function safe_load_texture(arg_1_0)
if not arg_1_0 then
return nil
end
local var_1_0 = draw.texture(arg_1_0)
if not var_1_0 then
return nil
end
var_1_0:create()
if not var_1_0.obj then
return nil
end
local var_1_1 = var_1_0:get_size()
if not var_1_1 or var_1_1.x == 0 or var_1_1.y == 0 then
return nil
end
return var_1_0
end
function is_mouse_down()
return gui.input:is_mouse_down(gui.mouse_button["left"])
end
function ease_in_out_cubic(arg_3_0)
if arg_3_0 < 0.5 then
return 4 * arg_3_0 * arg_3_0 * arg_3_0
else
local var_3_0 = 2 * arg_3_0 - 2
return 0.5 * var_3_0 * var_3_0 * var_3_0 + 1
end
end
function pad(arg_4_0)
return arg_4_0 < 10 and "0" .. arg_4_0 or tostring(arg_4_0)
end
function lerp(arg_5_0, arg_5_1, arg_5_2)
return (1 - arg_5_2) * arg_5_0 + arg_5_2 * arg_5_1
end
function is_zoom()
local var_6_0 = entities.get_local_pawn()
if var_6_0.m_bIsScoped and var_6_0.m_bIsScoped:get() then
return true
end
return false
end
function is_enabled(arg_7_0, arg_7_1)
return bit.band(arg_7_0, arg_7_1) ~= 0
end
function apply_alpha(arg_8_0, arg_8_1)
return arg_8_0:mod_a(arg_8_1)
end
function is_grenade(arg_9_0)
return arg_9_0 == 43 or arg_9_0 == 44 or arg_9_0 == 45 or arg_9_0 == 46 or arg_9_0 == 48
end
function is_hotkey_on(arg_10_0)
local var_10_0 = type(arg_10_0) == "table" and arg_10_0 or {
arg_10_0
}
local var_10_1 = gui and gui.ctx
if not var_10_1 or not var_10_1.Find then
return false
end
for iter_10_0, iter_10_1 in ipairs(var_10_0) do
local var_10_2 = var_10_1:Find(iter_10_1)
if var_10_2 and var_10_2:GetValue():get_hotkey_state() then
return true
end
end
return false
end
KEY_W, KEY_A, KEY_S, KEY_D = 87, 65, 83, 68
function deg2rad(arg_11_0)
return arg_11_0 * math.pi / 180
end
function angle_to_forward(arg_12_0)
local var_12_0 = deg2rad(arg_12_0.x)
local var_12_1 = deg2rad(arg_12_0.y)
local var_12_2 = math.cos(var_12_0)
return {
x = var_12_2 * math.cos(var_12_1),
y = var_12_2 * math.sin(var_12_1),
z = -math.sin(var_12_0)
}
end
function vec_sub(arg_13_0, arg_13_1)
return {
x = arg_13_0.x - arg_13_1.x,
y = arg_13_0.y - arg_13_1.y,
z = arg_13_0.z - arg_13_1.z
}
end
function vec_dot(arg_14_0, arg_14_1)
return arg_14_0.x * arg_14_1.x + arg_14_0.y * arg_14_1.y + arg_14_0.z * arg_14_1.z
end
function vec_length(arg_15_0)
return math.sqrt(arg_15_0.x * arg_15_0.x + arg_15_0.y * arg_15_0.y + arg_15_0.z * arg_15_0.z)
end
function vec_normalize(arg_16_0)
local var_16_0 = vec_length(arg_16_0)
if var_16_0 == 0 then
return {
x = 0,
y = 0,
z = 0
}
end
return {
x = arg_16_0.x / var_16_0,
y = arg_16_0.y / var_16_0,
z = arg_16_0.z / var_16_0
}
end
function vec_add(arg_17_0, arg_17_1)
return {
x = arg_17_0.x + arg_17_1.x,
y = arg_17_0.y + arg_17_1.y,
z = arg_17_0.z + arg_17_1.z
}
end
function angle_lerp(arg_18_0, arg_18_1, arg_18_2)
return Vector(arg_18_0.x + (arg_18_1.x - arg_18_0.x) * arg_18_2, arg_18_0.y + (arg_18_1.y - arg_18_0.y) * arg_18_2, 0)
end
function normalize_angle(arg_19_0)
while arg_19_0 > 180 do
arg_19_0 = arg_19_0 - 360
end
while arg_19_0 < -180 do
arg_19_0 = arg_19_0 + 360
end
return arg_19_0
end
function normalize_angles(arg_20_0)
return Vector(normalize_angle(arg_20_0.x), normalize_angle(arg_20_0.y), 0)
end
function calc_angle(arg_21_0, arg_21_1)
local var_21_0 = vec_sub(arg_21_1, arg_21_0)
local var_21_1 = math.sqrt(var_21_0.x * var_21_0.x + var_21_0.y * var_21_0.y)
local var_21_2 = -math.deg(math.atan2(var_21_0.z, var_21_1))
local var_21_3 = math.deg(math.atan2(var_21_0.y, var_21_0.x))
return Vector(var_21_2, var_21_3, 0)
end
function calc_fov(arg_22_0, arg_22_1)
local var_22_0 = vec_dot(arg_22_0, vec_normalize(arg_22_1))
return math.acos(var_22_0) * (180 / math.pi)
end
function vector_to_angles(arg_23_0, arg_23_1)
local var_23_0 = arg_23_1 - arg_23_0
local var_23_1 = var_23_0.x
local var_23_2 = var_23_0.y
local var_23_3 = var_23_0.z
local var_23_4 = math.sqrt(var_23_1 * var_23_1 + var_23_2 * var_23_2)
local var_23_5 = math.deg(math.atan2(-var_23_3, var_23_4))
local var_23_6 = math.deg(math.atan2(var_23_2, var_23_1))
return Vector(var_23_5, var_23_6, 0)
end
function distance(arg_24_0, arg_24_1)
return (arg_24_0 - arg_24_1):Length()
end
update = {
version = "v3.1.5",
update_lines = {
"+ Added Crouch in Air",
"* Fixed Trails",
"* Fixed Gamma",
"* Fixed Hitmarker",
"* Fixed Fast Ladder",
"* Fixed Animation Break",
"* Fixed Debounce Zoom",
"* Fixed Transparent Arms",
"* Fixed Fake Duck Animation",
"* Fixed Viewmodel Hit Effect",
"~ Reworked Logs",
"~ Reworked Manuals",
"~ Reworked Watermark",
"~ Reworked Out Of Field",
"~ Reworked Menu Effect",
"~ Reworked Transparency",
"~ Reworked Disable Shadows",
"- Removed Free Cam",
"- Removed Fake Pitch",
"- Removed Avoid Backstab"
}
}
members = {
staff = {
Edward22 = "[STAFF]",
Arc = "[STAFF]",
april = "[STAFF]",
Agapornis = "[STAFF]",
["3AGLE"] = "[STAFF]",
["1tsuki"] = "[STAFF]",
gnida = "[FRIENDS]",
Garan0n = "[STAFF]",
TALZi = "[STAFF]",
Buttermeow = "[STAFF]",
PyZik = "[STAFF]",
PizDyk = "[STAFF]",
panzerfaust = "[STAFF]",
kayron = "[STAFF]",
jompey = "[STAFF]",
["Imperator hL"] = "[STAFF]",
ay0 = "[STAFF]",
trotek = "[STAFF]",
RG0609 = "[STAFF]",
philip015 = "[STAFF]",
pf = "[STAFF]",
Imposseburu = "[STAFF]",
hL = "[STAFF]"
},
username = gui.ctx.user.username or "unknown_user"
}
config = {
menu = {
dpi_scale = gui.ctx:Find("misc>menu>dpi scale"),
theme = gui.ctx:Find("misc>menu>theme")
},
rage = {
aimbot = gui.ctx:Find("rage>aimbot>general>aimbot"),
autofire = gui.ctx:Find("rage>aimbot>general>autofire"),
doubletap = gui.ctx:Find("rage>aimbot>doubletap"),
doubletap_manual = gui.ctx:Find("rage>aimbot>doubletap>settings>on manual shot"),
silent = gui.ctx:Find("rage>aimbot>general>silent"),
penetration = gui.ctx:Find("rage>aimbot>general>penetration"),
force_bodyaim = gui.ctx:Find("rage>aimbot>general>force bodyaim"),
force_shoot = gui.ctx:Find("rage>aimbot>general>force shoot")
},
anti_aim = {
anti_aim = gui.ctx:Find("rage>anti-aim>angles>anti-aim"),
pitch = gui.ctx:Find("rage>anti-aim>angles>pitch>settings>value"),
hide_shot = gui.ctx:Find("rage>anti-aim>angles>hide shot"),
yaw_base = gui.ctx:Find("rage>anti-aim>angles>yaw base"),
left_override = gui.ctx:Find("rage>anti-aim>angles>manual override>override left"),
right_override = gui.ctx:Find("rage>anti-aim>angles>manual override>override right"),
back_override = gui.ctx:Find("rage>anti-aim>angles>manual override>override back"),
forward_override = gui.ctx:Find("rage>anti-aim>angles>manual override>override forward")
},
legit = {
legit_enabled = gui.ctx:Find("legit>general>enabled"),
legit_visualize_fov = gui.ctx:Find("legit>general>visualize fov"),
legit_aim_assist = gui.ctx:Find("legit>weapon>general>aim>aim assist"),
legit_triggerbot = gui.ctx:Find("legit>weapon>general>trigger>triggerbot"),
legit_recoil = gui.ctx:Find("legit>weapon>general>rcs>recoil control")
},
visuals = {
viewmodel = gui.ctx:Find("visuals>misc>local>viewmodel override")
},
misc = {
bhop = gui.ctx:Find("misc>movement>bhop"),
jumpbug = gui.ctx:Find("misc>movement>jumpbug"),
autostrafer = gui.ctx:Find("misc>movement>autostrafer"),
turn_angle_slider = gui.ctx:Find("misc>movement>autostrafer>turn angle"),
boost_slider = gui.ctx:Find("misc>movement>autostrafer>boost"),
duck_peek_control = gui.ctx:Find("misc>movement>duck peek assist"),
untrusted = gui.ctx:Find("misc>matchmaking>untrusted features")
}
}
themes = {
{
glow_color = draw.Color(32, 24, 46, 120),
color_left = draw.Color(32, 24, 46, 255),
color_right = draw.Color(61, 35, 50, 255),
border_color_left = draw.Color(46, 33, 53, 255),
border_color_right = draw.Color(80, 53, 68, 255),
stripe_color_left = draw.Color(162, 36, 78, 255),
stripe_color_right = draw.Color(169, 110, 104, 255),
text_color = draw.color.White(),
text_2_color = draw.Color(232, 12, 100),
line_color = draw.Color(255, 255, 255, 50),
member_tag_color = draw.Color(164, 181, 210)
},
{
glow_color = draw.Color(28, 28, 28, 120),
color_left = draw.Color(20, 20, 20, 255),
color_right = draw.Color(28, 28, 28, 255),
border_color_left = draw.Color(20, 20, 20, 255),
border_color_right = draw.Color(37, 37, 37, 255),
stripe_color_left = draw.Color(185, 24, 48, 255),
stripe_color_right = draw.Color(247, 77, 92, 255),
text_color = draw.color.White(),
text_2_color = draw.Color(247, 77, 92),
line_color = draw.Color(255, 255, 255, 50),
member_tag_color = draw.Color(103, 103, 103)
},
[2097152] = {
glow_color = draw.Color(29, 21, 13, 120),
color_left = draw.Color(19, 19, 19, 230),
color_right = draw.Color(19, 19, 19, 230),
border_color_left = draw.Color(20, 20, 20, 255),
border_color_right = draw.Color(22, 22, 22, 255),
stripe_color_left = draw.Color(140, 74, 0, 255),
stripe_color_right = draw.Color(140, 74, 0, 255),
text_color = draw.Color(200, 210, 195),
text_2_color = draw.Color(255, 116, 23),
line_color = draw.Color(32, 29, 27, 255),
member_tag_color = draw.Color(106, 106, 106)
},
[4194304] = {
glow_color = draw.Color(227, 229, 232, 120),
color_left = draw.Color(214, 216, 219, 230),
color_right = draw.Color(227, 229, 232, 230),
border_color_left = draw.Color(163, 166, 169, 255),
border_color_right = draw.Color(240, 244, 251, 255),
stripe_color_left = draw.Color(244, 140, 169, 255),
stripe_color_right = draw.Color(132, 212, 236, 255),
text_color = draw.Color(48, 48, 48),
text_2_color = draw.Color(243, 143, 171),
line_color = draw.Color(48, 48, 48, 50),
member_tag_color = draw.Color(110, 112, 120)
},
[8388608] = {
glow_color = draw.Color(227, 229, 232, 50),
color_left = draw.Color(150, 150, 150, 40),
color_right = draw.Color(150, 150, 150, 70),
border_color_left = draw.Color(255, 255, 255, 50),
border_color_right = draw.Color(255, 255, 255, 100),
stripe_color_left = draw.Color(94, 104, 112),
stripe_color_right = draw.Color(94, 104, 112),
text_color = draw.Color(19, 19, 19),
text_2_color = draw.Color(217, 78, 78),
line_color = draw.Color(131, 141, 151),
member_tag_color = draw.Color(67, 67, 67)
},
[16777216] = {
glow_color = draw.Color(17, 17, 17, 160),
color_left = draw.Color(17, 17, 17, 255),
color_right = draw.Color(26, 23, 24, 255),
border_color_left = draw.Color(22, 22, 23, 255),
border_color_right = draw.Color(29, 29, 30, 255),
stripe_color_left = draw.Color(239, 9, 95, 255),
stripe_color_right = draw.Color(239, 9, 95, 255),
text_color = draw.color.White(),
text_2_color = draw.Color(239, 9, 95),
line_color = draw.Color(31, 31, 32, 255),
member_tag_color = draw.Color(86, 83, 93)
},
[33554432] = {
glow_color = draw.Color(108, 134, 195, 230),
color_left = draw.Color(111, 133, 184, 255),
color_right = draw.Color(108, 134, 195, 255),
border_color_left = draw.Color(79, 105, 165, 150),
border_color_right = draw.Color(79, 105, 165, 150),
stripe_color_left = draw.Color(142, 166, 221, 255),
stripe_color_right = draw.Color(142, 166, 221, 255),
text_color = draw.Color(28, 28, 28),
text_2_color = draw.Color(240, 192, 216),
line_color = draw.Color(142, 166, 221, 255),
member_tag_color = draw.Color(58, 67, 89)
}
}
theme_value_cache = nil
theme_element_ref = config.menu.theme
theme_last_value = nil
theme_frame_counter = 0
events.presentQueue:Add(function()
theme_frame_counter = theme_frame_counter + 1
if theme_frame_counter % 120 ~= 0 then
return
end
if not theme_element_ref then
theme_element_ref = config.menu.theme
return
end
local var_25_0 = theme_element_ref:GetValue():Get():GetRaw()
if var_25_0 ~= theme_last_value then
theme_last_value = var_25_0
theme_value_cache = var_25_0
end
end)
function get_current_theme()
return themes[theme_value_cache] or themes[1]
end
log_menu = {
log_menu_duration = 3,
show_update_log_menu = false,
show_log_menu = true,
fade_duration = 0.5,
update_log_menu_duration = 3,
update_log_menu_start_time = 0,
log_menu_start_time = game.globalVars.m_flRealTime
}
events.presentQueue:Add(function()
if not log_menu.show_log_menu and not log_menu.show_update_log_menu then
return
end
slot_27_0_0 = game.globalVars.m_flRealTime
if log_menu.show_log_menu and slot_27_0_0 - log_menu.log_menu_start_time >= log_menu.log_menu_duration then
log_menu.show_log_menu = false
log_menu.show_update_log_menu = true
log_menu.update_log_menu_start_time = slot_27_0_0
if not log_menu.show_update_log_menu then
return
end
end
if log_menu.show_update_log_menu and slot_27_0_0 - log_menu.update_log_menu_start_time >= log_menu.update_log_menu_duration then
log_menu.show_update_log_menu = false
return
end
if not log_menu.show_log_menu and not log_menu.show_update_log_menu then
return
end
slot_27_1_0 = draw.surface
slot_27_1_0.g:SetTexture(nil)
slot_27_1_0.font = draw.fonts.gui_main
slot_27_1_0.g.antiAlias = true
slot_27_2_0 = draw.GetScale()
slot_27_3_0, slot_27_4_0 = game.engine:GetScreenSize()
function slot_27_5_0(arg_28_0, arg_28_1)
local var_28_0 = slot_27_0_0 - arg_28_0
if var_28_0 < log_menu.fade_duration then
local var_28_1 = var_28_0 / log_menu.fade_duration
return ease_in_out_cubic(var_28_1)
elseif var_28_0 > arg_28_1 - log_menu.fade_duration then
local var_28_2 = (arg_28_1 - var_28_0) / log_menu.fade_duration
return ease_in_out_cubic(var_28_2)
else
return 1
end
end
if log_menu.show_log_menu then
slot_27_6_1 = slot_27_5_0(log_menu.log_menu_start_time, log_menu.log_menu_duration)
slot_27_7_1 = get_current_theme()
slot_27_8_1 = "PND"
slot_27_9_1 = ".lua"
slot_27_10_1 = ""
slot_27_11_1 = slot_27_1_0.font
slot_27_12_1 = slot_27_11_1:GetTextSize(slot_27_8_1)
slot_27_13_1 = slot_27_11_1:GetTextSize(slot_27_9_1)
slot_27_14_1 = slot_27_11_1:GetTextSize(slot_27_10_1)
slot_27_15_1 = (slot_27_12_1.x + slot_27_13_1.x + slot_27_14_1.x) * slot_27_2_0
slot_27_16_1 = slot_27_12_1.y * slot_27_2_0
slot_27_17_1 = 20 * slot_27_2_0
slot_27_18_1 = 8 * slot_27_2_0
slot_27_19_1 = 5 * slot_27_2_0
slot_27_20_1 = 8 * slot_27_2_0
slot_27_21_1 = 1 * slot_27_2_0
slot_27_22_1 = slot_27_15_1 + slot_27_17_1 * 2
slot_27_23_2 = slot_27_16_1 + slot_27_18_1 * 2
slot_27_24_2 = (slot_27_3_0 - slot_27_22_1) / 2
slot_27_25_2 = slot_27_4_0 * 0.3333333333333333 - slot_27_23_2 / 2
slot_27_26_1 = slot_27_24_2 + slot_27_22_1
slot_27_27_1 = slot_27_25_2 + slot_27_23_2
slot_27_1_0:AddGlow(draw.Rect(slot_27_24_2 + slot_27_21_1, slot_27_25_2 + slot_27_21_1, slot_27_26_1 - slot_27_21_1, slot_27_27_1 - slot_27_21_1), slot_27_20_1, apply_alpha(slot_27_7_1.glow_color, slot_27_6_1))
slot_27_1_0:AddRectFilledRoundedMulticolor(draw.Rect(slot_27_24_2 - slot_27_21_1, slot_27_25_2 - slot_27_21_1, slot_27_26_1 + slot_27_21_1, slot_27_27_1 + slot_27_21_1), {
apply_alpha(slot_27_7_1.border_color_left, slot_27_6_1),
apply_alpha(slot_27_7_1.border_color_right, slot_27_6_1),
apply_alpha(slot_27_7_1.border_color_right, slot_27_6_1),
apply_alpha(slot_27_7_1.border_color_left, slot_27_6_1)
}, slot_27_19_1 + 1, draw.Rounding.ALL)
slot_27_1_0:AddRectFilledRoundedMulticolor(draw.Rect(slot_27_24_2, slot_27_25_2, slot_27_26_1, slot_27_27_1), {
apply_alpha(slot_27_7_1.color_left, slot_27_6_1),
apply_alpha(slot_27_7_1.color_right, slot_27_6_1),
apply_alpha(slot_27_7_1.color_right, slot_27_6_1),
apply_alpha(slot_27_7_1.color_left, slot_27_6_1)
}, slot_27_19_1, draw.Rounding.ALL)
slot_27_1_0:AddRectFilledMulticolor(draw.Rect(slot_27_24_2 + 4 * slot_27_2_0, slot_27_27_1, slot_27_26_1 - 4 * slot_27_2_0, slot_27_27_1 + 1 * slot_27_2_0), {
apply_alpha(slot_27_7_1.stripe_color_left, slot_27_6_1),
apply_alpha(slot_27_7_1.stripe_color_right, slot_27_6_1),
apply_alpha(slot_27_7_1.stripe_color_right, slot_27_6_1),
apply_alpha(slot_27_7_1.stripe_color_left, slot_27_6_1)
})
slot_27_28_1 = slot_27_25_2 + (slot_27_23_2 - slot_27_16_1) / 2
slot_27_29_1 = (slot_27_3_0 - slot_27_15_1) / 2
slot_27_1_0:AddText(draw.Vec2(slot_27_29_1, slot_27_28_1), slot_27_8_1, apply_alpha(slot_27_7_1.text_color, slot_27_6_1))
slot_27_1_0:AddText(draw.Vec2(slot_27_29_1 + slot_27_12_1.x * slot_27_2_0, slot_27_28_1), slot_27_9_1, apply_alpha(slot_27_7_1.text_2_color, slot_27_6_1))
slot_27_1_0:AddText(draw.Vec2(slot_27_29_1 + (slot_27_12_1.x + slot_27_13_1.x) * slot_27_2_0, slot_27_28_1), slot_27_10_1, apply_alpha(slot_27_7_1.text_color, slot_27_6_1))
end
if log_menu.show_update_log_menu then
slot_27_6_0 = slot_27_5_0(log_menu.update_log_menu_start_time, log_menu.update_log_menu_duration)
slot_27_7_0 = slot_27_1_0.font
slot_27_8_0 = {
Removed = 5,
Moved = 4,
Reworked = 3,
Fixed = 2,
Added = 1
}
function slot_27_9_0(arg_29_0)
for iter_29_0, iter_29_1 in pairs(slot_27_8_0) do
if arg_29_0:find(iter_29_0) then
return iter_29_1
end
end
return 100
end
table.sort(update.update_lines, function(arg_30_0, arg_30_1)
local var_30_0 = slot_27_9_0(arg_30_0)
local var_30_1 = slot_27_9_0(arg_30_1)
if var_30_0 == var_30_1 then
local var_30_2 = slot_27_7_0:GetTextSize(arg_30_0).x
local var_30_3 = slot_27_7_0:GetTextSize(arg_30_1).x
if var_30_2 == var_30_3 then
return arg_30_0 < arg_30_1
else
return var_30_2 < var_30_3
end
else
return var_30_0 < var_30_1
end
end)
slot_27_10_0 = 14 * slot_27_2_0
slot_27_11_0 = 20 * slot_27_2_0
slot_27_12_0 = 12 * slot_27_2_0
slot_27_13_0 = math.max(1, math.floor(1 * slot_27_2_0))
slot_27_14_0 = 1 * slot_27_2_0
slot_27_15_0 = 8 * slot_27_2_0
slot_27_16_0 = get_current_theme()
slot_27_17_0 = slot_27_7_0:GetTextSize(update.version)
slot_27_18_0 = 0
slot_27_19_0 = 0
for iter_27_0, iter_27_1 in ipairs(update.update_lines) do
slot_27_25_1 = slot_27_7_0:GetTextSize(iter_27_1)
if slot_27_18_0 < slot_27_25_1.x then
slot_27_18_0 = slot_27_25_1.x
end
slot_27_19_0 = slot_27_25_1.y
end
slot_27_20_0 = math.max(slot_27_18_0, slot_27_17_0.x)
slot_27_21_0 = slot_27_10_0
slot_27_22_0 = slot_27_12_0
slot_27_23_0 = slot_27_19_0 * slot_27_2_0
slot_27_24_0 = slot_27_17_0.y * slot_27_2_0
slot_27_25_0 = slot_27_24_0 + slot_27_21_0 + #update.update_lines * slot_27_23_0 + (#update.update_lines - 1) * slot_27_21_0
slot_27_26_0 = slot_27_20_0 * slot_27_2_0 + slot_27_11_0 * 2
slot_27_27_0 = slot_27_25_0 + slot_27_22_0 * 2
slot_27_28_0 = slot_27_4_0 * 0.3333333333333333 - slot_27_27_0 / 2
slot_27_29_0 = 5 * slot_27_2_0
slot_27_30_0 = math.max(slot_27_28_0, slot_27_29_0)
if slot_27_4_0 < slot_27_30_0 + slot_27_27_0 then
slot_27_30_0 = slot_27_4_0 - slot_27_27_0
if slot_27_30_0 < slot_27_29_0 then
slot_27_30_0 = slot_27_29_0
end
end
slot_27_31_0 = (slot_27_3_0 - slot_27_26_0) / 2
slot_27_32_0 = slot_27_31_0 + slot_27_26_0
slot_27_33_0 = slot_27_30_0 + slot_27_27_0
slot_27_34_0 = 5 * slot_27_2_0
slot_27_1_0:AddGlow(draw.Rect(slot_27_31_0 + slot_27_14_0, slot_27_30_0 + slot_27_14_0, slot_27_32_0 - slot_27_14_0, slot_27_33_0 - slot_27_14_0), slot_27_15_0, apply_alpha(slot_27_16_0.glow_color, slot_27_6_0))
slot_27_1_0:AddRectFilledRoundedMulticolor(draw.Rect(slot_27_31_0 - slot_27_14_0, slot_27_30_0 - slot_27_14_0, slot_27_32_0 + slot_27_14_0, slot_27_33_0 + slot_27_14_0), {
apply_alpha(slot_27_16_0.border_color_left, slot_27_6_0),
apply_alpha(slot_27_16_0.border_color_right, slot_27_6_0),
apply_alpha(slot_27_16_0.border_color_right, slot_27_6_0),
apply_alpha(slot_27_16_0.border_color_left, slot_27_6_0)
}, slot_27_34_0 + 1, draw.Rounding.ALL)
slot_27_1_0:AddRectFilledRoundedMulticolor(draw.Rect(slot_27_31_0, slot_27_30_0, slot_27_32_0, slot_27_33_0), {
apply_alpha(slot_27_16_0.color_left, slot_27_6_0),
apply_alpha(slot_27_16_0.color_right, slot_27_6_0),
apply_alpha(slot_27_16_0.color_right, slot_27_6_0),
apply_alpha(slot_27_16_0.color_left, slot_27_6_0)
}, slot_27_34_0, draw.Rounding.ALL)
slot_27_1_0:AddRectFilledMulticolor(draw.Rect(slot_27_31_0 + 4 * slot_27_2_0, slot_27_33_0, slot_27_32_0 - 4 * slot_27_2_0, slot_27_33_0 + 1), {
apply_alpha(slot_27_16_0.stripe_color_left, slot_27_6_0),
apply_alpha(slot_27_16_0.stripe_color_right, slot_27_6_0),
apply_alpha(slot_27_16_0.stripe_color_right, slot_27_6_0),
apply_alpha(slot_27_16_0.stripe_color_left, slot_27_6_0)
})
slot_27_35_1 = slot_27_30_0 + slot_27_22_0
slot_27_36_0 = (slot_27_3_0 - slot_27_17_0.x * slot_27_2_0) / 2
slot_27_1_0:AddText(draw.Vec2(slot_27_36_0, slot_27_35_1), update.version, apply_alpha(slot_27_16_0.text_2_color, slot_27_6_0))
slot_27_35_0 = slot_27_35_1 + slot_27_24_0 + slot_27_21_0
for iter_27_2, iter_27_3 in ipairs(update.update_lines) do
slot_27_43_0 = (slot_27_3_0 - slot_27_7_0:GetTextSize(iter_27_3).x * slot_27_2_0) / 2
slot_27_1_0:AddText(draw.Vec2(slot_27_43_0, slot_27_35_0), iter_27_3, apply_alpha(slot_27_16_0.text_color, slot_27_6_0))
slot_27_35_0 = slot_27_35_0 + slot_27_23_0
if iter_27_2 < #update.update_lines then
slot_27_35_0 = slot_27_35_0 + slot_27_21_0 / 2
slot_27_1_0:AddRectFilled(draw.Rect(slot_27_31_0 + slot_27_11_0, slot_27_35_0 - slot_27_13_0 / 2, slot_27_32_0 - slot_27_11_0, slot_27_35_0 + slot_27_13_0 / 2), apply_alpha(slot_27_16_0.line_color, slot_27_6_0))
slot_27_35_0 = slot_27_35_0 + slot_27_21_0 / 2
end
end
end
end)
slot_0_0_0 = nil
slot_0_1_0 = {
x = 19,
y = 19
}
slot_0_2_0 = resource_path .. "/icons/heartS.png"
slot_0_3_0 = draw.texture(slot_0_2_0)
if slot_0_3_0 then
slot_0_3_0:Create()
slot_0_4_1 = slot_0_3_0:get_size()
if slot_0_4_1.x > 0 and slot_0_4_1.y > 0 then
slot_0_0_0 = slot_0_3_0
draw.textures.PND_icon = slot_0_3_0
else
slot_0_0_0 = draw.textures.gui_icon_bug
draw.textures.PND_icon = draw.textures.gui_icon_bug
end
else
slot_0_0_0 = draw.textures.gui_icon_bug
end
wnd = gui.GetMainWindow()
tab = wnd:AddTab("pnd_lua", draw.textures.PND_icon, "PND.lua", gui.TabLayoutMode.SUBTABS)
subtab_rage = tab:AddTab("pnd_rage", "Rage", gui.TabLayoutMode.DEFAULT, true)
subtab_misc = tab:AddTab("pnd_misc", "Misc", gui.TabLayoutMode.DEFAULT, false)
subtab_visuals = tab:AddTab("pnd_visuals", "Visuals", gui.TabLayoutMode.DEFAULT, false)
subtab_configs = tab:AddTab("pnd_configs", "Configs", gui.TabLayoutMode.DEFAULT, false)
jumpscout_group = gui.Group("rage_group1", "Jump Scout", 196, gui.GroupWidthMode.REDUCED)
subtab_rage:Add(jumpscout_group)
aimbot_group = gui.Group("rage_group2", "Aimbot", 140, gui.GroupWidthMode.REDUCED)
extrarage_group = gui.Group("rage_group3", "Extra", 84, gui.GroupWidthMode.REDUCED)
stack2_rage = gui.MakeStackedGroups("stack2_rage", draw.Vec2(226, 300), {
aimbot_group,
extrarage_group
})
subtab_rage:Add(stack2_rage)
antiaim_group = gui.Group("rage_group4", "Anti-aim", 112, gui.GroupWidthMode.REDUCED)
subtab_rage:Add(antiaim_group)
subtab_rage:Reset()
subtab_misc:Reset()
subtab_visuals:Reset()
subtab_configs:Reset()
cb_jump_scout = gui.Checkbox("cb_jump_scout")
row_jump_scout = gui.MakeControl("Jump Scout", cb_jump_scout)
jumpscout_group:Add(row_jump_scout)
sl_jump_hitchance = gui.Slider("sl_jump_hitchance", -1, 100, {
"%.0f"
})
row_jump_hitchance = gui.MakeControl("Hitchance", sl_jump_hitchance)
jumpscout_group:Add(row_jump_hitchance)
sl_jump_pointscale = gui.Slider("sl_jump_pointscale", 0, 100, {
"%.0f"
})
row_jump_pointscale = gui.MakeControl("Pointscale", sl_jump_pointscale)
jumpscout_group:Add(row_jump_pointscale)
cbx_jump_scout_autostop = gui.ComboBox("cbx_jump_scout_autostop")
cbx_jump_scout_autostop:Add(gui.Selectable("none_cbx_jump_scout_autostop", "None"))
cbx_jump_scout_autostop:Add(gui.Selectable("normal_cbx_jump_scout_autostop", "Normal"))
cbx_jump_scout_autostop:Add(gui.Selectable("high_cbx_jump_scout_autostop", "High"))
row_jump_scout_autostop = gui.MakeControl("Autostop", cbx_jump_scout_autostop)
jumpscout_group:Add(row_jump_scout_autostop)
cb_jump_better_autostop = gui.Checkbox("cb_jump_better_autostop")
row_jump_better_autostop = gui.MakeControl("Boost Autostop", cb_jump_better_autostop)
cb_jump_autostop_highest = gui.Checkbox("cb_jump_autostop_highest")
row_jump_autostop_highest = gui.MakeControl("Autostop at the Highest Point", cb_jump_autostop_highest)
cb_jump_stop_on_land = gui.Checkbox("cb_jump_stop_on_land")
row_jump_stop_on_land = gui.MakeControl("Stop on land", cb_jump_stop_on_land)
settings = gui.Settings("jump_scout_settings")
settings:Add(row_jump_better_autostop)
settings:Add(row_jump_autostop_highest)
settings:Add(row_jump_stop_on_land)
row_jump_scout_autostop:Add(settings)
cb_jump_only_head = gui.Checkbox("cb_jump_only_head")
row_jump_only_head = gui.MakeControl("Only Head", cb_jump_only_head)
jumpscout_group:Add(row_jump_only_head)
cb_jump_force_shoot = gui.Checkbox("cb_jump_force_shoot")
row_jump_force_shoot = gui.MakeControl("Force Shoot in Air", cb_jump_force_shoot)
jumpscout_group:Add(row_jump_force_shoot)
cb_animfix = gui.Checkbox("cb_animfix")
row_animfix = gui.MakeControl("Head Hitbox Correction", cb_animfix)
aimbot_group:Add(row_animfix)
cb_anti_aimpunch = gui.Checkbox("cb_anti_aimpunch")
row_anti_aimpunch = gui.MakeControl("Remove Aimpunch", cb_anti_aimpunch)
aimbot_group:Add(row_anti_aimpunch)
cb_accuracy_boost = gui.Checkbox("cb_accuracy_boost")
row_accuracy_boost = gui.MakeControl("Accuracy Boost", cb_accuracy_boost)
aimbot_group:Add(row_accuracy_boost)
cb_auto_force_shot = gui.Checkbox("cb_auto_force_shot")
row_auto_force_shot = gui.MakeControl("Auto Force shoot", cb_auto_force_shot)
aimbot_group:Add(row_auto_force_shot)
cb_dt_on_knife = gui.Checkbox("cb_dt_on_knife")
row_dt_on_knife = gui.MakeControl("DT on Knife", cb_dt_on_knife)
extrarage_group:Add(row_dt_on_knife)
cb_disable_m2_on_r8 = gui.Checkbox("cb_disable_m2_on_r8")
row_disable_m2_on_r8 = gui.MakeControl("Disable M2 on R8", cb_disable_m2_on_r8)
extrarage_group:Add(row_disable_m2_on_r8)
cb_freestands = gui.Checkbox("cb_freestands")
row_freestands = gui.MakeControl("Freestand", cb_freestands)
antiaim_group:Add(row_freestands)
cb_freestands_off_in_air = gui.Checkbox("cb_freestands_off_in_air")
row_freestands_off_in_air = gui.MakeControl("Turn off in Air", cb_freestands_off_in_air)
settings_freestands = gui.Settings("settings_freestands")
settings_freestands:Add(row_freestands_off_in_air)
row_freestands:Add(settings_freestands)
cb_fast_angles = gui.Checkbox("cb_fast_angles")
row_fast_angles = gui.MakeControl("Fast Angles", cb_fast_angles)
antiaim_group:Add(row_fast_angles)
cb_fast_ladder = gui.Checkbox("cb_fast_ladder")
row_fast_ladder = gui.MakeControl("Fast Ladder", cb_fast_ladder)
antiaim_group:Add(row_fast_ladder)
movement_group = gui.Group("misc_group1", "Movenent", 224, gui.GroupWidthMode.REDUCED)
network_group = gui.Group("misc_group2", "Network Performance Tweaks", 55, gui.GroupWidthMode.REDUCED)
grenades_group = gui.Group("misc_group3", "Grenades", 85, gui.GroupWidthMode.REDUCED)
stack1_misc = gui.MakeStackedGroups("stack1_misc", draw.Vec2(226, 600), {
movement_group,
network_group,
grenades_group
})
subtab_misc:Add(stack1_misc)
hiteffects_group = gui.Group("misc_group4", "Hit Effects", 85, gui.GroupWidthMode.REDUCED)
extramisc_group = gui.Group("misc_group6", "Extra", 224, gui.GroupWidthMode.REDUCED)
stack2_misc = gui.MakeStackedGroups("stack2_misc", draw.Vec2(226, 600), {
hiteffects_group,
extramisc_group
})
subtab_misc:Add(stack2_misc)
spammers_group = gui.Group("misc_group8", "Spammers", 85, gui.GroupWidthMode.REDUCED)
grabbers_group = gui.Group("misc_group9", "Grabbers", 85, gui.GroupWidthMode.REDUCED)
player_group = gui.Group("misc_group10", "Player", 140, gui.GroupWidthMode.REDUCED)
stack3_misc = gui.MakeStackedGroups("stack3_misc", draw.Vec2(226, 600), {
spammers_group,
grabbers_group,
player_group
})
subtab_misc:Add(stack3_misc)
cb_autostrafer = gui.Checkbox("cb_autostrafer")
row_autostrafer = gui.MakeControl("AutoStrafer++", cb_autostrafer)
movement_group:Add(row_autostrafer)
cb_smart_jump_bug = gui.Checkbox("cb_smart_jump_bug")
row_smart_jump_bug = gui.MakeControl("Smart Jumpbug", cb_smart_jump_bug)
movement_group:Add(row_smart_jump_bug)
cb_no_fall = gui.Checkbox("cb_no_fall")
row_no_fall = gui.MakeControl("NoFall", cb_no_fall)
movement_group:Add(row_no_fall)
cb_height_advantage = gui.Checkbox("cb_height_advantage")
row_height_advantage = gui.MakeControl("Height Advantage", cb_height_advantage)
movement_group:Add(row_height_advantage)
cb_fast_stop_in_air = gui.Checkbox("cb_fast_stop_in_air")
row_fast_stop_in_air = gui.MakeControl("Fast Stop in Air", cb_fast_stop_in_air)
movement_group:Add(row_fast_stop_in_air)
cb_avoid_collisions = gui.Checkbox("cb_avoid_collisions")
row_avoid_collisions = gui.MakeControl("Avoid Collisions", cb_avoid_collisions)
movement_group:Add(row_avoid_collisions)
settings = gui.Settings("avoid_collisions_settings")
sl_avoid_collisions_air = gui.Slider("sl_avoid_collisions_air", 10, 60, {
"%.0f"
})
row_avoid_collisions_air = gui.MakeControl("Radius Air", sl_avoid_collisions_air)
sl_avoid_collisions_air:GetValue():Set(36)
sl_avoid_collisions_ground = gui.Slider("sl_avoid_collisions_ground", 10, 60, {
"%.0f"
})
row_avoid_collisions_ground = gui.MakeControl("Radius Ground", sl_avoid_collisions_ground)
sl_avoid_collisions_ground:GetValue():Set(24)
row_avoid_collisions:Add(settings)
settings:Add(row_avoid_collisions_air)
settings:Add(row_avoid_collisions_ground)
cb_crouch_in_air = gui.Checkbox("cb_crouch_in_air")
row_crouch_in_air = gui.MakeControl("Crouch in Air", cb_crouch_in_air)
settings_crouch_in_air = gui.Settings("settings_crouch_in_air")
cb_only_when_jump = gui.Checkbox("cb_only_when_jump")
row_only_when_jump = gui.MakeControl("Only when pressing jump", cb_only_when_jump)
settings_crouch_in_air:Add(row_only_when_jump)
row_crouch_in_air:Add(settings_crouch_in_air)
movement_group:Add(row_crouch_in_air)
cbx_network_mode = gui.ComboBox("cbx_network_mode")
cbx_network_mode:Add(gui.Selectable("off_cbx_network_mode", "Off"))
cbx_network_mode:Add(gui.Selectable("auto_cbx_network_mode", "Auto"))
cbx_network_mode:Add(gui.Selectable("fastest_cbx_network_mode", "Fastest"))
cbx_network_mode:Add(gui.Selectable("fast_cbx_network_mode", "Fast"))
cbx_network_mode:Add(gui.Selectable("balanced_cbx_network_mode", "Balanced"))
cbx_network_mode:Add(gui.Selectable("stable_cbx_network_mode", "Stable"))
cbx_network_mode:Add(gui.Selectable("very_stable_cbx_network_mode", "Very Stable"))
cbx_network_mode:Add(gui.Selectable("maximum_cbx_network_mode", "Maximum"))
row_network_mode = gui.MakeControl("Network Mode", cbx_network_mode)
network_group:Add(row_network_mode)
cb_fast_grenade = gui.Checkbox("cb_fast_grenade")
row_fast_grenade = gui.MakeControl("Fast Grenade", cb_fast_grenade)
grenades_group:Add(row_fast_grenade)
cbx_grenade_fix = gui.ComboBox("cbx_grenade_fix")
cbx_grenade_fix:Add(gui.Selectable("none_cbx_grenade_fix", "None"))
cbx_grenade_fix:Add(gui.Selectable("fast_cbx_grenade_fix", "Fast"))
cbx_grenade_fix:Add(gui.Selectable("medium_cbx_grenade_fix", "Medium"))
cbx_grenade_fix:Add(gui.Selectable("slow_cbx_grenade_fix", "Slow"))
row_grenade_fix = gui.MakeControl("Grenade Fix", cbx_grenade_fix)
grenades_group:Add(row_grenade_fix)
cbx_hitsounds = gui.ComboBox("cbx_hitsounds")
cbx_hitsounds:Add(gui.Selectable("1_cbx_hitsounds", "None"))
cbx_hitsounds:Add(gui.Selectable("2_cbx_hitsounds", "Agpa1"))
cbx_hitsounds:Add(gui.Selectable("3_cbx_hitsounds", "Beep"))
cbx_hitsounds:Add(gui.Selectable("4_cbx_hitsounds", "Bubble"))
cbx_hitsounds:Add(gui.Selectable("5_cbx_hitsounds", "Chime"))
cbx_hitsounds:Add(gui.Selectable("6_cbx_hitsounds", "Cookie"))
cbx_hitsounds:Add(gui.Selectable("7_cbx_hitsounds", "Copperbell"))
cbx_hitsounds:Add(gui.Selectable("8_cbx_hitsounds", "Cute"))
cbx_hitsounds:Add(gui.Selectable("9_cbx_hitsounds", "DSR-1"))
cbx_hitsounds:Add(gui.Selectable("10_cbx_hitsounds", "Light"))
cbx_hitsounds:Add(gui.Selectable("11_cbx_hitsounds", "Mcbow"))
cbx_hitsounds:Add(gui.Selectable("12_cbx_hitsounds", "Minecraft"))
cbx_hitsounds:Add(gui.Selectable("13_cbx_hitsounds", "Neverlose"))
cbx_hitsounds:Add(gui.Selectable("14_cbx_hitsounds", "Primordial"))
cbx_hitsounds:Add(gui.Selectable("15_cbx_hitsounds", "Rust Headshot"))
cbx_hitsounds:Add(gui.Selectable("16_cbx_hitsounds", "Stomp"))
row_hitsounds = gui.MakeControl("Hitsound", cbx_hitsounds)
settings_hitsound = gui.Settings("settings_hitsound")
sl_volume_hit = gui.Slider("sl_volume_hit", 1, 200, {
"%.0f%%"
})
row_volume_hit = gui.MakeControl("Volume", sl_volume_hit)
sl_volume_hit:GetValue():Set(50)
settings_hitsound:Add(row_volume_hit)
row_hitsounds:Add(settings_hitsound)
hiteffects_group:Add(row_hitsounds)
cbx_killsounds = gui.ComboBox("cbx_killsounds")
cbx_killsounds:Add(gui.Selectable("1_cbx_killsounds", "None"))
cbx_killsounds:Add(gui.Selectable("2_cbx_killsounds", "Agpa1"))
cbx_killsounds:Add(gui.Selectable("3_cbx_killsounds", "Beep"))
cbx_killsounds:Add(gui.Selectable("4_cbx_killsounds", "Bubble"))
cbx_killsounds:Add(gui.Selectable("5_cbx_killsounds", "Chime"))
cbx_killsounds:Add(gui.Selectable("6_cbx_killsounds", "Cookie"))
cbx_killsounds:Add(gui.Selectable("7_cbx_killsounds", "Copperbell"))
cbx_killsounds:Add(gui.Selectable("8_cbx_killsounds", "Cute"))
cbx_killsounds:Add(gui.Selectable("9_cbx_killsounds", "DSR-1"))
cbx_killsounds:Add(gui.Selectable("10_cbx_killsounds", "Light"))
cbx_killsounds:Add(gui.Selectable("11_cbx_killsounds", "Mcbow"))
cbx_killsounds:Add(gui.Selectable("12_cbx_killsounds", "Minecraft"))
cbx_killsounds:Add(gui.Selectable("13_cbx_killsounds", "Neverlose"))
cbx_killsounds:Add(gui.Selectable("14_cbx_killsounds", "Primordial"))
cbx_killsounds:Add(gui.Selectable("15_cbx_killsounds", "Rust Headshot"))
cbx_killsounds:Add(gui.Selectable("16_cbx_killsounds", "Stomp"))
row_killsounds = gui.MakeControl("Killsound", cbx_killsounds)
settings_killsound = gui.Settings("settings_killsound")
sl_volume_kill = gui.Slider("sl_volume_kill", 1, 200, {
"%.0f%%"
})
row_volume_kill = gui.MakeControl("Volume", sl_volume_kill)
sl_volume_kill:GetValue():Set(50)
settings_killsound:Add(row_volume_kill)
row_killsounds:Add(settings_killsound)
hiteffects_group:Add(row_killsounds)
cb_blockbot = gui.Checkbox("cb_blockbot")
row_blockbot = gui.MakeControl("Block Bot Over Head", cb_blockbot)
extramisc_group:Add(row_blockbot)
blockbot_settings = gui.Settings("blockbot_settings")
cb_blockbot_crouch = gui.Checkbox("cb_blockbot_crouch")
row_blockbot_crouch = gui.MakeControl("Crouch in Jump", cb_blockbot_crouch)
blockbot_settings:Add(row_blockbot_crouch)
row_blockbot:Add(blockbot_settings)
cb_auto_disconnect = gui.Checkbox("cb_auto_disconnect")
row_auto_disconnect = gui.MakeControl("Auto Disconnect", cb_auto_disconnect)
extramisc_group:Add(row_auto_disconnect)
cb_auto_drop_items = gui.Checkbox("cb_auto_drop_items")
row_auto_drop_items = gui.MakeControl("Drop After Match", cb_auto_drop_items)
extramisc_group:Add(row_auto_drop_items)
cb_clean_console = gui.Checkbox("cb_clean_console")
row_clean_console = gui.MakeControl("Console Filter", cb_clean_console)
extramisc_group:Add(row_clean_console)
cb_focus_cs2 = gui.Checkbox("cb_focus_cs2")
row_focus_cs2 = gui.MakeControl("Focus CS2", cb_focus_cs2)
extramisc_group:Add(row_focus_cs2)
cb_anti_afk = gui.Checkbox("cb_anti_afk")
row_anti_afk = gui.MakeControl("Anti-Afk", cb_anti_afk)
extramisc_group:Add(row_anti_afk)
cb_quick_plant = gui.Checkbox("cb_quick_plant")
row_quick_plant = gui.MakeControl("Equip Bomb At Plent", cb_quick_plant)
extramisc_group:Add(row_quick_plant)
cbx_trash_talk = gui.ComboBox("cbx_trash_talk")
cbx_trash_talk:Add(gui.Selectable("1_cbx_trash_talk", "None"))
cbx_trash_talk:Add(gui.Selectable("2_cbx_trash_talk", "SEX TALK EBANI"))
cbx_trash_talk:Add(gui.Selectable("3_cbx_trash_talk", "1"))
cbx_trash_talk:Add(gui.Selectable("4_cbx_trash_talk", "#skeet"))
cbx_trash_talk:Add(gui.Selectable("5_cbx_trash_talk", "neverlose"))
cbx_trash_talk:Add(gui.Selectable("6_cbx_trash_talk", "nixware"))
cbx_trash_talk:Add(gui.Selectable("7_cbx_trash_talk", "hvh"))
cbx_trash_talk:Add(gui.Selectable("8_cbx_trash_talk", "fa7ality"))
cbx_trash_talk:Add(gui.Selectable("9_cbx_trash_talk", "Nyashka"))
cbx_trash_talk:Add(gui.Selectable("10_cbx_trash_talk", "Dindra"))
cbx_trash_talk:Add(gui.Selectable("11_cbx_trash_talk", "1000-7"))
cbx_trash_talk:Add(gui.Selectable("12_cbx_trash_talk", "ha4"))
row_trash_talk = gui.MakeControl("TrashTalk", cbx_trash_talk)
spammers_group:Add(row_trash_talk)
btn_message_pnd = gui.Button("btn_message_pnd", "Send Messages")
row_message_pnd = gui.MakeControl("Message PND", btn_message_pnd)
spammers_group:Add(row_message_pnd)
btn_ip_grabber = gui.Button("btn_ip_grabber", "Get Net Address")
row_ip_grabber = gui.MakeControl("IP Grabber", btn_ip_grabber)
grabbers_group:Add(row_ip_grabber)
cb_awp_grabber = gui.Checkbox("cb_awp_grabber")
row_awp_grabber = gui.MakeControl("AWP Grabber", cb_awp_grabber)
grabbers_group:Add(row_awp_grabber)
cbx_clantags = gui.ComboBox("cbx_clantags")
cbx_clantags:Add(gui.Selectable("1_cbx_clantags", "None"))
cbx_clantags:Add(gui.Selectable("2_cbx_clantags", "PND"))
cbx_clantags:Add(gui.Selectable("3_cbx_clantags", "lunox"))
cbx_clantags:Add(gui.Selectable("4_cbx_clantags", "Dream"))
cbx_clantags:Add(gui.Selectable("5_cbx_clantags", "morigyaru"))
cbx_clantags:Add(gui.Selectable("6_cbx_clantags", "gamesense"))
cbx_clantags:Add(gui.Selectable("7_cbx_clantags", "memesense"))
cbx_clantags:Add(gui.Selectable("8_cbx_clantags", "monolith"))
cbx_clantags:Add(gui.Selectable("9_cbx_clantags", "1000-7"))
cbx_clantags:Add(gui.Selectable("10_cbx_clantags", "xantarespeek"))
settings_clantags = gui.Settings("settings_clantags")
txt_clantags = gui.TextInput("txt_clantags")
txt_clantags.placeholder = "Monolith UID"
row_uid = gui.MakeControl("UID", txt_clantags)
settings_clantags:Add(row_uid)
row_clantags = gui.MakeControl("Clantags", cbx_clantags)
row_clantags:Add(settings_clantags)
player_group:Add(row_clantags)
cbx_auto_team = gui.ComboBox("cbx_auto_team")
cbx_auto_team:Add(gui.Selectable("1_cbx_auto_team", "None"))
cbx_auto_team:Add(gui.Selectable("2_cbx_auto_team", "Counter-Terrorist"))
cbx_auto_team:Add(gui.Selectable("3_cbx_auto_team", "Terrorist"))
row_clantags = gui.MakeControl("Auto Team", cbx_auto_team)
player_group:Add(row_clantags)
btn_kill_yourself = gui.Button("btn_kill_yourself", "Kill Yourself")
row_kill_yourself = gui.MakeControl("Player Death", btn_kill_yourself)
player_group:Add(row_kill_yourself)
cb_auto_kick = gui.Checkbox("cb_auto_kick")
row_auto_kick = gui.MakeControl("Auto Kick", cb_auto_kick)
player_group:Add(row_auto_kick)
if build == "alpha" then
cb_ghost = gui.Checkbox("cb_ghost")
row_ghost = gui.MakeControl("Ghost Exploit", cb_ghost)
player_group:Add(row_ghost)
end
local_group = gui.Group("visuals_group1", "Local", 196, gui.GroupWidthMode.REDUCED)
subtab_visuals:Add(local_group)
world_group = gui.Group("visuals_group2", "World", 140, gui.GroupWidthMode.REDUCED)
subtab_visuals:Add(world_group)
screen_group = gui.Group("visuals_group3", "Screen", 192, gui.GroupWidthMode.REDUCED)
subtab_visuals:Add(screen_group)
cb_transparent_arms = gui.Checkbox("cb_transparent_arms")
row_transparent_arms = gui.MakeControl("Transparent Arms", cb_transparent_arms)
local_group:Add(row_transparent_arms)
cb_viewmodel_hit_effect = gui.Checkbox("cb_viewmodel_hit_effect")
row_viewmodel_hit_effect = gui.MakeControl("Viewmodel Hit Effect", cb_viewmodel_hit_effect)
local_group:Add(row_viewmodel_hit_effect)
cb_smooth_return = gui.Checkbox("cb_smooth_return")
row_smooth_return = gui.MakeControl("Smooth Viewmodel Return", cb_smooth_return)
settings_viewmodel = gui.Settings("settings_viewmodel")
settings_viewmodel:Add(row_smooth_return)
row_viewmodel_hit_effect:Add(settings_viewmodel)
cb_fd_animation = gui.Checkbox("cb_fd_animation")
row_fd_animation = gui.MakeControl("Fake Duck Animation", cb_fd_animation)
local_group:Add(row_fd_animation)
cb_transparency = gui.Checkbox("cb_transparency")
row_transparency = gui.MakeControl("Transparency", cb_transparency)
local_group:Add(row_transparency)
cbx_transparency_mode = gui.ComboBox("cbx_transparency_mode")
cbx_transparency_mode:Add(gui.Selectable("1_cbx_transparency_mode", "Flat"))
cbx_transparency_mode:Add(gui.Selectable("2_cbx_transparency_mode", "Shaded"))
cbx_transparency_mode:Add(gui.Selectable("3_cbx_transparency_mode", "Glow"))
cbx_transparency_mode:Add(gui.Selectable("4_cbx_transparency_mode", "Metallic"))
cbx_transparency_mode:Add(gui.Selectable("5_cbx_transparency_mode", "Latex"))
row_transparency_mode = gui.MakeControl("Mode", cbx_transparency_mode)
cbx_transparency_enable = gui.ComboBox("cbx_transparency_enable")
cbx_transparency_enable.allowMultiple = true
cbx_transparency_enable:Add(gui.Selectable("1_cbx_transparency_enable", "Scope"))
cbx_transparency_enable:Add(gui.Selectable("2_cbx_transparency_enable", "Grenade"))
row_transparency_enable = gui.MakeControl("Enable", cbx_transparency_enable)
clr_with_scope_color = gui.ColorPicker("clr_with_scope_color")
row_with_scope_color = gui.MakeControl("With Scope", clr_with_scope_color)
clr_with_grenade_color = gui.ColorPicker("clr_with_grenade_color")
row_with_grenade_color = gui.MakeControl("With Grenades", clr_with_grenade_color)
settings_transparency = gui.Settings("settings_transparency")
settings_transparency:Add(row_transparency_mode)
settings_transparency:Add(row_transparency_enable)
settings_transparency:Add(row_with_scope_color)
settings_transparency:Add(row_with_grenade_color)
row_transparency:Add(settings_transparency)
cb_debounce_zoom = gui.Checkbox("cb_debounce_zoom")
row_debounce_zoom = gui.MakeControl("Debounce Zoom", cb_debounce_zoom)
local_group:Add(row_debounce_zoom)
cb_animation_break = gui.Checkbox("cb_animation_break")
row_animation_break = gui.MakeControl("Animation Break", cb_animation_break)
local_group:Add(row_animation_break)
cb_animation_spin = gui.Checkbox("cb_animation_spin")
row_animation_spin = gui.MakeControl("Spin", cb_animation_spin)
sl_animation_x = gui.Slider("sl_animation_x", -180, 180, {
"%.0f"
})
row_animation_x = gui.MakeControl("X", sl_animation_x)
sl_animation_y = gui.Slider("sl_animation_y", -180, 180, {
"%.0f"
})
row_animation_y = gui.MakeControl("Y", sl_animation_y)
sl_animation_z = gui.Slider("sl_animation_z", -180, 180, {
"%.0f"
})
row_animation_z = gui.MakeControl("Z", sl_animation_z)
settings_animation = gui.Settings("settings_animation")
settings_animation:Add(row_animation_spin)
settings_animation:Add(row_animation_x)
settings_animation:Add(row_animation_y)
settings_animation:Add(row_animation_z)
row_animation_break:Add(settings_animation)
cb_trails = gui.Checkbox("cb_trails")
row_trails = gui.MakeControl("Trails", cb_trails)
world_group:Add(row_trails)
settings_trails = gui.Settings("settings_trails")
cbx_trails_type = gui.ComboBox("cbx_trails_type")
cbx_trails_type:Add(gui.Selectable("1_cbx_trails", "Circle"))
cbx_trails_type:Add(gui.Selectable("2_cbx_trails", "Line"))
cbx_trails_type:Add(gui.Selectable("3_cbx_trails", "Fog"))
row_type = gui.MakeControl("Type", cbx_trails_type)
settings_trails:Add(row_type)
sl_lifetime = gui.Slider("sl_lifetime", 1, 10, {
"%.0f"
})
row_lifetime = gui.MakeControl("Lifetime", sl_lifetime)
settings_trails:Add(row_lifetime)
sl_radius = gui.Slider("sl_radius", 1, 50, {
"%.0f"
})
row_radius = gui.MakeControl("Radius", sl_radius)
settings_trails:Add(row_radius)
sl_interval = gui.Slider("sl_interval", 1, 10000, {
"%.0f"
})
row_interval = gui.MakeControl("Interval", sl_interval)
settings_trails:Add(row_interval)
clr_circle_color = gui.ColorPicker("clr_circle_color")
row_circle_color = gui.MakeControl("Color", clr_circle_color)
settings_trails:Add(row_circle_color)
cb_rainbow_effect = gui.Checkbox("cb_rainbow_effect")
row_rainbow_effect = gui.MakeControl("Rainbow Effect", cb_rainbow_effect)
settings_trails:Add(row_rainbow_effect)
row_trails:Add(settings_trails)
sl_lifetime:GetValue():Set(1)
sl_radius:GetValue():Set(4)
clr_circle_color:GetValue():Set(draw.Color(255, 255, 255, 255))
sl_gamma = gui.Slider("sl_gamma", 10, 40, {
"%.0f"
})
row_gamma = gui.MakeControl("Gamma", sl_gamma)
world_group:Add(row_gamma)
sl_gamma:GetValue():Set(24)
cb_turn_off_shadow = gui.Checkbox("cb_turn_off_shadow")
row_turn_off_shadow = gui.MakeControl("Disable Shadows", cb_turn_off_shadow)
world_group:Add(row_turn_off_shadow)
cbx_hitmarkers = gui.ComboBox("cbx_hitmarkers")
cbx_hitmarkers.allowMultiple = true
cbx_hitmarkers:Add(gui.Selectable("1_cbx_hitmarkers", "Star (Hit)"))
cbx_hitmarkers:Add(gui.Selectable("2_cbx_hitmarkers", "Neverlose (Hit)"))
cbx_hitmarkers:Add(gui.Selectable("3_cbx_hitmarkers", "Neverlose (Damage)"))
cbx_hitmarkers:Add(gui.Selectable("4_cbx_hitmarkers", "Particles (Hit)"))
row_hitmarkers = gui.MakeControl("Hitmarker", cbx_hitmarkers)
world_group:Add(row_hitmarkers)
settings_hitmarkers = gui.Settings("settings_hitmarkers")
sl_hitmarkers_lifetime = gui.Slider("sl_hitmarkers_lifetime", 1, 100, {
"%.0f"
})
row_hitmarkers_lifetime = gui.MakeControl("Lifetime", sl_hitmarkers_lifetime)
settings_hitmarkers:Add(row_hitmarkers_lifetime)
clr_hitmarkers_color = gui.ColorPicker("clr_hitmarkers_color")
row_hitmarkers_color = gui.MakeControl("Color", clr_hitmarkers_color)
settings_hitmarkers:Add(row_hitmarkers_color)
row_hitmarkers:Add(settings_hitmarkers)
sl_hitmarkers_lifetime:GetValue():Set(30)
clr_hitmarkers_color:GetValue():Set(draw.Color(255, 255, 255, 255))
cb_effect_on_menu = gui.Checkbox("cb_effect_on_menu")
row_effect_on_menu = gui.MakeControl("Menu Effect", cb_effect_on_menu)
settings_effect_menu = gui.Settings("settings_effect_menu")
cbx_effect_on_menu_type = gui.ComboBox("cbx_effect_on_menu_type")
cbx_effect_on_menu_type:Add(gui.Selectable("1_cbx_effect_on_menu", "Blur"))
cbx_effect_on_menu_type:Add(gui.Selectable("2_cbx_effect_on_menu", "Pixelation"))
cbx_effect_on_menu_type:Add(gui.Selectable("3_cbx_effect_on_menu", "Starfield"))
row_type = gui.MakeControl("Type", cbx_effect_on_menu_type)
settings_effect_menu:Add(row_type)
cb_always_effect_on_menu = gui.Checkbox("cb_always_effect_on_menu")
row_always_effect_on_menu = gui.MakeControl("Always", cb_always_effect_on_menu)
settings_effect_menu:Add(row_always_effect_on_menu)
row_effect_on_menu:Add(settings_effect_menu)
screen_group:Add(row_effect_on_menu)
cb_screen_logs = gui.Checkbox("cb_screen_logs")
row_screen_logs = gui.MakeControl("Logs", cb_screen_logs)
screen_group:Add(row_screen_logs)
cbx_screen_logs_type = gui.ComboBox("cbx_screen_logs_type")
cbx_screen_logs_type:Add(gui.Selectable("1_cbx_screen_logs", "skeet"))
cbx_screen_logs_type:Add(gui.Selectable("2_cbx_screen_logs", "neverlose"))
cbx_screen_logs_type:Add(gui.Selectable("3_cbx_screen_logs", "fatality"))
row_screen_logs_type = gui.MakeControl("Type", cbx_screen_logs_type)
sl_screen_logs_lifetime = gui.Slider("sl_screen_logs_lifetime", 1, 100, {
"%.0f"
})
row_screen_logs_lifetime = gui.MakeControl("Lifetime", sl_screen_logs_lifetime)
clr_screen_logs_color = gui.ColorPicker("clr_screen_logs_color")
row_screen_logs_color = gui.MakeControl("Color Hit", clr_screen_logs_color)
clr_screen_logs_color_hurt = gui.ColorPicker("clr_screen_logs_color_hurt")
row_screen_logs_color_hurt = gui.MakeControl("Color Hurt", clr_screen_logs_color_hurt)
settings_screen_logs = gui.Settings("settings_screen_logs")
settings_screen_logs:Add(row_screen_logs_type)
settings_screen_logs:Add(row_screen_logs_lifetime)
settings_screen_logs:Add(row_screen_logs_color)
settings_screen_logs:Add(row_screen_logs_color_hurt)
row_screen_logs:Add(settings_screen_logs)
sl_screen_logs_lifetime:GetValue():Set(30)
clr_screen_logs_color:GetValue():Set(draw.Color(124, 195, 13, 255))
clr_screen_logs_color_hurt:GetValue():Set(draw.Color(215, 54, 93, 255))
cb_watermark = gui.Checkbox("cb_watermark")
row_watermark = gui.MakeControl("Watermark", cb_watermark)
screen_group:Add(row_watermark)
settings_watermark = gui.Settings("settings_watermark")
cb_watermark_icon = gui.Checkbox("cb_watermark_icon")
row_watermark_icon = gui.MakeControl("Icon", cb_watermark_icon)
cbx_watermark_show = gui.ComboBox("cbx_watermark_show")
cbx_watermark_show.allowMultiple = true
cbx_watermark_show:Add(gui.Selectable("1_cbx_watermark_show", "Username"))
cbx_watermark_show:Add(gui.Selectable("2_cbx_watermark_show", "FPS"))
cbx_watermark_show:Add(gui.Selectable("3_cbx_watermark_show", "Ping"))
cbx_watermark_show:Add(gui.Selectable("4_cbx_watermark_show", "Time"))
cbx_watermark_show:Add(gui.Selectable("5_cbx_watermark_show", "Map"))
cbx_watermark_show:Add(gui.Selectable("6_cbx_watermark_show", "Elapsed Time"))
cbx_watermark_show:Add(gui.Selectable("7_cbx_watermark_show", "Server IP"))
row_watermark_show = gui.MakeControl("Shows", cbx_watermark_show)
cb_watermark_tag = gui.Checkbox("cb_watermark_tag")
row_watermark_tag = gui.MakeControl("Username Tag", cb_watermark_tag)
cb_watermark_low_fps = gui.Checkbox("cb_watermark_low_fps")
row_watermark_low_fps = gui.MakeControl("0.1% Low FPS", cb_watermark_low_fps)
settings_watermark:Add(row_watermark_icon)
settings_watermark:Add(row_watermark_show)
settings_watermark:Add(row_watermark_tag)
settings_watermark:Add(row_watermark_low_fps)
row_watermark:Add(settings_watermark)
cb_arrows = gui.Checkbox("cb_arrows")
row_arrows = gui.MakeControl("Out Of Field", cb_arrows)
screen_group:Add(row_arrows)
settings_arrows = gui.Settings("settings_arrows")
cbx_arrows_type = gui.ComboBox("cbx_arrows_type")
cbx_arrows_type:Add(gui.Selectable("1_cbx_arrows", "Arrow"))
cbx_arrows_type:Add(gui.Selectable("2_cbx_arrows", "Neverlose"))
row_arrows_type = gui.MakeControl("Type", cbx_arrows_type)
sl_arrow_size = gui.Slider("sl_arrow_size", 4, 20, {
"%.0f"
})
row_arrow_size = gui.MakeControl("Size", sl_arrow_size)
sl_arrow_size:GetValue():Set(10)
sl_arrows_radius = gui.Slider("sl_arrows_radius", 20, 500, {
"%.0f"
})
row_arrows_radius = gui.MakeControl("Radius", sl_arrows_radius)
sl_arrows_radius:GetValue():Set(200)
cb_arrow_pulse = gui.Checkbox("cb_arrow_pulse")
row_arrow_pulse = gui.MakeControl("Pulse", cb_arrow_pulse)
clr_arrows_color = gui.ColorPicker("clr_arrows_color")
row_arrows_color = gui.MakeControl("Color", clr_arrows_color)
clr_arrows_color:GetValue():Set(draw.Color(255, 255, 255, 130))
settings_arrows:Add(row_arrows_type)
settings_arrows:Add(row_arrow_size)
settings_arrows:Add(row_arrows_radius)
settings_arrows:Add(row_arrow_pulse)
settings_arrows:Add(row_arrows_color)
row_arrows:Add(settings_arrows)
cb_manuals = gui.Checkbox("cb_manuals")
row_manuals = gui.MakeControl("Manuals", cb_manuals)
screen_group:Add(row_manuals)
settings_manuals = gui.Settings("settings_manuals")
cbx_manuals_type = gui.ComboBox("cbx_manuals_type")
cbx_manuals_type:Add(gui.Selectable("1_cbx_manuals", "Triangle"))
cbx_manuals_type:Add(gui.Selectable("2_cbx_manuals", "Arrow"))
cbx_manuals_type:Add(gui.Selectable("3_cbx_manuals", "Circle"))
cbx_manuals_type:Add(gui.Selectable("4_cbx_manuals", "Neverlose"))
cbx_manuals_type:Add(gui.Selectable("5_cbx_manuals", "Gamesense"))
row_manuals_type = gui.MakeControl("Type", cbx_manuals_type)
sl_manuals_size = gui.Slider("sl_manuals_size", 4, 20, {
"%.0f"
})
row_manuals_size = gui.MakeControl("Size", sl_manuals_size)
sl_manuals_size:GetValue():Set(10)
sl_manuals_radius = gui.Slider("sl_manuals_radius", 10, 500, {
"%.0f"
})
row_manuals_radius = gui.MakeControl("Radius", sl_manuals_radius)
sl_manuals_radius:GetValue():Set(80)
clr_manuals_color = gui.ColorPicker("clr_manuals_color")
row_manuals_color = gui.MakeControl("Color", clr_manuals_color)
clr_manuals_color:GetValue():Set(draw.Color(255, 255, 255, 255))
settings_manuals:Add(row_manuals_type)
settings_manuals:Add(row_manuals_size)
settings_manuals:Add(row_manuals_radius)
settings_manuals:Add(row_manuals_color)
row_manuals:Add(settings_manuals)
cb_synchronization = gui.Checkbox("cb_synchronization")
row_synchronization = gui.MakeControl("Synchronization", cb_synchronization)
screen_group:Add(row_synchronization)
cb_synchronization:SetValue(true)
configs_folder = "fatality/PND/configs"
utils.FileCreateDirectories(configs_folder)
ffi.cdef("typedef void* HANDLE;\ntypedef void* HWND;\ntypedef const char* LPCSTR;\ntypedef unsigned long DWORD;\ntypedef int BOOL;\ntypedef void* LPVOID;\ntypedef const void* LPCVOID;\ntypedef void* LPSECURITY_ATTRIBUTES;\ntypedef int INT;\n\ntypedef struct {\n DWORD dwLowDateTime;\n DWORD dwHighDateTime;\n} FILETIME;\n\ntypedef struct {\n DWORD dwFileAttributes;\n FILETIME ftCreationTime;\n FILETIME ftLastAccessTime; FILETIME ftLastWriteTime;\n DWORD nFileSizeHigh;\n DWORD nFileSizeLow;\n DWORD dwReserved0;\n DWORD dwReserved1;\n char cFileName[260];\n char cAlternateFileName[14];\n} WIN32_FIND_DATAA;\n\nHANDLE __stdcall FindFirstFileA(const char* lpFileName, WIN32_FIND_DATAA* lpFindFileData);\nint __stdcall FindNextFileA(HANDLE hFindFile, WIN32_FIND_DATAA* lpFindFileData);\nint __stdcall FindClose(HANDLE hFindFile);\n\nDWORD __stdcall GetCurrentDirectoryA(\n DWORD nBufferLength,\n char* lpBuffer\n);\n\nINT __stdcall ShellExecuteA(\n HWND hwnd,\n LPCSTR lpOperation,\n LPCSTR lpFile,\n LPCSTR lpParameters,\n LPCSTR lpDirectory,\n INT nShowCmd\n);\n\nBOOL __stdcall CreateDirectoryA(\n const char* lpPathName,\n LPSECURITY_ATTRIBUTES lpSecurityAttributes\n);\n")
GetCurrentDirectoryA = ffi.cast("DWORD(__stdcall*)(DWORD, char*)", utils.FindExport("kernel32.dll", "GetCurrentDirectoryA"))
FindFirstFileA = ffi.cast("HANDLE(__stdcall*)(const char*, WIN32_FIND_DATAA*)", utils.FindExport("kernel32.dll", "FindFirstFileA"))
FindNextFileA = ffi.cast("int(__stdcall*)(HANDLE, WIN32_FIND_DATAA*)", utils.FindExport("kernel32.dll", "FindNextFileA"))
FindClose = ffi.cast("int(__stdcall*)(HANDLE)", utils.FindExport("kernel32.dll", "FindClose"))
CreateDirectoryA = ffi.cast("BOOL(__stdcall*)(const char*, void*)", utils.FindExport("kernel32.dll", "CreateDirectoryA"))
ShellExecuteA = ffi.cast("INT(__stdcall*)(HWND, LPCSTR, LPCSTR, LPCSTR, LPCSTR, INT)", utils.FindExport("shell32.dll", "ShellExecuteA"))
INVALID_HANDLE = ffi.cast("HANDLE", -1)
SW_SHOW = 5
MAX_PATH = 260
function get_full_path(arg_31_0)
local var_31_0 = ffi.new("char[?]", MAX_PATH)
local var_31_1 = GetCurrentDirectoryA(MAX_PATH, var_31_0)
if var_31_1 > 0 and var_31_1 <= MAX_PATH then
local var_31_2 = ffi.string(var_31_0, var_31_1)
local var_31_3 = {}
for iter_31_0 in string.gmatch(var_31_2, "[^\\]+") do
table.insert(var_31_3, iter_31_0)
end
table.remove(var_31_3)
table.remove(var_31_3)
local var_31_4 = table.concat(var_31_3, "\\")
local var_31_5 = string.gsub(arg_31_0, "/", "\\")
return var_31_4 .. "\\csgo\\" .. var_31_5
else
return arg_31_0
end
end
function get_pnd_files(arg_32_0)
local var_32_0 = {}
local var_32_1 = ("..\\..\\csgo\\" .. string.gsub(arg_32_0, "/", "\\")) .. "\\*.pnd"
local var_32_2 = ffi.new("WIN32_FIND_DATAA")
local var_32_3 = FindFirstFileA(var_32_1, var_32_2)
if var_32_3 ~= INVALID_HANDLE then
repeat
local var_32_4 = ffi.string(var_32_2.cFileName)
if var_32_4 ~= "." and var_32_4 ~= ".." then
table.insert(var_32_0, var_32_4)
end
until FindNextFileA(var_32_3, var_32_2) == 0
FindClose(var_32_3)
end
return var_32_0
end
last_file_count = 0
last_update_time = 0
current_items = {}
group1_configs = gui.Group("configs_group1", "Display", 194, gui.GroupWidthMode.REDUCED)
subtab_configs:Add(group1_configs)
group2_configs = gui.Group("configs_group2", "Buttons", 126, gui.GroupWidthMode.REDUCED)
subtab_configs:Add(group2_configs)
group3_configs = gui.Group("configs_group3", "Info", 134, gui.GroupWidthMode.REDUCED)
subtab_configs:Add(group3_configs)
function get_dpi_settings(arg_33_0)
local var_33_0 = {
[0.5] = {
offset2 = -4,
offset1 = 1,
offset4 = 1,
offset3 = -4
},
[0.75] = {
offset2 = -9,
offset1 = -10,
offset4 = 10,
offset3 = -7
},
{
offset2 = 0,
offset1 = 0,
offset4 = 0,
offset3 = 0
},
[1.25] = {
offset2 = -7,
offset1 = -7,
offset4 = 7,
offset3 = -5
},
[1.5] = {
offset2 = -5,
offset1 = -6,
offset4 = 6,
offset3 = -5
},
{
offset2 = -3,
offset1 = -3,
offset4 = 3,
offset3 = -4
}
}
return var_33_0[arg_33_0] or var_33_0[1]
end
player_count = "None"
last_player_count = player_count
last_theme_value = theme_value_cache
last_dpi = draw.GetScale()
vertical_layout1 = nil
vertical_layout2 = nil
line_layout = nil
function create_vertical_layout1()
local var_34_0 = get_dpi_settings(draw.GetScale())
local var_34_1 = gui.Layout("vertical_info_layout1", draw.Vec2(), draw.Vec2(89 + var_34_0.offset1, 31), gui.StackDirection.VERTICAL)
var_34_1.sizeToParentW = true
var_34_1.stackOffset = draw.Vec2(0, 2)
local var_34_2 = gui.Layout("first_line_layout1", draw.Vec2(), draw.Vec2(100, 24), gui.StackDirection.INLINE)
var_34_2.sizeToParentW = true
var_34_2.margin = draw.Rect(0, 0, 0, -12)
local var_34_3 = gui.Label("label_slashes1", "//", gui.GetThemeColors().accent2, false)
local var_34_4 = gui.Label("label_text1", " developed by", gui.GetThemeColors().textMid, false)
var_34_2:Add(var_34_3)
var_34_2:Add(var_34_4)
var_34_1:Add(var_34_2)
local var_34_5 = gui.Label("player_name1", "lunox.PND", nil, true)
var_34_1:Add(var_34_5)
return var_34_1
end
function create_vertical_layout2()
local var_35_0 = get_dpi_settings(draw.GetScale())
local var_35_1 = gui.Layout("vertical_info_layout2", draw.Vec2(), draw.Vec2(92 + var_35_0.offset2, 47), gui.StackDirection.VERTICAL)
var_35_1.sizeToParentW = true
var_35_1.stackOffset = draw.Vec2(0, 2)
local var_35_2 = gui.Layout("first_line_layout2", draw.Vec2(), draw.Vec2(100, 24), gui.StackDirection.INLINE)
var_35_2.sizeToParentW = true
var_35_2.margin = draw.Rect(0, 0, 0, -11)
local var_35_3 = gui.Label("label_slashes2", "//", gui.GetThemeColors().accent2, false)
local var_35_4 = gui.Label("label_text2", " special thanks", gui.GetThemeColors().textMid, false)
var_35_2:Add(var_35_3)
var_35_2:Add(var_35_4)
var_35_1:Add(var_35_2)
local var_35_5 = gui.Label("player_name2", "TALZi, Buttermeow", nil, true)
var_35_1:Add(var_35_5)
return var_35_1
end
function create_line_layout(arg_36_0)
local var_36_0 = get_dpi_settings(draw.GetScale())
local var_36_1 = gui.Layout("line_layout", draw.Vec2(), draw.Vec2(200, 24), gui.StackDirection.INLINE)
var_36_1.sizeToParentW = true
local var_36_2 = gui.Layout("left_layout", draw.Vec2(), draw.Vec2(88 + var_36_0.offset3, 24), gui.StackDirection.INLINE)
var_36_2.sizeToParentW = false
local var_36_3 = gui.Label("label_slashes", "//", gui.GetThemeColors().accent2, false)
local var_36_4 = gui.Label("label_synchronized", " synchronized", gui.GetThemeColors().textMid, false)
var_36_2:Add(var_36_3)
var_36_2:Add(var_36_4)
var_36_1:Add(var_36_2)
local var_36_5 = gui.Label("label_player_count", arg_36_0 or "None", gui.GetThemeColors().accent2, true)
var_36_5.margin = draw.Rect(0, 0, 72 + var_36_0.offset4, 0)
var_36_1:Add(var_36_5)
return var_36_1
end
function recreate_layouts()
if vertical_layout1 and vertical_layout1.parent then
group3_configs:Remove(vertical_layout1)
end
if vertical_layout2 and vertical_layout2.parent then
group3_configs:Remove(vertical_layout2)
end
if line_layout and line_layout.parent then
group3_configs:Remove(line_layout)
end
vertical_layout1 = create_vertical_layout1()
vertical_layout2 = create_vertical_layout2()
line_layout = create_line_layout(player_count)
group3_configs:Add(vertical_layout1)
group3_configs:Add(vertical_layout2)
group3_configs:Add(line_layout)
end
recreate_layouts()
events.presentQueue:Add(function()
if gui.IsVisible() then
return
end
local var_38_0 = draw.GetScale()
if theme_value_cache ~= last_theme_value or player_count ~= last_player_count or var_38_0 ~= last_dpi then
recreate_layouts()
last_theme_value = theme_value_cache
last_player_count = player_count
last_dpi = var_38_0
end
end)
my_list = gui.List("configs_list", draw.Vec2(120, 163))
my_list.sizeToParentW = true
my_list.allowMultiple = false
group1_configs:Add(my_list)
function update_configs_list()
local var_39_0 = get_pnd_files(configs_folder)
local var_39_1 = #var_39_0
if var_39_1 == last_file_count then
return
end
local var_39_2 = gui.List("configs_list_new", draw.Vec2(120, 163))
var_39_2.sizeToParentW = true
var_39_2.allowMultiple = false
if var_39_1 > 0 then
for iter_39_0, iter_39_1 in ipairs(var_39_0) do
local var_39_3 = gui.Selectable("config_item_" .. iter_39_0, iter_39_1)
var_39_3.tooltip = configs_folder .. "/" .. iter_39_1
var_39_3:AddCallback(function()
local var_40_0 = var_39_2:GetValue():Get():GetRaw()
end)
var_39_2:Add(var_39_3)
end
end
group1_configs:Remove(my_list)
group1_configs:Add(var_39_2)
my_list = var_39_2
last_file_count = var_39_1
end
events.presentQueue:Add(function()
if not gui.IsVisible() then
return
end
local var_41_0 = game.globalVars.m_flRealTime
if var_41_0 - last_update_time > 5 then
update_configs_list()
last_update_time = var_41_0
end
if my_list then
local var_41_1 = my_list:GetValue():Get():GetRaw()
if var_41_1 > 0 then
local var_41_2 = get_pnd_files(configs_folder)
if var_41_1 <= #var_41_2 then
local var_41_3 = var_41_2[var_41_1]
end
end
end
end)
function create_new_config(arg_42_0)
if not arg_42_0 or arg_42_0 == "" then
gui.notify:add(gui.notification("Error", "Please enter a filename", draw.textures.icon_close))
return false
end
if not string.match(arg_42_0, "%.pnd$") then
arg_42_0 = arg_42_0 .. ".pnd"
end
local var_42_0 = configs_folder .. "/" .. arg_42_0
if utils.FileExists(var_42_0) then
gui.notify:add(gui.notification("Error", "File already exists: " .. arg_42_0, draw.textures.icon_close))
return false
end
utils.FileCreateDirectories(configs_folder)
utils.FileWrite(var_42_0, {})
if utils.FileExists(var_42_0) then
gui.notify:add(gui.notification("Success", "Config created: " .. arg_42_0, draw.textures.icon_check))
update_configs_list()
text_input:SetValue("")
return true
else
gui.notify:add(gui.notification("Error", "Failed to create file: " .. arg_42_0, draw.textures.icon_close))
return false
end
end
layout_top = gui.Layout("top_layout", draw.Vec2(), draw.Vec2(120, 40), gui.StackDirection.INLINE)
layout_top.sizeToParentW = true
layout_top.margin = draw.Rect(0, 0, 0, -10)
text_input = gui.TextInput("text_input")
text_input:SetDimensions(draw.Vec2(), draw.Vec2(126, 24))
text_input.placeholder = "Start typing..."
btn_create = gui.Button("btn_create", "Create")
btn_create:SetDimensions(draw.Vec2(), draw.Vec2(56, 24))
layout_top:Add(text_input)
layout_top:Add(btn_create)
group2_configs:Add(layout_top)
btn_create:AddCallback(function()
Delay(0.1, function()
local var_44_0 = text_input.value
create_new_config(var_44_0)
end)
end)
layout1 = gui.Layout("button_layout1", draw.Vec2(), draw.Vec2(120, 40), gui.StackDirection.INLINE)
layout1.sizeToParentW = true
layout1.margin = draw.Rect(0, 0, 0, -10)
btn_save = gui.Button("btn_save", "Save")
btn_save:SetDimensions(draw.Vec2(), draw.Vec2(91, 24))
btn_load = gui.Button("btn_load", "Load")
btn_load:SetDimensions(draw.Vec2(), draw.Vec2(91, 24))
layout1:Add(btn_save)
layout1:Add(btn_load)
group2_configs:Add(layout1)
layout2 = gui.Layout("button_layout2", draw.Vec2(), draw.Vec2(120, 40), gui.StackDirection.INLINE)
layout2.sizeToParentW = true
layout2.margin = draw.Rect(0, 2, 0, -10)
btn_open = gui.Button("btn_open", "Open Folder")
btn_open:SetDimensions(draw.Vec2(), draw.Vec2(91, 24))
btn_delete = gui.Button("btn_delete", "Delete")
btn_delete:SetDimensions(draw.Vec2(), draw.Vec2(91, 24))
layout2:Add(btn_open)
layout2:Add(btn_delete)
group2_configs:Add(layout2)
btn_open:AddCallback(function()
Delay(0.1, function()
local var_46_0 = get_full_path(configs_folder)
local var_46_1 = ShellExecuteA(nil, "open", var_46_0, nil, nil, SW_SHOW)
local var_46_2 = tonumber(ffi.cast("int", var_46_1))
if var_46_2 > 32 then
-- block empty
else
gui.notify:add(gui.notification("Failed to Open Folder", "Create the \"" .. configs_folder .. "\" folders. Error code: " .. var_46_2, draw.textures.icon_close))
local var_46_3 = string.gsub("fatality\\PND\\configs", "/", "\\")
local var_46_4 = ShellExecuteA(nil, "open", var_46_3, nil, nil, SW_SHOW)
local var_46_5 = tonumber(ffi.cast("int", var_46_4))
end
end)
end)
btn_delete:AddCallback(function()
Delay(0.1, function()
if not my_list then
gui.notify:add(gui.notification("Error", "Config list not found", draw.textures.icon_close))
return
end
local var_48_0 = my_list:GetValue():Get()
if not var_48_0 or var_48_0:None() then
gui.notify:add(gui.notification("Error", "No file selected", draw.textures.icon_close))
return
end
local var_48_1 = get_pnd_files(configs_folder)
local var_48_2
local var_48_3
for iter_48_0 = 1, #var_48_1 do
if var_48_0:Get(iter_48_0 - 1) then
var_48_2 = iter_48_0
var_48_3 = var_48_1[iter_48_0]
break
end
end
if not var_48_2 or not var_48_3 then
gui.notify:add(gui.notification("Error", "Selected file does not exist", draw.textures.icon_close))
return
end
if var_48_2 > #var_48_1 then
gui.notify:add(gui.notification("Error", "Selected file does not exist", draw.textures.icon_close))
return
end
local var_48_4 = configs_folder .. "/" .. var_48_3
if not utils.FileExists(var_48_4) then
gui.notify:add(gui.notification("Error", "File does not exist", draw.textures.icon_close))
return
end
utils.FileRemove(var_48_4)
gui.notify:add(gui.notification("Success", "File deleted: " .. var_48_3, draw.textures.icon_check))
update_configs_list()
if my_list then
local var_48_5 = my_list:GetValue():Get()
if var_48_5 then
var_48_5:Reset()
end
end
end)
end)
function bool_to_str(arg_49_0)
return arg_49_0 and "true" or "false"
end
function str_to_bool(arg_50_0)
return arg_50_0 == "true"
end
function color_to_str(arg_51_0)
return string.format("%d,%d,%d,%d", arg_51_0.r, arg_51_0.g, arg_51_0.b, arg_51_0.a)
end
function str_to_color(arg_52_0)
local var_52_0, var_52_1, var_52_2, var_52_3 = arg_52_0:match("(%d+),(%d+),(%d+),(%d+)")
if var_52_0 and var_52_1 and var_52_2 and var_52_3 then
return draw.Color(tonumber(var_52_0), tonumber(var_52_1), tonumber(var_52_2), tonumber(var_52_3))
end
return draw.Color(255, 255, 255, 255)
end
function strip_base64_padding(arg_53_0)
return arg_53_0:gsub("=+$", "")
end
function get_secret_key()
local var_54_0 = "PND-pnd-klaay"
return tostring(utils.murmur2("salt:" .. var_54_0))
end
function xor_encrypt(arg_55_0, arg_55_1)
local var_55_0 = {}
for iter_55_0 = 1, #arg_55_0 do
local var_55_1 = arg_55_1:byte((iter_55_0 - 1) % #arg_55_1 + 1)
local var_55_2 = arg_55_0:byte(iter_55_0)
table.insert(var_55_0, string.char(bit.bxor(var_55_2, var_55_1)))
end
return table.concat(var_55_0)
end
function xor_decrypt(arg_56_0, arg_56_1)
return xor_encrypt(arg_56_0, arg_56_1)
end
all_elements = {
checkboxes = {
cb_synchronization = cb_synchronization,
cb_jump_scout = cb_jump_scout,
cb_jump_better_autostop = cb_jump_better_autostop,
cb_jump_autostop_highest = cb_jump_autostop_highest,
cb_jump_stop_on_land = cb_jump_stop_on_land,
cb_jump_only_head = cb_jump_only_head,
cb_jump_force_shoot = cb_jump_force_shoot,
cb_animfix = cb_animfix,
cb_anti_aimpunch = cb_anti_aimpunch,
cb_accuracy_boost = cb_accuracy_boost,
cb_auto_force_shot = cb_auto_force_shot,
cb_dt_on_knife = cb_dt_on_knife,
cb_disable_m2_on_r8 = cb_disable_m2_on_r8,
cb_freestands = cb_freestands,
cb_freestands_off_in_air = cb_freestands_off_in_air,
cb_fast_angles = cb_fast_angles,
cb_fast_ladder = cb_fast_ladder,
cb_fast_ladder_down = cb_fast_ladder_down,
cb_autostrafer = cb_autostrafer,
cb_smart_jump_bug = cb_smart_jump_bug,
cb_fix_duckjump = cb_fix_duckjump,
cb_no_fall = cb_no_fall,
cb_height_advantage = cb_height_advantage,
cb_fast_stop_in_air = cb_fast_stop_in_air,
cb_avoid_collisions = cb_avoid_collisions,
cb_crouch_in_air = cb_crouch_in_air,
cb_only_when_jump = cb_only_when_jump,
cb_fast_grenade = cb_fast_grenade,
cb_blockbot = cb_blockbot,
cb_blockbot_crouch = cb_blockbot_crouch,
cb_auto_disconnect = cb_auto_disconnect,
cb_auto_drop_items = cb_auto_drop_items,
cb_clean_console = cb_clean_console,
cb_focus_cs2 = cb_focus_cs2,
cb_anti_afk = cb_anti_afk,
cb_quick_plant = cb_quick_plant,
cb_awp_grabber = cb_awp_grabber,
cb_auto_kick = cb_auto_kick,
cb_transparent_arms = cb_transparent_arms,
cb_viewmodel_hit_effect = cb_viewmodel_hit_effect,
cb_smooth_return = cb_smooth_return,
cb_fd_animation = cb_fd_animation,
cb_transparency = cb_transparency,
cb_debounce_zoom = cb_debounce_zoom,
cb_animation_break = cb_animation_break,
cb_animation_spin = cb_animation_spin,
cb_trails = cb_trails,
cb_rainbow_effect = cb_rainbow_effect,
cb_turn_off_shadow = cb_turn_off_shadow,
cb_effect_on_menu = cb_effect_on_menu,
cb_always_effect_on_menu = cb_always_effect_on_menu,
cb_screen_logs = cb_screen_logs,
cb_watermark = cb_watermark,
cb_watermark_icon = cb_watermark_icon,
cb_watermark_tag = cb_watermark_tag,
cb_watermark_low_fps = cb_watermark_low_fps,
cb_arrows = cb_arrows,
cb_arrow_pulse = cb_arrow_pulse,
cb_manuals = cb_manuals
},
sliders = {
sl_jump_hitchance = sl_jump_hitchance,
sl_jump_pointscale = sl_jump_pointscale,
sl_avoid_collisions_air = sl_avoid_collisions_air,
sl_avoid_collisions_ground = sl_avoid_collisions_ground,
sl_volume_hit = sl_volume_hit,
sl_volume_kill = sl_volume_kill,
sl_animation_x = sl_animation_x,
sl_animation_y = sl_animation_y,
sl_animation_z = sl_animation_z,
sl_lifetime = sl_lifetime,
sl_radius = sl_radius,
sl_interval = sl_interval,
sl_gamma = sl_gamma,
sl_hitmarkers_lifetime = sl_hitmarkers_lifetime,
sl_screen_logs_lifetime = sl_screen_logs_lifetime,
sl_arrow_size = sl_arrow_size,
sl_arrows_radius = sl_arrows_radius,
sl_manuals_size = sl_manuals_size,
sl_manuals_radius = sl_manuals_radius
},
comboboxes = {
cbx_jump_scout_autostop = cbx_jump_scout_autostop,
cbx_network_mode = cbx_network_mode,
cbx_grenade_fix = cbx_grenade_fix,
cbx_hitsounds = cbx_hitsounds,
cbx_killsounds = cbx_killsounds,
cbx_trash_talk = cbx_trash_talk,
cbx_clantags = cbx_clantags,
cbx_auto_team = cbx_auto_team,
cbx_transparency_mode = cbx_transparency_mode,
cbx_transparency_enable = cbx_transparency_enable,
cbx_trails_type = cbx_trails_type,
cbx_hitmarkers = cbx_hitmarkers,
cbx_effect_on_menu_type = cbx_effect_on_menu_type,
cbx_screen_logs_type = cbx_screen_logs_type,
cbx_watermark_show = cbx_watermark_show,
cbx_arrows_type = cbx_arrows_type,
cbx_manuals_type = cbx_manuals_type
},
colors = {
clr_with_scope_color = clr_with_scope_color,
clr_with_grenade_color = clr_with_grenade_color,
clr_circle_color = clr_circle_color,
clr_hitmarkers_color = clr_hitmarkers_color,
clr_screen_logs_color = clr_screen_logs_color,
clr_screen_logs_color_hurt = clr_screen_logs_color_hurt,
clr_arrows_color = clr_arrows_color,
clr_manuals_color = clr_manuals_color
}
}
btn_save:AddCallback(function()
Delay(0.1, function()
if not my_list then
gui.notify:add(gui.notification("Error", "Config list not found", draw.textures.icon_close))
return false
end
slot_58_0_0 = my_list:GetValue():Get()
if not slot_58_0_0 or slot_58_0_0:None() then
gui.notify:add(gui.notification("Error", "No config selected to save to", draw.textures.icon_close))
return false
end
slot_58_1_0 = "fatality/PND/configs"
slot_58_2_0 = get_pnd_files(slot_58_1_0)
slot_58_3_0 = nil
slot_58_4_0 = nil
for iter_58_0 = 1, #slot_58_2_0 do
if slot_58_0_0:Get(iter_58_0 - 1) then
slot_58_3_0 = iter_58_0
slot_58_4_0 = slot_58_2_0[iter_58_0]
break
end
end
if not slot_58_3_0 or not slot_58_4_0 then
gui.notify:add(gui.notification("Error", "Selected file does not exist", draw.textures.icon_close))
return false
end
if slot_58_3_0 > #slot_58_2_0 then
gui.notify:add(gui.notification("Error", "Selected file does not exist", draw.textures.icon_close))
return false
end
slot_58_5_0 = slot_58_1_0 .. "/" .. slot_58_4_0
slot_58_6_0 = {}
table.insert(slot_58_6_0, "config_name=" .. slot_58_4_0:gsub("%.pnd$", ""))
table.insert(slot_58_6_0, "version=" .. tostring(update.version))
table.insert(slot_58_6_0, "username=" .. tostring(members.username))
for iter_58_1, iter_58_2 in pairs(all_elements.checkboxes) do
if iter_58_2 then
slot_58_12_4 = iter_58_1:gsub("^cb_", "")
slot_58_13_3 = false
if iter_58_2.GetValue then
slot_58_14_3 = iter_58_2:GetValue()
if slot_58_14_3 and slot_58_14_3.Get then
slot_58_13_3 = slot_58_14_3:Get()
end
end
table.insert(slot_58_6_0, slot_58_12_4 .. "=" .. bool_to_str(slot_58_13_3))
end
end
for iter_58_3, iter_58_4 in pairs(all_elements.sliders) do
if iter_58_4 then
slot_58_12_3 = iter_58_3:gsub("^sl_", "")
slot_58_13_2 = 0
if iter_58_4.GetValue then
slot_58_13_2 = iter_58_4:GetValue()
end
table.insert(slot_58_6_0, slot_58_12_3 .. "=" .. tostring(slot_58_13_2))
end
end
for iter_58_5, iter_58_6 in pairs(all_elements.comboboxes) do
if iter_58_6 then
slot_58_12_2 = iter_58_5:gsub("^cbx_", "")
slot_58_13_1 = 0
if iter_58_6.GetValue then
slot_58_14_2 = iter_58_6:GetValue()
if type(slot_58_14_2) == "number" then
slot_58_13_1 = slot_58_14_2
elseif type(slot_58_14_2) == "userdata" and slot_58_14_2.Get then
slot_58_15_2 = slot_58_14_2:Get()
if type(slot_58_15_2) == "number" then
slot_58_13_1 = slot_58_15_2
elseif type(slot_58_15_2) == "userdata" and slot_58_15_2.GetRaw then
slot_58_13_1 = slot_58_15_2:GetRaw()
end
end
end
table.insert(slot_58_6_0, slot_58_12_2 .. "=" .. tostring(slot_58_13_1))
end
end
for iter_58_7, iter_58_8 in pairs(all_elements.colors) do
if iter_58_8 then
slot_58_12_1 = iter_58_7:gsub("^clr_", "")
slot_58_13_0 = 255
slot_58_14_1 = 255
slot_58_15_1 = 255
slot_58_16_0 = 255
if iter_58_8.GetValue then
slot_58_17_0 = iter_58_8:GetValue():Get()
if slot_58_17_0 then
slot_58_13_0 = slot_58_17_0:GetR()
slot_58_14_1 = slot_58_17_0:GetG()
slot_58_15_1 = slot_58_17_0:GetB()
slot_58_16_0 = slot_58_17_0:GetA()
end
end
table.insert(slot_58_6_0, slot_58_12_1 .. "=" .. string.format("%d,%d,%d,%d", slot_58_13_0, slot_58_14_1, slot_58_15_1, slot_58_16_0))
end
end
if watermark_element_order and #watermark_element_order > 0 then
slot_58_7_1 = table.concat(watermark_element_order, ",")
table.insert(slot_58_6_0, "watermark_order=" .. slot_58_7_1)
end
slot_58_7_0 = table.concat(slot_58_6_0, "\n"):gsub("\n", ";")
slot_58_8_0 = get_secret_key()
slot_58_9_0 = xor_encrypt(slot_58_7_0, slot_58_8_0)
slot_58_10_1 = utils.Base64Encode(slot_58_9_0)
slot_58_10_0 = strip_base64_padding(slot_58_10_1)
slot_58_11_0 = "PND-pnd=" .. slot_58_10_0
utils.FileCreateDirectories(slot_58_1_0)
slot_58_12_0 = utils.StringToArray(slot_58_11_0)
utils.FileWrite(slot_58_5_0, slot_58_12_0)
if utils.FileExists(slot_58_5_0) then
slot_58_14_0 = slot_58_4_0:gsub("%.pnd$", "")
gui.notify:add(gui.notification("Success", "Config saved to \"" .. slot_58_14_0 .. "\"", draw.textures.icon_check))
if my_list then
slot_58_15_0 = my_list:GetValue():Get()
if slot_58_15_0 then
slot_58_15_0:Reset()
end
end
return true
else
gui.notify:add(gui.notification("Error", "Failed to save config", draw.textures.icon_close))
end
return false
end)
end)
btn_load:AddCallback(function()
Delay(0.1, function()
if not my_list then
gui.notify:add(gui.notification("Error", "Config list not found", draw.textures.icon_close))
return false
end
slot_60_0_0 = my_list:GetValue():Get()
if not slot_60_0_0 or slot_60_0_0:None() then
gui.notify:add(gui.notification("Error", "No config selected to load", draw.textures.icon_close))
return false
end
slot_60_1_0 = "fatality/PND/configs"
slot_60_2_0 = get_pnd_files(slot_60_1_0)
slot_60_3_0 = nil
slot_60_4_0 = nil
for iter_60_0 = 1, #slot_60_2_0 do
if slot_60_0_0:Get(iter_60_0 - 1) then
slot_60_3_0 = iter_60_0
slot_60_4_0 = slot_60_2_0[iter_60_0]
break
end
end
if not slot_60_3_0 or not slot_60_4_0 then
gui.notify:add(gui.notification("Error", "Selected file does not exist", draw.textures.icon_close))
return false
end
if slot_60_3_0 > #slot_60_2_0 then
gui.notify:add(gui.notification("Error", "Selected file does not exist", draw.textures.icon_close))
return false
end
slot_60_5_0 = slot_60_1_0 .. "/" .. slot_60_4_0
if not utils.FileExists(slot_60_5_0) then
gui.notify:add(gui.notification("Error", "File does not exist", draw.textures.icon_close))
return false
end
slot_60_6_0 = utils.FileRead(slot_60_5_0)
if not slot_60_6_0 or #slot_60_6_0 == 0 then
gui.notify:add(gui.notification("Error", "Failed to read config file", draw.textures.icon_close))
return false
end
slot_60_7_0 = utils.ArrayToString(slot_60_6_0)
slot_60_8_0 = "PND-pnd="
if slot_60_7_0:sub(1, #slot_60_8_0) ~= slot_60_8_0 then
gui.notify:add(gui.notification("Error", "Invalid config file format", draw.textures.icon_close))
return false
end
slot_60_9_0 = slot_60_7_0:sub(#slot_60_8_0 + 1)
slot_60_10_0 = 4 - #slot_60_9_0 % 4
if slot_60_10_0 < 4 then
slot_60_9_0 = slot_60_9_0 .. string.rep("=", slot_60_10_0)
end
slot_60_11_0 = utils.Base64Decode(slot_60_9_0)
if not slot_60_11_0 then
gui.notify:add(gui.notification("Error", "Failed to decode config", draw.textures.icon_close))
return false
end
slot_60_12_0 = get_secret_key()
slot_60_13_0 = xor_decrypt(slot_60_11_0, slot_60_12_0)
slot_60_14_0 = {}
for iter_60_1 in string.gmatch(slot_60_13_0, "([^;]+)") do
slot_60_19_5, slot_60_20_0 = iter_60_1:match("([^=]+)=(.+)")
if slot_60_19_5 and slot_60_20_0 then
slot_60_14_0[slot_60_19_5] = slot_60_20_0:gsub("\\;", ";")
end
end
for iter_60_2, iter_60_3 in pairs(all_elements.checkboxes) do
if iter_60_3 then
slot_60_21_3 = slot_60_14_0[iter_60_2:gsub("^cb_", "")]
if slot_60_21_3 ~= nil then
iter_60_3:SetValue(str_to_bool(slot_60_21_3))
end
end
end
for iter_60_4, iter_60_5 in pairs(all_elements.sliders) do
if iter_60_5 then
slot_60_21_2 = slot_60_14_0[iter_60_4:gsub("^sl_", "")]
if slot_60_21_2 ~= nil then
iter_60_5:GetValue():Set(tonumber(slot_60_21_2))
end
end
end
for iter_60_6, iter_60_7 in pairs(all_elements.comboboxes) do
if iter_60_7 then
slot_60_21_1 = slot_60_14_0[iter_60_6:gsub("^cbx_", "")]
if slot_60_21_1 ~= nil then
slot_60_22_0 = tonumber(slot_60_21_1)
if slot_60_22_0 then
slot_60_23_0 = iter_60_7:GetValue()
if slot_60_23_0 then
slot_60_24_0 = slot_60_23_0:Get()
if slot_60_24_0 then
if slot_60_24_0.SetRaw then
slot_60_24_0:SetRaw(slot_60_22_0)
end
slot_60_23_0:Set(slot_60_24_0)
iter_60_7:Reset()
end
end
end
end
end
end
for iter_60_8, iter_60_9 in pairs(all_elements.colors) do
if iter_60_9 then
slot_60_21_0 = slot_60_14_0[iter_60_8:gsub("^clr_", "")]
if slot_60_21_0 ~= nil then
iter_60_9:GetValue():Set(str_to_color(slot_60_21_0))
end
end
end
slot_60_15_0 = slot_60_14_0.watermark_order
if slot_60_15_0 and slot_60_15_0 ~= "" then
watermark_element_order = {}
for iter_60_10 in string.gmatch(slot_60_15_0, "[^,]+") do
table.insert(watermark_element_order, iter_60_10)
end
end
slot_60_16_0 = slot_60_4_0:gsub("%.pnd$", "")
gui.notify:add(gui.notification("Success", "Config loaded from \"" .. slot_60_16_0 .. "\"", draw.textures.icon_check))
if my_list then
slot_60_17_0 = my_list:GetValue():Get()
if slot_60_17_0 then
slot_60_17_0:Reset()
end
end
subtab_rage:Reset()
subtab_misc:Reset()
subtab_visuals:Reset()
return true
end)
end)
detected = {}
purchases = {}
weapon_grenade_map = {
weapon_hegrenade = "he",
weapon_incgrenade = "molotov",
weapon_smokegrenade = "smoke",
weapon_molotov = "molotov"
}
non_weapon_items = {
weapon_hegrenade = true,
weapon_incgrenade = true,
weapon_smokegrenade = true,
weapon_molotov = true
}
expected_grenades = {
"he",
"molotov",
"smoke"
}
mods.events:add_listener("item_purchase")
events.event:add(function(arg_61_0)
if not game.engine:InGame() then
return
end
local var_61_0 = arg_61_0:get_name()
if var_61_0 == "round_start" then
purchases = {}
return
end
if var_61_0 ~= "item_purchase" then
return
end
local var_61_1 = arg_61_0:get_controller("userid")
if not var_61_1 then
return
end
local var_61_2 = var_61_1:get_name()
if detected[var_61_2] then
return
end
local var_61_3 = arg_61_0:get_string("weapon")
local var_61_4 = game.global_vars.real_time or 0
local var_61_5 = purchases[var_61_2]
if not var_61_5 then
var_61_5 = {
weapon_bought = false,
weapon = false,
grenades = {},
round_time = var_61_4
}
purchases[var_61_2] = var_61_5
end
var_61_5.round_time = var_61_5.round_time or var_61_4
local var_61_6 = var_61_4 - var_61_5.round_time
if not var_61_5.weapon_bought and not non_weapon_items[var_61_3] then
var_61_5.weapon_bought = true
var_61_5.weapon_time = var_61_6
end
if #var_61_5.grenades < 3 then
local var_61_7 = weapon_grenade_map[var_61_3]
if var_61_7 then
if not var_61_5.grenade_time then
var_61_5.grenade_time = var_61_6
var_61_5.grenades = {
var_61_7
}
elseif var_61_6 == var_61_5.grenade_time and var_61_7 == expected_grenades[#var_61_5.grenades + 1] then
var_61_5.grenades[#var_61_5.grenades + 1] = var_61_7
if #var_61_5.grenades == 3 then
var_61_5.grenade_complete = var_61_6
end
else
var_61_5.grenades = {}
var_61_5.grenade_time = nil
end
end
end
if var_61_5.weapon_bought and var_61_5.grenade_complete and var_61_5.grenade_complete - var_61_5.weapon_time >= 0.06 then
detected[var_61_2] = true
GAMESENSE_NAMES = {}
for iter_61_0 in pairs(detected) do
GAMESENSE_NAMES[#GAMESENSE_NAMES + 1] = iter_61_0
end
update_gamesense_list()
end
end)
PND_NAMES = {}
GAMESENSE_NAMES = {}
scoreboard_monitor = nil
monitor_initialized = false
shutdown_counter = 0
function initialize_monitor()
if monitor_initialized then
return
end
scoreboard_monitor = panorama.Eval(" (function () {\n var shutdown_current = 0;\n var shutdown_last = 1;\n var repeats = 0;\n var mainLoopHandle = null;\n var pndNames = [];\n var gamesenseNames = [];\n\n function escapeRegExp(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n\n function containsPNDName(name) {\n if (!name) return false;\n\n var originalName = name;\n name = name.toLowerCase();\n name = name.replace(/^\\[.*?\\]\\s*/, \"\").trim();\n\n if (name.length < 1) {\n return false;\n }\n\n for (var j = 0; j < pndNames.length; j++) {\n if (!pndNames[j]) continue;\n\n var pnd = pndNames[j].toLowerCase();\n pnd = pnd.replace(/^\\[.*?\\]\\s*/, \"\").trim();\n\n if (pnd.length < 1) continue;\n\n var regex = new RegExp(\"(^|\\\\s)\" + escapeRegExp(pnd) + \"(\\\\s|$)\", \"i\");\n if (regex.test(originalName)) {\n return true;\n }\n }\n\n return false;\n }\n \n function containsGameSenseName(name) {\n if (!name) return false;\n\n var originalName = name;\n name = name.toLowerCase();\n name = name.replace(/^\\[.*?\\]\\s*/, \"\").trim();\n\n if (name.length < 1) {\n return false;\n }\n\n for (var j = 0; j < gamesenseNames.length; j++) {\n if (!gamesenseNames[j]) continue;\n\n var gs = gamesenseNames[j].toLowerCase();\n gs = gs.replace(/^\\[.*?\\]\\s*/, \"\").trim();\n\n if (gs.length < 1) continue;\n\n var regex = new RegExp(\"(^|\\\\s)\" + escapeRegExp(gs) + \"(\\\\s|$)\", \"i\");\n if (regex.test(originalName)) {\n return true;\n }\n }\n\n return false;\n }\n\n function removeOldIcons(panel) {\n if (!panel) return;\n var children = panel.Children();\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.id === \"pnd_image\" || (child.BHasClass && child.BHasClass(\"pnd_image\")) ||\n child.id === \"gamesense_image\" || (child.BHasClass && child.BHasClass(\"gamesense_image\"))) {\n child.DeleteAsync(0);\n } else {\n removeOldIcons(child);\n }\n }\n }\n \n function removeAllIconsImmediately() {\n var root = $.GetContextPanel();\n if (!root) return;\n \n var pndIcons = root.FindChildrenWithClassTraverse(\"pnd_image\");\n for (var i = 0; i < pndIcons.length; i++) {\n pndIcons[i].DeleteAsync(0);\n }\n \n var gsIcons = root.FindChildrenWithClassTraverse(\"gamesense_image\");\n for (var i = 0; i < gsIcons.length; i++) {\n gsIcons[i].DeleteAsync(0);\n }\n }\n\n function addPNDIconToStatusCell(statusCell) {\n var allChildren = statusCell.Children();\n\n for (var i = 0; i < allChildren.length; i++) {\n var child = allChildren[i];\n\n if (child.id !== \"pnd_image\" && child.id !== \"gamesense_image\" && \n !(child.BHasClass && (child.BHasClass(\"pnd_image\") || child.BHasClass(\"gamesense_image\")))) {\n child.DeleteAsync(0);\n }\n }\n\n var existingIcon = statusCell.FindChildTraverse(\"pnd_image\");\n if (existingIcon) return;\n\n var icon = $.CreatePanel(\"Image\", statusCell, \"pnd_image\");\n icon.SetImage(\"https://raw.githubusercontent.com/ravaelsea/icon/main/pnd_icons/heartS.png\");\n icon.AddClass(\"pnd_image\");\n\n icon.style.width = \"24px\";\n icon.style.height = \"24px\";\n }\n \n function addGameSenseIconToStatusCell(statusCell) {\n var allChildren = statusCell.Children();\n\n for (var i = 0; i < allChildren.length; i++) {\n var child = allChildren[i];\n\n if (child.id !== \"pnd_image\" && child.id !== \"gamesense_image\" && \n !(child.BHasClass && (child.BHasClass(\"pnd_image\") || child.BHasClass(\"gamesense_image\")))) {\n child.DeleteAsync(0);\n }\n }\n\n var existingPNDIcon = statusCell.FindChildTraverse(\"pnd_image\");\n if (existingPNDIcon) return;\n \n var existingIcon = statusCell.FindChildTraverse(\"gamesense_image\");\n if (existingIcon) return;\n\n var icon = $.CreatePanel(\"Image\", statusCell, \"gamesense_image\");\n icon.SetImage(\"https://raw.githubusercontent.com/ravaelsea/icon/main/pnd_icons/heartG.png\");\n icon.AddClass(\"gamesense_image\");\n\n icon.style.width = \"24px\";\n icon.style.height = \"24px\";\n }\n\n function processScoreboard() {\n var root = $.GetContextPanel();\n if (!root) return;\n\n var playerTables = root.FindChildrenWithClassTraverse(\"sb-players-table\");\n if (!playerTables || playerTables.length === 0) return;\n\n for (var i = 0; i < playerTables.length; i++) {\n var playerTable = playerTables[i];\n var playerRows = playerTable.Children();\n\n for (var j = 0; j < playerRows.length; j++) {\n var playerRow = playerRows[j];\n var playerNameLabel = playerRow.FindChildTraverse(\"name\");\n if (!playerNameLabel) continue;\n\n var playerName = playerNameLabel.text;\n var hasPND = containsPNDName(playerName);\n var hasGameSense = containsGameSenseName(playerName);\n \n var statusCells = playerRow.FindChildrenWithClassTraverse(\"sb-row__cell--status\");\n \n for (var k = 0; k < statusCells.length; k++) {\n if (hasPND) {\n addPNDIconToStatusCell(statusCells[k]);\n } else if (hasGameSense) {\n addGameSenseIconToStatusCell(statusCells[k]);\n } else {\n var existingPNDIcon = statusCells[k].FindChildTraverse(\"pnd_image\");\n if (existingPNDIcon) {\n existingPNDIcon.DeleteAsync(0);\n }\n var existingGameSenseIcon = statusCells[k].FindChildTraverse(\"gamesense_image\");\n if (existingGameSenseIcon) {\n existingGameSenseIcon.DeleteAsync(0);\n }\n }\n }\n }\n }\n }\n\n function mainLoop() {\n if (shutdown_last === shutdown_current) {\n repeats++;\n if (repeats > 2) {\n var root = $.GetContextPanel();\n if (root) removeOldIcons(root);\n return;\n }\n } else {\n repeats = 0;\n }\n\n shutdown_last = shutdown_current;\n processScoreboard();\n mainLoopHandle = $.Schedule(0.4, mainLoop);\n }\n\n function start() {\n if (mainLoopHandle) {\n $.CancelScheduled(mainLoopHandle);\n mainLoopHandle = null;\n }\n mainLoopHandle = $.Schedule(0.6, mainLoop);\n }\n\n function stop() {\n if (mainLoopHandle) {\n $.CancelScheduled(mainLoopHandle);\n mainLoopHandle = null;\n }\n var root = $.GetContextPanel();\n if (root) removeOldIcons(root);\n }\n\n return {\n set_shutdown_current: function (v) {\n shutdown_current = v;\n },\n set_pnd_names: function (names) {\n pndNames = names || [];\n },\n set_gamesense_names: function (names) {\n gamesenseNames = names || [];\n },\n remove_all_icons: function () {\n removeAllIconsImmediately();\n },\n start: start,\n stop: stop\n };\n })()\n ")
monitor_initialized = true
end
function clear_gamesense_list()
GAMESENSE_NAMES = {}
detected = {}
if scoreboard_monitor and scoreboard_monitor.set_gamesense_names then
scoreboard_monitor.set_gamesense_names(GAMESENSE_NAMES)
end
if scoreboard_monitor and scoreboard_monitor.remove_all_icons then
scoreboard_monitor.remove_all_icons()
end
end
function update_gamesense_list()
if scoreboard_monitor and scoreboard_monitor.set_gamesense_names then
scoreboard_monitor.set_gamesense_names(GAMESENSE_NAMES)
end
end
function deinitialize_monitor()
if not monitor_initialized or not scoreboard_monitor then
return
end
if scoreboard_monitor.stop then
scoreboard_monitor.stop()
end
scoreboard_monitor = nil
monitor_initialized = false
PND_NAMES = {}
GAMESENSE_NAMES = {}
detected = {}
end
function check_player_state()
if not (game.engine:InGame() and game.engine:IsConnected()) then
if monitor_initialized then
deinitialize_monitor()
end
return
end
local var_66_0 = entities.GetLocalPawn()
if var_66_0 and var_66_0:IsAlive() and not monitor_initialized then
initialize_monitor()
if scoreboard_monitor and scoreboard_monitor.start then
scoreboard_monitor.start()
end
end
end
events.presentQueue:Add(function()
shutdown_counter = shutdown_counter + 1
check_player_state()
if scoreboard_monitor and scoreboard_monitor.set_shutdown_current then
scoreboard_monitor.set_shutdown_current(shutdown_counter)
end
end)
realName = nil
enabled_cl = false
function initializeRealName()
local var_68_0 = entities.GetLocalController()
local var_68_1 = entities.GetLocalPawn()
realName = getNameFromEntity(var_68_0) or getNameFromEntity(var_68_1)
enabled_cl = realName and realName ~= ""
return enabled_cl
end
state = {
sync_interval = 8,
pnd_players_cache = {},
all_found_pnd_players = {},
manual_pnd_players = {}
}
function url_encode(arg_69_0)
if not arg_69_0 then
return ""
end
return string.gsub(arg_69_0, "([^%w%-_%.~])", function(arg_70_0)
return string.format("%%%02X", string.byte(arg_70_0))
end):gsub(" ", "+")
end
events.presentQueue:Add(function()
if not enabled_cl then
initializeRealName()
return
end
if not (cb_synchronization and cb_synchronization:GetValue() and cb_synchronization:GetValue():Get()) then
if scoreboard_monitor then
PND_NAMES = {}
scoreboard_monitor.set_pnd_names(PND_NAMES)
clear_gamesense_list()
end
player_count = "None"
return
end
local var_71_0 = utils.GetUnixTime()
if var_71_0 - (state.last_sync_time or 0) < state.sync_interval then
return
end
state.last_sync_time = var_71_0
if not entities.GetLocalController() then
return
end
local var_71_1 = "local"
local var_71_2 = game.engine:GetNetChan()
if var_71_2 and not var_71_2:IsNull() then
var_71_1 = var_71_2:GetAddress() or "local"
end
local var_71_3 = math.floor(var_71_0 / 60) * 60
local var_71_4 = "mAnj3AOdhjV4jkASBdj23nm" .. tostring(var_71_3)
local var_71_5 = tostring(utils.Fnv1a(var_71_4))
local var_71_6 = {
local_player = {
name = realName,
server_ip = var_71_1
},
username = members.username,
version = update.version
}
local var_71_7 = url_encode(utils.JsonEncode(var_71_6))
local var_71_8 = utils.Base64Decode("aHR0cDovLzE0NC4zMS4xNjUuODk6NjI5MzAvdXBkYXRlP2tleT0=") .. var_71_5 .. "&data=" .. var_71_7
http.Get(var_71_8, {
absolute_timeout = 15,
network_timeout = 10
}, function(arg_72_0, arg_72_1)
if arg_72_0 == 200 and arg_72_1 then
local var_72_0 = utils.JsonDecode(arg_72_1)
if type(var_72_0) == "table" then
PND_NAMES = {}
for iter_72_0, iter_72_1 in ipairs(var_72_0) do
if iter_72_1.name and iter_72_1.name ~= "" then
PND_NAMES[#PND_NAMES + 1] = iter_72_1.name
end
end
if scoreboard_monitor then
scoreboard_monitor.set_pnd_names(PND_NAMES)
end
player_count = #var_72_0
end
end
end)
end)
function state.send_initial_ping()
local var_73_0 = members.username
local var_73_1 = update.version
local var_73_2 = utils.GetUnixTime()
local var_73_3 = math.floor(var_73_2 / 60) * 60
local var_73_4 = "jJn12JK8cx9hjb1337zxc" .. tostring(var_73_3)
local var_73_5 = tostring(utils.Fnv1a(var_73_4))
local var_73_6 = "aHR0cDovLzE0NC4zMS4xNjUuODk6NjI5NDcvcGluZz9rZXk9"
local var_73_7 = utils.Base64Decode(var_73_6) .. url_encode(var_73_5) .. "&username=" .. url_encode(var_73_0) .. "&version=" .. url_encode(var_73_1)
http.Get(var_73_7, {
absolute_timeout = 5,
network_timeout = 3
}, function(arg_74_0, arg_74_1)
return
end)
end
state.send_initial_ping()
autostop_manager = {
owner = nil,
saved_bits = nil
}
function set_autostop_for(arg_75_0, arg_75_1, arg_75_2)
if not arg_75_1 then
return
end
if autostop_manager.owner ~= arg_75_0 then
local var_75_0 = arg_75_1:GetValue()
if var_75_0 then
local var_75_1 = var_75_0:Get()
if var_75_1 then
autostop_manager.saved_bits = var_75_1:GetRaw()
autostop_manager.owner = arg_75_0
end
end
end
set_autostop_bits(arg_75_1, arg_75_2)
end
function restore_autostop_for(arg_76_0, arg_76_1)
if autostop_manager.owner == arg_76_0 and arg_76_1 and autostop_manager.saved_bits then
set_autostop_bits(arg_76_1, autostop_manager.saved_bits)
autostop_manager.owner = nil
autostop_manager.saved_bits = nil
end
end
jump_backup = {
force_shoot_active = false,
active = false,
was_jumping = false
}
boost_backup = {
active = false,
static_saved = false,
prev_mode = false
}
target_speed = 600
min_boost = 50
max_boost = 100
function set_autostop_bits(arg_77_0, arg_77_1)
if not arg_77_0 then
return
end
local var_77_0 = arg_77_0:GetValue()
if not var_77_0 then
return
end
local var_77_1 = var_77_0:Get()
if not var_77_1 then
return
end
var_77_1:SetRaw(arg_77_1)
var_77_0:Set(var_77_1)
arg_77_0:Reset()
end
function get_autostop_bits(arg_78_0)
if not arg_78_0 then
return nil
end
local var_78_0 = arg_78_0:GetValue()
if not var_78_0 then
return nil
end
local var_78_1 = var_78_0:Get()
if not var_78_1 then
return nil
end
return var_78_1:GetRaw()
end
function find_controls()
return {
hitchance = gui.ctx:Find("rage>weapon>SSG-08>weapon>hitchance") or gui.ctx:Find("rage>weapon>general>weapon>hitchance"),
pointscale = gui.ctx:Find("rage>weapon>SSG-08>weapon>pointscale") or gui.ctx:Find("rage>weapon>general>weapon>pointscale"),
autostop = gui.ctx:Find("rage>weapon>SSG-08>extra>autostop>settings>mode") or gui.ctx:Find("rage>weapon>general>extra>autostop>settings>mode"),
autostop_enable = gui.ctx:Find("rage>weapon>SSG-08>extra>autostop") or gui.ctx:Find("rage>weapon>general>extra>autostop"),
force_shoot = gui.ctx:Find("rage>aimbot>general>force shoot"),
head_only = gui.ctx:Find("rage>aimbot>general>headshot only")
}
end
function restore_jump_backup(arg_80_0)
if not jump_backup.active then
return
end
if arg_80_0.hitchance and jump_backup.hitchance ~= nil then
arg_80_0.hitchance:GetValue():Set(jump_backup.hitchance)
end
if arg_80_0.pointscale and jump_backup.pointscale ~= nil then
arg_80_0.pointscale:GetValue():Set(jump_backup.pointscale)
end
if arg_80_0.head_only and jump_backup.headonly ~= nil then
arg_80_0.head_only:SetValue(jump_backup.headonly)
end
if jump_backup.force_shoot_active and arg_80_0.force_shoot then
arg_80_0.force_shoot:SetValue(false)
end
if arg_80_0.autostop then
restore_autostop_for("jump", arg_80_0.autostop)
end
if arg_80_0.autostop_enable and jump_backup.autostop_enabled ~= nil then
arg_80_0.autostop_enable:SetValue(jump_backup.autostop_enabled)
end
jump_backup = {
force_shoot_active = false,
active = false,
was_jumping = false
}
end
function apply_jump_backup(arg_81_0)
if jump_backup.was_jumping then
return
end
jump_backup.hitchance = arg_81_0.hitchance:GetValue():Get()
arg_81_0.hitchance:GetValue():Set(sl_jump_hitchance:GetValue():Get())
jump_backup.pointscale = arg_81_0.pointscale:GetValue():Get()
arg_81_0.pointscale:GetValue():Set(sl_jump_pointscale:GetValue():Get())
if cb_jump_only_head:GetValue():Get() then
jump_backup.headonly = arg_81_0.head_only:GetValue():Get()
arg_81_0.head_only:SetValue(true)
end
jump_backup.autostop_bits = get_autostop_bits(arg_81_0.autostop)
jump_backup.autostop_enabled = arg_81_0.autostop_enable:GetValue():Get()
jump_backup.was_jumping = true
jump_backup.active = true
end
function handle_boost(arg_82_0)
local var_82_0 = cb_jump_better_autostop:GetValue():Get()
if boost_backup.prev_mode ~= var_82_0 then
boost_backup.prev_mode = var_82_0
boost_backup.static_saved = false
end
if not var_82_0 then
if boost_backup.value then
config.misc.boost_slider:GetValue():Set(boost_backup.value)
end
boost_backup.active = false
boost_backup.value = nil
boost_backup.static_saved = false
return
end
if var_82_0 and not boost_backup.active then
boost_backup.value = config.misc.boost_slider:GetValue():Get()
boost_backup.active = true
end
if not arg_82_0 or not arg_82_0:IsAlive() then
return
end
local var_82_1 = arg_82_0:GetAbsVelocity()
local var_82_2 = math.sqrt(var_82_1.x^2 + var_82_1.y^2 + var_82_1.z^2)
local var_82_3 = config.misc.boost_slider:GetValue():Get()
local var_82_4 = var_82_2 - target_speed
if var_82_2 > target_speed then
local var_82_5 = math.max(min_boost, var_82_3 - math.min(10, math.max(1, math.abs(var_82_4) / 10)))
config.misc.boost_slider:GetValue():Set(var_82_5)
elseif var_82_2 < target_speed - 50 then
local var_82_6 = var_82_2 < target_speed - 100 and 5 or var_82_2 < target_speed - 30 and 2 or 0
local var_82_7 = math.min(max_boost, var_82_3 + var_82_6)
if var_82_6 > 0 then
config.misc.boost_slider:GetValue():Set(var_82_7)
end
end
end
function restore_jump_settings()
local var_83_0 = find_controls()
restore_jump_backup(var_83_0)
end
function restore_boost_settings()
if boost_backup.active and boost_backup.value then
config.misc.boost_slider:GetValue():Set(boost_backup.value)
boost_backup.active = false
boost_backup.value = nil
boost_backup.static_saved = false
end
end
events.presentQueue:Add(function()
local var_85_0 = entities.GetLocalPawn()
local var_85_1
var_85_1 = var_85_0 and var_85_0:IsAlive()
local var_85_2 = cb_jump_scout:GetValue():Get()
local var_85_3 = find_controls()
if not var_85_2 then
restore_jump_backup(var_85_3)
restore_boost_settings()
return
end
if not var_85_0 then
return
end
local var_85_4 = var_85_0:GetAbsVelocity()
local var_85_5 = math.abs(var_85_4.z) > 1
if not accuracy_boost_active and var_85_5 then
local var_85_6 = not cb_jump_autostop_highest:GetValue():Get() or math.abs(var_85_4.z) > 40
if not jump_backup.was_jumping then
apply_jump_backup(var_85_3)
end
if var_85_6 then
local var_85_7 = cbx_jump_scout_autostop:GetValue():Get():GetRaw()
if var_85_7 == 2 then
set_autostop_for("jump", var_85_3.autostop, 4)
var_85_3.autostop_enable:SetValue(true)
elseif var_85_7 == 4 then
set_autostop_for("jump", var_85_3.autostop, 31)
var_85_3.autostop_enable:SetValue(true)
end
else
restore_autostop_for("jump", var_85_3.autostop)
var_85_3.autostop_enable:SetValue(jump_backup.autostop_enabled)
end
if cb_jump_force_shoot:GetValue():Get() and not jump_backup.force_shoot_active then
var_85_3.force_shoot:SetValue(true)
jump_backup.force_shoot_active = true
end
elseif jump_backup.was_jumping then
restore_jump_backup(var_85_3)
end
handle_boost(var_85_0)
end)
function check_enemy_eye_visible()
if not cb_jump_scout:GetValue():Get() or not cb_jump_stop_on_land:GetValue():Get() then
return
end
local var_86_0 = entities.GetLocalPawn()
if not var_86_0 or not var_86_0:IsAlive() then
return false
end
local var_86_1 = var_86_0:GetActiveWeapon()
if not var_86_1 then
return
end
if var_86_1:GetClassName() ~= "C_WeaponSSG08" then
return
end
local var_86_2 = var_86_0:GetEyePos()
if not var_86_2 or not game.physicsQueryInterface or not game.physicsQueryInterface.TraceRay then
return false
end
local var_86_3 = ray_t()
if entities.players then
local var_86_4 = false
entities.players:ForEach(function(arg_87_0)
local var_87_0 = arg_87_0.entity
if var_87_0 and var_87_0:IsAlive() and var_87_0:IsEnemy() then
local var_87_1 = var_87_0:GetEyePos()
if var_87_1 then
local var_87_2 = game.physicsQueryInterface:TraceRay(var_86_3, var_86_2, var_87_1)
if var_87_2 and var_87_2.m_flFraction > 0.88 then
var_86_4 = true
return true
end
end
end
end)
return var_86_4
end
return false
end
events.createMove:Add(function(arg_88_0)
if check_enemy_eye_visible() then
arg_88_0:RemoveButton(InputBitMask_t.IN_JUMP)
end
end)
reset_applied = false
function transform_point(arg_89_0, arg_89_1, arg_89_2)
local var_89_0 = math.rad(arg_89_1.y)
local var_89_1 = math.cos(var_89_0)
local var_89_2 = math.sin(var_89_0)
return Vector(arg_89_0.x + arg_89_2.x * var_89_1 - arg_89_2.y * var_89_2, arg_89_0.y + arg_89_2.x * var_89_2 + arg_89_2.y * var_89_1, arg_89_0.z + arg_89_2.z)
end
function calculate_pitch(arg_90_0, arg_90_1, arg_90_2)
if arg_90_2 then
return -1
end
local var_90_0 = arg_90_1:GetAbsOrigin()
local var_90_1 = arg_90_1:GetEyePos()
local var_90_2 = arg_90_1.m_iHealth:Get()
if not arg_90_0 or not var_90_0 or not var_90_1 then
return var_90_2 > 55 and -1 or 0
end
local var_90_3 = arg_90_1:GetAbsAngles()
local var_90_4 = transform_point(var_90_1, var_90_3, Vector(35, 0, 0))
local var_90_5 = transform_point(var_90_1, var_90_3, Vector(-35, 0, 0))
local var_90_6 = transform_point(var_90_1, var_90_3, Vector(0, -50, 0))
local var_90_7 = transform_point(var_90_1, var_90_3, Vector(0, 50, 0))
local var_90_8 = (arg_90_0 - var_90_4):Length()
local var_90_9 = (arg_90_0 - var_90_5):Length()
local var_90_10 = (arg_90_0 - var_90_6):Length()
local var_90_11 = (arg_90_0 - var_90_7):Length()
return math.min(var_90_8, var_90_9) < math.min(var_90_10, var_90_11) and -1 or 0
end
events.frameStageNotify:Add(function()
local var_91_0 = cb_animfix:GetValue():Get()
local var_91_1 = entities.GetLocalPawn()
if not var_91_1 or not var_91_1:IsAlive() then
return
end
local var_91_2 = gui.ctx:Find("rage>aimbot>general>headshot only")
local var_91_3 = var_91_2 and var_91_2:GetValue():Get() or false
if reset_applied and not var_91_0 then
return
end
if var_91_0 then
reset_applied = false
end
local var_91_4 = var_91_1:GetAbsOrigin()
entities.players:ForEach(function(arg_92_0)
local var_92_0 = arg_92_0.entity
if var_92_0 == var_91_1 or not var_92_0:IsEnemy() then
return
end
local var_92_1 = var_92_0:GetAbsAngles()
if var_91_0 then
local var_92_2 = calculate_pitch(var_91_4, var_92_0, var_91_3)
var_92_0:SetAbsAngles(Vector(var_92_2, var_92_1.y, var_92_1.z))
elseif not reset_applied then
var_92_0:SetAbsAngles(Vector(0, var_92_1.y, var_92_1.z))
reset_applied = true
end
end)
end)
flinck_cache = {
previous_new = 1,
last_update_time = 0,
was_less_than_one = false,
previous = 0,
disable_until = 0
}
autofire_disabled = false
disable_time = 0
events.event:Add(function(arg_93_0)
if not game.engine:InGame() or not game.engine:IsConnected() then
return
end
if not cb_anti_aimpunch:GetValue():Get() then
return
end
if arg_93_0:get_name() ~= "player_hurt" then
return
end
local var_93_0 = entities.GetLocalController()
if not var_93_0 then
return
end
if arg_93_0:GetController("userid") == var_93_0 then
config.rage.autofire:SetValue(false)
autofire_disabled = true
disable_time = game.globalVars.m_flRealTime
return
end
end)
events.frameStageNotify:Add(function()
if not game.engine:InGame() or not game.engine:IsConnected() then
return
end
if not cb_anti_aimpunch:GetValue():Get() then
return
end
local var_94_0 = entities.GetLocalPawn()
if not var_94_0 or not var_94_0:IsAlive() then
flinck_cache.previous_new = 1
flinck_cache.disable_until = 0
flinck_cache.last_update_time = 0
flinck_cache.previous = 0
flinck_cache.was_less_than_one = false
config.rage.autofire:SetValue(true)
return
end
if autofire_disabled and game.globalVars.m_flRealTime >= disable_time + 0.13 then
config.rage.autofire:SetValue(true)
autofire_disabled = false
end
local var_94_1 = game.globalVars.m_flRealTime
local var_94_2 = var_94_0.m_flFlinchStack:Get()
if var_94_1 - flinck_cache.last_update_time > 0.001 then
if flinck_cache.previous_new - var_94_2 > 0.1 and flinck_cache.previous_new > 0.1 then
flinck_cache.disable_until = var_94_1 + 0.13
elseif var_94_2 - flinck_cache.previous_new > 0.2 then
flinck_cache.disable_until = 0
end
flinck_cache.previous_new = var_94_2
flinck_cache.last_update_time = var_94_1
end
if var_94_1 < flinck_cache.disable_until then
config.rage.autofire:SetValue(false)
else
config.rage.autofire:SetValue(true)
end
end)
last_toggle_time = 0
toggle_state = false
accuracy_boost_active = false
function restore_accuracy_autostop()
restore_autostop_for("accuracy", gui.ctx:Find("rage>weapon>SSG-08>extra>autostop>settings>mode"))
toggle_state = false
accuracy_boost_active = false
end
events.presentQueue:Add(function()
if not cb_accuracy_boost:GetValue():Get() then
restore_accuracy_autostop()
return
end
local var_96_0 = entities.GetLocalPawn()
if not var_96_0 or not var_96_0:IsAlive() or gui.IsVisible() then
restore_accuracy_autostop()
return
end
local var_96_1 = gui.ctx:Find("misc>movement>peek assist")
if var_96_1 and var_96_1:GetValue():Get() then
restore_accuracy_autostop()
return
end
local var_96_2 = var_96_0:GetAbsVelocity()
local var_96_3 = math.abs(var_96_2.z) > 0.1
if jump_backup.was_jumping or var_96_3 then
restore_accuracy_autostop()
return
end
local var_96_4 = gui.ctx:Find("rage>weapon>SSG-08>extra>autostop>settings>mode")
if not var_96_4 then
return
end
local var_96_5 = game.globalVars.m_flRealTime
if var_96_5 - last_toggle_time < 0.1 then
return
end
if not toggle_state then
set_autostop_for("accuracy", var_96_4, 16)
accuracy_boost_active = true
else
restore_autostop_for("accuracy", var_96_4)
accuracy_boost_active = false
end
toggle_state = not toggle_state
last_toggle_time = var_96_5
end)
function transform_point(arg_97_0, arg_97_1, arg_97_2)
local var_97_0 = math.rad(arg_97_1.y)
local var_97_1 = math.cos(var_97_0)
local var_97_2 = math.sin(var_97_0)
local var_97_3 = arg_97_2.x * var_97_1 - arg_97_2.y * var_97_2
local var_97_4 = arg_97_2.x * var_97_2 + arg_97_2.y * var_97_1
return Vector(arg_97_0.x + var_97_3, arg_97_0.y + var_97_4, arg_97_0.z + arg_97_2.z)
end
function check_trace(arg_98_0, arg_98_1)
if not arg_98_0 or not arg_98_1 then
return false, false, 0
end
local var_98_0 = Ray_t()
local var_98_1 = game.physicsQueryInterface:TraceRay(var_98_0, arg_98_0, arg_98_1, false)
if not var_98_1 then
return false, false, 0
end
local var_98_2 = var_98_1:DidHitWorld()
local var_98_3 = var_98_1.m_flFraction or 0
local var_98_4 = false
if not var_98_1:DidHit() then
var_98_4 = true
else
local var_98_5 = var_98_1.m_EntHandle and var_98_1.m_EntHandle:get()
if var_98_5 and var_98_5:IsEnemy() then
var_98_4 = true
end
end
return var_98_4, var_98_2, var_98_3, var_98_1
end
function get_crosshair_distance(arg_99_0, arg_99_1)
local var_99_0 = arg_99_0:GetEyePos()
if not var_99_0 then
return math.huge
end
local var_99_1 = math.WorldToScreen(var_99_0)
if not var_99_1 then
return math.huge
end
local var_99_2 = var_99_1.x - arg_99_1.x
local var_99_3 = var_99_1.y - arg_99_1.y
return math.sqrt(var_99_2 * var_99_2 + var_99_3 * var_99_3)
end
CHECK_POINTS = {
{
size = 8,
x = 10,
y = 0,
z = -2,
color = {
255,
0,
0,
220
}
},
{
size = 6,
x = -12,
y = -8,
z = -46,
color = {
255,
165,
0,
220
}
},
{
size = 6,
x = 16,
y = 10,
z = -46,
color = {
255,
165,
0,
220
}
}
}
auto_force_shot_frame_counter = 0
last_force_shot_result = nil
last_force_shot_time = 0
function perform_force_shot_calculation()
local var_100_0 = entities.GetLocalPawn()
if not var_100_0 or not var_100_0:IsAlive() then
return nil
end
local var_100_1 = var_100_0:GetEyePos()
if not var_100_1 then
return nil
end
local var_100_2, var_100_3 = game.engine:GetScreenSize()
local var_100_4 = math.Vec2(var_100_2 / 2, var_100_3 / 2)
local var_100_5 = var_100_1
local var_100_6 = {}
entities.players:ForEach(function(arg_101_0)
local var_101_0 = arg_101_0.entity
if var_101_0 and var_101_0:IsAlive() and var_101_0:IsEnemy() then
table.insert(var_100_6, {
entity = var_101_0,
distance = get_crosshair_distance(var_101_0, var_100_4)
})
end
end)
table.sort(var_100_6, function(arg_102_0, arg_102_1)
return arg_102_0.distance < arg_102_1.distance
end)
local var_100_7 = var_100_6[1]
local var_100_8 = false
if var_100_7 then
local var_100_9 = var_100_7.entity
local var_100_10 = var_100_9:GetEyePos()
local var_100_11 = var_100_9:GetAbsAngles()
if var_100_10 and var_100_11 then
for iter_100_0, iter_100_1 in ipairs(CHECK_POINTS) do
local var_100_12
if iter_100_1.x == 0 and iter_100_1.y == 0 and iter_100_1.z == 0 then
var_100_12 = var_100_10
else
var_100_12 = transform_point(var_100_10, var_100_11, Vector(iter_100_1.x, iter_100_1.y, iter_100_1.z))
end
if var_100_12 then
local var_100_13, var_100_14 = check_trace(var_100_5, var_100_12)
if not var_100_14 then
var_100_8 = true
break
end
end
end
end
end
return var_100_8
end
events.createMove:Add(function()
if not game.engine:InGame() or not game.engine:IsConnected() then
return
end
if not cb_auto_force_shot:GetValue():Get() then
return
end
local var_103_0 = entities.GetLocalPawn()
if not var_103_0 or not var_103_0:IsAlive() then
auto_force_shot_frame_counter = 0
return
end
auto_force_shot_frame_counter = auto_force_shot_frame_counter + 1
local var_103_1
if auto_force_shot_frame_counter >= 5 then
auto_force_shot_frame_counter = 0
var_103_1 = perform_force_shot_calculation()
if var_103_1 ~= nil then
last_force_shot_result = var_103_1
last_force_shot_time = game.globalVars.m_flRealTime
end
else
var_103_1 = last_force_shot_result
end
if var_103_1 == nil then
var_103_1 = false
end
local var_103_2 = gui.ctx:Find("rage>aimbot>general>force shoot")
if var_103_2 then
var_103_2:SetValue(not var_103_1)
end
end)
last_knife_state = false
last_dt_on_knife_value = nil
initialized_dt_knife = false
events.presentQueue:Add(function()
local var_104_0 = cb_dt_on_knife:GetValue():Get()
if not initialized_dt_knife then
last_dt_on_knife_value = var_104_0
initialized_dt_knife = true
return
end
local var_104_1 = config.rage.doubletap
local var_104_2 = config.rage.doubletap_manual
if not var_104_0 then
if last_dt_on_knife_value then
var_104_1:SetValue(false)
var_104_2:SetValue(false)
last_knife_state = false
end
last_dt_on_knife_value = false
return
end
local var_104_3 = entities.GetLocalPawn()
if not var_104_3 or not var_104_3:IsAlive() then
return
end
local var_104_4 = var_104_3:GetActiveWeapon()
if not var_104_4 then
return
end
local var_104_5 = var_104_4:GetClassName() == "C_Knife"
if var_104_5 ~= last_knife_state then
var_104_1:SetValue(var_104_5)
var_104_2:SetValue(var_104_5)
last_knife_state = var_104_5
end
if var_104_5 and var_104_0 ~= last_dt_on_knife_value then
var_104_1:SetValue(true)
var_104_2:SetValue(true)
last_dt_on_knife_value = var_104_0
end
end)
events.createMove:Add(function(arg_105_0)
if not cb_disable_m2_on_r8:GetValue():Get() then
return
end
local var_105_0 = entities.GetLocalPawn()
if not var_105_0 then
return
end
local var_105_1 = var_105_0:GetActiveWeapon()
if not var_105_1 then
return
end
if var_105_1:GetDefIndex() == 64 then
arg_105_0:RemoveButton(InputBitMask_t.IN_ATTACK2)
end
end)
center_hit_time = 0
in_duck_freestand = false
frame_counter_freestand = 0
last_hit_counts = {
right = 0,
center = 0,
left = 0
}
last_calculated_time = 0
function trace_dir(arg_106_0, arg_106_1, arg_106_2, arg_106_3)
if not arg_106_0 or not arg_106_1 or not arg_106_2 then
return arg_106_1, 0
end
local var_106_0 = math.sqrt(arg_106_2.x^2 + arg_106_2.y^2 + arg_106_2.z^2)
local var_106_1 = arg_106_2
if var_106_0 > 0 then
var_106_1 = Vector(arg_106_2.x / var_106_0 * arg_106_3, arg_106_2.y / var_106_0 * arg_106_3, arg_106_2.z / var_106_0 * arg_106_3)
end
local var_106_2 = Vector(arg_106_1.x + var_106_1.x, arg_106_1.y + var_106_1.y, arg_106_1.z + var_106_1.z)
if not game.physicsQueryInterface or not game.physicsQueryInterface.TraceRay then
return var_106_2, arg_106_3
end
local var_106_3 = game.physicsQueryInterface:TraceRay(arg_106_0, arg_106_1, var_106_2)
if var_106_3 and var_106_3:DidHitWorld() then
local var_106_4 = math.sqrt((var_106_3.m_vEndPos.x - arg_106_1.x)^2 + (var_106_3.m_vEndPos.y - arg_106_1.y)^2 + (var_106_3.m_vEndPos.z - arg_106_1.z)^2)
local var_106_5 = Vector(var_106_1.x / arg_106_3 * (var_106_4 - 5), var_106_1.y / arg_106_3 * (var_106_4 - 5), var_106_1.z / arg_106_3 * (var_106_4 - 5))
return Vector(arg_106_1.x + var_106_5.x, arg_106_1.y + var_106_5.y, arg_106_1.z + var_106_5.z), var_106_4
end
return var_106_2, arg_106_3
end
function is_point_visible(arg_107_0, arg_107_1, arg_107_2)
if not arg_107_0 or not arg_107_1 or not arg_107_2 then
return false
end
if not game.physicsQueryInterface or not game.physicsQueryInterface.TraceRay then
return false
end
local var_107_0 = game.physicsQueryInterface:TraceRay(arg_107_0, arg_107_1, arg_107_2)
if not var_107_0 then
return false
end
local var_107_1 = var_107_0.m_EntHandle and var_107_0.m_EntHandle:get()
return not var_107_0:DidHitWorld() or var_107_1 and var_107_1:IsEnemy()
end
function get_enemy_points(arg_108_0, arg_108_1)
local var_108_0 = {}
if not arg_108_1 or not arg_108_1:ShouldDraw() then
return var_108_0
end
local var_108_1 = arg_108_1:GetEyePos() or arg_108_1:GetAbsOrigin() + Vector(0, 0, 64)
table.insert(var_108_0, {
weight = 3,
pos = var_108_1
})
local var_108_2 = {
{
70,
0,
-10
},
{
-70,
0,
-10
},
{
0,
70,
-10
},
{
0,
-70,
-10
},
{
42,
42,
-40
},
{
-42,
42,
-40
},
{
42,
-42,
-40
},
{
-42,
-42,
-40
}
}
for iter_108_0, iter_108_1 in ipairs(var_108_2) do
local var_108_3 = Vector(iter_108_1[1], iter_108_1[2], iter_108_1[3])
local var_108_4 = math.sqrt(var_108_3.x^2 + var_108_3.y^2 + var_108_3.z^2)
if var_108_4 > 0 then
var_108_3 = Vector(var_108_3.x / var_108_4, var_108_3.y / var_108_4, var_108_3.z / var_108_4)
end
local var_108_5 = Vector(var_108_1.x + var_108_3.x * 100, var_108_1.y + var_108_3.y * 100, var_108_1.z + var_108_3.z * 100)
local var_108_6 = var_108_5
if game.physicsQueryInterface and game.physicsQueryInterface.TraceRay then
local var_108_7 = game.physicsQueryInterface:TraceRay(arg_108_0, var_108_1, var_108_5)
if var_108_7 and var_108_7:DidHitWorld() then
local var_108_8 = math.sqrt((var_108_7.m_vEndPos.x - var_108_1.x)^2 + (var_108_7.m_vEndPos.y - var_108_1.y)^2 + (var_108_7.m_vEndPos.z - var_108_1.z)^2)
var_108_6 = Vector(var_108_1.x + var_108_3.x * (var_108_8 - 5), var_108_1.y + var_108_3.y * (var_108_8 - 5), var_108_1.z + var_108_3.z * (var_108_8 - 5))
end
end
table.insert(var_108_0, {
weight = 2,
pos = var_108_6
})
end
return var_108_0
end
function check_hits(arg_109_0, arg_109_1, arg_109_2, arg_109_3)
if not arg_109_3 then
return
end
if not entities.players then
return
end
entities.players:ForEach(function(arg_110_0)
local var_110_0 = arg_110_0.entity
if var_110_0 and var_110_0:IsAlive() and var_110_0:IsEnemy() then
for iter_110_0, iter_110_1 in ipairs(get_enemy_points(arg_109_0, var_110_0)) do
if is_point_visible(arg_109_0, arg_109_1, iter_110_1.pos) then
arg_109_3[arg_109_2] = arg_109_3[arg_109_2] + (iter_110_1.weight or 1)
end
end
end
end)
end
function get_directions(arg_111_0, arg_111_1)
return {
left = Vector(math.cos(arg_111_0 - math.rad(90)), math.sin(arg_111_0 - math.rad(90)), 0),
right = Vector(math.cos(arg_111_0 + math.rad(90)), math.sin(arg_111_0 + math.rad(90)), 0),
center = Vector(math.cos(arg_111_0) * math.cos(arg_111_1), math.sin(arg_111_0) * math.cos(arg_111_1), math.sin(arg_111_1))
}
end
function perform_heavy_calculations()
local var_112_0 = entities.GetLocalPawn()
if not var_112_0 or not var_112_0:IsAlive() then
return nil
end
local var_112_1 = game.input:GetViewAngles()
if not var_112_1 then
return nil
end
local var_112_2 = math.rad(var_112_1.y)
local var_112_3 = math.rad(var_112_1.x)
local var_112_4 = get_directions(var_112_2, var_112_3)
local var_112_5 = var_112_0:GetEyePos()
if not var_112_5 then
return nil
end
local var_112_6 = 50
local var_112_7 = 0
local var_112_8 = ray_t()
local var_112_9 = {
right = 0,
center = 0,
left = 0
}
local var_112_10, var_112_11 = trace_dir(var_112_8, var_112_5, var_112_4.left, var_112_6)
local var_112_12, var_112_13 = trace_dir(var_112_8, var_112_5, var_112_4.right, var_112_6)
local var_112_14, var_112_15 = trace_dir(var_112_8, var_112_5, var_112_4.center, var_112_7)
check_hits(var_112_8, var_112_14, "center", var_112_9)
check_hits(var_112_8, var_112_10, "left", var_112_9)
check_hits(var_112_8, var_112_12, "right", var_112_9)
return var_112_9
end
events.createMove:Add(function(arg_113_0)
if not cb_freestands:GetValue():Get() then
return
end
in_duck_freestand = arg_113_0:GetButton(InputBitMask_t.IN_DUCK)
end)
events.presentQueue:Add(function()
if not game.engine:InGame() or not game.engine:IsConnected() then
return
end
local var_114_0 = config.anti_aim.right_override
local var_114_1 = config.anti_aim.left_override
if not cb_freestands:GetValue():Get() then
if var_114_0 and var_114_1 then
var_114_0:SetValue(false)
var_114_1:SetValue(false)
end
center_hit_time = 0
frame_counter_freestand = 0
return
end
local var_114_2 = entities.GetLocalPawn()
if not var_114_2 or not var_114_2:IsAlive() then
frame_counter_freestand = 0
return
end
local var_114_3 = in_duck_freestand or config.misc.duck_peek_control:GetValue():Get()
local var_114_4 = is_hotkey_on("rage>anti-aim>angles>manual override>override left") or is_hotkey_on("rage>anti-aim>angles>manual override>override right") or is_hotkey_on("rage>anti-aim>angles>manual override>override back") or is_hotkey_on("rage>anti-aim>angles>manual override>override forward")
local var_114_5 = var_114_2:GetAbsVelocity()
local var_114_6 = math.abs(var_114_5.z) > 0.1
local var_114_7 = cb_freestands_off_in_air:GetValue():Get()
if var_114_3 or var_114_4 or var_114_7 and var_114_6 then
if var_114_0 and var_114_1 then
var_114_0:SetValue(false)
var_114_1:SetValue(false)
end
center_hit_time = 0
frame_counter_freestand = 0
return
end
frame_counter_freestand = frame_counter_freestand + 1
local var_114_8
if frame_counter_freestand >= 5 then
frame_counter_freestand = 0
var_114_8 = perform_heavy_calculations()
if var_114_8 then
last_hit_counts = var_114_8
last_calculated_time = game.globalVars.m_flRealTime
end
else
var_114_8 = last_hit_counts
end
if not var_114_8 then
return
end
if var_114_0 and var_114_1 then
local var_114_9 = game.globalVars.m_flRealTime
if var_114_8.center >= 10 then
var_114_0:SetValue(false)
var_114_1:SetValue(false)
center_hit_time = 0
elseif var_114_8.center > 3 then
if center_hit_time == 0 then
center_hit_time = var_114_9
end
if var_114_9 - center_hit_time >= 0.3 then
var_114_0:SetValue(false)
var_114_1:SetValue(false)
center_hit_time = 0
end
else
center_hit_time = 0
local var_114_10 = var_114_8.left
local var_114_11 = var_114_8.right
var_114_0:SetValue(var_114_10 < var_114_11)
var_114_1:SetValue(var_114_11 < var_114_10)
end
end
end)
stored_aa_state = nil
is_on_ladder = false
function normalize_angle(arg_115_0)
arg_115_0 = arg_115_0 % 360
if arg_115_0 > 180 then
arg_115_0 = arg_115_0 - 360
end
return arg_115_0
end
is_fast_ladder_active = false
activation_time = 0
events.createMove:Add(function(arg_116_0)
if not cb_fast_ladder:GetValue():Get() then
return
end
local var_116_0 = entities.GetLocalPawn()
if not var_116_0 or not var_116_0:IsAlive() then
return
end
local var_116_1 = gui.input
if arg_116_0:GetButton(InputBitMask_t.IN_JUMP) or arg_116_0:GetButton(InputBitMask_t.IN_SPEED) then
is_fast_ladder_active = false
return
end
if not var_116_1:IsKeyDown(87) and not var_116_1:IsKeyDown(83) then
is_fast_ladder_active = false
return
end
local var_116_2 = var_116_0:GetAbsVelocity()
is_on_ladder = math.abs(var_116_2.z) > 1 and var_116_2:Length2d() < 50
if not is_on_ladder then
is_fast_ladder_active = false
return
end
if not is_fast_ladder_active then
activation_time = game.globalVars.m_flRealTime
is_fast_ladder_active = true
end
if game.globalVars.m_flRealTime - activation_time < 0.01 then
return
end
local var_116_3 = arg_116_0:GetViewangles()
local var_116_4 = -90
arg_116_0:SetViewangles(Vector(89, normalize_angle(var_116_3.y + var_116_4), 0))
if arg_116_0:GetButton(InputBitMask_t.IN_FORWARD) then
arg_116_0:SetLeftMove(1)
arg_116_0:SetForwardMove(-1)
elseif arg_116_0:GetButton(InputBitMask_t.IN_BACK) then
arg_116_0:SetLeftMove(-1)
arg_116_0:SetForwardMove(1)
end
end)
fast_angles_yaw = nil
fast_angles_active = false
fast_time = 1e-05
function is_override_enabled(arg_117_0)
local var_117_0 = config.anti_aim[arg_117_0 .. "_override"]
return var_117_0 and var_117_0:GetValue():Get()
end
function apply_angles(arg_118_0, arg_118_1)
local var_118_0 = arg_118_0:GetForwardMove()
local var_118_1 = arg_118_0:GetLeftMove()
local var_118_2 = game.input:GetViewAngles()
fast_angles_yaw = arg_118_1.y
arg_118_0:SetViewangles(var_118_2)
arg_118_0:SetForwardMove(var_118_0)
arg_118_0:SetLeftMove(var_118_1)
if var_118_0 ~= 0 or var_118_1 ~= 0 then
arg_118_0:RotateMovement(var_118_2.y)
end
arg_118_0:SetViewangles(arg_118_1)
arg_118_0:LockAngles()
game.input:SetViewAngles(var_118_2)
if var_118_0 ~= 0 or var_118_1 ~= 0 then
arg_118_0:RotateMovement(var_118_2.y)
end
end
function handle_direction_override(arg_119_0, arg_119_1)
local var_119_0 = game.globalVars.m_flRealTime
local var_119_1 = game.input:GetViewAngles()
local var_119_2 = 0
if override_in_progress and override_direction ~= arg_119_1 and not override_transitioning then
override_transitioning = true
override_transition_end_time = var_119_0 + fast_time
previous_override_direction = override_direction
override_direction = nil
end
if override_transitioning then
if var_119_0 >= override_transition_end_time then
override_transitioning = false
override_in_progress = true
override_direction = arg_119_1
override_delay_time = var_119_0 + fast_time
var_119_2 = arg_119_1 == "left" and 90 or 90
end
elseif not override_in_progress or override_direction ~= arg_119_1 then
override_in_progress = true
override_direction = arg_119_1
override_delay_time = var_119_0 + fast_time
var_119_2 = arg_119_1 == "left" and -40 or 78
else
var_119_2 = arg_119_1 == "left" and 20 or 20
end
local var_119_3 = Vector(var_119_1.x, normalize_angle(var_119_1.y + var_119_2), 0)
apply_angles(arg_119_0, var_119_3)
end
yaw_base_original = nil
yaw_base_saved = false
function set_yaw_base(arg_120_0)
local var_120_0 = gui.ctx:Find("rage>anti-aim>angles>yaw base")
if not var_120_0 then
return
end
local var_120_1 = var_120_0:GetValue()
if not var_120_1 then
return
end
local var_120_2 = var_120_1:Get()
var_120_2:SetRaw(arg_120_0)
var_120_1:Set(var_120_2)
var_120_0:Reset()
end
closest_enemy_object = nil
split_angles_active = false
split_stage = nil
split_start_time = 0
split_target_angles = {}
split_current_index = 1
split_duration = 0.001
right_offset = 20
events.createMove:Add(function(arg_121_0)
slot_121_1_0 = cb_fast_angles:GetValue():Get()
if cb_blockbot:GetValue():Get() then
return
end
if slot_121_1_0 then
if not yaw_base_saved then
slot_121_2_1 = gui.ctx:Find("rage>anti-aim>angles>yaw base")
if slot_121_2_1 then
slot_121_3_1 = slot_121_2_1:GetValue()
if slot_121_3_1 then
yaw_base_original = slot_121_3_1:Get():GetRaw()
yaw_base_saved = true
end
end
end
set_yaw_base(1)
elseif yaw_base_saved and yaw_base_original then
set_yaw_base(yaw_base_original)
yaw_base_saved = false
yaw_base_original = nil
end
if not slot_121_1_0 then
fast_angles_active = false
return
end
if is_on_ladder or is_mouse_down() or not config.anti_aim.anti_aim:GetValue():Get() or arg_121_0:GetButton(InputBitMask_t.IN_USE) then
return
end
slot_121_2_0 = entities.GetLocalPawn()
if not slot_121_2_0 then
return
end
slot_121_3_0 = slot_121_2_0:GetActiveWeapon()
if not slot_121_3_0 or is_grenade(slot_121_3_0:GetDefIndex()) then
fast_angles_active = false
return
end
function slot_121_4_0(arg_122_0)
handle_direction_override(arg_121_0, arg_122_0)
previous_override_direction = arg_122_0
end
if is_override_enabled("left") then
slot_121_4_0("left")
return
elseif is_override_enabled("right") then
slot_121_4_0("right")
return
elseif previous_override_direction then
slot_121_5_1 = config.anti_aim.back_override
if slot_121_5_1 then
slot_121_5_1:SetValue(true)
slot_121_6_1 = previous_override_direction == "left" and 80 or -40
if override_transitioning and game.globalVars.m_flRealTime >= override_transition_end_time then
override_transitioning = false
override_in_progress = true
override_direction = "back"
override_delay_time = game.globalVars.m_flRealTime + fast_time
end
slot_121_7_1 = Vector(game.input:GetViewAngles().x, normalize_angle(game.input:GetViewAngles().y + slot_121_6_1), 0)
apply_angles(arg_121_0, slot_121_7_1)
slot_121_5_1:SetValue(false)
previous_override_direction = nil
return
end
end
override_in_progress = false
override_direction = nil
slot_121_5_0 = slot_121_2_0:GetAbsOrigin()
slot_121_6_0 = game.input:GetViewAngles()
slot_121_7_0, slot_121_8_0 = game.engine:GetScreenSize()
slot_121_9_0 = slot_121_7_0 / 2
slot_121_10_0 = slot_121_8_0 / 2
slot_121_11_0 = closest_enemy_object
slot_121_12_0 = nil
slot_121_13_0 = math.huge
slot_121_14_0 = {}
entities.players:for_each(function(arg_123_0)
local var_123_0 = arg_123_0.entity:ToPlayerPawn()
if var_123_0 and var_123_0:IsAlive() and var_123_0:IsEnemy() then
table.insert(slot_121_14_0, var_123_0)
end
end)
for iter_121_0, iter_121_1 in ipairs(slot_121_14_0) do
slot_121_21_2 = (vector_to_angles(slot_121_5_0, iter_121_1:GetAbsOrigin()).y - slot_121_6_0.y + 180) % 360 - 180
slot_121_22_3 = math.abs(slot_121_21_2)
if slot_121_22_3 < slot_121_13_0 then
slot_121_13_0 = slot_121_22_3
slot_121_12_0 = iter_121_1
end
end
if slot_121_12_0 and slot_121_11_0 ~= slot_121_12_0 then
slot_121_15_2 = {}
for iter_121_2, iter_121_3 in ipairs(slot_121_14_0) do
if iter_121_3 ~= slot_121_12_0 then
table.insert(slot_121_15_2, iter_121_3)
end
end
if #slot_121_15_2 > 0 then
slot_121_16_2 = vector_to_angles(slot_121_5_0, slot_121_12_0:GetAbsOrigin())
slot_121_17_2 = math.huge
slot_121_18_1 = nil
for iter_121_4, iter_121_5 in ipairs(slot_121_15_2) do
slot_121_24_1 = vector_to_angles(slot_121_5_0, iter_121_5:GetAbsOrigin())
slot_121_25_0 = (slot_121_16_2.y - slot_121_24_1.y + 180) % 360 - 180
slot_121_26_1 = math.abs(slot_121_25_0)
if slot_121_26_1 < slot_121_17_2 then
slot_121_17_2 = slot_121_26_1
slot_121_18_1 = iter_121_5
end
end
if slot_121_18_1 then
slot_121_19_0 = vector_to_angles(slot_121_5_0, slot_121_18_1:GetAbsOrigin())
slot_121_20_1 = (slot_121_16_2.y - slot_121_19_0.y + 180) % 360 - 180
slot_121_21_1 = math.abs(slot_121_20_1)
slot_121_22_1 = 60
slot_121_23_2 = math.floor(slot_121_21_1 / slot_121_22_1)
if slot_121_23_2 < 1 then
slot_121_23_2 = 1
end
if slot_121_23_2 > 10 then
slot_121_23_2 = 10
end
if slot_121_22_1 < slot_121_21_1 then
split_target_angles = {}
slot_121_24_0 = slot_121_19_0.y
slot_121_26_0 = (slot_121_16_2.y - slot_121_24_0 + 180) % 360 - 180
for iter_121_6 = 1, slot_121_23_2 do
slot_121_31_0 = iter_121_6 / slot_121_23_2
slot_121_32_0 = normalize_angle(slot_121_24_0 + slot_121_26_0 * slot_121_31_0)
table.insert(split_target_angles, slot_121_32_0)
end
if not split_angles_active then
split_angles_active = true
split_current_index = 1
split_start_time = game.globalVars.m_flRealTime
end
end
end
end
closest_enemy_object = slot_121_12_0
end
if split_angles_active and #split_target_angles > 0 then
slot_121_15_1 = game.globalVars.m_flRealTime
slot_121_16_1 = slot_121_15_1 - split_start_time
if split_current_index <= #split_target_angles then
if slot_121_16_1 < split_duration then
slot_121_17_1 = split_target_angles[split_current_index]
slot_121_18_0 = Vector(0, slot_121_17_1, 0)
apply_angles(arg_121_0, slot_121_18_0)
fast_angles_active = true
return
else
split_current_index = split_current_index + 1
split_start_time = slot_121_15_1
end
else
split_angles_active = false
split_target_angles = {}
split_current_index = 1
end
end
if slot_121_12_0 then
fast_angles_active = true
slot_121_15_0 = game.globalVars.m_flRealTime
if delayed_enemy ~= slot_121_12_0 then
delayed_enemy = slot_121_12_0
angle_delay_time = slot_121_15_0 + fast_time
is_delaying = true
end
slot_121_16_0 = vector_to_angles(slot_121_5_0, slot_121_12_0:GetAbsOrigin())
slot_121_16_0.y = normalize_angle(slot_121_16_0.y + right_offset)
slot_121_17_0 = (slot_121_16_0.y - game.input:GetViewAngles().y + 180) % 360 - 180
if is_delaying and slot_121_15_0 < angle_delay_time then
slot_121_20_0 = (slot_121_16_0.y - game.input:GetViewAngles().y + 180) % 360 - 180
slot_121_21_0 = math.abs(slot_121_20_0)
slot_121_22_0 = 61
if slot_121_21_0 > 90 then
slot_121_23_1 = slot_121_17_0 > 0 and -slot_121_22_0 or slot_121_22_0
slot_121_16_0.y = normalize_angle(slot_121_16_0.y + slot_121_23_1)
else
slot_121_23_0 = slot_121_17_0 > 0 and slot_121_22_0 or -slot_121_22_0
slot_121_16_0.y = normalize_angle(slot_121_16_0.y + slot_121_23_0)
end
else
is_delaying = false
end
apply_angles(arg_121_0, slot_121_16_0)
else
delayed_enemy = nil
is_delaying = false
fast_angles_active = false
closest_enemy_object = nil
split_angles_active = false
split_target_angles = {}
split_current_index = 1
end
end)
was_using_in_zone = false
switched = false
events.createMove:Add(function(arg_124_0)
if not cb_quick_plant:GetValue():Get() then
return
end
local var_124_0 = entities.GetLocalPawn()
if not var_124_0 then
return
end
local var_124_1 = var_124_0.m_nWhichBombZone:Get() ~= 0
local var_124_2 = arg_124_0:GetButton(InputBitMask_t.IN_USE)
if var_124_1 and var_124_2 then
was_using_in_zone = true
switched = false
game.engine:ClientCmd("slot5")
elseif was_using_in_zone and not var_124_2 then
if not switched then
game.engine:ClientCmd("slot2;slot1")
switched = true
end
was_using_in_zone = false
elseif not var_124_1 then
was_using_in_zone = false
switched = false
end
end)
duck_peek_enabled = false
was_ducking = false
events.createMove:Add(function(arg_125_0)
if not cb_smart_jump_bug:GetValue():Get() then
return
end
local var_125_0 = entities.GetLocalPawn()
if not var_125_0 or not var_125_0:IsAlive() then
return
end
if cb_height_advantage:GetValue():Get() then
config.misc.jumpbug:SetValue(true)
return
end
if not (gui.input:IsKeyDown(KEY_W) or gui.input:IsKeyDown(KEY_A) or gui.input:IsKeyDown(KEY_S) or gui.input:IsKeyDown(KEY_D)) then
config.misc.jumpbug:SetValue(false)
duck_peek_enabled = false
return
end
local var_125_1 = arg_125_0:GetButton(InputBitMask_t.IN_DUCK)
if var_125_1 ~= was_ducking then
was_ducking = var_125_1
duck_peek_enabled = false
config.misc.jumpbug:SetValue(false)
return
end
if not duck_peek_enabled and not var_125_1 then
config.misc.jumpbug:SetValue(true)
duck_peek_enabled = true
end
end)
prev_no_fall = nil
events.presentQueue:Add(function()
local var_126_0 = cb_no_fall:GetValue():Get()
if prev_no_fall == nil then
prev_no_fall = var_126_0
return
end
if prev_no_fall ~= var_126_0 then
gui.ctx:Find("misc>movement>no land inaccuracy"):SetValue(var_126_0)
prev_no_fall = var_126_0
end
end)
last_activation_time = -1
jump_started = false
saved_autostrafer = nil
saved_jumpbug = nil
saved_aimbot = nil
auto_changed = false
jumpbug_changed = false
aimbot_changed = false
function set_autostrafer(arg_127_0)
local var_127_0 = config.misc.autostrafer
if not var_127_0 then
return
end
local var_127_1 = var_127_0:GetValue():Get()
if not var_127_1 then
return
end
var_127_1:SetRaw(arg_127_0)
var_127_0:GetValue():Set(var_127_1)
end
events.createMove:Add(function(arg_128_0)
if cb_height_advantage:GetValue():Get() then
local var_128_0 = game.globalVars.m_flRealTime
config.misc.duck_peek_control:SetValue(true)
if config.rage.aimbot and not aimbot_changed then
saved_aimbot = config.rage.aimbot:GetValue():Get()
config.rage.aimbot:SetValue(true)
aimbot_changed = true
end
if config.misc.jumpbug and not jumpbug_changed then
saved_jumpbug = config.misc.jumpbug:GetValue():Get()
config.misc.jumpbug:SetValue(true)
jumpbug_changed = true
end
if config.misc.autostrafer and not auto_changed then
saved_autostrafer = config.misc.autostrafer:GetValue():Get():GetRaw()
set_autostrafer(110)
auto_changed = true
end
if last_activation_time < 0 then
last_activation_time = var_128_0
elseif var_128_0 - last_activation_time >= 0.2 then
if not jump_started then
arg_128_0:SetButton(InputBitMask_t.IN_JUMP)
jump_started = true
else
jump_started = false
end
end
else
last_activation_time = -1
jump_started = false
config.misc.duck_peek_control:SetValue(false)
if jumpbug_changed and saved_jumpbug then
config.misc.jumpbug:SetValue(saved_jumpbug)
jumpbug_changed = false
saved_jumpbug = nil
end
if auto_changed and saved_autostrafer then
set_autostrafer(saved_autostrafer)
auto_changed = false
saved_autostrafer = nil
end
if aimbot_changed and saved_aimbot then
config.rage.aimbot:SetValue(saved_aimbot)
aimbot_changed = false
saved_aimbot = nil
end
end
end)
slot_0_4_0 = nil
last_auto_apply_time = 0
value_map = {
-1,
nil,
nil,
0,
nil,
nil,
nil,
1,
[128] = 5,
[16] = 2,
[32] = 3,
[64] = 4
}
function get_ping_net()
local var_129_0 = game.engine:GetNetChan()
if not var_129_0 or not var_129_0.GetLatency then
return 0
end
local var_129_1 = var_129_0:GetLatency()
return var_129_1 and math.floor(var_129_1 * 1000 + 0.5) or 0
end
function auto_values(arg_130_0)
local var_130_0 = arg_130_0 < 30 and 0 or arg_130_0 < 50 and 1 or arg_130_0 < 70 and 2 or arg_130_0 < 90 and 3 or arg_130_0 < 110 and 4 or 5
local var_130_1 = arg_130_0 < 30 and 1 or arg_130_0 < 70 and 2 or arg_130_0 < 90 and 3 or arg_130_0 < 110 and 4 or 5
return var_130_0, var_130_1
end
events.presentQueue:Add(function()
local var_131_0 = game.globalVars.m_flRealTime
local var_131_1 = cbx_network_mode:GetValue():Get():GetRaw()
if var_131_1 == 1 then
if slot_0_4_0 ~= 1 then
game.engine:ClientCmd("cl_net_buffer_ticks_use_interp false")
slot_0_4_0 = 1
end
return
end
local var_131_2 = var_131_0 - last_auto_apply_time >= 10
local var_131_3 = get_ping_net()
local var_131_4
local var_131_5
local var_131_6
if var_131_1 == 2 and var_131_2 then
var_131_4, var_131_6 = auto_values(var_131_3)
var_131_5 = var_131_4
last_auto_apply_time = var_131_0
else
var_131_4 = value_map[var_131_1]
var_131_5 = var_131_4
var_131_6 = var_131_4
end
game.engine:ClientCmd("cl_net_buffer_ticks_use_interp true")
if var_131_1 ~= slot_0_4_0 or var_131_1 == 2 and var_131_2 then
slot_0_4_0 = var_131_1
if var_131_4 then
game.engine:ClientCmd("cl_net_buffer_ticks " .. var_131_4)
end
if var_131_5 then
game.engine:ClientCmd("cl_tickpacket_desired_queuelength " .. var_131_5)
end
if var_131_6 then
game.engine:ClientCmd("cl_interp_ratio " .. var_131_6)
end
end
end)
grenade_throw_time = nil
grenade_draw_time = -1
last_weapon_id = nil
pending_left = false
pending_right = false
pending_release_left = false
pending_release_right = false
auto_state = nil
auto_tick = 0
GRENADE_BLOCK_TIME = 1
mouse = {
right = false,
left = false
}
function reset()
grenade_draw_time = -1
pending_left = false
pending_right = false
pending_release_left = false
pending_release_right = false
auto_state = nil
auto_tick = 0
end
events.input:Add(function(arg_133_0)
if not cb_fast_grenade:GetValue():Get() then
return
end
if arg_133_0 == 513 then
mouse.left = true
elseif arg_133_0 == 514 then
mouse.left = false
if grenade_draw_time ~= -1 then
pending_release_left = true
end
elseif arg_133_0 == 516 then
mouse.right = true
elseif arg_133_0 == 517 then
mouse.right = false
if grenade_draw_time ~= -1 then
pending_release_right = true
end
end
end)
events.createMove:Add(function(arg_134_0)
if not game.engine:InGame() or not game.engine:IsConnected() then
return
end
if not cb_fast_grenade:GetValue():Get() then
return
end
local var_134_0 = entities.GetLocalPawn()
if not var_134_0 then
return
end
local var_134_1 = var_134_0:GetActiveWeapon()
if not var_134_1 then
return
end
local var_134_2 = var_134_1:GetDefIndex()
local var_134_3 = game.globalVars.m_flRealTime
if var_134_2 ~= last_weapon_id then
reset()
last_weapon_id = var_134_2
end
if not is_grenade(var_134_2) then
reset()
return
end
if grenade_draw_time == -1 then
grenade_draw_time = var_134_3
end
if var_134_3 - grenade_draw_time < GRENADE_BLOCK_TIME then
arg_134_0:RemoveButton(InputBitMask_t.IN_ATTACK)
arg_134_0:RemoveButton(InputBitMask_t.IN_ATTACK2)
if mouse.left then
pending_left = true
end
if mouse.right then
pending_right = true
end
return
end
if auto_state == nil then
if pending_release_left then
auto_state = "throw_left"
auto_tick = 0
pending_release_left = false
elseif pending_release_right then
auto_state = "throw_right"
auto_tick = 0
pending_release_right = false
elseif pending_left then
auto_state = "throw_left"
auto_tick = 0
pending_left = false
elseif pending_right then
auto_state = "throw_right"
auto_tick = 0
pending_right = false
end
end
if auto_state == "throw_left" then
arg_134_0:SetButton(InputBitMask_t.IN_ATTACK)
if auto_tick == 0 then
grenade_throw_time = game.globalVars.m_flRealTime
end
auto_tick = auto_tick + 1
if auto_tick > 2 then
auto_state = "swap"
auto_tick = 0
end
elseif auto_state == "throw_right" then
arg_134_0:SetButton(InputBitMask_t.IN_ATTACK2)
if auto_tick == 0 then
grenade_throw_time = game.globalVars.m_flRealTime
end
auto_tick = auto_tick + 1
if auto_tick > 2 then
auto_state = "swap"
auto_tick = 0
end
elseif auto_state == "swap" then
arg_134_0:RemoveButton(InputBitMask_t.IN_ATTACK)
arg_134_0:RemoveButton(InputBitMask_t.IN_ATTACK2)
auto_tick = auto_tick + 1
if auto_tick > 1 then
game.engine:ClientCmd("slot2;slot1")
reset()
end
end
end)
keys = {
"w",
"a",
"s",
"d"
}
key_codes = {
w = KEY_W,
a = KEY_A,
s = KEY_S,
d = KEY_D
}
last_direction = {
w = false,
s = false,
a = false,
d = false
}
last_key_release_time = {
w = 0,
s = 0,
a = 0,
d = 0
}
saved_slowwalk_speed = nil
active_slowwalk_controller = nil
slowwalk_start_time = nil
last_opposite_press_time = 0
last_ground_time = 0
just_entered_air = false
was_in_air = false
slowwalk_setting = gui.ctx:Find("misc>movement>slowwalk")
slowwalk_speed_node = gui.ctx:Find("misc>movement>slowwalk speed")
function copy_direction_state(arg_135_0)
local var_135_0 = {}
for iter_135_0, iter_135_1 in ipairs(keys) do
var_135_0[iter_135_1] = arg_135_0[iter_135_1]
end
return var_135_0
end
function is_key_active_with_delay(arg_136_0, arg_136_1, arg_136_2)
return arg_136_0 or arg_136_1 - last_key_release_time[arg_136_2] <= 0.2
end
function is_opposite_key_combo_with_delay(arg_137_0, arg_137_1, arg_137_2, arg_137_3, arg_137_4)
local var_137_0 = is_key_active_with_delay(arg_137_0[arg_137_3], arg_137_2, arg_137_3)
local var_137_1 = is_key_active_with_delay(arg_137_0[arg_137_4], arg_137_2, arg_137_4)
local var_137_2 = is_key_active_with_delay(arg_137_1[arg_137_3], arg_137_2, arg_137_3)
local var_137_3 = is_key_active_with_delay(arg_137_1[arg_137_4], arg_137_2, arg_137_4)
return var_137_0 and not var_137_1 and var_137_2 and var_137_3 or not var_137_0 and var_137_1 and var_137_2 and var_137_3
end
function count_active_keys(arg_138_0, arg_138_1)
local var_138_0 = 0
for iter_138_0, iter_138_1 in ipairs(keys) do
if is_key_active_with_delay(arg_138_0[iter_138_1], arg_138_1, iter_138_1) then
var_138_0 = var_138_0 + 1
end
end
return var_138_0
end
function is_single_key_event(arg_139_0, arg_139_1, arg_139_2, arg_139_3)
if arg_139_3 == "press" then
return not arg_139_0[arg_139_2] and arg_139_1[arg_139_2]
end
if arg_139_3 == "release" then
return arg_139_0[arg_139_2] and not arg_139_1[arg_139_2]
end
return false
end
function no_keys_pressed_except(arg_140_0, arg_140_1)
for iter_140_0, iter_140_1 in ipairs(keys) do
if iter_140_1 ~= arg_140_1 and arg_140_0[iter_140_1] then
return false
end
end
return true
end
function save_slowwalk_speed()
if not saved_slowwalk_speed then
saved_slowwalk_speed = slowwalk_speed_node:Get()
end
end
function restore_slowwalk_speed()
if saved_slowwalk_speed then
slowwalk_speed_node:GetValue():Set(saved_slowwalk_speed)
saved_slowwalk_speed = nil
end
end
function update_slowwalk()
if active_slowwalk_controller then
slowwalk_setting:SetValue(true)
else
slowwalk_setting:SetValue(false)
restore_slowwalk_speed()
end
end
function is_moving()
local var_144_0 = gui.input
for iter_144_0, iter_144_1 in ipairs(keys) do
if var_144_0:IsKeyDown(key_codes[iter_144_1]) then
return true
end
end
return false
end
function is_only_w_pressed()
local var_145_0 = gui.input
return var_145_0:IsKeyDown(KEY_W) and not var_145_0:IsKeyDown(KEY_A) and not var_145_0:IsKeyDown(KEY_S) and not var_145_0:IsKeyDown(KEY_D)
end
function is_holding_grenade()
local var_146_0 = entities.GetLocalPawn()
if not var_146_0 or not var_146_0:IsAlive() then
return false
end
local var_146_1 = var_146_0:GetActiveWeapon()
return var_146_1 and var_146_1:GetType() == CSWeaponType.GRENADE
end
function get_grenade_delay(arg_147_0)
if arg_147_0 == 2 then
return 0.1
end
if arg_147_0 == 4 then
return 0.15
end
return 0.2
end
events.presentQueue:Add(function()
if not slowwalk_setting or not slowwalk_speed_node then
return
end
slot_148_0_0 = entities.GetLocalPawn()
slot_148_1_0 = game.global_vars.real_time
if not slot_148_0_0 or not slot_148_0_0:IsAlive() then
active_slowwalk_controller = nil
restore_slowwalk_speed()
update_slowwalk()
return
end
slot_148_2_0 = cb_autostrafer:GetValue():Get()
slot_148_3_0 = cb_fast_stop_in_air:GetValue():Get()
slot_148_4_0 = cbx_grenade_fix:GetValue():Get():GetRaw() ~= 1
if not slot_148_2_0 and not slot_148_3_0 and not slot_148_4_0 then
active_slowwalk_controller = nil
restore_slowwalk_speed()
update_slowwalk()
return
end
slot_148_5_0 = gui.input
slot_148_6_0 = {}
for iter_148_0, iter_148_1 in ipairs(keys) do
slot_148_6_0[iter_148_1] = slot_148_5_0:IsKeyDown(key_codes[iter_148_1])
if last_direction[iter_148_1] and not slot_148_6_0[iter_148_1] then
last_key_release_time[iter_148_1] = slot_148_1_0
end
end
slot_148_7_0 = slot_148_0_0:GetAbsVelocity()
slot_148_8_0 = math.abs(slot_148_7_0.z) > 0.1
if slot_148_8_0 and not was_in_air then
just_entered_air = true
end
if just_entered_air and slot_148_8_0 then
just_entered_air = false
end
was_in_air = slot_148_8_0
slot_148_9_0 = false
if slot_148_2_0 and not just_entered_air and slot_148_1_0 - last_ground_time > 0.1 then
if (is_opposite_key_combo_with_delay(last_direction, slot_148_6_0, slot_148_1_0, "w", "s") or is_opposite_key_combo_with_delay(last_direction, slot_148_6_0, slot_148_1_0, "a", "d")) and count_active_keys(slot_148_6_0, slot_148_1_0) == 2 and slot_148_1_0 - last_opposite_press_time >= 0.3 then
slot_148_9_0 = true
last_opposite_press_time = slot_148_1_0
else
slot_148_11_0 = is_single_key_event(last_direction, slot_148_6_0, "s", "release")
slot_148_12_0 = is_single_key_event(last_direction, slot_148_6_0, "s", "press")
slot_148_13_0 = no_keys_pressed_except(slot_148_6_0, nil)
slot_148_14_0 = no_keys_pressed_except(last_direction, nil)
if (slot_148_11_0 and not is_key_active_with_delay(slot_148_6_0.w, slot_148_1_0, "w") and slot_148_13_0 or slot_148_12_0 and slot_148_14_0 and no_keys_pressed_except(slot_148_6_0, "s")) and slot_148_1_0 - last_opposite_press_time >= 0.3 then
slot_148_9_0 = true
last_opposite_press_time = slot_148_1_0
end
end
end
if slot_148_9_0 then
save_slowwalk_speed()
slowwalk_speed_node:GetValue():Set(1)
active_slowwalk_controller = "autostrafer"
slowwalk_start_time = slot_148_1_0 + 0.04
end
if active_slowwalk_controller == "autostrafer" and slowwalk_start_time and slot_148_1_0 >= slowwalk_start_time then
active_slowwalk_controller = nil
slowwalk_start_time = nil
restore_slowwalk_speed()
end
if slot_148_3_0 then
slot_148_10_1 = is_moving()
if slot_148_8_0 and not slot_148_10_1 then
if active_slowwalk_controller ~= "autostrafer" then
save_slowwalk_speed()
slowwalk_speed_node:GetValue():Set(1)
active_slowwalk_controller = "air"
end
elseif active_slowwalk_controller == "air" then
active_slowwalk_controller = nil
restore_slowwalk_speed()
end
elseif active_slowwalk_controller == "air" then
active_slowwalk_controller = nil
restore_slowwalk_speed()
end
if slot_148_4_0 and game.engine:InGame() and game.engine:IsConnected() then
slot_148_10_0 = game.globalVars.m_flRealTime
if grenade_throw_time and slot_148_10_0 - grenade_throw_time < 0.01 and is_holding_grenade() and not is_only_w_pressed() and active_slowwalk_controller ~= "autostrafer" then
save_slowwalk_speed()
slowwalk_speed_node:GetValue():Set(1)
active_slowwalk_controller = "grenade"
slowwalk_start_time = slot_148_10_0
end
if slowwalk_start_time and slot_148_10_0 - slowwalk_start_time >= get_grenade_delay(cbx_grenade_fix:GetValue():Get():GetRaw()) and active_slowwalk_controller == "grenade" then
active_slowwalk_controller = nil
slowwalk_start_time = nil
restore_slowwalk_speed()
end
elseif active_slowwalk_controller == "grenade" then
active_slowwalk_controller = nil
restore_slowwalk_speed()
end
if not slot_148_8_0 then
last_ground_time = slot_148_1_0
end
update_slowwalk()
last_direction = copy_direction_state(slot_148_6_0)
end)
sounds_list = {
"agpa1",
"beep1",
"bubble",
"chime",
"cookie",
"copperbell",
"cute",
"dsr-1",
"light_hit",
"mcbow",
"minecrafthit_placeholder",
"neverlose",
"primordial",
"rust_headshot",
"smw_stomp"
}
sound_path_cache = {}
last_preview = {
hit = nil,
kill = nil
}
function bit_to_index(arg_149_0)
if arg_149_0 < 2 then
return 1
end
local var_149_0 = 0
while arg_149_0 > 1 do
arg_149_0 = math.floor(arg_149_0 / 2)
var_149_0 = var_149_0 + 1
end
return var_149_0
end
function get_minecraft_hit_sound()
return "minecrafthit" .. math.random(1, 3) .. "_hit"
end
function get_hit_volume()
return sl_volume_hit:GetValue():Get() / 500
end
function get_kill_volume()
return sl_volume_kill:GetValue():Get() / 500
end
function get_sound_data(arg_153_0)
if arg_153_0 == 1 then
return nil
end
local var_153_0 = bit_to_index(arg_153_0)
if var_153_0 < 1 or var_153_0 > #sounds_list then
var_153_0 = 1
end
local var_153_1 = sounds_list[var_153_0]
if var_153_1 == "minecrafthit_placeholder" then
var_153_1 = get_minecraft_hit_sound()
end
if not sound_path_cache[var_153_1] then
sound_path_cache[var_153_1] = resource_path .. "/sounds/" .. var_153_1 .. ".vsnd_c"
end
return sound_path_cache[var_153_1]
end
function play_sound(arg_154_0, arg_154_1)
local var_154_0 = get_sound_data(arg_154_0)
if var_154_0 then
local var_154_1 = arg_154_1 and get_kill_volume() or get_hit_volume()
game.PlaySound(var_154_0, var_154_1)
end
end
events.event:Add(function(arg_155_0)
if not game.engine:InGame() or not game.engine:IsConnected() then
return
end
if arg_155_0:get_name() ~= "player_hurt" then
return
end
local var_155_0 = entities.GetLocalController()
if not var_155_0 then
return
end
if arg_155_0:GetController("attacker") ~= var_155_0 then
return
end
local var_155_1 = arg_155_0:GetController("userid")
if not var_155_1 or not var_155_1:IsEnemy() then
return
end
local var_155_2 = arg_155_0:GetInt("health")
if var_155_2 and var_155_2 <= 0 then
local var_155_3 = cbx_killsounds:GetValue():Get():GetRaw()
if var_155_3 ~= 1 then
play_sound(var_155_3, true)
end
elseif hit_flag ~= 1 then
local var_155_4 = cbx_hitsounds:GetValue():Get():GetRaw()
play_sound(var_155_4, false)
end
end)
events.presentQueue:Add(function()
local var_156_0 = cbx_killsounds:GetValue():Get():GetRaw()
if var_156_0 ~= 1 and var_156_0 ~= last_preview.kill then
last_preview.kill = var_156_0
play_sound(var_156_0, true)
end
local var_156_1 = cbx_hitsounds:GetValue():Get():GetRaw()
if var_156_1 ~= 1 and var_156_1 ~= last_preview.hit then
last_preview.hit = var_156_1
play_sound(var_156_1, false)
end
end)
function vec(arg_157_0, arg_157_1, arg_157_2)
return {
x = arg_157_0,
y = arg_157_1,
z = arg_157_2
}
end
function vec_add(arg_158_0, arg_158_1)
return {
x = arg_158_0.x + arg_158_1.x,
y = arg_158_0.y + arg_158_1.y,
z = arg_158_0.z + arg_158_1.z
}
end
function vec_sub(arg_159_0, arg_159_1)
return {
x = arg_159_0.x - arg_159_1.x,
y = arg_159_0.y - arg_159_1.y,
z = arg_159_0.z - arg_159_1.z
}
end
function vec_mul_scalar(arg_160_0, arg_160_1)
return {
x = arg_160_0.x * arg_160_1,
y = arg_160_0.y * arg_160_1,
z = arg_160_0.z * arg_160_1
}
end
function vec_length(arg_161_0)
return math.sqrt(arg_161_0.x * arg_161_0.x + arg_161_0.y * arg_161_0.y + arg_161_0.z * arg_161_0.z)
end
function vec_dot(arg_162_0, arg_162_1)
return arg_162_0.x * arg_162_1.x + arg_162_0.y * arg_162_1.y + arg_162_0.z * arg_162_1.z
end
function vec_dist(arg_163_0, arg_163_1)
return vec_length(vec_sub(arg_163_0, arg_163_1))
end
nearest_teammate_screen_pos = nil
local_player_screen_pos = nil
events.createMove:Add(function(arg_164_0)
if not cb_blockbot:GetValue():Get() then
nearest_teammate_screen_pos, local_player_screen_pos = nil
return
end
local var_164_0 = entities.GetLocalPawn()
if not var_164_0 or not var_164_0:IsAlive() then
nearest_teammate_screen_pos, local_player_screen_pos = nil
return
end
local var_164_1 = var_164_0:GetEyePos()
local var_164_2 = game.input:GetViewAngles()
local var_164_3 = arg_164_0:GetForwardMove()
local var_164_4 = arg_164_0:GetLeftMove()
local var_164_5
local var_164_6 = math.huge
entities.players:ForEach(function(arg_165_0)
local var_165_0 = arg_165_0.entity:ToPlayerPawn()
if var_165_0 and var_165_0:IsAlive() and var_165_0 ~= var_164_0 and not var_165_0:IsEnemy() then
local var_165_1 = vec_dist(var_164_1, var_165_0:GetEyePos())
if var_165_1 < var_164_6 then
var_164_6, var_164_5 = var_165_1, var_165_0
end
end
end)
if not var_164_5 then
nearest_teammate_screen_pos, local_player_screen_pos = nil
return
end
local var_164_7 = var_164_5:GetEyePos()
local_player_screen_pos = math.WorldToScreen(var_164_1)
nearest_teammate_screen_pos = math.WorldToScreen(var_164_7)
local var_164_8 = var_164_1.z - var_164_7.z
if var_164_8 >= 18 and var_164_8 <= 54 then
arg_164_0:SetButton(InputBitMask_t.IN_JUMP)
if cb_blockbot_crouch:GetValue():Get() then
arg_164_0:SetButton(InputBitMask_t.IN_DUCK)
end
end
local var_164_9 = vec_sub(var_164_7, var_164_1)
arg_164_0:SetViewangles(var_164_2)
arg_164_0:SetForwardMove(var_164_3)
arg_164_0:SetLeftMove(var_164_4)
if var_164_3 ~= 0 or var_164_4 ~= 0 then
arg_164_0:RotateMovement(var_164_2.y)
end
arg_164_0:SetForwardMove(0.5)
arg_164_0:SetLeftMove(0)
arg_164_0:RotateMovement(math.deg(math.atan2(var_164_9.y, var_164_9.x)))
game.input:SetViewAngles(var_164_2)
end)
events.presentQueue:Add(function()
if not game.engine:InGame() and game.engine:IsConnected() then
return
end
if not cb_blockbot:GetValue():Get() or not nearest_teammate_screen_pos or not local_player_screen_pos then
return
end
local var_166_0 = entities.GetLocalPawn()
if not var_166_0 or not var_166_0:IsAlive() then
return
end
local var_166_1 = draw.surface
var_166_1.g:SetTexture(nil)
local var_166_2 = draw.Vec2(local_player_screen_pos.x, local_player_screen_pos.y)
local var_166_3 = draw.Vec2(nearest_teammate_screen_pos.x, nearest_teammate_screen_pos.y)
local var_166_4 = draw.Vec2((var_166_2.x + var_166_3.x) * 0.5, (var_166_2.y + var_166_3.y) * 0.5)
local var_166_5 = draw.Color(255, 255, 255, 150)
local var_166_6 = draw.Color(255, 255, 255, 0)
var_166_1:AddLineMulticolor(var_166_2, var_166_4, var_166_5, var_166_6, 1)
var_166_1:AddLineMulticolor(var_166_4, var_166_3, var_166_6, var_166_5, 1)
end)
function vec_normalize(arg_167_0)
local var_167_0 = vec_length(arg_167_0)
if var_167_0 > 0 then
return {
x = arg_167_0.x / var_167_0,
y = arg_167_0.y / var_167_0,
z = arg_167_0.z / var_167_0
}
end
return {
x = 0,
y = 0,
z = 0
}
end
push_direction = nil
is_pushing = false
events.createMove:Add(function(arg_168_0)
if not cb_avoid_collisions:GetValue():Get() then
return
end
if cb_blockbot:GetValue():Get() then
return
end
if is_on_ladder or is_mouse_down() or not config.anti_aim.anti_aim:GetValue():Get() or arg_168_0:GetButton(InputBitMask_t.IN_USE) then
return
end
slot_168_1_0 = entities.GetLocalPawn()
if not slot_168_1_0 or not slot_168_1_0:IsAlive() then
push_direction = nil
is_pushing = false
return
end
slot_168_2_0 = slot_168_1_0:GetAbsOrigin()
if not slot_168_2_0 or type(slot_168_2_0) ~= "userdata" then
return
end
slot_168_3_0 = slot_168_1_0:GetAbsVelocity()
slot_168_4_0 = math.abs(slot_168_3_0.z) > 0.1
slot_168_5_0 = sl_avoid_collisions_air:GetValue():Get()
if not slot_168_4_0 then
slot_168_5_0 = sl_avoid_collisions_ground:GetValue():Get()
end
slot_168_6_0 = 30
slot_168_7_0 = game.input:GetViewAngles()
slot_168_8_0 = arg_168_0:GetForwardMove()
slot_168_9_0 = arg_168_0:GetLeftMove()
if fast_angles_yaw and fast_angles_active then
slot_168_7_0 = Vector(slot_168_7_0.x, fast_angles_yaw, slot_168_7_0.z)
end
slot_168_10_0 = Vector(math.cos(math.rad(slot_168_7_0.y)), math.sin(math.rad(slot_168_7_0.y)), 0)
slot_168_11_0 = {
x = 0,
y = 0,
z = 0
}
if slot_168_8_0 ~= 0 or slot_168_9_0 ~= 0 then
slot_168_12_1 = math.rad(slot_168_7_0.y)
slot_168_13_1 = {
x = math.cos(slot_168_12_1),
y = math.sin(slot_168_12_1)
}
slot_168_14_1 = {
x = math.cos(slot_168_12_1 + math.pi / 2),
y = math.sin(slot_168_12_1 + math.pi / 2)
}
slot_168_11_0.x = slot_168_13_1.x * slot_168_8_0 + slot_168_14_1.x * slot_168_9_0
slot_168_11_0.y = slot_168_13_1.y * slot_168_8_0 + slot_168_14_1.y * slot_168_9_0
slot_168_15_1 = math.sqrt(slot_168_11_0.x * slot_168_11_0.x + slot_168_11_0.y * slot_168_11_0.y)
if slot_168_15_1 > 0 then
slot_168_11_0.x = slot_168_11_0.x / slot_168_15_1
slot_168_11_0.y = slot_168_11_0.y / slot_168_15_1
end
end
slot_168_12_0 = {
x = 0,
y = 0,
z = 0
}
slot_168_13_0 = 0
slot_168_14_0 = 1
for iter_168_0 = 1, 7 do
slot_168_19_1 = iter_168_0 * 45
slot_168_20_1 = math.rad(slot_168_19_1)
slot_168_21_0 = Vector(slot_168_10_0.x * math.cos(slot_168_20_1) - slot_168_10_0.y * math.sin(slot_168_20_1), slot_168_10_0.x * math.sin(slot_168_20_1) + slot_168_10_0.y * math.cos(slot_168_20_1), 0)
slot_168_22_0 = math.sqrt(slot_168_21_0.x * slot_168_21_0.x + slot_168_21_0.y * slot_168_21_0.y)
if slot_168_22_0 > 0 then
slot_168_21_0.x = slot_168_21_0.x / slot_168_22_0
slot_168_21_0.y = slot_168_21_0.y / slot_168_22_0
end
slot_168_23_0 = Vector(slot_168_2_0.x + slot_168_21_0.x * slot_168_5_0, slot_168_2_0.y + slot_168_21_0.y * slot_168_5_0, slot_168_2_0.z + slot_168_6_0)
slot_168_24_0 = Vector(slot_168_2_0.x, slot_168_2_0.y, slot_168_2_0.z + slot_168_6_0)
slot_168_25_0 = Ray_t()
slot_168_26_0 = game.physicsQueryInterface:TraceRay(slot_168_25_0, slot_168_24_0, slot_168_23_0, false)
if slot_168_26_0 and slot_168_26_0.m_flFraction < 1 and slot_168_26_0:DidHitWorld() then
slot_168_13_0 = slot_168_13_0 + 1
slot_168_14_0 = math.min(slot_168_14_0, slot_168_26_0.m_flFraction)
slot_168_27_0 = {
z = 0,
x = -slot_168_21_0.x,
y = -slot_168_21_0.y
}
slot_168_28_0 = (1 - slot_168_26_0.m_flFraction) * 2
slot_168_12_0.x = slot_168_12_0.x + slot_168_27_0.x * slot_168_28_0
slot_168_12_0.y = slot_168_12_0.y + slot_168_27_0.y * slot_168_28_0
end
end
if slot_168_13_0 > 0 then
if vec_length(slot_168_12_0) > 0 then
slot_168_12_0 = vec_normalize(slot_168_12_0)
end
is_pushing = true
push_direction = slot_168_12_0
if vec_length(slot_168_11_0) > 0 then
slot_168_15_0 = slot_168_14_0 * 0.8
slot_168_16_1 = 1 - slot_168_15_0
slot_168_17_2 = {
z = 0,
x = slot_168_11_0.x * slot_168_15_0 + slot_168_12_0.x * slot_168_16_1,
y = slot_168_11_0.y * slot_168_15_0 + slot_168_12_0.y * slot_168_16_1
}
slot_168_17_1 = vec_normalize(slot_168_17_2)
slot_168_19_0 = math.atan2(slot_168_17_1.y, slot_168_17_1.x) - math.rad(slot_168_7_0.y)
while slot_168_19_0 > math.pi do
slot_168_19_0 = slot_168_19_0 - 2 * math.pi
end
while slot_168_19_0 < -math.pi do
slot_168_19_0 = slot_168_19_0 + 2 * math.pi
end
slot_168_20_0 = slot_168_14_0 * 0.8 + 0.2
arg_168_0:SetForwardMove(math.cos(slot_168_19_0) * slot_168_20_0)
arg_168_0:SetLeftMove(math.sin(slot_168_19_0) * slot_168_20_0)
else
slot_168_16_0 = math.atan2(slot_168_12_0.y, slot_168_12_0.x) - math.rad(slot_168_7_0.y)
while slot_168_16_0 > math.pi do
slot_168_16_0 = slot_168_16_0 - 2 * math.pi
end
while slot_168_16_0 < -math.pi do
slot_168_16_0 = slot_168_16_0 + 2 * math.pi
end
slot_168_17_0 = slot_168_14_0 * 0.5 + 0.5
arg_168_0:SetForwardMove(math.cos(slot_168_16_0) * slot_168_17_0)
arg_168_0:SetLeftMove(math.sin(slot_168_16_0) * slot_168_17_0)
end
else
arg_168_0:SetForwardMove(slot_168_8_0)
arg_168_0:SetLeftMove(slot_168_9_0)
is_pushing = false
push_direction = nil
end
if slot_168_8_0 ~= 0 or slot_168_9_0 ~= 0 or is_pushing then
arg_168_0:RotateMovement(slot_168_7_0.y)
end
end)
events.createMove:Add(function(arg_169_0)
if not cb_crouch_in_air:GetValue():Get() then
return
end
if cb_only_when_jump:GetValue():Get() then
if not arg_169_0:GetButton(InputBitMask_t.IN_JUMP) then
return
end
else
local var_169_0 = entities.GetLocalPawn():GetAbsVelocity().z
if math.abs(var_169_0) <= 0.1 then
return
end
end
arg_169_0:SetButton(InputBitMask_t.IN_DUCK)
end)
should_drop_items = false
drop_start_time = 0
DROP_DURATION = 5
SLOTS = {
1,
2,
3,
4,
5
}
DROP_COMMANDS = {}
for iter_0_0 = 1, #SLOTS do
DROP_COMMANDS[iter_0_0] = "slot" .. SLOTS[iter_0_0] .. ";drop"
end
mods.events:AddListener("cs_intermission")
mods.events:AddListener("round_end")
events.event:Add(function(arg_170_0)
local var_170_0 = arg_170_0:GetName()
if var_170_0 == "cs_intermission" and cb_auto_disconnect:GetValue():Get() then
game.engine:ClientCmd("disconnect")
end
if var_170_0 == "cs_intermission" and cb_auto_drop_items:GetValue():Get() then
should_drop_items = true
drop_start_time = game.globalVars.m_flRealTime
end
end)
events.presentQueue:Add(function()
if not should_drop_items then
return
end
if game.globalVars.m_flRealTime - drop_start_time >= DROP_DURATION then
should_drop_items = false
return
end
local var_171_0 = {}
for iter_171_0 = 1, #DROP_COMMANDS do
var_171_0[iter_171_0] = DROP_COMMANDS[iter_171_0]
end
game.engine:ClientCmd(table.concat(var_171_0, ";"))
end)
console_flags = {
"VProf",
"LOADING",
"Assert",
"Console",
"Developer",
"DeveloperConsole",
"DeveloperVerbose",
"Symbols",
"ToolsStallMonitor",
"Stack unwinding",
"Entity System",
"Entity Load Unserialize",
"Pulse",
"VScript",
"VScriptDbg",
"Demo",
"InstantReplay",
"RCon",
"Steam",
"Shooting",
"Server",
"SpawnGroup",
"SignonState",
"Movie",
"ServerLog",
"stringtables",
"HLTV Broadcast",
"HLTV Server",
"VR",
"InputService",
"NetworkClientService",
"NetworkP2PService",
"NetworkServerService",
"NetworkService",
"RenderService",
"ScreenShot",
"SplitScreen",
"BitBuf Error",
"DemoFile",
"Client",
"CommandLine",
"EngineServiceManager",
"GameEventSystem",
"HostStateManager",
"CL CommandQueue",
"Filesystem",
"InputSystem",
"IME",
"Localization System",
"System",
"Vfx",
"D3D",
"RenderSystem",
"ResourceSystem",
"SchemaSystem",
"TypeManager",
"MaterialSystem",
"PostProcessing",
"modellib",
"Physics",
"MeshSystem",
"WorldRenderer",
"Networking",
"Networking Reliable",
"NetStreamConn",
"SteamNetSockets",
"AnimationGraph",
"Animation 2",
"BoneSetup",
"AnimationSystem: IK",
"ParticlesLib",
"AnimationSystem",
"AnimResource",
"Interpolation",
"DualHull",
"SoundSystemLowLevel",
"VNotify",
"SoundOperatorSystem",
"SoundSystem",
"SndOperators",
"SteamAudio",
"LIGHTBINNER",
"RenderGraph",
"SceneSystem",
"SparceShadowTree",
"SparseShadowTree",
"CharacterDecalSystem",
"ToneMapping",
"VolumetricFog",
"Wind",
"Particles",
"Panorama",
"PanoramaVideoPlayer",
"PanoramaContent",
"PanoramaScript",
"UIMemory",
"V8System",
"cs_script",
"Workshop",
"Breakables",
"BodyGameSystem",
"Host",
"NetSteamConn",
"Prediction",
"BuildSparseShadowTree",
"Decals",
"SoundOpGameSystem",
"VScriptScripts",
"SaveRestore",
"Inventory",
"Destructible Parts",
"SaveRestoreSyncIO",
"Elapsed",
"SaveRestoreIO",
"SaveRestoreIOFiltered",
"ClientMessages",
"GlobalState",
"WebApi",
"Hltv Director",
"SV CommandQueue",
"Command Queue Events",
"Command Queue SAMPLES",
"ScenePrint",
"EmitSound",
"SndEmitterSystem",
"Missions",
"Wearable",
"SteamUnifiedMessages",
"GCClient",
"SOCache",
"NavMesh",
"RESPONSE_RULES",
"BuildCubemaps",
"Entity Dump",
"UserMessages",
"Subtitles and Captions",
"P2P Voice",
"ConfigImport",
"CsIconGenerator",
"CsPortraitWorld",
"UI Map Previews",
"CSGO game instructor",
"Matchmaking",
"RenderPipelineCsgo",
"RenderPipelineCsgoPostHud",
"RESPONSEDOC_LIB",
"SceneFileCache",
"p.missions",
"p.armory",
"p.mainmenu",
"CSGO_MainMenu"
}
prev_clean_console_state = nil
events.presentQueue:Add(function()
local var_172_0 = cb_clean_console:GetValue():Get()
if prev_clean_console_state == nil then
prev_clean_console_state = var_172_0
return
end
if var_172_0 ~= prev_clean_console_state then
local var_172_1 = var_172_0 and "+DoNotEcho" or "-DoNotEcho"
local var_172_2 = {}
for iter_172_0, iter_172_1 in ipairs(console_flags) do
table.insert(var_172_2, "log_flags " .. iter_172_1 .. " " .. var_172_1)
end
game.engine:ClientCmd(table.concat(var_172_2, ";"))
game.engine:ClientCmd(string.format("toggleconsole;clear;echoln Clean Console %s;toggleconsole", var_172_0 and "ON" or "OFF"))
prev_clean_console_state = var_172_0
end
end)
ffi.cdef(" typedef void* HWND;\n typedef int (__stdcall* ShowWindowFn)(HWND hWnd, int nCmdShow);\n typedef bool (__stdcall* SetForegroundWindowFn)(HWND hWnd);\n typedef HWND (__stdcall* FindWindowAFn)(const char* lpClassName, const char* lpWindowName);\n")
user32 = "user32.dll"
FindWindowA = ffi.cast("FindWindowAFn", utils.FindExport(user32, "FindWindowA"))
ShowWindow = ffi.cast("ShowWindowFn", utils.FindExport(user32, "ShowWindow"))
SetForegroundWindow = ffi.cast("SetForegroundWindowFn", utils.FindExport(user32, "SetForegroundWindow"))
SW_RESTORE = 9
window_name = "Counter-Strike 2"
events.event:Add(function(arg_173_0)
if arg_173_0:GetName() == "round_start" and gui.input:IsMouseReleased(gui.MouseButton.LEFT) then
if not cb_focus_cs2:GetValue():Get() then
return
end
local var_173_0 = FindWindowA(nil, window_name)
if tonumber(ffi.cast("intptr_t", var_173_0)) ~= 0 and var_173_0 ~= nil then
ShowWindow(var_173_0, 6)
ShowWindow(var_173_0, 9)
local var_173_1 = SetForegroundWindow(var_173_0)
end
end
end)
afk_state = {
direction = 1,
current_yaw = 0,
last_shoot = 0,
last_update = 0,
was_enabled = false,
in_game = false,
timer = 0,
movement = {
last_time = 0,
stationary_since = 0,
is_stationary = false
},
angles = {
target = nil,
initial = nil
},
state = {
start_time = 0,
name = "idle"
}
}
CONST = {
STATIONARY_CHECK_INTERVAL = 0.1,
YAW_SPEED = 10,
MOVE_AMOUNT = 1,
MOVE_INTERVAL = 0.1,
PITCH_LIMIT = 20,
SHOOT_INTERVAL = 10,
STATIONARY_THRESHOLD = 5,
SHOOT_DURATION = 0.2,
ROTATION_DURATION = 3
}
function generate_random_angles()
return math.vec3(math.random(-CONST.PITCH_LIMIT, CONST.PITCH_LIMIT), math.random(0, 360), 0)
end
function angle_diff(arg_175_0, arg_175_1)
local var_175_0 = (arg_175_1 - arg_175_0) % 360
return var_175_0 > 180 and var_175_0 - 360 or var_175_0
end
function lerp_angle(arg_176_0, arg_176_1, arg_176_2)
return math.vec3(math.min(CONST.PITCH_LIMIT, math.max(-CONST.PITCH_LIMIT, arg_176_0.x + angle_diff(arg_176_0.x, arg_176_1.x) * arg_176_2)), (arg_176_0.y + angle_diff(arg_176_0.y, arg_176_1.y) * arg_176_2) % 360, 0)
end
function is_player_stationary(arg_177_0)
local var_177_0 = game.globalVars.m_flRealTime
if var_177_0 - afk_state.movement.last_time < CONST.STATIONARY_CHECK_INTERVAL then
return afk_state.movement.is_stationary
end
afk_state.movement.last_time = var_177_0
local var_177_1 = arg_177_0:GetAbsVelocity()
if var_177_1.x * var_177_1.x + var_177_1.y * var_177_1.y + var_177_1.z * var_177_1.z < 9 then
if afk_state.movement.stationary_since == 0 then
afk_state.movement.stationary_since = var_177_0
end
afk_state.movement.is_stationary = var_177_0 - afk_state.movement.stationary_since >= CONST.STATIONARY_THRESHOLD or afk_state.in_game
else
afk_state.movement.stationary_since = 0
afk_state.movement.is_stationary = false
end
return afk_state.movement.is_stationary
end
function reset_afk_state()
if afk_state.was_enabled then
game.engine:ClientCmd("-attack")
end
afk_state.state.name = "idle"
afk_state.angles.initial = nil
afk_state.angles.target = nil
afk_state.movement.last_time = 0
afk_state.movement.is_stationary = false
afk_state.movement.stationary_since = 0
afk_state.was_enabled = false
end
events.createMove:Add(function(arg_179_0)
slot_179_1_0 = cb_anti_afk:GetValue():Get()
slot_179_2_0 = entities.GetLocalPawn()
slot_179_3_0 = slot_179_2_0 and slot_179_2_0:IsAlive()
if not slot_179_1_0 or not slot_179_3_0 then
if afk_state.was_enabled then
reset_afk_state()
end
return
end
afk_state.in_game = gui.input:IsMouseReleased(gui.MouseButton.LEFT)
if not is_player_stationary(slot_179_2_0) and not afk_state.in_game then
if afk_state.was_enabled then
reset_afk_state()
end
return
end
if not afk_state.in_game and afk_state.movement.stationary_since + CONST.STATIONARY_THRESHOLD + 0.2 < game.globalVars.m_flRealTime then
reset_afk_state()
return
end
slot_179_5_0 = game.globalVars.m_flRealTime
if slot_179_5_0 <= afk_state.movement.stationary_since + CONST.STATIONARY_THRESHOLD + 0.2 or afk_state.in_game then
if slot_179_5_0 - afk_state.timer >= CONST.MOVE_INTERVAL then
afk_state.direction = -afk_state.direction
afk_state.timer = slot_179_5_0
end
arg_179_0:SetForwardMove(CONST.MOVE_AMOUNT * afk_state.direction)
arg_179_0:SetLeftMove(CONST.MOVE_AMOUNT * afk_state.direction)
else
afk_state.movement.stationary_since = 0
afk_state.movement.is_stationary = false
end
slot_179_7_0 = math.min(slot_179_5_0 - (afk_state.last_update or slot_179_5_0), 0.033)
if not afk_state.was_enabled then
afk_state.state.name = "idle"
afk_state.state.start_time = slot_179_5_0
afk_state.angles.initial = nil
afk_state.angles.target = nil
afk_state.last_shoot = slot_179_5_0
afk_state.current_yaw = game.input:GetViewAngles().y
end
if slot_179_7_0 > 0 then
afk_state.current_yaw = (afk_state.current_yaw + CONST.YAW_SPEED * slot_179_7_0) % 360
end
afk_state.last_update = slot_179_5_0
slot_179_8_0 = slot_179_5_0 - afk_state.state.start_time
if afk_state.state.name == "idle" then
afk_state.angles.initial = game.input:GetViewAngles()
afk_state.angles.target = generate_random_angles()
afk_state.state.name = "rotating"
afk_state.state.start_time = slot_179_5_0
elseif afk_state.state.name == "rotating" then
slot_179_9_1 = math.min(slot_179_8_0 / CONST.ROTATION_DURATION, 1)
if afk_state.angles.initial and afk_state.angles.target then
slot_179_10_1 = lerp_angle(afk_state.angles.initial, afk_state.angles.target, slot_179_9_1)
game.input:SetViewAngles(math.vec3(slot_179_10_1.x, afk_state.current_yaw, 0))
else
slot_179_10_0 = game.input:get_view_angles()
game.input:SetViewAngles(math.vec3(math.min(CONST.PITCH_LIMIT, math.max(-CONST.PITCH_LIMIT, slot_179_10_0.x)), afk_state.current_yaw, 0))
end
if slot_179_5_0 - afk_state.last_shoot >= CONST.SHOOT_INTERVAL then
game.engine:ClientCmd("+attack")
afk_state.last_shoot = slot_179_5_0
afk_state.state.name = "shooting"
afk_state.state.start_time = slot_179_5_0
end
if slot_179_8_0 >= CONST.ROTATION_DURATION then
afk_state.angles.initial = game.input:GetViewAngles()
afk_state.angles.target = generate_random_angles()
afk_state.state.start_time = slot_179_5_0
end
elseif afk_state.state.name == "shooting" then
slot_179_9_0 = game.input:GetViewAngles()
game.input:SetViewAngles(math.vec3(math.min(CONST.PITCH_LIMIT, math.max(-CONST.PITCH_LIMIT, slot_179_9_0.x)), afk_state.current_yaw, 0))
if slot_179_8_0 >= CONST.SHOOT_DURATION then
game.engine:ClientCmd("-attack")
afk_state.state.name = "rotating"
end
end
afk_state.was_enabled = true
end)
text_hs = {
"держи зонтик ☂, тебя обоссали",
"Держи ✈ и лети нахуй !",
"слишком сочный для Djamic.technologies",
"сьебался нахуй таракан усатый",
"мать твою ебал",
"нахуй ты упал иди вставай и на завод",
"не по сезону шуршишь фраер",
"ИЗИ ЧМО ЕБАНОЕ",
"ливай блять не позорься",
"AХАХ ПИДОР УПАЛ С ВАНВЕЯ ХАХАХА ОНЛИ БАИМ В БОДИ ПОТЕЕТ НА ФД АХА",
"АХАХА УЛЕТЕЛ ЧМОШНИК",
"1 МАТЬ ЖАЛЬ",
"тебе права голоса не давали thirdworlder ебаный",
"на завод иди",
"не не он опять упал на конлени",
"вставай заебал , завтра в школу",
"гет гуд гет иди нахуй",
"by SANCHEZj hvh boss",
"ну нет почему он ложится когда я прохожу",
"у тебя ник нейм адео?",
"парень тебе ник придумать?",
"такой тупой :(",
"хватит получать хс ,лучше возьми свою руку и иди дрочи",
"нет нет этот крякер такой смешной",
"1 сын шлюхи",
"1 мать твою ебал",
"преобрети мой кфг клоун",
"об кафель голову разбил?",
"мать твою ебал",
"хуесос дальше адайся ко мне",
"ещё раз позови к себе на бекап",
"не противник",
"ник нейм дориан(",
"iq ?",
"упал = минус мать",
"не пиши мне",
"жаль конечно что против тебя играю, но куда деваться",
"адиничкой упал",
"сынок зачем тебе это ?",
"давно в рот берёшь?",
"мне можно",
"ты меня так заебал , ливни уже",
"ничему жизнь не учит (",
"я не понял, ты такой жирный потомучто дошики каждый день жрешь?",
"братка го я тебе бекап позову",
"толстяк даже пройти спокойно не может"
}
text_body = {
"а у вас походу умирать это семейное)",
"нахуя пидораса убил?",
"чао персик дозревай",
"уважаемый в тюрьме вы будете водолазом",
"говори буду плохо говорить буду сосать, буду плохо сосать буду пересасывать",
"долбаеб иди башмачки в сундучок школьный собирай",
"ботинок ебаный чо слетел",
"братик маме привет передай",
"не противник",
"а ты че клоун???",
"я обоссал тебя (",
"ты че там отлетел то?",
"упал хуета ебаная , но в боди забрал да похуй все равно упал",
"*DEAD* ливай с хвх (",
"до связи башмак",
"нищета глупейшая играть учись",
"опущен сын твари",
"нищий улетел",
"*DEAD* пофикси нищ",
"сразу видно кфг иссуе мб конфиг у меня прикупишь ?",
"животное аддон скачай а то падаешь",
"оттарабанен армянская королева",
"сука не позорься и ливни",
"улетел тапочек ебаный",
"единицей свалился фуфлыжник",
"зачем ты играешь тут безмозглый",
"иди кумыса попей очередняра",
"откисай сочняра",
"АХАХА ЕБАТЬ У ТЕБЯ ЧЕРЕПНАЯ КОРОБКА ПРЯМ КАК [XML-RPC] No-Spread 24/7 | aim_ag_texture_2 ONLY!",
"на мыло и веревку то деньги есть????",
"ИЩИ СЕБЯ НА pornoeb.cc/sochniki",
"свежий кабанчик",
"до связи на подскоке кабанчик",
"скажи маме сухарики купить долбаеб",
"ебать ты красиво на бутылку присел , тебе дать альт ?",
"прости что без смазки)",
"алло это скорая? тут такая ситуация пареню который упал нужна скорая)",
"ало ты мапу лузаешь дура очнись",
"тяжело с кряком????",
"ЕБУЧЕСТЬ ВТОРОГО РАЗРЯДА ВЫДВИЖЕНЕЦ ОТКИС",
"але а противники то где???",
"ты по легиту играешь ?",
"ХУЕПРЫГАЛО ТУСОВОЧНОЕ КУДА ПОЛЕТЕЛО",
"ты куда жертва козьего аборта",
"iq?",
"·٠●•۩۞۩ОтКиСаЙ (ٿ) НуБяРа۩۞۩•●٠·",
"ты то куда лезешь сын фантомного стационарного спец изолированого металлформовочного механизма",
"╭∩╮( ⚆ ʖ ⚆)╭∩╮ ДоПрыГался(ت)ДрУжоЧеК"
}
pizdos_skeet = {
"miss shot due to чит хуевый",
"#skeettop1",
"#skeet",
"skeet=donk#дорогумолодым",
"skeet=donk",
"не бойся смерти бойся встречи с gamesense.матьебал",
"лучше ру пасты",
"пододвинтесь скит ползет",
"SKEET TOP 5 BEST MOMENTO",
"ты скит решил пикнуть??",
"освободить проезд skeet.cc едет",
"да у нас апи лучше",
"missed shot due to neverlose better",
"missed shot due to fatality better",
"missed shot due to midnight",
"missed shot due to ?=skeet",
"лучший бектрек?",
"тапаю",
"honorable mention",
"gamesense 500$",
"скит не миссает он берет в рот",
"скит зол",
"отомстим за кряк",
"ты на чит за 40к полез??",
"это скит детка",
"что такое попасть с gamesense?",
"что такое попасть в gamesense?",
"#ЛУЧШЕ РУПАСТЫ",
"СКЫТ ТОП ЧЫТ",
"kpяka нet",
"СКЫТ НЕ ТОП ЧЫТ",
"скит пмнишь?",
"СКИТ = РАТНИК",
"ЧО НАХУЙ",
"You are banned from this forum.",
"меня забанили в gamesense",
"ЭТОТ СЫН ЕБАНОЙ ШЛЮХИ НАКОНЕЦ-ТО КРЯКНУЛ СКИТ!!!",
"Я не могу зайти в gamesense ((",
"Я не могу зайти в gamesense",
"gamesax",
"gamesense.pub sex with onetap...",
"нищий не звони",
"ловушка виша",
"sir, please show me your UID",
"а вот это понашему по скитерски",
"ты допизделся, спускаю ягодника",
"хахаха нн слит нищий",
"мне похуй у меня скит",
"нахуй ты на вв встал, уйди оттуда пидорас",
"ты кто такой нн без ппхуб премиум го кв дибил",
"123 слит",
"а что звучит скитово",
"хвх дурка",
"я играю на хвх дм",
"no skeet no talk",
"Gamesense для хуесосов",
"ку ннчик)",
"заскамили на инв",
"виш уёбывай из в контакте",
"молчать, нн",
"рот ньюкамер с 20",
"РОТ НЬЮКАМЕР С 20",
"Чел",
"gamesense.su уид или слит",
"а куда звонить? что куда, кв или слит",
"кв или слит",
"кв или слит.",
"здарова ннчик, кв идешь?",
"ало не пиши на ноже",
"виш нейдит",
"купил кряк",
"Resolver лохи Occlusion дуры мы фанаты missed shot due to spread культуры",
"день вантапа",
"missed due to spread",
"бегом на вв",
"1 уебище",
"а ты докажи что ты виш",
"виша нет",
"я убил виша",
"виша не существует",
"эээээ не перди виш едет.....",
"нищий пук скит будет пм",
"прости если тапнул"
}
pizdos_neverlose = {
"бездарь ебаный",
"надеюсь понятно обьяснил для твоих 2 выебаних извилин",
"ебало сколлапсируй тихонечко и не выпёздывай ничего в чат",
"когда Заботлони от крокодила откачают?",
"не смешно",
"не смеемся",
"не смешно, не смеемся",
"это даже не уровень ппхуда",
"ебало ньюкамчика на фулл ебале импанджинировали",
"waiting for nl update",
"идёт 3 день без neverlose, я сломал все пальцы на руках",
"на третий день без неверлуза, я на столько познал всю тяжесть жизни",
"прошло 72 часа без neverlose. Я снова сломал себе руку",
"кфг настрой нл лучше скита",
"нл лучше скита",
"спрей от пастоюзеров",
"понял, мать шлюха",
"Missed shot due to resolver",
"Вы не понимаете это другое",
"ПИДАРАС НА КОДЕРЕ",
"Здравствуйте, благодарим за фидбек!",
"фейспалм чел ты в муте",
"кфг от кислоты",
"гениально, просто гениально, иди нахуй",
"купи подписку неверлуса!",
"не верю, что такой крутой чит может существовать в 2026",
"ЭТО ШЕДЕВР! ФАНТАСТИКА!!",
"купи аксидтеч",
"как же скиту плохо без апдейтов, а нл все еще хитает",
"СКИТ НЕ НУЖЕН!",
"у меня все хитает",
"#neverlosev3 so good tappin rn OwO",
"А ОТКУДА ПАСТИТЬ!??!",
"Neverloose will be the best cheat, we cracked skeet",
"No updates in nl.. pls",
"unban me... uwu..",
"nevuvlus not hittin",
"u still hate me?? why???((",
"i don't play hvh but pls unban me..",
"Your account is suspended due to Staff disrespect",
"кто там на неверлуз пиздел?",
"КТО ТАМ НА НЕВЕРЛУЗ ПИЗДЕЛ?",
"ну мне честно неверлуз не платит",
"соуфив так сказал",
"пидорас бан",
"min dmg +3 =1+3",
"Аче? Авсмысле?",
"ДА ДА да да",
"Я занят диваном",
"100% Hitchance missed shot due Soufiw",
"да так и должно быть НАВЕРНОЕ",
"в некст апдейте пофикшу",
"Хак больше не мисает по резольверу",
"В бете все пофикшено",
"Известный баг",
"ладно похуй потом пофикшу",
"фиксед ин соуфив билд",
"дарт потестил вроде воркает",
"Soufiw +6500₽",
"Soufiw -6500₽",
"Какой Skeet? Новый проект Абдулова?",
"ЭЗОТЕРИК СУКА! ПРИВЕТ ОТ ДЕТЕЙ НЕВЕРЛУЗА",
"ЪУЪ",
"guys i have bad news. Hello when the skin changer will be added to cs2",
"НЛ ты не обновишься и т.д.",
"поинты видит, но стрелять только после отсоса соуфиву"
}
pizdos_nixware = {
"алвен хакер",
"дайти ключ альтернатив",
"owned by pastaware tap",
"flisk script",
"поч",
"фанаты фанатеют",
"ничстд",
"unter",
"uid 1 pm",
"каисень",
"ИДИ ИГРАЙ В РОБЛАК",
"НУ ТУПА Я",
"фулфокус",
"config isue",
"исправлено \"server error\"",
"ПИДОРАС Я ЛЮТИ",
"ОТКАЗАННО",
"юид никсвара высри, дог с 20",
"пачом никсвар",
"прошло 5 секунд... а никсвар всёравно - помойка",
"вот тебе 100р на nixware",
"юид никсвара высри",
"у меня 2к юид в никсваре не пиши мне мусор",
"скиньте пж 20 рублей на никсвар пжжж",
"никсвар альфа будет пмнишь"
}
pizdos_hvh = {
"брейн пмни нн",
"ору",
"привет, пацаны, не найдётся у вас минутки ? что такое юид?",
"я тебя не узнаю",
"че упал на ктрл уебище",
"Ору че высрал",
"кто на хвх дм",
"вся коллекция хот вилс будет пмнишь",
"Kyda miss, hyeglot ebaniy",
"нн не более.",
"уебище на вв уселось баим включило",
"ору нищ на вв сел ну животное триплтап в кряке будет пм",
"Ало чел ты мне кв лузнул рот",
"Вы че хотите пиздюрей?",
"стак пукни нищита",
"еблан на вв",
"словила единичку хуета",
"STUPID VIRGIN DOG WHY U PLAYING HVH?",
"Парни зачем нужны статик мульти поинты?",
"5х5 рн хуесос",
"ты кто мусор пмни 2 юид в вантапе нн",
"ты хуевый",
"хуйня сервер не хитрегает сука",
"никсвар альфа будет пмнишь",
"Я хочу писять",
"Привет, uid - это Идентификатор пользователя",
"изи мапа мусор",
"ИЗИ МАПА МУСОР",
"ору бич не пиши нн без karasik (hook)",
"Животное пмай 865 юид в эвольве",
"Ору нн бич скит будет пм и не пукай",
"нищ потеет",
"Я philip015 молчи глупое животное без фт",
"Отмена",
"я ничево не понял",
"Ппхуд гетнишь, пмай",
"Фанат альфы",
"Не пиши мне фанат",
"Нищий упал",
"я крякоюзер",
"guys i have bad news. Hello when the skin changer will be added to cs2",
"бля ебать ты долбаеб, купить такой софт за 3к это умом умом",
"Пидорас, что такое LBY V XUY MNE?",
"Пидорас, что такое DESYNC V XUY MNE?",
"Пидорас, что такое LOW DELTA V XUY MNE?",
"Пидорас, что такое питч он зиро V XUY MNE?",
"Пидорас, почему ебасосина в верх поднимается при прыжке V XUY MNE?",
"Пидорас , когда релиз фатала на кс 2 V XUY MNE?",
"Пидорас, что такое fakeflick V XUY MNE?",
"Пидорас, что такое roll aa V XUY MNE?",
"Пидорас, что такое autowall V XUY MNE?"
}
pizdos_fatality = {
"Ну ты и гад.",
"1 бот ебаный",
"bass.dll ft ratnik",
"VIOLATION",
"танковый дурак",
"оставь роспись у меня",
"uid issue",
"Плс фиксаните краши заебали",
"Печеньки покупать будете?",
"банан буш ?",
"Хуюзик блять",
"Resolver лохи Occlusion дуры мы фанаты missed shot due to spread культуры",
"фатал уид назови сука",
"missed due to spread",
"бегом на вв",
"press F",
"молчи глупое животное без фт"
}
pizdos_nyashka = {
"иногда няшечки тоже грустят",
"я больше не хочу ходить в школу",
"боже дед инсайды умрите пж",
"я выебала курседа шваброй",
"прасти я слишком хороша для тебя",
"как называется болезнь когда у тебя стоит чб аватарка из манги",
"да ты лох тупой офф ротик",
"пиздец завтра в школу",
"емае меня унизили в интернете",
"яна солях",
"курю воду",
"пож.. пожалуйста.. завали свое ебало",
"мне можна вас игнорить, а вам меня нит^^",
"да да мы попали в магадан",
"дыши если считаешь что я самая милая няшка",
"иди няхуй",
"всех с 1 сентября!",
"ебать какая же я пиздатая няшка",
"обиделся? похуй",
"ОБИДЕЛСЯ? ПОХУЙ",
"пошла нахуй гнида ебучая",
"ПОШЛАЯ НАХУЙ ГНИДА ЕБУЧАЯ",
"выкинь пк нахуй и прыгни с крыши бездарь ебаный",
"выкинь телефон нахуй и прыгни с крыши бездарь ебаный",
"я в рот ебал ваше мнение, анонимно пж",
"сука как уебу нахуй",
"а дед инсайд... это типаа пенсионер какой-то??",
"не грусти а то писька не будет расти",
"сделай одолжение сходи нахуй",
"сделай одолжение, сходи нахуй",
"я устала когда уже каникулы",
"БЛЯЯЯЯЯЯЯЯЯЯЯЯЯ как же все ахуеют от моей аватарки",
"открой ротик летит бомба",
"идите нахуй, желаю чтобы ваше очко сгорело и чтоб вас негры выебали",
"админ еблан",
"устал? умри",
"я на хуе вертела твою мамашу сын ебаной шлюхи",
"я не магу какать",
"я тян пруфiв не будет",
"ты в муте урод",
"каждый день перед сном я думаю о чокобое...",
"я.... п.. прошу... закрой свой рот очкошник",
"я.... п.. прошу... закрой свой рот чмошник",
"скинь денежку пожалуйста <3",
"ваша няшка умерла",
"не твоя вот и бесишься",
"иди нахуй сын мияги",
"гаси ебало доброй ночи!",
"завтра в школу",
"пон",
"да я не кринж блять нахуй",
"ночью приду и убью тебя",
"АХАХАХАХАХАХАХАХАХАХАХ",
"ХАХАХАХАХАХАХАХАХАХАХА",
"на моей странице запрещено поддерживать дотеров",
"тут написано что ты самая ахуенная женщина на свете",
"вот бы.. вот бы она сдохла",
"спасибо за то что я не родилась дотером а стала милой сучкой",
"не служил не мужик",
"бывает что я путаю туалетную бумагу и лицо дединсайдика",
"ME AND Y.. YOUR MOM",
"прости если трахнула",
"ну знаешь... иди нахуй",
"генш для геев, дота пизже",
"АААААААААААААААААААААААААА",
"ААААААААААААААА",
"ня пощади, я последняя няшка на земле",
"вот би била игэ по пиздец какая же я ахуенная няшка",
"меня тошнит от слова дотер",
"идите нафик я няшка!",
"дединсайды валите из доты. Теперь это игра для няшек",
"фу, какой же ты задрот и быдло",
"как же сильно я хочу тебя убить прямо сейчас",
"чтобы ты сдохла тварь ебучая",
"я няшко :3 так что... завали ебало",
"дружище, сделай одолжение нажми alt+f4",
"няшкам привет а дед инсайдам с ноги вьебало",
"НИЩИЕ ПРИДУРКИ",
"нищие придурки",
"снова со своей шалавой",
"я ненавижу себя так сильно но скрываю это и делаю вид что я лучше всех остальных",
"в душе я... пидорас ебучий",
"у меня хуй встал...",
"я тру няша сосите дед инсайды ебучие",
"отъебитесь я лавки свою заю",
"увидела мужика день испорчен",
"желаем тебе сдохнуть шваль ебучая",
"привет милый хотела бы сломать тебе спину",
"зачем мальчики когда есть котики",
"зачем резать себя есть можно дед инсайдов",
"солями",
"меня трахал zxcursed",
"устал? умри",
"вот бы вот бы она сдохла",
"сосни мой хуй дегенерат ебаный",
"зря ты сказал что слово ня для тебя ничего не значит",
"МРАЗОТА МАМУ своб так обижай",
"как называется болезнь когда ты дожираешь за другими",
"ку челики! кд? чд?",
"я бы обняла тепя, но боюсь переобниму и изнасилую",
"в душе я... пидорас ебучий",
"БЛЯЯЯЯЯЯЯЯЯЯЯЯЯ КАК ЖЕ ВСЕ АХУЕЮТ ОТ МОЕЙ АВАТАРКИ",
"обещай быть со мной и целовать меня по утрам",
"бляяя вот бы щя ебануть 0.5 пива",
"вот бы сейчас утопиться нахуй",
"умри в канаве чмо",
"я не как все. я хуже",
"i hate my life. i wanna die",
"ПРОШУ сделай из меня отбивную",
"ТРХН МЕНЧ ПЖЛСТ",
"трхн менч пжлст",
"ЧТО",
"что",
"у меня нет личной жизни",
"огромное спасибо маме что родила меня не мужиком",
"дединсайды которые просят помурчать в дс уёбищнее остальных в два раза",
"все кто меня когда то обижал каково вам на дне сидеть лошки",
"мне лень мыть голову каждый день",
"альтушк момент",
"пож... пожалуйста.. завали свое ебало",
"пож... пожалуйста.. ЗАВАЛИ СВОЕ ЕБАЛО",
"В БАН ТЕБЯ НАВЕЧНО УЕБИЩЕ БЕЗМАМНОЕ",
"ротик offни",
"я больше никогда не пойду в школу",
"в этой группе все няшки",
"я тру няша, сосите дединсайды ебучие",
"я твою мамку на хую вертела",
"у мея проаблемы..",
"захуярить бы кого-то битой",
"со мной никто не сможет сравниться я лучше чем вся планета",
"страница грустной беброчки которую никто не нюхает",
"в душе я.... женщина кощка...",
"как же хочется мне иногда вытащить себе глаза когда дотеры пишут что то в коммы",
"пришло время признаться.. я ем дотеров",
"тяжело быть хорошей девочкой когда внутри тебя живет маньяк",
"тссс няшка спит",
"добрее будьте а то как долбаёбы",
"я больше не хочу просыпаться по утрам я вообще не вижу смысла в жизни",
"кончи мне на лицо",
"аниме говно? умри жалкий холоп",
"сука заткнись. просто завали свой ебальник гнилой",
"СУКА ЗАТКНИСЬ. ПРОСТО ЗАВАЛИ СВОЙ ЕБАЛЬНИК ГНИЛОЙ",
"у меня нет мечты, я просто сбегу с уроков и умру в 20",
"запомни это навсегда друг, лучше меня няшки в твоей жизни никогда не будет",
"я всекда думаю о типе..",
"да ты лох тупой офф ротик",
"екарный бабай чо за хуйня",
"ну за то я няшка",
"ставь лайк если ты нефор",
"вот бы это были мы..",
"пиздец ты.. пизд5ц ты няшка",
"засунь свой пон себе в жопу",
"парни которые еще не прогнулись под бабу, вы долбаебы?",
"если вам что-то не нравится вы всегда можете пойти нахуй",
"извини меня пожалуйста за мою большую и сочную жопу",
"когда похуй и спится легче",
"тихо я сегодня нервная!!!!",
"ТИХО Я СЕГОДНЯ НЕРВНАЯ!!!!",
"от меня не уходят, от меня идут нахуй",
"кто ушел однажны идите нахуй дважды",
"я не ревную",
"Я НЕ РЕВНУЮ",
"ебало оффни выблядок мамкин",
"не надо повторять второй раз мне и с первого похуй",
"всем доброе утро. к сожалению я проснулась...",
"отвали пж от меня ты слишком душный",
"привет, админ был выебан теперь паблик наш",
"снова в доту? мне тебя жалко",
"МУЧИТЕЛЬНАЯ СМЕРТЬ >^<",
">^< МУЧИТЕЛЬНАЯ СМЕРТЬ"
}
pizdos_dindra = {
"ИДИ НАХУЙ",
"ебаться в жопу",
"KEEP SEARCHING WE NEED TO FIND THE PERSON WHO ASKED",
"бляяяя",
"shut the fuck up",
"пиздец",
"чекай мать еблан сука я её ебал чекай мать ебалн",
"хороший",
"эпл вотч",
"задумывались ли вы когда-нибудь о том,",
"здравствуйте овощи",
"нахуй съебал",
"НАХУЙ СЪЕБАЛ",
"вот это я уже с твоей мамашей сука, иди поплачь школьная долбаёбина",
"ты еблан",
"слышь муфлон хуекрылый я твою мамашку как карусель на своём хуе вертел",
"я трахал суку в мерсе",
"блядь че за хуйня я не буду это комментировать",
"я твою мать еб*л!",
"о нет твоей мамане пробили голову кирпичом? тогда кто теперь будет мне лизать мои волосатые яйки?",
"когда увидил сэкс",
"до связи",
"Бот просто слитый. Я в ахуе просто сосать",
"слыш стерва хавай хуй",
"иногда бывает такое что эээ ну короче похуй",
"просто ебейший",
"харош харош харош харош",
"ебало стянул сын помойки нищей",
"он такой долбаеб",
"салют с вами перфоратор",
"hate your life? try static desync",
"Я НЕ ПОНИМАЮ ГДЕ ТВОЯ МАТЬ?! ПОЧЕМУ ОНА МНЕ ЕЩЁ НЕ СОСЁТ ХУЙ С ПРИЧМОКАМИ И ЗАГЛОТОМ?",
"пошел в пизду",
"ствол вздрочен просьба не выебываться",
"Вас хочет выебать глент",
"Ты можешь выёбываться",
"Ты не можешь выёбываться",
"ЕБАЛ ВАШ РОТ ПОШЛИ НАХУЙ",
"ебал ваш рот пошли нахуй",
"твою мать шлюху на хуе вертел бля",
"естественно я... эээ ну крч идите нахуй",
"трахнуть",
"Ты умный ты очень умный!",
"БЛЯ БЛЯ СУКА БЛЯ СУКА БЛЯ БЛЯ СУКА БЛЯ",
"бро так не тролят",
"пожалуйста ебани меня с ружья",
"пачему ты не осёл бля",
"ты не в свой район зашел пацанчик",
"БЛЯЯЯЯЯЯЯЯЯ ЗА ЧТО БОЖЕ НАХУЙ",
"распили меня болгаркой",
"изящно насрал изумительно надристал",
"ХУИ ПИЗДА ЕБАТЬ АНАЛ ЗАЛУПА БУЛЬДОЗЕР ЕБЛАН",
"Скоко сосеш хуи. Тока по чесноку",
"скажи пылесос, твой батя хуесос",
"АГЪЭБЬЭЫЪАЭЮЪГБЭЪГЙ",
"че ты высрал",
"обед уютненько утро очки усы обед обед",
"ты чё тут делаешь? эта группа для крутых",
"ЕБАНЫЙ В РОТ",
"ЕБЕЙШИЙ",
"не кречи в меня",
"ГОНДОН ПИДОР ЧМО ЕБАЛЬНИК СИСЬКИ СРАТЬ КОРЗИНКА",
"сколько пидрил",
"я вашу мать ебал друзья",
"зачем ты родился еблан",
"где все",
"меня одного уже все это заебало",
"я тя выебу чел",
"ВЫ ВСЕ ЗАЕБАЛИ ИДИТЕ НАХУЙ",
"ДА БЛЯТЬ ИДИТЕ НАХУЙ",
"подрочи мне через шортики хех",
"додрочился сука через шортики хех",
"ПОДРОЧИ МНЕ ЧЕРЕЗ ШОРТИКИ ХЕХ",
"ДОДРОЧИЛСЯ СУКА ЧЕРЕЗ ШОРТИКИ ХЕХ",
"я больших шортиков дрочитель"
}
pizdos_ha4 = {
"1 хач",
"пидорас ебаный",
"1 хач ебаный",
"1",
"мать твою ебал",
"1 мать ебал",
"умри нищий",
"в ноги пидорас",
"в ноги",
"уебище че умер",
"я не проебу мапу",
"вколот пидорас",
"дернись пидорас"
}
delayed_say_queue = {}
is_processing_queue = false
queue_processing_timer = 0
current_count = 1000
last_phrases = {
[2] = {},
[4] = {},
[8] = {},
[16] = {},
[32] = {},
[64] = {},
[128] = {},
[256] = {},
[512] = {},
[2048] = {}
}
phrases_by_type = {
[8] = pizdos_skeet,
[16] = pizdos_neverlose,
[32] = pizdos_nixware,
[64] = pizdos_hvh,
[128] = pizdos_fatality,
[256] = pizdos_nyashka,
[512] = pizdos_dindra,
[2048] = pizdos_ha4
}
phrase_lengths = {}
for iter_0_1, iter_0_2 in pairs(phrases_by_type) do
phrase_lengths[iter_0_1] = #iter_0_2
end
function get_random_unique_phrase(arg_180_0, arg_180_1, arg_180_2)
if arg_180_2 == 0 then
return nil
end
local var_180_0 = last_phrases[arg_180_1]
local var_180_1 = 0
for iter_180_0 in pairs(var_180_0) do
var_180_1 = var_180_1 + 1
end
if arg_180_2 <= var_180_1 then
last_phrases[arg_180_1] = {}
var_180_0 = last_phrases[arg_180_1]
end
local var_180_2 = 3
for iter_180_1 = 1, var_180_2 do
local var_180_3 = arg_180_0[math.random(1, arg_180_2)]
if not var_180_0[var_180_3] then
var_180_0[var_180_3] = true
return var_180_3
end
end
last_phrases[arg_180_1] = {}
last_phrases[arg_180_1][arg_180_0[1]] = true
return arg_180_0[1]
end
function delayed_say(arg_181_0)
local var_181_0 = #delayed_say_queue
delayed_say_queue[var_181_0 + 1] = {
text = arg_181_0,
delay = math.random(6, 12) * 0.1
}
if not is_processing_queue then
is_processing_queue = true
queue_processing_timer = game.globalVars.m_flRealTime + delayed_say_queue[1].delay
end
end
events.presentQueue:Add(function()
local var_182_0 = #delayed_say_queue
if var_182_0 == 0 then
is_processing_queue = false
return
end
local var_182_1 = game.globalVars.m_flRealTime
local var_182_2 = delayed_say_queue[1]
if var_182_1 >= queue_processing_timer then
local var_182_3 = entities.GetLocalPawn()
if var_182_3 and var_182_3:IsAlive() then
game.engine:ClientCmd("say " .. var_182_2.text)
end
for iter_182_0 = 2, var_182_0 do
delayed_say_queue[iter_182_0 - 1] = delayed_say_queue[iter_182_0]
end
delayed_say_queue[var_182_0] = nil
if #delayed_say_queue > 0 then
queue_processing_timer = var_182_1 + delayed_say_queue[1].delay
else
is_processing_queue = false
end
end
end)
mods.events:add_listener("player_death")
events.event:Add(function(arg_183_0)
local var_183_0 = cbx_trash_talk:GetValue():Get():GetRaw()
if not var_183_0 then
return
end
if arg_183_0:GetName() ~= "player_death" then
return
end
if arg_183_0:GetPawnFromId("attacker") ~= entities.GetLocalPawn() then
return
end
if var_183_0 ~= 1024 then
local var_183_1 = entities.GetLocalPawn()
if not var_183_1 or not var_183_1:IsAlive() then
return
end
end
if var_183_0 == 2 then
local var_183_2 = arg_183_0:GetBool("headshot") and text_hs or text_body
local var_183_3 = get_random_unique_phrase(var_183_2, 2, #var_183_2)
if var_183_3 then
delayed_say(var_183_3)
end
elseif var_183_0 == 4 then
delayed_say("1")
elseif var_183_0 == 1024 then
if current_count > -1 then
local var_183_4 = current_count
current_count = current_count - 7
delayed_say(current_count < -1 and "zxc" or var_183_4 .. " - 7 = " .. current_count)
else
delayed_say("zxc")
end
else
local var_183_5 = phrases_by_type[var_183_0]
if var_183_5 then
local var_183_6 = get_random_unique_phrase(var_183_5, var_183_0, phrase_lengths[var_183_0])
if var_183_6 then
delayed_say(var_183_6)
end
end
end
end)
MESSAGES = {
"PPPPP",
"P.........P",
"PPPPP",
"P",
"P",
"N..........N",
"NN........N",
"N....N....N",
"N........NN",
"N..........N",
"DDDD",
"D.........D",
"D.........D",
"D.........D",
"DDDD",
"PND.lua"
}
is_sending = false
message_index = 1
last_sent_time = 0
btn_message_pnd:AddCallback(function()
Delay(0.1, function()
if not is_sending then
is_sending = true
message_index = 1
last_sent_time = 0
end
end)
end)
events.presentQueue:Add(function()
if not is_sending then
return
end
if message_index > #MESSAGES then
is_sending = false
return
end
local var_186_0 = game.globalVars.m_flRealTime
if var_186_0 - last_sent_time >= 0.3 then
game.engine:ClientCmd("say " .. MESSAGES[message_index])
message_index = message_index + 1
last_sent_time = var_186_0
end
end)
btn_ip_grabber:AddCallback(function()
Delay(0.1, function()
local var_188_0 = game.engine:GetNetChan()
if var_188_0 and not var_188_0:IsNull() then
local var_188_1 = var_188_0:GetAddress()
print("Net Address:", var_188_1)
utils.ClipboardSet(var_188_1)
gui.notify:Add(gui.Notification("Success", "Address: " .. var_188_1))
else
gui.notify:Add(gui.Notification("Error", "Failed to get net address", draw.textures.icon_info))
end
end)
end)
should_buy_awp = false
saved_primary_bitmask = nil
saved_autobuy_enabled = nil
disable_timer = 0
restored_once = false
primary_selector = gui.ctx:Find("misc>autobuy>primary")
autobuy_enabled_ctrl = gui.ctx:Find("misc>autobuy>enabled")
mods.events:add_listener("round_start")
events.event:Add(function(arg_189_0)
if cb_awp_grabber:GetValue():Get() then
return
end
if arg_189_0:GetName() == "round_start" then
should_buy_awp = true
disable_timer = game.globalVars.m_flRealTime + 0.01
end
end)
events.frameStageNotify:Add(function()
local var_190_0 = cb_awp_grabber:GetValue():Get()
if not var_190_0 and not restored_once then
local var_190_1 = primary_selector:GetValue()
if var_190_1 then
local var_190_2 = var_190_1:Get()
local var_190_3 = autobuy_enabled_ctrl:GetValue()
if saved_primary_bitmask ~= nil then
var_190_2:SetRaw(saved_primary_bitmask)
var_190_1:Set(var_190_2)
primary_selector:Reset()
saved_primary_bitmask = nil
end
if saved_autobuy_enabled ~= nil then
autobuy_enabled_ctrl:SetValue(saved_autobuy_enabled)
saved_autobuy_enabled = nil
end
restored_once = true
end
return
end
if not var_190_0 then
return
end
if var_190_0 then
restored_once = false
end
if disable_timer > 0 and game.globalVars.m_flRealTime >= disable_timer then
should_buy_awp = false
disable_timer = 0
end
if should_buy_awp and var_190_0 then
game.engine:ClientCmd("buy awp")
end
local var_190_4 = primary_selector:GetValue()
if not var_190_4 then
return
end
local var_190_5 = var_190_4:Get()
local var_190_6 = autobuy_enabled_ctrl:GetValue()
if var_190_0 then
if saved_primary_bitmask == nil then
saved_primary_bitmask = var_190_5:GetRaw()
end
if saved_autobuy_enabled == nil then
saved_autobuy_enabled = var_190_6:Get()
end
var_190_5:SetRaw(4)
var_190_4:Set(var_190_5)
primary_selector:Reset()
autobuy_enabled_ctrl:SetValue(true)
end
end)
ffi.cdef(" typedef void* (__cdecl *InstantiateInterfaceFn_t)();\n \n typedef struct CInterfaceRegister {\n InstantiateInterfaceFn_t fnCreate;\n const char* szName;\n struct CInterfaceRegister* pNext;\n } CInterfaceRegister;\n \n typedef struct {\n const char* szName;\n void* m_pNext;\n char pad1[0x10];\n const char* szDescription;\n uint32_t nType;\n uint32_t nRegistered;\n uint32_t nFlags;\n char pad2[0x15];\n union {\n bool i1;\n short i16;\n uint16_t u16;\n int i32;\n uint32_t u32;\n int64_t i64;\n uint64_t u64;\n float fl;\n double db;\n const char* sz;\n } value;\n } CConVar;\n \n typedef struct {\n CConVar* element;\n unsigned short prev;\n unsigned short next;\n } UtlLinkedListElement_t;\n \n typedef struct {\n int size;\n UtlLinkedListElement_t* data;\n } CUtlLeanVector;\n \n typedef struct \n {\n CUtlLeanVector memory;\n unsigned short iHead;\n unsigned short iTail;\n unsigned short iFirstFree;\n unsigned short nElementCount;\n unsigned short nAllocated;\n UtlLinkedListElement_t* pElements;\n } CUtlLinkedList;\n \n typedef struct {\n char pad[0x40];\n CUtlLinkedList listConvars;\n } IEngineCVar;\n")
function utils.ToRelativeAddress(arg_191_0, arg_191_1, arg_191_2)
local var_191_0 = ffi.cast("int32_t*", arg_191_0 + arg_191_1)[0]
local var_191_1 = ffi.cast("uintptr_t", arg_191_0) + arg_191_2
return ffi.cast("uint8_t*", var_191_1 + var_191_0)
end
function utils.GetRegisterList(arg_192_0)
local var_192_0 = utils.FindExport(arg_192_0, "CreateInterface")
if var_192_0 == 0 then
return
end
return ffi.cast("CInterfaceRegister**", utils.ToRelativeAddress(var_192_0, 3, 7))[0]
end
function utils.GetInterfaceFromRegister(arg_193_0, arg_193_1)
local var_193_0 = arg_193_0
while var_193_0 do
if ffi.string(var_193_0.szName):find(arg_193_1, 1, true) then
return var_193_0.fnCreate()
end
var_193_0 = var_193_0.pNext
end
end
slot_0_5_0 = utils.GetRegisterList("tier0.dll")
if not slot_0_5_0 then
error("#1")
end
slot_0_6_0 = ffi.cast("IEngineCVar*", utils.GetInterfaceFromRegister(slot_0_5_0, "VEngineCvar00"))
if not slot_0_6_0 then
error("#2")
end
function utils.GetConvar(arg_194_0)
for iter_194_0 = slot_0_6_0.listConvars.iHead, slot_0_6_0.listConvars.iTail do
local var_194_0 = slot_0_6_0.listConvars.memory.data[iter_194_0].element
if not var_194_0 or not var_194_0.szName then
-- block empty
elseif ffi.string(var_194_0.szName) == arg_194_0 then
return var_194_0
end
end
end
cvar_name = utils.GetConvar("name")
cvar_name.nFlags = 33408
function getNameFromEntity(arg_195_0)
return arg_195_0 and arg_195_0:GetName() or nil
end
nicknames = {
[2] = {
{
interval = 0.26,
name = "PND ㅤ"
},
{
interval = 0.25,
name = "PNDㅤ"
},
{
interval = 0.3,
name = "PND. ㅤ"
},
{
interval = 0.32,
name = "PND.lㅤ"
},
{
interval = 0.33,
name = "PND.lu ㅤ"
},
{
interval = 0.35,
name = "PND.luaㅤ"
},
{
interval = 0.36,
name = "PND.lua ㅤ"
},
{
interval = 0.35,
name = "PND.luaㅤ"
},
{
interval = 0.36,
name = "PND.lua ㅤ"
},
{
interval = 0.35,
name = "PND.luaㅤ"
},
{
interval = 0.36,
name = "PND.lua ㅤ"
},
{
interval = 0.35,
name = "PND.luaㅤ"
},
{
interval = 0.33,
name = "PND.lu ㅤ"
},
{
interval = 0.32,
name = "PND.lㅤ"
},
{
interval = 0.3,
name = "PND. ㅤ"
},
{
interval = 0.26,
name = "PNDㅤ"
},
{
interval = 0.25,
name = "PND ㅤ"
},
{
interval = 0.26,
name = "PNDㅤ"
},
{
interval = 0.26,
name = "PND ㅤ"
},
{
interval = 0.25,
name = "PNDㅤ"
}
},
[4] = {
{
interval = 0.2,
name = "nolux."
},
{
interval = 0.21,
name = "nolxu.7"
},
{
interval = 0.22,
name = "noxlu.7e"
},
{
interval = 0.23,
name = "nxolu.7e4"
},
{
interval = 0.24,
name = "xnolu.7e"
},
{
interval = 0.25,
name = "nxolu.7"
},
{
interval = 0.26,
name = "noxlu."
},
{
interval = 0.27,
name = "nolxu.7"
},
{
interval = 0.28,
name = "nolux.7e"
},
{
interval = 0.29,
name = "nloux.7e4"
},
{
interval = 0.2,
name = "lnoux.7e"
},
{
interval = 0.21,
name = "lonux.7"
},
{
interval = 0.22,
name = "lounx."
},
{
interval = 0.23,
name = "luonx.7"
},
{
interval = 0.24,
name = "lunox.7e"
},
{
interval = 1.45,
name = "lunox.7e4"
},
{
interval = 0.29,
name = "iunox.7e"
},
{
interval = 0.2,
name = "lunox.7"
},
{
interval = 0.21,
name = "lnuox.7e"
},
{
interval = 0.22,
name = "nluox.7e4"
},
{
interval = 0.23,
name = "nulox.7e"
},
{
interval = 0.24,
name = "nuolx.7e"
},
{
interval = 0.25,
name = "noulx.7"
}
},
[8] = {
{
interval = 2.2,
name = "Dream"
},
{
interval = 0.29,
name = "Drea✧"
},
{
interval = 0.2,
name = "Drea*"
},
{
interval = 0.21,
name = "Drea・"
},
{
interval = 0.22,
name = "Drea"
},
{
interval = 0.23,
name = "Dre✧"
},
{
interval = 0.24,
name = "Dre*"
},
{
interval = 0.25,
name = "Dre・"
},
{
interval = 0.26,
name = "Dre"
},
{
interval = 0.27,
name = "Dr✧"
},
{
interval = 0.28,
name = "Dr*"
},
{
interval = 0.29,
name = "Dr・"
},
{
interval = 0.2,
name = "Dr"
},
{
interval = 0.21,
name = "D✧"
},
{
interval = 0.22,
name = "D*"
},
{
interval = 0.23,
name = "D・"
},
{
interval = 0.24,
name = "D"
},
{
interval = 0.22,
name = "✧"
},
{
interval = 0.18,
name = "*"
},
{
interval = 0.16,
name = "・"
},
{
interval = 0.14,
name = "∗"
},
{
interval = 0.12,
name = "✩"
},
{
interval = 0.1,
name = "⋆"
},
{
interval = 0.1,
name = "✧・"
},
{
interval = 0.1,
name = "✧・゚"
},
{
interval = 0.1,
name = "✧・゚:"
},
{
interval = 0.1,
name = "✧・゚:・"
},
{
interval = 0.1,
name = "✧・゚:・゚"
},
{
interval = 0.1,
name = "✧・゚:・゚✧"
},
{
interval = 0.1,
name = "D゚:✧"
},
{
interval = 0.28,
name = "Dr゚:✧"
},
{
interval = 0.29,
name = "Dr・:✧"
},
{
interval = 0.2,
name = "Dr・゚:✧"
},
{
interval = 0.21,
name = "Dr・゚:✧m"
},
{
interval = 0.22,
name = "Dr・゚:am"
},
{
interval = 0.23,
name = "Dr・:am"
}
},
[16] = {
{
interval = 1.2,
name = "morigyaru"
},
{
interval = 0.21,
name = "morigyar"
},
{
interval = 0.22,
name = "morigya"
},
{
interval = 0.23,
name = "morigy"
},
{
interval = 0.24,
name = "morig"
},
{
interval = 0.25,
name = "mori"
},
{
interval = 0.26,
name = "mor"
},
{
interval = 0.27,
name = "mo"
},
{
interval = 0.28,
name = "m"
},
{
interval = 0.29,
name = "mo"
},
{
interval = 0.2,
name = "mor"
},
{
interval = 0.21,
name = "mori"
},
{
interval = 0.22,
name = "morig"
},
{
interval = 0.23,
name = "morigy"
},
{
interval = 0.24,
name = "morigya"
},
{
interval = 0.25,
name = "morigyar"
},
{
interval = 1.2,
name = "morigyaru"
},
{
interval = 0.27,
name = "origyaru"
},
{
interval = 0.28,
name = "rigyaru"
},
{
interval = 0.29,
name = "igyaru"
},
{
interval = 0.2,
name = "gyaru"
},
{
interval = 0.21,
name = "yaru"
},
{
interval = 0.22,
name = "aru"
},
{
interval = 0.23,
name = "ru"
},
{
interval = 0.24,
name = "u"
},
{
interval = 0.25,
name = "ur"
},
{
interval = 0.26,
name = "ura"
},
{
interval = 0.27,
name = "uray"
},
{
interval = 0.28,
name = "urayg"
},
{
interval = 0.29,
name = "uraygi"
},
{
interval = 0.2,
name = "uraygir"
},
{
interval = 0.21,
name = "uraygiro"
},
{
interval = 0.22,
name = "uraygirom"
},
{
interval = 0.23,
name = "uraygirmo"
},
{
interval = 0.24,
name = "uraygimor"
},
{
interval = 0.25,
name = "uraygmori"
},
{
interval = 0.26,
name = "uraymorig"
},
{
interval = 0.27,
name = "uramorigy"
},
{
interval = 0.28,
name = "urmorigya"
},
{
interval = 0.29,
name = "umorigyar"
}
},
[32] = {
{
interval = 0.41,
name = " ga"
},
{
interval = 0.27,
name = " gam"
},
{
interval = 0.28,
name = " game"
},
{
interval = 0.28,
name = " games"
},
{
interval = 0.28,
name = " gamese"
},
{
interval = 0.28,
name = " gamesen"
},
{
interval = 0.38,
name = " gamesens"
},
{
interval = 0.28,
name = " gamesense"
},
{
interval = 0.28,
name = " gamesense "
},
{
interval = 0.28,
name = " gamesense "
},
{
interval = 0.28,
name = " gamesense "
},
{
interval = 2.44,
name = " gamesense "
},
{
interval = 0.28,
name = " gamesense "
},
{
interval = 0.28,
name = "gamesense "
},
{
interval = 0.28,
name = "amesense "
},
{
interval = 0.28,
name = "mesense "
},
{
interval = 0.28,
name = "esense "
},
{
interval = 0.28,
name = "sense "
},
{
interval = 0.38,
name = "ense "
},
{
interval = 0.28,
name = "nse "
},
{
interval = 0.28,
name = "se "
},
{
interval = 0.52,
name = "e "
},
{
interval = 0.03,
name = " "
}
},
[64] = {
{
interval = 0.41,
name = " me"
},
{
interval = 0.27,
name = " mem"
},
{
interval = 0.28,
name = " meme"
},
{
interval = 0.28,
name = " memes"
},
{
interval = 0.28,
name = " memese"
},
{
interval = 0.28,
name = " memesen"
},
{
interval = 0.38,
name = " memesens"
},
{
interval = 0.28,
name = " memesense"
},
{
interval = 0.28,
name = " memesense "
},
{
interval = 0.28,
name = " memesense "
},
{
interval = 0.28,
name = " memesense "
},
{
interval = 2.44,
name = " memesense "
},
{
interval = 0.28,
name = " memesense "
},
{
interval = 0.28,
name = "memesense "
},
{
interval = 0.28,
name = "emesense "
},
{
interval = 0.28,
name = "mesense "
},
{
interval = 0.28,
name = "esense "
},
{
interval = 0.28,
name = "sense "
},
{
interval = 0.38,
name = "ense "
},
{
interval = 0.28,
name = "nse "
},
{
interval = 0.28,
name = "se "
},
{
interval = 0.52,
name = "e "
},
{
interval = 0.03,
name = " "
}
},
[128] = {},
[512] = {
{interval = 0.2, name = "s"},
{interval = 0.2, name = "sk"},
{interval = 0.2, name = "ske"},
{interval = 0.2, name = "skee"},
{interval = 0.2, name = "skeet"},
{interval = 0.2, name = "skeet "},
{interval = 0.2, name = "skeet s"},
{interval = 0.2, name = "skeet sk"},
{interval = 0.2, name = "skeet ske"},
{interval = 0.2, name = "skeet skee"},
{interval = 0.2, name = "skeet skeet"},
{interval = 0.2, name = "skeet skeet "},
{interval = 0.2, name = "skeet skeet n"},
{interval = 0.2, name = "skeet skeet nu"},
{interval = 0.2, name = "skeet skeet num"},
{interval = 0.2, name = "skeet skeet numb"},
{interval = 0.2, name = "skeet skeet numbe"},
{interval = 0.2, name = "skeet skeet number"},
{interval = 0.2, name = "skeet skeet number "},
{interval = 0.2, name = "skeet skeet number o"},
{interval = 0.2, name = "skeet skeet number on"},
{interval = 0.2, name = "skeet skeet number one"},
{interval = 0.2, name = "skeet skeet number one "},
{interval = 0.2, name = "skeet skeet number one c"},
{interval = 0.2, name = "skeet skeet number one ch"},
{interval = 0.2, name = "skeet skeet number one che"},
{interval = 0.2, name = "skeet skeet number one chea"},
{interval = 0.2, name = "skeet skeet number one cheat"},
{interval = 0.5, name = "skeet skeet number one cheat"},
{interval = 0.2, name = "skeet skeet number one chea"},
{interval = 0.2, name = "skeet skeet number one che"},
{interval = 0.2, name = "skeet skeet number one ch"},
{interval = 0.2, name = "skeet skeet number one c"},
{interval = 0.2, name = "skeet skeet number one "},
{interval = 0.2, name = "skeet skeet number one"},
{interval = 0.2, name = "skeet skeet number on"},
{interval = 0.2, name = "skeet skeet number o"},
{interval = 0.2, name = "skeet skeet number "},
{interval = 0.2, name = "skeet skeet number"},
{interval = 0.2, name = "skeet skeet numbe"},
{interval = 0.2, name = "skeet skeet numb"},
{interval = 0.2, name = "skeet skeet num"},
{interval = 0.2, name = "skeet skeet nu"},
{interval = 0.2, name = "skeet skeet n"},
{interval = 0.2, name = "skeet skeet "},
{interval = 0.2, name = "skeet skeet"},
{interval = 0.2, name = "skeet skee"},
{interval = 0.2, name = "skeet ske"},
{interval = 0.2, name = "skeet sk"},
{interval = 0.2, name = "skeet s"},
{interval = 0.2, name = "skeet "},
{interval = 0.2, name = "skeet"},
{interval = 0.2, name = "skee"},
{interval = 0.2, name = "ske"},
{interval = 0.2, name = "sk"},
{interval = 0.2, name = "s"},
{interval = 0.2, name = ""}
}
}
function generateDynamicNicknameSet(arg_196_0)
local var_196_0 = {}
if #arg_196_0 > 14 then
arg_196_0 = string.sub(arg_196_0, 1, 14)
end
local var_196_1 = #arg_196_0
if var_196_1 == 0 then
return var_196_0
end
local var_196_2 = {
{
interval = 8,
name = "[Monolith]"
},
{
interval = 0.5,
name = "[Monolit]"
},
{
interval = 0.5,
name = "[Monoli]"
},
{
interval = 0.5,
name = "[Monol]"
},
{
interval = 0.5,
name = "[Mono]"
},
{
interval = 0.5,
name = "[Mon]"
},
{
interval = 0.5,
name = "[Mo]"
},
{
interval = 0.5,
name = "[M]"
}
}
for iter_196_0, iter_196_1 in ipairs(var_196_2) do
table.insert(var_196_0, {
name = iter_196_1.name,
interval = iter_196_1.interval
})
end
for iter_196_2 = 1, var_196_1 do
local var_196_3 = string.sub(arg_196_0, 1, iter_196_2)
local var_196_4 = 0.5
if iter_196_2 == var_196_1 then
local var_196_5 = 7.5
local var_196_6 = (var_196_1 - 1) * 0.5
var_196_4 = math.max(var_196_5 - var_196_6, 0.5)
end
table.insert(var_196_0, {
name = "[" .. var_196_3 .. "]",
interval = var_196_4
})
end
local var_196_7 = {
{
interval = 0.5,
name = "[M]"
},
{
interval = 0.5,
name = "[Mo]"
},
{
interval = 0.5,
name = "[Mon]"
},
{
interval = 0.5,
name = "[Mono]"
},
{
interval = 0.5,
name = "[Monol]"
},
{
interval = 0.5,
name = "[Monoli]"
},
{
interval = 0.5,
name = "[Monolit]"
}
}
for iter_196_3, iter_196_4 in ipairs(var_196_7) do
table.insert(var_196_0, {
name = iter_196_4.name,
interval = iter_196_4.interval
})
end
return var_196_0
end
function updateDynamicNicknameSet()
local var_197_0 = ""
if txt_clantags and txt_clantags.value then
var_197_0 = txt_clantags.value
end
if #var_197_0 > 14 then
var_197_0 = string.sub(var_197_0, 1, 14)
end
if var_197_0 == "" then
nicknames[128] = {
{
interval = 8,
name = "[Monolith]"
},
{
interval = 0.5,
name = "[Monolit]"
},
{
interval = 0.5,
name = "[Monoli]"
},
{
interval = 0.5,
name = "[Monol]"
},
{
interval = 0.5,
name = "[Mono]"
},
{
interval = 0.5,
name = "[Mon]"
},
{
interval = 0.5,
name = "[Mo]"
},
{
interval = 0.5,
name = "[M]"
},
{
interval = 0.5,
name = "[1]"
},
{
interval = 0.5,
name = "[13]"
},
{
interval = 0.5,
name = "[133]"
},
{
interval = 6,
name = "[1337]"
},
{
interval = 0.5,
name = "[M]"
},
{
interval = 0.5,
name = "[Mo]"
},
{
interval = 0.5,
name = "[Mon]"
},
{
interval = 0.5,
name = "[Mono]"
},
{
interval = 0.5,
name = "[Monol]"
},
{
interval = 0.5,
name = "[Monoli]"
},
{
interval = 0.5,
name = "[Monolit]"
}
}
else
nicknames[128] = generateDynamicNicknameSet(var_197_0)
end
end
function calculateBaseCumulativeTimes(arg_198_0)
local var_198_0 = {}
local var_198_1 = 0
for iter_198_0, iter_198_1 in ipairs(arg_198_0) do
var_198_1 = var_198_1 + iter_198_1.interval
var_198_0[iter_198_0] = var_198_1
end
return var_198_0, var_198_1
end
function findIndexAtTime(arg_199_0, arg_199_1)
for iter_199_0, iter_199_1 in ipairs(arg_199_0) do
if arg_199_1 < iter_199_1 then
return iter_199_0
end
end
return #arg_199_0
end
clanTagOff = true
lastSetName = nil
startOffset = 0
lastCountValue = nil
lastCountUpdateTime = nil
last128Progress = nil
lastTextCheck = nil
function updateName(arg_200_0)
if arg_200_0 and arg_200_0 ~= lastSetName then
game.engine:ClientCmd("setinfo name \"" .. arg_200_0 .. "\"")
lastSetName = arg_200_0
end
end
function getCountingName()
local var_201_0 = game.globalVars.m_flCurTime
local var_201_1 = 0.27
if not lastCountUpdateTime then
lastCountUpdateTime = var_201_0
lastCountValue = 1000
return tostring(lastCountValue) .. "-7 " .. realName
end
if var_201_1 <= var_201_0 - lastCountUpdateTime then
lastCountUpdateTime = var_201_0
lastCountValue = lastCountValue - 7
if lastCountValue < -7 then
lastCountValue = 1000
end
return tostring(lastCountValue) .. "-7 " .. realName
end
return tostring(lastCountValue) .. "-7 " .. realName
end
events.presentQueue:Add(function()
if not clanTagOff then
return
end
if not game.engine:InGame() or not game.engine:IsConnected() then
return
end
local var_202_0 = cbx_clantags:GetValue():Get():GetRaw()
local var_202_1 = game.globalVars.m_flCurTime
if not enabled_cl then
return initializeRealName()
end
if var_202_0 == 256 then
local var_202_2 = getCountingName()
updateName(var_202_2)
return true
end
if var_202_0 == 1 then
updateName(realName)
return true
end
if var_202_0 == 512 then
startOffset = 5.6
lastSelectedMode = 512
elseif var_202_0 == 128 then
if lastSelectedMode ~= 128 then
startOffset = -4
last128Progress = nil
updateDynamicNicknameSet()
lastTextCheck = txt_clantags and txt_clantags.value or ""
if #lastTextCheck > 14 then
lastTextCheck = string.sub(lastTextCheck, 1, 14)
end
end
local var_202_3 = ""
if txt_clantags and txt_clantags.value then
var_202_3 = txt_clantags.value
if #var_202_3 > 14 then
var_202_3 = string.sub(var_202_3, 1, 14)
end
end
if var_202_3 ~= lastTextCheck then
if nicknames[128] and #nicknames[128] > 0 and last128Progress then
local var_202_4 = nicknames[128]
local var_202_5, var_202_6 = calculateBaseCumulativeTimes(var_202_4)
local var_202_7 = (var_202_1 - startOffset) % var_202_6
local var_202_8 = findIndexAtTime(var_202_5, var_202_7)
local var_202_9 = var_202_7
if var_202_8 > 1 then
var_202_9 = var_202_7 - var_202_5[var_202_8 - 1]
end
local var_202_10 = var_202_9 / var_202_4[var_202_8].interval
last128Progress = {
index = var_202_8,
progress = var_202_10
}
end
updateDynamicNicknameSet()
lastTextCheck = var_202_3
if last128Progress and nicknames[128] and #nicknames[128] > 0 then
local var_202_11 = nicknames[128]
local var_202_12, var_202_13 = calculateBaseCumulativeTimes(var_202_11)
local var_202_14 = last128Progress.index
if var_202_14 > #var_202_11 then
var_202_14 = #var_202_11
end
local var_202_15 = 0
if var_202_14 > 1 then
var_202_15 = var_202_12[var_202_14 - 1]
end
local var_202_16 = var_202_15 + var_202_11[var_202_14].interval * last128Progress.progress - (var_202_1 - startOffset) % var_202_13
startOffset = startOffset - var_202_16
last128Progress = nil
end
end
lastSelectedMode = 128
else
startOffset = 5.6
lastSelectedMode = var_202_0
end
local var_202_17 = nicknames[var_202_0] or nicknames[32]
if not var_202_17 or #var_202_17 == 0 then
updateName(realName)
return true
end
local var_202_18, var_202_19 = calculateBaseCumulativeTimes(var_202_17)
local var_202_20 = math.floor((var_202_1 - startOffset) / var_202_19)
local var_202_21 = var_202_1 - startOffset - var_202_20 * var_202_19
if var_202_21 < 0 then
var_202_21 = var_202_21 + var_202_19
end
local var_202_22 = var_202_17[findIndexAtTime(var_202_18, var_202_21)].name .. " " .. realName
updateName(var_202_22)
end)
events.presentQueue:Add(function()
if not game.engine:InGame() or not game.engine:IsConnected() then
return
end
local var_203_0 = cbx_auto_team:GetValue():Get():GetRaw()
if var_203_0 == 1 then
return
end
local var_203_1 = entities.GetLocalPawn().m_iTeamNum:Get()
auto_team_state = auto_team_state or {
last_switch = 0
}
local var_203_2 = var_203_0 == 2 and 3 or 2
local var_203_3 = game.globalVars.m_flRealTime
if var_203_1 ~= var_203_2 and var_203_3 - (auto_team_state.last_switch or 0) >= 0.1 then
panorama.Eval("GameInterfaceAPI.ConsoleCommand('jointeam " .. var_203_2 .. " 1')", "CSGOTeamSelectMenu")
auto_team_state.last_switch = var_203_3
end
end)
btn_kill_yourself:AddCallback(function()
Delay(0.1, function()
if not game.engine:InGame() or not game.engine:IsConnected() then
return
end
local var_205_0 = entities.GetLocalPawn()
if not var_205_0 or not var_205_0:IsAlive() then
return
end
game.engine:ClientCmd("jointeam")
end)
end)
local_userid = nil
mods.events:AddListener("player_death")
events.event:Add(function(arg_206_0)
if not cb_auto_kick:GetValue():Get() then
return
end
if arg_206_0:GetName() ~= "player_death" then
return
end
local var_206_0 = arg_206_0:GetInt("userid")
if var_206_0 == -1 then
return
end
local var_206_1 = arg_206_0:GetController("userid")
if not var_206_1 then
return
end
if var_206_1 == entities.GetLocalController() then
local_userid = var_206_0
end
end)
events.presentQueue:Add(function()
if not cb_auto_kick:GetValue():Get() then
return
end
if not game.engine:InGame() or not game.engine:IsConnected() then
local_userid = nil
return
end
if not local_userid then
return
end
game.engine:ClientCmd("callvote kick " .. tostring(local_userid))
end)
slot_0_7_0 = nil
slot_0_8_0 = nil
slot_0_9_0 = nil
slot_0_10_0 = " cbuffer cb : register(b0) {\n float4x4 mvp;\n float2 tex;\n float time;\n float alpha;\n };\n\n struct PS_INPUT {\n float4 pos : SV_POSITION;\n float4 col : COLOR0;\n float2 uv : TEXCOORD0;\n };\n\n sampler sampler0;\n Texture2D texture0;\n\n float4 main(PS_INPUT inp) : SV_Target {\n float radius = 5.0;\n float2 inv_size = 1.0 / tex.xy;\n float weight = 0.0;\n float4 color = 0.0;\n\n for (float x = -radius; x <= radius; x += 1.0) {\n for (float y = -radius; y <= radius; y += 1.0) {\n float2 coord = inp.uv + float2(x, y) * inv_size;\n float w = exp(-((x * x + y * y) / (2.0 * radius * radius)));\n color += texture0.Sample(sampler0, coord) * w;\n weight += w;\n }\n }\n\n color /= weight;\n color.a *= inp.col.a;\n return color;\n }\n"
slot_0_11_0 = " cbuffer cb : register(b0) {\n float4x4 mvp;\n float2 tex;\n float time;\n float alpha;\n };\n\n struct PS_INPUT {\n float4 pos : SV_POSITION;\n float4 col : COLOR0;\n float2 uv : TEXCOORD0;\n };\n\n sampler sampler0;\n Texture2D texture0;\n\n float4 main(PS_INPUT inp) : SV_Target {\n float pixel_size = 1.0 / 100.0;\n inp.uv = floor(inp.uv / pixel_size) * pixel_size;\n float4 color = texture0.Sample(sampler0, inp.uv);\n return color;\n }\n"
slot_0_12_0 = " cbuffer cb : register(b0) {\n float4x4 mvp;\n float2 tex;\n float time;\n float alpha;\n };\n\n struct PS_INPUT {\n float4 pos : SV_POSITION;\n float4 col : COLOR0;\n float2 uv : TEXCOORD0;\n };\n\n float hash(float2 p) {\n return frac(sin(dot(p, float2(127.1, 311.7))) * 43758.5453);\n }\n\n float2 rand2(float2 p) {\n return frac(sin(float2(dot(p, float2(127.1, 311.7)),\n dot(p, float2(269.5, 183.3)))) * 43758.5453);\n }\n\n sampler sampler0;\n Texture2D texture0;\n\n float4 main(PS_INPUT inp) : SV_Target {\n float2 uv = inp.uv * 2.0 - 1.0;\n float brightness = 0.0;\n const int STAR_COUNT = 100;\n\n for (int i = 0; i < STAR_COUNT; i++) {\n float fi = float(i);\n float2 starSeed = float2(fi, fi * 3.1);\n float2 starPos = rand2(starSeed) * 2.0 - 1.0;\n float depth = frac(time * (0.1 + 0.01 * fi) + fi * 0.01);\n float fade = smoothstep(0.0, 0.05, depth) * smoothstep(1.0, 0.95, depth);\n float2 pos = starPos / (0.2 + depth * 1.2);\n float d = length(uv - pos);\n float size = 0.015 / (0.2 + depth * 1.2);\n brightness += fade * size / (d + 0.01);\n }\n\n brightness = saturate(brightness * 0.3);\n return float4(brightness, brightness, brightness, brightness);\n }\n"
function effect_menu()
local var_208_0 = cbx_effect_on_menu_type:GetValue():Get():GetRaw()
if not gui.IsVisible() and not cb_always_effect_on_menu:GetValue():Get() then
slot_0_7_0 = nil
slot_0_8_0 = nil
slot_0_9_0 = nil
return
end
local var_208_1 = draw.surface
local var_208_2 = var_208_1.g
local var_208_3, var_208_4 = game.engine:GetScreenSize()
var_208_2:SetTexture(nil)
if var_208_0 == 1 then
if not slot_0_7_0 then
slot_0_7_0 = draw.Shader(slot_0_10_0)
slot_0_7_0:Create()
end
var_208_2.texture = draw.adapter:GetBackBufferDownsampled()
var_208_2:SetShader(slot_0_7_0)
var_208_1:AddRectFilled(draw.Rect(0, 0, var_208_3, var_208_4), draw.Color(255, 255, 255, 255))
elseif var_208_0 == 2 then
if not slot_0_8_0 then
slot_0_8_0 = draw.Shader(slot_0_11_0)
slot_0_8_0:Create()
end
var_208_2:SetShader(slot_0_8_0)
var_208_2.texture = draw.adapter:GetBackBuffer()
var_208_1:AddRectFilled(draw.Rect(0, 0, var_208_3, var_208_4), draw.Color(255, 255, 255, 255))
elseif var_208_0 == 4 then
if not slot_0_9_0 then
slot_0_9_0 = draw.Shader(slot_0_12_0)
slot_0_9_0:Create()
end
var_208_2:SetShader(slot_0_9_0)
var_208_2.texture = draw.adapter:GetBackBuffer()
var_208_1:AddRectFilled(draw.Rect(0, 0, var_208_3, var_208_4), draw.Color(255, 255, 255, 255))
end
if var_208_0 == 1 or var_208_0 == 2 or var_208_0 == 4 then
var_208_2:SetShader(nil)
var_208_2:SetTexture(nil)
end
end
cb_effect_on_menu:AddCallback(function()
Delay(0.1, function()
if not cb_effect_on_menu:GetValue():Get() then
events.presentQueue:Remove(effect_menu)
else
events.presentQueue:Add(effect_menu)
end
end)
end)
arms_bits_path = "visuals>local>viewmodel>chams>arms"
arms_color_path = arms_bits_path .. ">color"
transparent_color = draw.Color(0, 0, 0, 0)
arms_state = {
saved_color = nil,
is_toggled = false
}
function get_arms_ctrl()
return gui.ctx:Find(arms_bits_path), gui.ctx:Find(arms_color_path)
end
function restore_arms()
local var_212_0, var_212_1 = get_arms_ctrl()
if not var_212_0 or not var_212_1 then
return
end
local var_212_2 = var_212_0:GetValue()
local var_212_3 = var_212_2:Get()
var_212_3:SetRaw(arms_state.saved_bits or 2)
var_212_2:Set(var_212_3)
var_212_0:Reset()
if arms_state.saved_color then
var_212_1:GetValue():Set(arms_state.saved_color)
var_212_1:Reset()
end
arms_state.saved_bits = nil
arms_state.saved_color = nil
arms_state.is_toggled = false
end
function set_transparent_arms()
local var_213_0, var_213_1 = get_arms_ctrl()
if not var_213_0 or not var_213_1 then
return
end
if not arms_state.saved_bits then
local var_213_2 = var_213_0:GetValue()
local var_213_3 = var_213_1:GetValue()
local var_213_4 = var_213_2:Get()
arms_state.saved_bits = var_213_4:GetRaw()
arms_state.saved_color = var_213_3:Get()
end
local var_213_5 = var_213_0:GetValue()
local var_213_6 = var_213_1:GetValue()
local var_213_7 = var_213_5:Get()
var_213_7:SetRaw(arms_state.saved_bits == 2 and 4 or 2)
var_213_5:Set(var_213_7)
var_213_0:Reset()
var_213_6:Set(transparent_color)
var_213_1:Reset()
arms_state.is_toggled = true
end
cb_transparent_arms:AddCallback(function()
Delay(0.1, function()
if not cb_transparent_arms:GetValue():Get() then
if arms_state.is_toggled then
restore_arms()
end
else
set_transparent_arms()
end
end)
end)
angle = 0
last_hit_time = 0
hit_cooldown = 1
hit_effect_duration = 1
lerp_duration = 0.2
vm_override_path = "visuals>misc>local>viewmodel override"
vm_settings_path = vm_override_path .. ">settings"
vm_keys = {
"viewmodel fov",
"offset x",
"offset y",
"offset z",
"pitch",
"yaw",
"roll"
}
function set_vm_value(arg_216_0, arg_216_1)
gui.ctx:find(vm_settings_path .. ">" .. arg_216_0):get_value():set(arg_216_1)
end
function get_vm_value(arg_217_0)
return gui.ctx:find(vm_settings_path .. ">" .. arg_217_0):get_value():get()
end
function save_vm(arg_218_0)
if arg_218_0.saved then
return
end
arg_218_0.enabled = gui.ctx:find(vm_override_path):get_value():get()
for iter_218_0, iter_218_1 in ipairs(vm_keys) do
arg_218_0[iter_218_1] = get_vm_value(iter_218_1)
end
arg_218_0.saved = true
end
function restore_vm(arg_219_0)
if not arg_219_0.saved then
return
end
gui.ctx:find(vm_override_path):get_value():set(arg_219_0.enabled)
for iter_219_0, iter_219_1 in ipairs(vm_keys) do
set_vm_value(iter_219_1, arg_219_0[iter_219_1])
end
arg_219_0.saved = false
end
function restore_vm_smooth(arg_220_0, arg_220_1, arg_220_2)
if not arg_220_0.saved then
return
end
gui.ctx:find(vm_override_path):get_value():set(true)
for iter_220_0, iter_220_1 in ipairs(vm_keys) do
set_vm_value(iter_220_1, lerp(arg_220_1[iter_220_1], arg_220_0[iter_220_1], arg_220_2))
end
end
saved_vm_hit = {
saved = false
}
saved_vm_fd = {
saved = false
}
function hit_effect_event(arg_221_0)
if arg_221_0:GetName() ~= "player_hurt" then
return
end
local var_221_0 = arg_221_0:get_pawn_from_id("attacker")
local var_221_1 = arg_221_0:get_pawn_from_id("userid")
if var_221_0 == entities.get_local_pawn() and var_221_1 then
kill_pos = var_221_1:get_abs_origin()
kill_time = game.global_vars.real_time
last_hit_time = kill_time
end
end
kill_pos = nil
kill_time = 0
viewmodel_hit_active = false
lerp_from_hit = {
started = false
}
function hit_effect(arg_222_0)
local var_222_0 = entities.GetLocalPawn()
if fd_animation_active then
return
end
config.visuals.viewmodel:SetValue(true)
local var_222_1 = game.globalVars.m_flRealTime
local var_222_2 = var_222_0:IsLeftHanded()
local var_222_3 = kill_pos and var_222_1 - kill_time < hit_effect_duration
local var_222_4 = var_222_1 - (kill_time + hit_effect_duration)
local var_222_5 = saved_vm_hit.saved and cb_smooth_return:GetValue():Get()
if var_222_3 then
viewmodel_hit_active = true
save_vm(saved_vm_hit)
local var_222_6 = var_222_0:GetEyePos()
local var_222_7 = arg_222_0:GetViewangles()
local var_222_8 = math.CalcAngle(var_222_6, kill_pos)
local var_222_9 = math.Clamp(var_222_2 and var_222_8.x + var_222_7.x - 10 or var_222_8.x - var_222_7.x, -89, 89)
local var_222_10 = math.Clamp(var_222_8.y - var_222_7.y, -180, 180)
if var_222_2 then
var_222_10 = -var_222_10
end
gui.ctx:Find(vm_override_path):GetValue():Set(true)
for iter_222_0, iter_222_1 in ipairs(vm_keys) do
set_vm_value(iter_222_1, 0)
end
set_vm_value("viewmodel fov", 90)
set_vm_value("pitch", var_222_9)
set_vm_value("yaw", var_222_10)
lerp_from_hit.started = false
elseif var_222_5 and var_222_4 >= 0 and var_222_4 < lerp_duration then
viewmodel_hit_active = true
if not lerp_from_hit.started then
for iter_222_2, iter_222_3 in ipairs(vm_keys) do
lerp_from_hit[iter_222_3] = get_vm_value(iter_222_3)
end
lerp_from_hit.started = true
end
restore_vm_smooth(saved_vm_hit, lerp_from_hit, var_222_4 / lerp_duration)
else
restore_vm(saved_vm_hit)
kill_pos = nil
viewmodel_hit_active = false
end
end
cb_viewmodel_hit_effect:AddCallback(function()
Delay(0.1, function()
if not cb_viewmodel_hit_effect:GetValue():Get() then
events.event:Remove(hit_effect_event)
events.createMove:Remove(hit_effect)
restore_vm(saved_vm_hit)
viewmodel_hit_active = false
else
events.event:Add(hit_effect_event)
events.createMove:Add(hit_effect)
end
end)
end)
fd_animation_active = false
fd_animation_time = 0
fd_animation_direction = 1
fd_animation_min = -20
fd_animation_duration = 0.15
fd_initial_offset = nil
function fd_animation(arg_225_0)
if not config.misc.duck_peek_control:GetValue():Get() or not config.rage.aimbot:GetValue():Get() then
fd_animation_active = false
restore_vm(saved_vm_fd)
return
end
if game.globalVars.m_flRealTime - last_hit_time < hit_cooldown then
fd_animation_active = false
restore_vm(saved_vm_fd)
return
end
local var_225_0 = game.globalVars.m_flRealTime
if not fd_animation_active then
fd_animation_active = true
fd_animation_time = var_225_0
fd_animation_direction = 1
save_vm(saved_vm_fd)
fd_initial_offset = saved_vm_fd["offset z"]
end
local var_225_1 = var_225_0 - fd_animation_time
if var_225_1 >= fd_animation_duration then
fd_animation_direction = -fd_animation_direction
fd_animation_time = var_225_0
var_225_1 = 0
end
local var_225_2 = var_225_1 / fd_animation_duration
local var_225_3 = fd_animation_direction == 1 and lerp(fd_initial_offset, fd_animation_min, var_225_2) or lerp(fd_animation_min, fd_initial_offset, var_225_2)
gui.ctx:Find(vm_override_path):GetValue():Set(true)
set_vm_value("offset z", var_225_3)
end
cb_fd_animation:AddCallback(function()
Delay(0.1, function()
if not cb_fd_animation:GetValue():Get() then
events.createMove:Remove(fd_animation)
fd_animation_active = false
restore_vm(saved_vm_fd)
else
events.createMove:Add(fd_animation)
end
end)
end)
visible_chams_path = "visuals>local>model>chams>visible"
visible_chams_color_path = visible_chams_path .. ">color"
attachments_chams_path = "visuals>local>model>chams>attachments"
attachments_chams_color_path = attachments_chams_path .. ">color"
original_values = {
visible = {
color = nil,
bits = nil
},
attachments = {
color = nil,
bits = nil
}
}
is_chams_overridden = false
last_override_reason = nil
grenade_classes = {
C_HEGrenade = true,
C_SmokeGrenade = true,
C_Flashbang = true,
C_BaseCSGrenade = true,
C_DecoyGrenade = true,
C_IncendiaryGrenade = true,
C_MolotovGrenade = true
}
mode_mapping = {
16,
2,
nil,
32,
nil,
nil,
nil,
4,
nil,
nil,
nil,
nil,
nil,
nil,
nil,
8
}
function get_chams_ctrl(arg_228_0, arg_228_1)
return gui.ctx:Find(arg_228_0), gui.ctx:Find(arg_228_1)
end
function update_chams(arg_229_0, arg_229_1, arg_229_2, arg_229_3)
local var_229_0, var_229_1 = get_chams_ctrl(arg_229_0, arg_229_1)
if not var_229_0 or not var_229_1 then
return
end
local var_229_2 = arg_229_0:match("attachments") and "attachments" or "visible"
local var_229_3 = var_229_0:GetValue()
local var_229_4 = var_229_3:Get()
local var_229_5 = var_229_4:GetRaw()
if arg_229_2 then
if not original_values[var_229_2].bits then
original_values[var_229_2].bits = var_229_5
original_values[var_229_2].color = var_229_1:GetValue():Get()
end
local var_229_6 = cbx_transparency_mode:GetValue():Get():GetRaw()
local var_229_7 = mode_mapping[var_229_6] or var_229_6
var_229_4:SetRaw(var_229_7)
var_229_3:Set(var_229_4)
var_229_0:Reset()
if arg_229_3 then
var_229_1:GetValue():Set(arg_229_3)
var_229_1:Reset()
end
elseif original_values[var_229_2].bits then
var_229_4:SetRaw(original_values[var_229_2].bits)
var_229_3:Set(var_229_4)
var_229_0:Reset()
if original_values[var_229_2].color then
var_229_1:GetValue():Set(original_values[var_229_2].color)
var_229_1:Reset()
end
original_values[var_229_2].bits = nil
original_values[var_229_2].color = nil
end
end
function update_all_chams(arg_230_0, arg_230_1)
update_chams(visible_chams_path, visible_chams_color_path, arg_230_0, arg_230_1)
update_chams(attachments_chams_path, attachments_chams_color_path, arg_230_0, arg_230_1)
end
function transparency()
local var_231_0 = entities.GetLocalPawn():GetActiveWeapon()
if not var_231_0 then
if is_chams_overridden then
is_chams_overridden = false
last_override_reason = nil
update_all_chams(false)
end
return
end
local var_231_1 = var_231_0:GetClassName()
if not var_231_1 then
return
end
local var_231_2
local var_231_3
local var_231_4 = cbx_transparency_enable:GetValue():Get():GetRaw()
if grenade_classes[var_231_1] and is_enabled(var_231_4, 2) then
var_231_2 = "grenade"
var_231_3 = clr_with_grenade_color:GetValue():Get()
elseif is_zoom() and is_enabled(var_231_4, 1) then
var_231_2 = "scope"
var_231_3 = clr_with_scope_color:GetValue():Get()
end
if var_231_2 then
if not is_chams_overridden then
is_chams_overridden = true
end
last_override_reason = var_231_2
update_all_chams(true, var_231_3)
elseif is_chams_overridden then
is_chams_overridden = false
last_override_reason = nil
update_all_chams(false)
end
end
cb_transparency:AddCallback(function()
Delay(0.1, function()
if not cb_transparency:GetValue():Get() then
events.createMove:Remove(transparency)
if is_chams_overridden then
is_chams_overridden = false
last_override_reason = nil
update_all_chams(false)
end
else
events.createMove:Add(transparency)
end
end)
end)
cb_debounce_zoom:AddCallback(function()
Delay(0.1, function()
game.engine:ClientCmd(string.format("cl_debounce_zoom %d", cb_debounce_zoom:GetValue():Get() and 0 or 1))
end)
end)
function animation_break()
local var_236_0 = entities.GetLocalPawn()
if not var_236_0 or not var_236_0:IsAlive() then
return
end
local var_236_1 = sl_animation_x:GetValue():Get()
local var_236_2 = sl_animation_z:GetValue():Get()
local var_236_3 = cb_animation_spin:GetValue():Get() and (game.globalVars.m_flRealTime * 600 % 360 - 360) % 360 - 180 or sl_animation_y:GetValue():Get()
var_236_0:SetAbsAngles(vector(var_236_1, var_236_3, var_236_2))
end
cb_animation_break:AddCallback(function()
Delay(0.1, function()
if not cb_animation_break:GetValue():Get() then
events.overrideView:Remove(animation_break)
else
events.overrideView:Add(animation_break)
end
end)
end)
circle_params = {
rainbow_effect = false,
radius = 1,
life_time = 1,
interval = 1,
draw_trails = false,
color = draw.Color(255, 255, 255)
}
circles = {}
TRAIL_MODES = {
FILLED = 1,
PILL = 4,
LINE = 2
}
function get_rainbow_color(arg_239_0)
local var_239_0 = arg_239_0 * 0.5
return draw.Color(math.sin(var_239_0) * 127 + 128, math.sin(var_239_0 + 2) * 127 + 128, math.sin(var_239_0 + 4) * 127 + 128)
end
function is_on_screen(arg_240_0, arg_240_1)
if not arg_240_0 then
return false
end
arg_240_1 = arg_240_1 or 0
local var_240_0, var_240_1 = game.engine:GetScreenSize()
if not var_240_0 or not var_240_1 then
return false
end
return arg_240_0.x >= -arg_240_1 and arg_240_0.x <= var_240_0 + arg_240_1 and arg_240_0.y >= -arg_240_1 and arg_240_0.y <= var_240_1 + arg_240_1
end
draw_handlers = {
[TRAIL_MODES.FILLED] = function(arg_241_0, arg_241_1, arg_241_2, arg_241_3)
arg_241_0:AddCircleFilled(draw.Vec2(arg_241_1.x, arg_241_1.y), arg_241_2, arg_241_3, 36, 1)
end,
[TRAIL_MODES.LINE] = function(arg_242_0, arg_242_1, arg_242_2, arg_242_3, arg_242_4)
if not arg_242_4 then
return
end
local var_242_0 = math.WorldToScreen(arg_242_4.position)
if var_242_0 and is_on_screen(var_242_0, 100) then
arg_242_0:AddLine(draw.Vec2(arg_242_1.x, arg_242_1.y), draw.Vec2(var_242_0.x, var_242_0.y), arg_242_3, arg_242_2)
end
end,
[TRAIL_MODES.PILL] = function(arg_243_0, arg_243_1, arg_243_2, arg_243_3, arg_243_4)
if not arg_243_4 then
return
end
local var_243_0 = math.WorldToScreen(arg_243_4.position)
if var_243_0 and is_on_screen(var_243_0, 100) then
arg_243_0:AddPillMulticolor(draw.Vec2(arg_243_1.x, arg_243_1.y), draw.Vec2(var_243_0.x, var_243_0.y), arg_243_2 * 1.2, arg_243_2 * 1.2, {
arg_243_3,
draw.Color(arg_243_3:GetR(), arg_243_3:GetG(), arg_243_3:GetB(), 0)
}, 24)
end
end
}
function trails()
local var_244_0 = entities.GetLocalPawn()
if not game.engine:InGame() or not game.engine:IsConnected() or not var_244_0 or not var_244_0:IsAlive() then
circles = {}
return
end
local var_244_1 = cbx_trails_type:GetValue():Get():GetRaw()
local var_244_2 = sl_lifetime:GetValue():Get() * 0.5
local var_244_3 = sl_radius:GetValue():Get()
local var_244_4 = sl_interval:GetValue():Get() * 1e-05
local var_244_5 = clr_circle_color:GetValue():Get()
local var_244_6 = cb_rainbow_effect:GetValue():Get()
circle_params.life_time = var_244_2
circle_params.radius = var_244_3
circle_params.interval = var_244_4
local var_244_7 = game.engine:GetLastTimestamp()
local var_244_8 = var_244_0:GetAbsOrigin()
local var_244_9 = var_244_0:GetAbsVelocity()
if var_244_9.x * var_244_9.x + var_244_9.y * var_244_9.y + var_244_9.z * var_244_9.z > 4 and (not circles.last_draw_time or var_244_4 <= var_244_7 - circles.last_draw_time) then
circles[#circles + 1] = {
time_created = var_244_7,
position = var_244_8,
initial_radius = var_244_3,
color = var_244_6 and get_rainbow_color(var_244_7) or var_244_5
}
circles.last_draw_time = var_244_7
end
if #circles == 0 then
return
end
local var_244_10 = draw.surface
var_244_10.font = draw.fonts.gui_main
var_244_10.g:SetTexture(nil)
local var_244_11 = draw_handlers[var_244_1]
if not var_244_11 then
return
end
local var_244_12 = 1 / var_244_2
for iter_244_0 = #circles, 1, -1 do
local var_244_13 = circles[iter_244_0]
if not var_244_13 then
-- block empty
else
local var_244_14 = var_244_7 - var_244_13.time_created
if var_244_2 < var_244_14 then
table.remove(circles, iter_244_0)
else
local var_244_15 = math.WorldToScreen(var_244_13.position)
if var_244_15 and is_on_screen(var_244_15, 100) then
local var_244_16 = 1 - var_244_14 * var_244_12
local var_244_17 = var_244_13.color:ModA(var_244_16)
local var_244_18 = var_244_13.initial_radius * var_244_16
if var_244_1 == TRAIL_MODES.FILLED then
var_244_11(var_244_10, var_244_15, var_244_18, var_244_17)
else
var_244_11(var_244_10, var_244_15, var_244_18, var_244_17, circles[iter_244_0 - 1])
end
end
end
end
end
end
cb_trails:AddCallback(function()
Delay(0.1, function()
if not cb_trails:GetValue():Get() then
events.presentQueue:Remove(trails)
else
events.presentQueue:Add(trails)
end
end)
end)
sl_gamma:AddCallback(function()
Delay(0.1, function()
game.engine:ClientCmd("r_fullscreen_gamma " .. sl_gamma:GetValue():Get() / 10)
end)
end)
original_bits_shadows = nil
was_enabled_shadows = false
removals_ctrl = gui.ctx:Find("visuals>world>environment>removals")
cb_turn_off_shadow:AddCallback(function()
Delay(0.1, function()
if not cb_turn_off_shadow:GetValue():Get() and was_enabled_shadows and removals_ctrl and original_bits_shadows then
local var_250_0 = removals_ctrl:GetValue()
local var_250_1 = var_250_0:Get()
var_250_1:SetRaw(original_bits_shadows)
var_250_0:Set(var_250_1)
removals_ctrl:Reset()
original_bits_shadows = nil
end
if cb_turn_off_shadow:GetValue():Get() and not was_enabled_shadows and removals_ctrl then
local var_250_2 = removals_ctrl:GetValue()
local var_250_3 = var_250_2:Get()
local var_250_4 = var_250_3:GetRaw()
original_bits_shadows = var_250_4
local var_250_5 = var_250_4 + 8
var_250_3:SetRaw(var_250_5)
var_250_2:Set(var_250_3)
removals_ctrl:Reset()
end
was_enabled_shadows = cb_turn_off_shadow:GetValue():Get()
end)
end)
recent_bullet_impacts = {}
hit_markers = {}
max_bullet_history = 30
mods.events:AddListener("bullet_impact")
mods.events:AddListener("player_hurt")
events.event:add(function(arg_251_0)
if arg_251_0:GetName() == "bullet_impact" and cbx_hitmarkers:GetValue():Get():GetRaw() ~= 0 then
local var_251_0 = arg_251_0:GetPawnFromId("userid")
if var_251_0 and var_251_0 == entities.GetLocalPawn() then
table.insert(recent_bullet_impacts, 1, {
x = arg_251_0:GetFloat("x"),
y = arg_251_0:GetFloat("y"),
z = arg_251_0:GetFloat("z"),
time = game.globalVars.m_flRealTime
})
if #recent_bullet_impacts > max_bullet_history then
table.remove(recent_bullet_impacts, max_bullet_history + 1)
end
end
end
if arg_251_0:GetName() == "player_hurt" and cbx_hitmarkers:GetValue():Get():GetRaw() ~= 0 then
local var_251_1 = arg_251_0:GetController("attacker")
local var_251_2 = entities.GetLocalController()
if var_251_1 and var_251_2 and var_251_1 == var_251_2 then
local var_251_3 = arg_251_0:GetController("userid")
if var_251_3 then
local var_251_4 = var_251_3:GetPawn()
if var_251_4 and #recent_bullet_impacts > 0 then
local var_251_5 = var_251_4:GetAbsOrigin()
local var_251_6
local var_251_7 = math.huge
for iter_251_0, iter_251_1 in ipairs(recent_bullet_impacts) do
local var_251_8 = var_251_5:Dist(Vector(iter_251_1.x, iter_251_1.y, iter_251_1.z))
if var_251_8 < var_251_7 then
var_251_7 = var_251_8
var_251_6 = iter_251_1
end
end
if var_251_6 then
table.insert(hit_markers, {
x = var_251_6.x,
y = var_251_6.y,
z = var_251_6.z,
time = game.globalVars.m_flRealTime,
damage = arg_251_0:GetInt("dmg_health")
})
end
end
end
end
end
end)
function cleanup_old_data()
local var_252_0 = game.globalVars.m_flRealTime
local var_252_1 = sl_hitmarkers_lifetime:GetValue():Get() / 10
for iter_252_0 = #recent_bullet_impacts, 1, -1 do
if var_252_0 - recent_bullet_impacts[iter_252_0].time > 0.01 then
table.remove(recent_bullet_impacts, iter_252_0)
end
end
for iter_252_1 = #hit_markers, 1, -1 do
if var_252_1 < var_252_0 - hit_markers[iter_252_1].time then
table.remove(hit_markers, iter_252_1)
end
end
end
function calculate_alpha(arg_253_0, arg_253_1)
if arg_253_0 < arg_253_1 then
return 255
else
local var_253_0 = 1 - (arg_253_0 - arg_253_1) / (1 - arg_253_1)
return 255 * math.max(0, var_253_0)
end
end
function calculate_fade_alpha(arg_254_0, arg_254_1)
if arg_254_0 < arg_254_1 then
return 255 * (1 - arg_254_0 * 2)
else
return 255 * (1 - (arg_254_0 - arg_254_1) * 2)
end
end
function draw_type1(arg_255_0, arg_255_1, arg_255_2, arg_255_3)
local var_255_0 = calculate_fade_alpha(arg_255_1, 0.5)
local var_255_1 = arg_255_2:ModA(var_255_0 / 255)
local var_255_2 = arg_255_1 > 0.5
local var_255_3 = (var_255_2 and 10 or 20) * arg_255_3
local var_255_4 = (var_255_2 and 4 or 8) * arg_255_3
local var_255_5 = (var_255_2 and 1 or 2) * arg_255_3
local var_255_6 = var_255_3 / 2
local var_255_7 = arg_255_0.x
local var_255_8 = arg_255_0.y
local var_255_9 = draw.surface
var_255_9:AddLine(draw.Vec2(var_255_7, var_255_8 - var_255_6), draw.Vec2(var_255_7, var_255_8 - var_255_6 + var_255_4), var_255_1, var_255_5)
var_255_9:AddLine(draw.Vec2(var_255_7, var_255_8 + var_255_6), draw.Vec2(var_255_7, var_255_8 + var_255_6 - var_255_4), var_255_1, var_255_5)
var_255_9:AddLine(draw.Vec2(var_255_7 - var_255_6, var_255_8), draw.Vec2(var_255_7 - var_255_6 + var_255_4, var_255_8), var_255_1, var_255_5)
var_255_9:AddLine(draw.Vec2(var_255_7 + var_255_6, var_255_8), draw.Vec2(var_255_7 + var_255_6 - var_255_4, var_255_8), var_255_1, var_255_5)
end
function draw_type2(arg_256_0, arg_256_1, arg_256_2, arg_256_3)
local var_256_0 = 1
if arg_256_1 > 0.8 then
var_256_0 = 1 - (arg_256_1 - 0.8) / 0.3
end
local var_256_1 = 255 * var_256_0
local var_256_2 = 40 * var_256_0
local var_256_3 = arg_256_2:ModA(var_256_1 / 255)
local var_256_4 = arg_256_2:ModA(var_256_2 / 255)
local var_256_5 = 8 * arg_256_3
local var_256_6 = 10 * arg_256_3 / 2
local var_256_7 = arg_256_0.x
local var_256_8 = arg_256_0.y
local var_256_9 = draw.surface
var_256_9:AddLineMulticolor(draw.Vec2(var_256_7 - var_256_5, var_256_8 - var_256_5), draw.Vec2(var_256_7 - var_256_5 + var_256_6, var_256_8 - var_256_5 + var_256_6), var_256_4, var_256_3, arg_256_3)
var_256_9:AddLineMulticolor(draw.Vec2(var_256_7 + var_256_5, var_256_8 - var_256_5), draw.Vec2(var_256_7 + var_256_5 - var_256_6, var_256_8 - var_256_5 + var_256_6), var_256_4, var_256_3, arg_256_3)
var_256_9:AddLineMulticolor(draw.Vec2(var_256_7 - var_256_5, var_256_8 + var_256_5), draw.Vec2(var_256_7 - var_256_5 + var_256_6, var_256_8 + var_256_5 - var_256_6), var_256_4, var_256_3, arg_256_3)
var_256_9:AddLineMulticolor(draw.Vec2(var_256_7 + var_256_5, var_256_8 + var_256_5), draw.Vec2(var_256_7 + var_256_5 - var_256_6, var_256_8 + var_256_5 - var_256_6), var_256_4, var_256_3, arg_256_3)
end
function draw_type3(arg_257_0, arg_257_1, arg_257_2, arg_257_3, arg_257_4)
local var_257_0 = calculate_alpha(arg_257_1, 0.6)
if var_257_0 <= 0 then
return
end
if not arg_257_4.text_offset_x then
arg_257_4.text_offset_x = (math.random() * 30 - 15) * arg_257_3
end
local var_257_1 = -arg_257_1 * 20 * arg_257_3
local var_257_2 = tostring(arg_257_4.damage)
local var_257_3 = arg_257_2:ModA(var_257_0 / 255)
local var_257_4 = draw.surface
var_257_4.font = draw.fonts.gui_main_shadow
local var_257_5 = var_257_4.font:GetTextSize(var_257_2)
local var_257_6 = draw.Vec2(arg_257_0.x + arg_257_4.text_offset_x - var_257_5.x * arg_257_3 / 2, arg_257_0.y + var_257_1 - var_257_5.y * arg_257_3 / 2)
var_257_4:AddText(var_257_6, var_257_2, var_257_3)
end
function init_particles(arg_258_0, arg_258_1, arg_258_2)
if arg_258_0.particles then
return
end
arg_258_0.particles = {}
local var_258_0 = math.random(7, 12)
for iter_258_0 = 1, var_258_0 do
arg_258_0.particles[iter_258_0] = {
radius = 1,
angle = math.random() * math.pi * 2,
horizontal_speed = math.random(20, 40) * arg_258_1,
vertical_speed_up = math.random(30, 60) * arg_258_1,
gravity = math.random(120, 170) * arg_258_1,
lifetime = arg_258_2 * 0.6,
delay = math.random() * 0.1 * arg_258_2,
color_mult = math.random(8, 12) / 10,
created_time = arg_258_0.time
}
end
end
function draw_type4(arg_259_0, arg_259_1, arg_259_2, arg_259_3, arg_259_4, arg_259_5, arg_259_6)
init_particles(arg_259_5, arg_259_4, arg_259_6)
local var_259_0 = 2 * arg_259_4
local var_259_1 = var_259_0 - (var_259_0 - var_259_0 * 0.3) * arg_259_2
local var_259_2 = math.floor(arg_259_3:GetA() * (1 - arg_259_2))
local var_259_3 = arg_259_0.x
local var_259_4 = arg_259_0.y
local var_259_5 = draw.surface
local var_259_6 = var_259_1 + 2 * arg_259_4 * (1 - arg_259_2 * 0.5)
local var_259_7 = math.floor(var_259_2 * (1 - arg_259_2))
var_259_5:AddCircleFilledMulticolor(draw.Vec2(var_259_3, var_259_4), var_259_6, {
draw.Color(arg_259_3:GetR(), arg_259_3:GetG(), arg_259_3:GetB(), var_259_7),
draw.Color(arg_259_3:GetR(), arg_259_3:GetG(), arg_259_3:GetB(), 0)
})
for iter_259_0, iter_259_1 in ipairs(arg_259_5.particles) do
local var_259_8 = arg_259_1 - iter_259_1.delay
if var_259_8 < 0 then
-- block empty
else
local var_259_9 = math.min(1, var_259_8 / iter_259_1.lifetime)
local var_259_10 = iter_259_1.horizontal_speed * var_259_8
local var_259_11 = math.cos(iter_259_1.angle) * var_259_10
local var_259_12 = iter_259_1.vertical_speed_up * var_259_8 - 0.5 * iter_259_1.gravity * var_259_8 * var_259_8
local var_259_13 = var_259_3 + var_259_11
local var_259_14 = var_259_4 - var_259_12
local var_259_15 = arg_259_3:GetA() * math.max(0, 1 - var_259_9)
if var_259_15 <= 0 then
-- block empty
else
local var_259_16 = math.min(arg_259_3:GetR() * iter_259_1.color_mult, 255)
local var_259_17 = math.min(arg_259_3:GetG() * iter_259_1.color_mult, 255)
local var_259_18 = math.min(arg_259_3:GetB() * iter_259_1.color_mult, 255)
var_259_5:AddCircleFilled(draw.Vec2(var_259_13, var_259_14), math.max(0.75, iter_259_1.radius * (1 - var_259_9 * 0.3)), draw.Color(var_259_16, var_259_17, var_259_18, var_259_15))
end
end
end
end
function hitmarkers()
if not game.engine:InGame() or not game.engine:IsConnected() then
return
end
local var_260_0 = cbx_hitmarkers:GetValue():Get():GetRaw()
cleanup_old_data()
local var_260_1 = sl_hitmarkers_lifetime:GetValue():Get() / 10
local var_260_2 = game.globalVars.m_flRealTime
local var_260_3 = draw.GetScale()
draw.surface.g.antiAlias = true
local var_260_4 = clr_hitmarkers_color:GetValue():Get()
local var_260_5 = is_enabled(var_260_0, 1)
local var_260_6 = is_enabled(var_260_0, 2)
local var_260_7 = is_enabled(var_260_0, 4)
local var_260_8 = is_enabled(var_260_0, 8)
for iter_260_0 = #hit_markers, 1, -1 do
local var_260_9 = hit_markers[iter_260_0]
local var_260_10 = var_260_2 - var_260_9.time
if var_260_1 < var_260_10 then
table.remove(hit_markers, iter_260_0)
else
local var_260_11 = math.WorldToScreen(Vector(var_260_9.x, var_260_9.y, var_260_9.z), false)
if not var_260_11 then
-- block empty
else
local var_260_12 = var_260_10 / var_260_1
local var_260_13 = {
x = var_260_11.x,
y = var_260_11.y
}
if var_260_5 then
draw_type1(var_260_13, var_260_12, var_260_4, var_260_3)
end
if var_260_6 then
draw_type2(var_260_13, var_260_12, var_260_4, var_260_3)
end
if var_260_7 then
draw_type3(var_260_13, var_260_12, var_260_4, var_260_3, var_260_9)
end
if var_260_8 then
draw_type4(var_260_13, var_260_10, var_260_12, var_260_4, var_260_3, var_260_9, var_260_1)
end
end
end
end
end
cbx_hitmarkers:AddCallback(function()
Delay(0.1, function()
if cbx_hitmarkers:GetValue():Get():GetRaw() == 0 then
events.presentQueue:Remove(hitmarkers)
else
events.presentQueue:Add(hitmarkers)
end
end)
end)
hitgroup = {
[0] = "generic",
"head",
"chest",
"stomach",
"left arm",
"right arm",
"left leg",
"right leg",
"neck",
nil,
"gear"
}
setmetatable(hitgroup, {
__index = function(arg_263_0, arg_263_1)
return arg_263_1
end
})
normal_hitlogs = {}
left_top_hitlogs = {}
got_hitlogs = {}
hitlogs_last = {
time = 0,
hitbox = 0,
damage = 0
}
preview_nl_hitlogs = {}
preview_gs_hitlogs = {}
preview_ft_hitlogs = {}
function parse_text_segments(arg_264_0)
local var_264_0 = {}
local var_264_1 = 1
local var_264_2 = false
for iter_264_0 = 1, #arg_264_0 do
local var_264_3 = arg_264_0:sub(iter_264_0, iter_264_0)
if var_264_3 == "\x01" or var_264_3 == "\x02" then
if var_264_1 < iter_264_0 then
table.insert(var_264_0, {
text = arg_264_0:sub(var_264_1, iter_264_0 - 1),
colored = var_264_2
})
end
var_264_1 = iter_264_0 + 1
var_264_2 = var_264_3 == "\x01"
end
end
if var_264_1 <= #arg_264_0 then
table.insert(var_264_0, {
text = arg_264_0:sub(var_264_1),
colored = var_264_2
})
end
return var_264_0
end
function calculate_hitlog_width(arg_265_0, arg_265_1, arg_265_2)
local var_265_0 = draw.surface
var_265_0.font = arg_265_2
local var_265_1 = 24 * arg_265_1
for iter_265_0, iter_265_1 in ipairs(arg_265_0) do
if iter_265_1.text ~= "" then
var_265_1 = var_265_1 + var_265_0.font:GetTextSize(iter_265_1.text, true).x
end
end
return var_265_1
end
mods.events:AddListener("player_hurt")
events.event:add(function(arg_266_0)
if arg_266_0:GetName() ~= "player_hurt" then
return
end
if not cb_screen_logs:GetValue():Get() then
return
end
local var_266_0 = cbx_screen_logs_type:GetValue():Get():GetRaw()
local var_266_1 = entities.GetLocalController()
if not var_266_1 then
return
end
local var_266_2 = arg_266_0:GetController("attacker")
local var_266_3 = arg_266_0:GetController("userid")
if not var_266_2 or not var_266_3 then
return
end
local var_266_4 = arg_266_0:GetInt("dmg_health")
local var_266_5 = arg_266_0:GetInt("hitgroup")
local var_266_6 = arg_266_0:GetInt("health")
local var_266_7 = game.globalVars.m_flCurTime
if var_266_4 == 0 then
return
end
if var_266_2 == var_266_1 and var_266_3 ~= var_266_1 then
if var_266_4 == hitlogs_last.damage and var_266_5 == hitlogs_last.hitbox and var_266_7 - hitlogs_last.time < 0.01 then
return
end
hitlogs_last = {
damage = var_266_4,
hitbox = var_266_5,
time = var_266_7
}
end
local var_266_8 = var_266_3 == var_266_1
local var_266_9 = var_266_2 == var_266_1
if not var_266_8 and (not var_266_9 or not var_266_3:IsEnemy()) then
return
end
local var_266_10
local var_266_11 = var_266_0 == 2 and "left" or "remaining"
if var_266_8 then
if var_266_9 then
var_266_10 = string.format("Hurt \x01yourself\x02 for \x01%d\x02 damage (%d health %s)", var_266_4, var_266_6, var_266_11)
else
var_266_10 = string.format("Got hit by \x01%s\x02 in the \x01%s\x02 for \x01%d\x02 damage (%d health %s)", var_266_2:GetName() or "unknown", hitgroup[var_266_5], var_266_4, var_266_6, var_266_11)
end
else
var_266_10 = string.format("Hit \x01%s\x02 in the \x01%s\x02 for \x01%d\x02 damage (%d health %s)", var_266_3:GetName() or "unknown", hitgroup[var_266_5], var_266_4, var_266_6, var_266_11)
end
local var_266_12
local var_266_13
local var_266_14
if var_266_0 == 2 then
if var_266_8 then
var_266_12 = got_hitlogs
else
var_266_12 = left_top_hitlogs
end
var_266_14 = 12
elseif var_266_0 == 4 then
var_266_12 = normal_hitlogs
var_266_14 = 12
else
var_266_12 = normal_hitlogs
var_266_14 = 8
end
table.insert(var_266_12, {
state = "fade_in",
alpha = 0,
text = var_266_10,
time = var_266_7,
is_got_hit = var_266_8
})
if var_266_14 < #var_266_12 then
table.remove(var_266_12, 1)
end
local var_266_15 = var_266_0 == 1 and "[gamesense]" or var_266_0 == 2 and "neverlose ·" or "HURT.log |"
local var_266_16 = var_266_10:gsub("[\x01\x02]", ""):gsub("\"", "\\\"")
game.engine:ClientCmd(string.format("echoln \"%s %s\"", var_266_15, var_266_16))
end)
nl_hitmarker_icon_texture = nil
function load_nl_hitmarker_icon()
if not nl_hitmarker_icon_texture then
local var_267_0 = resource_path .. "/icons/other/hitmarker.png"
nl_hitmarker_icon_texture = safe_load_texture(var_267_0)
end
return nl_hitmarker_icon_texture
end
load_nl_hitmarker_icon()
nl_gotmarker_icon_texture = nil
function load_nl_gotmarker_icon()
if not nl_gotmarker_icon_texture then
local var_268_0 = resource_path .. "/icons/other/gotmarker.png"
nl_gotmarker_icon_texture = safe_load_texture(var_268_0)
end
return nl_gotmarker_icon_texture
end
load_nl_gotmarker_icon()
WIDGET_WIDTH = 200
WIDGET_HEIGHT = 30
LOG_HEIGHT = 20
LOG_SPACING = 6
FADE_DURATION = 0.5
SLIDE_SPEED = 30
FADE_IN_SPEED = 1275
BG_PADDING = 5
TEXT_OFFSET_X = 12
EDGE_FACTOR = 0.1
widget_header = nil
widget_created = false
logs_base_y = 0
saved_widget_x = 400
saved_widget_y = 400
last_logs_center_x = nil
function create_header_widget()
if widget_header and widget_created then
return widget_header
end
if widget_header and widget_header.Remove then
widget_header:Remove()
widget_header = nil
end
local var_269_0, var_269_1 = game.engine:GetScreenSize()
local var_269_2 = draw.GetScale()
local var_269_3 = saved_widget_x or 400
local var_269_4 = saved_widget_y or 400
local var_269_5 = gui.LuaControlProto()
local var_269_6 = gui.LuaWidgetControl("hitlog-header", var_269_5, draw.Vec2(var_269_3, var_269_4), draw.Vec2(WIDGET_WIDTH, WIDGET_HEIGHT))
var_269_6:ToggleVisibility(true)
gui.ctx:Add(var_269_6)
widget_header = var_269_6
widget_created = true
return var_269_6
end
function update_logs_position()
if not widget_header or not widget_header.isVisible then
if saved_widget_y then
logs_base_y = saved_widget_y + WIDGET_HEIGHT + 5 * draw.GetScale()
return true
end
logs_base_y = 0
return false
end
local var_270_0 = widget_header.GetPosAbs and widget_header:GetPosAbs() or draw.Vec2(saved_widget_x or 400, saved_widget_y or 400)
if var_270_0 then
saved_widget_x, saved_widget_y = var_270_0.x, var_270_0.y
end
logs_base_y = (saved_widget_y or 400) + WIDGET_HEIGHT + 5 * draw.GetScale()
return true
end
function render_hitlog_box(arg_271_0, arg_271_1, arg_271_2, arg_271_3, arg_271_4, arg_271_5, arg_271_6, arg_271_7, arg_271_8)
local var_271_0 = draw.surface
var_271_0.font = arg_271_8
local var_271_1 = 24 * arg_271_7
local var_271_2 = 0
for iter_271_0, iter_271_1 in ipairs(arg_271_2) do
if iter_271_1.text ~= "" then
local var_271_3 = var_271_0.font:GetTextSize(iter_271_1.text, true)
var_271_1 = var_271_1 + var_271_3.x
var_271_2 = math.max(var_271_2, var_271_3.y)
end
end
local var_271_4 = LOG_HEIGHT * arg_271_7
local var_271_5 = BG_PADDING * arg_271_7
local var_271_6 = var_271_1 + var_271_5 * 2
local var_271_7 = arg_271_0 - var_271_5
local var_271_8 = var_271_6 * EDGE_FACTOR
for iter_271_2 = 0, var_271_6 do
local var_271_9
if iter_271_2 < var_271_8 then
var_271_9 = 70 * (iter_271_2 / var_271_8)
elseif iter_271_2 > var_271_6 - var_271_8 then
var_271_9 = 70 * ((var_271_6 - iter_271_2) / var_271_8)
else
var_271_9 = 70
end
var_271_0:add_rect_filled(draw.Rect(var_271_7 + iter_271_2, arg_271_1, var_271_7 + iter_271_2 + 1, arg_271_1 + var_271_4), draw.Color(0, 0, 0, math.floor(var_271_9 * arg_271_3 / 255)))
end
local var_271_10 = arg_271_0 + TEXT_OFFSET_X * arg_271_7
local var_271_11 = arg_271_1 + (var_271_4 - var_271_2) / 2
for iter_271_3, iter_271_4 in ipairs(arg_271_2) do
if iter_271_4.text ~= "" then
local var_271_12
if iter_271_4.colored then
local var_271_13 = arg_271_6 and arg_271_5 or arg_271_4
var_271_12 = draw.Color(var_271_13:GetR(), var_271_13:GetG(), var_271_13:GetB(), math.floor(arg_271_3))
else
var_271_12 = draw.Color(255, 255, 255, math.floor(arg_271_3))
end
var_271_0:AddText(draw.Vec2(var_271_10, var_271_11), iter_271_4.text, var_271_12)
var_271_10 = var_271_10 + var_271_0.font:GetTextSize(iter_271_4.text, true).x
end
end
return var_271_1
end
function create_preview_log(arg_272_0, arg_272_1)
return {
anim_alpha = 0,
is_preview = true,
life_extension = 9999,
anim_x = 0,
anim_initialized = false,
alpha = 0,
state = "fade_in",
text = arg_272_0,
time = game.globalVars.m_flCurTime,
is_got_hit = arg_272_1
}
end
function setup_preview_logs()
if #preview_gs_hitlogs == 0 then
preview_gs_hitlogs = {
create_preview_log(string.format("Hit \x01%s\x02 in the \x01%s\x02 for \x01%d\x02 damage (%d health remaining)", "enemy", "head", 88, 12), false),
create_preview_log(string.format("Got hit by \x01%s\x02 in the \x01%s\x02 for \x01%d\x02 damage (%d health remaining)", "enemy", "chest", 34, 66), true)
}
end
end
function animate_value(arg_274_0, arg_274_1, arg_274_2, arg_274_3)
if math.abs(arg_274_0 - arg_274_1) <= 0.1 then
return arg_274_1
end
return arg_274_0 + (arg_274_1 - arg_274_0) * arg_274_3 * arg_274_2
end
function update_log_animation(arg_275_0, arg_275_1, arg_275_2, arg_275_3)
arg_275_0.target_y = arg_275_1
arg_275_0.target_x = arg_275_2
arg_275_0.anim_y = animate_value(arg_275_0.anim_y, arg_275_1, SLIDE_SPEED, arg_275_3)
arg_275_0.anim_x = animate_value(arg_275_0.anim_x, arg_275_2, SLIDE_SPEED, arg_275_3)
end
function render_skeet_logs()
if logs_base_y == 0 then
return false
end
local var_276_0 = draw.GetScale()
local var_276_1 = game.globalVars.m_flCurTime
local var_276_2 = game.globalVars.m_flRenderFrameTime
local var_276_3 = clr_screen_logs_color:GetValue():Get()
local var_276_4 = clr_screen_logs_color_hurt:GetValue():Get()
local var_276_5 = sl_screen_logs_lifetime:GetValue():Get() / 10
local var_276_6, var_276_7 = game.engine:GetScreenSize()
local var_276_8 = draw.fonts.gui_debug
local var_276_9 = gui.IsVisible()
local var_276_10 = logs_base_y * var_276_0
local var_276_11
if saved_widget_x then
var_276_11 = (saved_widget_x + WIDGET_WIDTH / 2) * var_276_0
elseif last_logs_center_x then
var_276_11 = last_logs_center_x
else
var_276_11 = var_276_6 / 2 * var_276_0
end
last_logs_center_x = var_276_11
if #normal_hitlogs == 0 and var_276_9 then
setup_preview_logs()
elseif #preview_gs_hitlogs > 0 and not var_276_9 then
preview_gs_hitlogs = {}
end
local var_276_12 = {}
for iter_276_0, iter_276_1 in ipairs(normal_hitlogs) do
table.insert(var_276_12, iter_276_1)
end
for iter_276_2, iter_276_3 in ipairs(preview_gs_hitlogs) do
table.insert(var_276_12, iter_276_3)
end
if #var_276_12 == 0 then
return false
end
table.sort(var_276_12, function(arg_277_0, arg_277_1)
return arg_277_0.time > arg_277_1.time
end)
local var_276_13 = LOG_HEIGHT * var_276_0
local var_276_14 = LOG_SPACING * var_276_0
for iter_276_4, iter_276_5 in ipairs(var_276_12) do
if not iter_276_5.anim_initialized then
iter_276_5.anim_initialized = true
iter_276_5.anim_y = var_276_10 + (iter_276_4 - 1) * (var_276_13 + var_276_14)
iter_276_5.target_y = iter_276_5.anim_y
iter_276_5.anim_x = var_276_11
iter_276_5.target_x = var_276_11
end
update_log_animation(iter_276_5, var_276_10 + (iter_276_4 - 1) * (var_276_13 + var_276_14), var_276_11, var_276_2)
end
for iter_276_6 = #var_276_12, 1, -1 do
local var_276_15 = var_276_12[iter_276_6]
local var_276_16 = var_276_1 - var_276_15.time
if var_276_15.state == "fade_in" then
var_276_15.alpha = math.min(255, var_276_15.alpha + var_276_2 * FADE_IN_SPEED)
if var_276_15.alpha >= 255 then
var_276_15.state = "visible"
var_276_15.alpha = 255
end
end
if not var_276_15.is_preview and var_276_5 < var_276_16 then
var_276_15.state = "fade_out"
var_276_15.alpha = math.max(0, 255 * (1 - (var_276_16 - var_276_5) / FADE_DURATION))
end
if not var_276_15.is_preview and var_276_16 >= var_276_5 + FADE_DURATION then
for iter_276_7 = #normal_hitlogs, 1, -1 do
if normal_hitlogs[iter_276_7] == var_276_15 then
table.remove(normal_hitlogs, iter_276_7)
break
end
end
else
local var_276_17 = parse_text_segments(var_276_15.text)
local var_276_18 = calculate_hitlog_width(var_276_17, var_276_0, var_276_8)
local var_276_19 = var_276_15.anim_x - var_276_18 / 2
local var_276_20 = var_276_15.anim_y or var_276_10 + (iter_276_6 - 1) * (var_276_13 + var_276_14)
render_hitlog_box(var_276_19, var_276_20, var_276_17, var_276_15.alpha, var_276_3, var_276_4, var_276_15.is_got_hit, var_276_0, var_276_8)
end
end
return true
end
function render_neverlose_logs()
slot_278_0_0 = draw.GetScale()
slot_278_1_0 = game.globalVars.m_flCurTime
slot_278_2_0 = game.globalVars.m_flRenderFrameTime
slot_278_3_0 = clr_screen_logs_color:GetValue():Get()
slot_278_4_0 = clr_screen_logs_color_hurt:GetValue():Get()
slot_278_5_0 = 24 * slot_278_0_0
slot_278_6_0, slot_278_7_0 = game.engine:GetScreenSize()
slot_278_8_0 = draw.surface
slot_278_8_0.g.anti_alias = true
slot_278_8_0.font = draw.fonts.gui_main
slot_278_9_0 = 13 * slot_278_0_0
slot_278_10_0 = 20 * slot_278_0_0
slot_278_11_0 = 20 * slot_278_0_0
slot_278_12_0 = slot_278_11_0 - 4 * slot_278_0_0
slot_278_13_0 = 4 * slot_278_0_0
slot_278_14_0 = slot_278_8_0.font:GetTextSize("A", true).y
slot_278_15_0 = 3 * slot_278_0_0
slot_278_16_0 = 5 * slot_278_0_0
slot_278_17_0 = sl_screen_logs_lifetime:GetValue():Get() / 10
slot_278_18_0 = {}
for iter_278_0, iter_278_1 in ipairs(left_top_hitlogs) do
table.insert(slot_278_18_0, {
is_got_hit = false,
log = iter_278_1
})
end
for iter_278_2, iter_278_3 in ipairs(got_hitlogs) do
table.insert(slot_278_18_0, {
is_got_hit = true,
log = iter_278_3
})
end
if gui.IsVisible() and #slot_278_18_0 == 0 then
if #preview_nl_hitlogs == 0 then
slot_278_19_0 = slot_278_1_0
function slot_278_20_0(arg_279_0, arg_279_1, arg_279_2)
local var_279_0 = slot_278_10_0 + (arg_279_2 - 1) * (slot_278_14_0 + slot_278_5_0)
return {
log = {
anim_alpha = 0,
is_preview = true,
life_extension = 9999,
anim_initialized = false,
alpha = 0,
state = "fade_in",
text = arg_279_0,
time = slot_278_19_0,
anim_x = slot_278_9_0,
anim_y = var_279_0
},
is_got_hit = arg_279_1
}
end
table.insert(preview_nl_hitlogs, slot_278_20_0("Hit \x01enemy\x02 in the \x01head\x02 for \x0188\x02 damage (12 health left)", false, 1))
table.insert(preview_nl_hitlogs, slot_278_20_0("Got hit by \x01enemy\x02 in the \x01chest\x02 for \x0134\x02 damage (66 health left)", true, 2))
end
for iter_278_4, iter_278_5 in ipairs(preview_nl_hitlogs) do
table.insert(slot_278_18_0, iter_278_5)
end
else
preview_nl_hitlogs = {}
end
table.sort(slot_278_18_0, function(arg_280_0, arg_280_1)
return arg_280_0.log.time < arg_280_1.log.time
end)
for iter_278_6 = #slot_278_18_0, 1, -1 do
slot_278_23_2 = slot_278_18_0[iter_278_6]
slot_278_24_2 = slot_278_23_2.log
slot_278_25_1 = slot_278_1_0 - slot_278_24_2.time
if not slot_278_24_2.anim_initialized then
slot_278_24_2.anim_initialized = true
slot_278_24_2.anim_x = 0
slot_278_24_2.anim_y = slot_278_10_0 + (iter_278_6 - 1) * (slot_278_14_0 + slot_278_5_0)
slot_278_24_2.anim_start_time = slot_278_1_0
slot_278_24_2.anim_slide_duration = 0.3
slot_278_24_2.anim_alpha = 70
slot_278_24_2.target_y = slot_278_24_2.anim_y
slot_278_24_2.original_y = slot_278_24_2.anim_y
if iter_278_6 > 1 then
slot_278_24_2.life_extension = (iter_278_6 - 1) * 0.1
else
slot_278_24_2.life_extension = 0
end
end
if slot_278_24_2.state == "fade_in" then
slot_278_26_1 = math.min(1, (slot_278_1_0 - slot_278_24_2.anim_start_time) / slot_278_24_2.anim_slide_duration)
slot_278_27_2 = 1 - math.pow(1 - slot_278_26_1, 3)
slot_278_24_2.anim_x = slot_278_9_0 * slot_278_27_2
slot_278_24_2.anim_alpha = 70 + 185 * slot_278_27_2
if slot_278_26_1 >= 1 then
slot_278_24_2.state = "visible"
slot_278_24_2.anim_x = slot_278_9_0
slot_278_24_2.anim_alpha = 255
end
elseif slot_278_24_2.state == "visible" then
if slot_278_24_2.is_preview then
slot_278_24_2.anim_alpha = 255
else
slot_278_24_2.anim_alpha = 255
if slot_278_25_1 > slot_278_17_0 + (slot_278_24_2.life_extension or 0) and slot_278_24_2.state ~= "fade_out" then
slot_278_24_2.state = "fade_out"
end
end
elseif slot_278_24_2.state == "fade_out" then
if not slot_278_24_2.fade_out_start_time then
slot_278_24_2.fade_out_start_time = slot_278_1_0
slot_278_24_2.fade_out_start_y = slot_278_24_2.anim_y
slot_278_24_2.fade_out_start_alpha = slot_278_24_2.anim_alpha
end
slot_278_26_0 = math.min(1, (slot_278_1_0 - slot_278_24_2.fade_out_start_time) / 0.2)
slot_278_27_1 = math.pow(slot_278_26_0, 2)
slot_278_24_2.anim_y = slot_278_24_2.fade_out_start_y - 60 * slot_278_0_0 * slot_278_27_1
slot_278_24_2.anim_alpha = 255 - 200 * slot_278_27_1
end
if slot_278_25_1 >= slot_278_17_0 + 0.2 + (slot_278_24_2.life_extension or 0) then
if slot_278_23_2.is_got_hit then
for iter_278_7, iter_278_8 in ipairs(got_hitlogs) do
if iter_278_8 == slot_278_24_2 then
table.remove(got_hitlogs, iter_278_7)
break
end
end
else
for iter_278_9, iter_278_10 in ipairs(left_top_hitlogs) do
if iter_278_10 == slot_278_24_2 then
table.remove(left_top_hitlogs, iter_278_9)
break
end
end
end
end
end
for iter_278_11 = 1, #slot_278_18_0 do
slot_278_23_1 = slot_278_18_0[iter_278_11].log
slot_278_24_1 = slot_278_10_0 + (iter_278_11 - 1) * (slot_278_14_0 + slot_278_5_0)
if slot_278_23_1.state ~= "fade_out" then
if math.abs(slot_278_23_1.anim_y - slot_278_24_1) > 0.1 then
slot_278_23_1.anim_y = slot_278_23_1.anim_y + (slot_278_24_1 - slot_278_23_1.anim_y) * slot_278_2_0 * 15
else
slot_278_23_1.anim_y = slot_278_24_1
end
slot_278_23_1.original_y = slot_278_23_1.anim_y
end
end
for iter_278_12 = #slot_278_18_0, 1, -1 do
slot_278_23_0 = slot_278_18_0[iter_278_12]
slot_278_24_0 = slot_278_23_0.log
if slot_278_24_0.state ~= "fade_out" or slot_278_24_0.anim_alpha > 70 then
slot_278_25_0 = parse_text_segments(slot_278_24_0.text)
slot_278_27_0 = (function(arg_281_0)
local var_281_0 = {}
for iter_281_0, iter_281_1 in ipairs(arg_281_0) do
local var_281_1 = {}
for iter_281_2 in string.gmatch(iter_281_1.text, "[^%s]+") do
table.insert(var_281_1, {
text = iter_281_2,
colored = iter_281_1.colored
})
end
for iter_281_3, iter_281_4 in ipairs(var_281_1) do
table.insert(var_281_0, iter_281_4)
end
end
return var_281_0
end)(slot_278_25_0)
slot_278_29_0 = (function(arg_282_0)
local var_282_0 = 0
for iter_282_0, iter_282_1 in ipairs(arg_282_0) do
if iter_282_1.text ~= "" then
var_282_0 = var_282_0 + slot_278_8_0.font:GetTextSize(iter_282_1.text, true).x
if iter_282_0 < #arg_282_0 then
var_282_0 = var_282_0 + slot_278_16_0
end
end
end
return var_282_0
end)(slot_278_27_0)
slot_278_30_0 = slot_278_24_0.anim_y
slot_278_31_0 = slot_278_15_0 + slot_278_11_0 + slot_278_13_0 + slot_278_29_0 + 8 * slot_278_0_0
slot_278_32_0 = slot_278_24_0.anim_x - 3 * slot_278_0_0
slot_278_33_0 = slot_278_30_0 - 7 * slot_278_0_0
slot_278_34_0 = slot_278_24_0.anim_x + slot_278_31_0 - 3 * slot_278_0_0
slot_278_35_0 = slot_278_30_0 + slot_278_14_0 + 7 * slot_278_0_0
slot_278_36_0 = draw.Rect(slot_278_32_0, slot_278_33_0, slot_278_34_0, slot_278_35_0)
slot_278_37_0 = {
{
alpha = 10,
size = 4 * slot_278_0_0
},
{
alpha = 40,
size = 3 * slot_278_0_0
},
{
alpha = 70,
size = 2 * slot_278_0_0
},
{
alpha = 100,
size = 1 * slot_278_0_0
}
}
for iter_278_13, iter_278_14 in ipairs(slot_278_37_0) do
slot_278_43_1 = draw.Rect(slot_278_36_0.mins.x - iter_278_14.size, slot_278_36_0.mins.y - iter_278_14.size, slot_278_36_0.maxs.x + iter_278_14.size, slot_278_36_0.maxs.y + iter_278_14.size)
slot_278_8_0:add_rect_filled_rounded(slot_278_43_1, draw.color(0, 0, 0, math.floor(iter_278_14.alpha * slot_278_24_0.anim_alpha / 255)), 11 * slot_278_0_0 + iter_278_14.size, draw.Rounding.ALL)
end
slot_278_8_0:add_rect_filled_rounded(slot_278_36_0, draw.color(0, 0, 0, math.floor(60 * slot_278_24_0.anim_alpha / 255)), 11 * slot_278_0_0, draw.Rounding.ALL)
slot_278_38_0 = slot_278_24_0.anim_x - 2 * slot_278_0_0
slot_278_39_0 = slot_278_30_0 - 2 * slot_278_0_0
slot_278_40_0 = slot_278_30_0 + slot_278_14_0 / 2
slot_278_41_0 = slot_278_30_0 + slot_278_14_0 + 2 * slot_278_0_0
slot_278_42_0 = slot_278_38_0 - slot_278_0_0
slot_278_43_0 = slot_278_39_0
slot_278_44_0 = slot_278_40_0
slot_278_45_0 = slot_278_41_0
slot_278_46_0 = slot_278_42_0 - slot_278_0_0
slot_278_47_0 = slot_278_23_0.is_got_hit and slot_278_4_0 or slot_278_3_0
slot_278_48_0 = draw.color(slot_278_47_0:GetR(), slot_278_47_0:GetG(), slot_278_47_0:GetB(), math.floor(20 * slot_278_24_0.anim_alpha / 255))
slot_278_49_0 = draw.color(slot_278_47_0:GetR(), slot_278_47_0:GetG(), slot_278_47_0:GetB(), math.floor(255 * slot_278_24_0.anim_alpha / 255))
slot_278_50_0 = draw.color(slot_278_47_0:GetR(), slot_278_47_0:GetG(), slot_278_47_0:GetB(), math.floor(255 * slot_278_24_0.anim_alpha / 255))
slot_278_51_0 = draw.color(slot_278_47_0:GetR(), slot_278_47_0:GetG(), slot_278_47_0:GetB(), math.floor(20 * slot_278_24_0.anim_alpha / 255))
slot_278_52_0 = draw.Rect(slot_278_38_0, slot_278_39_0 + 5 * slot_278_0_0, slot_278_38_0 - 1 * slot_278_0_0, slot_278_41_0 - 5 * slot_278_0_0)
slot_278_53_0 = draw.Rect(slot_278_46_0, slot_278_39_0 + 7 * slot_278_0_0, slot_278_46_0 - 1 * slot_278_0_0, slot_278_41_0 - 7 * slot_278_0_0)
slot_278_54_0 = draw.color(slot_278_47_0:GetR(), slot_278_47_0:GetG(), slot_278_47_0:GetB(), math.floor(120 * slot_278_24_0.anim_alpha / 255))
slot_278_8_0:AddGlow(slot_278_52_0, 8 * slot_278_0_0, slot_278_54_0, draw.glow_parts.all_right)
slot_278_8_0:AddGlow(slot_278_53_0, 8 * slot_278_0_0, slot_278_54_0, draw.glow_parts.all_right)
slot_278_8_0:AddLineMulticolor(draw.Vec2(slot_278_38_0, slot_278_39_0), draw.Vec2(slot_278_38_0, slot_278_40_0), slot_278_48_0, slot_278_49_0, 1 * slot_278_0_0)
slot_278_8_0:AddLineMulticolor(draw.Vec2(slot_278_38_0, slot_278_40_0), draw.Vec2(slot_278_38_0, slot_278_41_0), slot_278_50_0, slot_278_51_0, 1 * slot_278_0_0)
slot_278_8_0:AddLineMulticolor(draw.Vec2(slot_278_42_0, slot_278_43_0), draw.Vec2(slot_278_42_0, slot_278_44_0), slot_278_48_0, slot_278_49_0, 1 * slot_278_0_0)
slot_278_8_0:AddLineMulticolor(draw.Vec2(slot_278_42_0, slot_278_44_0), draw.Vec2(slot_278_42_0, slot_278_45_0), slot_278_50_0, slot_278_51_0, 1 * slot_278_0_0)
slot_278_55_0 = draw.Vec2(slot_278_24_0.anim_x + slot_278_15_0, slot_278_30_0 + (slot_278_14_0 - slot_278_11_0) / 2 - slot_278_0_0)
slot_278_56_0 = slot_278_23_0.is_got_hit and nl_gotmarker_icon_texture or nl_hitmarker_icon_texture
if slot_278_56_0 then
slot_278_8_0.g:SetTexture(slot_278_56_0)
slot_278_57_2 = draw.color(slot_278_47_0:GetR(), slot_278_47_0:GetG(), slot_278_47_0:GetB(), math.floor(slot_278_24_0.anim_alpha))
slot_278_58_1 = (slot_278_11_0 - slot_278_12_0) / 2
slot_278_59_0 = slot_278_55_0.x + slot_278_58_1
slot_278_60_0 = slot_278_55_0.y + slot_278_58_1
slot_278_8_0:add_rect_filled(draw.Rect(slot_278_59_0, slot_278_60_0, slot_278_59_0 + slot_278_12_0, slot_278_60_0 + slot_278_12_0), slot_278_57_2)
slot_278_8_0.g:SetTexture(nil)
else
slot_278_8_0.g:SetTexture(draw.textures.icon_legit)
slot_278_57_1 = draw.color(slot_278_47_0:GetR(), slot_278_47_0:GetG(), slot_278_47_0:GetB(), math.floor(slot_278_24_0.anim_alpha))
slot_278_8_0:add_rect_filled(draw.Rect(slot_278_55_0.x, slot_278_55_0.y, slot_278_55_0.x + slot_278_11_0, slot_278_55_0.y + slot_278_11_0), slot_278_57_1)
slot_278_8_0.g:SetTexture(nil)
end
slot_278_57_0 = slot_278_24_0.anim_x + slot_278_15_0 + slot_278_11_0 + slot_278_13_0
slot_278_58_0 = slot_278_30_0
for iter_278_15, iter_278_16 in ipairs(slot_278_27_0) do
if iter_278_16.text ~= "" then
slot_278_64_0 = iter_278_16.colored and draw.color(slot_278_47_0:GetR(), slot_278_47_0:GetG(), slot_278_47_0:GetB(), math.floor(slot_278_24_0.anim_alpha)) or draw.color(210, 210, 210, math.floor(slot_278_24_0.anim_alpha))
slot_278_8_0:add_text(draw.vec2(slot_278_57_0, slot_278_58_0), iter_278_16.text, slot_278_64_0)
slot_278_57_0 = slot_278_57_0 + slot_278_8_0.font:GetTextSize(iter_278_16.text, true).x
if iter_278_15 < #slot_278_27_0 then
slot_278_57_0 = slot_278_57_0 + slot_278_16_0
end
end
end
end
end
return true
end
function render_fatality_logs()
if logs_base_y == 0 then
return false
end
slot_283_0_0 = draw.GetScale()
slot_283_1_0 = game.globalVars.m_flCurTime
slot_283_2_0 = game.globalVars.m_flRenderFrameTime
slot_283_3_0 = clr_screen_logs_color:GetValue():Get()
slot_283_4_0 = clr_screen_logs_color_hurt:GetValue():Get()
slot_283_5_0, slot_283_6_0 = game.engine:GetScreenSize()
slot_283_7_0 = draw.surface
slot_283_7_0.font = draw.fonts.gui_main
slot_283_7_0.g.anti_alias = true
slot_283_8_0 = sl_screen_logs_lifetime:GetValue():Get() / 10
slot_283_9_0 = 16 * slot_283_0_0
slot_283_10_0 = 4 * slot_283_0_0
slot_283_11_0 = 15
slot_283_12_0 = 10
slot_283_13_0 = get_current_theme()
slot_283_14_0 = 1 * slot_283_0_0
slot_283_15_0 = nil
if saved_widget_x then
slot_283_15_0 = saved_widget_x * slot_283_0_0 + WIDGET_WIDTH * slot_283_0_0 / 2
elseif last_logs_center_x then
slot_283_15_0 = last_logs_center_x
else
slot_283_15_0 = slot_283_5_0 / 2
end
last_logs_center_x = slot_283_15_0
if #normal_hitlogs == 0 and gui.IsVisible() then
if #preview_ft_hitlogs == 0 then
slot_283_16_1 = game.globalVars.m_flCurTime
function slot_283_17_1(arg_284_0, arg_284_1)
return {
anim_alpha = 0,
is_preview = true,
life_extension = 9999,
anim_initialized = false,
alpha = 0,
state = "fade_in",
text = arg_284_0,
time = slot_283_16_1,
anim_x = slot_283_15_0,
target_x = slot_283_15_0,
is_got_hit = arg_284_1
}
end
table.insert(preview_ft_hitlogs, slot_283_17_1(string.format("Hit \x01%s\x02 in the \x01%s\x02 for \x01%d\x02 damage (%d health remaining)", "enemy", "head", 88, 12), false))
table.insert(preview_ft_hitlogs, slot_283_17_1(string.format("Got hit by \x01%s\x02 in the \x01%s\x02 for \x01%d\x02 damage (%d health remaining)", "enemy", "chest", 34, 66), true))
end
elseif #preview_ft_hitlogs > 0 and not gui.IsVisible() then
preview_ft_hitlogs = {}
end
slot_283_16_0 = {}
for iter_283_0, iter_283_1 in ipairs(normal_hitlogs) do
table.insert(slot_283_16_0, iter_283_1)
end
for iter_283_2, iter_283_3 in ipairs(preview_ft_hitlogs) do
table.insert(slot_283_16_0, iter_283_3)
end
if #slot_283_16_0 == 0 then
return false
end
table.sort(slot_283_16_0, function(arg_285_0, arg_285_1)
return arg_285_0.time < arg_285_1.time
end)
slot_283_17_0 = slot_283_7_0.font:GetTextSize("A", true).y
slot_283_18_0 = logs_base_y * slot_283_0_0
for iter_283_4, iter_283_5 in ipairs(slot_283_16_0) do
if not iter_283_5.anim_initialized then
iter_283_5.anim_initialized = true
iter_283_5.anim_y = slot_283_18_0 + (iter_283_4 - 1) * (slot_283_17_0 + slot_283_9_0)
iter_283_5.target_y = iter_283_5.anim_y
iter_283_5.anim_x = slot_283_15_0
iter_283_5.target_x = slot_283_15_0
end
end
for iter_283_6, iter_283_7 in ipairs(slot_283_16_0) do
slot_283_24_1 = slot_283_18_0 + (iter_283_6 - 1) * (slot_283_17_0 + slot_283_9_0)
slot_283_25_2 = slot_283_15_0
if iter_283_7.anim_y and slot_283_24_1 then
if math.abs(iter_283_7.anim_y - slot_283_24_1) <= 0.5 then
iter_283_7.anim_y = slot_283_24_1
else
iter_283_7.anim_y = iter_283_7.anim_y + (slot_283_24_1 - iter_283_7.anim_y) * slot_283_2_0 * slot_283_11_0
end
end
if iter_283_7.anim_x and slot_283_25_2 then
if math.abs(iter_283_7.anim_x - slot_283_25_2) <= 0.5 then
iter_283_7.anim_x = slot_283_25_2
else
iter_283_7.anim_x = iter_283_7.anim_x + (slot_283_25_2 - iter_283_7.anim_x) * slot_283_2_0 * slot_283_12_0
end
end
iter_283_7.target_y = slot_283_24_1
iter_283_7.target_x = slot_283_25_2
end
for iter_283_8 = #slot_283_16_0, 1, -1 do
slot_283_23_0 = slot_283_16_0[iter_283_8]
slot_283_24_0 = slot_283_1_0 - slot_283_23_0.time
slot_283_25_1 = slot_283_23_0.alpha / 255
if slot_283_23_0.state == "fade_in" then
slot_283_23_0.alpha = math.min(255, slot_283_23_0.alpha + slot_283_2_0 * 1275)
if slot_283_23_0.alpha >= 255 then
slot_283_23_0.state = "visible"
slot_283_23_0.alpha = 255
end
end
if not slot_283_23_0.is_preview and slot_283_8_0 < slot_283_24_0 then
slot_283_23_0.state = "fade_out"
slot_283_23_0.alpha = math.max(0, 255 * (1 - (slot_283_24_0 - slot_283_8_0) / FADE_DURATION))
end
if not slot_283_23_0.is_preview and slot_283_24_0 >= slot_283_8_0 + FADE_DURATION then
for iter_283_9 = #normal_hitlogs, 1, -1 do
if normal_hitlogs[iter_283_9] == slot_283_23_0 then
table.remove(normal_hitlogs, iter_283_9)
break
end
end
else
slot_283_26_0 = 6 * slot_283_0_0
slot_283_27_0 = 4 * slot_283_0_0
slot_283_28_0 = 6 * slot_283_0_0
slot_283_29_0 = math.max(1, math.floor(1 * slot_283_0_0))
slot_283_30_0 = parse_text_segments(slot_283_23_0.text)
slot_283_32_0 = (function(arg_286_0)
local var_286_0 = {}
for iter_286_0, iter_286_1 in ipairs(arg_286_0) do
for iter_286_2 in string.gmatch(iter_286_1.text, "[^%s]+") do
table.insert(var_286_0, {
text = iter_286_2,
colored = iter_286_1.colored
})
end
end
return var_286_0
end)(slot_283_30_0)
slot_283_33_0 = slot_283_23_0.is_got_hit and slot_283_4_0 or slot_283_3_0
slot_283_34_0 = 0
for iter_283_10, iter_283_11 in ipairs(slot_283_32_0) do
if iter_283_11.text ~= "" then
slot_283_34_0 = slot_283_34_0 + slot_283_7_0.font:GetTextSize(iter_283_11.text, true).x
if iter_283_10 < #slot_283_32_0 then
slot_283_34_0 = slot_283_34_0 + slot_283_10_0
end
end
end
slot_283_35_0 = slot_283_7_0.font:GetTextSize("A", true).y
slot_283_36_0 = slot_283_34_0
slot_283_37_0 = slot_283_23_0.anim_x - slot_283_36_0 / 2
slot_283_38_0 = slot_283_23_0.anim_y
slot_283_39_0 = slot_283_37_0
slot_283_40_0 = slot_283_38_0
slot_283_41_0 = slot_283_37_0 + slot_283_36_0
slot_283_42_0 = slot_283_38_0 + slot_283_35_0
slot_283_43_0 = slot_283_39_0 - slot_283_26_0
slot_283_44_0 = slot_283_40_0 - slot_283_27_0
slot_283_45_0 = slot_283_41_0 + slot_283_26_0
slot_283_46_0 = slot_283_42_0 + slot_283_27_0
slot_283_25_0 = slot_283_23_0.alpha / 255
if theme_value_cache == 8388608 then
slot_283_47_1 = draw.Rect(slot_283_43_0, slot_283_44_0, slot_283_45_0, slot_283_46_0)
slot_283_7_0:AddWithBlur(slot_283_47_1, function()
slot_283_7_0:add_rect_filled(slot_283_47_1, draw.color(255, 255, 255, math.floor(slot_283_23_0.alpha)))
end)
slot_283_7_0:AddWithFrost(slot_283_47_1, function()
slot_283_7_0:add_rect_filled(slot_283_47_1, draw.color(255, 255, 255, math.floor(slot_283_23_0.alpha)))
end)
end
slot_283_7_0:AddGlow(draw.Rect(slot_283_43_0 + slot_283_14_0, slot_283_44_0 + slot_283_14_0, slot_283_45_0 - slot_283_14_0, slot_283_46_0 - slot_283_14_0), 8 * slot_283_0_0, slot_283_13_0.glow_color:ModA(slot_283_25_0))
slot_283_7_0:AddRectFilledRoundedMulticolor(draw.Rect(slot_283_43_0 - slot_283_14_0, slot_283_44_0 - slot_283_14_0, slot_283_45_0 + slot_283_14_0, slot_283_46_0 + slot_283_14_0), {
slot_283_13_0.border_color_left:ModA(slot_283_25_0),
slot_283_13_0.border_color_right:ModA(slot_283_25_0),
slot_283_13_0.border_color_right:ModA(slot_283_25_0),
slot_283_13_0.border_color_left:ModA(slot_283_25_0)
}, 5 * slot_283_0_0, draw.Rounding.ALL)
slot_283_7_0:AddRectFilledRoundedMulticolor(draw.Rect(slot_283_43_0, slot_283_44_0, slot_283_45_0, slot_283_46_0), {
slot_283_13_0.color_left:ModA(slot_283_25_0),
slot_283_13_0.color_right:ModA(slot_283_25_0),
slot_283_13_0.color_right:ModA(slot_283_25_0),
slot_283_13_0.color_left:ModA(slot_283_25_0)
}, 4 * slot_283_0_0, draw.Rounding.ALL)
slot_283_7_0:AddRectFilledMulticolor(draw.Rect(slot_283_43_0 + 4 * slot_283_0_0, slot_283_46_0, slot_283_45_0 - 4 * slot_283_0_0, slot_283_46_0 + 1 * slot_283_0_0), {
slot_283_33_0:ModA(slot_283_25_0),
slot_283_33_0:ModA(slot_283_25_0),
slot_283_33_0:ModA(slot_283_25_0),
slot_283_33_0:ModA(slot_283_25_0)
})
slot_283_47_0 = slot_283_37_0
slot_283_48_0 = slot_283_38_0
for iter_283_12, iter_283_13 in ipairs(slot_283_32_0) do
if iter_283_13.text ~= "" then
slot_283_54_0 = nil
if iter_283_13.colored then
slot_283_54_0 = draw.Color(slot_283_33_0:GetR(), slot_283_33_0:GetG(), slot_283_33_0:GetB(), math.floor(255 * slot_283_25_0))
else
slot_283_54_0 = slot_283_13_0.text_color:ModA(slot_283_25_0)
end
slot_283_7_0:add_text(draw.Vec2(slot_283_47_0, slot_283_48_0), iter_283_13.text, slot_283_54_0)
slot_283_47_0 = slot_283_47_0 + slot_283_7_0.font:GetTextSize(iter_283_13.text, true).x
if iter_283_12 < #slot_283_32_0 then
slot_283_47_0 = slot_283_47_0 + slot_283_10_0
end
end
end
end
end
return true
end
function logs()
local var_289_0 = cbx_screen_logs_type:GetValue():Get():GetRaw()
local var_289_1 = var_289_0 == 1 or var_289_0 == 4
local var_289_2 = gui.IsVisible()
if var_289_1 then
if var_289_2 then
if not widget_created or not widget_header then
widget_header = create_header_widget()
end
if widget_header then
widget_header:ToggleVisibility(true)
end
elseif widget_header then
widget_header:ToggleVisibility(false)
end
elseif widget_header then
widget_header:ToggleVisibility(false)
end
local var_289_3 = ({
function()
if update_logs_position() then
render_skeet_logs()
end
end,
render_neverlose_logs,
[4] = function()
if update_logs_position() then
render_fatality_logs()
end
end
})[var_289_0]
if var_289_3 then
var_289_3()
end
end
cb_screen_logs:AddCallback(function()
Delay(0.1, function()
if not cb_screen_logs:GetValue():Get() then
events.presentQueue:Remove(logs)
if widget_header then
widget_header:ToggleVisibility(false)
end
else
events.presentQueue:Add(logs)
end
end)
end)
watermark_element_order = {}
function get_spacing_factor(arg_294_0)
if arg_294_0 == 2 then
return 1
elseif arg_294_0 == 4 then
return 1
elseif arg_294_0 == 8 then
return 1
elseif arg_294_0 == 16 then
return 4
elseif arg_294_0 == 32 then
return 4
elseif arg_294_0 == 64 then
return 15
else
return 1
end
end
last_time = 0
last_fps_update_time = 0
frame_count_prev = 0
current_fps = 0
fps_update_interval = 1
last_low_time = 0
last_frame_count = 0
slot_0_13_0 = {}
LOW_FPS_HISTORY_SIZE = 1000
cached_fps_text = "FPS: 0"
cached_fps_width = 0
function update_low_fps_history()
local var_295_0 = game.globalVars.m_flRealTime
local var_295_1 = game.globalVars.m_iFrameCount
if not var_295_0 or not var_295_1 then
return
end
if last_low_time == 0 then
last_low_time = var_295_0
last_frame_count = var_295_1
return
end
local var_295_2 = var_295_0 - last_low_time
local var_295_3 = 0
if var_295_2 > 0 then
var_295_3 = (var_295_1 - last_frame_count) / var_295_2
end
if var_295_3 > 0 then
local var_295_4 = math.floor(var_295_3 + 0.5)
table.insert(slot_0_13_0, var_295_4)
while #slot_0_13_0 > LOW_FPS_HISTORY_SIZE do
table.remove(slot_0_13_0, 1)
end
end
last_low_time = var_295_0
last_frame_count = var_295_1
end
function calculate_low_fps()
if #slot_0_13_0 == 0 then
return 0
end
local var_296_0 = {}
for iter_296_0, iter_296_1 in ipairs(slot_0_13_0) do
table.insert(var_296_0, iter_296_1)
end
table.sort(var_296_0)
local var_296_1 = math.max(1, math.floor(#var_296_0 * 0.001))
local var_296_2 = 0
for iter_296_2 = 1, var_296_1 do
var_296_2 = var_296_2 + var_296_0[iter_296_2]
end
return math.floor(var_296_2 / var_296_1 + 0.5)
end
function update_normal_fps()
local var_297_0 = game.globalVars.m_flRealTime
local var_297_1 = game.globalVars.m_iFrameCount
if not var_297_0 or not var_297_1 then
return
end
if last_time == 0 then
last_time = var_297_0
frame_count_prev = var_297_1
return
end
if var_297_0 - last_fps_update_time >= fps_update_interval then
local var_297_2 = var_297_0 - last_time
if var_297_2 > 0 then
current_fps = (var_297_1 - frame_count_prev) / var_297_2
end
last_fps_update_time = var_297_0
last_time = var_297_0
frame_count_prev = var_297_1
local var_297_3 = math.floor(current_fps + 0.5)
cached_fps_text = "FPS: " .. var_297_3
cached_fps_width = draw.fonts.gui_main:GetTextSize(cached_fps_text)
end
end
function get_fps()
update_low_fps_history()
local var_298_0 = calculate_low_fps()
local var_298_1 = math.floor(current_fps + 0.5)
local var_298_2
if cb_watermark_low_fps and cb_watermark_low_fps:GetValue():Get() and var_298_0 > 0 then
var_298_2 = "FPS: " .. var_298_1 .. " (0.1% Low: " .. var_298_0 .. ")"
else
var_298_2 = "FPS: " .. var_298_1
end
local var_298_3 = draw.fonts.gui_main:GetTextSize(var_298_2)
return var_298_2, var_298_3
end
function get_ping()
local var_299_0 = game.engine:GetNetChan()
local var_299_1 = 0
if var_299_0 and not var_299_0:IsNull() then
local var_299_2 = var_299_0:GetLatency()
if var_299_2 then
var_299_1 = math.floor(var_299_2 * 1000 + 0.5)
end
end
local var_299_3 = "MS: " .. var_299_1
local var_299_4 = draw.fonts.gui_main:GetTextSize(var_299_3)
return var_299_3, var_299_4
end
ffi.cdef(" typedef unsigned short WORD;\n \n typedef struct _SYSTEMTIME {\n WORD wYear;\n WORD wMonth;\n WORD wDayOfWeek;\n WORD wDay;\n WORD wHour;\n WORD wMinute;\n WORD wSecond;\n WORD wMilliseconds;\n } SYSTEMTIME;\n")
GetLocalTime = ffi.cast("void(__stdcall*)(SYSTEMTIME*)", utils.FindExport("kernel32.dll", "GetLocalTime"))
function get_time()
if not GetLocalTime then
return "ERROR: GetLocalTime not found", 0
end
local var_300_0 = ffi.new("SYSTEMTIME")
GetLocalTime(var_300_0)
local var_300_1 = "TIME: " .. pad(var_300_0.wHour) .. ":" .. pad(var_300_0.wMinute)
local var_300_2 = draw.fonts.gui_main:GetTextSize(var_300_1)
return var_300_1, var_300_2
end
function get_map()
if not game.engine:IsConnected() and game.engine:InGame() then
local var_301_0 = "MAP: none"
local var_301_1 = draw.fonts.gui_main:GetTextSize(var_301_0)
return var_301_0, var_301_1
end
local var_301_2 = game.globalVars
local var_301_3 = var_301_2.m_szMapName and var_301_2.m_szMapName ~= "" and var_301_2.m_szMapName or "none"
local var_301_4 = "MAP: " .. var_301_3
local var_301_5 = draw.fonts.gui_main:GetTextSize(var_301_4)
return var_301_4, var_301_5
end
function get_elapsed()
local var_302_0 = math.floor(game.globalVars.m_flCurTime)
local var_302_1 = ""
if var_302_0 >= 3600 then
local var_302_2 = math.floor(var_302_0 / 3600)
local var_302_3 = math.floor(var_302_0 % 3600 / 60)
local var_302_4 = var_302_0 % 60
local var_302_5 = var_302_2 < 10 and "%d" or "%02d"
var_302_1 = string.format("Elapsed: " .. var_302_5 .. ":%02d:%02d", var_302_2, var_302_3, var_302_4)
else
var_302_1 = string.format("Elapsed: %02d:%02d", math.floor(var_302_0 / 60), var_302_0 % 60)
end
local var_302_6 = draw.fonts.gui_main:GetTextSize(var_302_1)
return var_302_1, var_302_6
end
function get_ip()
local var_303_0 = game.engine:GetNetChan()
local var_303_1 = "local"
if var_303_0 and not var_303_0:IsNull() then
var_303_1 = var_303_0:IsLoopback() and "local" or var_303_0:GetAddress() or "Unknown"
end
local var_303_2 = draw.fonts.gui_main:GetTextSize(var_303_1)
return var_303_1, var_303_2
end
current_username = members.username or "User"
current_tag = members.staff[current_username] or "[MEMBER]"
function get_username_data()
if cb_watermark_tag:GetValue():Get() then
return current_username, current_tag
end
return current_username, nil
end
function get_username()
local var_305_0, var_305_1 = get_username_data()
if var_305_1 then
var_305_0 = var_305_0 .. " " .. var_305_1
end
local var_305_2 = draw.fonts.gui_main:GetTextSize(var_305_0)
return var_305_0, var_305_2
end
cached_data = {
username_text = "",
ping = "",
ip = "",
last_update = 0,
elapsed = "",
time = "",
map = "",
tag_text = ""
}
function update_cached_data()
local var_306_0 = utils.GetUnixTime()
if var_306_0 - cached_data.last_update >= 1 or cached_data.last_update == 0 then
cached_data.ping = get_ping()
cached_data.time = get_time()
cached_data.map = get_map()
cached_data.elapsed = get_elapsed()
cached_data.ip = get_ip()
local var_306_1, var_306_2 = get_username_data()
cached_data.username_text = var_306_1
cached_data.tag_text = var_306_2
cached_data.last_update = var_306_0
end
end
function get_cached_data(arg_307_0)
if arg_307_0 == "ping" then
return cached_data.ping
elseif arg_307_0 == "time" then
return cached_data.time
elseif arg_307_0 == "map" then
return cached_data.map
elseif arg_307_0 == "elapsed" then
return cached_data.elapsed
elseif arg_307_0 == "ip" then
return cached_data.ip
end
return ""
end
function get_cached_username_with_tag()
return cached_data.username_text, cached_data.tag_text
end
function get_watermark_icon()
if not cb_watermark_icon:GetValue():Get() then
return nil, {
x = 0,
y = 0
}
end
return slot_0_0_0, slot_0_1_0
end
update_cached_data()
watermark_enabled_elements_cache = {}
watermark_element_order_cache = {}
function update_watermark_cache()
local var_310_0 = cbx_watermark_show:GetValue():Get():GetRaw()
local function var_310_1(arg_311_0)
return bit.band(var_310_0, arg_311_0) ~= 0
end
;(function()
local var_312_0 = {}
local var_312_1 = {
1,
2,
4,
8,
16,
32,
64
}
local var_312_2 = {
"username",
"fps",
nil,
"ping",
nil,
nil,
nil,
"time",
nil,
nil,
nil,
nil,
nil,
nil,
nil,
"map",
[64] = "ip",
[32] = "elapsed"
}
for iter_312_0, iter_312_1 in ipairs(watermark_element_order) do
local var_312_3
for iter_312_2, iter_312_3 in pairs(var_312_2) do
if iter_312_3 == iter_312_1 then
var_312_3 = iter_312_2
break
end
end
if var_312_3 and var_310_1(var_312_3) then
table.insert(var_312_0, iter_312_1)
end
end
for iter_312_4, iter_312_5 in ipairs(var_312_1) do
local var_312_4 = var_312_2[iter_312_5]
if var_310_1(iter_312_5) then
local var_312_5 = false
for iter_312_6, iter_312_7 in ipairs(var_312_0) do
if iter_312_7 == var_312_4 then
var_312_5 = true
break
end
end
if not var_312_5 then
table.insert(var_312_0, var_312_4)
end
end
end
watermark_element_order = var_312_0
watermark_element_order_cache = var_312_0
end)()
local var_310_2 = {
username = {
enabled = var_310_1(1)
},
fps = {
enabled = var_310_1(2)
},
ping = {
enabled = var_310_1(4)
},
time = {
enabled = var_310_1(8)
},
map = {
enabled = var_310_1(16)
},
elapsed = {
enabled = var_310_1(32)
},
ip = {
enabled = var_310_1(64)
}
}
local var_310_3 = {}
for iter_310_0, iter_310_1 in ipairs(watermark_element_order_cache) do
if var_310_2[iter_310_1] and var_310_2[iter_310_1].enabled then
table.insert(var_310_3, iter_310_1)
end
end
watermark_enabled_elements_cache = var_310_3
end
function watermark()
if not game.engine:InGame() or not game.engine:IsConnected() then
return
end
update_watermark_cache()
update_normal_fps()
update_cached_data()
slot_313_0_0 = gui.ctx
slot_313_1_0 = draw.surface
slot_313_1_0.font = draw.fonts.gui_main
slot_313_1_0.g.antiAlias = true
slot_313_1_0.g:SetTexture(nil)
slot_313_2_0 = draw.GetScale()
slot_313_3_0 = get_current_theme()
slot_313_4_0, slot_313_5_0 = get_fps()
slot_313_6_0 = {
username = {
text = function()
local var_314_0, var_314_1 = get_cached_username_with_tag()
if cb_watermark_tag:GetValue():Get() and var_314_1 then
return var_314_0 .. " " .. var_314_1
end
return var_314_0
end
},
fps = {
text = function()
return slot_313_4_0
end
},
ping = {
text = function()
return get_cached_data("ping")
end
},
time = {
text = function()
return get_cached_data("time")
end
},
map = {
text = function()
return get_cached_data("map")
end
},
elapsed = {
text = function()
return get_cached_data("elapsed")
end
},
ip = {
text = function()
return get_cached_data("ip")
end
}
}
slot_313_7_0 = {}
for iter_313_0, iter_313_1 in ipairs(watermark_enabled_elements_cache) do
slot_313_13_1 = slot_313_6_0[iter_313_1].text()
slot_313_14_1 = nil
slot_313_15_1 = nil
if iter_313_1 == "username" and cb_watermark_tag:GetValue():Get() then
slot_313_14_1, slot_313_15_1 = get_cached_username_with_tag()
end
if not gui.IsVisible() then
if iter_313_1 == "ping" and slot_313_13_1 == "MS: 0" then
goto label_313_0
end
if iter_313_1 == "fps" and (slot_313_13_1 == "FPS: 0" or slot_313_13_1:find("FPS: 0") == 1) then
goto label_313_0
end
if iter_313_1 == "map" and (slot_313_13_1 == "MAP: none" or slot_313_13_1 == "MAP: <empty>") then
goto label_313_0
end
if iter_313_1 == "ip" and slot_313_13_1 == "local" then
goto label_313_0
end
end
table.insert(slot_313_7_0, {
type = iter_313_1,
text = slot_313_13_1,
username_text = slot_313_14_1,
tag_text = slot_313_15_1
})
::label_313_0::
end
slot_313_8_0 = draw.GetScale()
slot_313_9_0 = slot_313_1_0.font
slot_313_10_0 = 8 * slot_313_8_0
slot_313_11_0 = 6 * slot_313_8_0
slot_313_12_0 = 8 * slot_313_8_0
slot_313_13_0 = math.max(1, math.floor(1 * slot_313_8_0 + 0.5))
slot_313_14_0 = 2 * slot_313_8_0
slot_313_15_0 = "PND"
slot_313_16_0 = ".lua"
slot_313_17_0 = slot_313_9_0:GetTextSize(slot_313_15_0)
slot_313_18_0 = slot_313_9_0:GetTextSize(slot_313_16_0)
slot_313_19_0 = slot_313_9_0:GetTextSize(current_username)
if current_tag == "" or not slot_313_9_0:GetTextSize(current_tag) then
slot_313_20_0 = {
x = 0,
y = 0
}
end
slot_313_21_0 = -6
slot_313_22_0 = -8
slot_313_23_0 = -8
slot_313_24_0 = 3
slot_313_25_0 = 7
slot_313_26_0, slot_313_27_0 = get_watermark_icon()
slot_313_28_0 = {}
for iter_313_2, iter_313_3 in ipairs(slot_313_7_0) do
slot_313_28_0[iter_313_3.type] = slot_313_9_0:GetTextSize(iter_313_3.text)
end
slot_313_29_0 = {
slot_313_9_0:GetTextSize(slot_313_6_0.username.text()),
slot_313_9_0:GetTextSize(slot_313_4_0),
slot_313_9_0:GetTextSize(get_cached_data("ping")),
slot_313_9_0:GetTextSize(get_cached_data("time")),
slot_313_9_0:GetTextSize(get_cached_data("map")),
slot_313_9_0:GetTextSize(get_cached_data("elapsed")),
slot_313_9_0:GetTextSize(get_cached_data("ip"))
}
slot_313_30_0 = 0
for iter_313_4, iter_313_5 in ipairs(slot_313_29_0) do
if slot_313_30_0 < iter_313_5.y then
slot_313_30_0 = iter_313_5.y
end
end
slot_313_31_0 = slot_313_22_0 * slot_313_8_0
slot_313_32_0 = slot_313_23_0 * slot_313_8_0
slot_313_33_0 = cb_watermark_icon:GetValue():Get()
if slot_313_33_0 and slot_313_26_0 and slot_313_27_0.y > 0 then
slot_313_34_1 = slot_313_31_0 + slot_313_27_0.y * slot_313_8_0 + slot_313_32_0
slot_313_30_0 = math.max(slot_313_30_0, slot_313_34_1)
end
slot_313_34_0 = math.max(slot_313_17_0.y, slot_313_18_0.y, slot_313_30_0) * slot_313_8_0
slot_313_35_0 = 8 * slot_313_8_0
slot_313_36_0 = slot_313_35_0 - (slot_313_2_0 - 1) * 18
slot_313_37_1 = 0
if slot_313_33_0 and slot_313_26_0 and slot_313_27_0.x > 0 then
slot_313_37_1 = slot_313_21_0 * slot_313_8_0 + slot_313_27_0.x * slot_313_8_0
else
slot_313_37_1 = (slot_313_17_0.x + slot_313_18_0.x) * slot_313_8_0
end
for iter_313_6, iter_313_7 in ipairs(slot_313_7_0) do
slot_313_43_1 = nil
if iter_313_7.type == "username" and iter_313_7.tag_text then
slot_313_44_1 = slot_313_9_0:GetTextSize(iter_313_7.username_text)
slot_313_45_1 = slot_313_9_0:GetTextSize(iter_313_7.tag_text)
slot_313_43_1 = slot_313_44_1.x + slot_313_45_1.x + slot_313_12_0
else
slot_313_43_1 = slot_313_28_0[iter_313_7.type].x
end
slot_313_37_1 = slot_313_37_1 + (slot_313_13_0 + slot_313_35_0 + slot_313_43_1 + slot_313_36_0) * slot_313_8_0
end
slot_313_37_0 = slot_313_37_1 - slot_313_36_0 * slot_313_8_0
slot_313_38_0, slot_313_39_0 = game.engine:GetScreenSize()
slot_313_40_0 = slot_313_38_0 - slot_313_37_0 - slot_313_10_0 * 2 - 6 * slot_313_8_0
slot_313_41_0 = 12 * slot_313_8_0
slot_313_42_0 = slot_313_40_0
slot_313_43_0 = slot_313_41_0
slot_313_44_0 = slot_313_40_0 - slot_313_10_0
slot_313_45_0 = slot_313_41_0 - slot_313_11_0
slot_313_46_0 = slot_313_40_0 + slot_313_37_0 + slot_313_10_0 * 2
slot_313_47_0 = slot_313_41_0 + slot_313_34_0 + slot_313_11_0
if theme_value_cache == 8388608 then
slot_313_48_1 = draw.Rect(slot_313_44_0, slot_313_45_0, slot_313_46_0, slot_313_47_0)
slot_313_1_0:AddWithBlur(slot_313_48_1, function()
slot_313_1_0:AddRectFilledRoundedMulticolor(slot_313_48_1, {
draw.Color(255, 255, 255, 255),
draw.Color(255, 255, 255, 255),
draw.Color(255, 255, 255, 255),
draw.Color(255, 255, 255, 255)
}, 5 * slot_313_8_0, draw.Rounding.ALL)
end)
slot_313_1_0:AddWithFrost(slot_313_48_1, function()
slot_313_1_0:AddRectFilledRoundedMulticolor(slot_313_48_1, {
draw.Color(255, 255, 255, 255),
draw.Color(255, 255, 255, 255),
draw.Color(255, 255, 255, 255),
draw.Color(255, 255, 255, 255)
}, 5 * slot_313_8_0, draw.Rounding.ALL)
end)
end
slot_313_1_0:AddGlow(draw.Rect(slot_313_44_0 + slot_313_14_0, slot_313_45_0 + slot_313_14_0, slot_313_46_0 - slot_313_14_0, slot_313_47_0 - slot_313_14_0), 8 * slot_313_8_0, slot_313_3_0.glow_color)
slot_313_1_0:AddRectFilledRoundedMulticolor(draw.Rect(slot_313_44_0, slot_313_45_0, slot_313_46_0, slot_313_47_0), {
slot_313_3_0.color_left,
slot_313_3_0.color_right,
slot_313_3_0.color_right,
slot_313_3_0.color_left
}, 5 * slot_313_8_0, draw.Rounding.ALL)
slot_313_1_0:AddRectFilledMulticolor(draw.Rect(slot_313_44_0 + 4 * slot_313_8_0, slot_313_47_0 - 1 * slot_313_8_0, slot_313_46_0 - 4 * slot_313_8_0, slot_313_47_0), {
slot_313_3_0.stripe_color_left,
slot_313_3_0.stripe_color_right,
slot_313_3_0.stripe_color_right,
slot_313_3_0.stripe_color_left
})
slot_313_48_0 = slot_313_43_0
slot_313_49_0 = slot_313_43_0 + slot_313_34_0
function slot_313_50_0()
slot_313_1_0:AddLine(draw.Vec2(slot_313_42_0 - 1, slot_313_48_0), draw.Vec2(slot_313_42_0 - 1, slot_313_49_0), slot_313_3_0.line_color, slot_313_13_0)
end
if slot_313_33_0 and slot_313_26_0 and slot_313_27_0.x > 0 then
slot_313_42_0 = slot_313_42_0 + slot_313_21_0 * slot_313_8_0
slot_313_1_0.g:SetTexture(slot_313_26_0)
slot_313_52_0 = slot_313_42_0 + slot_313_24_0 * slot_313_8_0
slot_313_53_0 = slot_313_43_0 + slot_313_34_0 / 2 - slot_313_27_0.y * slot_313_8_0 / 2 + slot_313_25_0 * slot_313_8_0 + slot_313_31_0
slot_313_1_0:AddRectFilled(draw.Rect(slot_313_52_0, slot_313_53_0, slot_313_52_0 + slot_313_27_0.x * slot_313_8_0, slot_313_53_0 + slot_313_27_0.y * slot_313_8_0), draw.Color(255, 255, 255, 255))
slot_313_1_0.g:SetTexture(nil)
slot_313_42_0 = slot_313_42_0 + slot_313_27_0.x * slot_313_8_0 + slot_313_12_0
else
slot_313_1_0:AddText(draw.Vec2(slot_313_42_0, slot_313_43_0), slot_313_15_0, slot_313_3_0.text_color)
slot_313_42_0 = slot_313_42_0 + slot_313_17_0.x * slot_313_8_0
slot_313_1_0:AddText(draw.Vec2(slot_313_42_0, slot_313_43_0), slot_313_16_0, slot_313_3_0.text_2_color)
slot_313_42_0 = slot_313_42_0 + slot_313_18_0.x * slot_313_8_0 + slot_313_12_0
end
for iter_313_8, iter_313_9 in ipairs(slot_313_7_0) do
slot_313_50_0()
slot_313_42_0 = slot_313_42_0 + slot_313_13_0 + slot_313_12_0
if iter_313_9.type == "username" and iter_313_9.tag_text then
slot_313_56_0 = slot_313_9_0:GetTextSize(iter_313_9.username_text)
slot_313_57_0 = slot_313_9_0:GetTextSize(iter_313_9.tag_text)
slot_313_1_0:AddText(draw.Vec2(slot_313_42_0 + 2 * slot_313_8_0, slot_313_43_0), iter_313_9.username_text, slot_313_3_0.text_color)
slot_313_42_0 = slot_313_42_0 + slot_313_56_0.x * slot_313_8_0
if slot_313_57_0.x > 0 then
slot_313_1_0:AddText(draw.Vec2(slot_313_42_0 + slot_313_12_0 - 2 * slot_313_8_0, slot_313_43_0), iter_313_9.tag_text, slot_313_3_0.member_tag_color)
slot_313_42_0 = slot_313_42_0 + slot_313_57_0.x * slot_313_8_0 + slot_313_12_0 * 2
end
else
slot_313_1_0:AddText(draw.Vec2(slot_313_42_0, slot_313_43_0), iter_313_9.text, slot_313_3_0.text_color)
slot_313_42_0 = slot_313_42_0 + slot_313_28_0[iter_313_9.type].x * slot_313_8_0 + slot_313_12_0
end
end
slot_313_1_0.g:SetTexture(nil)
end
cb_watermark:AddCallback(function()
Delay(0.1, function()
if not cb_watermark:GetValue():Get() then
events.presentQueue:Remove(watermark)
else
events.presentQueue:Add(watermark)
end
end)
end)
enemies_cache = {}
enemies_cache_counter = 0
enemies_cache_interval = 100
function update_enemies_cache()
enemies_cache = {}
entities.controllers:for_each(function(arg_327_0)
local var_327_0 = arg_327_0.entity
if var_327_0 and var_327_0:IsEnemy() then
local var_327_1 = var_327_0:GetPawn()
if var_327_1 and var_327_1:IsAlive() then
table.insert(enemies_cache, {
pawn = var_327_1,
controller = var_327_0
})
end
end
end)
end
min_alpha = 0.27450980392156865
max_alpha = 0.5882352941176471
function arrows()
if not game.engine:InGame() or not game.engine:IsConnected() then
return
end
slot_328_0_0 = entities.GetLocalPawn()
if not slot_328_0_0 or not slot_328_0_0:IsAlive() then
return
end
slot_328_1_0 = cbx_arrows_type:GetValue():Get():GetRaw()
slot_328_2_0 = slot_328_0_0:GetAbsOrigin()
slot_328_3_0, slot_328_4_0 = game.engine:GetScreenSize()
slot_328_5_0 = draw.Vec2(slot_328_3_0 * 0.5, slot_328_4_0 * 0.5)
slot_328_6_0 = draw.GetScale()
slot_328_7_0 = sl_arrows_radius:GetValue():Get() * slot_328_6_0
slot_328_8_0 = sl_arrow_size:GetValue():Get() / 10
slot_328_9_0 = 10 * slot_328_6_0 * slot_328_8_0
slot_328_10_0 = 200 * slot_328_6_0 * slot_328_8_0
slot_328_11_0 = draw.surface
slot_328_11_0.font = draw.fonts.gui_main
slot_328_11_0.g:SetTexture(nil)
slot_328_11_0.g.antiAlias = true
slot_328_12_0 = clr_arrows_color:GetValue():Get()
slot_328_13_0 = slot_328_12_0
if cb_arrow_pulse:GetValue():Get() then
slot_328_14_1 = game.globalVars.m_flRealTime * 2 % 2
if slot_328_14_1 > 1 then
slot_328_14_1 = 2 - slot_328_14_1
end
slot_328_15_1 = max_alpha - slot_328_14_1 * (max_alpha - min_alpha)
slot_328_13_0 = slot_328_12_0:A(slot_328_15_1)
end
slot_328_14_0 = math.rad
slot_328_15_0 = slot_328_14_0(120)
slot_328_16_0 = slot_328_14_0(210)
slot_328_18_0 = ({
function(arg_329_0, arg_329_1, arg_329_2)
local var_329_0 = arg_329_0
local var_329_1 = arg_329_1
slot_328_11_0:AddLine(var_329_0, draw.Vec2(var_329_0.x + math.cos(var_329_1 + slot_328_16_0) * slot_328_9_0 * 1.4, var_329_0.y + math.sin(var_329_1 + slot_328_16_0) * slot_328_9_0 * 1.4), arg_329_2, 2 * slot_328_6_0)
slot_328_11_0:AddLine(var_329_0, draw.Vec2(var_329_0.x + math.cos(var_329_1 - slot_328_16_0) * slot_328_9_0 * 1.4, var_329_0.y + math.sin(var_329_1 - slot_328_16_0) * slot_328_9_0 * 1.4), arg_329_2, 2 * slot_328_6_0)
end,
function(arg_330_0, arg_330_1, arg_330_2)
slot_330_3_0 = draw.Vec2(math.cos(arg_330_1) * 2, math.sin(arg_330_1) * 2)
slot_330_4_0 = draw.Vec2(arg_330_0.x + slot_330_3_0.x, arg_330_0.y + slot_330_3_0.y)
slot_330_5_0 = nil
if cb_arrow_pulse:GetValue():Get() then
slot_330_6_1 = game.globalVars.m_flRealTime * 2 % 2
if slot_330_6_1 > 1 then
slot_330_6_1 = 2 - slot_330_6_1
end
slot_330_7_1 = 20
slot_330_8_1 = 50
slot_330_5_0 = slot_330_8_1 - slot_330_6_1 * (slot_330_8_1 - slot_330_7_1)
slot_330_5_0 = math.floor(slot_330_5_0 + 0.5)
else
slot_330_5_0 = 50
end
slot_328_11_0:AddCircleFilledMulticolor(slot_330_4_0, slot_328_9_0 * 1.3, {
draw.Color(slot_328_12_0:GetR(), slot_328_12_0:GetG(), slot_328_12_0:GetB(), slot_330_5_0),
draw.Color(slot_328_12_0:GetR(), slot_328_12_0:GetG(), slot_328_12_0:GetB(), 0)
}, 12, 1)
slot_330_6_0 = draw.Vec2(arg_330_0.x + math.cos(arg_330_1) * slot_328_9_0 * 1.1, arg_330_0.y + math.sin(arg_330_1) * slot_328_9_0 * 1.1)
slot_330_7_0 = draw.Vec2(arg_330_0.x + math.cos(arg_330_1 + slot_328_15_0) * slot_328_9_0, arg_330_0.y + math.sin(arg_330_1 + slot_328_15_0) * slot_328_9_0)
slot_330_8_0 = draw.Vec2(arg_330_0.x + math.cos(arg_330_1 - slot_328_15_0) * slot_328_9_0, arg_330_0.y + math.sin(arg_330_1 - slot_328_15_0) * slot_328_9_0)
slot_330_9_0 = draw.Vec2((slot_330_7_0.x + slot_330_8_0.x) * 0.5 + math.cos(arg_330_1) * slot_328_9_0 * 0.6, (slot_330_7_0.y + slot_330_8_0.y) * 0.5 + math.sin(arg_330_1) * slot_328_9_0 * 0.6)
slot_328_11_0:AddTriangleFilled(slot_330_6_0, slot_330_7_0, slot_330_9_0, arg_330_2)
slot_328_11_0:AddTriangleFilled(slot_330_6_0, slot_330_9_0, slot_330_8_0, arg_330_2)
end
})[slot_328_1_0]
if not slot_328_18_0 then
return
end
if enemies_cache_counter <= 0 then
update_enemies_cache()
enemies_cache_counter = enemies_cache_interval
else
enemies_cache_counter = enemies_cache_counter - 1
end
for iter_328_0, iter_328_1 in ipairs(enemies_cache) do
slot_328_24_0 = iter_328_1.pawn
if slot_328_24_0 and slot_328_24_0:IsAlive() then
slot_328_25_0 = slot_328_24_0:GetAbsOrigin()
slot_328_26_0 = math.WorldToScreen(slot_328_25_0)
if slot_328_26_0 and slot_328_26_0.x >= 0 and slot_328_3_0 >= slot_328_26_0.x and slot_328_26_0.y >= 0 and slot_328_4_0 >= slot_328_26_0.y then
-- block empty
else
slot_328_27_0 = math.max(0, math.min(slot_328_3_0, slot_328_26_0.x))
slot_328_28_0 = math.max(0, math.min(slot_328_4_0, slot_328_26_0.y))
if slot_328_26_0.x < 0 then
slot_328_27_0 = 0
end
if slot_328_3_0 < slot_328_26_0.x then
slot_328_27_0 = slot_328_3_0
end
if slot_328_26_0.y < 0 then
slot_328_28_0 = 0
end
if slot_328_4_0 < slot_328_26_0.y then
slot_328_28_0 = slot_328_4_0
end
slot_328_29_0 = draw.Vec2(slot_328_27_0, slot_328_28_0)
slot_328_30_0 = slot_328_26_0.x - slot_328_3_0 / 2
slot_328_31_0 = slot_328_26_0.y - slot_328_4_0 / 2
slot_328_32_0 = math.atan2(slot_328_31_0, slot_328_30_0)
slot_328_33_0 = draw.Vec2(slot_328_5_0.x + math.cos(slot_328_32_0) * slot_328_7_0, slot_328_5_0.y + math.sin(slot_328_32_0) * slot_328_7_0)
slot_328_34_0 = slot_328_32_0
slot_328_18_0(slot_328_33_0, slot_328_34_0, slot_328_13_0)
end
end
end
end
cb_arrows:AddCallback(function()
Delay(0.1, function()
if not cb_arrows:GetValue():Get() then
events.presentQueue:Remove(arrows)
else
events.presentQueue:Add(arrows)
end
end)
end)
function manuals()
if not game.engine:InGame() or not game.engine:IsConnected() then
return
end
local var_333_0 = entities.GetLocalPawn()
if not var_333_0 or not var_333_0:IsAlive() then
return
end
local var_333_1 = cbx_manuals_type:GetValue():Get():GetRaw()
local var_333_2 = gui.IsVisible()
local var_333_3 = {
left = config.anti_aim.left_override:GetValue():Get(),
right = config.anti_aim.right_override:GetValue():Get(),
back = config.anti_aim.back_override:GetValue():Get(),
forward = config.anti_aim.forward_override:GetValue():Get()
}
if not var_333_2 and not var_333_3.left and not var_333_3.right and not var_333_3.back and not var_333_3.forward then
return
end
local var_333_4, var_333_5 = game.engine:GetScreenSize()
local var_333_6 = draw.Vec2(var_333_4 * 0.5, var_333_5 * 0.5)
local var_333_7 = draw.GetScale()
local var_333_8 = clr_manuals_color:GetValue():Get()
local var_333_9 = sl_manuals_radius:GetValue():Get() * var_333_7
local var_333_10 = sl_manuals_size:GetValue():Get() / 10
local var_333_11 = 10 * var_333_7 * var_333_10
local var_333_12 = draw.surface
var_333_12.font = draw.fonts.gui_main
var_333_12.g:SetTexture(nil)
var_333_12.g.antiAlias = true
local var_333_13 = ({
function(arg_334_0, arg_334_1, arg_334_2)
local var_334_0 = math.rad(arg_334_1)
local var_334_1 = draw.Vec2(arg_334_0.x + math.cos(var_334_0) * var_333_11 * 1.3, arg_334_0.y + math.sin(var_334_0) * var_333_11 * 1.3)
var_333_12:AddTriangleFilled(var_334_1, draw.Vec2(arg_334_0.x + math.cos(var_334_0 + 2.094) * var_333_11, arg_334_0.y + math.sin(var_334_0 + 2.094) * var_333_11), draw.Vec2(arg_334_0.x + math.cos(var_334_0 - 2.094) * var_333_11, arg_334_0.y + math.sin(var_334_0 - 2.094) * var_333_11), arg_334_2)
end,
function(arg_335_0, arg_335_1, arg_335_2)
local var_335_0 = math.rad(arg_335_1 + 180)
local var_335_1 = 0.524
local var_335_2 = var_333_11 * 1.4
var_333_12:AddLine(arg_335_0, draw.Vec2(arg_335_0.x + math.cos(var_335_0 + var_335_1) * var_335_2, arg_335_0.y + math.sin(var_335_0 + var_335_1) * var_335_2), arg_335_2, 2 * var_333_7)
var_333_12:AddLine(arg_335_0, draw.Vec2(arg_335_0.x + math.cos(var_335_0 - var_335_1) * var_335_2, arg_335_0.y + math.sin(var_335_0 - var_335_1) * var_335_2), arg_335_2, 2 * var_333_7)
end,
[4] = function(arg_336_0, arg_336_1, arg_336_2)
var_333_12:AddCircleFilled(arg_336_0, var_333_11 * 0.8, arg_336_2, 0, 1)
end,
[8] = function(arg_337_0, arg_337_1, arg_337_2)
local var_337_0 = math.rad(arg_337_1)
local var_337_1 = var_333_11
local var_337_2 = draw.Vec2(math.cos(var_337_0) * 2, math.sin(var_337_0) * 2)
local var_337_3 = draw.Vec2(arg_337_0.x + var_337_2.x, arg_337_0.y + var_337_2.y)
var_333_12:AddCircleFilledMulticolor(var_337_3, var_337_1 * 1.3, {
draw.Color(var_333_8:GetR(), var_333_8:GetG(), var_333_8:GetB(), 50),
draw.Color(var_333_8:GetR(), var_333_8:GetG(), var_333_8:GetB(), 0)
}, 12, 1)
local var_337_4 = draw.Vec2(arg_337_0.x + math.cos(var_337_0) * var_337_1 * 1.1, arg_337_0.y + math.sin(var_337_0) * var_337_1 * 1.1)
local var_337_5 = draw.Vec2(arg_337_0.x + math.cos(var_337_0 + 2.094) * var_337_1, arg_337_0.y + math.sin(var_337_0 + 2.094) * var_337_1)
local var_337_6 = draw.Vec2(arg_337_0.x + math.cos(var_337_0 - 2.094) * var_337_1, arg_337_0.y + math.sin(var_337_0 - 2.094) * var_337_1)
local var_337_7 = draw.Vec2((var_337_5.x + var_337_6.x) * 0.5 + math.cos(var_337_0) * var_337_1 * 0.6, (var_337_5.y + var_337_6.y) * 0.5 + math.sin(var_337_0) * var_337_1 * 0.6)
var_333_12:AddTriangleFilled(var_337_4, var_337_5, var_337_7, arg_337_2)
var_333_12:AddTriangleFilled(var_337_4, var_337_7, var_337_6, arg_337_2)
end,
[16] = function(arg_338_0, arg_338_1, arg_338_2)
local var_338_0 = arg_338_2
local var_338_1 = draw.Color(arg_338_2:GetR(), arg_338_2:GetG(), arg_338_2:GetB(), 0)
var_333_12:AddCircleFilledMulticolor(arg_338_0, var_333_11 * 1.2, {
var_338_0,
var_338_1
}, 36, 1)
end
})[var_333_1]
if not var_333_13 then
return
end
local var_333_14 = {
{
dir = 180,
y = 0,
condition = var_333_3.left,
x = -var_333_9
},
{
dir = 0,
y = 0,
condition = var_333_3.right,
x = var_333_9
},
{
x = 0,
dir = 90,
condition = var_333_3.back,
y = var_333_9
},
{
x = 0,
dir = 270,
condition = var_333_3.forward,
y = -var_333_9
}
}
for iter_333_0, iter_333_1 in ipairs(var_333_14) do
if iter_333_1.condition then
var_333_13(draw.Vec2(var_333_6.x + iter_333_1.x, var_333_6.y + iter_333_1.y), iter_333_1.dir, var_333_8)
end
end
if var_333_2 then
for iter_333_2 = 1, 2 do
local var_333_15 = var_333_14[iter_333_2]
if not var_333_15.condition then
var_333_13(draw.Vec2(var_333_6.x + var_333_15.x, var_333_6.y + var_333_15.y), var_333_15.dir, var_333_8)
end
end
end
end
cb_manuals:AddCallback(function()
Delay(0.1, function()
if not cb_manuals:GetValue():Get() then
events.presentQueue:Remove(manuals)
else
events.presentQueue:Add(manuals)
end
end)
end)
if build == "alpha" then
ghost = false
count_team = nil
count_switch = 0
repeating = false
repeat_start_time = nil
repeat_command = nil
events.event:add(function(arg_341_0)
if not cb_ghost:GetValue():Get() then
return
end
if arg_341_0:GetName() == "round_start" then
ghost = true
local var_341_0 = entities.GetLocalPawn()
if not var_341_0 or not var_341_0:IsAlive() then
return
end
count_team = var_341_0.m_iTeamNum:Get()
count_switch = 0
repeating = false
repeat_start_time = nil
repeat_command = nil
end
end)
events.presentQueue:Add(function()
if not cb_ghost:GetValue():Get() then
ghost = false
return
end
local var_342_0 = entities.GetLocalPawn()
if not var_342_0 or not var_342_0:IsAlive() then
return
end
local var_342_1 = var_342_0.m_iTeamNum:Get()
local var_342_2 = game.globalVars.m_flRealTime
if repeating and repeat_command then
local var_342_3 = var_342_2 - repeat_start_time
if var_342_3 <= 4 then
local var_342_4 = 0.05
local var_342_5 = math.floor(var_342_3 / var_342_4)
local var_342_6 = repeat_start_time + var_342_5 * var_342_4
if var_342_6 <= var_342_2 and var_342_2 - var_342_6 < 0.016 then
panorama.Eval(repeat_command, "CSGOTeamSelectMenu")
count_switch = 2
end
else
repeating = false
repeat_command = nil
end
end
if count_team == 2 and count_switch == 0 then
panorama.Eval("GameInterfaceAPI.ConsoleCommand('jointeam 3 1')", "CSGOTeamSelectMenu")
count_switch = 1
elseif var_342_1 == 3 and count_switch == 1 then
Delay(0.5, function()
repeating = true
repeat_start_time = game.globalVars.m_flRealTime
repeat_command = "GameInterfaceAPI.ConsoleCommand('jointeam 2 1')"
end)
end
if count_team == 3 and count_switch == 0 then
panorama.Eval("GameInterfaceAPI.ConsoleCommand('jointeam 2 1')", "CSGOTeamSelectMenu")
count_switch = 1
elseif var_342_1 == 2 and count_switch == 1 then
Delay(0.5, function()
repeating = true
repeat_start_time = game.globalVars.m_flRealTime
repeat_command = "GameInterfaceAPI.ConsoleCommand('jointeam 3 1')"
end)
end
end)
events.overrideView:Add(function(arg_345_0)
if not ghost then
return
end
local var_345_0 = entities.GetLocalPawn()
if not var_345_0 then
return
end
local var_345_1 = var_345_0:GetEyePos()
arg_345_0.m_vecView, arg_345_0.m_vecOrigin = game.input:GetViewAngles(), var_345_1
end)
end
mods.events:AddListener("game_newmap")
events.event:add(function(arg_346_0)
if arg_346_0:GetName() == "cs_intermission" then
clanTagOff = false
end
if arg_346_0:GetName() == "game_newmap" or arg_346_0:GetName() == "round_start" then
log_menu.show_log_menu = false
log_menu.show_update_log_menu = false
last_toggle_time = 0
clanTagOff = true
lastSetName = nil
lastCountValue = nil
lastCountUpdateTime = nil
last128Progress = nil
lastTextCheck = nil
angle = 0
last_hit_time = 0
hit_cooldown = 1
hit_effect_duration = 1
lerp_duration = 0.2
kill_pos = nil
kill_time = 0
viewmodel_hit_active = false
lerp_from_hit = {
started = false
}
fd_animation_active = false
fd_animation_time = 0
fd_animation_direction = 1
fd_animation_min = -20
fd_animation_duration = 0.15
fd_initial_offset = nil
circles = {}
enemies_cache = {}
enemies_cache_counter = 0
enemies_cache_interval = 100
recent_bullet_impacts = {}
hit_markers = {}
max_bullet_history = 30
flinck_cache = {
previous_new = 1,
last_update_time = 0,
was_less_than_one = false,
previous = 0,
disable_until = 0
}
autofire_disabled = false
disable_time = 0
grenade_throw_time = nil
grenade_draw_time = -1
last_weapon_id = nil
pending_left = false
pending_right = false
pending_release_left = false
pending_release_right = false
auto_state = nil
auto_tick = 0
GRENADE_BLOCK_TIME = 1
mouse = {
right = false,
left = false
}
reset()
end
if arg_346_0:GetName() == "game_newmap" then
last_time = 0
last_fps_update_time = 0
frame_count_prev = 0
current_fps = 0
fps_update_interval = 1
last_low_time = 0
last_frame_count = 0
LOW_FPS_HISTORY_SIZE = 1000
cached_fps_text = "FPS: 0"
cached_fps_width = 0
cached_data = {
username_text = "",
ping = "",
ip = "",
last_update = 0,
elapsed = "",
time = "",
map = "",
tag_text = ""
}
current_count = 1000
normal_hitlogs = {}
left_top_hitlogs = {}
got_hitlogs = {}
hitlogs_last = {
time = 0,
hitbox = 0,
damage = 0
}
should_drop_items = false
last_direction = {
w = false,
s = false,
a = false,
d = false
}
last_key_release_time = {
w = 0,
s = 0,
a = 0,
d = 0
}
saved_slowwalk_speed = nil
active_slowwalk_controller = nil
slowwalk_start_time = nil
last_opposite_press_time = 0
last_ground_time = 0
just_entered_air = false
was_in_air = false
end
end)
function __shutdown()
restore_jump_settings()
restore_boost_settings()
restore_accuracy_autostop()
if yaw_base_saved and yaw_base_original then
set_yaw_base(yaw_base_original)
yaw_base_saved = false
yaw_base_original = nil
end
local var_347_0 = config.anti_aim.right_override
local var_347_1 = config.anti_aim.left_override
var_347_0:SetValue(false)
var_347_1:SetValue(false)
if saved_primary_bitmask ~= nil then
local var_347_2 = primary_selector:GetValue()
if var_347_2 then
local var_347_3 = var_347_2:Get()
var_347_3:SetRaw(saved_primary_bitmask)
var_347_2:Set(var_347_3)
primary_selector:Reset()
end
end
if saved_autobuy_enabled ~= nil then
autobuy_enabled_ctrl:SetValue(saved_autobuy_enabled)
end
if enabled_cl and realName then
updateName(realName)
end
if arms_state.is_toggled then
restore_arms()
end
if is_chams_overridden then
is_chams_overridden = false
last_override_reason = nil
update_all_chams(false)
end
if was_enabled_shadows then
local var_347_4 = gui.ctx:Find("visuals>world>environment>removals")
if var_347_4 and original_bits_shadows then
local var_347_5 = var_347_4:GetValue()
local var_347_6 = var_347_5:Get()
var_347_6:SetRaw(original_bits_shadows)
var_347_5:Set(var_347_6)
var_347_4:Reset()
original_bits_shadows = nil
end
was_enabled_shadows = false
end
end
events.createMove:Add(function(arg_348_0)
arg_348_0:RemoveButton(InputBitMask_t.IN_SCORE)
end)