assert(Drawing, 'exploit not supported') if not syn and not PROTOSMASHER_LOADED then print'Unnamed ESP only officially supports Synapse and Protosmasher! If you\'re an exploit developer and have added drawing API to your exploit, try setting syn as true then checking if that works, otherwise, DM me on discord @ cppbook.org#1968 or add an issue to the Unnamed ESP Github Repository and I\'ll see it through email!' end if not cloneref then cloneref = function(o) return o end end local UserInputService = cloneref(game:GetService('UserInputService')) local HttpService = cloneref(game:GetService('HttpService')) local TweenService = cloneref(game:GetService('TweenService')) local RunService = cloneref(game:GetService('RunService')) local Players = game:GetService('Players') local LocalPlayer = Players.LocalPlayer local Camera = workspace.CurrentCamera local Mouse = LocalPlayer:GetMouse() local V2New = Vector2.new local V3New = Vector3.new local WTVP = Camera.WorldToViewportPoint local WorldToViewport = function(...) return WTVP(Camera, ...) end local Menu = {} local MouseHeld = false local LastRefresh = 0 local OptionsFile = 'IC3_ESP_SETTINGS.dat' local Binding = false local BindedKey = nil local OIndex = 0 local LineBox = {} local UIButtons = {} local Sliders = {} local ColorPicker = { Loading = false, LastGenerated = 0 } local Dragging = false local DraggingUI = false local Rainbow = false local DragOffset = V2New() local DraggingWhat = nil local OldData = {} local IgnoreList = {} local EnemyColor = Color3.new(1, 0, 0) local TeamColor = Color3.new(0, 1, 0) local MenuLoaded = false local ErrorLogging = false local TracerPosition = V2New(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y - 135) local DragTracerPosition = false local SubMenu = {} local IsSynapse = syn and not PROTOSMASHER_LOADED local Connections = { Active = {} } local Signal = {} Signal.__index = Signal local GetCharacter, CurrentColorPicker, Spectating local QUAD_SUPPORTED_EXPLOIT = pcall(function() Drawing.new('Quad'):Remove() end) shared.MenuDrawingData = shared.MenuDrawingData or { Instances = {} } shared.InstanceData = shared.InstanceData or {} shared.RSName = shared.RSName or ('UnnamedESP_by_ic3-' .. HttpService:GenerateGUID(false)) local GetDataName = shared.RSName .. '-GetData' local UpdateName = shared.RSName .. '-Update' local Debounce = setmetatable({}, { __index = function(t, i) return rawget(t, i) or false end }) if shared.UESP_InputChangedCon then shared.UESP_InputChangedCon:Disconnect() end if shared.UESP_InputBeganCon then shared.UESP_InputBeganCon:Disconnect() end if shared.UESP_InputEndedCon then shared.UESP_InputEndedCon:Disconnect() end if shared.CurrentColorPicker then shared.CurrentColorPicker:Dispose() end local function IsStringEmpty(String) if type(String) == 'string' then return String:match('^%s+$') ~= nil or #String == 0 or String == '' or false end return false end local function Set(t, i, v) t[i] = v end local Teams = {} local CustomTeams = { [2563455047] = { Initialize = function() Teams.Sheriffs = {}; Teams.Bandits = {} local Func = game:GetService('ReplicatedStorage'):WaitForChild('RogueFunc', 1) local Event = game:GetService('ReplicatedStorage'):WaitForChild('RogueEvent', 1) local S, B = Func:InvokeServer('AllTeamData') Teams.Sheriffs = S; Teams.Bandits = B Event.OnClientEvent:Connect(function(id, PlayerName, Team, Remove) if id == 'UpdateTeam' then local TeamTable, NotTeamTable if Team == 'Bandits' then TeamTable = Teams.Bandits; NotTeamTable = Teams.Sheriffs else TeamTable = Teams.Sheriffs; NotTeamTable = Teams.Bandits end if Remove then TeamTable[PlayerName] = nil else TeamTable[PlayerName] = true; NotTeamTable[PlayerName] = nil end if PlayerName == LocalPlayer.Name then TDM.Friendlys = TeamTable; TDM.Enemies = NotTeamTable end end end) end, CheckTeam = function(Player) local LocalTeam = Teams.Sheriffs[LocalPlayer.Name] and Teams.Sheriffs or Teams.Bandits return LocalTeam[Player.Name] and true or false end }, [5208655184] = { CheckTeam = function(Player) local LocalLastName = LocalPlayer:GetAttribute('LastName') if not LocalLastName or IsStringEmpty(LocalLastName) then return true end local PlayerLastName = Player:GetAttribute('LastName') if not PlayerLastName then return false end return PlayerLastName == LocalLastName end }, [3541987450] = { CheckTeam = function(Player) local LocalStats = LocalPlayer:FindFirstChild('leaderstats') local LocalLastName = LocalStats and LocalStats:FindFirstChild('LastName') if not LocalLastName or IsStringEmpty(LocalLastName.Value) then return true end local PlayerStats = Player:FindFirstChild('leaderstats') local PlayerLastName = PlayerStats and PlayerStats:FindFirstChild('LastName') if not PlayerLastName then return false end return PlayerLastName.Value == LocalLastName.Value end }, [6032399813] = { CheckTeam = function(Player) local LocalStats = LocalPlayer:FindFirstChild('leaderstats') local LocalGuildName = LocalStats and LocalStats:FindFirstChild('Guild') if not LocalGuildName or IsStringEmpty(LocalGuildName.Value) then return true end local PlayerStats = Player:FindFirstChild('leaderstats') local PlayerGuildName = PlayerStats and PlayerStats:FindFirstChild('Guild') if not PlayerGuildName then return false end return PlayerGuildName.Value == LocalGuildName.Value end }, [5735553160] = { CheckTeam = function(Player) local LocalStats = LocalPlayer:FindFirstChild('leaderstats') local LocalGuildName = LocalStats and LocalStats:FindFirstChild('Guild') if not LocalGuildName or IsStringEmpty(LocalGuildName.Value) then return true end local PlayerStats = Player:FindFirstChild('leaderstats') local PlayerGuildName = PlayerStats and PlayerStats:FindFirstChild('Guild') if not PlayerGuildName then return false end return PlayerGuildName.Value == LocalGuildName.Value end } } local RenderList = {Instances = {}} function RenderList:AddOrUpdateInstance(Instance, Obj2Draw, Text, Color) RenderList.Instances[Instance] = { ParentInstance = Instance, Instance = Obj2Draw, Text = Text, Color = Color } return RenderList.Instances[Instance] end local CustomPlayerTag; local CustomESP; local CustomCharacter local GetHealth; local GetAliveState; local CustomRootPartName local Modules = { [292439477] = { Initialize = function() if not create_comm_channel or not get_comm_channel then return end local run_on_actor = runonactor or run_on_actor local EventID, Event = create_comm_channel() Event.Event:Connect(function(List) PF_CharList = List end) for Index, Actor in pairs(getactors()) do run_on_actor(Actor, [[ local Event = get_comm_channel(...) if not getrenv().shared.require then return end local RunService = game:GetService('RunService') local Cache = debug.getupvalues(getrenv().shared.require)[1]._cache if not Cache then return end local ReplicationInterface = rawget(rawget(Cache, 'ReplicationInterface'), 'module') if not ReplicationInterface then return end local getEntry = rawget(ReplicationInterface, 'getEntry') if shared.UNPFHB then shared.UNPFHB:Disconnect() end shared.UNPFHB = RunService.Heartbeat:Connect(function() local CharacterList = {} for Player, Entry in pairs(debug.getupvalues(getEntry)[1]) do local TPO = rawget(Entry, '_thirdPersonObject') if not TPO then continue end local Character = rawget(TPO, '_characterHash') if not Character then continue end local Torso = rawget(Character, 'Torso') if not Torso then continue end local HealthState = rawget(Entry, '_healthstate') CharacterList[Player.Name] = { Head = Character.Head, Torso = Character.Torso, Health = HealthState and rawget(HealthState, 'health0') or 100, Alive = rawget(Entry, '_alive') } end Event:Fire(CharacterList) end) ]], EventID) end end, CustomCharacter = function(Player) if not shared.PF_CharMT then shared.PF_CharMT = {} shared.PF_CharMT.__index = shared.PF_CharMT function shared.PF_CharMT:FindFirstChild(Name) return rawget(self, Name) end function shared.PF_CharMT:FindFirstChildOfClass() end end if PF_CharList and PF_CharList[Player.Name] then local Character = PF_CharList[Player.Name] setmetatable(Character, shared.PF_CharMT) return Character end end, GetHealth = function(Player) if PF_CharList and PF_CharList[Player.Name] then return PF_CharList[Player.Name].Health end end, GetAliveState = function(Player) if PF_CharList and PF_CharList[Player.Name] then return PF_CharList[Player.Name].Alive end end, CustomRootPartName = 'Torso' }, [2950983942] = { CustomCharacter = function(Player) if workspace:FindFirstChild('Players') then return workspace.Players:FindFirstChild(Player.Name) end end }, [2262441883] = { CustomPlayerTag = function(Player) return Player:FindFirstChild('Job') and (' [' .. Player.Job.Value .. ']') or '' end, CustomESP = function() if workspace:FindFirstChild('MoneyPrinters') then for i, v in pairs(workspace.MoneyPrinters:GetChildren()) do local Main = v:FindFirstChild('Main'); local Owner = v:FindFirstChild('TrueOwner'); local Money = v:FindFirstChild('Int') and v.Int:FindFirstChild('Money') or nil if Main and Owner and Money then local O = tostring(Owner.Value); local M = tostring(Money.Value) pcall(RenderList.AddOrUpdateInstance, RenderList, v, Main, string.format('Money Printer\nOwned by %s\n[%s]', O, M), Color3.fromRGB(13, 255, 227)) end end end end }, [4801598506] = { CustomESP = function() if workspace:FindFirstChild('Mobs') and workspace.Mobs:FindFirstChild('Forest1') then for i, v in pairs(workspace.Mobs.Forest1:GetChildren()) do local Main = v:FindFirstChild('Head'); local Hum = v:FindFirstChild('Mob') if Main and Hum then pcall(RenderList.AddOrUpdateInstance, RenderList, v, Main, string.format('[%s] [%s/%s]', v.Name, Hum.Health, Hum.MaxHealth), Color3.fromRGB(13, 255, 227)) end end end end }, [2555873122] = { CustomESP = function() if workspace:FindFirstChild('WoodPlanks') then for i, v in pairs(workspace:GetChildren()) do if v.Name == 'WoodPlanks' then local Main = v:FindFirstChild('Wood') if Main then pcall(RenderList.AddOrUpdateInstance, RenderList, v, Main, 'Wood Planks', Color3.fromRGB(13, 255, 227)) end end end end end }, [5208655184] = { CustomESP = function() end, CustomPlayerTag = function(Player) if game.PlaceVersion < 457 then return '' end local Name = ''; local FirstName = Player:GetAttribute('FirstName') if typeof(FirstName) == 'string' and #FirstName > 0 then local Prefix = ''; local Extra = {}; Name = Name .. '\n[' if Player:GetAttribute('Prestige') > 0 then Name = Name .. '#' .. tostring(Player:GetAttribute('Prestige')) .. ' ' end if not IsStringEmpty(Player:GetAttribute('HouseRank')) then Prefix = Player:GetAttribute('HouseRank') == 'Owner' and (Player:GetAttribute('Gender') == 'Female' and 'Lady ' or 'Lord ') or '' end if not IsStringEmpty(FirstName) then Name = Name .. '' .. Prefix .. FirstName end if not IsStringEmpty(Player:GetAttribute('LastName')) then Name = Name .. ' ' .. Player:GetAttribute('LastName') end if not IsStringEmpty(Name) then Name = Name .. ']' end local Character = GetCharacter(Player) if Character then if Character and Character:FindFirstChild('Danger') then table.insert(Extra, 'D') end if Character:FindFirstChild('ManaAbilities') and Character.ManaAbilities:FindFirstChild('ManaSprint') then table.insert(Extra, 'D1') end if Character:FindFirstChild('Mana') then table.insert(Extra, 'M' .. math.floor(Character.Mana.Value)) end if Character:FindFirstChild('Vampirism') then table.insert(Extra, 'V') end if Character:FindFirstChild('Observe') then table.insert(Extra, 'ILL') end if Character:FindFirstChild('Inferi') then table.insert(Extra, 'NEC') end if Character:FindFirstChild("World's Pulse") then table.insert(Extra, 'DZIN') end if Character:FindFirstChild('Shift') then table.insert(Extra, 'MAD') end if Character:FindFirstChild('Head') and Character.Head:FindFirstChild('FacialMarking') then local FM = Character.Head:FindFirstChild('FacialMarking') if FM.Texture == 'http://www.roblox.com/asset/?id=4072968006' then table.insert(Extra, 'HEALER') elseif FM.Texture == 'http://www.roblox.com/asset/?id=4072914434' then table.insert(Extra, 'SEER') elseif FM.Texture == 'http://www.roblox.com/asset/?id=4094417635' then table.insert(Extra, 'JESTER') elseif FM.Texture == 'http://www.roblox.com/asset/?id=4072968656' then table.insert(Extra, 'BLADE') end end end if Player:FindFirstChild('Backpack') then if Player.Backpack:FindFirstChild('Observe') then table.insert(Extra, 'ILL') end if Player.Backpack:FindFirstChild('Inferi') then table.insert(Extra, 'NEC') end if Player.Backpack:FindFirstChild("World's Pulse") then table.insert(Extra, 'DZIN') end if Player.Backpack:FindFirstChild('Shift') then table.insert(Extra, 'MAD') end end if #Extra > 0 then Name = Name .. ' [' .. table.concat(Extra, '-') .. ']' end end return Name end }, [3541987450] = { CustomPlayerTag = function(Player) local Name = '' if Player:FindFirstChild('leaderstats') then Name = Name .. '\n['; local Prefix = ''; local Extra = {} if Player.leaderstats:FindFirstChild('Prestige') and Player.leaderstats.Prestige.ClassName == 'IntValue' and Player.leaderstats.Prestige.Value > 0 then Name = Name .. '#' .. tostring(Player.leaderstats.Prestige.Value) .. ' ' end if Player.leaderstats:FindFirstChild('HouseRank') and Player.leaderstats:FindFirstChild('Gender') and Player.leaderstats.HouseRank.ClassName == 'StringValue' and not IsStringEmpty(Player.leaderstats.HouseRank.Value) then Prefix = Player.leaderstats.HouseRank.Value == 'Owner' and (Player.leaderstats.Gender.Value == 'Female' and 'Lady ' or 'Lord ') or '' end if Player.leaderstats:FindFirstChild('FirstName') and Player.leaderstats.FirstName.ClassName == 'StringValue' and not IsStringEmpty(Player.leaderstats.FirstName.Value) then Name = Name .. '' .. Prefix .. Player.leaderstats.FirstName.Value end if Player.leaderstats:FindFirstChild('LastName') and Player.leaderstats.LastName.ClassName == 'StringValue' and not IsStringEmpty(Player.leaderstats.LastName.Value) then Name = Name .. ' ' .. Player.leaderstats.LastName.Value end if Player.leaderstats:FindFirstChild('UberTitle') and Player.leaderstats.UberTitle.ClassName == 'StringValue' and not IsStringEmpty(Player.leaderstats.UberTitle.Value) then Name = Name .. ', ' .. Player.leaderstats.UberTitle.Value end if not IsStringEmpty(Name) then Name = Name .. ']' end local Character = GetCharacter(Player) if Character then if Character and Character:FindFirstChild('Danger') then table.insert(Extra, 'D') end if Character:FindFirstChild('ManaAbilities') and Character.ManaAbilities:FindFirstChild('ManaSprint') then table.insert(Extra, 'D1') end if Character:FindFirstChild('Mana') then table.insert(Extra, 'M' .. math.floor(Character.Mana.Value)) end if Character:FindFirstChild('Vampirism') then table.insert(Extra, 'V') end if Character:FindFirstChild('Observe') then table.insert(Extra, 'ILL') end if Character:FindFirstChild('Inferi') then table.insert(Extra, 'NEC') end if Character:FindFirstChild("World's Pulse") then table.insert(Extra, 'DZIN') end if Character:FindFirstChild('Head') and Character.Head:FindFirstChild('FacialMarking') then local FM = Character.Head:FindFirstChild('FacialMarking') if FM.Texture == 'http://www.roblox.com/asset/?id=4072968006' then table.insert(Extra, 'HEALER') elseif FM.Texture == 'http://www.roblox.com/asset/?id=4072914434' then table.insert(Extra, 'SEER') elseif FM.Texture == 'http://www.roblox.com/asset/?id=4094417635' then table.insert(Extra, 'JESTER') end end end if Player:FindFirstChild('Backpack') then if Player.Backpack:FindFirstChild('Observe') then table.insert(Extra, 'ILL') end if Player.Backpack:FindFirstChild('Inferi') then table.insert(Extra, 'NEC') end if Player.Backpack:FindFirstChild("World's Pulse") then table.insert(Extra, 'DZIN') end end if #Extra > 0 then Name = Name .. ' [' .. table.concat(Extra, '-') .. ']' end end return Name end }, [4691401390] = { CustomCharacter = function(Player) if workspace:FindFirstChild('Players') then return workspace.Players:FindFirstChild(Player.Name) end end }, [6032399813] = { CustomPlayerTag = function(Player) local Name = ''; CharacterName = Player:GetAttribute('CharacterName') if not IsStringEmpty(CharacterName) then Name = ('\n[%s]'):format(CharacterName); local Character = GetCharacter(Player); local Extra = {} if Character then local Blood, Armor = Character:FindFirstChild('Blood'), Character:FindFirstChild('Armor') if Blood and Blood.ClassName == 'DoubleConstrainedValue' then table.insert(Extra, ('B%d'):format(Blood.Value)) end if Armor and Armor.ClassName == 'DoubleConstrainedValue' then table.insert(Extra, ('A%d'):format(math.floor(Armor.Value / 10))) end end local BackpackChildren = Player.Backpack:GetChildren() for index = 1, #BackpackChildren do local Oath = BackpackChildren[index] if Oath.ClassName == 'Folder' and Oath.Name:find('Talent:Oath') then local OathName = Oath.Name:gsub('Talent:Oath: ', '') table.insert(Extra, OathName) end end if #Extra > 0 then Name = Name .. ' [' .. table.concat(Extra, '-') .. ']' end end return Name end }, [5735553160] = { CustomPlayerTag = function(Player) local Name = ''; CharacterName = Player:GetAttribute('CharacterName') if not IsStringEmpty(CharacterName) then Name = ('\n[%s]'):format(CharacterName); local Character = GetCharacter(Player); local Extra = {} if Character then local Blood, Armor = Character:FindFirstChild('Blood'), Character:FindFirstChild('Armor') if Blood and Blood.ClassName == 'DoubleConstrainedValue' then table.insert(Extra, ('B%d'):format(Blood.Value)) end if Armor and Armor.ClassName == 'DoubleConstrainedValue' then table.insert(Extra, ('A%d'):format(math.floor(Armor.Value / 10))) end end local BackpackChildren = Player.Backpack:GetChildren() for index = 1, #BackpackChildren do local Oath = BackpackChildren[index] if Oath.ClassName == 'Folder' and Oath.Name:find('Talent:Oath') then local OathName = Oath.Name:gsub('Talent:Oath: ', '') table.insert(Extra, OathName) end end if #Extra > 0 then Name = Name .. ' [' .. table.concat(Extra, '-') .. ']' end end return Name end }, [3127094264] = { CustomCharacter = function(Player) if not _FIRST then _FIRST = true pcall(function() local GPM = rawget(require(LocalPlayer.PlayerScripts:WaitForChild('Client', 1e9):WaitForChild('Player', 1e9)), 'GetPlayerModel') PList = debug.getupvalue(GPM, 1) end) end if PList then local Player = rawget(PList, Player.UserId) if Player and Player.model then return Player.model end end end } } if Modules[game.PlaceId] ~= nil or Modules[game.GameId] ~= nil then local Module = Modules[game.PlaceId] or Modules[game.GameId] if Module.Initialize then Module.Initialize() end CustomPlayerTag = Module.CustomPlayerTag or nil CustomESP = Module.CustomESP or nil CustomCharacter = Module.CustomCharacter or nil GetHealth = Module.GetHealth or nil GetAliveState = Module.GetAliveState or nil CustomRootPartName = Module.CustomRootPartName or nil end function GetCharacter(Player) return CustomCharacter and CustomCharacter(Player) or Player.Character end function GetMouseLocation() return UserInputService:GetMouseLocation() end function MouseHoveringOver(Values) local X1, Y1, X2, Y2 = Values[1], Values[2], Values[3], Values[4] local MLocation = GetMouseLocation() return (MLocation.x >= X1 and MLocation.x <= (X1 + (X2 - X1))) and (MLocation.y >= Y1 and MLocation.y <= (Y1 + (Y2 - Y1))) end function GetTableData(t) if typeof(t) ~= 'table' then return end return setmetatable(t, { __call = function(t, func) if typeof(func) ~= 'function' then return end for i, v in pairs(t) do pcall(func, i, v) end end }) end local function Format(format, ...) return string.format(format, ...) end function CalculateValue(Min, Max, Percent) return Min + math.floor(((Max - Min) * Percent) + 0.5) end function NewDrawing(InstanceName) local Instance = Drawing.new(InstanceName) return (function(Properties) for i, v in pairs(Properties) do pcall(Set, Instance, i, v) end return Instance end) end function Menu:AddMenuInstance(Name, DrawingType, Properties) local Instance if shared.MenuDrawingData.Instances[Name] ~= nil then Instance = shared.MenuDrawingData.Instances[Name] for i, v in pairs(Properties) do pcall(Set, Instance, i, v) end else Instance = NewDrawing(DrawingType)(Properties) end shared.MenuDrawingData.Instances[Name] = Instance return Instance end function Menu:UpdateMenuInstance(Name) local Instance = shared.MenuDrawingData.Instances[Name] if Instance ~= nil then return (function(Properties) for i, v in pairs(Properties) do pcall(Set, Instance, i, v) end return Instance end) end end function Menu:GetInstance(Name) return shared.MenuDrawingData.Instances[Name] end local Options = setmetatable({}, { __call = function(t, ...) local Arguments = {...}; local Name = Arguments[1]; OIndex = OIndex + 1 rawset(t, Name, setmetatable({ Name = Arguments[1], Text = Arguments[2], Value = Arguments[3], DefaultValue = Arguments[3], AllArgs = Arguments, Index = OIndex }, { __call = function(t, v, force) local self = t if typeof(t.Value) == 'function' then t.Value() elseif typeof(t.Value) == 'EnumItem' then local BT = Menu:GetInstance(Format('%s_BindText', t.Name)) if not force then Binding = true; local Val = 0 while Binding do task.wait(); Val = (Val + 1) % 17; BT.Text = Val <= 8 and '|' or '' end end t.Value = force and v or BindedKey if BT and t.BasePosition and t.BaseSize then BT.Text = tostring(t.Value):match('%w+%.%w+%.(.+)') BT.Position = t.BasePosition + V2New(t.BaseSize.X - BT.TextBounds.X - 20, -10) end else local NewValue = v; if NewValue == nil then NewValue = not t.Value end rawset(t, 'Value', NewValue) if Arguments[2] ~= nil and Menu:GetInstance('TopBar').Visible then if typeof(Arguments[3]) == 'number' then local AMT = Menu:GetInstance(Format('%s_AmountText', t.Name)); if AMT then AMT.Text = tostring(t.Value) end else local Inner = Menu:GetInstance(Format('%s_InnerCircle', t.Name)); if Inner then Inner.Visible = t.Value end end end end end })) end }) function Load() local _, Result = pcall(readfile, OptionsFile) if _ then local _, Table = pcall(HttpService.JSONDecode, HttpService, Result) if _ and typeof(Table) == 'table' then for i, v in pairs(Table) do if typeof(Options[i]) == 'table' and Options[i].Value ~= nil and (typeof(Options[i].Value) == 'boolean' or typeof(Options[i].Value) == 'number') then Options[i].Value = v.Value; pcall(Options[i], v.Value) end end if Table.TeamColor then TeamColor = Color3.new(Table.TeamColor.R, Table.TeamColor.G, Table.TeamColor.B) end if Table.EnemyColor then EnemyColor = Color3.new(Table.EnemyColor.R, Table.EnemyColor.G, Table.EnemyColor.B) end if typeof(Table.MenuKey) == 'string' then Options.MenuKey(Enum.KeyCode[Table.MenuKey], true) end if typeof(Table.ToggleKey) == 'string' then Options.ToggleKey(Enum.KeyCode[Table.ToggleKey], true) end end end end Options('Enabled', 'ESP Enabled', true) Options('ShowTeam', 'Show Team', true) Options('ShowTeamColor', 'Show Team Color', false) Options('ShowName', 'Show Names', true) Options('ShowDistance', 'Show Distance', true) Options('ShowHealth', 'Show Health', true) Options('ShowBoxes', 'Show Boxes', true) Options('ShowTracers', 'Show Tracers', true) Options('ShowDot', 'Show Head Dot', false) Options('VisCheck', 'Visibility Check', false) Options('Crosshair', 'Crosshair', false) Options('TextOutline', 'Text Outline', true) Options('TextSize', 'Text Size', syn and 18 or 14, 10, 24) Options('MaxDistance', 'Max Distance', 2500, 100, 25000) Options('RefreshRate', 'Refresh Rate (ms)', 5, 1, 200) Options('YOffset', 'Y Offset', 0, -200, 200) Options('MenuKey', 'Menu Key', Enum.KeyCode.F4, 1) Options('ToggleKey', 'Toggle Key', Enum.KeyCode.F3, 1) Options('ChangeColors', SENTINEL_LOADED and 'Sentinel Unsupported' or 'Change Colors', function() if SENTINEL_LOADED then return end SubMenu:Show(GetMouseLocation(), 'Unnamed Colors', { { Type = 'Color', Text = 'Team Color', Color = TeamColor, Function = function(Circ, Position) if tick() - ColorPicker.LastGenerated < 1 then return end if shared.CurrentColorPicker then shared.CurrentColorPicker:Dispose() end local CP = ColorPicker.new(Position - V2New(-10, 50)); CurrentColorPicker = CP; shared.CurrentColorPicker = CP CP.ColorChanged:Connect(function(Color) Circ.Color = Color TeamColor = Color Options.TeamColor = Color end) end }, { Type = 'Color', Text = 'Enemy Color', Color = EnemyColor, Function = function(Circ, Position) if tick() - ColorPicker.LastGenerated < 1 then return end if shared.CurrentColorPicker then shared.CurrentColorPicker:Dispose() end local CP = ColorPicker.new(Position - V2New(-10, 50)); CurrentColorPicker = CP; shared.CurrentColorPicker = CP CP.ColorChanged:Connect(function(Color) Circ.Color = Color EnemyColor = Color Options.EnemyColor = Color end) end }, { Type = 'Button', Text = 'Reset Colors', Function = function() EnemyColor = Color3.new(1, 0, 0); TeamColor = Color3.new(0, 1, 0) local C1 = Menu:GetInstance('Sub-ColorPreview.1'); if C1 then C1.Color = TeamColor end local C2 = Menu:GetInstance('Sub-ColorPreview.2'); if C2 then C2.Color = EnemyColor end end }, { Type = 'Button', Text = 'Rainbow Mode', Function = function() Rainbow = not Rainbow end } }) end, 2) Options('ResetSettings', 'Reset Settings', function() for i, v in pairs(Options) do if Options[i] ~= nil and Options[i].Value ~= nil and Options[i].Text ~= nil and (typeof(Options[i].Value) == 'boolean' or typeof(Options[i].Value) == 'number' or typeof(Options[i].Value) == 'EnumItem') then Options[i](Options[i].DefaultValue, true) end end end, 5) Options('LoadSettings', 'Load Settings', Load, 4) Options('SaveSettings', 'Save Settings', function() end, 3) Load(1) Options('MenuOpen', nil, true) local function Combine(...) local Output = {} for i, v in pairs{...} do if typeof(v) == 'table' then table.foreach(v, function(i, v) Output[i] = v end) end end return Output end local Colors = { White = Color3.fromHex('ffffff'), Primary = { Main = Color3.fromHex('424242'), Light = Color3.fromHex('6d6d6d'), Dark = Color3.fromHex('1b1b1b') }, Secondary = { Main = Color3.fromHex('e0e0e0'), Light = Color3.fromHex('ffffff'), Dark = Color3.fromHex('aeaeae') } } function Connections:Listen(Connection, Function) local NewConnection = Connection:Connect(Function) table.insert(self.Active, NewConnection) return NewConnection end function Connections:DisconnectAll() for Index, Connection in pairs(self.Active) do if Connection.Connected then Connection:Disconnect() end end self.Active = {} end function Signal.new() local self = setmetatable({ _BindableEvent = Instance.new('BindableEvent') }, Signal) return self end function Signal:Connect(Callback) assert(typeof(Callback) == 'function', 'function expected; got ' .. typeof(Callback)) return self._BindableEvent.Event:Connect(function(...) Callback(...) end) end function Signal:Fire(...) self._BindableEvent:Fire(...) end function Signal:Wait() return self._BindableEvent:Wait() end function Signal:Disconnect() if self._BindableEvent then self._BindableEvent:Destroy() end end local function IsMouseOverDrawing(Drawing, MousePosition) local TopLeft = Drawing.Position; local BottomRight = Drawing.Position + Drawing.Size local MousePosition = MousePosition or GetMouseLocation() return MousePosition.X > TopLeft.X and MousePosition.Y > TopLeft.Y and MousePosition.X < BottomRight.X and MousePosition.Y < BottomRight.Y end local ImageCache = {} local function SetImage(Drawing, Url) local Data = IsSynapse and game:HttpGet(Url) or Url Drawing[IsSynapse and 'Data' or 'Uri'] = ImageCache[Url] or Data ImageCache[Url] = Data if not IsSynapse then repeat task.wait() until Drawing.Loaded end end local function CreateDrawingsTable() local Drawings = { __Objects = {} }; local Metatable = {} function Metatable.__index(self, Index) local Object = rawget(self.__Objects, Index) if not Object or (IsSynapse and not Object.__SELF.__OBJECT_EXISTS) then local Type = Index:sub(1, Index:find('%-') - 1) Success, Object = pcall(Drawing.new, Type) if not Object or not Success then return function() end end self.__Objects[Index] = setmetatable({ __SELF = Object, Type = Type }, { __call = function(self, Properties) local Object = rawget(self, '__SELF'); if IsSynapse and not Object.__OBJECT_EXISTS then return false, 'render object destroyed' end if Properties == false then Object.Visible = false; Object.Transparency = 0; Object:Remove(); return true end if typeof(Properties) == 'table' then for Property, Value in pairs(Properties) do local CanSet = true if self.Type == 'Image' and not IsSynapse and Property == 'Size' and typeof(Value) == 'Vector2' then CanSet = false spawn(function() repeat task.wait() until Object.Loaded if not self.DefaultSize then rawset(self, 'DefaultSize', Object.Size) end Property = 'ScaleFactor'; Value = Value.X / self.DefaultSize.X; Object[Property] = Value end) end if CanSet then Object[Property] = Value end end end return Object end }) Object.Visible = true; Object.Transparency = 1 if Type == 'Text' then if Drawing.Fonts then Object.Font = Drawing.Fonts.Monospace end Object.Size = 20; Object.Color = Color3.new(1, 1, 1); Object.Center = true Object.Outline = true; OutlineOpacity = 0.5 elseif Type == 'Square' or Type == 'Rectangle' then Object.Thickness = 2; Object.Filled = false end return self.__Objects[Index] end return Object end function Metatable.__call(self, Delete, ...) if Delete == false then for Index, Drawing in pairs(rawget(self, '__Objects')) do Drawing(false) end end end return setmetatable(Drawings, Metatable) end local Images = {} spawn(function() Images.Ring = 'https://i.imgur.com/q4qx26f.png' Images.Overlay = 'https://i.imgur.com/gOCxbsR.png' end) function ColorPicker.new(Position, Size, Color) ColorPicker.LastGenerated = tick(); ColorPicker.Loading = true local self = { Color = Color or Color3.new(1, 1, 1), HSV = { H = 0, S = 1, V = 1 } } local Drawings = CreateDrawingsTable() local Position = Position or V2New(); local Size = Size or 150 local Padding = { 10, 10, 10, 10 } self.ColorChanged = Signal.new() Drawings['Square-Background'] { Color = Color3.fromRGB(33, 33, 33), Filled = false, Visible = false, Position = Position - V2New(Padding[4], Padding[1]), Size = V2New(Size, Size) + V2New(Padding[4] + Padding[2], Padding[1] + Padding[3]) } Drawings['Circle-Preview'] { Position = Position + (V2New(Size, Size) / 2), Radius = Size / 2 - 8, Filled = true, Thickness = 0, NumSides = 20, Color = Color3.new(1, 0, 0) } local Main = Drawings['Image-Main'] { Position = Position, Size = V2New(Size, Size) }; SetImage(Main, Images.Ring) local Preview = Drawings['Square-Preview'] { Position = Main.Position + (Main.Size / 4.5), Size = Main.Size / 1.75, Color = Color3.new(1, 0, 0), Filled = true, Thickness = 0 } local Overlay = Drawings['Image-Overlay'] { Position = Preview.Position, Size = Preview.Size, Transparency = 1 }; SetImage(Overlay, Images.Overlay) local CursorOutline = Drawings['Circle-CursorOutline'] { Radius = 4, Thickness = 2, Filled = false, Color = Color3.new(0.2, 0.2, 0.2), Position = V2New(Main.Position.X + Main.Size.X - 10, Main.Position.Y + (Main.Size.Y / 2)) } Drawings['Circle-Cursor'] { Radius = 3, Transparency = 1, Filled = true, Color = Color3.new(1, 1, 1), Position = CursorOutline.Position } local CursorOutlineSquare = Drawings['Circle-CursorOutlineSquare'] { Radius = 4, Thickness = 2, Filled = false, Color = Color3.new(0.2, 0.2, 0.2), Position = V2New(Preview.Position.X + Preview.Size.X - 2, Preview.Position.Y + 2) } Drawings['Circle-CursorSquare'] { Radius = 3, Transparency = 1, Filled = true, Color = Color3.new(1, 1, 1), Position = CursorOutlineSquare.Position } function self:UpdatePosition(Input) local MousePosition = V2New(Input.Position.X, Input.Position.Y + 33) if self.MouseHeld then if self.Item == 'Ring' then local Main = self.Drawings['Image-Main'] (); local Preview = self.Drawings['Square-Preview'] () local Bounds = Main.Size / 2; local Center = Main.Position + Bounds local Relative = MousePosition - Center; local Direction = Relative.unit local Position = Center + Direction * Main.Size.X / 2.15 local H = (math.atan2(Position.Y - Center.Y, Position.X - Center.X)) * 60 if H < 0 then H = 360 + H end H = H / 360; self.HSV.H = H local EndColor = Color3.fromHSV(H, self.HSV.S, self.HSV.V); if EndColor ~= self.Color then self.ColorChanged:Fire(self.Color) end self.Drawings['Circle-Cursor'] { Position = Position } self.Drawings['Circle-CursorOutline'] { Position = Position } Preview.Color = Color3.fromHSV(H, 1, 1); self.Color = EndColor self.Drawings['Circle-Preview'] { Color = EndColor } elseif self.Item == 'HL' then local Preview = self.Drawings['Square-Preview'] (); local HSV = self.HSV local Position = V2New(math.clamp(MousePosition.X, Preview.Position.X, Preview.Position.X + Preview.Size.X), math.clamp(MousePosition.Y, Preview.Position.Y, Preview.Position.Y + Preview.Size.Y)) HSV.S = (Position.X - Preview.Position.X) / Preview.Size.X HSV.V = 1 - (Position.Y - Preview.Position.Y) / Preview.Size.Y local EndColor = Color3.fromHSV(HSV.H, HSV.S, HSV.V); if EndColor ~= self.Color then self.ColorChanged:Fire(self.Color) end self.Color = EndColor self.Drawings['Circle-Preview'] { Color = EndColor } self.Drawings['Circle-CursorSquare'] { Position = Position } self.Drawings['Circle-CursorOutlineSquare'] { Position = Position } end end end function self:HandleInput(Input, P, Type) if Type == 'Began' then if Input.UserInputType.Name == 'MouseButton1' then local Main = self.Drawings['Image-Main'] (); local SquareSV = self.Drawings['Square-Preview'] () local MousePosition = V2New(Input.Position.X, Input.Position.Y + 33) self.MouseHeld = true; local Bounds = Main.Size / 2; local Center = Main.Position + Bounds local R = (MousePosition - Center) if R.Magnitude < Bounds.X and R.Magnitude > Bounds.X - 20 then self.Item = 'Ring' end if MousePosition.X > SquareSV.Position.X and MousePosition.Y > SquareSV.Position.Y and MousePosition.X < SquareSV.Position.X + SquareSV.Size.X and MousePosition.Y < SquareSV.Position.Y + SquareSV.Size.Y then self.Item = 'HL' end self:UpdatePosition(Input, P) end elseif Type == 'Changed' then if Input.UserInputType.Name == 'MouseMovement' then self:UpdatePosition(Input, P) end elseif Type == 'Ended' and Input.UserInputType.Name == 'MouseButton1' then self.Item = nil end end function self:Dispose() self.Drawings(false); self.UpdatePosition = nil; self.HandleInput = nil Connections:DisconnectAll() end Connections:Listen(UserInputService.InputBegan, function(Input, Process) self:HandleInput(Input, Process, 'Began') end) Connections:Listen(UserInputService.InputChanged, function(Input, Process) if Input.UserInputType.Name == 'MouseMovement' then local MousePosition = V2New(Input.Position.X, Input.Position.Y + 33) self.Drawings['Triangle-Cursor'] { Filled = true, Color = Color3.new(0.9, 0.9, 0.9), PointA = MousePosition + V2New(0, 0), PointB = MousePosition + V2New(12, 14), PointC = MousePosition + V2New(0, 18), Thickness = 0 } end self:HandleInput(Input, Process, 'Changed') end) Connections:Listen(UserInputService.InputEnded, function(Input, Process) self:HandleInput(Input, Process, 'Ended') if Input.UserInputType.Name == 'MouseButton1' then self.MouseHeld = false end end) ColorPicker.Loading = false; self.Drawings = Drawings; return self end function SubMenu:Show(Position, Title, Options) self.Open = true; local Visible = true local BasePosition = Position; local BaseSize = V2New(200, 140) local End = BasePosition + BaseSize self.Bounds = { BasePosition.X, BasePosition.Y, End.X, End.Y } delay(0.025, function() if not self.Open then return end Menu:AddMenuInstance('Sub-Main', 'Square', { Size = BaseSize, Position = BasePosition, Filled = false, Color = Colors.Primary.Main, Thickness = 3, Visible = Visible }) end) Menu:AddMenuInstance('Sub-TopBar', 'Square', { Position = BasePosition, Size = V2New(BaseSize.X, 10), Color = Colors.Primary.Dark, Filled = true, Visible = Visible }) Menu:AddMenuInstance('Sub-TopBarTwo', 'Square', { Position = BasePosition + V2New(0, 10), Size = V2New(BaseSize.X, 20), Color = Colors.Primary.Main, Filled = true, Visible = Visible }) Menu:AddMenuInstance('Sub-TopBarText', 'Text', { Size = 20, Position = shared.MenuDrawingData.Instances['Sub-TopBarTwo'].Position + V2New(15, -3), Text = Title or '', Color = Colors.Secondary.Light, Visible = Visible }) Menu:AddMenuInstance('Sub-Filling', 'Square', { Size = BaseSize - V2New(0, 30), Position = BasePosition + V2New(0, 30), Filled = true, Color = Colors.Secondary.Main, Transparency = 0.75, Visible = Visible }) if Options then for Index, Option in pairs(Options) do local function GetName(Name) return ('Sub-%s.%d'):format(Name, Index) end local Position = shared.MenuDrawingData.Instances['Sub-Filling'].Position + V2New(20, Index * 25 - 10) if Option.Type == 'Color' then local ColorPreview = Menu:AddMenuInstance(GetName('ColorPreview'), 'Circle', { Position = Position, Color = Option.Color, Radius = IsSynapse and 10 or 10, NumSides = 10, Filled = true, Visible = true }) Menu:AddMenuInstance(GetName('Text'), 'Text', { Text = Option.Text, Position = ColorPreview.Position + V2New(15, -8), Size = 16, Color = Colors.Primary.Dark, Visible = true }) UIButtons[#UIButtons + 1] = { FromSubMenu = true, Option = function() return Option.Function(ColorPreview, BasePosition + V2New(BaseSize.X, 0)) end, Instance = Menu:AddMenuInstance(Format('%s_Hitbox', GetName('Button')), 'Square', { Position = Position - V2New(20, 12), Size = V2New(BaseSize.X, 25), Visible = false }) } elseif Option.Type == 'Button' then UIButtons[#UIButtons + 1] = { FromSubMenu = true, Option = Option.Function, Instance = Menu:AddMenuInstance(Format('%s_Hitbox', GetName('Button')), 'Square', { Size = V2New(BaseSize.X, 20) - V2New(20, 0), Visible = true, Transparency = 0.5, Position = Position - V2New(10, 10), Color = Colors.Secondary.Light, Filled = true }) } Menu:AddMenuInstance(Format('%s_Text', GetName('Text')), 'Text', { Text = Option.Text, Size = 18, Position = Position + V2New(5, -10), Visible = true, Color = Colors.Primary.Dark }) end end end end function SubMenu:Hide() self.Open = false for i, v in pairs(shared.MenuDrawingData.Instances) do if i:sub(1, 3) == 'Sub' then v.Visible = false if i:sub(4, 4) == ':' then v:Remove(); shared.MenuDrawingData.Instance[i] = nil end end end for i, Button in pairs(UIButtons) do if Button.FromSubMenu then UIButtons[i] = nil end end spawn(function() for i = 1, 10 do if shared.CurrentColorPicker then shared.CurrentColorPicker:Dispose() end task.wait(0.1) end end) CurrentColorPicker = nil end function CreateMenu(NewPosition) MenuLoaded = false; UIButtons = {}; Sliders = {} local BaseSize = V2New(300, 625) local BasePosition = NewPosition or V2New(Camera.ViewportSize.X / 8 - (BaseSize.X / 2), Camera.ViewportSize.Y / 2 - (BaseSize.Y / 2)) BasePosition = V2New(math.clamp(BasePosition.X, 0, Camera.ViewportSize.X), math.clamp(BasePosition.Y, 0, Camera.ViewportSize.Y)) Menu:AddMenuInstance('CrosshairX', 'Line', { Visible = false, Color = Color3.new(0, 1, 0), Transparency = 1, Thickness = 1 }) Menu:AddMenuInstance('CrosshairY', 'Line', { Visible = false, Color = Color3.new(0, 1, 0), Transparency = 1, Thickness = 1 }) delay(0.025, function() Menu:AddMenuInstance('Main', 'Square', { Size = BaseSize, Position = BasePosition, Filled = false, Color = Color3.fromHSV(0, 1, 1), Thickness = 3, Visible = true }) end) Menu:AddMenuInstance('TopBar', 'Square', { Position = BasePosition, Size = V2New(BaseSize.X, 15), Color = Colors.Primary.Dark, Filled = true, Visible = true }) Menu:AddMenuInstance('TopBarTwo', 'Square', { Position = BasePosition + V2New(0, 15), Size = V2New(BaseSize.X, 45), Color = Colors.Primary.Main, Filled = true, Visible = true }) Menu:AddMenuInstance('TopBarText', 'Text', { Size = 25, Position = shared.MenuDrawingData.Instances.TopBarTwo.Position + V2New(25, 10), Text = 'Unnamed ESP', Color = Colors.Secondary.Light, Visible = true, Transparency = 1, Outline = true, OutlineOpacity = 0.5 }) Menu:AddMenuInstance('TopBarTextBR', 'Text', { Size = 18, Position = shared.MenuDrawingData.Instances.TopBarTwo.Position + V2New(BaseSize.X - 75, 25), Text = 'by ic3w0lf', Color = Colors.Secondary.Light, Visible = true, Transparency = 1, Outline = true, OutlineOpacity = 0.5 }) Menu:AddMenuInstance('Filling', 'Square', { Size = BaseSize - V2New(0, 60), Position = BasePosition + V2New(0, 60), Filled = true, Color = Colors.Secondary.Main, Transparency = 0.35, Visible = true }) local CPos = 0 GetTableData(Options)(function(i, v) if typeof(v.Value) == 'boolean' and not IsStringEmpty(v.Text) and v.Text ~= nil then CPos = CPos + 25 local BaseSize = V2New(BaseSize.X, 30) local BasePosition = shared.MenuDrawingData.Instances.Filling.Position + V2New(30, v.Index * 25 - 10) UIButtons[#UIButtons + 1] = { Option = v, Instance = Menu:AddMenuInstance(Format('%s_Hitbox', v.Name), 'Square', { Position = BasePosition - V2New(30, 15), Size = BaseSize, Visible = false }) } Menu:AddMenuInstance(Format('%s_OuterCircle', v.Name), 'Circle', { Radius = 10, Position = BasePosition, Color = Colors.Secondary.Light, Filled = true, Visible = true }) Menu:AddMenuInstance(Format('%s_InnerCircle', v.Name), 'Circle', { Radius = 7, Position = BasePosition, Color = Colors.Secondary.Dark, Filled = true, Visible = v.Value }) Menu:AddMenuInstance(Format('%s_Text', v.Name), 'Text', { Text = v.Text, Size = 20, Position = BasePosition + V2New(20, -10), Visible = true, Color = Colors.Secondary.Light, Transparency = 1, Outline = true, OutlineOpacity = 0.5 }) end end) GetTableData(Options)(function(i, v) if typeof(v.Value) == 'number' then CPos = CPos + 25 local BaseSize = V2New(BaseSize.X, 30) local BasePosition = shared.MenuDrawingData.Instances.Filling.Position + V2New(0, CPos - 10) local Line = Menu:AddMenuInstance(Format('%s_SliderLine', v.Name), 'Square', { Transparency = 1, Color = Colors.Secondary.Light, Filled = true, Visible = true, Position = BasePosition + V2New(15, -5), Size = BaseSize - V2New(30, 10), Transparency = 0.5 }) local Slider = Menu:AddMenuInstance(Format('%s_Slider', v.Name), 'Square', { Visible = true, Filled = true, Color = Colors.Primary.Dark, Size = V2New(5, Line.Size.Y), Transparency = 0.5 }) local Text = Menu:AddMenuInstance(Format('%s_Text', v.Name), 'Text', { Text = v.Text, Size = 20, Center = true, Transparency = 1, Outline = true, OutlineOpacity = 0.5, Visible = true, Color = Colors.White }); Text.Position = Line.Position + (Line.Size / 2) - V2New(0, Text.TextBounds.Y / 1.75) local AMT = Menu:AddMenuInstance(Format('%s_AmountText', v.Name), 'Text', { Text = tostring(v.Value), Size = 22, Center = true, Transparency = 1, Outline = true, OutlineOpacity = 0.5, Visible = true, Color = Colors.White, Position = Text.Position }) local CSlider = {Slider = Slider, Line = Line, Min = v.AllArgs[4], Max = v.AllArgs[5], Option = v} local Dummy = Instance.new('NumberValue') Dummy:GetPropertyChangedSignal('Value'):Connect(function() Text.Transparency = Dummy.Value; AMT.Transparency = 1 - Dummy.Value end) Dummy.Value = 1 function CSlider:ShowValue(Bool) self.ShowingValue = Bool; TweenService:Create(Dummy, TweenInfo.new(0.5, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), { Value = Bool and 0 or 1 }):Play() end Sliders[#Sliders + 1] = CSlider Slider.Position = Line.Position + V2New(35, 0) v.BaseSize = BaseSize; v.BasePosition = BasePosition end end) local FirstItem = false GetTableData(Options)(function(i, v) if typeof(v.Value) == 'EnumItem' then CPos = CPos + (not FirstItem and 30 or 25); FirstItem = true local BaseSize = V2New(BaseSize.X, FirstItem and 30 or 25) local BasePosition = shared.MenuDrawingData.Instances.Filling.Position + V2New(0, CPos - 10) UIButtons[#UIButtons + 1] = { Option = v, Instance = Menu:AddMenuInstance(Format('%s_Hitbox', v.Name), 'Square', { Size = V2New(BaseSize.X, 20) - V2New(30, 0), Visible = true, Transparency = 0.5, Position = BasePosition + V2New(15, -10), Color = Colors.Secondary.Light, Filled = true }) } local Text = Menu:AddMenuInstance(Format('%s_Text', v.Name), 'Text', { Text = v.Text, Size = 20, Position = BasePosition + V2New(20, -10), Visible = true, Color = Colors.Secondary.Light, Transparency = 1, Outline = true, OutlineOpacity = 0.5 }) local BindText = Menu:AddMenuInstance(Format('%s_BindText', v.Name), 'Text', { Text = tostring(v.Value):match('%w+%.%w+%.(.+)'), Size = 20, Position = BasePosition, Visible = true, Color = Colors.Secondary.Light, Transparency = 1, Outline = true, OutlineOpacity = 0.5 }) Options[i].BaseSize = BaseSize; Options[i].BasePosition = BasePosition BindText.Position = BasePosition + V2New(BaseSize.X - BindText.TextBounds.X - 20, -10) end end) GetTableData(Options)(function(i, v) if typeof(v.Value) == 'function' then local BaseSize = V2New(BaseSize.X, 30) local BasePosition = shared.MenuDrawingData.Instances.Filling.Position + V2New(0, CPos + (25 * v.AllArgs[4]) - 35) UIButtons[#UIButtons + 1] = { Option = v, Instance = Menu:AddMenuInstance(Format('%s_Hitbox', v.Name), 'Square', { Size = V2New(BaseSize.X, 20) - V2New(30, 0), Visible = true, Transparency = 0.5, Position = BasePosition + V2New(15, -10), Color = Colors.Secondary.Light, Filled = true }) } local Text = Menu:AddMenuInstance(Format('%s_Text', v.Name), 'Text', { Text = v.Text, Size = 20, Position = BasePosition + V2New(20, -10), Visible = true, Color = Colors.Secondary.Light, Transparency = 1, Outline = true, OutlineOpacity = 0.5 }) end end) delay(0.1, function() MenuLoaded = true end) Menu:AddMenuInstance('Cursor1', 'Line', { Visible = false, Color = Color3.new(1, 0, 0), Transparency = 1, Thickness = 2 }) Menu:AddMenuInstance('Cursor2', 'Line', { Visible = false, Color = Color3.new(1, 0, 0), Transparency = 1, Thickness = 2 }) Menu:AddMenuInstance('Cursor3', 'Line', { Visible = false, Color = Color3.new(1, 0, 0), Transparency = 1, Thickness = 2 }) end CreateMenu() delay(0.1, function() SubMenu:Show(V2New()); SubMenu:Hide() end) local DrawingScreenGui if game:GetService("CoreGui"):FindFirstChild("Drawing") then DrawingScreenGui = game:GetService("CoreGui"):FindFirstChild("Drawing") else DrawingScreenGui = Instance.new("ScreenGui") DrawingScreenGui.Name = "Drawing" DrawingScreenGui.Parent = game:GetService("CoreGui") end local function ToggleDrawingGUI() if DrawingScreenGui then DrawingScreenGui.Enabled = not DrawingScreenGui.Enabled end end shared.UESP_InputChangedCon = UserInputService.InputChanged:Connect(function(input) if input.UserInputType.Name == 'MouseMovement' and Options.MenuOpen.Value then for i, v in pairs(Sliders) do local Values = { v.Line.Position.X, v.Line.Position.Y, v.Line.Position.X + v.Line.Size.X, v.Line.Position.Y + v.Line.Size.Y } if MouseHoveringOver(Values) then v:ShowValue(true); else if not MouseHeld then v:ShowValue(false) end end end end end) shared.UESP_InputBeganCon = UserInputService.InputBegan:Connect(function(input) if input.UserInputType.Name == 'MouseButton1' and Options.MenuOpen.Value then MouseHeld = true local Bar = Menu:GetInstance('TopBar') local Values = { Bar.Position.X, Bar.Position.Y, Bar.Position.X + Bar.Size.X, Bar.Position.Y + Bar.Size.Y } if MouseHoveringOver(Values) then DraggingUI = true DragOffset = Menu:GetInstance('Main').Position - GetMouseLocation() else for i, v in pairs(Sliders) do local Values = { v.Line.Position.X, v.Line.Position.Y, v.Line.Position.X + v.Line.Size.X, v.Line.Position.Y + v.Line.Size.Y } if MouseHoveringOver(Values) then DraggingWhat = v; Dragging = true; break end end if not Dragging then local Values = { TracerPosition.X - 10, TracerPosition.Y - 10, TracerPosition.X + 10, TracerPosition.Y + 10 } if MouseHoveringOver(Values) then DragTracerPosition = true end end end end end) shared.UESP_InputEndedCon = UserInputService.InputEnded:Connect(function(input) if input.UserInputType.Name == 'MouseButton1' and Options.MenuOpen.Value then MouseHeld = false; DragTracerPosition = false local IgnoreOtherInput = false if SubMenu.Open and not MouseHoveringOver(SubMenu.Bounds) then if CurrentColorPicker and IsMouseOverDrawing(CurrentColorPicker.Drawings['Square-Background']()) then IgnoreOtherInput = true end if not IgnoreOtherInput then SubMenu:Hide() end end if not IgnoreOtherInput then for i, v in pairs(UIButtons) do if SubMenu.Open and MouseHoveringOver(SubMenu.Bounds) and not v.FromSubMenu then continue end local Values = { v.Instance.Position.X, v.Instance.Position.Y, v.Instance.Position.X + v.Instance.Size.X, v.Instance.Position.Y + v.Instance.Size.Y } if MouseHoveringOver(Values) then v.Option(); IgnoreOtherInput = true; break end end for i, v in pairs(Sliders) do if IgnoreOtherInput then break end local Values = { v.Line.Position.X, v.Line.Position.Y, v.Line.Position.X + v.Line.Size.X, v.Line.Position.Y + v.Line.Size.Y } if not MouseHoveringOver(Values) then v:ShowValue(false) end end end elseif input.UserInputType.Name == 'MouseButton2' and Options.MenuOpen.Value and not DragTracerPosition then local Values = { TracerPosition.X - 10, TracerPosition.Y - 10, TracerPosition.X + 10, TracerPosition.Y + 10 } if MouseHoveringOver(Values) then DragTracerPosition = false; TracerPosition = V2New(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y - 135) end elseif input.UserInputType.Name == 'Keyboard' then if Binding then BindedKey = input.KeyCode; Binding = false elseif input.KeyCode == Options.MenuKey.Value or (input.KeyCode == Enum.KeyCode.Home and UserInputService:IsKeyDown(Enum.KeyCode.LeftControl)) then Options.MenuOpen() ToggleDrawingGUI() elseif input.KeyCode == Options.ToggleKey.Value then Options.Enabled() elseif input.KeyCode.Name == 'F1' and UserInputService:IsMouseButtonPressed(1) and shared.am_ic3 then local HD, LPlayer, LCharacter = 0.95 for i, Player in pairs(Players:GetPlayers()) do local Character = GetCharacter(Player) if Player ~= LocalPlayer and Player ~= Spectating and Character and Character:FindFirstChild('HumanoidRootPart') then local Head = Character:FindFirstChild('Head') if Head then local Distance = (Camera.CFrame.Position - Head.Position).Magnitude if Distance > Options.MaxDistance.Value then continue end local Direction = -(Camera.CFrame.Position - Mouse.Hit.Position).unit local Relative = Character.Head.Position - Camera.CFrame.Position local Unit = Relative.unit local DP = Direction:Dot(Unit) if DP > HD then HD = DP; LPlayer = Player; LCharacter = Character end end end end if LPlayer and LPlayer ~= Spectating and LCharacter then Camera.CameraSubject = LCharacter.Head; Spectating = LPlayer elseif LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass('Humanoid') then Camera.CameraSubject = LocalPlayer.Character:FindFirstChildOfClass('Humanoid'); Spectating = nil end end end end) local function CameraCon() workspace.CurrentCamera:GetPropertyChangedSignal('ViewportSize'):Connect(function() TracerPosition = V2New(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y - 135) end) end CameraCon() local function ToggleMenu() if Options.MenuOpen.Value then GetTableData(shared.MenuDrawingData.Instances)(function(i, v) if OldData[v] then pcall(Set, v, 'Visible', true) end end) else GetTableData(shared.MenuDrawingData.Instances)(function(i, v) OldData[v] = v.Visible; if v.Visible then pcall(Set, v, 'Visible', false) end end) end end local LastRayIgnoreUpdate, RayIgnoreList = 0, {} local function CheckRay(Instance, Distance, Position, Unit) local Pass = true; local Model = Instance if Distance > 999 then return false end if Instance.ClassName == 'Player' then Model = GetCharacter(Instance) end if not Model then Model = Instance.Parent; if Model.Parent == workspace then Model = Instance end end if not Model then return false end local _Ray = Ray.new(Position, Unit * Distance) if tick() - LastRayIgnoreUpdate > 3 then LastRayIgnoreUpdate = tick() table.clear(RayIgnoreList) table.insert(RayIgnoreList, LocalPlayer.Character) table.insert(RayIgnoreList, Camera) if Mouse.TargetFilter then table.insert(RayIgnoreList, Mouse.TargetFilter) end if #IgnoreList > 64 then while #IgnoreList > 64 do table.remove(IgnoreList, 1) end end for i, v in pairs(IgnoreList) do table.insert(RayIgnoreList, v) end end local Hit = workspace:FindPartOnRayWithIgnoreList(_Ray, RayIgnoreList) if Hit and not Hit:IsDescendantOf(Model) then Pass = false if Hit.Transparency >= 0.3 or not Hit.CanCollide and Hit.ClassName ~= 'Terrain' then table.insert(IgnoreList, Hit) end end return Pass end local function CheckTeam(Player) if Player.Neutral and LocalPlayer.Neutral then return true end return Player.TeamColor == LocalPlayer.TeamColor end local CustomTeam = CustomTeams[game.PlaceId] if CustomTeam ~= nil then if CustomTeam.Initialize then ypcall(CustomTeam.Initialize) end CheckTeam = CustomTeam.CheckTeam end local function IsVisible(Player) if not Options.VisCheck.Value then return true end local character = GetCharacter(Player) if not character then return false end local head = character:FindFirstChild('Head') if not head then return false end local rootPart = character:FindFirstChild('HumanoidRootPart') if not rootPart then return false end local origin = Camera.CFrame.Position local targets = { head.Position, rootPart.Position, (head.Position + rootPart.Position) / 2 } for _, target in pairs(targets) do local direction = (target - origin).unit local distance = (target - origin).Magnitude if distance < 5 then return true end local ray = Ray.new(origin, direction * distance) local hit, position = workspace:FindPartOnRayWithIgnoreList(ray, { LocalPlayer.Character, Camera, character }) if not hit then return true end if hit:IsDescendantOf(character) then return true end end return false end local BillboardConnections = {} local BillboardDrawings = {} local function CreateBillboardText(player) if player == LocalPlayer then return end local Text = NewDrawing('Text'){ Size = Options.TextSize.Value, Color = Color3.new(1, 1, 1), Center = true, Outline = Options.TextOutline.Value, OutlineOpacity = 0.5, Visible = false, Transparency = 1, ZIndex = 3, Font = Drawing.Fonts and Drawing.Fonts.Monospace or 3 } BillboardDrawings[player] = { Text = Text } local conn = RunService.RenderStepped:Connect(function() local character = GetCharacter(player) local text = BillboardDrawings[player] if not text or not character or not Options.Enabled.Value then if text and text.Text then text.Text.Visible = false end return end local head = character:FindFirstChild('Head') if not head then text.Text.Visible = false return end if Options.VisCheck.Value and not IsVisible(player) then text.Text.Visible = false return end local Vector, OnScreen = Camera:WorldToViewportPoint(head.Position + V3New(0, 2.5 + Options.YOffset.Value / 100, 0)) if OnScreen then local distance = (Camera.CFrame.Position - head.Position).Magnitude if distance > Options.MaxDistance.Value then text.Text.Visible = false return end local info = {} if Options.ShowName.Value then local name = player.Name if CustomPlayerTag then local tag = CustomPlayerTag(player) if tag and #tag > 0 then name = name .. tag end end table.insert(info, name) end if Options.ShowHealth.Value then local health = 100 if GetHealth then health = GetHealth(player) or 100 elseif character:FindFirstChildOfClass('Humanoid') then health = math.floor(character:FindFirstChildOfClass('Humanoid').Health) end table.insert(info, string.format('[%s HP]', health)) end if Options.ShowDistance.Value then table.insert(info, string.format('[%sm]', math.floor(distance))) end if #info == 0 then text.Text.Visible = false return end local color if Rainbow then color = Color3.fromHSV(tick() * 128 % 255 / 255, 1, 1) elseif Options.ShowTeamColor.Value then color = player.TeamColor.Color elseif CheckTeam(player) then color = TeamColor else color = EnemyColor end text.Text.Text = table.concat(info, ' ') text.Text.Color = color text.Text.Size = Options.TextSize.Value text.Text.Outline = Options.TextOutline.Value text.Text.Position = V2New(Vector.X, Vector.Y) text.Text.Visible = true else text.Text.Visible = false end end) table.insert(BillboardConnections, conn) end local function RemoveBillboard(player) local text = BillboardDrawings[player] if text and text.Text then text.Text.Visible = false text.Text:Remove() end BillboardDrawings[player] = nil end local function CreateAllBillboards() for _, conn in pairs(BillboardConnections) do conn:Disconnect() end BillboardConnections = {} for _, text in pairs(BillboardDrawings) do if text and text.Text then text.Text.Visible = false text.Text:Remove() end end BillboardDrawings = {} for _, player in pairs(Players:GetPlayers()) do if player ~= LocalPlayer then CreateBillboardText(player) end end end Players.PlayerAdded:Connect(function(player) task.wait(0.5) CreateBillboardText(player) end) Players.PlayerRemoving:Connect(function(player) RemoveBillboard(player) end) LocalPlayer.CharacterAdded:Connect(function() task.wait(1) CreateAllBillboards() end) CreateAllBillboards() local runService = game:GetService('RunService') local players = game:GetService('Players') local localPlayer = players.LocalPlayer local camera = workspace.CurrentCamera local newVector2, newColor3, newDrawing = Vector2.new, Color3.new, Drawing.new local tan, rad = math.tan, math.rad local round = function(...) local a = {}; for i,v in next, table.pack(...) do a[i] = math.round(v) end return unpack(a) end local wtvp = function(...) local a, b = camera.WorldToViewportPoint(camera, ...) return newVector2(a.X, a.Y), b, a.Z end local espCache = {} local function GetESPColor(player) if Rainbow then return Color3.fromHSV(tick() * 128 % 255 / 255, 1, 1) elseif Options.ShowTeamColor and Options.ShowTeamColor.Value then return player.TeamColor.Color elseif CheckTeam(player) then return TeamColor else return EnemyColor end end local function createEsp(player) local drawings = {} drawings.box = newDrawing('Square') drawings.box.Thickness = 1 drawings.box.Filled = false drawings.box.Color = GetESPColor(player) drawings.box.Visible = false drawings.box.ZIndex = 2 drawings.boxoutline = newDrawing('Square') drawings.boxoutline.Thickness = 3 drawings.boxoutline.Filled = false drawings.boxoutline.Color = GetESPColor(player) drawings.boxoutline.Visible = false drawings.boxoutline.ZIndex = 1 drawings.boxoutline.Transparency = 0.5 espCache[player] = drawings end local function removeEsp(player) if rawget(espCache, player) then for _, drawing in next, espCache[player] do drawing:Remove() end espCache[player] = nil end end local function updateEsp(player, esp) local character = player and player.Character if character then local cframe = character:GetModelCFrame() local position, visible, depth = wtvp(cframe.Position) esp.box.Visible = visible esp.boxoutline.Visible = visible if cframe and visible then if Options.VisCheck.Value and not IsVisible(player) then esp.box.Visible = false esp.boxoutline.Visible = false return end local scaleFactor = 1 / (depth * tan(rad(camera.FieldOfView / 2)) * 2) * 1000 local width, height = round(4 * scaleFactor, 5 * scaleFactor) local x, y = round(position.X, position.Y) local boxSize = newVector2(width, height) local boxPos = newVector2(round(x - width / 2, y - height / 2)) local color = GetESPColor(player) esp.box.Size = boxSize esp.box.Position = boxPos esp.box.Color = color esp.boxoutline.Size = boxSize esp.boxoutline.Position = boxPos esp.boxoutline.Color = color esp.boxoutline.Transparency = 0.5 local distance = (Camera.CFrame.Position - character:FindFirstChild('HumanoidRootPart').Position).Magnitude if distance > Options.MaxDistance.Value then esp.box.Visible = false esp.boxoutline.Visible = false end end else esp.box.Visible = false esp.boxoutline.Visible = false end end for _, player in next, players:GetPlayers() do if player ~= localPlayer then createEsp(player) end end players.PlayerAdded:Connect(function(player) createEsp(player) end) players.PlayerRemoving:Connect(function(player) removeEsp(player) end) runService:BindToRenderStep('BoxESP', Enum.RenderPriority.Camera.Value, function() for player, drawings in next, espCache do if drawings and player ~= localPlayer then updateEsp(player, drawings) end end end) local TracerConnections = {} local TracerDrawings = {} local function GetTracerColor(player) if Rainbow then return Color3.fromHSV(tick() * 128 % 255 / 255, 1, 1) elseif Options.ShowTeamColor and Options.ShowTeamColor.Value then return player.TeamColor.Color elseif CheckTeam(player) then return TeamColor else return EnemyColor end end local function CreateTracers() for _, conn in pairs(TracerConnections) do conn:Disconnect() end for _, drawings in pairs(TracerDrawings) do if drawings.Tracer then drawings.Tracer.Visible = false drawings.Tracer:Remove() end if drawings.TracerOutline then drawings.TracerOutline.Visible = false drawings.TracerOutline:Remove() end end TracerConnections = {} TracerDrawings = {} for _, player in pairs(Players:GetPlayers()) do if player == LocalPlayer then continue end local TracerOutline = NewDrawing('Line'){ Thickness = 3, Transparency = 0.5, Color = GetTracerColor(player), Visible = false } local Tracer = NewDrawing('Line'){ Thickness = 1, Transparency = 0.7, Color = GetTracerColor(player), Visible = false } TracerDrawings[player] = { Tracer = Tracer, TracerOutline = TracerOutline } local conn = RunService.RenderStepped:Connect(function() local character = GetCharacter(player) if character and character:FindFirstChild('HumanoidRootPart') and Options.Enabled.Value and Options.ShowTracers.Value then local rootPart = character.HumanoidRootPart local Vector, OnScreen = Camera:WorldToViewportPoint((rootPart.CFrame * CFrame.new(0, -rootPart.Size.Y, 0)).Position) if Options.VisCheck.Value and not IsVisible(player) then Tracer.Visible = false TracerOutline.Visible = false return end local color = GetTracerColor(player) Tracer.Color = color TracerOutline.Color = color TracerOutline.From = TracerPosition Tracer.From = TracerPosition if OnScreen then Tracer.To = V2New(Vector.X, Vector.Y) TracerOutline.To = V2New(Vector.X, Vector.Y) local distance = (Camera.CFrame.Position - rootPart.Position).Magnitude local show = distance <= Options.MaxDistance.Value Tracer.Visible = show TracerOutline.Visible = show else local head = character:FindFirstChild('Head') if head then local OPos = Camera.CFrame:pointToObjectSpace(head.Position) local AT = math.atan2(OPos.Y, OPos.X) + math.pi OPos = CFrame.Angles(0, 0, AT):vectorToWorldSpace((CFrame.Angles(0, math.rad(89.9), 0):vectorToWorldSpace(V3New(0, 0, -1)))) local edgePos = WorldToViewport(Camera.CFrame:pointToWorldSpace(OPos)) Tracer.To = V2New(edgePos.X, edgePos.Y) TracerOutline.To = V2New(edgePos.X, edgePos.Y) local distance = (Camera.CFrame.Position - head.Position).Magnitude local show = distance <= Options.MaxDistance.Value Tracer.Visible = show TracerOutline.Visible = show else Tracer.Visible = false TracerOutline.Visible = false end end else Tracer.Visible = false TracerOutline.Visible = false end end) table.insert(TracerConnections, conn) end end Players.PlayerAdded:Connect(function(player) task.wait(0.5) CreateTracers() end) Players.PlayerRemoving:Connect(function(player) local drawings = TracerDrawings[player] if drawings then if drawings.Tracer then drawings.Tracer.Visible = false drawings.Tracer:Remove() end if drawings.TracerOutline then drawings.TracerOutline.Visible = false drawings.TracerOutline:Remove() end TracerDrawings[player] = nil end end) LocalPlayer.CharacterAdded:Connect(function() task.wait(1) CreateTracers() end) CreateTracers() local HeadDotConnections = {} local HeadDotDrawings = {} local function GetHeadDotColor(player) if Rainbow then return Color3.fromHSV(tick() * 128 % 255 / 255, 1, 1) elseif Options.ShowTeamColor and Options.ShowTeamColor.Value then return player.TeamColor.Color elseif CheckTeam(player) then return TeamColor else return EnemyColor end end local function CreateHeadDots() for _, conn in pairs(HeadDotConnections) do conn:Disconnect() end for _, drawings in pairs(HeadDotDrawings) do if drawings.Dot then drawings.Dot.Visible = false drawings.Dot:Remove() end if drawings.DotOutline then drawings.DotOutline.Visible = false drawings.DotOutline:Remove() end end HeadDotConnections = {} HeadDotDrawings = {} for _, player in pairs(Players:GetPlayers()) do if player == LocalPlayer then continue end local DotOutline = NewDrawing('Circle'){ Radius = 4, Thickness = 3, Filled = false, Color = GetHeadDotColor(player), Visible = false, ZIndex = 1, NumSides = 12, Transparency = 0.5 } local Dot = NewDrawing('Circle'){ Radius = 2, Thickness = 0, Filled = true, Color = GetHeadDotColor(player), Visible = false, ZIndex = 2, NumSides = 12 } HeadDotDrawings[player] = { Dot = Dot, DotOutline = DotOutline } local conn = RunService.RenderStepped:Connect(function() local character = GetCharacter(player) if character and Options.Enabled.Value and Options.ShowDot.Value then local head = character:FindFirstChild('Head') if head then local Vector, OnScreen = Camera:WorldToViewportPoint(head.Position) if OnScreen then if Options.VisCheck.Value and not IsVisible(player) then Dot.Visible = false DotOutline.Visible = false return end local color = GetHeadDotColor(player) Dot.Color = color DotOutline.Color = color local pos = V2New(Vector.X, Vector.Y) Dot.Position = pos DotOutline.Position = pos local distance = (Camera.CFrame.Position - head.Position).Magnitude local show = distance <= Options.MaxDistance.Value Dot.Visible = show DotOutline.Visible = show else Dot.Visible = false DotOutline.Visible = false end else Dot.Visible = false DotOutline.Visible = false end else if HeadDotDrawings[player] then HeadDotDrawings[player].Dot.Visible = false HeadDotDrawings[player].DotOutline.Visible = false end end end) table.insert(HeadDotConnections, conn) end end Players.PlayerAdded:Connect(function(player) task.wait(0.5) CreateHeadDots() end) Players.PlayerRemoving:Connect(function(player) local drawings = HeadDotDrawings[player] if drawings then if drawings.Dot then drawings.Dot.Visible = false drawings.Dot:Remove() end if drawings.DotOutline then drawings.DotOutline.Visible = false drawings.DotOutline:Remove() end HeadDotDrawings[player] = nil end end) LocalPlayer.CharacterAdded:Connect(function() task.wait(1) CreateHeadDots() end) CreateHeadDots() local LastInvalidCheck = 0 local function Update() if tick() - LastInvalidCheck > 0.3 then LastInvalidCheck = tick() if Camera.Parent ~= workspace then Camera = workspace.CurrentCamera; CameraCon(); WTVP = Camera.WorldToViewportPoint end end if Options.MenuOpen.Value then local Main = Menu:GetInstance('Main') if Main then if tick() - (shared.LastRainbowUpdate or 0) > 0.05 then shared.LastRainbowUpdate = tick() local hue = (tick() * 0.08) % 1 Main.Color = Color3.fromHSV(hue, 1, 1) end end end local CX = Menu:GetInstance('CrosshairX'); local CY = Menu:GetInstance('CrosshairY') if Options.Crosshair.Value then CX.Visible = true; CY.Visible = true CX.To = V2New((Camera.ViewportSize.X / 2) - 8, (Camera.ViewportSize.Y / 2)) CX.From = V2New((Camera.ViewportSize.X / 2) + 8, (Camera.ViewportSize.Y / 2)) CY.To = V2New((Camera.ViewportSize.X / 2), (Camera.ViewportSize.Y / 2) - 8) CY.From = V2New((Camera.ViewportSize.X / 2), (Camera.ViewportSize.Y / 2) + 8) else CX.Visible = false; CY.Visible = false end if Options.MenuOpen.Value and MenuLoaded then local MLocation = GetMouseLocation() local MainInstance = Menu:GetInstance('Main') local Values = { MainInstance.Position.X, MainInstance.Position.Y, MainInstance.Position.X + MainInstance.Size.X, MainInstance.Position.Y + MainInstance.Size.Y } if MainInstance and (MouseHoveringOver(Values) or (SubMenu.Open and MouseHoveringOver(SubMenu.Bounds))) then Debounce.CursorVis = true Menu:UpdateMenuInstance('Cursor1'){ Visible = true, From = V2New(MLocation.x, MLocation.y), To = V2New(MLocation.x + 5, MLocation.y + 6) } Menu:UpdateMenuInstance('Cursor2'){ Visible = true, From = V2New(MLocation.x, MLocation.y), To = V2New(MLocation.x, MLocation.y + 8) } Menu:UpdateMenuInstance('Cursor3'){ Visible = true, From = V2New(MLocation.x, MLocation.y + 6), To = V2New(MLocation.x + 5, MLocation.y + 5) } else if Debounce.CursorVis then Debounce.CursorVis = false Menu:UpdateMenuInstance('Cursor1'){Visible = false}; Menu:UpdateMenuInstance('Cursor2'){Visible = false}; Menu:UpdateMenuInstance('Cursor3'){Visible = false} end end if MouseHeld then local MousePos = GetMouseLocation() if Dragging then DraggingWhat.Slider.Position = V2New(math.clamp(MLocation.X - DraggingWhat.Slider.Size.X / 2, DraggingWhat.Line.Position.X, DraggingWhat.Line.Position.X + DraggingWhat.Line.Size.X - DraggingWhat.Slider.Size.X), DraggingWhat.Slider.Position.Y) local Percent = (DraggingWhat.Slider.Position.X - DraggingWhat.Line.Position.X) / ((DraggingWhat.Line.Position.X + DraggingWhat.Line.Size.X - DraggingWhat.Line.Position.X) - DraggingWhat.Slider.Size.X) local Value = CalculateValue(DraggingWhat.Min, DraggingWhat.Max, Percent) DraggingWhat.Option(Value) elseif DraggingUI then Debounce.UIDrag = true local Main = Menu:GetInstance('Main') Main.Position = MousePos + DragOffset elseif DragTracerPosition then TracerPosition = MousePos end else Dragging = false; DragTracerPosition = false if DraggingUI and Debounce.UIDrag then Debounce.UIDrag = false; DraggingUI = false; CreateMenu(Menu:GetInstance('Main').Position) end end if not Debounce.Menu then Debounce.Menu = true; ToggleMenu() end elseif Debounce.Menu and not Options.MenuOpen.Value then Debounce.Menu = false; ToggleMenu() else if Debounce.CursorVis then Debounce.CursorVis = false Menu:UpdateMenuInstance('Cursor1'){Visible = false}; Menu:UpdateMenuInstance('Cursor2'){Visible = false}; Menu:UpdateMenuInstance('Cursor3'){Visible = false} end end end RunService:UnbindFromRenderStep(GetDataName) RunService:UnbindFromRenderStep(UpdateName) RunService:BindToRenderStep(UpdateName, 199, Update)