PlayerEsp Lua
PlayerEsp Lua
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] = {
CustomESP = function()
if type(shared.PF_Replication) ~= 'table' then
local lastScan = shared.pfReplicationScan
return
end
Player.Character = nil;
end
end,
GetHealth = function(Player)
if type(shared.pfHud) ~= 'table' then
return false
end
return shared.pfHud:getplayerhealth(Player)
end,
GetAliveState = function(Player)
if type(shared.pfHud) ~= 'table' then
local lastScan = shared.pfHudScan
local gc = getgc(true)
for i = 1, #gc do
local gcObject = gc[i];
if type(gcObject) == 'table' and
type(rawget(gcObject, 'getplayerhealth')) == 'function' then
shared.pfHud = gcObject;
break
end
end
end
return
end
return shared.pfHud:isplayeralive(Player)
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 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 not IsStringEmpty(Name) then Name = Name .. ']'; 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;
};
return Name;
end;
};
};
function GetCharacter(Player)
return Player.Character or (CustomCharacter and CustomCharacter(Player));
end
function GetMouseLocation()
return UserInputService:GetMouseLocation();
end
function MouseHoveringOver(Values)
local X1, Y1, X2, Y2 = Values[1], Values[2], Values[3], Values[4]
local MLocation = GetMouseLocation();
return (MLocation.x >= X1 and MLocation.x <= (X1 + (X2 - X1))) and
(MLocation.y >= Y1 and MLocation.y <= (Y1 + (Y2 - Y1)));
end
function GetTableData(t) -- basically table.foreach i dont even know why i made
this
if typeof(t) ~= 'table' then return end
return setmetatable(t, {
__call = function(t, func)
if typeof(func) ~= 'function' then return end;
for i, v in pairs(t) do
pcall(func, i, v);
end
end;
});
end
local function Format(format, ...)
return string.format(format, ...);
end
function CalculateValue(Min, Max, Percent)
return Min + math.floor(((Max - Min) * Percent) + .5);
end
function NewDrawing(InstanceName)
local Instance = Drawing.new(InstanceName);
-- pcall(Set, Instance, 'OutlineOpacity', 0.8)
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);
return Box;
end
local Colors = {
White = FromHex'ffffff';
Primary = {
Main = FromHex'424242';
Light = FromHex'6d6d6d';
Dark = FromHex'1b1b1b';
};
Secondary = {
Main = FromHex'e0e0e0';
Light = FromHex'ffffff';
Dark = 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
print(Drawing, IsSynapse)
-- 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
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
spawn(function()
Images.Ring = 'https://i.imgur.com/q4qx26f.png';
Images.Overlay = 'https://i.imgur.com/gOCxbsR.png';
end)
Picker.ColorChanged = Signal.new();
function Picker: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 Picker:Dispose()
self.Drawings(false);
self.UpdatePosition = nil;
self.HandleInput = nil;
Connections:DisconnectAll(); -- scuffed tbh
end
ColorPicker.Loading = false;
Picker.Drawings = Drawings;
return Picker;
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 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;
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();
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 = (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);