Yes
Yes
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
return false;
end
Teams.Sheriffs = S;
Teams.Bandits = B;
local CustomPlayerTag;
local CustomESP;
local CustomCharacter;
local GetHealth;
local GetAliveState;
local CustomRootPartName;
local Modules = {
[292439477] = {
Initialize = function()
if not create_comm_channel or not get_comm_channel then return
end
shared.UNPFHB =
RunService.Heartbeat:Connect(function()
local CharacterList = {}
CharacterList[Player.Name] = {
Head = Character.Head,
Torso = Character.Torso,
Health = HealthState and
rawget(HealthState, 'health0') or 100,
Alive = rawget(Entry, '_alive')
}
end
Event:Fire(CharacterList)
end)
]], EventID)
end
end,
CustomCharacter = function(Player)
if not shared.PF_CharMT then
shared.PF_CharMT = {}
shared.PF_CharMT.__index = shared.PF_CharMT
function shared.PF_CharMT:FindFirstChild(Name)
return rawget(self, Name)
end
setmetatable(Character, shared.PF_CharMT)
return Character
end
end,
GetHealth = function(Player)
if PF_CharList and PF_CharList[Player.Name] then
return PF_CharList[Player.Name].Health
end
end,
GetAliveState = function(Player)
if PF_CharList and PF_CharList[Player.Name] then
return PF_CharList[Player.Name].Alive
end
end,
CustomRootPartName = 'Torso',
};
[2950983942] = {
CustomCharacter = function(Player)
if workspace:FindFirstChild'Players' then
return workspace.Players:FindFirstChild(Player.Name);
end
end
};
[2262441883] = {
CustomPlayerTag = function(Player)
return Player:FindFirstChild'Job' and (' [' ..
Player.Job.Value .. ']') or '';
end;
CustomESP = function()
if workspace:FindFirstChild'MoneyPrinters' then
for i, v in pairs(workspace.MoneyPrinters:GetChildren()) do
local Main = v:FindFirstChild'Main';
local Owner = v:FindFirstChild'TrueOwner';
local Money = v:FindFirstChild'Int' and
v.Int:FindFirstChild'Money' or nil;
if Main and Owner and Money then
local O = tostring(Owner.Value);
local M = tostring(Money.Value);
pcall(RenderList.AddOrUpdateInstance,
RenderList, v, Main, string.format('Money Printer\nOwned by %s\n[%s]', O, M),
Color3.fromRGB(13, 255, 227));
end
end
end
end;
};
-- [4581966615] = {
-- CustomESP = function()
-- if workspace:FindFirstChild'Entities' then
-- for i, v in pairs(workspace.Entities:GetChildren()) do
-- if not v.Name:match'Printer' then continue end
-- pcall(RenderList.AddOrUpdateInstance,
RenderList, v, Main, string.format('Money Printer\nOwned by %s\n[%s]', O, M),
Color3.fromRGB(13, 255, 227));
-- end
-- end
-- end
-- end;
-- };
[4801598506] = {
CustomESP = function()
if workspace:FindFirstChild'Mobs' and
workspace.Mobs:FindFirstChild'Forest1' then
for i, v in pairs(workspace.Mobs.Forest1:GetChildren()) do
local Main = v:FindFirstChild'Head';
local Hum = v:FindFirstChild'Mob';
if Main and Hum then
pcall(RenderList.AddOrUpdateInstance,
RenderList, v, Main, string.format('[%s] [%s/%s]', v.Name, Hum.Health,
Hum.MaxHealth), Color3.fromRGB(13, 255, 227));
end
end
end
end;
};
[2555873122] = {
CustomESP = function()
if workspace:FindFirstChild'WoodPlanks' then
for i, v in pairs(workspace:GetChildren()) do
if v.Name == 'WoodPlanks' then
local Main = v:FindFirstChild'Wood';
if Main then
pcall(RenderList.AddOrUpdateInstance,
RenderList, v, Main, 'Wood Planks', Color3.fromRGB(13, 255, 227));
end
end
end
end
end;
};
[5208655184] = {
CustomESP = function()
-- if workspace:FindFirstChild'Live' then
-- for i, v in pairs(workspace.Live:GetChildren()) do
-- if v.Name:sub(1, 1) == '.' then
-- local Main = v:FindFirstChild'Head';
-- if Main then
-- pcall(RenderList.AddOrUpdateInstance,
RenderList, v, Main, v.Name:sub(2), Color3.fromRGB(250, 50, 40));
-- end
-- end
-- end
-- end
end;
CustomPlayerTag = function(Player)
if game.PlaceVersion < 457 then return '' end
if Character then
if Character and Character:FindFirstChild'Danger'
then table.insert(Extra, 'D'); end
if Character:FindFirstChild'ManaAbilities' and
Character.ManaAbilities:FindFirstChild'ManaSprint' then table.insert(Extra, 'D1');
end
if Character:FindFirstChild'Mana' then
table.insert(Extra, 'M' .. math.floor(Character.Mana.Value)); end
if Character:FindFirstChild'Vampirism' then
table.insert(Extra, 'V'); end
if Character:FindFirstChild'Observe' then
table.insert(Extra, 'ILL'); end
if Character:FindFirstChild'Inferi' then
table.insert(Extra, 'NEC'); end
if Character:FindFirstChild'World\'s Pulse' then
table.insert(Extra, 'DZIN'); end
if Character:FindFirstChild'Shift' then
table.insert(Extra, 'MAD'); end
if Character:FindFirstChild'Head' and
Character.Head:FindFirstChild'FacialMarking' then
local FM =
Character.Head:FindFirstChild'FacialMarking';
if FM.Texture == 'http://www.roblox.com/asset/?
id=4072968006' then
table.insert(Extra, 'HEALER');
elseif FM.Texture ==
'http://www.roblox.com/asset/?id=4072914434' then
table.insert(Extra, 'SEER');
elseif FM.Texture ==
'http://www.roblox.com/asset/?id=4094417635' then
table.insert(Extra, 'JESTER');
elseif FM.Texture ==
'http://www.roblox.com/asset/?id=4072968656' then
table.insert(Extra, 'BLADE');
end
end
end
if Player:FindFirstChild'Backpack' then
if Player.Backpack:FindFirstChild'Observe'
then table.insert(Extra, 'ILL'); end
if Player.Backpack:FindFirstChild'Inferi'
then table.insert(Extra, 'NEC'); end
if Player.Backpack:FindFirstChild'World\'s Pulse'
then table.insert(Extra, 'DZIN'); end
if Player.Backpack:FindFirstChild'Shift'
then table.insert(Extra, 'MAD'); end
end
return Name;
end;
};
[3541987450] = {
CustomPlayerTag = function(Player)
local Name = '';
if Player:FindFirstChild'leaderstats' then
Name = Name .. '\n[';
local Prefix = '';
local Extra = {};
if Player.leaderstats:FindFirstChild'Prestige' and
Player.leaderstats.Prestige.ClassName == 'IntValue' and
Player.leaderstats.Prestige.Value > 0 then
Name = Name .. '#' ..
tostring(Player.leaderstats.Prestige.Value) .. ' ';
end
if Player.leaderstats:FindFirstChild'HouseRank' and
Player.leaderstats:FindFirstChild'Gender' and
Player.leaderstats.HouseRank.ClassName == 'StringValue' and not
IsStringEmpty(Player.leaderstats.HouseRank.Value) then
Prefix = Player.leaderstats.HouseRank.Value ==
'Owner' and (Player.leaderstats.Gender.Value == 'Female' and 'Lady ' or 'Lord ') or
'';
end
if Player.leaderstats:FindFirstChild'FirstName' and
Player.leaderstats.FirstName.ClassName == 'StringValue' and not
IsStringEmpty(Player.leaderstats.FirstName.Value) then
Name = Name .. '' .. Prefix ..
Player.leaderstats.FirstName.Value;
end
if Player.leaderstats:FindFirstChild'LastName' and
Player.leaderstats.LastName.ClassName == 'StringValue' and not
IsStringEmpty(Player.leaderstats.LastName.Value) then
Name = Name .. ' ' ..
Player.leaderstats.LastName.Value;
end
if Player.leaderstats:FindFirstChild'UberTitle' and
Player.leaderstats.UberTitle.ClassName == 'StringValue' and not
IsStringEmpty(Player.leaderstats.UberTitle.Value) then
Name = Name .. ', ' ..
Player.leaderstats.UberTitle.Value;
end
if Character then
if Character and Character:FindFirstChild'Danger'
then table.insert(Extra, 'D'); end
if Character:FindFirstChild'ManaAbilities' and
Character.ManaAbilities:FindFirstChild'ManaSprint' then table.insert(Extra, 'D1');
end
if Character:FindFirstChild'Mana' then
table.insert(Extra, 'M' .. math.floor(Character.Mana.Value)); end
if Character:FindFirstChild'Vampirism' then
table.insert(Extra, 'V'); end
if Character:FindFirstChild'Observe'
then table.insert(Extra, 'ILL'); end
if Character:FindFirstChild'Inferi' then
table.insert(Extra, 'NEC'); end
return Name;
end;
};
if Character then
local Blood, Armor = Character:FindFirstChild('Blood'),
Character:FindFirstChild('Armor');
return Name;
end;
};
if Character then
local Blood, Armor =
Character:FindFirstChild('Blood'), Character:FindFirstChild('Armor');
return Name;
end;
};
[3127094264] = {
CustomCharacter = function(Player)
if not _FIRST then
_FIRST = true
pcall(function()
local GPM =
rawget(require(LocalPlayer.PlayerScripts:WaitForChild('Client',
1e9):WaitForChild('Player', 1e9)), 'GetPlayerModel')
PList = debug.getupvalue(GPM, 1)
end)
end
if PList then
local Player = rawget(PList, Player.UserId)
if Module.Initialize then
Module.Initialize()
end
CustomPlayerTag = Module.CustomPlayerTag or nil
CustomESP = Module.CustomESP or nil
CustomCharacter = Module.CustomCharacter or nil
GetHealth = Module.GetHealth or nil
GetAliveState = Module.GetAliveState or nil
CustomRootPartName = Module.CustomRootPartName or nil
end
function GetCharacter(Player)
return CustomCharacter and CustomCharacter(Player) or Player.Character
end
function GetMouseLocation()
return UserInputService:GetMouseLocation();
end
function MouseHoveringOver(Values)
local X1, Y1, X2, Y2 = Values[1], Values[2], Values[3], Values[4]
local MLocation = GetMouseLocation();
return (MLocation.x >= X1 and MLocation.x <= (X1 + (X2 - X1))) and
(MLocation.y >= Y1 and MLocation.y <= (Y1 + (Y2 - Y1)));
end
return setmetatable(t, {
__call = function(t, func)
if typeof(func) ~= 'function' then return end;
for i, v in pairs(t) do
pcall(func, i, v);
end
end;
});
end
local function Format(format, ...)
return string.format(format, ...);
end
function CalculateValue(Min, Max, Percent)
return Min + math.floor(((Max - Min) * Percent) + .5);
end
function NewDrawing(InstanceName)
local Instance = Drawing.new(InstanceName)
return (function(Properties)
for i, v in pairs(Properties) do
pcall(Set, Instance, i, v)
end
return Instance
end)
end
shared.MenuDrawingData.Instances[Name] = Instance;
return Instance;
end
function Menu:UpdateMenuInstance(Name)
local Instance = shared.MenuDrawingData.Instances[Name];
if Instance ~= nil then
return (function(Properties)
for i, v in pairs(Properties) do
pcall(Set, Instance, i, v);
end
return Instance;
end)
end
end
function Menu:GetInstance(Name)
return shared.MenuDrawingData.Instances[Name];
end
function Load()
local _, Result = pcall(readfile, OptionsFile);
if _ then -- extremely ugly code yea i know but i dont care p.s. i hate pcall
local _, Table = pcall(HttpService.JSONDecode, HttpService, Result);
if _ and typeof(Table) == 'table' then
for i, v in pairs(Table) do
if typeof(Options[i]) == 'table' and Options[i].Value ~=
nil and (typeof(Options[i].Value) == 'boolean' or typeof(Options[i].Value) ==
'number') then
Options[i].Value = v.Value;
pcall(Options[i], v.Value);
end
end
if shared.CurrentColorPicker then
shared.CurrentColorPicker:Dispose() end
local ColorPicker = ColorPicker.new(Position - V2New(-10,
50));
CurrentColorPicker = ColorPicker;
shared.CurrentColorPicker = CurrentColorPicker;
ColorPicker.ColorChanged:Connect(function(Color) Circ.Color
= Color TeamColor = Color Options.TeamColor = Color end);
end
};
{
Type = 'Color'; Text = 'Enemy Color'; Color = EnemyColor;
if shared.CurrentColorPicker then
shared.CurrentColorPicker:Dispose() end
local ColorPicker = ColorPicker.new(Position - V2New(-10,
50));
CurrentColorPicker = ColorPicker;
shared.CurrentColorPicker = CurrentColorPicker;
ColorPicker.ColorChanged:Connect(function(Color) Circ.Color
= Color EnemyColor = Color Options.EnemyColor = Color end);
end
};
{
Type = 'Button'; Text = 'Reset Colors';
Function = function()
EnemyColor = Color3.new(1, 0, 0);
TeamColor = Color3.new(0, 1, 0);
Function = function()
Rainbow = not Rainbow;
end
};
});
end, 2);
Options('ResetSettings', 'Reset Settings', function()
for i, v in pairs(Options) do
if Options[i] ~= nil and Options[i].Value ~= nil and Options[i].Text ~=
nil and (typeof(Options[i].Value) == 'boolean' or typeof(Options[i].Value) ==
'number' or typeof(Options[i].Value) == 'EnumItem') then
Options[i](Options[i].DefaultValue, true);
end
end
end, 5);
Options('LoadSettings', 'Load Settings', Load, 4);
Options('SaveSettings', 'Save Settings', function()
local COptions = {};
for i, v in pairs(Options) do
COptions[i] = v;
end
writefile(OptionsFile, HttpService:JSONEncode(COptions));
end, 3);
Load(1);
function LineBox:Create(Properties)
local Box = { Visible = true }; -- prevent errors not really though dont
worry bout the Visible = true thing
for i, v in pairs(Parts) do
-- if not v:IsA'BasePart' then continue end
local Corners = {
Vector3.new(CF.X + Size.X / 2, CF.Y + Size.Y / 2,
CF.Z + Size.Z / 2);
Vector3.new(CF.X - Size.X / 2, CF.Y + Size.Y / 2,
CF.Z + Size.Z / 2);
Vector3.new(CF.X - Size.X / 2, CF.Y - Size.Y / 2,
CF.Z - Size.Z / 2);
Vector3.new(CF.X + Size.X / 2, CF.Y - Size.Y / 2,
CF.Z - Size.Z / 2);
Vector3.new(CF.X - Size.X / 2, CF.Y + Size.Y / 2,
CF.Z - Size.Z / 2);
Vector3.new(CF.X + Size.X / 2, CF.Y + Size.Y / 2,
CF.Z - Size.Z / 2);
Vector3.new(CF.X - Size.X / 2, CF.Y - Size.Y / 2,
CF.Z + Size.Z / 2);
Vector3.new(CF.X + Size.X / 2, CF.Y - Size.Y / 2,
CF.Z + Size.Z / 2);
};
for i, v in pairs(Corners) do
table.insert(AllCorners, v);
end
-- break
end
for i, v in pairs(AllCorners) do
local Position, V = WorldToViewport(v);
return
end
if QUAD_SUPPORTED_EXPLOIT then
if Visible1 and Visible2 and Visible3 and Visible4 then
Quad.Visible = true;
Quad.Color = Color;
Quad.PointA = V2New(TLPos.X, TLPos.Y);
Quad.PointB = V2New(TRPos.X, TRPos.Y);
Quad.PointC = V2New(BRPos.X, BRPos.Y);
Quad.PointD = V2New(BLPos.X, BLPos.Y);
else
Box['Quad'].Visible = false;
end
else
Visible1 = TLPos.Z > 0 -- (commented | reason: random flashes);
Visible2 = TRPos.Z > 0 -- (commented | reason: random flashes);
Visible3 = BLPos.Z > 0 -- (commented | reason: random flashes);
Visible4 = BRPos.Z > 0 -- (commented | reason: random flashes);
if shared.am_ic3 then
Box['Square']:Remove()
Box['OutlineSquare']:Remove()
elseif self.Quad then
Box['Quad']:Remove()
elseif self.TopLeft and self.TopRight and self.BottomLeft and
self.BottomRight then
self.TopLeft:Remove()
self.TopRight:Remove()
self.BottomLeft:Remove()
self.BottomRight:Remove()
end
end
return Box;
end
local Colors = {
White = Color3.fromHex'ffffff',
Primary = {
Main = Color3.fromHex'424242',
Light = Color3.fromHex'6d6d6d',
Dark = Color3.fromHex'1b1b1b'
},
Secondary = {
Main = Color3.fromHex'e0e0e0',
Light = Color3.fromHex'ffffff',
Dark = Color3.fromHex'aeaeae'
}
}
function Connections:DisconnectAll()
for Index, Connection in pairs(self.Active) do
if Connection.Connected then
Connection:Disconnect();
end
end
self.Active = {};
end
function Signal.new()
local self = setmetatable({ _BindableEvent = Instance.new'BindableEvent' },
Signal);
return self;
end
function Signal:Connect(Callback)
assert(typeof(Callback) == 'function', 'function expected; got ' ..
typeof(Callback));
function Signal:Fire(...)
self._BindableEvent:Fire(...);
end
function Signal:Wait()
local Arguments = self._BindableEvent:Wait();
return Arguments;
end
function Signal:Disconnect()
if self._BindableEvent then
self._BindableEvent:Destroy();
end
end
-- oh god unnamed esp needs an entire rewrite, someone make a better one pls im too
lazy
-- btw the color picker was made seperately so it doesnt fit with the code of
unnamed esp
return true;
end
spawn(function()
repeat wait() until Object.Loaded;
if not self.DefaultSize then rawset(self,
'DefaultSize', Object.Size) end
Property = 'ScaleFactor';
Value = Value.X / self.DefaultSize.X;
Object[Property] = Value
end)
end
if CanSet then Object[Property] = Value end
end
end
return Object;
end
});
Object.Visible = true;
Object.Transparency = 1; -- Transparency is really Opacity with drawing
api (1 being visible, 0 being invisible)
return self.__Objects[Index];
end
return Object;
end
local Images = {}
spawn(function()
Images.Ring = 'https://i.imgur.com/q4qx26f.png'
Images.Overlay = 'https://i.imgur.com/gOCxbsR.png'
end)
self.ColorChanged = Signal.new();
function self:UpdatePosition(Input)
local MousePosition = V2New(Input.Position.X, Input.Position.Y + 33);
if self.MouseHeld then
if self.Item == 'Ring' then
local Main = self.Drawings['Image-Main'] ();
local Preview = self.Drawings['Square-Preview'] ();
local Bounds = Main.Size / 2;
local Center = Main.Position + Bounds;
local Relative = MousePosition - Center;
local Direction = Relative.unit;
local Position = Center + Direction * Main.Size.X / 2.15;
local H = (math.atan2(Position.Y - Center.Y, Position.X -
Center.X)) * 60;
if H < 0 then H = 360 + H; end
H = H / 360;
self.HSV.H = H;
local EndColor = Color3.fromHSV(H, self.HSV.S, self.HSV.V); if
EndColor ~= self.Color then self.ColorChanged:Fire(self.Color); end
local Pointer = self.Drawings['Circle-Cursor'] { Position =
Position };
self.Drawings['Circle-CursorOutline'] { Position = Pointer.Position
};
Bounds = Bounds * 2;
Preview.Color = Color3.fromHSV(H, 1, 1);
self.Color = EndColor;
self.Drawings['Circle-Preview'] { Color = EndColor };
elseif self.Item == 'HL' then
local Preview = self.Drawings['Square-Preview'] ();
local HSV = self.HSV;
local Position = V2New(math.clamp(MousePosition.X,
Preview.Position.X, Preview.Position.X + Preview.Size.X),
math.clamp(MousePosition.Y, Preview.Position.Y, Preview.Position.Y +
Preview.Size.Y));
HSV.S = (Position.X - Preview.Position.X) / Preview.Size.X;
HSV.V = 1 - (Position.Y - Preview.Position.Y) / Preview.Size.Y;
local EndColor = Color3.fromHSV(HSV.H, HSV.S, HSV.V); if EndColor
~= self.Color then self.ColorChanged:Fire(self.Color); end
self.Color = EndColor;
self.Drawings['Circle-Preview'] { Color = EndColor };
local Pointer = self.Drawings['Circle-CursorSquare'] { Position =
Position };
self.Drawings['Circle-CursorOutlineSquare'] { Position =
Pointer.Position };
end
end
end
self:UpdatePosition(Input, P);
end
elseif Type == 'Changed' then
if Input.UserInputType.Name == 'MouseMovement' then
self:UpdatePosition(Input, P);
end
elseif Type == 'Ended' and Input.UserInputType.Name == 'MouseButton1' then
self.Item = nil;
end
end
function self:Dispose()
self.Drawings(false);
self.UpdatePosition = nil;
self.HandleInput = nil;
Connections:DisconnectAll(); -- scuffed tbh
end
ColorPicker.Loading = false
self.Drawings = Drawings
return self
end
delay(0.025, function()
if not self.Open then return; end
Menu:AddMenuInstance('Sub-Main', 'Square', {
Size = BaseSize;
Position = BasePosition;
Filled = false;
Color = Colors.Primary.Main;
Thickness = 3;
Visible = Visible;
});
end);
Menu:AddMenuInstance('Sub-TopBar', 'Square', {
Position = BasePosition;
Size = V2New(BaseSize.X, 10);
Color = Colors.Primary.Dark;
Filled = true;
Visible = Visible;
});
Menu:AddMenuInstance('Sub-TopBarTwo', 'Square', {
Position = BasePosition + V2New(0, 10);
Size = V2New(BaseSize.X, 20);
Color = Colors.Primary.Main;
Filled = true;
Visible = Visible;
});
Menu:AddMenuInstance('Sub-TopBarText', 'Text', {
Size = 20;
Position = shared.MenuDrawingData.Instances['Sub-
TopBarTwo'].Position + V2New(15, -3);
Text = Title or '';
Color = Colors.Secondary.Light;
Visible = Visible;
});
Menu:AddMenuInstance('Sub-Filling', 'Square', {
Size = BaseSize - V2New(0, 30);
Position = BasePosition + V2New(0, 30);
Filled = true;
Color = Colors.Secondary.Main;
Transparency= .75;
Visible = Visible;
});
if Options then
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
local function GetName(Name) return ('Sub-%s.%d'):format(Name,
Index) end
local Position = shared.MenuDrawingData.Instances['Sub-
Filling'].Position + V2New(20, Index * 25 - 10);
-- local BasePosition =
shared.MenuDrawingData.Instances.Filling.Position + V2New(30, v.Index * 25 - 10);
function SubMenu:Hide()
self.Open = false;
for i, v in pairs(shared.MenuDrawingData.Instances) do
if i:sub(1, 3) == 'Sub' then
v.Visible = false;
CurrentColorPicker = nil;
end
Menu:AddMenuInstance('CrosshairX', 'Line', {
Visible = false;
Color = Color3.new(0, 1, 0);
Transparency = 1;
Thickness = 1;
});
Menu:AddMenuInstance('CrosshairY', 'Line', {
Visible = false;
Color = Color3.new(0, 1, 0);
Transparency = 1;
Thickness = 1;
});
local CPos = 0;
GetTableData(Options)(function(i, v)
if typeof(v.Value) == 'boolean' and not IsStringEmpty(v.Text) and
v.Text ~= nil then
CPos = CPos + 25;
local BaseSize = V2New(BaseSize.X, 30);
local BasePosition =
shared.MenuDrawingData.Instances.Filling.Position + V2New(30, v.Index * 25 - 10);
UIButtons[#UIButtons + 1] = {
Option = v;
Instance = Menu:AddMenuInstance(Format('%s_Hitbox',
v.Name), 'Square', {
Position = BasePosition - V2New(30, 15);
Size = BaseSize;
Visible = false;
});
};
Menu:AddMenuInstance(Format('%s_OuterCircle', v.Name), 'Circle',
{
Radius = 10;
Position = BasePosition;
Color = Colors.Secondary.Light;
Filled = true;
Visible = true;
});
Menu:AddMenuInstance(Format('%s_InnerCircle', v.Name), 'Circle',
{
Radius = 7;
Position = BasePosition;
Color = Colors.Secondary.Dark;
Filled = true;
Visible = v.Value;
});
Menu:AddMenuInstance(Format('%s_Text', v.Name), 'Text', {
Text = v.Text;
Size = 20;
Position = BasePosition + V2New(20, -10);
Visible = true;
Color = Colors.Secondary.Light;
Transparency= 1;
Outline = true;
OutlineOpacity = 0.5;
});
end
end)
GetTableData(Options)(function(i, v) -- just to make sure certain things are
drawn before or after others, too lazy to actually sort table
if typeof(v.Value) == 'number' then
CPos = CPos + 25;
local BaseSize = V2New(BaseSize.X, 30);
local BasePosition =
shared.MenuDrawingData.Instances.Filling.Position + V2New(0, CPos - 10);
local Line =
Menu:AddMenuInstance(Format('%s_SliderLine', v.Name), 'Square', {
Transparency = 1;
Color = Colors.Secondary.Light;
-- Thickness = 3;
Filled = true;
Visible = true;
Position = BasePosition + V2New(15, -5);
Size = BaseSize - V2New(30, 10);
Transparency = 0.5;
});
local Slider =
Menu:AddMenuInstance(Format('%s_Slider', v.Name), 'Square', {
Visible = true;
Filled = true;
Color = Colors.Primary.Dark;
Size = V2New(5, Line.Size.Y);
Transparency = 0.5;
});
local Text = Menu:AddMenuInstance(Format('%s_Text',
v.Name), 'Text', {
Text = v.Text;
Size = 20;
Center = true;
Transparency = 1;
Outline = true;
OutlineOpacity = 0.5;
Visible = true;
Color = Colors.White;
}); Text.Position = Line.Position + (Line.Size / 2) - V2New(0,
Text.TextBounds.Y / 1.75);
local AMT =
Menu:AddMenuInstance(Format('%s_AmountText', v.Name), 'Text', {
Text = tostring(v.Value);
Size = 22;
Center = true;
Transparency = 1;
Outline = true;
OutlineOpacity = 0.5;
Visible = true;
Color = Colors.White;
Position = Text.Position;
});
Dummy:GetPropertyChangedSignal'Value':Connect(function()
Text.Transparency = Dummy.Value;
-- Text.OutlineTransparency = 1 - Dummy.Value;
AMT.Transparency = 1 - Dummy.Value;
end);
Dummy.Value = 1;
function CSlider:ShowValue(Bool)
self.ShowingValue = Bool;
TweenService:Create(Dummy, TweenInfo.new(0.5,
Enum.EasingStyle.Quart, Enum.EasingDirection.Out), { Value = Bool and 0 or
1 }):Play();
end
Sliders[#Sliders + 1] = CSlider;
v.BaseSize = BaseSize;
v.BasePosition = BasePosition;
-- AMT.Position = BasePosition + V2New(BaseSize.X -
AMT.TextBounds.X - 10, -10)
end
end)
local FirstItem = false;
GetTableData(Options)(function(i, v) -- just to make sure certain things are
drawn before or after others, too lazy to actually sort table
if typeof(v.Value) == 'EnumItem' then
CPos = CPos + (not FirstItem and 30 or 25);
FirstItem = true;
UIButtons[#UIButtons + 1] = {
Option = v;
Instance = Menu:AddMenuInstance(Format('%s_Hitbox',
v.Name), 'Square', {
Size = V2New(BaseSize.X, 20) - V2New(30, 0);
Visible = true;
Transparency= .5;
Position = BasePosition + V2New(15, -10);
Color = Colors.Secondary.Light;
Filled = true;
});
};
local Text = Menu:AddMenuInstance(Format('%s_Text',
v.Name), 'Text', {
Text = v.Text;
Size = 20;
Position = BasePosition + V2New(20, -10);
Visible = true;
Color = Colors.Secondary.Light;
Transparency= 1;
Outline = true;
OutlineOpacity = 0.5;
});
local BindText = Menu:AddMenuInstance(Format('%s_BindText',
v.Name), 'Text', {
Text = tostring(v.Value):match'%w+%.%w+%.(.+)';
Size = 20;
Position = BasePosition;
Visible = true;
Color = Colors.Secondary.Light;
Transparency= 1;
Outline = true;
OutlineOpacity = 0.5;
});
Options[i].BaseSize = BaseSize;
Options[i].BasePosition = BasePosition;
BindText.Position = BasePosition + V2New(BaseSize.X -
BindText.TextBounds.X - 20, -10);
end
end)
GetTableData(Options)(function(i, v) -- just to make sure certain things are
drawn before or after others, too lazy to actually sort table
if typeof(v.Value) == 'function' then
local BaseSize = V2New(BaseSize.X, 30);
local BasePosition =
shared.MenuDrawingData.Instances.Filling.Position + V2New(0, CPos + (25 *
v.AllArgs[4]) - 35);
UIButtons[#UIButtons + 1] = {
Option = v;
Instance = Menu:AddMenuInstance(Format('%s_Hitbox',
v.Name), 'Square', {
Size = V2New(BaseSize.X, 20) - V2New(30, 0);
Visible = true;
Transparency= .5;
Position = BasePosition + V2New(15, -10);
Color = Colors.Secondary.Light;
Filled = true;
});
};
local Text = Menu:AddMenuInstance(Format('%s_Text',
v.Name), 'Text', {
Text = v.Text;
Size = 20;
Position = BasePosition + V2New(20, -10);
Visible = true;
Color = Colors.Secondary.Light;
Transparency= 1;
Outline = true;
OutlineOpacity = 0.5;
});
delay(.1, function()
MenuLoaded = true;
end);
-- this has to be at the bottom cuz proto drawing api doesnt have
zindex :triumph:
Menu:AddMenuInstance('Cursor1', 'Line', {
Visible = false;
Color = Color3.new(1, 0, 0);
Transparency = 1;
Thickness = 2;
});
Menu:AddMenuInstance('Cursor2', 'Line', {
Visible = false;
Color = Color3.new(1, 0, 0);
Transparency = 1;
Thickness = 2;
});
Menu:AddMenuInstance('Cursor3', 'Line', {
Visible = false;
Color = Color3.new(1, 0, 0);
Transparency = 1;
Thickness = 2;
});
end
CreateMenu();
delay(0.1, function()
SubMenu:Show(V2New()); -- Create the submenu
SubMenu:Hide();
end);
shared.UESP_InputChangedCon = UserInputService.InputChanged:Connect(function(input)
if input.UserInputType.Name == 'MouseMovement' and Options.MenuOpen.Value
then
for i, v in pairs(Sliders) do
local Values = {
v.Line.Position.X;
v.Line.Position.Y;
v.Line.Position.X + v.Line.Size.X;
v.Line.Position.Y + v.Line.Size.Y;
};
if MouseHoveringOver(Values) then
v:ShowValue(true);
else
if not MouseHeld then v:ShowValue(false); end
end
end
end
end)
shared.UESP_InputBeganCon = UserInputService.InputBegan:Connect(function(input)
if input.UserInputType.Name == 'MouseButton1' and Options.MenuOpen.Value then
MouseHeld = true;
local Bar = Menu:GetInstance'TopBar';
local Values = {
Bar.Position.X;
Bar.Position.Y;
Bar.Position.X + Bar.Size.X;
Bar.Position.Y + Bar.Size.Y;
}
if MouseHoveringOver(Values) then
DraggingUI = true;
DragOffset = Menu:GetInstance'Main'.Position -
GetMouseLocation();
else
for i, v in pairs(Sliders) do
local Values = {
v.Line.Position.X;
v.Line.Position.Y;
v.Line.Position.X + v.Line.Size.X;
v.Line.Position.Y + v.Line.Size.Y;
-- v.Line.From.X - (v.Slider.Radius);
-- v.Line.From.Y - (v.Slider.Radius);
-- v.Line.To.X + (v.Slider.Radius);
-- v.Line.To.Y + (v.Slider.Radius);
};
if MouseHoveringOver(Values) then
DraggingWhat = v;
Dragging = true;
break
end
end
local Values = {
v.Instance.Position.X;
v.Instance.Position.Y;
v.Instance.Position.X + v.Instance.Size.X;
v.Instance.Position.Y + v.Instance.Size.Y;
};
if MouseHoveringOver(Values) then
v.Option();
IgnoreOtherInput = true;
break -- prevent clicking 2 options
end
end
for i, v in pairs(Sliders) do
if IgnoreOtherInput then break end
local Values = {
v.Line.Position.X;
v.Line.Position.Y;
v.Line.Position.X + v.Line.Size.X;
v.Line.Position.Y + v.Line.Size.Y;
};
if not MouseHoveringOver(Values) then
v:ShowValue(false);
end
end
end
elseif input.UserInputType.Name == 'MouseButton2' and Options.MenuOpen.Value
and not DragTracerPosition then
local Values = {
TracerPosition.X - 10;
TracerPosition.Y - 10;
TracerPosition.X + 10;
TracerPosition.Y + 10;
}
if MouseHoveringOver(Values) then
DragTracerPosition = false;
TracerPosition = V2New(Camera.ViewportSize.X / 2,
Camera.ViewportSize.Y - 135);
end
elseif input.UserInputType.Name == 'Keyboard' then
if Binding then
BindedKey = input.KeyCode;
Binding = false;
elseif input.KeyCode == Options.MenuKey.Value or (input.KeyCode ==
Enum.KeyCode.Home and UserInputService:IsKeyDown(Enum.KeyCode.LeftControl)) then
Options.MenuOpen();
elseif input.KeyCode == Options.ToggleKey.Value then
Options.Enabled();
elseif input.KeyCode.Name == 'F1' and
UserInputService:IsMouseButtonPressed(1) and shared.am_ic3 then -- hehe hiden
spectate feature cuz why not
local HD, LPlayer, LCharacter = 0.95;
if Head then
local Distance = (Camera.CFrame.Position -
Head.Position).Magnitude;
if Distance > Options.MaxDistance.Value then
continue; end
local DP = Direction:Dot(Unit);
if DP > HD then
HD = DP;
LPlayer = Player;
LCharacter = Character;
end
end
end
end
workspace.CurrentCamera:GetPropertyChangedSignal'ViewportSize':Connect(function()
TracerPosition = V2New(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y
- 135);
end);
end
CameraCon();
table.clear(RayIgnoreList)
table.insert(RayIgnoreList, LocalPlayer.Character)
table.insert(RayIgnoreList, Camera)
return Pass;
end
CheckTeam = CustomTeam.CheckTeam;
end
Data.Instance = v.Instance;
Data.Instances['OutlineTracer'] =
Data.Instances['OutlineTracer'] or NewDrawing'Line'{
Transparency = 0.75;
Thickness = 5;
Color = Color3.new(0.1, 0.1, 0.1);
}
Data.Instances['Tracer'] = Data.Instances['Tracer'] or
NewDrawing'Line'{
Transparency = 1;
Thickness = 2;
}
Data.Instances['NameTag'] = Data.Instances['NameTag'] or
NewDrawing'Text'{
Size = Options.TextSize.Value;
Center = true;
Outline = Options.TextOutline.Value;
Visible = true;
};
Data.Instances['DistanceTag'] =
Data.Instances['DistanceTag'] or NewDrawing'Text'{
Size = Options.TextSize.Value - 1;
Center = true;
Outline = Options.TextOutline.Value;
Visible = true;
};
if Pass then
local ScreenPosition, Vis =
WorldToViewport(v.Instance.Position);
local Color = v.Color;
local OPos =
Camera.CFrame:pointToObjectSpace(v.Instance.Position);
local Position =
WorldToViewport(Camera.CFrame:pointToWorldSpace(OPos));
if Options.ShowTracers.Value then
Tracer.Transparency = math.clamp(Distance /
200, 0.45, 0.8);
Tracer.Visible = true;
Tracer.From = TracerPosition;
Tracer.To = V2New(Position.X,
Position.Y);
Tracer.Color = Color;
OutlineTracer.Visible = true;
OutlineTracer.Transparency =
Tracer.Transparency - 0.1;
OutlineTracer.From = Tracer.From;
OutlineTracer.To = Tracer.To;
OutlineTracer.Color = Color3.new(0.1, 0.1,
0.1);
else
Tracer.Visible = false;
OutlineTracer.Visible = false;
end
if Options.ShowName.Value then
LocalPlayer.NameDisplayDistance = 0;
NameTag.Visible = true;
NameTag.Text = v.Text;
NameTag.Size =
Options.TextSize.Value;
NameTag.Outline =
Options.TextOutline.Value;
NameTag.Position =
V2New(ScreenPositionUpper.X, ScreenPositionUpper.Y);
NameTag.Color = Color;
if Drawing.Fonts and shared.am_ic3 then
-- CURRENTLY SYNAPSE ONLY :MEGAHOLY:
NameTag.Font =
Drawing.Fonts.Monospace;
end
else
LocalPlayer.NameDisplayDistance = 100;
NameTag.Visible = false;
end
if Options.ShowDistance.Value or
Options.ShowHealth.Value then
DistanceTag.Visible = true;
DistanceTag.Size =
Options.TextSize.Value - 1;
DistanceTag.Outline =
Options.TextOutline.Value;
DistanceTag.Color = Color3.new(1, 1,
1);
if Drawing.Fonts and shared.am_ic3 then
-- CURRENTLY SYNAPSE ONLY :MEGAHOLY:
NameTag.Font =
Drawing.Fonts.Monospace;
end
if Options.ShowDistance.Value then
Str = Str .. Format('[%d] ',
Distance);
end
DistanceTag.Text = Str;
DistanceTag.Position =
V2New(ScreenPositionUpper.X, ScreenPositionUpper.Y) + V2New(0,
NameTag.TextBounds.Y);
else
DistanceTag.Visible = false;
end
else
NameTag.Visible = false;
DistanceTag.Visible = false;
end
else
NameTag.Visible = false;
DistanceTag.Visible = false;
Tracer.Visible = false;
OutlineTracer.Visible = false;
end
Data.Instances['NameTag'] = NameTag;
Data.Instances['DistanceTag'] = DistanceTag;
Data.Instances['Tracer'] = Tracer;
Data.Instances['OutlineTracer'] = OutlineTracer;
shared.InstanceData[v.Instance:GetDebugId()] = Data;
end
end
for i, v in pairs(Players:GetPlayers()) do
local Data = shared.InstanceData[v.Name] or { Instances = {}; };
Data.Instances['Box'] = Data.Instances['Box'] or
LineBox:Create{Thickness = 4};
Data.Instances['OutlineTracer'] = Data.Instances['OutlineTracer']
or NewDrawing'Line'{
Transparency = 1;
Thickness = 3;
Color = Color3.new(0.1, 0.1, 0.1);
}
Data.Instances['Tracer'] = Data.Instances['Tracer'] or
NewDrawing'Line'{
Transparency = 1;
Thickness = 1;
}
Data.Instances['HeadDot'] = Data.Instances['HeadDot'] or
NewDrawing'Circle'{
Filled = true;
NumSides = 30;
}
Data.Instances['NameTag'] = Data.Instances['NameTag'] or
NewDrawing'Text'{
Size = Options.TextSize.Value;
Center = true;
Outline = Options.TextOutline.Value;
OutlineOpacity = 1;
Visible = true;
};
Data.Instances['DistanceHealthTag'] =
Data.Instances['DistanceHealthTag'] or NewDrawing'Text'{
Size = Options.TextSize.Value - 1;
Center = true;
Outline = Options.TextOutline.Value;
OutlineOpacity = 1;
Visible = true;
};
local Position =
WorldToViewport(Camera.CFrame:pointToWorldSpace(OPos));
if Options.ShowTracers.Value then
if TracerPosition.X >= Camera.ViewportSize.X or
TracerPosition.Y >= Camera.ViewportSize.Y or TracerPosition.X < 0 or
TracerPosition.Y < 0 then
TracerPosition =
V2New(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y - 135);
end
Tracer.Visible = true;
Tracer.Transparency = math.clamp(1 -
(Distance / 200), 0.25, 0.75);
Tracer.From = TracerPosition;
Tracer.To = V2New(Position.X,
Position.Y);
Tracer.Color = Color;
OutlineTracer.From = Tracer.From;
OutlineTracer.To = Tracer.To;
OutlineTracer.Transparency =
Tracer.Transparency - 0.15;
OutlineTracer.Visible = true;
else
Tracer.Visible = false;
OutlineTracer.Visible = false;
end
if Options.ShowName.Value then
NameTag.Visible = true;
NameTag.Text = v.Name ..
(CustomPlayerTag and CustomPlayerTag(v) or '');
NameTag.Size =
Options.TextSize.Value;
NameTag.Outline =
Options.TextOutline.Value;
NameTag.Position =
V2New(ScreenPositionUpper.X, ScreenPositionUpper.Y) - V2New(0,
NameTag.TextBounds.Y);
NameTag.Color = Color;
NameTag.Color = Color;
NameTag.OutlineColor= Color3.new(0.05,
0.05, 0.05);
NameTag.Transparency= 0.85;
if Drawing.Fonts and shared.am_ic3 then
-- CURRENTLY SYNAPSE ONLY :MEGAHOLY:
NameTag.Font =
Drawing.Fonts.Monospace;
end
else
NameTag.Visible = false;
end
if Options.ShowDistance.Value or
Options.ShowHealth.Value then
DistanceTag.Visible = true;
DistanceTag.Size =
Options.TextSize.Value - 1;
DistanceTag.Outline =
Options.TextOutline.Value;
DistanceTag.Color = Color3.new(1, 1,
1);
DistanceTag.Transparency= 0.85;
if Drawing.Fonts and shared.am_ic3 then
-- CURRENTLY SYNAPSE ONLY :MEGAHOLY:
NameTag.Font =
Drawing.Fonts.Monospace;
end
if Options.ShowDistance.Value then
Str = Str .. Format('[%d] ',
Distance);
end
if Options.ShowHealth.Value then
if typeof(Humanoid) == 'Instance'
then
Str = Str .. Format('[%d/%d]
[%s%%]', Humanoid.Health, Humanoid.MaxHealth, math.floor(Humanoid.Health /
Humanoid.MaxHealth * 100));
elseif type(GetHealth) ==
'function' then
local health, maxHealth =
GetHealth(v)
if type(health) == 'number'
and type(maxHealth) == 'number' then
Str = Str ..
Format('[%d/%d] [%s%%]', health, maxHealth, math.floor(health / maxHealth * 100))
end
end
end
DistanceTag.Text = Str;
DistanceTag.OutlineColor =
Color3.new(0.05, 0.05, 0.05);
DistanceTag.Position = (NameTag.Visible
and NameTag.Position + V2New(0, NameTag.TextBounds.Y) or
V2New(ScreenPositionUpper.X, ScreenPositionUpper.Y));
else
DistanceTag.Visible = false;
end
if Options.ShowDot.Value and Vis then
local Top =
WorldToViewport((Head.CFrame * CFrame.new(0, Scale, 0)).Position);
local Bottom =
WorldToViewport((Head.CFrame * CFrame.new(0, -Scale, 0)).Position);
local Radius = math.abs((Top -
Bottom).Y);
HeadDot.Visible = true;
HeadDot.Color = Color;
HeadDot.Position =
V2New(ScreenPosition.X, ScreenPosition.Y);
HeadDot.Radius = Radius;
else
HeadDot.Visible = false;
end
if Options.ShowBoxes.Value and Vis and
HumanoidRootPart then
local Body = {
Head;
Character:FindFirstChild'Left Leg'
or Character:FindFirstChild'LeftLowerLeg';
Character:FindFirstChild'Right Leg'
or Character:FindFirstChild'RightLowerLeg';
Character:FindFirstChild'Left Arm'
or Character:FindFirstChild'LeftLowerArm';
Character:FindFirstChild'Right Arm'
or Character:FindFirstChild'RightLowerArm';
}
Box:Update(HumanoidRootPart.CFrame,
V3New(2, 3, 1) * (Scale * 2), Color, nil, shared.am_ic3 and Body);
else
Box:SetVisible(false);
end
else
NameTag.Visible = false;
DistanceTag.Visible = false;
HeadDot.Visible = false;
Box:SetVisible(false);
end
else
NameTag.Visible = false;
DistanceTag.Visible = false;
HeadDot.Visible = false;
Tracer.Visible = false;
OutlineTracer.Visible = false;
Box:SetVisible(false);
end
else
NameTag.Visible = false;
DistanceTag.Visible = false;
HeadDot.Visible = false;
Tracer.Visible = false;
OutlineTracer.Visible = false;
Box:SetVisible(false);
end
shared.InstanceData[v.Name] = Data;
end
end
end
local LastInvalidCheck = 0;
for i, v in pairs(shared.InstanceData) do
if not Players:FindFirstChild(tostring(i)) then
if not shared.InstanceData[i].DontDelete then
GetTableData(v.Instances)(function(i, obj)
obj.Visible = false;
obj:Remove();
v.Instances[i] = nil;
end)
shared.InstanceData[i] = nil;
else
if shared.InstanceData[i].Instance == nil or
shared.InstanceData[i].Instance.Parent == nil then
GetTableData(v.Instances)(function(i, obj)
obj.Visible = false;
obj:Remove();
v.Instances[i] = nil;
end)
shared.InstanceData[i] = nil;
end
end
end
end
end
local CX = Menu:GetInstance'CrosshairX';
local CY = Menu:GetInstance'CrosshairY';
if Options.Crosshair.Value then
CX.Visible = true;
CY.Visible = true;
local Values = {
MainInstance.Position.X;
MainInstance.Position.Y;
MainInstance.Position.X + MainInstance.Size.X;
MainInstance.Position.Y + MainInstance.Size.Y;
};
Menu:UpdateMenuInstance'Cursor1'{
Visible = true;
From = V2New(MLocation.x, MLocation.y);
To = V2New(MLocation.x + 5, MLocation.y + 6);
}
Menu:UpdateMenuInstance'Cursor2'{
Visible = true;
From = V2New(MLocation.x, MLocation.y);
To = V2New(MLocation.x, MLocation.y + 8);
}
Menu:UpdateMenuInstance'Cursor3'{
Visible = true;
From = V2New(MLocation.x, MLocation.y + 6);
To = V2New(MLocation.x + 5, MLocation.y + 5);
}
else
if Debounce.CursorVis then
Debounce.CursorVis = false;
Menu:UpdateMenuInstance'Cursor1'{Visible = false};
Menu:UpdateMenuInstance'Cursor2'{Visible = false};
Menu:UpdateMenuInstance'Cursor3'{Visible = false};
end
end
if MouseHeld then
local MousePos = GetMouseLocation();
if Dragging then
DraggingWhat.Slider.Position = V2New(math.clamp(MLocation.X
- DraggingWhat.Slider.Size.X / 2, DraggingWhat.Line.Position.X,
DraggingWhat.Line.Position.X + DraggingWhat.Line.Size.X -
DraggingWhat.Slider.Size.X), DraggingWhat.Slider.Position.Y);
local Percent = (DraggingWhat.Slider.Position.X -
DraggingWhat.Line.Position.X) / ((DraggingWhat.Line.Position.X +
DraggingWhat.Line.Size.X - DraggingWhat.Line.Position.X) -
DraggingWhat.Slider.Size.X);
local Value = CalculateValue(DraggingWhat.Min,
DraggingWhat.Max, Percent);
DraggingWhat.Option(Value);
elseif DraggingUI then
Debounce.UIDrag = true;
local Main = Menu:GetInstance'Main';
Main.Position = MousePos + DragOffset;
elseif DragTracerPosition then
TracerPosition = MousePos;
end
else
Dragging = false;
DragTracerPosition = false;
if DraggingUI and Debounce.UIDrag then
Debounce.UIDrag = false;
DraggingUI = false;
CreateMenu(Menu:GetInstance'Main'.Position);
end
end
if not Debounce.Menu then
Debounce.Menu = true;
ToggleMenu();
end
elseif Debounce.Menu and not Options.MenuOpen.Value then
Debounce.Menu = false;
ToggleMenu();
end
end
RunService:UnbindFromRenderStep(GetDataName);
RunService:UnbindFromRenderStep(UpdateName);