if (not game:IsLoaded()) then game.Loaded:Wait(); end local UILibrary = loadstring(game:HttpGet("https://raw.githubusercontent.com/fatesc/fates-esp/main/ui.lua"))(); local PlaceId = game.PlaceId local Players = game:GetService("Players"); local HttpService = game:GetService("HttpService"); local Workspace = game:GetService("Workspace"); local Teams = game:GetService("Teams") local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService"); local CurrentCamera = Workspace.CurrentCamera local WorldToViewportPoint = CurrentCamera.WorldToViewportPoint local GetPartsObscuringTarget = CurrentCamera.GetPartsObscuringTarget local Inset = game:GetService("GuiService"):GetGuiInset().Y local FindFirstChild = game.FindFirstChild local FindFirstChildWhichIsA = game.FindFirstChildWhichIsA local IsA = game.IsA local Vector2new = Vector2.new local Vector3new = Vector3.new local CFramenew = CFrame.new local Color3new = Color3.new local Tfind = table.find local create = table.create local format = string.format local floor = math.floor local gsub = string.gsub local sub = string.sub local lower = string.lower local upper = string.upper local random = math.random local DefaultSettings = { Esp = { NamesEnabled = true, DisplayNamesEnabled = false, DistanceEnabled = true, HealthEnabled = true, TracersEnabled = false, BoxEsp = false, TeamColors = true, Thickness = 1.5, TracerThickness = 1.6, Transparency = .9, TracerTrancparency = .7, Size = 16, RenderDistance = 9e9, Color = Color3.fromRGB(19, 130, 226), OutlineColor = Color3new(), TracerTo = "Head", BlacklistedTeams = {} }, Aimbot = { Enabled = false, SilentAim = false, Wallbang = false, ShowFov = false, Snaplines = true, ThirdPerson = false, FirstPerson = false, ClosestCharacter = false, ClosestCursor = true, Smoothness = 1, SilentAimHitChance = 100, FovThickness = 1, FovTransparency = 1, FovSize = 150, FovColor = Color3new(1, 1, 1), Aimlock = "Head", SilentAimRedirect = "Head", BlacklistedTeams = {} }, WindowPosition = UDim2.new(0.5, -200, 0.5, -139); Version = 1.2 } local EncodeConfig, DecodeConfig; do local deepsearchset; deepsearchset = function(tbl, ret, value) if (type(tbl) == 'table') then local new = {} for i, v in next, tbl do new[i] = v if (type(v) == 'table') then new[i] = deepsearchset(v, ret, value); end if (ret(i, v)) then new[i] = value(i, v); end end return new end end DecodeConfig = function(Config) local DecodedConfig = deepsearchset(Config, function(Index, Value) return type(Value) == "table" and (Value.HSVColor or Value.Position); end, function(Index, Value) local Color = Value.HSVColor local Position = Value.Position if (Color) then return Color3.fromHSV(Color.H, Color.S, Color.V); end if (Position and Position.Y and Position.X) then return UDim2.new(UDim.new(Position.X.Scale, Position.X.Offset), UDim.new(Position.Y.Scale, Position.Y.Offset)); else return DefaultSettings.WindowPosition; end end); return DecodedConfig end EncodeConfig = function(Config) local ToHSV = Color3new().ToHSV local EncodedConfig = deepsearchset(Config, function(Index, Value) return typeof(Value) == "Color3" or typeof(Value) == "UDim2" end, function(Index, Value) local Color = typeof(Value) == "Color3" local Position = typeof(Value) == "UDim2" if (Color) then local H, S, V = ToHSV(Value); return { HSVColor = { H = H, S = S, V = V } }; end if (Position) then return { Position = { X = { Scale = Value.X.Scale, Offset = Value.X.Offset }; Y = { Scale = Value.Y.Scale, Offset = Value.Y.Offset } } }; end end) return EncodedConfig end end local GetConfig = function() local read, data = pcall(readfile, "fates-esp.json"); local canDecode, config = pcall(HttpService.JSONDecode, HttpService, data); if (read and canDecode) then local Decoded = DecodeConfig(config); if (Decoded.Version ~= DefaultSettings.Version) then local Encoded = HttpService:JSONEncode(EncodeConfig(DefaultSettings)); writefile("fates-esp.json", Encoded); return DefaultSettings; end return Decoded; else local Encoded = HttpService:JSONEncode(EncodeConfig(DefaultSettings)); writefile("fates-esp.json", Encoded); return DefaultSettings end end local Settings = GetConfig(); local LocalPlayer = Players.LocalPlayer local Mouse = LocalPlayer:GetMouse(); local MouseVector = Vector2new(Mouse.X, Mouse.Y); local Characters = {} local CustomGet = { [0] = function() return {} end } local Get; if (CustomGet[PlaceId]) then Get = CustomGet[PlaceId](); end local GetCharacter = function(Player) if (Get) then return Get.GetCharacter(Player); end return Player.Character end local CharacterAdded = function(Player, Callback) if (Get) then return end Player.CharacterAdded:Connect(Callback); end local CharacterRemoving = function(Player, Callback) if (Get) then return end Player.CharacterRemoving:Connect(Callback); end local GetTeam = function(Player) if (Get) then return Get.GetTeam(Player); end return Player.Team end local Drawings = {} local AimbotSettings = Settings.Aimbot local EspSettings = Settings.Esp local FOV = Drawing.new("Circle"); FOV.Color = AimbotSettings.FovColor FOV.Thickness = AimbotSettings.FovThickness FOV.Transparency = AimbotSettings.FovTransparency FOV.Filled = false FOV.Radius = AimbotSettings.FovSize local Snaplines = Drawing.new("Line"); Snaplines.Color = AimbotSettings.FovColor Snaplines.Thickness = .1 Snaplines.Transparency = 1 Snaplines.Visible = AimbotSettings.Snaplines table.insert(Drawings, FOV); table.insert(Drawings, Snaplines); local HandlePlayer = function(Player) local Character = GetCharacter(Player); if (Character) then Characters[Player] = Character end CharacterAdded(Player, function(Char) Characters[Player] = Char end); CharacterRemoving(Player, function(Char) Characters[Player] = nil local PlayerDrawings = Drawings[Player] if (PlayerDrawings) then PlayerDrawings.Text.Visible = false PlayerDrawings.Box.Visible = false PlayerDrawings.Tracer.Visible = false end end); if (Player == LocalPlayer) then return; end local Text = Drawing.new("Text"); Text.Color = EspSettings.Color Text.OutlineColor = EspSettings.OutlineColor Text.Size = EspSettings.Size Text.Transparency = EspSettings.Transparency Text.Center = true Text.Outline = true local Tracer = Drawing.new("Line"); Tracer.Color = EspSettings.Color Tracer.From = Vector2new(CurrentCamera.ViewportSize.X / 2, CurrentCamera.ViewportSize.Y); Tracer.Thickness = EspSettings.TracerThickness Tracer.Transparency = EspSettings.TracerTrancparency local Box = Drawing.new("Quad"); Box.Thickness = EspSettings.Thickness Box.Transparency = EspSettings.Transparency Box.Filled = false Box.Color = EspSettings.Color Drawings[Player] = { Text = Text, Tracer = Tracer, Box = Box } end for Index, Player in pairs(Players:GetPlayers()) do HandlePlayer(Player); end Players.PlayerAdded:Connect(function(Player) HandlePlayer(Player); end); Players.PlayerRemoving:Connect(function(Player) Characters[Player] = nil local PlayerDrawings = Drawings[Player] for Index, Drawing in pairs(PlayerDrawings or {}) do Drawing.Visible = false end Drawings[Player] = nil end); local SetProperties = function(Properties) for Player, PlayerDrawings in pairs(Drawings) do if (type(Player) ~= "number") then for Property, Value in pairs(Properties.Tracer or {}) do PlayerDrawings.Tracer[Property] = Value end for Property, Value in pairs(Properties.Text or {}) do PlayerDrawings.Text[Property] = Value end for Property, Value in pairs(Properties.Box or {}) do PlayerDrawings.Box[Property] = Value end end end end local GetClosestPlayerAndRender = function() MouseVector = Vector2new(Mouse.X, Mouse.Y + Inset); local Closest = create(4); local Vector2Distance = math.huge local Vector3DistanceOnScreen = math.huge local Vector3Distance = math.huge if (AimbotSettings.ShowFov) then FOV.Position = MouseVector FOV.Visible = true Snaplines.Visible = false else FOV.Visible = false end local LocalRoot = Characters[LocalPlayer] and FindFirstChild(Characters[LocalPlayer], "HumanoidRootPart"); for Player, Character in pairs(Characters) do if (Player == LocalPlayer) then continue; end local PlayerDrawings = Drawings[Player] local PlayerRoot = FindFirstChild(Character, "HumanoidRootPart"); local PlayerTeam = GetTeam(Player); if (PlayerRoot) then local Redirect = FindFirstChild(Character, AimbotSettings.Aimlock); if (not Redirect) then PlayerDrawings.Text.Visible = false PlayerDrawings.Box.Visible = false PlayerDrawings.Tracer.Visible = false continue; end local RedirectPos = Redirect.Position local Tuple, Visible = WorldToViewportPoint(CurrentCamera, RedirectPos); local CharacterVec2 = Vector2new(Tuple.X, Tuple.Y); local Vector2Magnitude = (MouseVector - CharacterVec2).Magnitude local Vector3Magnitude = LocalRoot and (RedirectPos - LocalRoot.Position).Magnitude or math.huge local InRenderDistance = Vector3Magnitude <= EspSettings.RenderDistance if (not Tfind(AimbotSettings.BlacklistedTeams, PlayerTeam)) then local InFovRadius = Vector2Magnitude <= FOV.Radius if (InFovRadius) then if (Visible and Vector2Magnitude <= Vector2Distance and AimbotSettings.ClosestCursor) then Vector2Distance = Vector2Magnitude Closest = {Character, CharacterVec2, Player, Redirect} if (AimbotSettings.Snaplines and AimbotSettings.ShowFov) then Snaplines.Visible = true Snaplines.From = MouseVector Snaplines.To = CharacterVec2 else Snaplines.Visible = false end end if (Visible and Vector3Magnitude <= Vector3DistanceOnScreen and Settings.ClosestPlayer) then Vector3DistanceOnScreen = Vector3Magnitude Closest = {Character, CharacterVec2, Player, Redirect} end end end if (InRenderDistance and Visible and not Tfind(EspSettings.BlacklistedTeams, PlayerTeam)) then local CharacterHumanoid = FindFirstChildWhichIsA(Character, "Humanoid") or { Health = 0, MaxHealth = 0 }; PlayerDrawings.Text.Text = format("%s\n%s%s", EspSettings.NamesEnabled and Player.Name or "", EspSettings.DistanceEnabled and format("[%s]", floor(Vector3Magnitude) ) or "", EspSettings.HealthEnabled and format(" [%s/%s]", floor(CharacterHumanoid.Health), floor(CharacterHumanoid.MaxHealth) ) or "" ); PlayerDrawings.Text.Position = Vector2new(Tuple.X, Tuple.Y - 40); if (EspSettings.TracersEnabled) then PlayerDrawings.Tracer.To = CharacterVec2 end if (EspSettings.BoxEsp) then local Parts = {} for Index, Part in pairs(Character:GetChildren()) do if (IsA(Part, "BasePart")) then local ViewportPos = WorldToViewportPoint(CurrentCamera, Part.Position); Parts[Part] = Vector2new(ViewportPos.X, ViewportPos.Y); end end local Top, Bottom, Left, Right local Distance = math.huge local ClosestPart = nil for i2, Pos in next, Parts do local Mag = (Pos - Vector2new(Tuple.X, 0)).Magnitude; if (Mag <= Distance) then ClosestPart = Pos Distance = Mag end end Top = ClosestPart ClosestPart = nil Distance = math.huge for i2, Pos in next, Parts do local Mag = (Pos - Vector2new(Tuple.X, CurrentCamera.ViewportSize.Y)).Magnitude; if (Mag <= Distance) then ClosestPart = Pos Distance = Mag end end Bottom = ClosestPart ClosestPart = nil Distance = math.huge for i2, Pos in next, Parts do local Mag = (Pos - Vector2new(0, Tuple.Y)).Magnitude; if (Mag <= Distance) then ClosestPart = Pos Distance = Mag end end Left = ClosestPart ClosestPart = nil Distance = math.huge for i2, Pos in next, Parts do local Mag = (Pos - Vector2new(CurrentCamera.ViewportSize.X, Tuple.Y)).Magnitude; if (Mag <= Distance) then ClosestPart = Pos Distance = Mag end end Right = ClosestPart ClosestPart = nil Distance = math.huge PlayerDrawings.Box.PointA = Vector2new(Right.X, Top.Y); PlayerDrawings.Box.PointB = Vector2new(Left.X, Top.Y); PlayerDrawings.Box.PointC = Vector2new(Left.X, Bottom.Y); PlayerDrawings.Box.PointD = Vector2new(Right.X, Bottom.Y); end if (EspSettings.TeamColors) then local TeamColor; if (PlayerTeam) then local BrickTeamColor = PlayerTeam.TeamColor TeamColor = BrickTeamColor.Color else TeamColor = Color3new(0.639216, 0.635294, 0.647059); end PlayerDrawings.Text.Color = TeamColor PlayerDrawings.Box.Color = TeamColor PlayerDrawings.Tracer.Color = TeamColor end PlayerDrawings.Text.Visible = true PlayerDrawings.Box.Visible = EspSettings.BoxEsp PlayerDrawings.Tracer.Visible = EspSettings.TracersEnabled else PlayerDrawings.Text.Visible = false PlayerDrawings.Box.Visible = false PlayerDrawings.Tracer.Visible = false end else PlayerDrawings.Text.Visible = false PlayerDrawings.Box.Visible = false PlayerDrawings.Tracer.Visible = false end end return unpack(Closest); end local Locked, SwitchedCamera = false, false UserInputService.InputBegan:Connect(function(Inp) if (AimbotSettings.Enabled and Inp.UserInputType == Enum.UserInputType.MouseButton2) then Locked = true if (AimbotSettings.FirstPerson and LocalPlayer.CameraMode ~= Enum.CameraMode.LockFirstPerson) then LocalPlayer.CameraMode = Enum.CameraMode.LockFirstPerson SwitchedCamera = true end end end); UserInputService.InputEnded:Connect(function(Inp) if (AimbotSettings.Enabled and Inp.UserInputType == Enum.UserInputType.MouseButton2) then Locked = false if (SwitchedCamera) then LocalPlayer.CameraMode = Enum.CameraMode.Classic end end end); local ClosestCharacter, Vector, Player, Aimlock; RunService.RenderStepped:Connect(function() ClosestCharacter, Vector, Player, Aimlock = GetClosestPlayerAndRender(); if (Locked and AimbotSettings.Enabled and ClosestCharacter) then if (AimbotSettings.FirstPerson) then if (syn) then CurrentCamera.CoordinateFrame = CFramenew(CurrentCamera.CoordinateFrame.p, Aimlock.Position); else mousemoverel((Vector.X - MouseVector.X) / AimbotSettings.Smoothness, (Vector.Y - MouseVector.Y) / AimbotSettings.Smoothness); end elseif (AimbotSettings.ThirdPerson) then mousemoveabs(Vector.X, Vector.Y); end end end); local Hooks = { HookedFunctions = {}, OldMetaMethods = {}, MetaMethodHooks = {}, HookedSignals = {} } local OtherDeprecated = { children = "GetChildren" } local RealMethods = {} local FakeMethods = {} local HookedFunctions = Hooks.HookedFunctions local MetaMethodHooks = Hooks.MetaMethodHooks local OldMetaMethods = Hooks.OldMetaMethods local randomised = random(1, 10); local randomisedVector = Vector3new(random(1, 10), random(1, 10), random(1, 10)); Mouse.Move:Connect(function() randomised = random(1, 10); randomisedVector = Vector3new(random(1, 10), random(1, 10), random(1, 10)); end); local x = setmetatable({}, { __index = function(...) print("index", ...); end, __add = function(...) print("add", ...); end, __sub = function(...) print("sub", ...); end, __mul = function(...) print("mul", ...); end }); MetaMethodHooks.Index = function(...) local __Index = OldMetaMethods.__index if (Player and Aimlock and ... == Mouse and not checkcaller()) then local CallingScript = getfenv(2).script; if (CallingScript.Name == "CallingScript") then return __Index(...); end local _Mouse, Index = ... if (type(Index) == 'string') then Index = gsub(sub(Index, 0, 100), "%z.*", ""); end local PassedChance = random(1, 100) < AimbotSettings.SilentAimHitChance if (PassedChance and AimbotSettings.SilentAim) then local Parts = GetPartsObscuringTarget(CurrentCamera, {CurrentCamera.CFrame.Position, Aimlock.Position}, {LocalPlayer.Character, ClosestCharacter}); Index = string.gsub(Index, "^%l", upper); local Hit = #Parts == 0 or AimbotSettings.Wallbang if (not Hit) then return __Index(...); end if (Index == "Target") then return Aimlock end if (Index == "Hit") then local hit = __Index(...); local pos = Aimlock.Position + randomisedVector / 10 return CFramenew(pos.X, pos.Y, pos.Z, unpack({hit:components()}, 4)); end if (Index == "X") then return Vector.X + randomised / 10 end if (Index == "Y") then return Vector.Y + randomised / 10 end end end return __Index(...); end MetaMethodHooks.Namecall = function(...) local __Namecall = OldMetaMethods.__namecall local self = ... local Method = gsub(getnamecallmethod() or "", "^%l", upper); local Hooked = HookedFunctions[Method] if (Hooked and self == Hooked[1]) then return Hooked[3](...); end return __Namecall(...); end -- I commented out a part of this code because it caused the script to crash. Without this part of the code, the script is almost completely functional. --[[ for MMName, MMFunc in pairs(MetaMethodHooks) do local MetaMethod = string.format("__%s", string.lower(MMName)); Hooks.OldMetaMethods[MetaMethod] = hookmetamethod(game, MetaMethod, MMFunc); end ]] HookedFunctions.FindPartOnRay = {Workspace, Workspace.FindPartOnRay, function(...) local OldFindPartOnRay = HookedFunctions.FindPartOnRay[4] if (AimbotSettings.SilentAim and Player and Aimlock and not checkcaller()) then local PassedChance = random(1, 100) < AimbotSettings.SilentAimHitChance if (ClosestCharacter and PassedChance) then local Parts = GetPartsObscuringTarget(CurrentCamera, {CurrentCamera.CFrame.Position, Aimlock.Position}, {LocalPlayer.Character, ClosestCharacter}); if (#Parts == 0 or AimbotSettings.Wallbang) then return Aimlock, Aimlock.Position + (Vector3new(random(1, 10), random(1, 10), random(1, 10)) / 10), Vector3new(0, 1, 0), Aimlock.Material end end end return OldFindPartOnRay(...); end}; HookedFunctions.FindPartOnRayWithIgnoreList = {Workspace, Workspace.FindPartOnRayWithIgnoreList, function(...) local OldFindPartOnRayWithIgnoreList = HookedFunctions.FindPartOnRayWithIgnoreList[4] if (Player and Aimlock and not checkcaller()) then local CallingScript = getcallingscript(); local PassedChance = random(1, 100) < AimbotSettings.SilentAimHitChance if (CallingScript.Name ~= "ControlModule" and ClosestCharacter and PassedChance) then local Parts = GetPartsObscuringTarget(CurrentCamera, {CurrentCamera.CFrame.Position, Aimlock.Position}, {LocalPlayer.Character, ClosestCharacter}); if (#Parts == 0 or AimbotSettings.Wallbang) then return Aimlock, Aimlock.Position + (Vector3new(random(1, 10), random(1, 10), random(1, 10)) / 10), Vector3new(0, 1, 0), Aimlock.Material end end end return OldFindPartOnRayWithIgnoreList(...); end}; for Index, Function in pairs(HookedFunctions) do Function[4] = hookfunction(Function[2], Function[3]); end local MainUI = UILibrary.new(Color3.fromRGB(255, 79, 87)); local Window = MainUI:LoadWindow('fates esp', UDim2.fromOffset(400, 279)); local ESP = Window.NewPage("esp"); local Aimbot = Window.NewPage("aimbot"); local EspSettingsUI = ESP.NewSection("Esp"); local TracerSettingsUI = ESP.NewSection("Tracers"); local SilentAim = Aimbot.NewSection("Silent Aim"); local Aimbot = Aimbot.NewSection("Aimbot"); EspSettingsUI.Toggle("Show Names", EspSettings.NamesEnabled, function(Callback) EspSettings.NamesEnabled = Callback end); EspSettingsUI.Toggle("Show Health", EspSettings.HealthEnabled, function(Callback) EspSettings.HealthEnabled = Callback end); EspSettingsUI.Toggle("Show Distance", EspSettings.DistanceEnabled, function(Callback) EspSettings.DistanceEnabled = Callback end); EspSettingsUI.Toggle("Box Esp", EspSettings.BoxEsp, function(Callback) EspSettings.BoxEsp = Callback SetProperties({ Box = { Visible = Callback } }); end); EspSettingsUI.Slider("Render Distance", { Min = 0, Max = 50000, Default = math.clamp(EspSettings.RenderDistance, 0, 50000), Step = 10 }, function(Callback) EspSettings.RenderDistance = Callback end); EspSettingsUI.Slider("Esp Size", { Min = 0, Max = 30, Default = EspSettings.Size, Step = 1}, function(Callback) EspSettings.Size = Callback SetProperties({ Text = { Size = Callback } }); end); EspSettingsUI.ColorPicker("Esp Color", EspSettings.Color, function(Callback) EspSettings.TeamColors = false EspSettings.Color = Callback SetProperties({ Box = { Color = Callback }, Text = { Color = Callback }, Tracer = { Color = Callback } }); end); EspSettingsUI.Toggle("Team Colors", EspSettings.TeamColors, function(Callback) EspSettings.TeamColors = Callback if (not Callback) then SetProperties({ Tracer = { Color = EspSettings.Color }; Box = { Color = EspSettings.Color }; Text = { Color = EspSettings.Color } }) end end); EspSettingsUI.Dropdown("Teams", {"Allies", "Enemies", "All"}, function(Callback) table.clear(EspSettings.BlacklistedTeams); if (Callback == "Enemies") then table.insert(EspSettings.BlacklistedTeams, LocalPlayer.Team); end if (Callback == "Allies") then local AllTeams = Teams:GetTeams(); table.remove(AllTeams, table.find(AllTeams, LocalPlayer.Team)); EspSettings.BlacklistedTeams = AllTeams end end); TracerSettingsUI.Toggle("Enable Tracers", EspSettings.TracersEnabled, function(Callback) EspSettings.TracersEnabled = Callback SetProperties({ Tracer = { Visible = Callback } }); end); TracerSettingsUI.Dropdown("To", {"Head", "Torso"}, function(Callback) AimbotSettings.Aimlock = Callback == "Torso" and "HumanoidRootPart" or Callback end); TracerSettingsUI.Dropdown("From", {"Top", "Bottom", "Left", "Right"}, function(Callback) local ViewportSize = CurrentCamera.ViewportSize local From = Callback == "Top" and Vector2new(ViewportSize.X / 2, ViewportSize.Y - ViewportSize.Y) or Callback == "Bottom" and Vector2new(ViewportSize.X / 2, ViewportSize.Y) or Callback == "Left" and Vector2new(ViewportSize.X - ViewportSize.X, ViewportSize.Y / 2) or Callback == "Right" and Vector2new(ViewportSize.X, ViewportSize.Y / 2); EspSettings.TracerFrom = From SetProperties({ Tracer = { From = From } }); end); TracerSettingsUI.Slider("Tracer Transparency", {Min = 0, Max = 1, Default = EspSettings.TracerTrancparency, Step = .1}, function(Callback) EspSettings.TracerTrancparency = Callback SetProperties({ Tracer = { Transparency = Callback } }); end); TracerSettingsUI.Slider("Tracer Thickness", {Min = 0, Max = 5, Default = EspSettings.TracerThickness, Step = .1}, function(Callback) EspSettings.TracerThickness = Callback SetProperties({ Tracer = { Thickness = Callback } }); end); SilentAim.Toggle("Silent Aim", AimbotSettings.SilentAim, function(Callback) AimbotSettings.SilentAim = Callback end); SilentAim.Toggle("Wallbang", AimbotSettings.Wallbang, function(Callback) AimbotSettings.Wallbang = Callback end); SilentAim.Dropdown("Redirect", {"Head", "Torso"}, function(Callback) AimbotSettings.SilentAimRedirect = Callback end); SilentAim.Slider("Hit Chance", {Min = 0, Max = 100, Default = AimbotSettings.SilentAimHitChance, Step = 1}, function(Callback) AimbotSettings.SilentAimHitChance = Callback end); SilentAim.Dropdown("Lock Type", {"Closest Cursor", "Closest Player"}, function(Callback) if (Callback == "Closest Cursor") then AimbotSettings.ClosestCharacter = false AimbotSettings.ClosestCursor = true else AimbotSettings.ClosestCharacter = true AimbotSettings.ClosestCursor = false end end); Aimbot.Toggle("Aimbot (M2)", AimbotSettings.Enabled, function(Callback) AimbotSettings.Enabled = Callback if (not AimbotSettings.FirstPerson and not AimbotSettings.ThirdPerson) then AimbotSettings.FirstPerson = true end end); Aimbot.Slider("Aimbot Smoothness", {Min = 1, Max = 10, Default = AimbotSettings.Smoothness, Step = .5}, function(Callback) AimbotSettings.Smoothness = Callback end); local sortTeams = function(Callback) table.clear(AimbotSettings.BlacklistedTeams); if (Callback == "Enemies") then table.insert(AimbotSettings.BlacklistedTeams, LocalPlayer.Team); end if (Callback == "Allies") then local AllTeams = Teams:GetTeams(); table.remove(AllTeams, table.find(AllTeams, LocalPlayer.Team)); AimbotSettings.BlacklistedTeams = AllTeams end end Aimbot.Dropdown("Team Target", {"Allies", "Enemies", "All"}, sortTeams); sortTeams("Enemies"); Aimbot.Dropdown("Aimlock Type", {"Third Person", "First Person"}, function(callback) if (callback == "Third Person") then AimbotSettings.ThirdPerson = true AimbotSettings.FirstPerson = false else AimbotSettings.ThirdPerson = false AimbotSettings.FirstPerson = true end end); Aimbot.Toggle("Show Fov", AimbotSettings.ShowFov, function(Callback) AimbotSettings.ShowFov = Callback FOV.Visible = Callback end); Aimbot.ColorPicker("Fov Color", AimbotSettings.FovColor, function(Callback) AimbotSettings.FovColor = Callback FOV.Color = Callback Snaplines.Color = Callback end); Aimbot.Slider("Fov Size", {Min = 70, Max = 500, Default = AimbotSettings.FovSize, Step = 10}, function(Callback) AimbotSettings.FovSize = Callback FOV.Radius = Callback end); Aimbot.Toggle("Enable Snaplines", AimbotSettings.Snaplines, function(Callback) AimbotSettings.Snaplines = Callback end); Window.SetPosition(Settings.WindowPosition); if (gethui) then MainUI.UI.Parent = gethui(); else local protect_gui = (syn or getgenv()).protect_gui if (protect_gui) then protect_gui(MainUI.UI); end MainUI.UI.Parent = game:GetService("CoreGui"); end while wait(5) do Settings.WindowPosition = Window.GetPosition(); local Encoded = HttpService:JSONEncode(EncodeConfig(Settings)); writefile("fates-esp.json", Encoded); end