This repository has been archived by the owner on Jul 18, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 37
/
Copy pathinvisible_esp.lua
110 lines (91 loc) · 8.06 KB
/
invisible_esp.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
--local variables for API. Automatically generated by https://github.com/simpleavaster/gslua/blob/master/authors/sapphyrus/generate_api.lua
local client_latency, client_set_clan_tag, client_log, client_draw_rectangle, client_draw_indicator, client_draw_circle_outline, client_timestamp, client_world_to_screen, client_userid_to_entindex = client.latency, client.set_clan_tag, client.log, client.draw_rectangle, client.draw_indicator, client.draw_circle_outline, client.timestamp, client.world_to_screen, client.userid_to_entindex
local client_draw_circle, client_draw_gradient, client_set_event_callback, client_screen_size, client_trace_line, client_draw_text, client_color_log = client.draw_circle, client.draw_gradient, client.set_event_callback, client.screen_size, client.trace_line, client.draw_text, client.color_log
local client_system_time, client_delay_call, client_visible, client_exec, client_open_panorama_context, client_set_cvar, client_eye_position = client.system_time, client.delay_call, client.visible, client.exec, client.open_panorama_context, client.set_cvar, client.eye_position
local client_draw_hitboxes, client_get_cvar, client_draw_line, client_camera_angles, client_draw_debug_text, client_random_int, client_random_float = client.draw_hitboxes, client.get_cvar, client.draw_line, client.camera_angles, client.draw_debug_text, client.random_int, client.random_float
local entity_get_local_player, entity_is_enemy, entity_is_dormant, entity_hitbox_position, entity_get_player_name, entity_get_steam64, entity_get_bounding_box, entity_get_all, entity_set_prop = entity.get_local_player, entity.is_enemy, entity.is_dormant, entity.hitbox_position, entity.get_player_name, entity.get_steam64, entity.get_bounding_box, entity.get_all, entity.set_prop
local entity_is_alive, entity_get_player_weapon, entity_get_prop, entity_get_players, entity_get_classname = entity.is_alive, entity.get_player_weapon, entity.get_prop, entity.get_players, entity.get_classname
local globals_realtime, globals_absoluteframetime, globals_tickcount, globals_curtime, globals_mapname, globals_tickinterval, globals_framecount, globals_frametime, globals_maxplayers = globals.realtime, globals.absoluteframetime, globals.tickcount, globals.curtime, globals.mapname, globals.tickinterval, globals.framecount, globals.frametime, globals.maxplayers
local ui_new_slider, ui_new_combobox, ui_reference, ui_set_visible, ui_is_menu_open, ui_new_color_picker, ui_set_callback, ui_set = ui.new_slider, ui.new_combobox, ui.reference, ui.set_visible, ui.is_menu_open, ui.new_color_picker, ui.set_callback, ui.set
local ui_new_checkbox, ui_new_hotkey, ui_new_button, ui_new_multiselect, ui_get = ui.new_checkbox, ui.new_hotkey, ui.new_button, ui.new_multiselect, ui.get
local math_ceil, math_tan, math_cos, math_sinh, math_pi, math_max, math_atan2, math_floor, math_sqrt, math_deg, math_atan, math_fmod, math_acos = math.ceil, math.tan, math.cos, math.sinh, math.pi, math.max, math.atan2, math.floor, math.sqrt, math.deg, math.atan, math.fmod, math.acos
local math_pow, math_abs, math_min, math_sin, math_log, math_exp, math_cosh, math_asin, math_rad = math.pow, math.abs, math.min, math.sin, math.log, math.exp, math.cosh, math.asin, math.rad
local table_sort, table_remove, table_concat, table_insert = table.sort, table.remove, table.concat, table.insert
local string_find, string_format, string_gsub, string_len, string_gmatch, string_match, string_reverse, string_upper, string_lower, string_sub = string.find, string.format, string.gsub, string.len, string.gmatch, string.match, string.reverse, string.upper, string.lower, string.sub
local renderer_line, renderer_indicator, renderer_world_to_screen, renderer_circle_outline, renderer_rectangle, renderer_gradient, renderer_circle, renderer_text = renderer.line, renderer.indicator, renderer.world_to_screen, renderer.circle_outline, renderer.rectangle, renderer.gradient, renderer.circle, renderer.text
--end of local variables
local enabled_reference = ui.new_combobox("VISUALS", "Player ESP", "Invisible ESP", {"Off", "Top", "Bottom"})
local hotkey_reference = ui.new_hotkey("VISUALS", "Player ESP", "Invisible ESP hotkey", true)
local color_reference = ui.new_color_picker("VISUALS", "Player ESP", "Invisible ESP", 0, 255, 0, 190)
local function on_enabled_changed()
local enabled = ui_get(enabled_reference)
ui_set_visible(hotkey_reference, enabled ~= "Off")
end
ui.set_callback(enabled_reference, on_enabled_changed)
on_enabled_changed()
local function entity_hitbox_position_with_offset(entity, hitbox, offset_x, offset_y, offset_z, ctx)
local pos_x, pos_y, pos_z = entity_hitbox_position(entity, 0)
pos_x = pos_x + offset_x
pos_y = pos_y + offset_y
pos_z = pos_z + offset_z
return client_world_to_screen(ctx, pos_x, pos_y, pos_z)
end
local function nil_check(val, fn, ...)
--performance reasons, if one w2s already returned nil we don't need to do anything, so we're just gonna return
--this will result in all subsequent calls to this function to return nil too, since we're passing the result of the previous function as val.
--if anyone can come up with a cleaner way to do this that doesn't involve too much spaghetti code let me know
if val == nil then
return
end
return fn(...)
end
local offset = 3.5 --estimated head 'radius', but we're not even using a real circle
local debug_draw = false
local height = 1
local function on_paint(ctx)
local enabled = ui_get(enabled_reference)
if enabled == "Off" then
return
end
if ctx == nil then ctx = {} end
local screen_width, screen_height = client_screen_size()
local r, g, b, a = ui_get(color_reference)
local y = enabled == "Top" and 0 or (screen_height - height)
--draw 1 pixel high background
client_draw_rectangle(ctx, 0, y, screen_width, height, 0, 0, 0, 255)
if not ui_get(hotkey_reference) then
return
end
local enemies = entity_get_players(true)
for i=1, #enemies do
local enemy = enemies[i]
--don't judge
local screen_x_pp, screen_y_pp = entity_hitbox_position_with_offset(enemy, 0, offset, offset, 0, ctx)
local screen_x_pm, screen_y_pm = nil_check(screen_x_pp, entity_hitbox_position_with_offset, enemy, 0, offset, -offset, 0, ctx)
local screen_x_mp, screen_y_mp = nil_check(screen_x_pm, entity_hitbox_position_with_offset, enemy, 0, -offset, offset, 0, ctx)
local screen_x_mm, screen_y_mm = nil_check(screen_x_mp, entity_hitbox_position_with_offset, enemy, 0, -offset, -offset, 0, ctx)
local screen_x_np, screen_y_np = nil_check(screen_x_mm, entity_hitbox_position_with_offset, enemy, 0, 0, offset, 0, ctx)
local screen_x_nm, screen_y_nm = nil_check(screen_x_np, entity_hitbox_position_with_offset, enemy, 0, 0, -offset, 0, ctx)
local screen_x_mn, screen_y_mn = nil_check(screen_x_nm, entity_hitbox_position_with_offset, enemy, 0, -offset, 0, 0, ctx)
local screen_x_pn, screen_y_pn = nil_check(screen_x_mn, entity_hitbox_position_with_offset, enemy, 0, offset, 0, 0, ctx)
--if any of the calls to entity_hitbox_position_with_offset returned nil, this will be nil
if screen_x_pn ~= nil then
if debug_draw then
client_draw_rectangle(ctx, screen_x_pp, screen_y_pp, 2, 2, 255, 255, 255, 255)
client_draw_rectangle(ctx, screen_x_pm, screen_y_pm, 2, 2, 255, 255, 255, 255)
client_draw_rectangle(ctx, screen_x_mp, screen_y_mp, 2, 2, 255, 255, 255, 255)
client_draw_rectangle(ctx, screen_x_mm, screen_y_mm, 2, 2, 255, 255, 255, 255)
client_draw_rectangle(ctx, screen_x_np, screen_y_np, 2, 2, 255, 255, 255, 255)
client_draw_rectangle(ctx, screen_x_nm, screen_y_nm, 2, 2, 255, 255, 255, 255)
client_draw_rectangle(ctx, screen_x_mn, screen_y_mn, 2, 2, 255, 255, 255, 255)
client_draw_rectangle(ctx, screen_x_pn, screen_y_pn, 2, 2, 255, 255, 255, 255)
end
--get leftmost and rightmost screen coordinate
local x_left = math_min(screen_x_pp, screen_x_pm, screen_x_mp, screen_x_mm, screen_x_np, screen_x_nm, screen_x_mn, screen_x_pn)
local x_right = math_max(screen_x_pp, screen_x_pm, screen_x_mp, screen_x_mm, screen_x_np, screen_x_nm, screen_x_mn, screen_x_pn)
local width = x_right - x_left
client_draw_rectangle(ctx, x_left, y, width, height, r, g, b, a)
end
end
end
client_set_event_callback("paint", on_paint)