The text below is selected, press Ctrl+C to copy to your clipboard. (⌘+C on Mac) No line numbers will be copied.
Guest
UNNAMED ESP | UNIVERSAL DRAWING ESP [UNBANNABLE] script pastebin roblox
By UNNAMED ESP | UNIVERSAL DRAWING ESP [UNBANNABLE] on 2024-11-25 08:00 am | Syntax: LUA | Views: 13



New Script | Raw | Show/Hide line no. | Copy text to clipboard
  1. assert(Drawing, 'exploit not supported')
  2.  
  3. 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
  4.  
  5. local UserInputService  = game:GetService'UserInputService';
  6. local HttpService       = game:GetService'HttpService';
  7. local GUIService        = game:GetService'GuiService';
  8. local TweenService      = game:GetService'TweenService';
  9. local RunService        = game:GetService'RunService';
  10. local Players           = game:GetService'Players';
  11. local LocalPlayer       = Players.LocalPlayer;
  12. local Camera            = workspace.CurrentCamera;
  13. local Mouse             = LocalPlayer:GetMouse();
  14. local V2New             = Vector2.new;
  15. local V3New             = Vector3.new;
  16. local WTVP              = Camera.WorldToViewportPoint;
  17. local WorldToViewport   = function(...) return WTVP(Camera, ...) end;
  18. local Menu              = {};
  19. local MouseHeld         = false;
  20. local LastRefresh       = 0;
  21. local OptionsFile       = 'IC3_ESP_SETTINGS.dat';
  22. local Binding           = false;
  23. local BindedKey         = nil;
  24. local OIndex            = 0;
  25. local LineBox           = {};
  26. local UIButtons         = {};
  27. local Sliders           = {};
  28. local ColorPicker       = { Loading = false; LastGenerated = 0 };
  29. local Dragging          = false;
  30. local DraggingUI        = false;
  31. local Rainbow           = false;
  32. local DragOffset        = V2New();
  33. local DraggingWhat      = nil;
  34. local OldData           = {};
  35. local IgnoreList        = {};
  36. local EnemyColor        = Color3.new(1, 0, 0);
  37. local TeamColor         = Color3.new(0, 1, 0);
  38. local MenuLoaded        = false;
  39. local ErrorLogging      = false;
  40. local TracerPosition    = V2New(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y - 135);
  41. local DragTracerPosition= false;
  42. local SubMenu           = {};
  43. local IsSynapse         = syn and not PROTOSMASHER_LOADED;
  44. local Connections       = { Active = {} };
  45. local Signal            = {}; Signal.__index = Signal;
  46. local GetCharacter;
  47. local CurrentColorPicker;
  48. local Spectating;
  49.  
  50. local Executor = (identifyexecutor or (function() return '' end))()
  51. local SupportedExploits = { 'Synapse X', 'ScriptWare', 'Krnl', 'OxygenU', 'Temple' }
  52. local QUAD_SUPPORTED_EXPLOIT = table.find(SupportedExploits, Executor) ~= nil
  53.  
  54. -- if not PROTOSMASHER_LOADED then Drawing.UseCompatTransparency = true; end -- For Elysian
  55.  
  56. shared.MenuDrawingData  = shared.MenuDrawingData or { Instances = {} };
  57. shared.InstanceData     = shared.InstanceData or {};
  58. shared.RSName           = shared.RSName or ('UnnamedESP_by_ic3-' .. HttpService:GenerateGUID(false));
  59.  
  60. local GetDataName       = shared.RSName .. '-GetData';
  61. local UpdateName        = shared.RSName .. '-Update';
  62.  
  63. local Debounce          = setmetatable({}, {
  64.         __index = function(t, i)
  65.                 return rawget(t, i) or false
  66.         end;
  67. });
  68.  
  69. if shared.UESP_InputChangedCon then shared.UESP_InputChangedCon:Disconnect() end
  70. if shared.UESP_InputBeganCon then shared.UESP_InputBeganCon:Disconnect() end
  71. if shared.UESP_InputEndedCon then shared.UESP_InputEndedCon:Disconnect() end
  72. if shared.CurrentColorPicker then shared.CurrentColorPicker:Dispose() end
  73.  
  74. local RealPrint, LastPrintTick = print, 0;
  75. local LatestPrints = setmetatable({}, { __index = function(t, i) return rawget(t, i) or 0 end });
  76.  
  77. local function print(...)
  78.         local Content = unpack{...};
  79.         local print = RealPrint;
  80.  
  81.         if tick() - LatestPrints[Content] > 5 then
  82.                 LatestPrints[Content] = tick();
  83.                 print(Content);
  84.         end
  85. end
  86.  
  87. local function FromHex(HEX)
  88.         HEX = HEX:gsub('#', '');
  89.        
  90.         return Color3.fromRGB(tonumber('0x' .. HEX:sub(1, 2)), tonumber('0x' .. HEX:sub(3, 4)), tonumber('0x' .. HEX:sub(5, 6)));
  91. end
  92.  
  93. local function IsStringEmpty(String)
  94.         if type(String) == 'string' then
  95.                 return String:match'^%s+$' ~= nil or #String == 0 or String == '' or false;
  96.         end
  97.        
  98.         return false;
  99. end
  100.  
  101. local function Set(t, i, v)
  102.         t[i] = v;
  103. end
  104.  
  105. local Teams = {};
  106. local CustomTeams = { -- Games that don't use roblox's team system
  107.         [2563455047] = {
  108.                 Initialize = function()
  109.                         Teams.Sheriffs = {}; -- prevent big error
  110.                         Teams.Bandits = {}; -- prevent big error
  111.                         local Func = game:GetService'ReplicatedStorage':WaitForChild('RogueFunc', 1);
  112.                         local Event = game:GetService'ReplicatedStorage':WaitForChild('RogueEvent', 1);
  113.                         local S, B = Func:InvokeServer'AllTeamData';
  114.  
  115.                         Teams.Sheriffs = S;
  116.                         Teams.Bandits = B;
  117.  
  118.                         Event.OnClientEvent:Connect(function(id, PlayerName, Team, Remove) -- stolen straight from decompiled src lul
  119.                                 if id == 'UpdateTeam' then
  120.                                         local TeamTable, NotTeamTable
  121.                                         if Team == 'Bandits' then
  122.                                                 TeamTable = TDM.Bandits
  123.                                                 NotTeamTable = TDM.Sheriffs
  124.                                         else
  125.                                                 TeamTable = TDM.Sheriffs
  126.                                                 NotTeamTable = TDM.Bandits
  127.                                         end
  128.                                         if Remove then
  129.                                                 TeamTable[PlayerName] = nil
  130.                                         else
  131.                                                 TeamTable[PlayerName] = true
  132.                                                 NotTeamTable[PlayerName] = nil
  133.                                         end
  134.                                         if PlayerName == LocalPlayer.Name then
  135.                                                 TDM.Friendlys = TeamTable
  136.                                                 TDM.Enemies = NotTeamTable
  137.                                         end
  138.                                 end
  139.                         end)
  140.                 end;
  141.                 CheckTeam = function(Player)
  142.                         local LocalTeam = Teams.Sheriffs[LocalPlayer.Name] and Teams.Sheriffs or Teams.Bandits;
  143.                        
  144.                         return LocalTeam[Player.Name] and true or false;
  145.                 end;
  146.         };
  147.         [5208655184] = {
  148.                 CheckTeam = function(Player)
  149.                         local LocalLastName = LocalPlayer:GetAttribute'LastName' if not LocalLastName or IsStringEmpty(LocalLastName) then return true end
  150.                         local PlayerLastName = Player:GetAttribute'LastName' if not PlayerLastName then return false end
  151.  
  152.                         return PlayerLastName == LocalLastName
  153.                 end
  154.         };
  155.         [3541987450] = {
  156.                 CheckTeam = function(Player)
  157.                         local LocalStats = LocalPlayer:FindFirstChild'leaderstats';
  158.                         local LocalLastName = LocalStats and LocalStats:FindFirstChild'LastName'; if not LocalLastName or IsStringEmpty(LocalLastName.Value) then return true; end
  159.                         local PlayerStats = Player:FindFirstChild'leaderstats';
  160.                         local PlayerLastName = PlayerStats and PlayerStats:FindFirstChild'LastName'; if not PlayerLastName then return false; end
  161.  
  162.                         return PlayerLastName.Value == LocalLastName.Value;
  163.                 end;
  164.         };
  165.     [6032399813] = {
  166.                 CheckTeam = function(Player)
  167.                         local LocalStats = LocalPlayer:FindFirstChild'leaderstats';
  168.                         local LocalGuildName = LocalStats and LocalStats:FindFirstChild'Guild'; if not LocalGuildName or IsStringEmpty(LocalGuildName.Value) then return true; end
  169.                         local PlayerStats = Player:FindFirstChild'leaderstats';
  170.                         local PlayerGuildName = PlayerStats and PlayerStats:FindFirstChild'Guild'; if not PlayerGuildName then return false; end
  171.  
  172.                         return PlayerGuildName.Value == LocalGuildName.Value;
  173.                 end;
  174.         };
  175.     [5735553160] = {
  176.                 CheckTeam = function(Player)
  177.                         local LocalStats = LocalPlayer:FindFirstChild'leaderstats';
  178.                         local LocalGuildName = LocalStats and LocalStats:FindFirstChild'Guild'; if not LocalGuildName or IsStringEmpty(LocalGuildName.Value) then return true; end
  179.                         local PlayerStats = Player:FindFirstChild'leaderstats';
  180.                         local PlayerGuildName = PlayerStats and PlayerStats:FindFirstChild'Guild'; if not PlayerGuildName then return false; end
  181.  
  182.                         return PlayerGuildName.Value == LocalGuildName.Value;
  183.                 end;
  184.         };
  185. };
  186.  
  187. local RenderList = {Instances = {}};
  188.  
  189. function RenderList:AddOrUpdateInstance(Instance, Obj2Draw, Text, Color)
  190.         RenderList.Instances[Instance] = { ParentInstance = Instance; Instance = Obj2Draw; Text = Text; Color = Color };
  191.         return RenderList.Instances[Instance];
  192. end
  193.  
  194. local CustomPlayerTag;
  195. local CustomESP;
  196. local CustomCharacter;
  197. local GetHealth;
  198. local GetAliveState;
  199. local CustomRootPartName;
  200.  
  201. local Modules = {
  202.         [292439477] = {
  203.                 CustomESP = function()
  204.                         if type(shared.PF_Replication) ~= 'table' then
  205.                                 local lastScan = shared.pfReplicationScan
  206.  
  207.                                 if (tick() - (lastScan or 0)) > 0.01 then
  208.                                         shared.pfReplicationScan = tick()
  209.  
  210.                                         local gc = getgc(true)
  211.                                         for i = 1, #gc do
  212.                                                 local gcObject = gc[i];
  213.                                                 if type(gcObject) == 'table' and type(rawget(gcObject, 'getbodyparts')) == 'function' then
  214.                                                         shared.PF_Replication = gcObject;
  215.                                                         break
  216.                                                 end
  217.                                         end
  218.                                 end
  219.  
  220.                                 return
  221.                         end
  222.  
  223.                         for Index, Player in pairs(Players:GetPlayers()) do
  224.                                 if Player == LocalPlayer then continue end
  225.  
  226.                                 local Body = shared.PF_Replication.getbodyparts(Player);
  227.  
  228.                                 if type(Body) == 'table' and typeof(rawget(Body, 'torso')) == 'Instance' then
  229.                                         Player.Character = Body.torso.Parent
  230.                                         continue
  231.                                 end
  232.  
  233.                                 Player.Character = nil;
  234.                         end
  235.                 end,
  236.  
  237.                 GetHealth = function(Player)
  238.                         if type(shared.pfHud) ~= 'table' then
  239.                                 return false
  240.                         end
  241.  
  242.                         return shared.pfHud:getplayerhealth(Player)
  243.                 end,
  244.  
  245.                 GetAliveState = function(Player)
  246.                         if type(shared.pfHud) ~= 'table' then
  247.                                 local lastScan = shared.pfHudScan
  248.  
  249.                                 if (tick() - (lastScan or 0)) > 0.1 then
  250.                                         shared.pfHudScan = tick()
  251.  
  252.                                         local gc = getgc(true)
  253.                                         for i = 1, #gc do
  254.                                                 local gcObject = gc[i];
  255.                                                 if type(gcObject) == 'table' and type(rawget(gcObject, 'getplayerhealth')) == 'function' then
  256.                                                         shared.pfHud = gcObject;
  257.                                                         break
  258.                                                 end
  259.                                         end
  260.                                 end
  261.  
  262.                                 return
  263.                         end
  264.  
  265.                         return shared.pfHud:isplayeralive(Player)
  266.                 end,
  267.  
  268.                 CustomRootPartName = 'Torso',
  269.         };
  270.         [2950983942] = {
  271.                 CustomCharacter = function(Player)
  272.                         if workspace:FindFirstChild'Players' then
  273.                                 return workspace.Players:FindFirstChild(Player.Name);
  274.                         end
  275.                 end
  276.         };
  277.         [2262441883] = {
  278.                 CustomPlayerTag = function(Player)
  279.                         return Player:FindFirstChild'Job' and (' [' .. Player.Job.Value .. ']') or '';
  280.                 end;
  281.                 CustomESP = function()
  282.                         if workspace:FindFirstChild'MoneyPrinters' then
  283.                                 for i, v in pairs(workspace.MoneyPrinters:GetChildren()) do
  284.                                         local Main      = v:FindFirstChild'Main';
  285.                                         local Owner     = v:FindFirstChild'TrueOwner';
  286.                                         local Money     = v:FindFirstChild'Int' and v.Int:FindFirstChild'Money' or nil;
  287.                                         if Main and Owner and Money then
  288.                                                 local O = tostring(Owner.Value);
  289.                                                 local M = tostring(Money.Value);
  290.  
  291.                                                 pcall(RenderList.AddOrUpdateInstance, RenderList, v, Main, string.format('Money Printer\nOwned by %s\n[%s]', O, M), Color3.fromRGB(13, 255, 227));
  292.                                         end
  293.                                 end
  294.                         end
  295.                 end;
  296.         };
  297.         -- [4581966615] = {
  298.         --      CustomESP = function()
  299.         --              if workspace:FindFirstChild'Entities' then
  300.         --                      for i, v in pairs(workspace.Entities:GetChildren()) do
  301.         --                              if not v.Name:match'Printer' then continue end
  302.  
  303.         --                              local Properties = v:FindFirstChild'Properties' if not Properties then continue end
  304.         --                              local Main      = v:FindFirstChild'hitbox';
  305.         --                              local Owner     = Properties:FindFirstChild'Owner';
  306.         --                              local Money     = Properties:FindFirstChild'CurrentPrinted'
  307.                                        
  308.         --                              if Main and Owner and Money then
  309.         --                                      local O = Owner.Value and tostring(Owner.Value) or 'no one';
  310.         --                                      local M = tostring(Money.Value);
  311.  
  312.         --                                      pcall(RenderList.AddOrUpdateInstance, RenderList, v, Main, string.format('Money Printer\nOwned by %s\n[%s]', O, M), Color3.fromRGB(13, 255, 227));
  313.         --                              end
  314.         --                      end
  315.         --              end
  316.         --      end;
  317.         -- };
  318.         [4801598506] = {
  319.                 CustomESP = function()
  320.                         if workspace:FindFirstChild'Mobs' and workspace.Mobs:FindFirstChild'Forest1' then
  321.                                 for i, v in pairs(workspace.Mobs.Forest1:GetChildren()) do
  322.                                         local Main      = v:FindFirstChild'Head';
  323.                                         local Hum       = v:FindFirstChild'Mob';
  324.  
  325.                                         if Main and Hum then
  326.                                                 pcall(RenderList.AddOrUpdateInstance, RenderList, v, Main, string.format('[%s] [%s/%s]', v.Name, Hum.Health, Hum.MaxHealth), Color3.fromRGB(13, 255, 227));
  327.                                         end
  328.                                 end
  329.                         end
  330.                 end;
  331.         };
  332.         [2555873122] = {
  333.                 CustomESP = function()
  334.                         if workspace:FindFirstChild'WoodPlanks' then
  335.                                 for i, v in pairs(workspace:GetChildren()) do
  336.                                         if v.Name == 'WoodPlanks' then
  337.                                                 local Main = v:FindFirstChild'Wood';
  338.  
  339.                                                 if Main then
  340.                                                         pcall(RenderList.AddOrUpdateInstance, RenderList, v, Main, 'Wood Planks', Color3.fromRGB(13, 255, 227));
  341.                                                 end
  342.                                         end
  343.                                 end
  344.                         end
  345.                 end;
  346.         };
  347.         [5208655184] = {
  348.                 CustomESP = function()
  349.                         -- if workspace:FindFirstChild'Live' then
  350.                         --      for i, v in pairs(workspace.Live:GetChildren()) do
  351.                         --              if v.Name:sub(1, 1) == '.' then
  352.                         --                      local Main = v:FindFirstChild'Head';
  353.  
  354.                         --                      if Main then
  355.                         --                              pcall(RenderList.AddOrUpdateInstance, RenderList, v, Main, v.Name:sub(2), Color3.fromRGB(250, 50, 40));
  356.                         --                      end
  357.                         --              end
  358.                         --      end
  359.                         -- end
  360.                 end;
  361.                 CustomPlayerTag = function(Player)
  362.                         if game.PlaceVersion < 457 then return '' end
  363.  
  364.                         local Name = '';
  365.                         local FirstName = Player:GetAttribute'FirstName'
  366.  
  367.                         if typeof(FirstName) == 'string' and #FirstName > 0 then
  368.                                 local Prefix = '';
  369.                                 local Extra = {};
  370.                                 Name = Name .. '\n[';
  371.  
  372.                                 if Player:GetAttribute'Prestige' > 0 then
  373.                                         Name = Name .. '#' .. tostring(Player:GetAttribute'Prestige') .. ' ';
  374.                                 end
  375.                                 if not IsStringEmpty(Player:GetAttribute'HouseRank') then
  376.                                         Prefix = Player:GetAttribute'HouseRank' == 'Owner' and (Player:GetAttribute'Gender' == 'Female' and 'Lady ' or 'Lord ') or '';
  377.                                 end
  378.                                 if not IsStringEmpty(FirstName) then
  379.                                         Name = Name .. '' .. Prefix .. FirstName;
  380.                                 end
  381.                                 if not IsStringEmpty(Player:GetAttribute'LastName') then
  382.                                         Name = Name .. ' ' .. Player:GetAttribute'LastName';
  383.                                 end
  384.  
  385.                                 if not IsStringEmpty(Name) then Name = Name .. ']'; end
  386.  
  387.                                 local Character = GetCharacter(Player);
  388.  
  389.                                 if Character then
  390.                                         if Character and Character:FindFirstChild'Danger' then table.insert(Extra, 'D'); end
  391.                                         if Character:FindFirstChild'ManaAbilities' and Character.ManaAbilities:FindFirstChild'ManaSprint' then table.insert(Extra, 'D1'); end
  392.  
  393.                                         if Character:FindFirstChild'Mana'                       then table.insert(Extra, 'M' .. math.floor(Character.Mana.Value)); end
  394.                                         if Character:FindFirstChild'Vampirism'          then table.insert(Extra, 'V'); end
  395.                                         if Character:FindFirstChild'Observe'            then table.insert(Extra, 'ILL'); end
  396.                                         if Character:FindFirstChild'Inferi'                     then table.insert(Extra, 'NEC'); end
  397.                                         if Character:FindFirstChild'World\'s Pulse' then table.insert(Extra, 'DZIN'); end
  398.                                         if Character:FindFirstChild'Shift'                      then table.insert(Extra, 'MAD'); end
  399.                                         if Character:FindFirstChild'Head' and Character.Head:FindFirstChild'FacialMarking' then
  400.                                                 local FM = Character.Head:FindFirstChild'FacialMarking';
  401.                                                 if FM.Texture == 'http://www.roblox.com/asset/?id=4072968006' then
  402.                                                         table.insert(Extra, 'HEALER');
  403.                                                 elseif FM.Texture == 'http://www.roblox.com/asset/?id=4072914434' then
  404.                                                         table.insert(Extra, 'SEER');
  405.                                                 elseif FM.Texture == 'http://www.roblox.com/asset/?id=4094417635' then
  406.                                                         table.insert(Extra, 'JESTER');
  407.                                                 elseif FM.Texture == 'http://www.roblox.com/asset/?id=4072968656' then
  408.                                                         table.insert(Extra, 'BLADE');
  409.                                                 end
  410.                                         end
  411.                                 end
  412.                                 if Player:FindFirstChild'Backpack' then
  413.                                         if Player.Backpack:FindFirstChild'Observe'                      then table.insert(Extra, 'ILL');  end
  414.                                         if Player.Backpack:FindFirstChild'Inferi'                       then table.insert(Extra, 'NEC');  end
  415.                                         if Player.Backpack:FindFirstChild'World\'s Pulse'       then table.insert(Extra, 'DZIN'); end
  416.                                         if Player.Backpack:FindFirstChild'Shift'                        then table.insert(Extra, 'MAD'); end
  417.                                 end
  418.  
  419.                                 if #Extra > 0 then Name = Name .. ' [' .. table.concat(Extra, '-') .. ']'; end
  420.                         end
  421.  
  422.                         return Name;
  423.                 end;
  424.         };
  425.         [3541987450] = {
  426.                 CustomPlayerTag = function(Player)
  427.                         local Name = '';
  428.  
  429.                         if Player:FindFirstChild'leaderstats' then
  430.                                 Name = Name .. '\n[';
  431.                                 local Prefix = '';
  432.                                 local Extra = {};
  433.                                 if Player.leaderstats:FindFirstChild'Prestige' and Player.leaderstats.Prestige.ClassName == 'IntValue' and Player.leaderstats.Prestige.Value > 0 then
  434.                                         Name = Name .. '#' .. tostring(Player.leaderstats.Prestige.Value) .. ' ';
  435.                                 end
  436.                                 if Player.leaderstats:FindFirstChild'HouseRank' and Player.leaderstats:FindFirstChild'Gender' and Player.leaderstats.HouseRank.ClassName == 'StringValue' and not IsStringEmpty(Player.leaderstats.HouseRank.Value) then
  437.                                         Prefix = Player.leaderstats.HouseRank.Value == 'Owner' and (Player.leaderstats.Gender.Value == 'Female' and 'Lady ' or 'Lord ') or '';
  438.                                 end
  439.                                 if Player.leaderstats:FindFirstChild'FirstName' and Player.leaderstats.FirstName.ClassName == 'StringValue' and not IsStringEmpty(Player.leaderstats.FirstName.Value) then
  440.                                         Name = Name .. '' .. Prefix .. Player.leaderstats.FirstName.Value;
  441.                                 end
  442.                                 if Player.leaderstats:FindFirstChild'LastName' and Player.leaderstats.LastName.ClassName == 'StringValue' and not IsStringEmpty(Player.leaderstats.LastName.Value) then
  443.                                         Name = Name .. ' ' .. Player.leaderstats.LastName.Value;
  444.                                 end
  445.                                 if Player.leaderstats:FindFirstChild'UberTitle' and Player.leaderstats.UberTitle.ClassName == 'StringValue' and not IsStringEmpty(Player.leaderstats.UberTitle.Value) then
  446.                                         Name = Name .. ', ' .. Player.leaderstats.UberTitle.Value;
  447.                                 end
  448.  
  449.                                 if not IsStringEmpty(Name) then Name = Name .. ']'; end
  450.  
  451.                                 local Character = GetCharacter(Player);
  452.  
  453.                                 if Character then
  454.                                         if Character and Character:FindFirstChild'Danger' then table.insert(Extra, 'D'); end
  455.                                         if Character:FindFirstChild'ManaAbilities' and Character.ManaAbilities:FindFirstChild'ManaSprint' then table.insert(Extra, 'D1'); end
  456.  
  457.                                         if Character:FindFirstChild'Mana'                       then table.insert(Extra, 'M' .. math.floor(Character.Mana.Value)); end
  458.                                         if Character:FindFirstChild'Vampirism'          then table.insert(Extra, 'V');    end
  459.                                         if Character:FindFirstChild'Observe'                    then table.insert(Extra, 'ILL');  end
  460.                                         if Character:FindFirstChild'Inferi'                     then table.insert(Extra, 'NEC');  end
  461.                                        
  462.                                         if Character:FindFirstChild'World\'s Pulse'     then table.insert(Extra, 'DZIN'); end
  463.                                         if Character:FindFirstChild'Head' and Character.Head:FindFirstChild'FacialMarking' then
  464.                                                 local FM = Character.Head:FindFirstChild'FacialMarking';
  465.                                                 if FM.Texture == 'http://www.roblox.com/asset/?id=4072968006' then
  466.                                                         table.insert(Extra, 'HEALER');
  467.                                                 elseif FM.Texture == 'http://www.roblox.com/asset/?id=4072914434' then
  468.                                                         table.insert(Extra, 'SEER');
  469.                                                 elseif FM.Texture == 'http://www.roblox.com/asset/?id=4094417635' then
  470.                                                         table.insert(Extra, 'JESTER');
  471.                                                 end
  472.                                         end
  473.                                 end
  474.                                 if Player:FindFirstChild'Backpack' then
  475.                                         if Player.Backpack:FindFirstChild'Observe'                      then table.insert(Extra, 'ILL');  end
  476.                                         if Player.Backpack:FindFirstChild'Inferi'                       then table.insert(Extra, 'NEC');  end
  477.                                         if Player.Backpack:FindFirstChild'World\'s Pulse'       then table.insert(Extra, 'DZIN'); end
  478.                                 end
  479.  
  480.                                 if #Extra > 0 then Name = Name .. ' [' .. table.concat(Extra, '-') .. ']'; end
  481.                         end
  482.  
  483.                         return Name;
  484.                 end;
  485.         };
  486.  
  487.         [4691401390] = { -- Vast Realm
  488.                 CustomCharacter = function(Player)
  489.                         if workspace:FindFirstChild'Players' then
  490.                                 return workspace.Players:FindFirstChild(Player.Name);
  491.                         end
  492.                 end
  493.         };
  494.  
  495.     [6032399813] = { -- Deepwoken [Etrean]
  496.                 CustomPlayerTag = function(Player)
  497.                         local Name = '';
  498.             CharacterName = Player:GetAttribute'CharacterName'; -- could use leaderstats but lazy
  499.  
  500.             if not IsStringEmpty(CharacterName) then
  501.                 Name = ('\n[%s]'):format(CharacterName);
  502.                 local Character = GetCharacter(Player);
  503.                 local Extra = {};
  504.  
  505.                 if Character then
  506.                     local Blood, Armor = Character:FindFirstChild('Blood'), Character:FindFirstChild('Armor');
  507.  
  508.                     if Blood and Blood.ClassName == 'DoubleConstrainedValue' then
  509.                         table.insert(Extra, ('B%d'):format(Blood.Value));
  510.                     end
  511.  
  512.                     if Armor and Armor.ClassName == 'DoubleConstrainedValue' then
  513.                         table.insert(Extra, ('A%d'):format(math.floor(Armor.Value / 10)));
  514.                     end
  515.                 end
  516.  
  517.                 local BackpackChildren = Player.Backpack:GetChildren()
  518.  
  519.                 for index = 1, #BackpackChildren do
  520.                     local Oath = BackpackChildren[index]
  521.                     if Oath.ClassName == 'Folder' and Oath.Name:find('Talent:Oath') then
  522.                         local OathName = Oath.Name:gsub('Talent:Oath: ', '')
  523.                         table.insert(Extra, OathName);
  524.                     end
  525.                 end
  526.  
  527.                 if #Extra > 0 then Name = Name .. ' [' .. table.concat(Extra, '-') .. ']'; end
  528.             end
  529.  
  530.                         return Name;
  531.                 end;
  532.         };
  533.  
  534.     [5735553160] = { -- Deepwoken [Depths]
  535.     CustomPlayerTag = function(Player)
  536.         local Name = '';
  537.         CharacterName = Player:GetAttribute'CharacterName'; -- could use leaderstats but lazy
  538.  
  539.         if not IsStringEmpty(CharacterName) then
  540.             Name = ('\n[%s]'):format(CharacterName);
  541.             local Character = GetCharacter(Player);
  542.             local Extra = {};
  543.  
  544.             if Character then
  545.                 local Blood, Armor = Character:FindFirstChild('Blood'), Character:FindFirstChild('Armor');
  546.  
  547.                 if Blood and Blood.ClassName == 'DoubleConstrainedValue' then
  548.                     table.insert(Extra, ('B%d'):format(Blood.Value));
  549.                 end
  550.  
  551.                 if Armor and Armor.ClassName == 'DoubleConstrainedValue' then
  552.                     table.insert(Extra, ('A%d'):format(math.floor(Armor.Value / 10)));
  553.                 end
  554.             end
  555.  
  556.             local BackpackChildren = Player.Backpack:GetChildren()
  557.  
  558.             for index = 1, #BackpackChildren do
  559.                 local Oath = BackpackChildren[index]
  560.                 if Oath.ClassName == 'Folder' and Oath.Name:find('Talent:Oath') then
  561.                     local OathName = Oath.Name:gsub('Talent:Oath: ', '')
  562.                     table.insert(Extra, OathName);
  563.                 end
  564.             end
  565.  
  566.             if #Extra > 0 then Name = Name .. ' [' .. table.concat(Extra, '-') .. ']'; end
  567.         end
  568.  
  569.         return Name;
  570.     end;
  571. };
  572. };
  573.  
  574. if Modules[game.PlaceId] ~= nil then
  575.         local Module = Modules[game.PlaceId];
  576.         CustomPlayerTag = Module.CustomPlayerTag or nil;
  577.         CustomESP = Module.CustomESP or nil;
  578.         CustomCharacter = Module.CustomCharacter or nil;
  579.         GetHealth = Module.GetHealth or nil;
  580.         GetAliveState = Module.GetAliveState or nil;
  581.         CustomRootPartName = Module.CustomRootPartName or nil;
  582. end
  583.  
  584. function GetCharacter(Player)
  585.         return Player.Character or (CustomCharacter and CustomCharacter(Player));
  586. end
  587.  
  588. function GetMouseLocation()
  589.         return UserInputService:GetMouseLocation();
  590. end
  591.  
  592. function MouseHoveringOver(Values)
  593.         local X1, Y1, X2, Y2 = Values[1], Values[2], Values[3], Values[4]
  594.         local MLocation = GetMouseLocation();
  595.         return (MLocation.x >= X1 and MLocation.x = Y1 and MLocation.y  yMax then
  596.                                         yMax = Position.Y;
  597.                                 end
  598.                                 if Position.Y < yMin then
  599.                                         yMin = Position.Y;
  600.                                 end
  601.                         end
  602.  
  603.                         local xSize, ySize = xMax - xMin, yMax - yMin;
  604.  
  605.                         local Outline = Box['OutlineSquare'];
  606.                         local Square = Box['Square'];
  607.                         Outline.Visible = Vs;
  608.                         Square.Visible = Vs;
  609.                         Square.Position = V2New(xMin, yMin);
  610.                         Square.Color    = Color;
  611.                         Square.Thickness = math.floor(Outline.Thickness * 0.3);
  612.                         -- Square.Position = V2New(xMin, yMin);
  613.                         Square.Size = V2New(xSize, ySize);
  614.                         Outline.Position = Square.Position;
  615.                         Outline.Size = Square.Size;
  616.                         Outline.Color = Color3.new(0.12, 0.12, 0.12);
  617.                         Outline.Transparency = 0.75;
  618.  
  619.                         return
  620.                 end
  621.                
  622.                 local TLPos, Visible1   = WorldToViewport((CF * CFrame.new( Size.X,  Size.Y, 0)).Position);
  623.                 local TRPos, Visible2   = WorldToViewport((CF * CFrame.new(-Size.X,  Size.Y, 0)).Position);
  624.                 local BLPos, Visible3   = WorldToViewport((CF * CFrame.new( Size.X, -Size.Y, 0)).Position);
  625.                 local BRPos, Visible4   = WorldToViewport((CF * CFrame.new(-Size.X, -Size.Y, 0)).Position);
  626.  
  627.                 local Quad = Box['Quad'];
  628.  
  629.                 if QUAD_SUPPORTED_EXPLOIT then
  630.                         if Visible1 and Visible2 and Visible3 and Visible4 then
  631.                                 Quad.Visible = true;
  632.                                 Quad.Color      = Color;
  633.                                 Quad.PointA = V2New(TLPos.X, TLPos.Y);
  634.                                 Quad.PointB = V2New(TRPos.X, TRPos.Y);
  635.                                 Quad.PointC = V2New(BRPos.X, BRPos.Y);
  636.                                 Quad.PointD = V2New(BLPos.X, BLPos.Y);
  637.                         else
  638.                                 Box['Quad'].Visible = false;
  639.                         end
  640.                 else
  641.                         Visible1 = TLPos.Z > 0 -- (commented | reason: random flashes);
  642.                         Visible2 = TRPos.Z > 0 -- (commented | reason: random flashes);
  643.                         Visible3 = BLPos.Z > 0 -- (commented | reason: random flashes);
  644.                         Visible4 = BRPos.Z > 0 -- (commented | reason: random flashes);
  645.  
  646.                         -- ## BEGIN UGLY CODE
  647.                         if Visible1 then
  648.                                 Box['TopLeft'].Visible          = true;
  649.                                 Box['TopLeft'].Color            = Color;
  650.                                 Box['TopLeft'].From                     = V2New(TLPos.X, TLPos.Y);
  651.                                 Box['TopLeft'].To                       = V2New(TRPos.X, TRPos.Y);
  652.                         else
  653.                                 Box['TopLeft'].Visible          = false;
  654.                         end
  655.                         if Visible2 then
  656.                                 Box['TopRight'].Visible         = true;
  657.                                 Box['TopRight'].Color           = Color;
  658.                                 Box['TopRight'].From            = V2New(TRPos.X, TRPos.Y);
  659.                                 Box['TopRight'].To                      = V2New(BRPos.X, BRPos.Y);
  660.                         else
  661.                                 Box['TopRight'].Visible         = false;
  662.                         end
  663.                         if Visible3 then
  664.                                 Box['BottomLeft'].Visible       = true;
  665.                                 Box['BottomLeft'].Color         = Color;
  666.                                 Box['BottomLeft'].From          = V2New(BLPos.X, BLPos.Y);
  667.                                 Box['BottomLeft'].To            = V2New(TLPos.X, TLPos.Y);
  668.                         else
  669.                                 Box['BottomLeft'].Visible       = false;
  670.                         end
  671.                         if Visible4 then
  672.                                 Box['BottomRight'].Visible      = true;
  673.                                 Box['BottomRight'].Color        = Color;
  674.                                 Box['BottomRight'].From         = V2New(BRPos.X, BRPos.Y);
  675.                                 Box['BottomRight'].To           = V2New(BLPos.X, BLPos.Y);
  676.                         else
  677.                                 Box['BottomRight'].Visible      = false;
  678.                         end
  679.                         -- ## END UGLY CODE
  680.                         if Properties and typeof(Properties) == 'table' then
  681.                                 GetTableData(Properties)(function(i, v)
  682.                                         pcall(Set, Box['TopLeft'],              i, v);
  683.                                         pcall(Set, Box['TopRight'],             i, v);
  684.                                         pcall(Set, Box['BottomLeft'],   i, v);
  685.                                         pcall(Set, Box['BottomRight'],  i, v);
  686.                                 end)
  687.                         end
  688.                 end
  689.         end
  690.         function Box:SetVisible(bool)
  691.                 if shared.am_ic3 then
  692.                         Box['Square'].Visible = bool;
  693.                         Box['OutlineSquare'].Visible = bool;
  694.                 else
  695.                         pcall(Set, Box['Quad'],                         'Visible', bool);
  696.                 end
  697.                 -- pcall(Set, Box['TopLeft'],           'Visible', bool);
  698.                 -- pcall(Set, Box['TopRight'],          'Visible', bool);
  699.                 -- pcall(Set, Box['BottomLeft'],        'Visible', bool);
  700.                 -- pcall(Set, Box['BottomRight'],       'Visible', bool);
  701.         end
  702.         function Box:Remove()
  703.                 self:SetVisible(false);
  704.                 if shared.am_ic3 then
  705.                         Box['Square']:Remove();
  706.                         Box['OutlineSquare']:Remove();
  707.                 else
  708.                         Box['Quad']:Remove();
  709.                 end
  710.                 -- Box['TopLeft']:Remove();
  711.                 -- Box['TopRight']:Remove();
  712.                 -- Box['BottomLeft']:Remove();
  713.                 -- Box['BottomRight']:Remove();
  714.         end
  715.  
  716.         return Box;
  717. end
  718.  
  719. local Colors = {
  720.         White = FromHex'ffffff';
  721.         Primary = {
  722.                 Main    = FromHex'424242';
  723.                 Light   = FromHex'6d6d6d';
  724.                 Dark    = FromHex'1b1b1b';
  725.         };
  726.         Secondary = {
  727.                 Main    = FromHex'e0e0e0';
  728.                 Light   = FromHex'ffffff';
  729.                 Dark    = FromHex'aeaeae';
  730.         };
  731. };
  732.  
  733. function Connections:Listen(Connection, Function)
  734.     local NewConnection = Connection:Connect(Function);
  735.     table.insert(self.Active, NewConnection);
  736.     return NewConnection;
  737. end
  738.  
  739. function Connections:DisconnectAll()
  740.     for Index, Connection in pairs(self.Active) do
  741.         if Connection.Connected then
  742.             Connection:Disconnect();
  743.         end
  744.     end
  745.    
  746.     self.Active = {};
  747. end
  748.  
  749. function Signal.new()
  750.         local self = setmetatable({ _BindableEvent = Instance.new'BindableEvent' }, Signal);
  751.    
  752.         return self;
  753. end
  754.  
  755. function Signal:Connect(Callback)
  756.     assert(typeof(Callback) == 'function', 'function expected; got ' .. typeof(Callback));
  757.  
  758.         return self._BindableEvent.Event:Connect(function(...) Callback(...) end);
  759. end
  760.  
  761. function Signal:Fire(...)
  762.     self._BindableEvent:Fire(...);
  763. end
  764.  
  765. function Signal:Wait()
  766.     local Arguments = self._BindableEvent:Wait();
  767.  
  768.     return Arguments;
  769. end
  770.  
  771. function Signal:Disconnect()
  772.     if self._BindableEvent then
  773.         self._BindableEvent:Destroy();
  774.     end
  775. end
  776.  
  777. local function GetMouseLocation()
  778.         return UserInputService:GetMouseLocation();
  779. end
  780.  
  781. local function IsMouseOverDrawing(Drawing, MousePosition)
  782.         local TopLeft = Drawing.Position;
  783.         local BottomRight = Drawing.Position + Drawing.Size;
  784.     local MousePosition = MousePosition or GetMouseLocation();
  785.    
  786.     return MousePosition.X > TopLeft.X and MousePosition.Y > TopLeft.Y and MousePosition.X < BottomRight.X and MousePosition.Y < BottomRight.Y;
  787. end
  788.  
  789. local ImageCache = {};
  790.  
  791. local function SetImage(Drawing, Url)
  792.         local Data = IsSynapse and game:HttpGet(Url) or Url;
  793.  
  794.         print(Drawing, IsSynapse)
  795.  
  796.         Drawing[IsSynapse and 'Data' or 'Uri'] = ImageCache[Url] or Data;
  797.         ImageCache[Url] = Data;
  798.    
  799.     if not IsSynapse then repeat wait() until Drawing.Loaded; end
  800. end
  801.  
  802. -- oh god unnamed esp needs an entire rewrite, someone make a better one pls im too lazy
  803. -- btw the color picker was made seperately so it doesnt fit with the code of unnamed esp
  804.  
  805. local function CreateDrawingsTable()
  806.     local Drawings = { __Objects = {} };
  807.     local Metatable = {};
  808.  
  809.     function Metatable.__index(self, Index)
  810.         local Object = rawget(self.__Objects, Index);
  811.        
  812.         if not Object or (IsSynapse and not Object.__SELF.__OBJECT_EXISTS) then
  813.             local Type = Index:sub(1, Index:find'-' - 1);
  814.  
  815.             Success, Object = pcall(Drawing.new, Type);
  816.  
  817.             if not Object or not Success then return function() end; end
  818.  
  819.             self.__Objects[Index] = setmetatable({ __SELF = Object; Type = Type }, {
  820.                 __call = function(self, Properties)
  821.                     local Object = rawget(self, '__SELF'); if IsSynapse and not Object.__OBJECT_EXISTS then return false, 'render object destroyed'; end
  822.  
  823.                     if Properties == false then
  824.                         Object.Visible = false;
  825.                         Object.Transparency = 0;
  826.                         Object:Remove();
  827.                        
  828.                         return true;
  829.                     end
  830.                    
  831.                     if typeof(Properties) == 'table' then
  832.                         for Property, Value in pairs(Properties) do
  833.                             local CanSet = true;
  834.  
  835.                             if self.Type == 'Image' and not IsSynapse and Property == 'Size' and typeof(Value) == 'Vector2' then
  836.                                 CanSet = false;
  837.  
  838.                                 spawn(function()
  839.                                     repeat wait() until Object.Loaded;
  840.                                     if not self.DefaultSize then rawset(self, 'DefaultSize', Object.Size) end
  841.  
  842.                                     Property = 'ScaleFactor';
  843.                                     Value = Value.X / self.DefaultSize.X;
  844.  
  845.                                     Object[Property] = Value
  846.                                 end)
  847.                             end
  848.                            
  849.                             if CanSet then Object[Property] = Value end
  850.                         end
  851.                     end
  852.  
  853.                     return Object;
  854.                 end
  855.             });
  856.  
  857.             Object.Visible = true;
  858.             Object.Transparency = 1; -- Transparency is really Opacity with drawing api (1 being visible, 0 being invisible)
  859.            
  860.             if Type == 'Text' then
  861.                 if Drawing.Fonts then Object.Font = Drawing.Fonts.Monospace end
  862.                 Object.Size = 20;
  863.                 Object.Color = Color3.new(1, 1, 1);
  864.                 Object.Center = true;
  865.                                 Object.Outline = true;
  866.                                 OutlineOpacity = 0.5;
  867.             elseif Type == 'Square' or Type == 'Rectangle' then
  868.                 Object.Thickness = 2;
  869.                 Object.Filled = false;
  870.             end
  871.  
  872.             return self.__Objects[Index];
  873.         end
  874.  
  875.         return Object;
  876.     end
  877.  
  878.     function Metatable.__call(self, Delete, ...)
  879.         local Arguments = {Delete, ...};
  880.        
  881.         if Delete == false then
  882.             for Index, Drawing in pairs(rawget(self, '__Objects')) do
  883.                 Drawing(false);
  884.             end
  885.         end
  886.     end
  887.  
  888.     return setmetatable(Drawings, Metatable);
  889. end
  890.  
  891. local Images = {};
  892.  
  893. spawn(function()
  894.         Images.Ring = 'https://i.imgur.com/q4qx26f.png';
  895.         Images.Overlay = 'https://i.imgur.com/gOCxbsR.png';
  896. end)
  897.  
  898. function ColorPicker.new(Position, Size, Color)
  899.         ColorPicker.LastGenerated = tick();
  900.         ColorPicker.Loading = true;
  901.  
  902.     local Picker = { Color = Color or Color3.new(1, 1, 1); HSV = { H = 0, S = 1, V = 1 } };
  903.     local Drawings = CreateDrawingsTable();
  904.     local Position = Position or V2New();
  905.     local Size = Size or 150;
  906.     local Padding = { 10, 10, 10, 10 };
  907.    
  908.     Picker.ColorChanged = Signal.new();
  909.  
  910.     local Background = Drawings['Square-Background'] {
  911.         Color = Color3.fromRGB(33, 33, 33);
  912.                 Filled = false;
  913.                 Visible = false;
  914.         Position = Position - V2New(Padding[4], Padding[1]);
  915.         Size = V2New(Size, Size) + V2New(Padding[4] + Padding[2], Padding[1] + Padding[3]);
  916.     };
  917.     local ColorPreview = Drawings['Circle-Preview'] {
  918.         Position = Position + (V2New(Size, Size) / 2);
  919.         Radius = Size / 2 - 8;
  920.         Filled = true;
  921.         Thickness = 0;
  922.         NumSides = 20;
  923.         Color = Color3.new(1, 0, 0);
  924.     };
  925.     local Main = Drawings['Image-Main'] {
  926.         Position = Position;
  927.         Size = V2New(Size, Size);
  928.     }; SetImage(Main, Images.Ring);
  929.     local Preview = Drawings['Square-Preview'] {
  930.         Position = Main.Position + (Main.Size / 4.5);
  931.         Size = Main.Size / 1.75;
  932.         Color = Color3.new(1, 0, 0);
  933.         Filled = true;
  934.         Thickness = 0;
  935.     };
  936.     local Overlay = Drawings['Image-Overlay'] {
  937.         Position = Preview.Position;
  938.         Size = Preview.Size;
  939.         Transparency = 1;
  940.     }; SetImage(Overlay, Images.Overlay);
  941.     local CursorOutline = Drawings['Circle-CursorOutline'] {
  942.         Radius = 4;
  943.         Thickness = 2;
  944.         Filled = false;
  945.         Color = Color3.new(0.2, 0.2, 0.2);
  946.         Position = V2New(Main.Position.X + Main.Size.X - 10, Main.Position.Y + (Main.Size.Y / 2));
  947.     };
  948.     local Cursor = Drawings['Circle-Cursor'] {
  949.         Radius = 3;
  950.         Transparency = 1;
  951.         Filled = true;
  952.         Color = Color3.new(1, 1, 1);
  953.         Position = CursorOutline.Position;
  954.     };
  955.     local CursorOutline = Drawings['Circle-CursorOutlineSquare'] {
  956.         Radius = 4;
  957.         Thickness = 2;
  958.         Filled = false;
  959.         Color = Color3.new(0.2, 0.2, 0.2);
  960.         Position = V2New(Preview.Position.X + Preview.Size.X - 2, Preview.Position.Y + 2);
  961.     };
  962.     Drawings['Circle-CursorSquare'] {
  963.         Radius = 3;
  964.         Transparency = 1;
  965.         Filled = true;
  966.         Color = Color3.new(1, 1, 1);
  967.         Position = CursorOutline.Position;
  968.     };
  969.    
  970.     function Picker:UpdatePosition(Input)
  971.         local MousePosition = V2New(Input.Position.X, Input.Position.Y + 33);
  972.  
  973.         if self.MouseHeld then
  974.             if self.Item == 'Ring' then
  975.                 local Main = self.Drawings['Image-Main'] ();
  976.                 local Preview = self.Drawings['Square-Preview'] ();
  977.                 local Bounds = Main.Size / 2;
  978.                 local Center = Main.Position + Bounds;
  979.                 local Relative = MousePosition - Center;
  980.                 local Direction = Relative.unit;
  981.                 local Position = Center + Direction * Main.Size.X / 2.15;
  982.                 local H = (math.atan2(Position.Y - Center.Y, Position.X - Center.X)) * 60;
  983.                 if H < 0 then H = 360 + H; end
  984.                 H = H / 360;
  985.                 self.HSV.H = H;
  986.                 local EndColor = Color3.fromHSV(H, self.HSV.S, self.HSV.V); if EndColor ~= self.Color then self.ColorChanged:Fire(self.Color); end
  987.                 local Pointer = self.Drawings['Circle-Cursor'] { Position = Position };
  988.                 self.Drawings['Circle-CursorOutline'] { Position = Pointer.Position };
  989.                 Bounds = Bounds * 2;
  990.                 Preview.Color = Color3.fromHSV(H, 1, 1);
  991.                 self.Color = EndColor;
  992.                 self.Drawings['Circle-Preview'] { Color = EndColor };
  993.             elseif self.Item == 'HL' then
  994.                 local Preview = self.Drawings['Square-Preview'] ();
  995.                 local HSV = self.HSV;
  996.                 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));
  997.                 HSV.S = (Position.X - Preview.Position.X) / Preview.Size.X;
  998.                 HSV.V = 1 - (Position.Y - Preview.Position.Y) / Preview.Size.Y;
  999.                 local EndColor = Color3.fromHSV(HSV.H, HSV.S, HSV.V); if EndColor ~= self.Color then self.ColorChanged:Fire(self.Color); end
  1000.                 self.Color = EndColor;
  1001.                 self.Drawings['Circle-Preview'] { Color = EndColor };
  1002.                 local Pointer = self.Drawings['Circle-CursorSquare'] { Position = Position };
  1003.                 self.Drawings['Circle-CursorOutlineSquare'] { Position = Pointer.Position };
  1004.             end
  1005.         end
  1006.     end
  1007.  
  1008.     function Picker:HandleInput(Input, P, Type)
  1009.         if Type == 'Began' then
  1010.             if Input.UserInputType.Name == 'MouseButton1' then
  1011.                 local Main = self.Drawings['Image-Main'] ();
  1012.                 local SquareSV = self.Drawings['Square-Preview'] ();
  1013.                 local MousePosition = V2New(Input.Position.X, Input.Position.Y + 33);
  1014.                 self.MouseHeld = true;
  1015.                 local Bounds = Main.Size / 2;
  1016.                 local Center = Main.Position + Bounds;
  1017.                 local R = (MousePosition - Center);
  1018.        
  1019.                 if R.Magnitude < Bounds.X and R.Magnitude > Bounds.X - 20 then
  1020.                     self.Item = 'Ring';
  1021.                 end
  1022.                
  1023.                 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
  1024.                     self.Item = 'HL';
  1025.                 end
  1026.  
  1027.                 self:UpdatePosition(Input, P);
  1028.             end
  1029.         elseif Type == 'Changed' then
  1030.             if Input.UserInputType.Name == 'MouseMovement' then
  1031.                 self:UpdatePosition(Input, P);
  1032.             end
  1033.         elseif Type == 'Ended' and Input.UserInputType.Name == 'MouseButton1' then
  1034.             self.Item = nil;
  1035.         end
  1036.         end
  1037.        
  1038.         function Picker:Dispose()
  1039.                 self.Drawings(false);
  1040.                 self.UpdatePosition = nil;
  1041.                 self.HandleInput = nil;
  1042.                 Connections:DisconnectAll(); -- scuffed tbh
  1043.         end
  1044.  
  1045.         Connections:Listen(UserInputService.InputBegan, function(Input, Process)
  1046.                 Picker:HandleInput(Input, Process, 'Began');
  1047.         end);
  1048.         Connections:Listen(UserInputService.InputChanged, function(Input, Process)
  1049.                 if Input.UserInputType.Name == 'MouseMovement' then
  1050.                         local MousePosition = V2New(Input.Position.X, Input.Position.Y + 33);
  1051.                         local Cursor = Picker.Drawings['Triangle-Cursor'] {
  1052.                                 Filled = true;
  1053.                                 Color = Color3.new(0.9, 0.9, 0.9);
  1054.                                 PointA = MousePosition + V2New(0, 0);
  1055.                                 PointB = MousePosition + V2New(12, 14);
  1056.                                 PointC = MousePosition + V2New(0, 18);
  1057.                                 Thickness = 0;
  1058.                         };
  1059.                 end
  1060.                 Picker:HandleInput(Input, Process, 'Changed');
  1061.         end);
  1062.         Connections:Listen(UserInputService.InputEnded, function(Input, Process)
  1063.                 Picker:HandleInput(Input, Process, 'Ended');
  1064.                
  1065.                 if Input.UserInputType.Name == 'MouseButton1' then
  1066.                         Picker.MouseHeld = false;
  1067.                 end
  1068.         end);
  1069.  
  1070.         ColorPicker.Loading = false;
  1071.  
  1072.     Picker.Drawings = Drawings;
  1073.     return Picker;
  1074. end
  1075.  
  1076. function SubMenu:Show(Position, Title, Options)
  1077.         self.Open = true;
  1078.  
  1079.         local Visible = true;
  1080.         local BasePosition = Position;
  1081.         local BaseSize = V2New(200, 140);
  1082.         local End = BasePosition + BaseSize;
  1083.  
  1084.         self.Bounds = { BasePosition.X, BasePosition.Y, End.X, End.Y };
  1085.  
  1086.         delay(0.025, function()
  1087.                 if not self.Open then return; end
  1088.  
  1089.                 Menu:AddMenuInstance('Sub-Main', 'Square', {
  1090.                         Size            = BaseSize;
  1091.                         Position        = BasePosition;
  1092.                         Filled          = false;
  1093.                         Color           = Colors.Primary.Main;
  1094.                         Thickness       = 3;
  1095.                         Visible         = Visible;
  1096.                 });
  1097.         end);
  1098.         Menu:AddMenuInstance('Sub-TopBar', 'Square', {
  1099.                 Position        = BasePosition;
  1100.                 Size            = V2New(BaseSize.X, 10);
  1101.                 Color           = Colors.Primary.Dark;
  1102.                 Filled          = true;
  1103.                 Visible         = Visible;
  1104.         });
  1105.         Menu:AddMenuInstance('Sub-TopBarTwo', 'Square', {
  1106.                 Position        = BasePosition + V2New(0, 10);
  1107.                 Size            = V2New(BaseSize.X, 20);
  1108.                 Color           = Colors.Primary.Main;
  1109.                 Filled          = true;
  1110.                 Visible         = Visible;
  1111.         });
  1112.         Menu:AddMenuInstance('Sub-TopBarText', 'Text', {
  1113.                 Size            = 20;
  1114.                 Position        = shared.MenuDrawingData.Instances['Sub-TopBarTwo'].Position + V2New(15, -3);
  1115.                 Text            = Title or '';
  1116.                 Color           = Colors.Secondary.Light;
  1117.                 Visible         = Visible;
  1118.         });
  1119.         Menu:AddMenuInstance('Sub-Filling', 'Square', {
  1120.                 Size            = BaseSize - V2New(0, 30);
  1121.                 Position        = BasePosition + V2New(0, 30);
  1122.                 Filled          = true;
  1123.                 Color           = Colors.Secondary.Main;
  1124.                 Transparency= .75;
  1125.                 Visible         = Visible;
  1126.         });
  1127.  
  1128.         if Options then
  1129.                 for Index, Option in pairs(Options) do -- currently only supports color and button(but color is a button so), planning on fully rewriting or something
  1130.                         local function GetName(Name) return ('Sub-%s.%d'):format(Name, Index) end
  1131.                         local Position = shared.MenuDrawingData.Instances['Sub-Filling'].Position + V2New(20, Index * 25 - 10);
  1132.                         -- local BasePosition   = shared.MenuDrawingData.Instances.Filling.Position + V2New(30, v.Index * 25 - 10);
  1133.  
  1134.                         if Option.Type == 'Color' then
  1135.                                 local ColorPreview = Menu:AddMenuInstance(GetName'ColorPreview', 'Circle', {
  1136.                                         Position = Position;
  1137.                                         Color = Option.Color;
  1138.                                         Radius = IsSynapse and 10 or 10;
  1139.                                         NumSides = 10;
  1140.                                         Filled = true;
  1141.                                         Visible = true;
  1142.                                 });
  1143.                                 local Text = Menu:AddMenuInstance(GetName'Text', 'Text', {
  1144.                                         Text = Option.Text;
  1145.                                         Position = ColorPreview.Position + V2New(15, -8);
  1146.                                         Size = 16;
  1147.                                         Color = Colors.Primary.Dark;
  1148.                                         Visible = true;
  1149.                                 });
  1150.                                 UIButtons[#UIButtons + 1] = {
  1151.                                         FromSubMenu = true;
  1152.                                         Option = function() return Option.Function(ColorPreview, BasePosition + V2New(BaseSize.X, 0)) end;
  1153.                                         Instance = Menu:AddMenuInstance(Format('%s_Hitbox', GetName'Button'), 'Square', {
  1154.                                                 Position        = Position - V2New(20, 12);
  1155.                                                 Size            = V2New(BaseSize.X, 25);
  1156.                                                 Visible         = false;
  1157.                                         });
  1158.                                 };
  1159.                         elseif Option.Type == 'Button' then
  1160.                                 UIButtons[#UIButtons + 1] = {
  1161.                                         FromSubMenu = true;
  1162.                                         Option = Option.Function;
  1163.                                         Instance = Menu:AddMenuInstance(Format('%s_Hitbox', GetName'Button'), 'Square', {
  1164.                                                 Size            = V2New(BaseSize.X, 20) - V2New(20, 0);
  1165.                                                 Visible         = true;
  1166.                                                 Transparency= .5;
  1167.                                                 Position        = Position - V2New(10, 10);
  1168.                                                 Color           = Colors.Secondary.Light;
  1169.                                                 Filled          = true;
  1170.                                         });
  1171.                                 };
  1172.                                 local Text              = Menu:AddMenuInstance(Format('%s_Text', GetName'Text'), 'Text', {
  1173.                                         Text            = Option.Text;
  1174.                                         Size            = 18;
  1175.                                         Position        = Position + V2New(5, -10);
  1176.                                         Visible         = true;
  1177.                                         Color           = Colors.Primary.Dark;
  1178.                                 });
  1179.                         end
  1180.                 end
  1181.         end
  1182. end
  1183.  
  1184. function SubMenu:Hide()
  1185.         self.Open = false;
  1186.  
  1187.         for i, v in pairs(shared.MenuDrawingData.Instances) do
  1188.                 if i:sub(1, 3) == 'Sub' then
  1189.                         v.Visible = false;
  1190.  
  1191.                         if i:sub(4, 4) == ':' then -- ';' = Temporary so remove
  1192.                                 v:Remove();
  1193.                                 shared.MenuDrawingData.Instance[i] = nil;
  1194.                         end
  1195.                 end
  1196.         end
  1197.  
  1198.         for i, Button in pairs(UIButtons) do
  1199.                 if Button.FromSubMenu then
  1200.                         UIButtons[i] = nil;
  1201.                 end
  1202.         end
  1203.  
  1204.         spawn(function() -- stupid bug happens if i dont use this
  1205.                 for i = 1, 10 do
  1206.                         if shared.CurrentColorPicker then -- dont know why 'CurrentColorPicker' isnt a variable in this
  1207.                                 shared.CurrentColorPicker:Dispose();
  1208.                         end
  1209.                         wait(0.1);
  1210.                 end
  1211.         end)
  1212.  
  1213.         CurrentColorPicker = nil;
  1214. end
  1215.  
  1216. function CreateMenu(NewPosition) -- Create Menu
  1217.         MenuLoaded = false;
  1218.         UIButtons  = {};
  1219.         Sliders    = {};
  1220.  
  1221.         local BaseSize = V2New(300, 625);
  1222.         local BasePosition = NewPosition or V2New(Camera.ViewportSize.X / 8 - (BaseSize.X / 2), Camera.ViewportSize.Y / 2 - (BaseSize.Y / 2));
  1223.  
  1224.         BasePosition = V2New(math.clamp(BasePosition.X, 0, Camera.ViewportSize.X), math.clamp(BasePosition.Y, 0, Camera.ViewportSize.Y));
  1225.  
  1226.         Menu:AddMenuInstance('CrosshairX', 'Line', {
  1227.                 Visible                 = false;
  1228.                 Color                   = Color3.new(0, 1, 0);
  1229.                 Transparency    = 1;
  1230.                 Thickness               = 1;
  1231.         });
  1232.         Menu:AddMenuInstance('CrosshairY', 'Line', {
  1233.                 Visible                 = false;
  1234.                 Color                   = Color3.new(0, 1, 0);
  1235.                 Transparency    = 1;
  1236.                 Thickness               = 1;
  1237.         });
  1238.  
  1239.         delay(.025, function() -- since zindex doesnt exist
  1240.                 Menu:AddMenuInstance('Main', 'Square', {
  1241.                         Size            = BaseSize;
  1242.                         Position        = BasePosition;
  1243.                         Filled          = false;
  1244.                         Color           = Colors.Primary.Main;
  1245.                         Thickness       = 3;
  1246.                         Visible         = true;
  1247.                 });
  1248.         end);
  1249.         Menu:AddMenuInstance('TopBar', 'Square', {
  1250.                 Position        = BasePosition;
  1251.                 Size            = V2New(BaseSize.X, 15);
  1252.                 Color           = Colors.Primary.Dark;
  1253.                 Filled          = true;
  1254.                 Visible         = true;
  1255.         });
  1256.         Menu:AddMenuInstance('TopBarTwo', 'Square', {
  1257.                 Position        = BasePosition + V2New(0, 15);
  1258.                 Size            = V2New(BaseSize.X, 45);
  1259.                 Color           = Colors.Primary.Main;
  1260.                 Filled          = true;
  1261.                 Visible         = true;
  1262.         });
  1263.         Menu:AddMenuInstance('TopBarText', 'Text', {
  1264.                 Size            = 25;
  1265.                 Position        = shared.MenuDrawingData.Instances.TopBarTwo.Position + V2New(25, 10);
  1266.                 Text            = 'Unnamed ESP';
  1267.                 Color           = Colors.Secondary.Light;
  1268.                 Visible         = true;
  1269.                 Transparency= 1; -- proto outline fix
  1270.                 Outline         = true;
  1271.                 OutlineOpacity = 0.5;
  1272.         });
  1273.         Menu:AddMenuInstance('TopBarTextBR', 'Text', {
  1274.                 Size            = 18;
  1275.                 Position        = shared.MenuDrawingData.Instances.TopBarTwo.Position + V2New(BaseSize.X - 75, 25);
  1276.                 Text            = 'by ic3w0lf';
  1277.                 Color           = Colors.Secondary.Light;
  1278.                 Visible         = true;
  1279.                 Transparency= 1;
  1280.                 Outline         = true;
  1281.                 OutlineOpacity = 0.5;
  1282.         });
  1283.         Menu:AddMenuInstance('Filling', 'Square', {
  1284.                 Size            = BaseSize - V2New(0, 60);
  1285.                 Position        = BasePosition + V2New(0, 60);
  1286.                 Filled          = true;
  1287.                 Color           = Colors.Secondary.Main;
  1288.                 Transparency= .5;
  1289.                 Visible         = true;
  1290.         });
  1291.  
  1292.         local CPos = 0;
  1293.  
  1294.         GetTableData(Options)(function(i, v)
  1295.                 if typeof(v.Value) == 'boolean' and not IsStringEmpty(v.Text) and v.Text ~= nil then
  1296.                         CPos                            = CPos + 25;
  1297.                         local BaseSize          = V2New(BaseSize.X, 30);
  1298.                         local BasePosition      = shared.MenuDrawingData.Instances.Filling.Position + V2New(30, v.Index * 25 - 10);
  1299.                         UIButtons[#UIButtons + 1] = {
  1300.                                 Option = v;
  1301.                                 Instance = Menu:AddMenuInstance(Format('%s_Hitbox', v.Name), 'Square', {
  1302.                                         Position        = BasePosition - V2New(30, 15);
  1303.                                         Size            = BaseSize;
  1304.                                         Visible         = false;
  1305.                                 });
  1306.                         };
  1307.                         Menu:AddMenuInstance(Format('%s_OuterCircle', v.Name), 'Circle', {
  1308.                                 Radius          = 10;
  1309.                                 Position        = BasePosition;
  1310.                                 Color           = Colors.Secondary.Light;
  1311.                                 Filled          = true;
  1312.                                 Visible         = true;
  1313.                         });
  1314.                         Menu:AddMenuInstance(Format('%s_InnerCircle', v.Name), 'Circle', {
  1315.                                 Radius          = 7;
  1316.                                 Position        = BasePosition;
  1317.                                 Color           = Colors.Secondary.Dark;
  1318.                                 Filled          = true;
  1319.                                 Visible         = v.Value;
  1320.                         });
  1321.                         Menu:AddMenuInstance(Format('%s_Text', v.Name), 'Text', {
  1322.                                 Text            = v.Text;
  1323.                                 Size            = 20;
  1324.                                 Position        = BasePosition + V2New(20, -10);
  1325.                                 Visible         = true;
  1326.                                 Color           = Colors.Secondary.Light;
  1327.                                 Transparency= 1;
  1328.                                 Outline         = true;
  1329.                                 OutlineOpacity = 0.5;
  1330.                         });
  1331.                 end
  1332.         end)
  1333.         GetTableData(Options)(function(i, v) -- just to make sure certain things are drawn before or after others, too lazy to actually sort table
  1334.                 if typeof(v.Value) == 'number' then
  1335.                         CPos                            = CPos + 25;
  1336.  
  1337.                         local BaseSize          = V2New(BaseSize.X, 30);
  1338.                         local BasePosition      = shared.MenuDrawingData.Instances.Filling.Position + V2New(0, CPos - 10);
  1339.  
  1340.                         local Line                      = Menu:AddMenuInstance(Format('%s_SliderLine', v.Name), 'Square', {
  1341.                                 Transparency    = 1;
  1342.                                 Color                   = Colors.Secondary.Light;
  1343.                                 -- Thickness            = 3;
  1344.                                 Filled                  = true;
  1345.                                 Visible                 = true;
  1346.                                 Position                = BasePosition + V2New(15, -5);
  1347.                                 Size                    = BaseSize - V2New(30, 10);
  1348.                                 Transparency    = 0.5;
  1349.                         });
  1350.                         local Slider            = Menu:AddMenuInstance(Format('%s_Slider', v.Name), 'Square', {
  1351.                                 Visible                 = true;
  1352.                                 Filled                  = true;
  1353.                                 Color                   = Colors.Primary.Dark;
  1354.                                 Size                    = V2New(5, Line.Size.Y);
  1355.                                 Transparency    = 0.5;
  1356.                         });
  1357.                         local Text                      = Menu:AddMenuInstance(Format('%s_Text', v.Name), 'Text', {
  1358.                                 Text                    = v.Text;
  1359.                                 Size                    = 20;
  1360.                                 Center                  = true;
  1361.                                 Transparency    = 1;
  1362.                                 Outline                 = true;
  1363.                                 OutlineOpacity  = 0.5;
  1364.                                 Visible                 = true;
  1365.                                 Color                   = Colors.White;
  1366.                         }); Text.Position       = Line.Position + (Line.Size / 2) - V2New(0, Text.TextBounds.Y / 1.75);
  1367.                         local AMT                       = Menu:AddMenuInstance(Format('%s_AmountText', v.Name), 'Text', {
  1368.                                 Text                    = tostring(v.Value);
  1369.                                 Size                    = 22;
  1370.                                 Center                  = true;
  1371.                                 Transparency    = 1;
  1372.                                 Outline                 = true;
  1373.                                 OutlineOpacity  = 0.5;
  1374.                                 Visible                 = true;
  1375.                                 Color                   = Colors.White;
  1376.                                 Position                = Text.Position;
  1377.                         });
  1378.  
  1379.                         local CSlider = {Slider = Slider; Line = Line; Min = v.AllArgs[4]; Max = v.AllArgs[5]; Option = v};
  1380.                         local Dummy = Instance.new'NumberValue';
  1381.  
  1382.                         Dummy:GetPropertyChangedSignal'Value':Connect(function()
  1383.                                 Text.Transparency = Dummy.Value;
  1384.                                 -- Text.OutlineTransparency = 1 - Dummy.Value;
  1385.                                 AMT.Transparency = 1 - Dummy.Value;
  1386.                         end);
  1387.  
  1388.                         Dummy.Value = 1;
  1389.  
  1390.                         function CSlider:ShowValue(Bool)
  1391.                                 self.ShowingValue = Bool;
  1392.  
  1393.                                 TweenService:Create(Dummy, TweenInfo.new(0.5, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), { Value = Bool and 0 or 1 }):Play();
  1394.                         end
  1395.  
  1396.                         Sliders[#Sliders + 1] = CSlider;
  1397.  
  1398.                         -- local Percent = (v.Value / CSlider.Max) * 100;
  1399.                         -- local Size = math.abs(Line.From.X - Line.To.X);
  1400.                         -- local Value = Size * (Percent / 100); -- this shit's inaccurate but fuck it i'm not even gonna bother fixing it
  1401.  
  1402.                         Slider.Position = Line.Position + V2New(35, 0);
  1403.                        
  1404.                         v.BaseSize = BaseSize;
  1405.                         v.BasePosition = BasePosition;
  1406.                         -- AMT.Position = BasePosition + V2New(BaseSize.X - AMT.TextBounds.X - 10, -10)
  1407.                 end
  1408.         end)
  1409.         local FirstItem = false;
  1410.         GetTableData(Options)(function(i, v) -- just to make sure certain things are drawn before or after others, too lazy to actually sort table
  1411.                 if typeof(v.Value) == 'EnumItem' then
  1412.                         CPos                            = CPos + (not FirstItem and 30 or 25);
  1413.                         FirstItem                       = true;
  1414.  
  1415.                         local BaseSize          = V2New(BaseSize.X, FirstItem and 30 or 25);
  1416.                         local BasePosition      = shared.MenuDrawingData.Instances.Filling.Position + V2New(0, CPos - 10);
  1417.  
  1418.                         UIButtons[#UIButtons + 1] = {
  1419.                                 Option = v;
  1420.                                 Instance = Menu:AddMenuInstance(Format('%s_Hitbox', v.Name), 'Square', {
  1421.                                         Size            = V2New(BaseSize.X, 20) - V2New(30, 0);
  1422.                                         Visible         = true;
  1423.                                         Transparency= .5;
  1424.                                         Position        = BasePosition + V2New(15, -10);
  1425.                                         Color           = Colors.Secondary.Light;
  1426.                                         Filled          = true;
  1427.                                 });
  1428.                         };
  1429.                         local Text              = Menu:AddMenuInstance(Format('%s_Text', v.Name), 'Text', {
  1430.                                 Text            = v.Text;
  1431.                                 Size            = 20;
  1432.                                 Position        = BasePosition + V2New(20, -10);
  1433.                                 Visible         = true;
  1434.                                 Color           = Colors.Secondary.Light;
  1435.                                 Transparency= 1;
  1436.                                 Outline         = true;
  1437.                                 OutlineOpacity = 0.5;
  1438.                         });
  1439.                         local BindText  = Menu:AddMenuInstance(Format('%s_BindText', v.Name), 'Text', {
  1440.                                 Text            = tostring(v.Value):match'%w+%.%w+%.(.+)';
  1441.                                 Size            = 20;
  1442.                                 Position        = BasePosition;
  1443.                                 Visible         = true;
  1444.                                 Color           = Colors.Secondary.Light;
  1445.                                 Transparency= 1;
  1446.                                 Outline         = true;
  1447.                                 OutlineOpacity = 0.5;
  1448.                         });
  1449.  
  1450.                         Options[i].BaseSize = BaseSize;
  1451.                         Options[i].BasePosition = BasePosition;
  1452.                         BindText.Position = BasePosition + V2New(BaseSize.X - BindText.TextBounds.X - 20, -10);
  1453.                 end
  1454.         end)
  1455.         GetTableData(Options)(function(i, v) -- just to make sure certain things are drawn before or after others, too lazy to actually sort table
  1456.                 if typeof(v.Value) == 'function' then
  1457.                         local BaseSize          = V2New(BaseSize.X, 30);
  1458.                         local BasePosition      = shared.MenuDrawingData.Instances.Filling.Position + V2New(0, CPos + (25 * v.AllArgs[4]) - 35);
  1459.  
  1460.                         UIButtons[#UIButtons + 1] = {
  1461.                                 Option = v;
  1462.                                 Instance = Menu:AddMenuInstance(Format('%s_Hitbox', v.Name), 'Square', {
  1463.                                         Size            = V2New(BaseSize.X, 20) - V2New(30, 0);
  1464.                                         Visible         = true;
  1465.                                         Transparency= .5;
  1466.                                         Position        = BasePosition + V2New(15, -10);
  1467.                                         Color           = Colors.Secondary.Light;
  1468.                                         Filled          = true;
  1469.                                 });
  1470.                         };
  1471.                         local Text              = Menu:AddMenuInstance(Format('%s_Text', v.Name), 'Text', {
  1472.                                 Text            = v.Text;
  1473.                                 Size            = 20;
  1474.                                 Position        = BasePosition + V2New(20, -10);
  1475.                                 Visible         = true;
  1476.                                 Color           = Colors.Secondary.Light;
  1477.                                 Transparency= 1;
  1478.                                 Outline         = true;
  1479.                                 OutlineOpacity = 0.5;
  1480.                         });
  1481.  
  1482.                         -- BindText.Position = BasePosition + V2New(BaseSize.X - BindText.TextBounds.X - 10, -10);
  1483.                 end
  1484.         end)
  1485.  
  1486.         delay(.1, function()
  1487.                 MenuLoaded = true;
  1488.         end);
  1489.  
  1490.         -- this has to be at the bottom cuz proto drawing api doesnt have zindex :triumph:     
  1491.         Menu:AddMenuInstance('Cursor1', 'Line', {
  1492.                 Visible                 = false;
  1493.                 Color                   = Color3.new(1, 0, 0);
  1494.                 Transparency    = 1;
  1495.                 Thickness               = 2;
  1496.         });
  1497.         Menu:AddMenuInstance('Cursor2', 'Line', {
  1498.                 Visible                 = false;
  1499.                 Color                   = Color3.new(1, 0, 0);
  1500.                 Transparency    = 1;
  1501.                 Thickness               = 2;
  1502.         });
  1503.         Menu:AddMenuInstance('Cursor3', 'Line', {
  1504.                 Visible                 = false;
  1505.                 Color                   = Color3.new(1, 0, 0);
  1506.                 Transparency    = 1;
  1507.                 Thickness               = 2;
  1508.         });
  1509. end
  1510.  
  1511. CreateMenu();
  1512. delay(0.1, function()
  1513.         SubMenu:Show(V2New()); -- Create the submenu
  1514.         SubMenu:Hide();
  1515. end);
  1516.  
  1517. shared.UESP_InputChangedCon = UserInputService.InputChanged:Connect(function(input)
  1518.         if input.UserInputType.Name == 'MouseMovement' and Options.MenuOpen.Value then
  1519.                 for i, v in pairs(Sliders) do
  1520.                         local Values = {
  1521.                                 v.Line.Position.X;
  1522.                                 v.Line.Position.Y;
  1523.                                 v.Line.Position.X + v.Line.Size.X;
  1524.                                 v.Line.Position.Y + v.Line.Size.Y;
  1525.                         };
  1526.                         if MouseHoveringOver(Values) then
  1527.                                 v:ShowValue(true);
  1528.                         else
  1529.                                 if not MouseHeld then v:ShowValue(false); end
  1530.                         end
  1531.                 end
  1532.         end
  1533. end)
  1534. shared.UESP_InputBeganCon = UserInputService.InputBegan:Connect(function(input)
  1535.         if input.UserInputType.Name == 'MouseButton1' and Options.MenuOpen.Value then
  1536.                 MouseHeld = true;
  1537.                 local Bar = Menu:GetInstance'TopBar';
  1538.                 local Values = {
  1539.                         Bar.Position.X;
  1540.                         Bar.Position.Y;
  1541.                         Bar.Position.X + Bar.Size.X;
  1542.                         Bar.Position.Y + Bar.Size.Y;
  1543.                 }
  1544.                 if MouseHoveringOver(Values) then
  1545.                         DraggingUI = true;
  1546.                         DragOffset = Menu:GetInstance'Main'.Position - GetMouseLocation();
  1547.                 else
  1548.                         for i, v in pairs(Sliders) do
  1549.                                 local Values = {
  1550.                                         v.Line.Position.X;
  1551.                                         v.Line.Position.Y;
  1552.                                         v.Line.Position.X + v.Line.Size.X;
  1553.                                         v.Line.Position.Y + v.Line.Size.Y;
  1554.                                         -- v.Line.From.X        - (v.Slider.Radius);
  1555.                                         -- v.Line.From.Y        - (v.Slider.Radius);
  1556.                                         -- v.Line.To.X          + (v.Slider.Radius);
  1557.                                         -- v.Line.To.Y          + (v.Slider.Radius);
  1558.                                 };
  1559.                                 if MouseHoveringOver(Values) then
  1560.                                         DraggingWhat = v;
  1561.                                         Dragging = true;
  1562.                                         break
  1563.                                 end
  1564.                         end
  1565.  
  1566.                         if not Dragging then
  1567.                                 local Values = {
  1568.                                         TracerPosition.X - 10;
  1569.                                         TracerPosition.Y - 10;
  1570.                                         TracerPosition.X + 10;
  1571.                                         TracerPosition.Y + 10;
  1572.                                 };
  1573.                                 if MouseHoveringOver(Values) then
  1574.                                         DragTracerPosition = true;
  1575.                                 end
  1576.                         end
  1577.                 end
  1578.         end
  1579. end)
  1580. shared.UESP_InputEndedCon = UserInputService.InputEnded:Connect(function(input)
  1581.         if input.UserInputType.Name == 'MouseButton1' and Options.MenuOpen.Value then
  1582.                 MouseHeld = false;
  1583.                 DragTracerPosition = false;
  1584.                 local IgnoreOtherInput = false;
  1585.  
  1586.                 if SubMenu.Open and not MouseHoveringOver(SubMenu.Bounds) then
  1587.                         if CurrentColorPicker and IsMouseOverDrawing(CurrentColorPicker.Drawings['Square-Background']()) then IgnoreOtherInput = true; end
  1588.                         if not IgnoreOtherInput then SubMenu:Hide() end
  1589.                 end
  1590.  
  1591.                 if not IgnoreOtherInput then
  1592.                         for i, v in pairs(UIButtons) do
  1593.                                 if SubMenu.Open and MouseHoveringOver(SubMenu.Bounds) and not v.FromSubMenu then continue end
  1594.  
  1595.                                 local Values = {
  1596.                                         v.Instance.Position.X;
  1597.                                         v.Instance.Position.Y;
  1598.                                         v.Instance.Position.X + v.Instance.Size.X;
  1599.                                         v.Instance.Position.Y + v.Instance.Size.Y;
  1600.                                 };
  1601.                                 if MouseHoveringOver(Values) then
  1602.                                         v.Option();
  1603.                                         IgnoreOtherInput = true;
  1604.                                         break -- prevent clicking 2 options
  1605.                                 end
  1606.                         end
  1607.                         for i, v in pairs(Sliders) do
  1608.                                 if IgnoreOtherInput then break end
  1609.  
  1610.                                 local Values = {
  1611.                                         v.Line.Position.X;
  1612.                                         v.Line.Position.Y;
  1613.                                         v.Line.Position.X + v.Line.Size.X;
  1614.                                         v.Line.Position.Y + v.Line.Size.Y;
  1615.                                 };
  1616.                                 if not MouseHoveringOver(Values) then
  1617.                                         v:ShowValue(false);
  1618.                                 end
  1619.                         end
  1620.                 end
  1621.         elseif input.UserInputType.Name == 'MouseButton2' and Options.MenuOpen.Value and not DragTracerPosition then
  1622.                 local Values = {
  1623.                         TracerPosition.X - 10;
  1624.                         TracerPosition.Y - 10;
  1625.                         TracerPosition.X + 10;
  1626.                         TracerPosition.Y + 10;
  1627.                 }
  1628.                 if MouseHoveringOver(Values) then
  1629.                         DragTracerPosition = false;
  1630.                         TracerPosition = V2New(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y - 135);
  1631.                 end
  1632.         elseif input.UserInputType.Name == 'Keyboard' then
  1633.                 if Binding then
  1634.                         BindedKey = input.KeyCode;
  1635.                         Binding = false;
  1636.                 elseif input.KeyCode == Options.MenuKey.Value or (input.KeyCode == Enum.KeyCode.Home and UserInputService:IsKeyDown(Enum.KeyCode.LeftControl)) then
  1637.                         Options.MenuOpen();
  1638.                 elseif input.KeyCode == Options.ToggleKey.Value then
  1639.                         Options.Enabled();
  1640.                 elseif input.KeyCode.Name == 'F1' and UserInputService:IsMouseButtonPressed(1) and shared.am_ic3 then -- hehe hiden spectate feature cuz why not
  1641.                         local HD, LPlayer, LCharacter = 0.95;
  1642.  
  1643.                         for i, Player in pairs(Players:GetPlayers()) do
  1644.                                 local Character = GetCharacter(Player);
  1645.  
  1646.                                 if Player ~= LocalPlayer and Player ~= Spectating and Character and Character:FindFirstChild'HumanoidRootPart' then
  1647.                                         local Head = Character:FindFirstChild'Head';
  1648.                                         local Humanoid = Character:FindFirstChildOfClass'Humanoid';
  1649.                                        
  1650.                                         if Head then
  1651.                                                 local Distance  = (Camera.CFrame.Position - Head.Position).Magnitude;
  1652.                                                
  1653.                                                 if Distance > Options.MaxDistance.Value then continue; end
  1654.  
  1655.                                                 local Direction = -(Camera.CFrame.Position - Mouse.Hit.Position).unit;
  1656.                                                 local Relative  = Character.Head.Position - Camera.CFrame.Position;
  1657.                                                 local Unit      = Relative.unit;
  1658.  
  1659.                                                 local DP = Direction:Dot(Unit);
  1660.  
  1661.                                                 if DP > HD then
  1662.                                                         HD = DP;
  1663.                                                         LPlayer = Player;
  1664.                                                         LCharacter = Character;
  1665.                                                 end
  1666.                                         end
  1667.                                 end
  1668.                         end
  1669.                        
  1670.                         if LPlayer and LPlayer ~= Spectating and LCharacter then
  1671.                                 Camera.CameraSubject = LCharacter.Head;
  1672.                                 Spectating = LPlayer;
  1673.                         else
  1674.                                 if LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass'Humanoid' then
  1675.                                         Camera.CameraSubject = LocalPlayer.Character:FindFirstChildOfClass'Humanoid';
  1676.                                         Spectating = nil;
  1677.                                 end
  1678.                         end
  1679.                 end
  1680.         end
  1681. end)
  1682.  
  1683. local function CameraCon() -- unnamed esp v1 sucks
  1684.         workspace.CurrentCamera:GetPropertyChangedSignal'ViewportSize':Connect(function()
  1685.                 TracerPosition = V2New(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y - 135);
  1686.         end);
  1687. end
  1688.  
  1689. CameraCon();
  1690.  
  1691. local function ToggleMenu()
  1692.         if Options.MenuOpen.Value then
  1693.                 -- GUIService:SetMenuIsOpen(true);
  1694.                 GetTableData(shared.MenuDrawingData.Instances)(function(i, v)
  1695.                         if OldData[v] then
  1696.                                 pcall(Set, v, 'Visible', true);
  1697.                         end
  1698.                 end)
  1699.         else
  1700.                 -- GUIService:SetMenuIsOpen(false);
  1701.                 GetTableData(shared.MenuDrawingData.Instances)(function(i, v)
  1702.                         OldData[v] = v.Visible;
  1703.                         if v.Visible then
  1704.                                 pcall(Set, v, 'Visible', false);
  1705.                         end
  1706.                 end)
  1707.         end
  1708. end
  1709.  
  1710. local function CheckRay(Instance, Distance, Position, Unit)
  1711.         local Pass = true;
  1712.         local Model = Instance;
  1713.  
  1714.         if Distance > 999 then return false; end
  1715.  
  1716.         if Instance.ClassName == 'Player' then
  1717.                 Model = GetCharacter(Instance);
  1718.         end
  1719.  
  1720.         if not Model then
  1721.                 Model = Instance.Parent;
  1722.  
  1723.                 if Model.Parent == workspace then
  1724.                         Model = Instance;
  1725.                 end
  1726.         end
  1727.  
  1728.         if not Model then return false end
  1729.  
  1730.         local _Ray = Ray.new(Position, Unit * Distance);
  1731.        
  1732.         local List = {LocalPlayer.Character, Camera, Mouse.TargetFilter};
  1733.  
  1734.         for i,v in pairs(IgnoreList) do table.insert(List, v); end;
  1735.  
  1736.         local Hit = workspace:FindPartOnRayWithIgnoreList(_Ray, List);
  1737.  
  1738.         if Hit and not Hit:IsDescendantOf(Model) then
  1739.                 Pass = false;
  1740.                 if Hit.Transparency >= .3 or not Hit.CanCollide and Hit.ClassName ~= Terrain then -- Detect invisible walls
  1741.                         IgnoreList[#IgnoreList + 1] = Hit;
  1742.                 end
  1743.         end
  1744.  
  1745.         return Pass;
  1746. end
  1747.  
  1748. local function CheckTeam(Player)
  1749.         if Player.Neutral and LocalPlayer.Neutral then return true; end
  1750.         return Player.TeamColor == LocalPlayer.TeamColor;
  1751. end
  1752.  
  1753. local CustomTeam = CustomTeams[game.PlaceId];
  1754.  
  1755. if CustomTeam ~= nil then
  1756.         if CustomTeam.Initialize then ypcall(CustomTeam.Initialize) end
  1757.  
  1758.         CheckTeam = CustomTeam.CheckTeam;
  1759. end
  1760.  
  1761. local function CheckPlayer(Player, Character)
  1762.         if not Options.Enabled.Value then return false end
  1763.  
  1764.         local Pass = true;
  1765.         local Distance = 0;
  1766.  
  1767.         if Player ~= LocalPlayer and Character then
  1768.                 if not Options.ShowTeam.Value and CheckTeam(Player) then
  1769.                         Pass = false;
  1770.                 end
  1771.  
  1772.                 local Head = Character:FindFirstChild'Head';
  1773.  
  1774.                 if Pass and Character and Head then
  1775.                         Distance = (Camera.CFrame.Position - Head.Position).Magnitude;
  1776.                         if Options.VisCheck.Value then
  1777.                                 Pass = CheckRay(Player, Distance, Camera.CFrame.Position, (Head.Position - Camera.CFrame.Position).unit);
  1778.                         end
  1779.                         if Distance > Options.MaxDistance.Value then
  1780.                                 Pass = false;
  1781.                         end
  1782.                 end
  1783.         else
  1784.                 Pass = false;
  1785.         end
  1786.  
  1787.         return Pass, Distance;
  1788. end
  1789.  
  1790. local function CheckDistance(Instance)
  1791.         if not Options.Enabled.Value then return false end
  1792.  
  1793.         local Pass = true;
  1794.         local Distance = 0;
  1795.  
  1796.         if Instance ~= nil then
  1797.                 Distance = (Camera.CFrame.Position - Instance.Position).Magnitude;
  1798.                 if Options.VisCheck.Value then
  1799.                         Pass = CheckRay(Instance, Distance, Camera.CFrame.Position, (Instance.Position - Camera.CFrame.Position).unit);
  1800.                 end
  1801.                 if Distance > Options.MaxDistance.Value then
  1802.                         Pass = false;
  1803.                 end
  1804.         else
  1805.                 Pass = false;
  1806.         end
  1807.  
  1808.         return Pass, Distance;
  1809. end
  1810.  
  1811. local function UpdatePlayerData()
  1812.         if (tick() - LastRefresh) > (Options.RefreshRate.Value / 1000) then
  1813.                 LastRefresh = tick();
  1814.                 if CustomESP and Options.Enabled.Value then
  1815.                         local a, b = pcall(CustomESP);
  1816.                 end
  1817.                 for i, v in pairs(RenderList.Instances) do
  1818.                         if v.Instance ~= nil and v.Instance.Parent ~= nil and v.Instance:IsA'BasePart' then
  1819.                                 local Data = shared.InstanceData[v.Instance:GetDebugId()] or { Instances = {}; DontDelete = true };
  1820.  
  1821.                                 Data.Instance = v.Instance;
  1822.  
  1823.                                 Data.Instances['OutlineTracer'] = Data.Instances['OutlineTracer'] or NewDrawing'Line'{
  1824.                                         Transparency    = 0.75;
  1825.                                         Thickness               = 5;
  1826.                                         Color                   = Color3.new(0.1, 0.1, 0.1);
  1827.                                 }
  1828.                                 Data.Instances['Tracer'] = Data.Instances['Tracer'] or NewDrawing'Line'{
  1829.                                         Transparency    = 1;
  1830.                                         Thickness               = 2;
  1831.                                 }
  1832.                                 Data.Instances['NameTag'] = Data.Instances['NameTag'] or NewDrawing'Text'{
  1833.                                         Size                    = Options.TextSize.Value;
  1834.                                         Center                  = true;
  1835.                                         Outline                 = Options.TextOutline.Value;
  1836.                                         Visible                 = true;
  1837.                                 };
  1838.                                 Data.Instances['DistanceTag'] = Data.Instances['DistanceTag'] or NewDrawing'Text'{
  1839.                                         Size                    = Options.TextSize.Value - 1;
  1840.                                         Center                  = true;
  1841.                                         Outline                 = Options.TextOutline.Value;
  1842.                                         Visible                 = true;
  1843.                                 };
  1844.  
  1845.                                 local NameTag           = Data.Instances['NameTag'];
  1846.                                 local DistanceTag       = Data.Instances['DistanceTag'];
  1847.                                 local Tracer            = Data.Instances['Tracer'];
  1848.                                 local OutlineTracer     = Data.Instances['OutlineTracer'];
  1849.  
  1850.                                 local Pass, Distance = CheckDistance(v.Instance);
  1851.  
  1852.                                 if Pass then
  1853.                                         local ScreenPosition, Vis = WorldToViewport(v.Instance.Position);
  1854.                                         local Color = v.Color;
  1855.                                         local OPos = Camera.CFrame:pointToObjectSpace(v.Instance.Position);
  1856.                                        
  1857.                                         if ScreenPosition.Z < 0 then
  1858.                                                 local AT = math.atan2(OPos.Y, OPos.X) + math.pi;
  1859.                                                 OPos = CFrame.Angles(0, 0, AT):vectorToWorldSpace((CFrame.Angles(0, math.rad(89.9), 0):vectorToWorldSpace(V3New(0, 0, -1))));
  1860.                                         end
  1861.                                        
  1862.                                         local Position = WorldToViewport(Camera.CFrame:pointToWorldSpace(OPos));
  1863.  
  1864.                                         if Options.ShowTracers.Value then
  1865.                                                 Tracer.Transparency = math.clamp(Distance / 200, 0.45, 0.8);
  1866.                                                 Tracer.Visible  = true;
  1867.                                                 Tracer.From             = TracerPosition;
  1868.                                                 Tracer.To               = V2New(Position.X, Position.Y);
  1869.                                                 Tracer.Color    = Color;
  1870.                                                 OutlineTracer.Visible = true;
  1871.                                                 OutlineTracer.Transparency = Tracer.Transparency - 0.1;
  1872.                                                 OutlineTracer.From = Tracer.From;
  1873.                                                 OutlineTracer.To = Tracer.To;
  1874.                                                 OutlineTracer.Color     = Color3.new(0.1, 0.1, 0.1);
  1875.                                         else
  1876.                                                 Tracer.Visible = false;
  1877.                                                 OutlineTracer.Visible = false;
  1878.                                         end
  1879.  
  1880.                                         if ScreenPosition.Z > 0 then
  1881.                                                 local ScreenPositionUpper = ScreenPosition;
  1882.                                                
  1883.                                                 if Options.ShowName.Value then
  1884.                                                         LocalPlayer.NameDisplayDistance = 0;
  1885.                                                         NameTag.Visible         = true;
  1886.                                                         NameTag.Text            = v.Text;
  1887.                                                         NameTag.Size            = Options.TextSize.Value;
  1888.                                                         NameTag.Outline         = Options.TextOutline.Value;
  1889.                                                         NameTag.Position        = V2New(ScreenPositionUpper.X, ScreenPositionUpper.Y);
  1890.                                                         NameTag.Color           = Color;
  1891.                                                         if Drawing.Fonts and shared.am_ic3 then -- CURRENTLY SYNAPSE ONLY :MEGAHOLY:
  1892.                                                                 NameTag.Font    = Drawing.Fonts.Monospace;
  1893.                                                         end
  1894.                                                 else
  1895.                                                         LocalPlayer.NameDisplayDistance = 100;
  1896.                                                         NameTag.Visible = false;
  1897.                                                 end
  1898.                                                 if Options.ShowDistance.Value or Options.ShowHealth.Value then
  1899.                                                         DistanceTag.Visible             = true;
  1900.                                                         DistanceTag.Size                = Options.TextSize.Value - 1;
  1901.                                                         DistanceTag.Outline             = Options.TextOutline.Value;
  1902.                                                         DistanceTag.Color               = Color3.new(1, 1, 1);
  1903.                                                         if Drawing.Fonts and shared.am_ic3 then -- CURRENTLY SYNAPSE ONLY :MEGAHOLY:
  1904.                                                                 NameTag.Font    = Drawing.Fonts.Monospace;
  1905.                                                         end
  1906.  
  1907.                                                         local Str = '';
  1908.  
  1909.                                                         if Options.ShowDistance.Value then
  1910.                                                                 Str = Str .. Format('[%d] ', Distance);
  1911.                                                         end
  1912.  
  1913.                                                         DistanceTag.Text = Str;
  1914.                                                         DistanceTag.Position = V2New(ScreenPositionUpper.X, ScreenPositionUpper.Y) + V2New(0, NameTag.TextBounds.Y);
  1915.                                                 else
  1916.                                                         DistanceTag.Visible = false;
  1917.                                                 end
  1918.                                         else
  1919.                                                 NameTag.Visible                 = false;
  1920.                                                 DistanceTag.Visible             = false;
  1921.                                         end
  1922.                                 else
  1923.                                         NameTag.Visible                 = false;
  1924.                                         DistanceTag.Visible             = false;
  1925.                                         Tracer.Visible                  = false;
  1926.                                         OutlineTracer.Visible   = false;
  1927.                                 end
  1928.  
  1929.                                 Data.Instances['NameTag']               = NameTag;
  1930.                                 Data.Instances['DistanceTag']   = DistanceTag;
  1931.                                 Data.Instances['Tracer']                = Tracer;
  1932.                                 Data.Instances['OutlineTracer'] = OutlineTracer;
  1933.  
  1934.                                 shared.InstanceData[v.Instance:GetDebugId()] = Data;
  1935.                         end
  1936.                 end
  1937.                 for i, v in pairs(Players:GetPlayers()) do
  1938.                         local Data = shared.InstanceData[v.Name] or { Instances = {}; };
  1939.  
  1940.                         Data.Instances['Box'] = Data.Instances['Box'] or LineBox:Create{Thickness = 4};
  1941.                         Data.Instances['OutlineTracer'] = Data.Instances['OutlineTracer'] or NewDrawing'Line'{
  1942.                                 Transparency    = 1;
  1943.                                 Thickness               = 3;
  1944.                                 Color                   = Color3.new(0.1, 0.1, 0.1);
  1945.                         }
  1946.                         Data.Instances['Tracer'] = Data.Instances['Tracer'] or NewDrawing'Line'{
  1947.                                 Transparency    = 1;
  1948.                                 Thickness               = 1;
  1949.                         }
  1950.                         Data.Instances['HeadDot'] = Data.Instances['HeadDot'] or NewDrawing'Circle'{
  1951.                                 Filled                  = true;
  1952.                                 NumSides                = 30;
  1953.                         }
  1954.                         Data.Instances['NameTag'] = Data.Instances['NameTag'] or NewDrawing'Text'{
  1955.                                 Size                    = Options.TextSize.Value;
  1956.                                 Center                  = true;
  1957.                                 Outline                 = Options.TextOutline.Value;
  1958.                                 OutlineOpacity  = 1;
  1959.                                 Visible                 = true;
  1960.                         };
  1961.                         Data.Instances['DistanceHealthTag'] = Data.Instances['DistanceHealthTag'] or NewDrawing'Text'{
  1962.                                 Size                    = Options.TextSize.Value - 1;
  1963.                                 Center                  = true;
  1964.                                 Outline                 = Options.TextOutline.Value;
  1965.                                 OutlineOpacity  = 1;
  1966.                                 Visible                 = true;
  1967.                         };
  1968.  
  1969.                         local NameTag           = Data.Instances['NameTag'];
  1970.                         local DistanceTag       = Data.Instances['DistanceHealthTag'];
  1971.                         local Tracer            = Data.Instances['Tracer'];
  1972.                         local OutlineTracer     = Data.Instances['OutlineTracer'];
  1973.                         local HeadDot           = Data.Instances['HeadDot'];
  1974.                         local Box                       = Data.Instances['Box'];
  1975.  
  1976.                         local Character = GetCharacter(v);
  1977.                         local Pass, Distance = CheckPlayer(v, Character);
  1978.  
  1979.                         if Pass and Character then
  1980.                                 local Humanoid = Character:FindFirstChildOfClass'Humanoid';
  1981.                                 local Head = Character:FindFirstChild'Head';
  1982.                                 local HumanoidRootPart = Character:FindFirstChild(CustomRootPartName or 'HumanoidRootPart')
  1983.  
  1984.                                 local Dead = (Humanoid and Humanoid:GetState().Name == 'Dead')
  1985.                                 if type(GetAliveState) == 'function' then
  1986.                                         Dead = (not GetAliveState(v, Character))
  1987.                                 end
  1988.  
  1989.                                 if Character ~= nil and Head and HumanoidRootPart and not Dead then
  1990.                                         local ScreenPosition, Vis = WorldToViewport(Head.Position);
  1991.                                         local Color = Rainbow and Color3.fromHSV(tick() * 128 % 255/255, 1, 1) or (CheckTeam(v) and TeamColor or EnemyColor); Color = Options.ShowTeamColor.Value and v.TeamColor.Color or Color;
  1992.                                         local OPos = Camera.CFrame:pointToObjectSpace(Head.Position);
  1993.                                        
  1994.                                         if ScreenPosition.Z < 0 then
  1995.                                                 local AT = math.atan2(OPos.Y, OPos.X) + math.pi;
  1996.                                                 OPos = CFrame.Angles(0, 0, AT):vectorToWorldSpace((CFrame.Angles(0, math.rad(89.9), 0):vectorToWorldSpace(V3New(0, 0, -1))));
  1997.                                         end
  1998.                                        
  1999.                                         local Position = WorldToViewport(Camera.CFrame:pointToWorldSpace(OPos));
  2000.  
  2001.                                         if Options.ShowTracers.Value then
  2002.                                                 if TracerPosition.X >= Camera.ViewportSize.X or TracerPosition.Y >= Camera.ViewportSize.Y or TracerPosition.X < 0 or TracerPosition.Y < 0 then
  2003.                                                         TracerPosition = V2New(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y - 135);
  2004.                                                 end
  2005.  
  2006.                                                 Tracer.Visible  = true;
  2007.                                                 Tracer.Transparency = math.clamp(1 - (Distance / 200), 0.25, 0.75);
  2008.                                                 Tracer.From             = TracerPosition;
  2009.                                                 Tracer.To               = V2New(Position.X, Position.Y);
  2010.                                                 Tracer.Color    = Color;
  2011.                                                 OutlineTracer.From = Tracer.From;
  2012.                                                 OutlineTracer.To = Tracer.To;
  2013.                                                 OutlineTracer.Transparency = Tracer.Transparency - 0.15;
  2014.                                                 OutlineTracer.Visible = true;
  2015.                                         else
  2016.                                                 Tracer.Visible = false;
  2017.                                                 OutlineTracer.Visible = false;
  2018.                                         end
  2019.                                        
  2020.                                         if ScreenPosition.Z > 0 then
  2021.                                                 local ScreenPositionUpper       = WorldToViewport((HumanoidRootPart:GetRenderCFrame() * CFrame.new(0, Head.Size.Y + HumanoidRootPart.Size.Y + (Options.YOffset.Value / 25), 0)).Position);
  2022.                                                 local Scale                                     = Head.Size.Y / 2;
  2023.  
  2024.                                                 if Options.ShowName.Value then
  2025.                                                         NameTag.Visible         = true;
  2026.                                                         NameTag.Text            = v.Name .. (CustomPlayerTag and CustomPlayerTag(v) or '');
  2027.                                                         NameTag.Size            = Options.TextSize.Value;
  2028.                                                         NameTag.Outline         = Options.TextOutline.Value;
  2029.                                                         NameTag.Position        = V2New(ScreenPositionUpper.X, ScreenPositionUpper.Y) - V2New(0, NameTag.TextBounds.Y);
  2030.                                                         NameTag.Color           = Color;
  2031.                                                         NameTag.Color           = Color;
  2032.                                                         NameTag.OutlineColor= Color3.new(0.05, 0.05, 0.05);
  2033.                                                         NameTag.Transparency= 0.85;
  2034.                                                         if Drawing.Fonts and shared.am_ic3 then -- CURRENTLY SYNAPSE ONLY :MEGAHOLY:
  2035.                                                                 NameTag.Font    = Drawing.Fonts.Monospace;
  2036.                                                         end
  2037.                                                 else
  2038.                                                         NameTag.Visible = false;
  2039.                                                 end
  2040.                                                 if Options.ShowDistance.Value or Options.ShowHealth.Value then
  2041.                                                         DistanceTag.Visible             = true;
  2042.                                                         DistanceTag.Size                = Options.TextSize.Value - 1;
  2043.                                                         DistanceTag.Outline             = Options.TextOutline.Value;
  2044.                                                         DistanceTag.Color               = Color3.new(1, 1, 1);
  2045.                                                         DistanceTag.Transparency= 0.85;
  2046.                                                         if Drawing.Fonts and shared.am_ic3 then -- CURRENTLY SYNAPSE ONLY :MEGAHOLY:
  2047.                                                                 NameTag.Font    = Drawing.Fonts.Monospace;
  2048.                                                         end
  2049.  
  2050.                                                         local Str = '';
  2051.  
  2052.                                                         if Options.ShowDistance.Value then
  2053.                                                                 Str = Str .. Format('[%d] ', Distance);
  2054.                                                         end
  2055.                                                         if Options.ShowHealth.Value then                                                               
  2056.                                                                 if typeof(Humanoid) == 'Instance' then
  2057.                                                                         Str = Str .. Format('[%d/%d] [%s%%]', Humanoid.Health, Humanoid.MaxHealth, math.floor(Humanoid.Health / Humanoid.MaxHealth * 100));
  2058.                                                                 elseif type(GetHealth) == 'function' then
  2059.                                                                         local health, maxHealth = GetHealth(v)
  2060.                                                                        
  2061.                                                                         if type(health) == 'number' and type(maxHealth) == 'number' then
  2062.                                                                                 Str = Str .. Format('[%d/%d] [%s%%]', health, maxHealth, math.floor(health / maxHealth * 100))
  2063.                                                                         end
  2064.                                                                 end
  2065.                                                         end
  2066.  
  2067.                                                         DistanceTag.Text = Str;
  2068.                                                         DistanceTag.OutlineColor = Color3.new(0.05, 0.05, 0.05);
  2069.                                                         DistanceTag.Position = (NameTag.Visible and NameTag.Position + V2New(0, NameTag.TextBounds.Y) or V2New(ScreenPositionUpper.X, ScreenPositionUpper.Y));
  2070.                                                 else
  2071.                                                         DistanceTag.Visible = false;
  2072.                                                 end
  2073.                                                 if Options.ShowDot.Value and Vis then
  2074.                                                         local Top                       = WorldToViewport((Head.CFrame * CFrame.new(0, Scale, 0)).Position);
  2075.                                                         local Bottom            = WorldToViewport((Head.CFrame * CFrame.new(0, -Scale, 0)).Position);
  2076.                                                         local Radius            = (Top - Bottom).y;
  2077.  
  2078.                                                         HeadDot.Visible         = true;
  2079.                                                         HeadDot.Color           = Color;
  2080.                                                         HeadDot.Position        = V2New(ScreenPosition.X, ScreenPosition.Y);
  2081.                                                         HeadDot.Radius          = Radius;
  2082.                                                 else
  2083.                                                         HeadDot.Visible = false;
  2084.                                                 end
  2085.                                                 if Options.ShowBoxes.Value and Vis and HumanoidRootPart then
  2086.                                                         local Body = {
  2087.                                                                 Head;
  2088.                                                                 Character:FindFirstChild'Left Leg' or Character:FindFirstChild'LeftLowerLeg';
  2089.                                                                 Character:FindFirstChild'Right Leg' or Character:FindFirstChild'RightLowerLeg';
  2090.                                                                 Character:FindFirstChild'Left Arm' or Character:FindFirstChild'LeftLowerArm';
  2091.                                                                 Character:FindFirstChild'Right Arm' or Character:FindFirstChild'RightLowerArm';
  2092.                                                         }
  2093.                                                         Box:Update(HumanoidRootPart.CFrame, V3New(2, 3, 1) * (Scale * 2), Color, nil, shared.am_ic3 and Body);
  2094.                                                 else
  2095.                                                         Box:SetVisible(false);
  2096.                                                 end
  2097.                                         else
  2098.                                                 NameTag.Visible                 = false;
  2099.                                                 DistanceTag.Visible             = false;
  2100.                                                 HeadDot.Visible                 = false;
  2101.                                                
  2102.                                                 Box:SetVisible(false);
  2103.                                         end
  2104.                                 else
  2105.                                         NameTag.Visible                 = false;
  2106.                                         DistanceTag.Visible             = false;
  2107.                                         HeadDot.Visible                 = false;
  2108.                                         Tracer.Visible                  = false;
  2109.                                         OutlineTracer.Visible   = false;
  2110.                                        
  2111.                                         Box:SetVisible(false);
  2112.                                 end
  2113.                         else
  2114.                                 NameTag.Visible                 = false;
  2115.                                 DistanceTag.Visible             = false;
  2116.                                 HeadDot.Visible                 = false;
  2117.                                 Tracer.Visible                  = false;
  2118.                                 OutlineTracer.Visible   = false;
  2119.  
  2120.                                 Box:SetVisible(false);
  2121.                         end
  2122.  
  2123.                         shared.InstanceData[v.Name] = Data;
  2124.                 end
  2125.         end
  2126. end
  2127.  
  2128. local LastInvalidCheck = 0;
  2129.  
  2130. local function Update()
  2131.         if tick() - LastInvalidCheck > 0.3 then
  2132.                 LastInvalidCheck = tick();
  2133.  
  2134.                 if Camera.Parent ~= workspace then
  2135.                         Camera = workspace.CurrentCamera;
  2136.                         CameraCon();
  2137.                         WTVP = Camera.WorldToViewportPoint;
  2138.                 end
  2139.  
  2140.                 for i, v in pairs(shared.InstanceData) do
  2141.                         if not Players:FindFirstChild(tostring(i)) then
  2142.                                 if not shared.InstanceData[i].DontDelete then
  2143.                                         GetTableData(v.Instances)(function(i, obj)
  2144.                                                 obj.Visible = false;
  2145.                                                 obj:Remove();
  2146.                                                 v.Instances[i] = nil;
  2147.                                         end)
  2148.                                         shared.InstanceData[i] = nil;
  2149.                                 else
  2150.                                         if shared.InstanceData[i].Instance == nil or shared.InstanceData[i].Instance.Parent == nil then
  2151.                                                 GetTableData(v.Instances)(function(i, obj)
  2152.                                                         obj.Visible = false;
  2153.                                                         obj:Remove();
  2154.                                                         v.Instances[i] = nil;
  2155.                                                 end)
  2156.                                                 shared.InstanceData[i] = nil;
  2157.                                         end
  2158.                                 end
  2159.                         end
  2160.                 end
  2161.         end
  2162.  
  2163.         local CX = Menu:GetInstance'CrosshairX';
  2164.         local CY = Menu:GetInstance'CrosshairY';
  2165.        
  2166.         if Options.Crosshair.Value then
  2167.                 CX.Visible = true;
  2168.                 CY.Visible = true;
  2169.  
  2170.                 CX.To = V2New((Camera.ViewportSize.X / 2) - 8, (Camera.ViewportSize.Y / 2));
  2171.                 CX.From = V2New((Camera.ViewportSize.X / 2) + 8, (Camera.ViewportSize.Y / 2));
  2172.                 CY.To = V2New((Camera.ViewportSize.X / 2), (Camera.ViewportSize.Y / 2) - 8);
  2173.                 CY.From = V2New((Camera.ViewportSize.X / 2), (Camera.ViewportSize.Y / 2) + 8);
  2174.         else
  2175.                 CX.Visible = false;
  2176.                 CY.Visible = false;
  2177.         end
  2178.  
  2179.         if Options.MenuOpen.Value and MenuLoaded then
  2180.                 local MLocation = GetMouseLocation();
  2181.                 shared.MenuDrawingData.Instances.Main.Color = Color3.fromHSV(tick() * 24 % 255/255, 1, 1);
  2182.                 local MainInstance = Menu:GetInstance'Main';
  2183.                
  2184.                 local Values = {
  2185.                         MainInstance.Position.X;
  2186.                         MainInstance.Position.Y;
  2187.                         MainInstance.Position.X + MainInstance.Size.X;
  2188.                         MainInstance.Position.Y + MainInstance.Size.Y;
  2189.                 };
  2190.                
  2191.                 if MainInstance and (MouseHoveringOver(Values) or (SubMenu.Open and MouseHoveringOver(SubMenu.Bounds))) then
  2192.                         Debounce.CursorVis = true;
  2193.                        
  2194.                         Menu:UpdateMenuInstance'Cursor1'{
  2195.                                 Visible = true;
  2196.                                 From    = V2New(MLocation.x, MLocation.y);
  2197.                                 To              = V2New(MLocation.x + 5, MLocation.y + 6);
  2198.                         }
  2199.                         Menu:UpdateMenuInstance'Cursor2'{
  2200.                                 Visible = true;
  2201.                                 From    = V2New(MLocation.x, MLocation.y);
  2202.                                 To              = V2New(MLocation.x, MLocation.y + 8);
  2203.                         }
  2204.                         Menu:UpdateMenuInstance'Cursor3'{
  2205.                                 Visible = true;
  2206.                                 From    = V2New(MLocation.x, MLocation.y + 6);
  2207.                                 To              = V2New(MLocation.x + 5, MLocation.y + 5);
  2208.                         }
  2209.                 else
  2210.                         if Debounce.CursorVis then
  2211.                                 Debounce.CursorVis = false;
  2212.                                
  2213.                                 Menu:UpdateMenuInstance'Cursor1'{Visible = false};
  2214.                                 Menu:UpdateMenuInstance'Cursor2'{Visible = false};
  2215.                                 Menu:UpdateMenuInstance'Cursor3'{Visible = false};
  2216.                         end
  2217.                 end
  2218.                 if MouseHeld then
  2219.                         local MousePos = GetMouseLocation();
  2220.  
  2221.                         if Dragging then
  2222.                                 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);
  2223.                                 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);
  2224.                                 local Value             = CalculateValue(DraggingWhat.Min, DraggingWhat.Max, Percent);
  2225.                                 DraggingWhat.Option(Value);
  2226.                         elseif DraggingUI then
  2227.                                 Debounce.UIDrag = true;
  2228.                                 local Main = Menu:GetInstance'Main';
  2229.                                 Main.Position = MousePos + DragOffset;
  2230.                         elseif DragTracerPosition then
  2231.                                 TracerPosition = MousePos;
  2232.                         end
  2233.                 else
  2234.                         Dragging = false;
  2235.                         DragTracerPosition = false;
  2236.                         if DraggingUI and Debounce.UIDrag then
  2237.                                 Debounce.UIDrag = false;
  2238.                                 DraggingUI = false;
  2239.                                 CreateMenu(Menu:GetInstance'Main'.Position);
  2240.                         end
  2241.                 end
  2242.                 if not Debounce.Menu then
  2243.                         Debounce.Menu = true;
  2244.                         ToggleMenu();
  2245.                 end
  2246.         elseif Debounce.Menu and not Options.MenuOpen.Value then
  2247.                 Debounce.Menu = false;
  2248.                 ToggleMenu();
  2249.         end
  2250. end
  2251.  
  2252. RunService:UnbindFromRenderStep(GetDataName);
  2253. RunService:UnbindFromRenderStep(UpdateName);
  2254.  
  2255. RunService:BindToRenderStep(GetDataName, 300, UpdatePlayerData);
  2256. RunService:BindToRenderStep(UpdateName, 199, Update);



  • Recent Roblox Scripts