This project represents a collection of visuals / wall hacks (Tracers, ESP, Boxes, Head Dots & Crosshair). This script is also undetected because it uses Synapse X's Drawing Library. It has modulized support for NPCs & parts and it offers a very simple and easy to use wrapping and unwrapping system.
This project's source is optimized, organized and simplified to the maximal level to be executive, fast, stable and precise.
This project is in beta testing, feel free to create pull requests (you will get credited), issues or just contact me on any of my linked platforms.
This project has been inspired from AirHub which has an improved version of my old examplery discontinued wall hack script. It has a FPS-styled look which looks beautiful for any game.
This project is used in the new AirHub V2 where you can use and edit the configuration through a GUI (it also includes a really fast Aimbot).
This project has been written and tested with Synapse X and Electron. However, I will do my best to modularize support for every exploit. So far, the required functions for this module to run are listed below:
Dependencies (required functions & libraries):
-
Libraries & Methods:
- Drawing
- Drawing.new (function)
- Drawing.Fonts (table)
- debug
- debug.getupvalue (function)
- Drawing
-
Functions:
- getgenv
- getrawmetatable
- gethiddenproperty
- cloneref
- clonefunction
- setrenderproperty
- getrenderproperty
- cleardrawcache
This project also uses Exunys' Config Library as a way of storing user settings, meaning, your script executor must support the dependencies for the module if you want the configuration storing & loading functions in the ESP module to function.
This project is completely free and open source. However, that does not mean you own the rights to it. Please read this document for more information. You can reuse or integrate this script or any system from this project into your own repositories, as long as you credit the developer, Exunys (me).
14/04/2023
- [v1.0b] First (BETA) release
15/04/2023
- [v1.0.3b] Optimizations, bug fixes, silenced errors
18/04/2023
- [v1.0.8b] Optimizations & bug fixes, added distance parameter for wrapping
19/04/2023
- [v1.1.1b] Optimizations, bug fixes, improved
Restart
interactive method, added new core function for getting the local users's positions and more...
31/08/2023
- [v1.1.3b] Added a variable that changes the teammates' visuals' color to differ from the enemies (team color) and made the script return the environment
18/08/2024
- [v1.1.4b] Packed the module to a singular file with support for any executor and more...
22/08/2024
- [v1.1.5b] Added screen resolution stretching
29/08/2024
- [v1.1.6b] Shelved chams & bug fixes
09/10/2024
- [v1.1.6b] Shelved screen resolution stretching, bug fixes, brought back chams
16/11/2024
- [v1.1.8b] Bug fixes, logic improvements & minor optimizations.
The documentation for the methods of this module can be found here.
First of all, to implement the module in your script's environment you must use the function loadstring
like below:
local ESPLibrary = loadstring(game:HttpGet("https://raw.githubusercontent.com/Exunys/Exunys-ESP/main/src/ESP.lua"))()
-- ESPLibrary and getgenv().ExunysDeveloperESP is equivalent.
The code above loads the module's environment in your script executor's global environment meaning it will be achievable across every script.
The identificator for the environment is ExunysDeveloperESP
which is a table that has configurable settings and interactive methods.
The table loaded into the exploit's global environment by the module has a metatable set to it with a __call metamethod, meaning you can call the table which would wrap every player in the game and render a crosshair.
ExunysDeveloperESP()
-- or
loadstring(game:HttpGet("https://raw.githubusercontent.com/Exunys/Exunys-ESP/main/src/ESP.lua"))()()
This is a pointer to the Load
method. Loading the module this way would be a faster alternative.
ExunysDeveloperESP.Load()
This module has customizable settings for every drawing property and other miscellaneous properties with unique functions. You can see the configurable settings below.
The script's configurable settings
getgenv().ExunysDeveloperESP = {
DeveloperSettings = {
Path = "Exunys Developer/Exunys ESP/Configuration.cfg",
UnwrapOnCharacterAbsence = false,
UpdateMode = "RenderStepped",
TeamCheckOption = "TeamColor",
RainbowSpeed = 1, -- Bigger = Slower
WidthBoundary = 1.5 -- Smaller Value = Bigger Width
},
Settings = {
Enabled = true,
PartsOnly = false,
TeamCheck = false,
AliveCheck = true,
LoadConfigOnLaunch = true,
EnableTeamColors = false,
TeamColor = Color3.fromRGB(170, 170, 255),
StretchScreenResoultion = false,
StretchAmount = 0.75
},
Properties = {
ESP = {
Enabled = true,
RainbowColor = false,
RainbowOutlineColor = false,
Offset = 10,
Color = Color3.fromRGB(255, 255, 255),
Transparency = 1,
Size = 14,
Font = DrawingFonts.Plex, -- Direct2D Fonts: {UI, System, Plex, Monospace}; ROBLOX Fonts: {Roboto, Legacy, SourceSans, RobotoMono}
OutlineColor = Color3.fromRGB(0, 0, 0),
Outline = true,
DisplayDistance = true,
DisplayHealth = false,
DisplayName = false,
DisplayDisplayName = true,
DisplayTool = true
},
Tracer = {
Enabled = true,
RainbowColor = false,
RainbowOutlineColor = false,
Position = 1, -- 1 = Bottom; 2 = Center; 3 = Mouse
Transparency = 1,
Thickness = 1,
Color = Color3.fromRGB(255, 255, 255),
Outline = true,
OutlineColor = Color3.fromRGB(0, 0, 0)
},
HeadDot = {
Enabled = true,
RainbowColor = false,
RainbowOutlineColor = false,
Color = Color3.fromRGB(255, 255, 255),
Transparency = 1,
Thickness = 1,
NumSides = 30,
Filled = false,
OutlineColor = Color3.fromRGB(0, 0, 0),
Outline = true
},
Box = {
Enabled = true,
RainbowColor = false,
RainbowOutlineColor = false,
Color = Color3.fromRGB(255, 255, 255),
Transparency = 1,
Thickness = 1,
Filled = false,
OutlineColor = Color3.fromRGB(0, 0, 0),
Outline = true
},
HealthBar = {
Enabled = true,
RainbowOutlineColor = false,
Offset = 4,
Blue = 100,
Position = 3, -- 1 = Top; 2 = Bottom; 3 = Left; 4 = Right
Thickness = 1,
Transparency = 1,
OutlineColor = Color3.fromRGB(0, 0, 0),
Outline = true
},
Chams = {
Enabled = true,
RainbowColor = false,
Color = Color3fromRGB(255, 255, 255),
Transparency = 0.2,
Thickness = 1,
Filled = false
},
Crosshair = {
Enabled = true,
RainbowColor = false,
RainbowOutlineColor = false,
TStyled = false,
Position = 1, -- 1 = Mouse; 2 = Center
Size = 12,
GapSize = 6,
Rotation = 0,
Rotate = false,
RotateClockwise = true,
RotationSpeed = 5,
PulseGap = false,
PulsingStep = 10,
PulsingSpeed = 5,
PulsingBounds = {4, 8}, -- {...}[1] => GapSize Min; {...}[2] => GapSize Max
Color = Color3.fromRGB(0, 255, 0),
Thickness = 1,
Transparency = 1,
OutlineColor = Color3.fromRGB(0, 0, 0),
Outline = true,
CenterDot = {
Enabled = true,
RainbowColor = false,
RainbowOutlineColor = false,
Radius = 2,
Color = Color3.fromRGB(0, 255, 0),
Transparency = 1,
Thickness = 1,
NumSides = 60,
Filled = false,
OutlineColor = Color3.fromRGB(0, 0, 0),
Outline = true
}
}
}
-- The rest is core data for the functionality of the module...
}
NOTE: Do not execute this code, it is attached here as an example, executing this would rewrite the environment and critical core data for the ESP to function. Instead if you want to change some setting make sure you use the example below:
loadstring(game:HttpGet("https://raw.githubusercontent.com/Exunys/Exunys-ESP/main/src/ESP.lua"))()
ExunysDeveloperESP.Settings.Enabled = false
Previews
(Crosshair with factory settings)
d4209590921119d9c7f6e263674fc32e.mp4
The settings for the video above:
ExunysDeveloperESP.RenderCrosshair()
ExunysDeveloperESP.DeveloperSettings.RainbowSpeed = 2.5
local CrosshairProperties = ExunysDeveloperESP.Properties.Crosshair
CrosshairProperties.RainbowColor = true
CrosshairProperties.Position = 2
CrosshairProperties.Size = 18
CrosshairProperties.Thickness = 2
CrosshairProperties.Rotate = true
CrosshairProperties.RotateClockwise = false
CrosshairProperties.RotationSpeed = 10
CrosshairProperties.PulseGap = true
CrosshairProperties.PulsingBounds = {0, 24}
CrosshairProperties.CenterDot.Color = Color3.fromHex("#FFFFFF")
Wrapping objects:
<string> Hash | ExunysDeveloperESP:WrapObject(<Instance> Object[, <string> Pseudo Name, <table> Allowed Visuals, <uint> Distance])
Unwrapping objects:
<void> | ExunysDeveloperESP.UnwrapObject(<Instance/string> Object / Hash)
It is more recommended you store & parse hashes (given from the WrapObject
method) for unwrapping the proxies with precise results.
For players, the method WrapObject
will only wrap & work on the parsed player object (class type: "Player") if the player has a character achievable by OBJECT.Character
.
Example program showcasing the part ESP - (WrapObject & UnwrapObject)
for Index, Value in next, workspace.Landmines:GetChildren() do
local Part = Value:IsA("Model") and gethiddenproperty(Value, "PrimaryPart")
if not Part then
continue
end
local Hash = ExunysDeveloperESP:WrapObject(Part, "Landmine "..Index, {Tracer = false})
task.delay(3, ExunysDeveloperESP.UnwrapObject, Hash)
end
a4ffe0c4a95812a3984f9d6bfa0da89c.mp4
These 2 methods also apply to players & NPCs (anything with a character).
Example program showcasing the ESP Module for NPCs
ExunysDeveloperESP:WrapObject(workspace.Dummys.Dummy, "Dumb Dummy")
-- The object parsed in the first parameter is a model that has an R15 character rig and a humanoid (which is a dependance)