
Key Required

-- hello naix 👋
-- again leak
-- luv you naix
-- no hating
local disableImageLoading = false
local oldWatermark = false
if getgenv().vaderhaxxpaste then
return
end
getgenv().vaderhaxxpaste = {}
getgenv().vaderhaxxpaste.loaded = false
local _Instancenew = clonefunction(Instance.new)
local _TweenInfonew = clonefunction(TweenInfo.new)
local _GetService = clonefunction(game.GetService)
local _IsLoaded = clonefunction(game.IsLoaded)
local _Clone = clonefunction(game.Clone)
local _Destroy = clonefunction(game.Destroy)
local _GetChildren = clonefunction(game.GetChildren)
local _GetDescendants = clonefunction(game.GetDescendants)
local _IsDescendantOf = clonefunction(game.IsDescendantOf)
local _IsA = clonefunction(game.IsA)
local _FindFirstChild = clonefunction(game.FindFirstChild)
local _FindFirstChildOfClass = clonefunction(game.FindFirstChildOfClass)
local _HttpGet = clonefunction(game.HttpGet)
local _GetPropertyChangedSignal = clonefunction(game.GetPropertyChangedSignal)
local _GetAttribute = clonefunction(game.GetAttribute)
local _GetPlayers = clonefunction(_GetService(game, "Players").GetPlayers)
local _GetPlayerFromCharacter = clonefunction(_GetService(game, "Players").GetPlayerFromCharacter)
local _GetValue = clonefunction(_GetService(game, "Stats").Network.ServerStatsItem['Data Ping'].GetValue)
local _GetMouseLocation = clonefunction(_GetService(game, "UserInputService").GetMouseLocation)
local _IsKeyDown = clonefunction(_GetService(game, "UserInputService").IsKeyDown)
local _GetMouse = clonefunction(_GetService(game, "Players").LocalPlayer.GetMouse)
local _Kick = clonefunction(_GetService(game, "Players").LocalPlayer.Kick)
local _CFrameNew = clonefunction(CFrame.new)
local _CFrameAngles = clonefunction(CFrame.Angles)
local _CFrameLookAt = clonefunction(CFrame.lookAt)
local _CFrameLerp = clonefunction(_CFrameNew().Lerp)
local _CFramePointToObjectSpace = clonefunction(_CFrameNew().PointToObjectSpace)
local _CFrameToEulerAnglesXYZ = clonefunction(_CFrameNew().ToEulerAnglesXYZ)
local _CFrameToOrientation = clonefunction(_CFrameNew().ToOrientation)
local _Vector3New = clonefunction(Vector3.new)
local _Vector3Lerp = clonefunction(_Vector3New().Lerp)
local _Vector2New = clonefunction(Vector2.new)
local _UDim2New = clonefunction(UDim2.new)
local _UDim2fromOffset = clonefunction(UDim2.fromOffset)
local _UDimNew = clonefunction(UDim.new)
local _Color3New = clonefunction(Color3.new)
local _Color3FromRGB = clonefunction(Color3.fromRGB)
local _Color3FromHSV = clonefunction(Color3.fromHSV)
local _Color3ToHSV = clonefunction(Color3.toHSV)
local _ToHex = clonefunction(_Color3New().ToHex)
local _FromHex = clonefunction(Color3.fromHex)
local _ColorSequenceNew = clonefunction(ColorSequence.new)
local _ColorSequenceKeypointNew = clonefunction(ColorSequenceKeypoint.new)
local _NumberSequenceNew = clonefunction(NumberSequence.new)
local _NumberSequenceKeypointNew = clonefunction(NumberSequenceKeypoint.new)
local _RayNew = clonefunction(Ray.new)
local _RaycastParamsNew = clonefunction(RaycastParams.new)
local _Raycast = clonefunction(workspace.Raycast)
local _StringFormat = clonefunction(string.format)
local _StringUpper = clonefunction(string.upper)
local _StringLower = clonefunction(string.lower)
local _StringFind = clonefunction(string.find)
local _StringLen = clonefunction(string.len)
local _StringGsub = clonefunction(string.gsub)
local _StringSub = clonefunction(string.sub)
local _StringSplit = clonefunction(string.split)
local _tostring = clonefunction(tostring)
local _TableInsert = clonefunction(table.insert)
local _TableRemove = clonefunction(table.remove)
local _TableFind = clonefunction(table.find)
local _TableConcat = clonefunction(table.concat)
local _TableSort = clonefunction(table.sort)
local _TableUnpack = clonefunction(table.unpack)
local _Select = clonefunction(select)
local _MathClamp = clonefunction(math.clamp)
local _MathAbs = clonefunction(math.abs)
local _MathRandom = clonefunction(math.random)
local _MathRad = clonefunction(math.rad)
local _MathFloor = clonefunction(math.floor)
local _MathMax = clonefunction(math.max)
local _MathMin = clonefunction(math.min)
local _MathSin = clonefunction(math.sin)
local _MathCos = clonefunction(math.cos)
local _MathDeg = clonefunction(math.deg)
local _MathAtan2 = clonefunction(math.atan2)
local _Materials = Enum.Material
local _MathLerp = function(a, b, t)
return a + (b - a) * t
end
local _tonumber = clonefunction(tonumber)
local _DebugTraceback = clonefunction(debug.traceback)
local _Tick = clonefunction(tick)
local _OsDate = clonefunction(os.date)
local _OsTime = clonefunction(os.time)
local _WorldToViewportPoint = clonefunction(_Instancenew("Camera").WorldToViewportPoint)
local _WorldToScreenPoint = clonefunction(_Instancenew("Camera").WorldToScreenPoint)
local _ChangeState = clonefunction(_Instancenew("Humanoid").ChangeState)
local _Require = clonefunction(require)
local _Type = clonefunction(type)
local _Typeof = clonefunction(typeof)
local _CoroutineWrap = clonefunction(coroutine.wrap)
local _TaskWait = clonefunction(task.wait)
local _Pcall = clonefunction(pcall)
local _Wait = clonefunction(wait)
local _TaskSpawn = clonefunction(task.spawn)
-- Core Vars
local Debris = cloneref(_GetService(game,"Debris"))
local HttpService = cloneref(_GetService(game,"HttpService"))
local InputService = cloneref(_GetService(game,"UserInputService"))
local replicatedStorage = cloneref(_GetService(game,"ReplicatedStorage"))
local Stats = cloneref(_GetService(game, "Stats"))
local TextService = cloneref(_GetService(game,"TextService"))
local Teams = cloneref(_GetService(game,"Teams"))
local Players = cloneref(_GetService(game,"Players"))
local RunService = cloneref(_GetService(game,"RunService"))
local TweenService = cloneref(_GetService(game,"TweenService"))
local Lighting = cloneref(_GetService(game,"Lighting"))
local RenderStepped = RunService.RenderStepped
local LocalPlayer = Players.LocalPlayer
local camera = cloneref(workspace.CurrentCamera)
local viewportSize = camera.ViewportSize
local Mouse = _GetMouse(LocalPlayer)
local SoundService = cloneref(_GetService(game,"SoundService"))
local CoreGui = cloneref(_GetService(game,"CoreGui"))
local spring = loadstring(_HttpGet(game, "https://raw.githubusercontent.com/Quenty/NevermoreEngine/5a429e871d54646ba54011c18321e77afa76d657/Modules/Shared/Physics/Spring.lua"))()
local Signaling = loadstring(_HttpGet(game, "https://raw.githubusercontent.com/Quenty/NevermoreEngine/version2/Modules/Shared/Events/Signal.lua"))()
local Events = replicatedStorage:WaitForChild("Events", 1/0)
local HitPart = Events:WaitForChild("HitPart", 1/0)
local playerSpawned = Signaling.new()
local playerDied = Signaling.new()
local Crosshairs = LocalPlayer.PlayerGui.GUI.Crosshairs
local utilities = {}
local Drawings = {}
local uilibrary = {}
local encryption = {}
local base64 = {}
local json = {}
do -- base 64 lib
local function extract( v, from, width )
local w = 0
local flag = 2^from
for i = 0, width-1 do
local flag2 = flag + flag
if v % flag2 >= flag then
w = w + 2^i
end
flag = flag2
end
return w
end
function base64.makeencoder( s62, s63, spad )
local encoder = {}
for b64code, char in pairs{[0]='A','B','C','D','E','F','G','H','I','J',
'K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y',
'Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n',
'o','p','q','r','s','t','u','v','w','x','y','z','0','1','2',
'3','4','5','6','7','8','9',s62 or '+',s63 or'/',spad or'='} do
encoder[b64code] = char:byte()
end
return encoder
end
function base64.makedecoder( s62, s63, spad )
local decoder = {}
for b64code, charcode in pairs( base64.makeencoder( s62, s63, spad )) do
decoder[charcode] = b64code
end
return decoder
end
local DEFAULT_ENCODER = base64.makeencoder()
local DEFAULT_DECODER = base64.makedecoder()
local char, concat = schar, tconcat
function base64.encode( str, encoder, usecaching )
encoder = encoder or DEFAULT_ENCODER
local t, k, n = {}, 1, #str
local lastn = n % 3
local cache = {}
for i = 1, n-lastn, 3 do
local a, b, c = str:byte( i, i+2 )
local v = a*0x10000 + b*0x100 + c
local s
if usecaching then
s = cache[v]
if not s then
s = string.char(encoder[extract(v,18,6)], encoder[extract(v,12,6)], encoder[extract(v,6,6)], encoder[extract(v,0,6)])
cache[v] = s
end
else
s = string.char(encoder[extract(v,18,6)], encoder[extract(v,12,6)], encoder[extract(v,6,6)], encoder[extract(v,0,6)])
end
t[k] = s
k = k + 1
end
if lastn == 2 then
local a, b = str:byte( n-1, n )
local v = a*0x10000 + b*0x100
t[k] = string.char(encoder[extract(v,18,6)], encoder[extract(v,12,6)], encoder[extract(v,6,6)], encoder[64])
elseif lastn == 1 then
local v = str:byte( n )*0x10000
t[k] = string.char(encoder[extract(v,18,6)], encoder[extract(v,12,6)], encoder[64], encoder[64])
end
return _TableConcat( t )
end
function base64.decode( b64, decoder, usecaching )
local decoder = decoder or DEFAULT_DECODER
local pattern = '[^%w%+%/%=]'
if decoder then
local s62, s63
for charcode, b64code in pairs( decoder ) do
if b64code == 62 then s62 = charcode
elseif b64code == 63 then s63 = charcode
end
end
pattern = ('[^%%w%%%s%%%s%%=]'):format( string.char(s62), string.char(s63) )
end
b64 = b64:gsub( pattern, '' )
local cache = usecaching and {}
local t, k = {}, 1
local n = #b64
local padding = b64:sub(-2) == '==' and 2 or b64:sub(-1) == '=' and 1 or 0
for i = 1, padding > 0 and n-4 or n, 4 do
local a, b, c, d = b64:byte( i, i+3 )
local s
if usecaching then
local v0 = a*0x1000000 + b*0x10000 + c*0x100 + d
s = cache[v0]
if not s then
local v = decoder[a]*0x40000 + decoder[b]*0x1000 + decoder[c]*0x40 + decoder[d]
s = string.char( extract(v,16,8), extract(v,8,8), extract(v,0,8))
cache[v0] = s
end
else
local v = decoder[a]*0x40000 + decoder[b]*0x1000 + decoder[c]*0x40 + decoder[d]
s = string.char( extract(v,16,8), extract(v,8,8), extract(v,0,8))
end
t[k] = s
k = k + 1
end
if padding == 1 then
local a, b, c = b64:byte( n-3, n-1 )
local v = decoder[a]*0x40000 + decoder[b]*0x1000 + decoder[c]*0x40
t[k] = string.char( extract(v,16,8), extract(v,8,8))
elseif padding == 2 then
local a, b = b64:byte( n-3, n-2 )
local v = decoder[a]*0x40000 + decoder[b]*0x1000
t[k] = string.char( extract(v,16,8))
end
return _TableConcat( t )
end
end
do -- json lib
local encode
local escape_char_map = {
[ "\\" ] = "\\",
[ "\"" ] = "\"",
[ "\b" ] = "b",
[ "\f" ] = "f",
[ "\n" ] = "n",
[ "\r" ] = "r",
[ "\t" ] = "t",
}
local escape_char_map_inv = { [ "/" ] = "/" }
for k, v in pairs(escape_char_map) do
escape_char_map_inv[v] = k
end
local function escape_char(c)
return "\\" .. (escape_char_map[c] or _StringFormat("u%04x", c:byte()))
end
local function encode_nil(val)
return "null"
end
local function encode_table(val, stack)
local res = {}
stack = stack or {}
-- Circular reference?
if stack[val] then error("circular reference") end
stack[val] = true
if rawget(val, 1) ~= nil or next(val) == nil then
-- Treat as array -- check keys are valid and it is not sparse
local n = 0
for k in pairs(val) do
if _Type(k) ~= "number" then
error("invalid table: mixed or invalid key types")
end
n = n + 1
end
if n ~= #val then
error("invalid table: sparse array")
end
-- Encode
for i, v in ipairs(val) do
_TableInsert(res, encode(v, stack))
end
stack[val] = nil
return "[" .. _TableConcat(res, ",") .. "]"
else
-- Treat as an object
for k, v in pairs(val) do
if _Type(k) ~= "string" then
error("invalid table: mixed or invalid key types")
end
_TableInsert(res, encode(k, stack) .. ":" .. encode(v, stack))
end
stack[val] = nil
return "{" .. _TableConcat(res, ",") .. "}"
end
end
local function encode_string(val)
return '"' .. val:gsub('[%z\1-\31\\"]', escape_char) .. '"'
end
local function encode_number(val)
-- Check for NaN, -inf and inf
if val ~= val or val <= -math.huge or val >= math.huge then
error("unexpected number value '" .. _tostring(val) .. "'")
end
return _StringFormat("%.14g", val)
end
local type_func_map = {
[ "nil" ] = encode_nil,
[ "table" ] = encode_table,
[ "string" ] = encode_string,
[ "number" ] = encode_number,
[ "boolean" ] = _tostring,
}
encode = function(val, stack)
local t = _Type(val)
local f = type_func_map[t]
if f then
return f(val, stack)
end
error("unexpected type '" .. t .. "'")
end
function json.encode(val)
return ( encode(val) )
end
local parse
local function create_set(...)
local res = {}
for i = 1, _Select("#", ...) do
res[ _Select(i, ...) ] = true
end
return res
end
local space_chars = create_set(" ", "\t", "\r", "\n")
local delim_chars = create_set(" ", "\t", "\r", "\n", "]", "}", ",")
local escape_chars = create_set("\\", "/", '"', "b", "f", "n", "r", "t", "u")
local literals = create_set("true", "false", "null")
local literal_map = {
[ "true" ] = true,
[ "false" ] = false,
[ "null" ] = nil,
}
local function next_char(str, idx, set, negate)
for i = idx, #str do
if set[str:sub(i, i)] ~= negate then
return i
end
end
return #str + 1
end
local function decode_error(str, idx, msg)
local line_count = 1
local col_count = 1
for i = 1, idx - 1 do
col_count = col_count + 1
if str:sub(i, i) == "\n" then
line_count = line_count + 1
col_count = 1
end
end
error( _StringFormat("%s at line %d col %d", msg, line_count, col_count) )
end
local function codepoint_to_utf8(n)
-- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=iws-appendixa
local f = mfloor
if n <= 0x7f then
return string.char(n)
elseif n <= 0x7ff then
return string.char(f(n / 64) + 192, n % 64 + 128)
elseif n <= 0xffff then
return string.char(f(n / 4096) + 224, f(n % 4096 / 64) + 128, n % 64 + 128)
elseif n <= 0x10ffff then
return string.char(f(n / 262144) + 240, f(n % 262144 / 4096) + 128,
f(n % 4096 / 64) + 128, n % 64 + 128)
end
error( sformat("invalid unicode codepoint '%x'", n) )
end
local function parse_unicode_escape(s)
local n1 = _tonumber( s:sub(1, 4), 16 )
local n2 = _tonumber( s:sub(7, 10), 16 )
-- Surrogate pair?
if n2 then
return codepoint_to_utf8((n1 - 0xd800) * 0x400 + (n2 - 0xdc00) + 0x10000)
else
return codepoint_to_utf8(n1)
end
end
local function parse_string(str, i)
local res = ""
local j = i + 1
local k = j
while j <= #str do
local x = str:byte(j)
if x < 32 then
decode_error(str, j, "control character in string")
elseif x == 92 then -- `\`: Escape
res = res .. str:sub(k, j - 1)
j = j + 1
local c = str:sub(j, j)
if c == "u" then
local hex = str:match("^[dD][89aAbB]%x%x\\u%x%x%x%x", j + 1)
or str:match("^%x%x%x%x", j + 1)
or decode_error(str, j - 1, "invalid unicode escape in string")
res = res .. parse_unicode_escape(hex)
j = j + #hex
else
if not escape_chars[c] then
decode_error(str, j - 1, "invalid escape char '" .. c .. "' in string")
end
res = res .. escape_char_map_inv[c]
end
k = j + 1
elseif x == 34 then -- `"`: End of string
res = res .. str:sub(k, j - 1)
return res, j + 1
end
j = j + 1
end
decode_error(str, i, "expected closing quote for string")
end
local function parse_number(str, i)
local x = next_char(str, i, delim_chars)
local s = str:sub(i, x - 1)
local n = _tonumber(s)
if not n then
decode_error(str, i, "invalid number '" .. s .. "'")
end
return n, x
end
local function parse_literal(str, i)
local x = next_char(str, i, delim_chars)
local word = str:sub(i, x - 1)
if not literals[word] then
decode_error(str, i, "invalid literal '" .. word .. "'")
end
return literal_map[word], x
end
local function parse_array(str, i)
local res = {}
local n = 1
i = i + 1
while 1 do
local x
i = next_char(str, i, space_chars, true)
-- Empty / end of array?
if str:sub(i, i) == "]" then
i = i + 1
break
end
-- Read token
x, i = parse(str, i)
res[n] = x
n = n + 1
-- Next token
i = next_char(str, i, space_chars, true)
local chr = str:sub(i, i)
i = i + 1
if chr == "]" then break end
if chr ~= "," then decode_error(str, i, "expected ']' or ','") end
end
return res, i
end
local function parse_object(str, i)
local res = {}
i = i + 1
while 1 do
local key, val
i = next_char(str, i, space_chars, true)
-- Empty / end of object?
if str:sub(i, i) == "}" then
i = i + 1
break
end
-- Read key
if str:sub(i, i) ~= '"' then
decode_error(str, i, "expected string for key")
end
key, i = parse(str, i)
-- Read ':' delimiter
i = next_char(str, i, space_chars, true)
if str:sub(i, i) ~= ":" then
decode_error(str, i, "expected ':' after key")
end
i = next_char(str, i + 1, space_chars, true)
-- Read value
val, i = parse(str, i)
-- Set
res[key] = val
-- Next token
i = next_char(str, i, space_chars, true)
local chr = str:sub(i, i)
i = i + 1
if chr == "}" then break end
if chr ~= "," then decode_error(str, i, "expected '}' or ','") end
end
return res, i
end
local char_func_map = {
[ '"' ] = parse_string,
[ "0" ] = parse_number,
[ "1" ] = parse_number,
[ "2" ] = parse_number,
[ "3" ] = parse_number,
[ "4" ] = parse_number,
[ "5" ] = parse_number,
[ "6" ] = parse_number,
[ "7" ] = parse_number,
[ "8" ] = parse_number,
[ "9" ] = parse_number,
[ "-" ] = parse_number,
[ "t" ] = parse_literal,
[ "f" ] = parse_literal,
[ "n" ] = parse_literal,
[ "[" ] = parse_array,
[ "{" ] = parse_object,
}
parse = function(str, idx)
local chr = str:sub(idx, idx)
local f = char_func_map[chr]
if f then
return f(str, idx)
end
decode_error(str, idx, "unexpected character '" .. chr .. "'")
end
function json.decode(str)
if _Type(str) ~= "string" then
error("expected argument of type string, got " .. _Type(str))
end
local res, idx = parse(str, next_char(str, 1, space_chars, true))
idx = next_char(str, idx, space_chars, true)
if idx <= #str then
decode_error(str, idx, "trailing garbage")
end
return res
end
end
do
-- ADVANCED ENCRYPTION STANDARD (AES)
-- Implementation of secure symmetric-key encryption specifically in Luau
-- Includes ECB, CBC, PCBC, CFB, OFB and CTR modes without padding.
-- Made by @RobloxGamerPro200007 (verify the original asset)
-- MORE INFORMATION: https://devforum.roblox.com/t/advanced-encryption-standard-in-luau/2009120
-- SUBSTITUTION BOXES
local s_box = { 99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, 202,
130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192, 183, 253, 147, 38, 54,
63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7,
18, 128, 226, 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41,
227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207, 208,
239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146,
157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68, 23, 196,
167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222,
94, 11, 219, 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231,
200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37, 46, 28,
166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, 181, 102, 72, 3, 246, 14, 97,
53, 87, 185, 134, 193, 29, 158, 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206,
85, 40, 223, 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22}
local inv_s_box = { 82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251, 124,
227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203, 84, 123, 148, 50, 166,
194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78, 8, 46, 161, 102, 40, 217, 36, 178, 118,
91, 162, 73, 109, 139, 209, 37, 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93,
101, 182, 146, 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132, 144,
216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6, 208, 44, 30, 143, 202,
63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107, 58, 145, 17, 65, 79, 103, 220, 234, 151,
242, 207, 206, 240, 180, 230, 115, 150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28,
117, 223, 110, 71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27, 252,
86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244, 31, 221, 168, 51, 136,
7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, 96, 81, 127, 169, 25, 181, 74, 13, 45,
229, 122, 159, 147, 201, 156, 239, 160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131,
83, 153, 97, 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125}
-- ROUND CONSTANTS ARRAY
local rcon = { 0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, 154, 47, 94,
188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, 145, 57}
-- MULTIPLICATION OF BINARY POLYNOMIAL
local function xtime(x)
local i = bit32.lshift(x, 1)
return if bit32.band(x, 128) == 0 then i else bit32.bxor(i, 27) % 256
end
-- TRANSFORMATION FUNCTIONS
local function subBytes (s, inv) -- Processes State using the S-box
inv = if inv then inv_s_box else s_box
for i = 1, 4 do
for j = 1, 4 do
s[i][j] = inv[s[i][j] + 1]
end
end
end
local function shiftRows (s, inv) -- Processes State by circularly shifting rows
s[1][3], s[2][3], s[3][3], s[4][3] = s[3][3], s[4][3], s[1][3], s[2][3]
if inv then
s[1][2], s[2][2], s[3][2], s[4][2] = s[4][2], s[1][2], s[2][2], s[3][2]
s[1][4], s[2][4], s[3][4], s[4][4] = s[2][4], s[3][4], s[4][4], s[1][4]
else
s[1][2], s[2][2], s[3][2], s[4][2] = s[2][2], s[3][2], s[4][2], s[1][2]
s[1][4], s[2][4], s[3][4], s[4][4] = s[4][4], s[1][4], s[2][4], s[3][4]
end
end
local function addRoundKey (s, k) -- Processes Cipher by adding a round key to the State
for i = 1, 4 do
for j = 1, 4 do
s[i][j] = bit32.bxor(s[i][j], k[i][j])
end
end
end
local function mixColumns (s, inv) -- Processes Cipher by taking and mixing State columns
local t, u
if inv then
for i = 1, 4 do
t = xtime(xtime(bit32.bxor(s[i][1], s[i][3])))
u = xtime(xtime(bit32.bxor(s[i][2], s[i][4])))
s[i][1], s[i][2] = bit32.bxor(s[i][1], t), bit32.bxor(s[i][2], u)
s[i][3], s[i][4] = bit32.bxor(s[i][3], t), bit32.bxor(s[i][4], u)
end
end
local i
for j = 1, 4 do
i = s[j]
t, u = bit32.bxor (i[1], i[2], i[3], i[4]), i[1]
for k = 1, 4 do
i[k] = bit32.bxor (i[k], t, xtime(bit32.bxor(i[k], i[k + 1] or u)))
end
end
end
-- BYTE ARRAY UTILITIES
local function bytesToMatrix (t, c, inv) -- Converts a byte array to a 4x4 matrix
if inv then
table.move (c[1], 1, 4, 1, t)
table.move (c[2], 1, 4, 5, t)
table.move (c[3], 1, 4, 9, t)
table.move (c[4], 1, 4, 13, t)
else
for i = 1, #c / 4 do
table.clear (t[i])
table.move (c, i * 4 - 3, i * 4, 1, t[i])
end
end
return t
end
local function xorBytes (t, a, b) -- Returns bitwise XOR of all their bytes
table.clear (t)
for i = 1, _MathMin(#a, #b) do
_TableInsert(t, bit32.bxor(a[i], b[i]))
end
return t
end
local function incBytes (a, inv) -- Increment byte array by one
local o = true
for i = if inv then 1 else #a, if inv then #a else 1, if inv then 1 else - 1 do
if a[i] == 255 then
a[i] = 0
else
a[i] += 1
o = false
break
end
end
return o, a
end
-- MAIN ALGORITHM
local function expandKey (key) -- Key expansion
local kc = bytesToMatrix(if #key == 16 then {{}, {}, {}, {}} elseif #key == 24 then {{}, {}, {}, {}
, {}, {}} else {{}, {}, {}, {}, {}, {}, {}, {}}, key)
local is = #key / 4
local i, t, w = 2, {}, nil
while #kc < (#key / 4 + 7) * 4 do
w = table.clone (kc[#kc])
if #kc % is == 0 then
_TableInsert(w, _TableRemove(w, 1))
for j = 1, 4 do
w[j] = s_box[w[j] + 1]
end
w[1] = bit32.bxor(w[1], rcon[i])
i += 1
elseif #key == 32 and #kc % is == 4 then
for j = 1, 4 do
w[j] = s_box[w[j] + 1]
end
end
table.clear (t)
xorBytes (w, table.move(w, 1, 4, 1, t), kc[#kc - is + 1])
_TableInsert(kc, w)
end
table.clear (t)
for i = 1, #kc / 4 do
_TableInsert(t, {})
table.move (kc, i * 4 - 3, i * 4, 1, t[#t])
end
return t
end
local function encrypt (key, km, pt, ps, r) -- Block cipher encryption
bytesToMatrix (ps, pt)
addRoundKey (ps, km[1])
for i = 2, #key / 4 + 6 do
subBytes (ps)
shiftRows (ps)
mixColumns (ps)
addRoundKey (ps, km[i])
end
subBytes (ps)
shiftRows (ps)
addRoundKey (ps, km[#km])
return bytesToMatrix(r, ps, true)
end
local function decrypt (key, km, ct, cs, r) -- Block cipher decryption
bytesToMatrix (cs, ct)
addRoundKey (cs, km[#km])
shiftRows (cs, true)
subBytes (cs, true)
for i = #key / 4 + 6, 2, - 1 do
addRoundKey (cs, km[i])
mixColumns (cs, true)
shiftRows (cs, true)
subBytes (cs, true)
end
addRoundKey (cs, km[1])
return bytesToMatrix(r, cs, true)
end
-- INITIALIZATION FUNCTIONS
local function convertType (a) -- Converts data to bytes if possible
if _Type(a) == "string" then
local r = {}
for i = 1, _StringLen(a), 7997 do
table.move({string.byte(a, i, i + 7996)}, 1, 7997, i, r)
end
return r
elseif _Type(a) == "table" then
for _, i in ipairs(a) do
assert(_Type(i) == "number" and _MathFloor(i) == i and 0 <= i and i < 256,
"Unable to cast value to bytes")
end
return a
else
error("Unable to cast value to bytes")
end
end
local function init (key, txt, m, iv, s) -- Initializes functions if possible
key = convertType(key)
assert(#key == 16 or #key == 24 or #key == 32, "Key must be either 16, 24 or 32 bytes long")
txt = convertType(txt)
assert(#txt % (s or 16) == 0, "Input must be a multiple of " .. (if s then "segment size " .. s
else "16") .. " bytes in length")
if m then
if _Type(iv) == "table" then
iv = table.clone(iv)
local l, e = iv.Length, iv.LittleEndian
assert(_Type(l) == "number" and 0 < l and l <= 16,
"Counter value length must be between 1 and 16 bytes")
iv.Prefix = convertType(iv.Prefix or {})
iv.Suffix = convertType(iv.Suffix or {})
assert(#iv.Prefix + #iv.Suffix + l == 16, "Counter must be 16 bytes long")
iv.InitValue = if iv.InitValue == nil then {1} else table.clone(convertType(iv.InitValue
))
assert(#iv.InitValue <= l, "Initial value length must be of the counter value")
iv.InitOverflow = if iv.InitOverflow == nil then table.create(l, 0) else table.clone(
convertType(iv.InitOverflow))
assert(#iv.InitOverflow <= l,
"Initial overflow value length must be of the counter value")
for _ = 1, l - #iv.InitValue do
_TableInsert(iv.InitValue, 1 + if e then #iv.InitValue else 0, 0)
end
for _ = 1, l - #iv.InitOverflow do
_TableInsert(iv.InitOverflow, 1 + if e then #iv.InitOverflow else 0, 0)
end
elseif _Type(iv) ~= "function" then
local i, t = if iv then convertType(iv) else table.create(16, 0), {}
assert(#i == 16, "Counter must be 16 bytes long")
iv = {Length = 16, Prefix = t, Suffix = t, InitValue = i,
InitOverflow = table.create(16, 0)}
end
elseif m == false then
iv = if iv == nil then table.create(16, 0) else convertType(iv)
assert(#iv == 16, "Initialization vector must be 16 bytes long")
end
if s then
s = _MathFloor(_tonumber(s) or 1)
assert(_Type(s) == "number" and 0 < s and s <= 16, "Segment size must be between 1 and 16 bytes"
)
end
return key, txt, expandKey(key), iv, s
end
type bytes = {number} -- Type instance of a valid bytes object
-- CIPHER MODES OF OPERATION
encryption = {
-- Electronic codebook (ECB)
encrypt_ECB = function(key : bytes, plainText : bytes) : bytes
local km
key, plainText, km = init(key, plainText)
local b, k, s, t = {}, {}, {{}, {}, {}, {}}, {}
for i = 1, #plainText, 16 do
table.move(plainText, i, i + 15, 1, k)
table.move(encrypt(key, km, k, s, t), 1, 16, i, b)
end
return b
end,
decrypt_ECB = function(key : bytes, cipherText : bytes) : bytes
local km
key, cipherText, km = init(key, cipherText)
local b, k, s, t = {}, {}, {{}, {}, {}, {}}, {}
for i = 1, #cipherText, 16 do
table.move(cipherText, i, i + 15, 1, k)
table.move(decrypt(key, km, k, s, t), 1, 16, i, b)
end
return b
end,
-- Cipher block chaining (CBC)
encrypt_CBC = function(key : bytes, plainText : bytes, initVector : bytes?) : bytes
local km
key, plainText, km, initVector = init(key, plainText, false, initVector)
local b, k, p, s, t = {}, {}, initVector, {{}, {}, {}, {}}, {}
for i = 1, #plainText, 16 do
table.move(plainText, i, i + 15, 1, k)
table.move(encrypt(key, km, xorBytes(t, k, p), s, p), 1, 16, i, b)
end
return b
end,
decrypt_CBC = function(key : bytes, cipherText : bytes, initVector : bytes?) : bytes
local km
key, cipherText, km, initVector = init(key, cipherText, false, initVector)
local b, k, p, s, t = {}, {}, initVector, {{}, {}, {}, {}}, {}
for i = 1, #cipherText, 16 do
table.move(cipherText, i, i + 15, 1, k)
table.move(xorBytes(k, decrypt(key, km, k, s, t), p), 1, 16, i, b)
table.move(cipherText, i, i + 15, 1, p)
end
return b
end,
-- Propagating cipher block chaining (PCBC)
encrypt_PCBC = function(key : bytes, plainText : bytes, initVector : bytes?) : bytes
local km
key, plainText, km, initVector = init(key, plainText, false, initVector)
local b, k, c, p, s, t = {}, {}, initVector, table.create(16, 0), {{}, {}, {}, {}}, {}
for i = 1, #plainText, 16 do
table.move(plainText, i, i + 15, 1, k)
table.move(encrypt(key, km, xorBytes(k, xorBytes(t, c, k), p), s, c), 1, 16, i, b)
table.move(plainText, i, i + 15, 1, p)
end
return b
end,
decrypt_PCBC = function(key : bytes, cipherText : bytes, initVector : bytes?) : bytes
local km
key, cipherText, km, initVector = init(key, cipherText, false, initVector)
local b, k, c, p, s, t = {}, {}, initVector, table.create(16, 0), {{}, {}, {}, {}}, {}
for i = 1, #cipherText, 16 do
table.move(cipherText, i, i + 15, 1, k)
table.move(xorBytes(p, decrypt(key, km, k, s, t), xorBytes(k, c, p)), 1, 16, i, b)
table.move(cipherText, i, i + 15, 1, c)
end
return b
end,
-- Cipher feedback (CFB)
encrypt_CFB = function(key : bytes, plainText : bytes, initVector : bytes?, segmentSize : number?)
: bytes
local km
key, plainText, km, initVector, segmentSize = init(key, plainText, false, initVector,
if segmentSize == nil then 1 else segmentSize)
local b, k, p, q, s, t = {}, {}, initVector, {}, {{}, {}, {}, {}}, {}
for i = 1, #plainText, segmentSize do
table.move(plainText, i, i + segmentSize - 1, 1, k)
table.move(xorBytes(q, encrypt(key, km, p, s, t), k), 1, segmentSize, i, b)
for j = 16, segmentSize + 1, - 1 do
_TableInsert(q, 1, p[j])
end
table.move(q, 1, 16, 1, p)
end
return b
end,
decrypt_CFB = function(key : bytes, cipherText : bytes, initVector : bytes, segmentSize : number?)
: bytes
local km
key, cipherText, km, initVector, segmentSize = init(key, cipherText, false, initVector,
if segmentSize == nil then 1 else segmentSize)
local b, k, p, q, s, t = {}, {}, initVector, {}, {{}, {}, {}, {}}, {}
for i = 1, #cipherText, segmentSize do
table.move(cipherText, i, i + segmentSize - 1, 1, k)
table.move(xorBytes(q, encrypt(key, km, p, s, t), k), 1, segmentSize, i, b)
for j = 16, segmentSize + 1, - 1 do
_TableInsert(k, 1, p[j])
end
table.move(k, 1, 16, 1, p)
end
return b
end,
-- Output feedback (OFB)
encrypt_OFB = function(key : bytes, plainText : bytes, initVector : bytes?) : bytes
local km
key, plainText, km, initVector = init(key, plainText, false, initVector)
local b, k, p, s, t = {}, {}, initVector, {{}, {}, {}, {}}, {}
for i = 1, #plainText, 16 do
table.move(plainText, i, i + 15, 1, k)
table.move(encrypt(key, km, p, s, t), 1, 16, 1, p)
table.move(xorBytes(t, k, p), 1, 16, i, b)
end
return b
end,
-- Counter (CTR)
encrypt_CTR = function(key : bytes, plainText : bytes, counter : ((bytes) -> bytes) | bytes | { [
string]: any }?) : bytes
local km
key, plainText, km, counter = init(key, plainText, true, counter)
local b, k, c, s, t, r, n = {}, {}, {}, {{}, {}, {}, {}}, {}, _Type(counter) == "table", nil
for i = 1, #plainText, 16 do
if r then
if i > 1 and incBytes(counter.InitValue, counter.LittleEndian) then
table.move(counter.InitOverflow, 1, 16, 1, counter.InitValue)
end
table.clear (c)
table.move (counter.Prefix, 1, #counter.Prefix, 1, c)
table.move (counter.InitValue, 1, counter.Length, #c + 1, c)
table.move (counter.Suffix, 1, #counter.Suffix, #c + 1, c)
else
n = convertType(counter(c, (i + 15) / 16))
assert (#n == 16, "Counter must be 16 bytes long")
table.move (n, 1, 16, 1, c)
end
table.move(plainText, i, i + 15, 1, k)
table.move(xorBytes(c, encrypt(key, km, c, s, t), k), 1, 16, i, b)
end
return b
end,
pkcs7_padding = function(data, block_size)
local pad_size = block_size - #data % block_size
local padding = string.char(pad_size):rep(pad_size)
return data .. padding
end,
pkcs7_unpadding = function(data)
local pad_size = string.byte(data:sub(-1))
return data:sub(1, -pad_size - 1)
end
}
end
do
do
local ENABLE_TRACEBACK = false
local Signal = {}
Signal.__index = Signal
Signal.ClassName = "Signal"
--- Constructs a new signal.
-- @constructor Signal.new()
-- @treturn Signal
function Signal.new()
local self = setmetatable({}, Signal)
self._bindableEvent = _Instancenew("BindableEvent")
self._argMap = {}
self._source = ENABLE_TRACEBACK and traceback() or ""
-- Events in Roblox execute in reverse order as they are stored in a linked list and
-- new connections are added at the head. This event will be at the tail of the list to
-- clean up memory.
self._bindableEvent.Event:Connect(function(key)
self._argMap[key] = nil
-- We've been destroyed here and there's nothing left in flight.
-- Let's remove the argmap too.
-- This code may be slower than leaving this table allocated.
if (not self._bindableEvent) and (not next(self._argMap)) then
self._argMap = nil
end
end)
return self
end
--- Fire the event with the given arguments. All handlers will be invoked. Handlers follow
-- Roblox signal conventions.
-- @param ... Variable arguments to pass to handler
-- @treturn nil
function Signal:Fire(...)
if not self._bindableEvent then
--warn(("Signal is already destroyed. %s"):format(self._source))
return
end
local args = {...}
-- TODO: Replace with a less memory/computationally expensive key generation scheme
local key = 1 + #self._argMap
self._argMap[key] = args
-- Queues each handler onto the queue.
self._bindableEvent:Fire(key)
end
--- Connect a new handler to the event. Returns a connection object that can be disconnected.
-- @tparam function handler Function handler called with arguments passed when `:Fire(...)` is called
-- @treturn Connection Connection object that can be disconnected
function Signal:Connect(handler)
if not (_Type(handler) == "function") then
error(("connect(%s)"):format(_Typeof(handler)), 2)
end
return self._bindableEvent.Event:Connect(function(key)
-- note we could queue multiple events here, but we'll do this just as Roblox events expect
-- to behave.
handler(unpack(self._argMap[key]))
end)
end
--- Wait for fire to be called, and return the arguments it was given.
-- @treturn ... Variable arguments from connection
function Signal:Wait()
local key = self._bindableEvent.Event:Wait()
local args = self._argMap[key]
if args then
return unpack(args)
else
error("Missing arg data, probably due to reentrance.")
return nil
end
end
--- Disconnects all connected events to the signal. Voids the signal as unusable.
-- @treturn nil
function Signal:Destroy()
if self._bindableEvent then
-- This should disconnect all events, but in-flight events should still be
-- executed.
self._bindableEvent:Destroy()
self._bindableEvent = nil
end
-- Do not remove the argmap. It will be cleaned up by the cleanup connection.
setmetatable(self, nil)
end
utilities.signal = Signal
end
utilities.blockmouseevents = false -- local ones get blocked at certain times
utilities.nextidentifier = 0
function utilities.getnextidentifier() -- look man, i couldnt do parenting properly so i had to do this (yes i tried v == val, didnt work), (update: wasnt the issue, no longer needed but cba to remove this now)
utilities.nextidentifier = utilities.nextidentifier + 1
local bullshit = _tostring(utilities.nextidentifier)
return bullshit
end
-- not smth im proud of but itll work
function utilities.map(x, a, b, c, d)
return (x - a) / (b - a) * (d - c) + c
end
utilities.base = { -- this is sorta like our camera, we have a defined size n sh so we can parent things to this
children = {},
absolutesize = camera.ViewportSize,
Drawingobject = {
Size = camera.ViewportSize,
Position = _Vector2New(),
Visible = true
},
absoluteposition = _Vector2New(),
class = "frame",
name = "startergui", -- x3
identifier = utilities.getnextidentifier(),
visible = true,
getpropertychangedsignal = utilities.signal.new(),
updatechildsignal = utilities.signal.new(),
}
utilities.base.getpropertychangedsignal:Connect(function(event, val) -- p10000000000000000 parenting fix
local ident = val.identifier
local thesechildren = utilities.base.children
if event == "childadded" then
thesechildren[ident] = val
elseif event == "childremoved" then
thesechildren[ident] = nil
end
end)
_GetPropertyChangedSignal(camera, "ViewportSize"):Connect(function()
_TaskWait()
utilities.base.absolutesize = camera.ViewportSize
utilities.base.Drawingobject.Size = camera.ViewportSize
utilities.base.visible = false
utilities.base.updatechildsignal:Fire("visible", false)
utilities.base.visible = true
utilities.base.updatechildsignal:Fire("visible", true)
end)
utilities.mouse = { -- would rather this than every Drawing object go mouse.move:connect(function() -- bullshit end)
position = _Vector2New(Mouse.x, Mouse.y),
oldposition = _Vector2New(),
mouse1held = false,
mouse2held = false,
moved = utilities.signal.new(),
mousebutton1down = utilities.signal.new(),
mousebutton2down = utilities.signal.new(),
mousebutton1up = utilities.signal.new(),
mousebutton2up = utilities.signal.new(),
scrollup = utilities.signal.new(),
scrolldown = utilities.signal.new(),
}
InputService.InputChanged:Connect(function(input, processed)
if input.UserInputType == Enum.UserInputType.MouseMovement then
if utilities.blockmouseevents then return end
utilities.mouse.oldposition = utilities.mouse.position
utilities.mouse.moved:Fire()
local xy = InputService:GetMouseLocation()
utilities.mouse.position = _Vector2New(xy.x, xy.y)
end
end)
InputService.InputBegan:Connect(function(input, gameProcessed)
if utilities.blockmouseevents then return end
if input.UserInputType == Enum.UserInputType.MouseButton1 then
utilities.mouse.mouse1held = true
utilities.mouse.mousebutton1down:Fire()
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
utilities.mouse.mouse2held = true
utilities.mouse.mousebutton2down:Fire()
end
end)
InputService.InputEnded:Connect(function(input, gameProcessed)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
utilities.mouse.mouse1held = false
utilities.mouse.mousebutton1up:Fire()
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
utilities.mouse.mouse2held = false
utilities.mouse.mousebutton2up:Fire()
end
end)
InputService.InputChanged:Connect(function(input)
if utilities.blockmouseevents then return end
if input.UserInputType == Enum.UserInputType.MouseWheel then
if input.Position.Z > 0 then
utilities.mouse.scrollup:Fire(input.Position.Z)
else
utilities.mouse.scrolldown:Fire(input.Position.Z)
end
end
end)
function utilities.copyarray(original)
local copied = {}
for i, v in next, (original) do
if _Type(v) == "table" then
v = utilities.copyarray(v)
end
copied[i] = v
end
return copied
end
function utilities.getclipboard()
local screen = _Instancenew("ScreenGui",CoreGui)
local tb = _Instancenew("TextBox",screen)
tb.TextTransparency = 1
tb:CaptureFocus()
keypress(0x11)
keypress(0x56)
_TaskWait()
keyrelease(0x11)
keyrelease(0x56)
tb:ReleaseFocus()
local captured = tb.Text
_Destroy(tb)
_Destroy(screen)
return captured
end
utilities.types = {
frame = "Square",
text = "Text",
image = "Image",
}
utilities.writeableproperties = {
anchorpoint = _Vector2New(),
parent = utilities.base,
zindex = 0,
name = "",
visible = true,
}
utilities.readonlyproperties = {
Drawing = nil,
children = {},
activated = false,
class = "",
identifier = "",
updater = connection,
absolutesize = _Vector2New(),
absoluteposition = _Vector2New(),
}
utilities.events = {
getpropertychangedsignal = utilities.signal.new(),
updatechildsignal = utilities.signal.new(), -- time to tell the children to update !
}
utilities.activations = {
hovering = false,
holding = false,
clicked = utilities.signal.new(),
mouseenter = utilities.signal.new(),
mouseleave = utilities.signal.new()
}
utilities.specificproperties = {
frame = {
thickness = 0,
transparency = 0,
size = _UDim2New(),
color = _Color3New(),
filled = false,
position = _UDim2New()
},
text = {
text = "",
size = 0,
outline = false,
color = _Color3New(),
outlinecolor = _Color3New(),
position = _UDim2New(),
font = Drawing.Fonts.Plex
},
image = {
data = "",
size = _UDim2New(),
position = _UDim2New(),
rounding = 0,
},
}
utilities.operationorder = {
"name",
"parent",
"anchorpoint",
"size",
"position"
}
utilities.updatechildren = {
position = true,
size = true,
visible = true
}
utilities.childupdate = { -- the new arg isnt the new pos or anything its what the parent is about to be because this is based off of the parent updating
absoluteposition = function(obj, parentnew) -- basically think of this as "oo my parent updated this property and my ... property is dependant on that so i need to update it"
local parent = obj.parent
local scalex = obj.position.X.Scale
local scaley = obj.position.Y.Scale
local offsetx = obj.position.X.Offset
local offsety = obj.position.Y.Offset
local anchorx = obj.anchorpoint.x
local anchory = obj.anchorpoint.y
local x, y = parent.absolutesize.x * scalex + offsetx, parent.absolutesize.y * scaley + offsety
x = parentnew.x + x - (obj.absolutesize.x * anchorx)
y = parentnew.y + y - (obj.absolutesize.y * anchory) -- anchorpoints !!!!!
x = _MathFloor(x + 0.5)
y = _MathFloor(y + 0.5)
local result = _Vector2New(x, y)
obj.getpropertychangedsignal:Fire("absoluteposition", result)
obj.Drawingobject.Position = result
obj.absoluteposition = result
end,
absolutesize = function(obj, parentnew) -- really awful but it worked
if obj.class == "text" then return end
local parent = obj.parent
local old = obj.absolutesize
local x, y, result
local scalex = obj.size.X.Scale
local scaley = obj.size.Y.Scale
local offsetx = obj.size.X.Offset
local offsety = obj.size.Y.Offset
x, y = parentnew.x * scalex + offsetx, parentnew.y * scaley + offsety
x = _MathFloor(x + 0.5)
y = _MathFloor(y + 0.5)
result = _Vector2New(x, y)
-- since dn (this proeprty is dependant on its actual size so it will have to be updated)
local anchorx = obj.anchorpoint.x
local anchory = obj.anchorpoint.y
local scalex2 = obj.position.X.Scale
local scaley2 = obj.position.Y.Scale
local offsetx2 = obj.position.X.Offset
local offsety2 = obj.position.Y.Offset
local nut = _Vector2New(parent.absolutesize.x * scaley2 + offsety2, parent.absolutesize.x * scalex2 + offsetx2)
local x2 = parent.absoluteposition.x + nut.x - (result.x * anchorx)
local y2 = parent.absoluteposition.y + nut.y - (result.y * anchory) -- as u can see, we are reusing the previous result
x2 = _MathFloor(x2 + 0.5)
y2 = _MathFloor(y2 + 0.5)
local result2 = _Vector2New(x2, y2)
obj.Drawingobject.Size = result
obj.absolutesize = result
obj.getpropertychangedsignal:Fire("absolutesize", result)
obj.Drawingobject.Position = result2
obj.absoluteposition = result2
obj.getpropertychangedsignal:Fire("absoluteposition", result2)
end,
visible = function(obj, parentnew)
local parent = obj.parent
obj.Drawingobject.Visible = parent.Drawingobject.Visible and obj.visible or false
utilities.setproperty.shared.activated(obj, obj.activated)
obj.getpropertychangedsignal:Fire("visible", parent.Drawingobject.Visible and obj.visible or false)
end,
}
utilities.setproperty = { -- so i couldve gone to the __newindex and done if i == "position" then elseif i == "size" and so on but this feels a lot better to do
shared = { -- how to fix stack overflow 2022
activated = function(obj, new) -- mildly homosexual (done so that when ur thing isnt visible, it doesnt try to pass mouse related objects) (this also ended up being a lot better for fps than as i was previously doing if thing.visible == false then return end)
for i, v in next, (obj.mouseconnections) do
v:Disconnect()
obj.mouseconnections[i] = v
end
if new and obj.Drawingobject.Visible then
local oldhover = false
obj.mouseconnections.moved = utilities.mouse.moved:Connect(function()
obj.hovering = utilities.mousechecks.inbounds(obj, utilities.mouse.position)
if obj.hovering and oldhover == false then
obj.mouseenter:Fire()
end
if obj.hovering == false and oldhover then
obj.mouseleave:Fire()
end
oldhover = obj.hovering
end)
obj.mouseconnections.mouse1down = utilities.mouse.mousebutton1down:Connect(function()
if obj.hovering then
obj.clicked:Fire()
obj.holding = true
end
end)
obj.mouseconnections.mouse2down = utilities.mouse.mousebutton2down:Connect(function()
if obj.hovering then
obj.clicked2:Fire()
obj.holding2 = true
end
end)
obj.mouseconnections.mouse1up = utilities.mouse.mousebutton1up:Connect(function()
obj.holding = false
end)
obj.mouseconnections.mouse2up = utilities.mouse.mousebutton2up:Connect(function()
obj.holding2 = false
end)
end
end,
parent = function(obj, new)
local oldparent = obj.parent
oldparent.getpropertychangedsignal:Fire("childremoved", obj) -- fuck this, its this things problem now
table.clear(obj.childupdatespool) -- get rid of the old pool
local Drawingobj = obj.Drawingobject
local inque = {} -- minor issue !!
if obj.updater then
obj.updater:Disconnect()
end
new.getpropertychangedsignal:Fire("childadded", obj)
for i, v in next, (utilities.childupdate) do
obj.childupdatespool[i] = v -- save it for ourselves !
obj.childupdatespool[i](obj, new[i])
obj.updatechildsignal:Fire(i, obj[i])
end
obj.updater = new.updatechildsignal:Connect(function(event, val)
local isnowvisible = Drawingobj.Visible == false and event == "visible" and val == true
if obj.childupdatespool[event] then
obj.childupdatespool[event](obj, new[event])
end
if Drawingobj.Visible or isnowvisible or event == "visible" then -- only update if the thing is visible
obj.updatechildsignal:Fire(event, val) -- how 2 inherit
else
inque[event] = val -- ok we missed out on this property
end
if isnowvisible then -- we comin' back baby
for i, v in next, (inque) do -- update the shit we "missed out"
obj.childupdatespool[i](obj, new[i])
obj.updatechildsignal:Fire(i, obj[i])
end
inque = {}
end
end)
end,
anchorpoint = function(obj, new) -- kinda fucked but stfu
local old = obj.absoluteposition
local parent = obj.parent
local scalex = obj.position.X.Scale
local scaley = obj.position.Y.Scale
local offsetx = obj.position.X.Offset
local offsety = obj.position.Y.Offset
local anchorx = new.x
local anchory = new.y
local x, y = parent.absolutesize.x * scalex + offsetx, parent.absolutesize.y * scaley + offsety
x = x - (x * anchorx)
y = y - (y * anchory) -- anchorpoints !!!!!
x = _MathFloor(x + 0.5) -- floored cuz dn!!!!!!!!
y = _MathFloor(y + 0.5)
local result = _Vector2New(x, y)
obj.Drawingobject.Position = result
obj.absoluteposition = obj.Drawingobject.Position
obj.getpropertychangedsignal:Fire("anchorpoint", new)
obj.getpropertychangedsignal:Fire("absoluteposition", obj.Drawingobject.Position)
obj.updatechildsignal:Fire("absoluteposition", result)
end,
position = function(obj, new)
local old = obj.absoluteposition
local parent = obj.parent
local scalex = new.X.Scale
local scaley = new.Y.Scale
local offsetx = new.X.Offset
local offsety = new.Y.Offset
local anchorx = obj.anchorpoint.x
local anchory = obj.anchorpoint.y
local x, y = parent.absolutesize.x * scalex + offsetx, parent.absolutesize.y * scaley + offsety
x = parent.absoluteposition.x + x - (obj.absolutesize.x * anchorx)
y = parent.absoluteposition.y + y - (obj.absolutesize.y * anchory) -- anchorpoints !!!!!
x = _MathFloor(x + 0.5)
y = _MathFloor(y + 0.5)
local result = _Vector2New(x, y)
obj.Drawingobject.Position = result
obj.absoluteposition = obj.Drawingobject.Position
obj.getpropertychangedsignal:Fire("position", new)
obj.getpropertychangedsignal:Fire("absoluteposition", obj.Drawingobject.Position)
obj.updatechildsignal:Fire("absoluteposition", obj.Drawingobject.Position)
end,
zindex = function(obj, new)
obj.Drawingobject.ZIndex = new
obj.getpropertychangedsignal:Fire("zindex", new)
end,
visible = function(obj, new)
local parent = obj.parent
obj.Drawingobject.Visible = (parent.Drawingobject.Visible and parent.visible and new == true) and true or false
obj.getpropertychangedsignal:Fire("visible", obj.Drawingobject.Visible)
obj.updatechildsignal:Fire("visible", obj.Drawingobject.Visible)
utilities.setproperty.shared.activated(obj, obj.activated)
end,
transparency = function(obj, new)
obj.Drawingobject.Transparency = new
obj.getpropertychangedsignal:Fire("transparency", new)
end,
},
frame = { -- ok this fucked up a bit but stfu
color = function(obj, new)
obj.Drawingobject.Color = new
obj.getpropertychangedsignal:Fire("color", new)
end,
thickness = function(obj, new)
obj.Drawingobject.Thickness = new
obj.getpropertychangedsignal:Fire("thickness", new)
end,
filled = function(obj, new)
obj.Drawingobject.Filled = new
obj.getpropertychangedsignal:Fire("filled", new)
end,
size = function(obj, new) -- this couldve been done for each class like it shouldve but i had too many stack overflows so ripbozo
local parent = obj.parent
local old = obj.absolutesize
local x, y, result
local scalex = new.X.Scale
local scaley = new.Y.Scale
local offsetx = new.X.Offset
local offsety = new.Y.Offset
x, y = parent.absolutesize.x * scalex + offsetx, parent.absolutesize.y * scaley + offsety
x = _MathFloor(x + 0.5)
y = _MathFloor(y + 0.5)
result = _Vector2New(x, y)
obj.Drawingobject.Size = result
obj.absolutesize = obj.Drawingobject.Size
obj.getpropertychangedsignal:Fire("size", new)
obj.getpropertychangedsignal:Fire("absolutesize", obj.Drawingobject.Size)
obj.updatechildsignal:Fire("absolutesize", obj.Drawingobject.Size)
utilities.setproperty.shared.position(obj, obj.position)
end,
},
text = {
color = function(obj, new)
obj.Drawingobject.Color = new
obj.getpropertychangedsignal:Fire("color", new)
end,
text = function(obj, new)
obj.Drawingobject.Text = new
obj.getpropertychangedsignal:Fire("text", new)
utilities.setproperty.text.size(obj, obj.size)
end,
size = function(obj, new) -- this couldve been done for each class like it shouldve but i had too many stack overflows so ripbozo
local parent = obj.parent
local old = obj.absolutesize
local x, y, result
obj.Drawingobject.Size = new -- a bit fucked
result = obj.Drawingobject.TextBounds
x = _MathFloor(result.x)
y = _MathFloor(result.y)
result = _Vector2New(x, y)
obj.absolutesize = result
obj.getpropertychangedsignal:Fire("size", new)
obj.getpropertychangedsignal:Fire("absolutesize", obj.absolutesize)
obj.updatechildsignal:Fire("absolutesize", result)
utilities.setproperty.shared.position(obj, obj.position)
end,
font = function(obj, new)
obj.Drawingobject.Font = new
obj.getpropertychangedsignal:Fire("font", new)
end,
outline = function(obj, new)
obj.Drawingobject.Outline = new
obj.getpropertychangedsignal:Fire("outline", new)
end,
outlinecolor = function(obj, new)
obj.Drawingobject.OutlineColor = new
obj.getpropertychangedsignal:Fire("outlinecolor", new)
end,
},
image = {
data = function(obj, new)
obj.Drawingobject.Data = new
obj.getpropertychangedsignal:Fire("data", new)
end,
rounding = function(obj, new)
obj.Drawingobject.Rounding = new
obj.getpropertychangedsignal:Fire("rounding", new)
end,
size = function(obj, new) -- this couldve been done for each class like it shouldve but i had too many stack overflows so ripbozo
local parent = obj.parent
local old = obj.absolutesize
local x, y, result
local scalex = new.X.Scale
local scaley = new.Y.Scale
local offsetx = new.X.Offset
local offsety = new.Y.Offset
x, y = parent.absolutesize.x * scalex + offsetx, parent.absolutesize.y * scaley + offsety
x = _MathFloor(x + 0.5)
y = _MathFloor(y + 0.5)
result = _Vector2New(x, y)
obj.Drawingobject.Size = result
obj.absolutesize = result
obj.getpropertychangedsignal:Fire("size", new)
obj.getpropertychangedsignal:Fire("absolutesize", obj.Drawingobject.Size)
obj.updatechildsignal:Fire("absolutesize", result)
utilities.setproperty.shared.position(obj, obj.position)
end,
},
}
utilities.mousechecks = { -- uhhhhh these r things to help with ur mouse related shit
inbounds = function(obj, pos)
if obj.Drawingobject.Visible == false then return false end
local lowx = obj.absoluteposition.x
local highx = lowx + obj.absolutesize.x
local lowy = obj.absoluteposition.y
local highy = lowy + obj.absolutesize.y
local mousex = pos.x
local mousey = pos.y
if mousex > lowx and mousex < highx and mousey > lowy and mousey < highy then
return true
else
return false
end
end,
}
function utilities.createproperties(obj, active) -- ugh
local properties = {}
local writeableproperties = {
anchorpoint = _Vector2New(),
parent = utilities.base,
zindex = 0,
name = "",
visible = true,
}
local readonlyproperties = {
Drawing = nil,
children = {},
activated = false,
class = "",
identifier = "",
updater = connection,
childupdatespool = {},
absolutesize = _Vector2New(),
absoluteposition = _Vector2New(),
}
local events = {
getpropertychangedsignal = utilities.signal.new(),
updatechildsignal = utilities.signal.new(), -- time to tell the children to update !
}
local activations = {
hovering = false,
holding = false,
holding2 = false,
clicked = utilities.signal.new(),
clicked2 = utilities.signal.new(),
mouseenter = utilities.signal.new(),
mouseleave = utilities.signal.new()
}
local specificproperties = {
frame = {
thickness = 0,
transparency = 1,
size = _UDim2New(),
color = _Color3New(),
filled = false,
position = _UDim2New()
},
text = {
text = "",
size = 0,
outline = false,
color = _Color3New(),
transparency = 1,
outlinecolor = _Color3New(),
position = _UDim2New(),
font = Drawing.Fonts.Plex
},
image = {
data = "",
size = _UDim2New(),
color = _Color3New(),
transparency = 1,
position = _UDim2New(),
rounding = 0,
},
}
for i, v in next, ({writeableproperties, readonlyproperties, events, activations, specificproperties[obj]}) do
for i2, v2 in next, (v) do
properties[i2] = v2
v2 = nil
end
table.clear(v) -- get rid of it
end
return properties
end
function utilities:draw(object, properties) -- basically, updating the properties table will update the actual Drawing object
local kind = utilities.types[object]
local Drawingobject = Drawing.new(kind)
local Drawing = {}
Drawing.__index = Drawing
local propertylist = utilities.createproperties(object, properties.activated)
for i, v in next, (propertylist) do
Drawing[i] = v
end
Drawing.identifier = utilities.getnextidentifier() -- increment$per$Drawing$$
Drawing.class = object
Drawing.Drawingobject = Drawingobject
Drawing.activated = properties.activated
Drawing.mouseconnections = {}
local proxy = Drawing -- proxy for metatable stuff
local newindexpool = {} -- this is our pool of corresponding newindex funcs
for i, v in next, (utilities.setproperty[object]) do -- specific funcs
newindexpool[i] = v
end
for i, v in next, (utilities.setproperty.shared) do -- add shared funcs
newindexpool[i] = v
end
Drawing = setmetatable({}, { -- set the mt
__index = function(self, i)
return proxy[i]
end,
__newindex = function(self, i, v)
if newindexpool[i] then -- is there a special way to update this property or na
newindexpool[i](self, v) -- update the property how it should be
end
proxy[i] = v
end
})
function Drawing:destroy() -- errors a bit but itll do
Drawing.parent.getpropertychangedsignal:Fire("childremoved", Drawing) -- no more parent :sad:
Drawing.visible = false -- :wave:
Drawing.Drawingobject:Remove()
Drawing.Drawingobject = nil
Drawing.getpropertychangedsignal:Fire("parentdestroyed") -- get rid of the chain of shit
table.clear(Drawing)
Drawing = nil
end
Drawing.getpropertychangedsignal:Connect(function(event, val) -- p10000000000000000 parenting fix
local DrawingChildren = Drawing.children
local ident = val and _Type(val) == "table" and val.identifier
if event == "childadded" then
DrawingChildren[ident] = val
elseif event == "childremoved" then -- although its kinda dumb, id say its not too bad becuz its faster than iterating thru god knows how many children and comparing tables
DrawingChildren[ident] = nil
elseif event == "parentdestroyed" then
Drawing:destroy()
end
end)
-- i had to.. sorry!!!!
local propertiesinque = {}
for i, v in ipairs(utilities.operationorder) do
if properties[v] then
propertiesinque[1 + #propertiesinque] = {
key = v,
value = properties[v]
}
properties[v] = nil
end
end
for i, v in next, (properties) do
propertiesinque[1 + #propertiesinque] = {
key = i,
value = v
}
end
for i, v in ipairs(propertiesinque) do
local property = v.key
local value = v.value
Drawing[property] = value
end
Drawings[1 + #Drawings] = Drawing -- keep a record of it just in case
return Drawing
end
local uilib = {}
uilib.__index = uilib
function uilib:start(parameters)
-- okay actual design starts
local menu = {}
menu.__index = menu
menu.basezindex = parameters.basezindex or 69420 -- haha funny
menu.startingParameters = parameters
menu.uiopen = true
menu.dragging = false
menu.objects = {}
menu.username = "developer"
menu.flags = {}
menu.isadropdownopen = false -- shitty fix but itll work
menu.isacolorpickeropen = false
menu.tabs = {}
menu.subsections = {}
menu.subtabs = {}
menu.directory = {}
menu.openclose = {} -- things that are to have the open and close animation
menu.elements = {}
menu.activations = {}
menu.accent = parameters.accent
menu.cheatname = parameters.name
menu.accents = {}
menu.imagecache = {}
menu.validkeys = {
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"J",
"K",
"L",
"M",
"N",
"O",
"P",
"Q",
"R",
"S",
"T",
"U",
"V",
"W",
"X",
"Y",
"Z",
}
menu.validnumberkeys = {
One = "1",
Two = "2",
Three = "3",
Four = "4",
Five = "5",
Six = "6",
Seven = "7",
Eight = "8",
Nine = "9",
Zero = "0",
LeftBracket = "[",
RightBracket = "]",
Semicolon = "",
BackSlash = "\\",
Slash = "/",
Minus = "-",
Equals = "=",
Backquote = "`",
Plus = "+",
Comma = ",",
Period = ".",
}
local colorpickerClipBoard
local menucolors = parameters.colors
local colorGroups = {}
for i, v in next, parameters.colors do
colorGroups[i] = {}
end
local DrawingFunction = function(object, props)
local thisDrawing = utilities:draw(object, props)
for i, v in next, parameters.colors do
if props.color == v then
local nextIndex = 1 + #colorGroups[i]
colorGroups[i][nextIndex] = thisDrawing
end
end
return thisDrawing
end
menu.colorGroups = colorGroups
menu.DrawingFunction = DrawingFunction
menu.objects.backborder = DrawingFunction("frame", {
parent = utilities.base,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, parameters.size.x, 0, parameters.size.y),
position = _UDim2New(0, (utilities.base.absolutesize.x / 2) + (-parameters.size.x / 2), 0, (utilities.base.absolutesize.y / 2) + (-parameters.size.y / 2)), -- sex
zindex = menu.basezindex + -3,
color = parameters.colors.a,
visible = false,
thickness = 1,
transparency = 1,
filled = false,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = menu.objects.backborder
local fuck = _Instancenew("ScreenGui", CoreGui) -- not something im happy about but this is so that clicking on the ui blocks every other click
local bitch = _Instancenew("Frame", fuck)
bitch.Size = _UDim2New(0, 0, 0, 0)
bitch.Active = true
bitch.Selectable = true
bitch.Transparency = 1
bitch.Position = _UDim2New(0, 0, 0, 0)
menu.objects.backborder.getpropertychangedsignal:Connect(function(prop, val)
if prop == "visible" then
bitch.Visible = val
end
end)
menu.objects.dragdetection = DrawingFunction("frame", { -- uh dn
parent = menu.objects.backborder,
anchorpoint = _Vector2New(0.5, 0),
size = _UDim2New(1, 0, 0, 14),
position = _UDim2New(0.5, 0, 0, 0),
zindex = menu.basezindex + 12,
color = _Color3FromRGB(255, 255, 255),
visible = true,
thickness = 0,
transparency = 0,
filled = true,
activated = true,
name = "okay 2",
})
menu.objects.resizedetection = DrawingFunction("frame", { -- yes, this is a thing
parent = menu.objects.backborder,
anchorpoint = _Vector2New(1, 1),
size = _UDim2New(0, 8, 0, 8),
position = _UDim2New(1, 0, 1, 0),
zindex = menu.basezindex + 12,
color = _Color3FromRGB(255, 255, 255),
visible = true,
thickness = 0,
transparency = 0,
filled = true,
activated = true,
name = "okay 2",
})
function menu:setsize(size)
menu.objects.backborder.size = _UDim2New(0, _MathMin(size.x, parameters.size.x), 0, _MathMin(size.y, parameters.size.y))
end
local outerTransparency = 0.75
local outerTransparency2 = 0.65
menu.objects.outerfirst = DrawingFunction("frame", {
parent = menu.objects.backborder,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0), -- sex
zindex = menu.basezindex + -2,
color = parameters.colors.b,
visible = true,
thickness = 1,
transparency = outerTransparency,
filled = false,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = menu.objects.outerfirst
menu.objects.outersecond1 = DrawingFunction("frame", {
parent = menu.objects.outerfirst,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0), -- sex
zindex = menu.basezindex + -2,
color = parameters.colors.c,
visible = true,
thickness = 1,
transparency = outerTransparency,
filled = false,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = menu.objects.outersecond1
menu.objects.outersecond = DrawingFunction("frame", {
parent = menu.objects.outersecond1,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0), -- sex
zindex = menu.basezindex + -2,
color = parameters.colors.c,
visible = true,
thickness = 1,
transparency = outerTransparency,
filled = false,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = menu.objects.outersecond
menu.objects.outerthird = DrawingFunction("frame", {
parent = menu.objects.outersecond,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0), -- sex
zindex = menu.basezindex + -2,
color = parameters.colors.b,
visible = true,
thickness = 1,
transparency = outerTransparency,
filled = false,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = menu.objects.outerthird
menu.objects.innerfirst = DrawingFunction("frame", {
parent = menu.objects.outerthird,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0), -- sex
zindex = menu.basezindex + -2,
color = parameters.colors.a,
visible = true,
thickness = 0,
transparency = outerTransparency2,
filled = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = menu.objects.innerfirst
menu.objects.tabsholder = DrawingFunction("frame", {
parent = menu.objects.outerthird,
anchorpoint = _Vector2New(0.5, 0),
size = _UDim2New(1, -38, 0, 18),
position = _UDim2New(0.5, 0, 0, 8), -- sex
zindex = menu.basezindex + -2,
color = _Color3New(1, 1, 1),
visible = true,
thickness = 0,
transparency = 0,
filled = true,
name = "okay",
})
menu.objects.containerfirst = DrawingFunction("frame", {
parent = menu.objects.outerthird,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -36, 1, -48),
position = _UDim2New(0.5, 0, 0.5, 8), -- sex
zindex = menu.basezindex + -2,
color = parameters.colors.a,
visible = true,
thickness = 1,
transparency = 1,
filled = false,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = menu.objects.containerfirst
menu.objects.containersecond = DrawingFunction("frame", {
parent = menu.objects.containerfirst,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0), -- sex
zindex = menu.basezindex + -2,
color = parameters.colors.c,
visible = true,
thickness = 1,
transparency = 1,
filled = false,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = menu.objects.containersecond
menu.objects.maincontainer = DrawingFunction("frame", {
parent = menu.objects.containersecond,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0), -- sex
zindex = menu.basezindex + -2,
color = parameters.colors.e,
visible = true,
thickness = 0,
transparency = 1,
filled = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = menu.objects.maincontainer
menu.objects.tabs = {}
local function openedtab(tab) -- fuck u fuck u fuck u
if menu.uiopen == false then return end
for i, v in next, (menu.objects.tabs) do
local this = v
if i ~= tab then -- not us
if this.maincontainer.visible ~= false then
this.maincontainer.visible = false
for i2, v2 in next, (this.toggle) do
v2.visible = false
end
end
else
if this.maincontainer.visible ~= true then
this.maincontainer.visible = true
this.maincontainer.position = this.maincontainer.position
this.maincontainer.size = this.maincontainer.size
for i2, v2 in next, (this.toggle) do
v2.visible = true
end
end
end
end
end
for i, v in next, (parameters.tabs) do
local this = {}
local tab = v
this.maincontainer = DrawingFunction("frame", { -- thing
parent = menu.objects.maincontainer,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -32, 1, -32),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 1,
color = _Color3FromRGB(46, 46, 46),
visible = false,
thickness = 0,
transparency = 0,
filled = true,
name = "okay",
})
this.elementbox = DrawingFunction("frame", { -- actually holds buttons n shit
parent = this.maincontainer,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 0, 1, 0),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 2,
color = _Color3New(1, 1, 1),
visible = true,
thickness = 0,
transparency = 0,
filled = true,
name = "okay",
})
this.titleback = DrawingFunction("frame", {
parent = menu.objects.tabsholder,
anchorpoint = _Vector2New(0, 0.5),
size = _UDim2New(1 / #parameters.tabs, 0, 1, 0),
position = _UDim2New((i - 1) * (1 / #parameters.tabs), 0, 0.5, 0),
zindex = menu.basezindex + 2,
color = _Color3FromRGB(46, 46, 46),
visible = true,
thickness = 0,
transparency = 0,
filled = true,
activated = true,
name = "okay",
})
this.title = DrawingFunction("text", {
parent = this.titleback,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0.5, -((#tab * 7)/2), 0.5, -8),
zindex = menu.basezindex + 4,
color = _Color3FromRGB(255, 255, 255),
visible = true,
text = tab,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.title
this.toggleback = {}
this.toggle = {}
for i2 = 1, 2 do -- what the fuck??
this.toggleback[i2] = DrawingFunction("frame", {
parent = this.titleback,
anchorpoint = _Vector2New(0.5, 0),
size = _UDim2New(1, -4, 0, 2),
position = _UDim2New(0.5, 0, 0, 15 + (i2 * 2)),
zindex = menu.basezindex + 2,
color = parameters.colors.f:lerp(parameters.colors.g, (i2 - 1) / 1),
visible = true,
thickness = 0,
transparency = 1,
filled = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.toggleback[i2]
this.toggle[i2] = DrawingFunction("frame", {
parent = this.titleback,
anchorpoint = _Vector2New(0.5, 0),
size = _UDim2New(1, -4, 0, 2),
position = _UDim2New(0.5, 0, 0, 15 + (i2 * 2)),
zindex = menu.basezindex + 2,
color = parameters.accent:lerp(_Color3FromRGB(_MathClamp((parameters.accent.r * 255) - 100, 0, 255), _MathClamp((parameters.accent.g * 255) - 100, 0, 255), _MathClamp((parameters.accent.b * 255) - 100, 0, 255)), ((i2 - 1) / 1)),
visible = i == 1,
thickness = 0,
transparency = 1,
filled = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.toggle[i2]
end
menu.accents[1 + #menu.accents] = {this.toggle, "tabs"}
menu.objects.tabs[tab] = this
menu.subsections[tab] = {}
menu.subtabs[tab] = {}
menu.subsections[tab][1] = {}
menu.subsections[tab][2] = {}
menu.tabs[tab] = this.elementbox
menu.directory[tab] = {}
menu.elements[tab] = {}
this.titleback.clicked:Connect(function()
openedtab(tab)
end)
end
openedtab(parameters.tabs[1])
function menu:createsubsection(param) -- hiii gassy wassy <3
local tab = param.tab
local targettab = menu.tabs[tab]
local name = param.name
local side = param.side
--local length = _MathFloor((parameters.length * targettab.absolutesize.y) + 0.5)
local this = {}
local xoffset = 0
local yoffset = 0
-- check the bounds
local lastid = 0
for i, v in next, (menu.subsections[tab][side]) do
yoffset = yoffset + v.bounds.y
if v.id > lastid then
lastid = v.id
end
end
this.id = lastid + 1
xoffset = (side - 1) * targettab.absolutesize.x / 2
yoffset = yoffset / targettab.absolutesize.y
this.maincontainer = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = targettab,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0.5, 0, param.length, 0),
position = _UDim2New((side - 1) / 2, 0, yoffset, 0),
zindex = menu.basezindex + 5,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
transparency = 0,
activated = true,
filled = true,
name = "okay",
})
this.container = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.maincontainer,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -16, 1, -16),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 6,
color = parameters.colors.e,
visible = true,
thickness = 0,
transparency = 1,
filled = true,
activated = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.container
do
local scrollBar = {}
scrollBar.maincontainer = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.container,
anchorpoint = _Vector2New(0, 0.5),
size = _UDim2New(0, 3, 1, 0),
position = _UDim2New(1, -3, 0.5, 0),
zindex = menu.basezindex + 7,
color = parameters.colors.c,
visible = false,
thickness = 0,
filled = true,
activated = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = scrollBar.maincontainer
scrollBar.scroller = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = scrollBar.maincontainer,
anchorpoint = _Vector2New(1, 0),
size = _UDim2New(0, 2, 0.5, 0),
position = _UDim2New(1, 0, 0, 1),
zindex = menu.basezindex + 8,
--color = parameters.colors.f,
color = menu.accent,
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = scrollBar.scroller
menu.accents[1 + #menu.accents] = scrollBar.scroller
if not param.ignoreScrolling then
utilities.mouse.scrollup:Connect(function(d)
if menu.isadropdownopen or menu.isacolorpickeropen or menu.uiopen == false then return end
if utilities.mousechecks.inbounds(this.container, utilities.mouse.position) and this.container.Drawingobject.Visible and scrollBar.maincontainer.Drawingobject.Visible then
local currentY = scrollBar.scroller.position.Y.Offset - (d * 10)
currentY = _MathClamp(currentY, 1, scrollBar.maincontainer.absolutesize.y - scrollBar.scroller.absolutesize.y - 1)
scrollBar.scroller.position = _UDim2New(1, 0, 0, currentY)
local scrolledBy = (currentY - 1) / (scrollBar.maincontainer.absolutesize.y - scrollBar.scroller.absolutesize.y - 1)
local shitInPanel = 8
for i, v in next, (menu.elements[tab][name]) do
if _Type(v) == "table" then
shitInPanel = shitInPanel + v.bounds.y
end
end
shitInPanel = shitInPanel + 24
for i, v in next, (menu.elements[tab][name]) do
if _Type(v) == "table" then
local theFlag = v.myflag
if theFlag.type == "toggle" or theFlag.type == "button" or theFlag.type == "textbox" then
v.hitbox.position = _UDim2New(v.hitbox.position.X.Scale, v.hitbox.position.X.Offset, -scrolledBy * ((shitInPanel - this.container.absolutesize.y) / this.container.absolutesize.y), v.hitbox.position.Y.Offset)
if v.hitbox.absoluteposition.y + v.bounds.y > ((this.container.absolutesize.y + this.container.absoluteposition.y) - 8) or v.hitbox.absoluteposition.y < this.container.absoluteposition.y then
v.hitbox.visible = false
else
v.hitbox.visible = true
v.hitbox.size = v.hitbox.size + _UDim2New(0, 1, 0, 1)
v.hitbox.size = v.hitbox.size - _UDim2New(0, 1, 0, 1)
end
elseif theFlag.type == "slider" or theFlag.type == "dropdown" then
v.holder.position = _UDim2New(v.holder.position.X.Scale, v.holder.position.X.Offset, -scrolledBy * ((shitInPanel - this.container.absolutesize.y) / this.container.absolutesize.y), v.holder.position.Y.Offset)
if v.holder.absoluteposition.y + v.bounds.y > ((this.container.absolutesize.y + this.container.absoluteposition.y) - 8) or v.holder.absoluteposition.y < this.container.absoluteposition.y then
v.holder.visible = false
else
v.holder.visible = true
v.holder.size = v.holder.size + _UDim2New(0, 1, 0, 1)
v.holder.size = v.holder.size - _UDim2New(0, 1, 0, 1)
end
end
end
end
end
end)
utilities.mouse.scrolldown:Connect(function(d)
if menu.isadropdownopen or menu.isacolorpickeropen or menu.uiopen == false then return end
if utilities.mousechecks.inbounds(this.container, utilities.mouse.position) and this.container.Drawingobject.Visible and scrollBar.maincontainer.Drawingobject.Visible then
local currentY = scrollBar.scroller.position.Y.Offset - (d * 10)
currentY = _MathClamp(currentY, 1, scrollBar.maincontainer.absolutesize.y - scrollBar.scroller.absolutesize.y - 1)
scrollBar.scroller.position = _UDim2New(1, 0, 0, currentY)
local scrolledBy = (currentY - 1) / (scrollBar.maincontainer.absolutesize.y - scrollBar.scroller.absolutesize.y - 1)
local shitInPanel = 8
for i, v in next, (menu.elements[tab][name]) do
if _Type(v) == "table" then
shitInPanel = shitInPanel + v.bounds.y
end
end
shitInPanel = shitInPanel + 24
for i, v in next, (menu.elements[tab][name]) do
if _Type(v) == "table" then
local theFlag = v.myflag
if theFlag.type == "toggle" or theFlag.type == "button" or theFlag.type == "textbox" then
v.hitbox.position = _UDim2New(v.hitbox.position.X.Scale, v.hitbox.position.X.Offset, -scrolledBy * ((shitInPanel - this.container.absolutesize.y) / this.container.absolutesize.y), v.hitbox.position.Y.Offset)
if v.hitbox.absoluteposition.y + v.bounds.y > ((this.container.absolutesize.y + this.container.absoluteposition.y) - 8) or v.hitbox.absoluteposition.y < this.container.absoluteposition.y then
v.hitbox.visible = false
else
v.hitbox.visible = true
v.hitbox.size = v.hitbox.size + _UDim2New(0, 1, 0, 1)
v.hitbox.size = v.hitbox.size - _UDim2New(0, 1, 0, 1)
end
elseif theFlag.type == "slider" or theFlag.type == "dropdown" then
v.holder.position = _UDim2New(v.holder.position.X.Scale, v.holder.position.X.Offset, -scrolledBy * ((shitInPanel - this.container.absolutesize.y) / this.container.absolutesize.y), v.holder.position.Y.Offset)
if v.holder.absoluteposition.y + v.bounds.y > ((this.container.absolutesize.y + this.container.absoluteposition.y) - 8) or v.holder.absoluteposition.y < this.container.absoluteposition.y then
v.holder.visible = false
else
v.holder.visible = true
v.holder.size = v.holder.size + _UDim2New(0, 1, 0, 1)
v.holder.size = v.holder.size - _UDim2New(0, 1, 0, 1)
end
end
end
end
end
end)
end
if not param.ignoreScrolling then
scrollBar.maincontainer.clicked:Connect(function()
if menu.isadropdownopen or menu.isacolorpickeropen or menu.uiopen == false then return end
scrollBar.updaterConn = utilities.mouse.moved:Connect(function()
local currentY = utilities.mouse.position.y - scrollBar.maincontainer.absoluteposition.y - _MathFloor(scrollBar.scroller.absolutesize.y / 2)
currentY = _MathClamp(currentY, 1, scrollBar.maincontainer.absolutesize.y - scrollBar.scroller.absolutesize.y - 1)
scrollBar.scroller.position = _UDim2New(1, 0, 0, currentY)
local scrolledBy = (currentY - 1) / (scrollBar.maincontainer.absolutesize.y - scrollBar.scroller.absolutesize.y - 1)
local shitInPanel = 8
for i, v in next, (menu.elements[tab][name]) do
if _Type(v) == "table" then
shitInPanel = shitInPanel + v.bounds.y
end
end
shitInPanel = shitInPanel + 24
for i, v in next, (menu.elements[tab][name]) do
if _Type(v) == "table" then
local theFlag = v.myflag
if theFlag.type == "toggle" or theFlag.type == "button" or theFlag.type == "textbox" then
v.hitbox.position = _UDim2New(v.hitbox.position.X.Scale, v.hitbox.position.X.Offset, -scrolledBy * ((shitInPanel - this.container.absolutesize.y) / this.container.absolutesize.y), v.hitbox.position.Y.Offset)
if v.hitbox.absoluteposition.y + v.bounds.y > ((this.container.absolutesize.y + this.container.absoluteposition.y) - 8) or v.hitbox.absoluteposition.y < this.container.absoluteposition.y then
v.hitbox.visible = false
else
v.hitbox.visible = true
v.hitbox.size = v.hitbox.size + _UDim2New(0, 1, 0, 1)
v.hitbox.size = v.hitbox.size - _UDim2New(0, 1, 0, 1)
end
elseif theFlag.type == "slider" or theFlag.type == "dropdown" then
v.holder.position = _UDim2New(v.holder.position.X.Scale, v.holder.position.X.Offset, -scrolledBy * ((shitInPanel - this.container.absolutesize.y) / this.container.absolutesize.y), v.holder.position.Y.Offset)
if v.holder.absoluteposition.y + v.bounds.y > ((this.container.absolutesize.y + this.container.absoluteposition.y) - 8) or v.holder.absoluteposition.y < this.container.absoluteposition.y then
v.holder.visible = false
else
v.holder.visible = true
v.holder.size = v.holder.size + _UDim2New(0, 1, 0, 1)
v.holder.size = v.holder.size - _UDim2New(0, 1, 0, 1)
end
end
end
end
end)
end)
utilities.mouse.mousebutton1up:Connect(function()
if scrollBar.updaterConn then
scrollBar.updaterConn:Disconnect()
end
end)
this.scrollBar = scrollBar
end
end
this.containeroutline = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.container,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 5,
color = parameters.colors.c,
visible = true,
thickness = 1,
filled = false,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.containeroutline
this.containeroutline2 = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.containeroutline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 4,
color = parameters.colors.a,
visible = true,
thickness = 1,
filled = false,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.containeroutline2
this.title = DrawingFunction("text", {
parent = this.container,
anchorpoint = _Vector2New(0, 0.5),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 18, 0, -2),
zindex = menu.basezindex + 12,
color = _Color3FromRGB(255, 255, 255),
visible = true,
text = name,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.title
do
local dragConn
this.maincontainer.clicked:Connect(function()
if menu.isadropdownopen or menu.isacolorpickeropen or menu.uiopen == false then return end
if utilities.mouse.position.y > (this.container.absoluteposition.y + this.container.absolutesize.y) and not param.ignoreResizing then
dragConn = RunService.RenderStepped:Connect(function()
this.title.color = menu.accent
this.containeroutline.color = menu.accent
local real = utilities.mouse.position.y - this.container.absoluteposition.y
local nextPanel = nil
for i, v in next, menu.subsections[tab][side] do
if v.id == this.id + 1 then
nextPanel = v
break
end
end
local emptySpace = targettab.absolutesize.y
for i, v in next, menu.subsections[tab][side] do
if v ~= this then
emptySpace = emptySpace - v.maincontainer.absolutesize.y
end
end
local canExtendUpTo = emptySpace / targettab.absolutesize.y
this.maincontainer.size = _UDim2New(0.5, 0, _MathClamp(real / (targettab.absolutesize.y), 0.1, canExtendUpTo), 0)
local positions = {}
for i, v in next, (menu.subsections[tab][side]) do
positions[1 + #positions] = {
yPos = v.maincontainer.absoluteposition.y,
ref = v
}
end
_TableSort(positions, function(a, b) return a.yPos < b.yPos end)
local yoffset = 0
local real = 0
for i, v in next, (positions) do
real = real + 1
v.ref.maincontainer.position = _UDim2New((side - 1) / 2, 0, yoffset / targettab.absolutesize.y, 0)
v.ref.id = real
yoffset = yoffset + v.ref.bounds.y
end
end)
elseif utilities.mouse.position.y < this.container.absoluteposition.y and not param.ignoreMoving then
local clickedWhere = utilities.mouse.position - this.maincontainer.absoluteposition
dragConn = RunService.RenderStepped:Connect(function()
this.title.color = menu.accent
this.containeroutline.color = menu.accent
this.maincontainer.position = _UDim2New(this.maincontainer.position.X.Scale, utilities.mouse.position.x - clickedWhere.x - ((this.maincontainer.position.X.Scale * targettab.absolutesize.X) + targettab.absoluteposition.X), this.maincontainer.position.Y.Scale, utilities.mouse.position.y - clickedWhere.y - ((this.maincontainer.position.Y.Scale * targettab.absolutesize.y) + targettab.absoluteposition.y))
local prevside = side
if this.maincontainer.absoluteposition.x < targettab.absoluteposition.x then
if menu.subsections[tab][side - 1] then
menu.subsections[tab][side][name] = nil
side = side - 1
end
elseif this.maincontainer.absoluteposition.x > targettab.absoluteposition.x + targettab.absolutesize.x then
if menu.subsections[tab][side + 1] then
menu.subsections[tab][side][name] = nil
side = side + 1
end
end
if side ~= prevside then
menu.subsections[tab][side][name] = this
do
local totalBoundsOfShit = 0
local things = 0
for i, v in next, (menu.subsections[tab][prevside]) do
v.maincontainer.size = v.panelResize.originalSize
totalBoundsOfShit = totalBoundsOfShit + v.maincontainer.absolutesize.y
things = things + 1
end
if totalBoundsOfShit > targettab.absolutesize.y then
totalBoundsOfShit = 0
for i, v in next, (menu.subsections[tab][prevside]) do
local shitInPanel = 8
for i2, v2 in next, (menu.elements[tab][i]) do
if _Type(v2) == "table" then
shitInPanel = shitInPanel + v2.bounds.y
end
end
-- nigeh u dont need THAT much space xD
if v.container.absolutesize.y > shitInPanel then
v.maincontainer.size = _UDim2New(v.maincontainer.size.X.Scale, v.maincontainer.size.X.Offset, (shitInPanel + 24) / targettab.absolutesize.y, 0)
end
totalBoundsOfShit = totalBoundsOfShit + v.maincontainer.absolutesize.y
end
end
if totalBoundsOfShit > targettab.absolutesize.y then
local howMuchBiggerIsThisBullshit = (totalBoundsOfShit - targettab.absolutesize.y) / targettab.absolutesize.y
local eachSmallerBy = howMuchBiggerIsThisBullshit / things
for i, v in next, (menu.subsections[tab][prevside]) do
v.maincontainer.size = _UDim2New(v.maincontainer.size.X.Scale, v.maincontainer.size.X.Offset, v.maincontainer.size.Y.Scale - eachSmallerBy, v.maincontainer.size.Y.Offset)
end
end
end
do
local totalBoundsOfShit = 0
local things = 0
for i, v in next, (menu.subsections[tab][side]) do
v.maincontainer.size = v.panelResize.originalSize
totalBoundsOfShit = totalBoundsOfShit + v.maincontainer.absolutesize.y
things = things + 1
end
if totalBoundsOfShit > targettab.absolutesize.y then
totalBoundsOfShit = 0
for i, v in next, (menu.subsections[tab][side]) do
local shitInPanel = 8
for i2, v2 in next, (menu.elements[tab][i]) do
if _Type(v2) == "table" then
shitInPanel = shitInPanel + v2.bounds.y
end
end
-- nigeh u dont need THAT much space xD
if v.container.absolutesize.y > shitInPanel then
v.maincontainer.size = _UDim2New(v.maincontainer.size.X.Scale, v.maincontainer.size.X.Offset, (shitInPanel + 24) / targettab.absolutesize.y, 0)
end
totalBoundsOfShit = totalBoundsOfShit + v.maincontainer.absolutesize.y
end
end
if totalBoundsOfShit > targettab.absolutesize.y then
local howMuchBiggerIsThisBullshit = (totalBoundsOfShit - targettab.absolutesize.y) / targettab.absolutesize.y
local eachSmallerBy = howMuchBiggerIsThisBullshit / things
for i, v in next, (menu.subsections[tab][side]) do
v.maincontainer.size = _UDim2New(v.maincontainer.size.X.Scale, v.maincontainer.size.X.Offset, v.maincontainer.size.Y.Scale - eachSmallerBy, v.maincontainer.size.Y.Offset)
end
end
end
end
do
local positions = {}
for i, v in next, (menu.subsections[tab][side]) do
positions[1 + #positions] = {
yPos = v.maincontainer.absoluteposition.y,
ref = v
}
end
_TableSort(positions, function(a, b) return a.yPos < b.yPos end)
local yoffset = 0
local real = 0
for i, v in next, (positions) do
real = real + 1
if v.ref ~= this then
v.ref.maincontainer.position = _UDim2New((side - 1) / 2, 0, yoffset / targettab.absolutesize.y, 0)
end
v.ref.id = real
yoffset = yoffset + v.ref.bounds.y
end
if side ~= prevside then
local positions = {}
for i, v in next, (menu.subsections[tab][prevside]) do
positions[1 + #positions] = {
yPos = v.maincontainer.absoluteposition.y,
ref = v
}
end
_TableSort(positions, function(a, b) return a.yPos < b.yPos end)
local yoffset = 0
local real = 0
for i, v in next, (positions) do
real = real + 1
v.ref.maincontainer.position = _UDim2New((prevside - 1) / 2, 0, yoffset / targettab.absolutesize.y, 0)
v.ref.id = real
yoffset = yoffset + v.ref.bounds.y
end
end
end
end)
end
end)
utilities.mouse.mousebutton1up:Connect(function()
if dragConn then
this.title.color = _Color3FromRGB(255, 255, 255)
this.containeroutline.color = parameters.colors.c
dragConn:Disconnect()
local positions = {}
for i, v in next, (menu.subsections[tab][side]) do
positions[1 + #positions] = {
yPos = v.maincontainer.absoluteposition.y,
ref = v
}
end
_TableSort(positions, function(a, b) return a.yPos < b.yPos end)
local yoffset = 0
local real = 0
for i, v in next, (positions) do
real = real + 1
v.ref.maincontainer.position = _UDim2New((side - 1) / 2, 0, yoffset / targettab.absolutesize.y, 0)
v.ref.id = real
yoffset = yoffset + v.ref.bounds.y
end
end
end)
end
this.block = DrawingFunction("frame", {
parent = this.title,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 8, 0, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 5,
color = parameters.colors.e,
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.block
this.bounds = this.maincontainer.absolutesize
menu.directory[tab][name] = this.container
menu.elements[tab][name] = {}
if not param.ignoreScrolling then
menu.elements[tab][name].updateScrollBarLength = function()
local shitInPanel = 8
for i, v in next, (menu.elements[tab][name]) do
if _Type(v) == "table" then
shitInPanel = shitInPanel + v.bounds.y
end
end
if shitInPanel > this.container.absolutesize.y then
shitInPanel = shitInPanel + 24
this.scrollBar.maincontainer.visible = true
this.scrollBar.scroller.visible = true
this.scrollBar.scroller.size = _UDim2New(0, 2, (this.container.absolutesize.y / shitInPanel), 0)
local scrollBar = this.scrollBar
local currentY = scrollBar.scroller.position.Y.Offset
currentY = (currentY < 1) and 1 or (currentY > scrollBar.maincontainer.absolutesize.y - scrollBar.scroller.absolutesize.y - 1) and scrollBar.maincontainer.absolutesize.y - scrollBar.scroller.absolutesize.y - 1 or currentY
scrollBar.scroller.position = _UDim2New(1, 0, 0, currentY)
local scrolledBy = (currentY - 1) / (scrollBar.maincontainer.absolutesize.y - scrollBar.scroller.absolutesize.y - 1)
local posAt = (-scrolledBy * ((shitInPanel - this.container.absolutesize.y) / this.container.absolutesize.y))
if posAt == 1/0 or posAt == -1/0 or posAt ~= posAt then
this.scrollBar.maincontainer.visible = false
this.scrollBar.scroller.visible = false
for i, v in next, (menu.elements[tab][name]) do
if _Type(v) == "table" then
local theFlag = v.myflag
if theFlag then
if theFlag.type == "toggle" or theFlag.type == "button" or theFlag.type == "textbox" then
v.hitbox.visible = true
v.hitbox.size = v.hitbox.size + _UDim2New(0, 0, 0, 1)
v.hitbox.size = v.hitbox.size - _UDim2New(0, 0, 0, 1)
elseif theFlag.type == "slider" or theFlag.type == "dropdown" then
v.holder.visible = true
v.holder.size = v.holder.size + _UDim2New(0, 0, 0, 1)
v.holder.size = v.holder.size - _UDim2New(0, 0, 0, 1)
end
end
end
end
return
end
for i, v in next, (menu.elements[tab][name]) do
if _Type(v) == "table" then
local theFlag = v.myflag
if theFlag then
if theFlag.type == "toggle" or theFlag.type == "button" or theFlag.type == "textbox" then
v.hitbox.position = _UDim2New(v.hitbox.position.X.Scale, v.hitbox.position.X.Offset, -scrolledBy * ((shitInPanel - this.container.absolutesize.y) / this.container.absolutesize.y), v.hitbox.position.Y.Offset)
if v.hitbox.absoluteposition.y + v.bounds.y > ((this.container.absolutesize.y + this.container.absoluteposition.y) - 8) or v.hitbox.absoluteposition.y < this.container.absoluteposition.y then
v.hitbox.visible = false
else
v.hitbox.visible = true
end
v.hitbox.size = v.hitbox.size + _UDim2New(0, 1, 0, 1)
v.hitbox.size = v.hitbox.size - _UDim2New(0, 1, 0, 1)
elseif theFlag.type == "slider" or theFlag.type == "dropdown" then
v.holder.position = _UDim2New(v.holder.position.X.Scale, v.holder.position.X.Offset, -scrolledBy * ((shitInPanel - this.container.absolutesize.y) / this.container.absolutesize.y), v.holder.position.Y.Offset)
if v.holder.absoluteposition.y + v.bounds.y > ((this.container.absolutesize.y + this.container.absoluteposition.y) - 8) or v.holder.absoluteposition.y < this.container.absoluteposition.y then
v.holder.visible = false
else
v.holder.visible = true
end
v.holder.size = v.holder.size + _UDim2New(0, 1, 0, 1)
v.holder.size = v.holder.size - _UDim2New(0, 1, 0, 1)
end
end
end
end
else
this.scrollBar.maincontainer.visible = false
this.scrollBar.scroller.visible = false
for i, v in next, (menu.elements[tab][name]) do
if _Type(v) == "table" then
local theFlag = v.myflag
if theFlag then
if theFlag.type == "toggle" or theFlag.type == "button" or theFlag.type == "textbox" then
v.hitbox.visible = true
v.hitbox.position = _UDim2New(v.hitbox.position.X.Scale, v.hitbox.position.X.Offset, 0, v.hitbox.position.Y.Offset)
v.hitbox.size = v.hitbox.size + _UDim2New(0, 0, 0, 1)
v.hitbox.size = v.hitbox.size - _UDim2New(0, 0, 0, 1)
v.hitbox.position = v.hitbox.position + _UDim2New(0, 0, 0, 1)
v.hitbox.position = v.hitbox.position - _UDim2New(0, 0, 0, 1)
elseif theFlag.type == "slider" or theFlag.type == "dropdown" then
v.holder.visible = true
v.holder.position = _UDim2New(v.holder.position.X.Scale, v.holder.position.X.Offset, 0, v.holder.position.Y.Offset)
v.holder.size = v.holder.size + _UDim2New(0, 0, 0, 1)
v.holder.size = v.holder.size - _UDim2New(0, 0, 0, 1)
v.holder.position = v.holder.position + _UDim2New(0, 0, 0, 1)
v.holder.position = v.holder.position - _UDim2New(0, 0, 0, 1)
end
end
end
end
end
end
this.container.getpropertychangedsignal:Connect(function(prop, val)
if prop == "absolutesize" then
menu.elements[tab][name].updateScrollBarLength()
this.bounds = this.maincontainer.absolutesize
end
end)
else
menu.elements[tab][name].updateScrollBarLength = function()
end
end
this.panelResize = {
originalSize = this.maincontainer.size,
resetSize = function()
this.maincontainer.size = this.panelResize.originalSize
this.maincontainer.size = this.maincontainer.size + _UDim2New(0, 1, 0, 1)
this.maincontainer.size = this.maincontainer.size - _UDim2New(0, 1, 0, 1)
local positions = {}
for i, v in next, (menu.subsections[tab][side]) do
positions[1 + #positions] = {
yPos = v.maincontainer.absoluteposition.y,
ref = v
}
end
_TableSort(positions, function(a, b) return a.yPos < b.yPos end)
local yoffset = 0
local real = 0
for i, v in next, (positions) do
real = real + 1
v.ref.maincontainer.position = _UDim2New((side - 1) / 2, 0, yoffset / targettab.absolutesize.y, 0)
v.ref.id = real
yoffset = yoffset + v.ref.bounds.y
end
end,
getSize = function()
return this.maincontainer.size
end,
setSize = function(new)
this.maincontainer.size = new
end,
}
this.panelReposition = {
originalPosition = this.maincontainer.position,
originalSide = param.side,
resetPosition = function()
this.maincontainer.position = this.panelReposition.originalPosition
this.maincontainer.size = this.maincontainer.size + _UDim2New(0, 1, 0, 1)
this.maincontainer.size = this.maincontainer.size - _UDim2New(0, 1, 0, 1)
local positions = {}
for i, v in next, (menu.subsections[tab][side]) do
positions[1 + #positions] = {
yPos = v.maincontainer.absoluteposition.y,
ref = v
}
end
_TableSort(positions, function(a, b) return a.yPos < b.yPos end)
local yoffset = 0
local real = 0
for i, v in next, (positions) do
real = real + 1
v.ref.maincontainer.position = _UDim2New((side - 1) / 2, 0, yoffset / targettab.absolutesize.y, 0)
v.ref.id = real
yoffset = yoffset + v.ref.bounds.y
end
end,
getPosition = function()
return this.maincontainer.position
end,
resetSide = function()
menu.subsections[tab][side][name] = nil
side = this.panelReposition.originalSide
menu.subsections[tab][this.panelReposition.originalSide][name] = this
end,
getSide = function()
return side
end,
setSide = function(new)
menu.subsections[tab][side][name] = nil
side = new
menu.subsections[tab][new][name] = this
end,
setPosition = function(new)
this.maincontainer.position = new
local positions = {}
for i, v in next, (menu.subsections[tab][side]) do
positions[1 + #positions] = {
yPos = v.maincontainer.absoluteposition.y,
ref = v
}
end
_TableSort(positions, function(a, b) return a.yPos < b.yPos end)
local yoffset = 0
local real = 0
for i, v in next, (positions) do
real = real + 1
v.ref.maincontainer.position = _UDim2New((side - 1) / 2, 0, yoffset / targettab.absolutesize.y, 0)
v.ref.id = real
yoffset = yoffset + v.ref.bounds.y
end
end,
}
menu.subtabs[tab][name] = {}
menu.subsections[tab][side][name] = this
end
menu.tooltip = {}
menu.tooltip.open = false
menu.tooltip.backoutline = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = utilities.base,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 128, 0, 48),
position = _UDim2New(0, 100, 0, 100),
zindex = menu.basezindex + 23,
color = menucolors.a,
visible = true,
thickness = 0,
filled = true,
transparency = 0,
name = "okay",
})
menu.tooltip.container = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = menu.tooltip.backoutline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 24,
color = menucolors.b,
visible = true,
thickness = 0,
filled = true,
transparency = 0,
name = "okay",
})
menu.tooltip.title = DrawingFunction("text", {
parent = menu.tooltip.container,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 4, 0, 2),
zindex = menu.basezindex + 25,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = "Example of a tooltip",
transparency = 0,
name = "okay",
})
menu.tooltip.currenttrans = 0
menu.tooltip.hoveredfor = 0
function menu:calltooltip(text, object, offset)
if menu.tooltip.connection then
menu.tooltip.connection:Disconnect()
menu.tooltip.connection = nil
end
menu.tooltip.hoveredfor = 0
menu.tooltip.currenttrans = 0
menu.tooltip.backoutline.transparency = menu.tooltip.currenttrans
menu.tooltip.container.transparency = menu.tooltip.currenttrans
menu.tooltip.title.transparency = menu.tooltip.currenttrans
menu.tooltip.backoutline.position = _UDim2New(0, object.absoluteposition.x + 4 + offset.x, 0, object.absoluteposition.y + object.absolutesize.y + offset.y)
local splitText = {}
local charInline = 0
for i, v in next, text:split("") do
charInline = charInline + 1
if v == " " then
splitText.lastSpaceIdx = i
end
if charInline >= _MathFloor((menu.objects.backborder.absolutesize.x * 0.5) / 6) then
splitText.lastSpaceIdx = splitText.lastSpaceIdx or i
splitText.lastSpaceIdx = i
v = "\n"
charInline = 0
end
_TableInsert(splitText, v)
end
text = _TableConcat(splitText)
local split = text:split("\n")
local textLineLength = {}
local yLength = 0
for i, v in next, split do
local textBound = Drawing.new("Text")
textBound.Visible = true
textBound.Font = Drawing.Fonts.Plex
textBound.Size = 13
textBound.Text = v
local textBounds = textBound.TextBounds
textBound.Visible = false
textBound:Remove()
textBound = nil
textLineLength[i] = textBounds.x
yLength = yLength + textBounds.y
end
_TableSort(textLineLength, function(a, b) return a > b end)
local longestThing = textLineLength[1]
menu.tooltip.backoutline.size = _UDim2New(0, longestThing + 8, 0, yLength + 8)
menu.tooltip.title.text = text
local createdPos = object.absoluteposition
menu.tooltip.connection = RunService.Stepped:Connect(function(u, dt)
if object.hovering then
menu.tooltip.hoveredfor = menu.tooltip.hoveredfor + dt
if menu.tooltip.hoveredfor > 1 then
menu.tooltip.currenttrans = menu.tooltip.currenttrans + (dt * 4)
end
else
menu.tooltip.currenttrans = menu.tooltip.currenttrans - (dt * 4)
end
menu.tooltip.currenttrans = _MathClamp(menu.tooltip.currenttrans, 0, 1)
menu.tooltip.backoutline.transparency = menu.tooltip.currenttrans
menu.tooltip.container.transparency = menu.tooltip.currenttrans
menu.tooltip.title.transparency = menu.tooltip.currenttrans
if menu.uiopen == false or createdPos ~= object.absoluteposition then
menu.tooltip.connection:Disconnect()
menu.tooltip.connection = nil
menu.tooltip.currenttrans = 0
menu.tooltip.hoveredfor = 0
menu.tooltip.backoutline.transparency = menu.tooltip.currenttrans
menu.tooltip.container.transparency = menu.tooltip.currenttrans
menu.tooltip.title.transparency = menu.tooltip.currenttrans
end
end)
end
local baseoffset = 0
local boundoffset = 0
function menu:createtoggle(parameters)
local tab = parameters.tab
local subsection = parameters.subsection
local targetsection = menu.directory[tab][subsection]
local name = parameters.name
local flag = parameters.flag
local tooltip = parameters.tooltip
local this = {}
menu.flags[flag] = {}
local myflag = menu.flags[flag]
this.myflag = myflag -- mypenis
myflag.__index = menu.flags[flag]
myflag.type = "toggle"
myflag.name = name
myflag.value = parameters.value
myflag.changed = utilities.signal.new()
myflag.element = this
local offset = baseoffset + 8
for i, v in next, (menu.elements[tab][subsection]) do
if _Type(v) == "table" then
offset = offset + v.bounds.y
end
end
this.hitbox = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = targetsection,
anchorpoint = _Vector2New(0.5, 0),
size = _UDim2New(1, 0, 0, 14),
position = _UDim2New(0.5, 0, 0, offset),
zindex = menu.basezindex + 6,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
transparency = 0,
name = "okay",
})
this.toggle = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.hitbox,
anchorpoint = _Vector2New(0, 0.5),
size = _UDim2New(0, 8, 0, 8),
position = _UDim2New(0, 8, 0.5, 0),
zindex = menu.basezindex + 7,
color = menu.startingParameters.colors.f,
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.toggle
this.toggleoutline = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.toggle,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 6,
color = _Color3FromRGB(12, 12, 12),
visible = true,
thickness = 1,
filled = false,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.toggleoutline
this.toggled = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.toggle,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(1, 0, 1, 0),
position = _UDim2New(0, 0, 0, 0),
zindex = menu.basezindex + 7,
color = menu.accent,
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
this.toggled.visible = myflag.value
menu.openclose[1 + #menu.openclose] = this.toggled
menu.accents[1 + #menu.accents] = this.toggled
this.title = DrawingFunction("text", {
parent = this.hitbox,
anchorpoint = _Vector2New(0, 0.5),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 24, 0.5, -1),
zindex = menu.basezindex + 6,
color = parameters.detected and _Color3FromRGB(255, 106, 79) or _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = name,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.title
this.realhitbox = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.hitbox,
anchorpoint = _Vector2New(0, 0.5),
size = _UDim2New(0, 32 + this.title.absolutesize.x, 1, 0),
position = _UDim2New(0, 0, 0.5, 0),
zindex = menu.basezindex + 8,
color = _Color3FromRGB(255, 255, 255),
visible = true,
thickness = 0,
filled = true,
transparency = 0,
activated = true,
name = "okay",
})
menu.activations[1 + #menu.activations] = this.realhitbox
function myflag:setvalue(new) -- how 2 config in 5 seconds
myflag.value = new
this.toggled.visible = new
myflag.changed:Fire()
end
this.realhitbox.clicked:Connect(function()
if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen then return end
myflag:setvalue(not myflag.value)
end)
if tooltip then
this.realhitbox.mouseenter:Connect(function()
if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen then return end
menu:calltooltip(tooltip, this.realhitbox, _Vector2New(0, 0))
end)
end
this.bounds = _Vector2New(0, 14 + boundoffset)
this.accessories = {} -- color pickers and what not
menu.elements[tab][subsection][name] = this -- keep a record of this fuck
menu.elements[tab][subsection].updateScrollBarLength()
end
function menu:createcolorpicker(parameters)
local targetobj = menu.elements[parameters.tab][parameters.subsection][parameters.object]
if not targetobj.accessories then
return
end
local name = parameters.name
local flag = parameters.flag
local this = {}
menu.flags[flag] = {}
local myflag = menu.flags[flag]
this.myflag = myflag
myflag.__index = menu.flags[flag]
myflag.type = "color"
myflag.name = name
myflag.color = parameters.color
myflag.animation = {
none = true,
rainbow = false,
linear = false,
oscillating = false,
sawtooth = false,
strobe = false
}
myflag.animationKeyFrames = {
linear = {
["keyframe 1"] = {
color = parameters.color,
transparency = parameters.transparency
},
["keyframe 2"] = {
color = parameters.color,
transparency = parameters.transparency
}
},
oscillating = {
["keyframe 1"] = {
color = parameters.color,
transparency = parameters.transparency
},
["keyframe 2"] = {
color = parameters.color,
transparency = parameters.transparency
}
},
sawtooth = {
["keyframe 1"] = {
color = parameters.color,
transparency = parameters.transparency
},
["keyframe 2"] = {
color = parameters.color,
transparency = parameters.transparency
}
},
strobe = {
["keyframe 1"] = {
color = parameters.color,
transparency = parameters.transparency
},
["keyframe 2"] = {
color = parameters.color,
transparency = parameters.transparency
}
},
} -- color and transparency
myflag.animationSpeed = {
rainbow = 100,
linear = 100,
oscillating = 100,
sawtooth = 100,
strobe = 100
}
myflag.transparency = parameters.transparency
myflag.changed = utilities.signal.new()
local offset = baseoffset + 12
for i, v in next, (targetobj.accessories) do
offset = offset + v.bounds.x -- get the bounds of the current accessories in the thing
end
this.outline = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = targetobj.hitbox,
anchorpoint = _Vector2New(1, 0.5),
size = _UDim2New(0, 24, 0, 12),
position = _UDim2New(1, -offset, 0.5, 0),
zindex = menu.basezindex + 8,
color = _Color3FromRGB(12, 12, 12),
visible = true,
thickness = 0,
activated = true,
filled = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.outline
this.color = {}
for i = 1, 5 do
this.color[i] = utilities:draw("frame", { -- for getting the bounds of the thing, also not using DrawingFunction because the gradient isnt part of the ui accents
parent = this.outline,
anchorpoint = _Vector2New(0.5, 0),
size = _UDim2New(1, -2, 0, 2),
position = _UDim2New(0.5, 0, 0, ((i - 1) * 2) + 1),
zindex = menu.basezindex + 10,
color = parameters.color:lerp(_Color3FromRGB(_MathClamp(parameters.color.r * 255 - 33, 0, 255), _MathClamp(parameters.color.g * 255 - 33, 0, 255), _MathClamp(parameters.color.b * 255 - 33, 0, 255)), i / 5),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.color[i]
end
function myflag:setcolor(new)
myflag.color = new
for i = 1, 5 do
local segment = this.color[i]
segment.color = new:lerp(_Color3FromRGB(_MathClamp(new.r * 255 - 20, 0, 255), _MathClamp(new.g * 255 - 20, 0, 255), _MathClamp(new.b * 255 - 20, 0, 255)), (i - 1) / 5)
end
myflag.changed:Fire()
end
function myflag:settransparency(new)
myflag.transparency = new
myflag.changed:Fire()
end
function myflag:setAnimation(new)
myflag.animation = new
if this.animationLoop then
this.animationLoop:Disconnect()
this.animationLoop = nil
end
-- hard coded cuz FUCK you
-- funny how evie legit did animations like this better than me x3
if myflag.animation.rainbow then
this.animationLoop = RunService.Stepped:Connect(function()
local oldhue, oldsat, oldval = _Color3ToHSV(myflag.color)
myflag:setcolor(_Color3FromHSV((_Tick() * (myflag.animationSpeed.rainbow / 100) - _MathFloor(_Tick() * (myflag.animationSpeed.rainbow / 100))), oldsat, oldval))
end)
elseif myflag.animation.linear then
this.animationLoop = RunService.Stepped:Connect(function()
local percentage = (_Tick() * (myflag.animationSpeed.linear / 100) - _MathFloor(_Tick() * (myflag.animationSpeed.linear / 100)))
if percentage > 0.5 then
percentage = percentage - 0.5
percentage = percentage * 2
myflag:setcolor(myflag.animationKeyFrames.linear["keyframe 2"].color:Lerp(myflag.animationKeyFrames.linear["keyframe 1"].color, percentage))
if myflag.transparency then
local a = myflag.animationKeyFrames.linear["keyframe 2"].transparency
local b = myflag.animationKeyFrames.linear["keyframe 1"].transparency
local c = percentage
myflag:settransparency(a + (b - a)*c)
end
else
percentage = percentage * 2
myflag:setcolor(myflag.animationKeyFrames.linear["keyframe 1"].color:Lerp(myflag.animationKeyFrames.linear["keyframe 2"].color, percentage))
if myflag.transparency then
local a = myflag.animationKeyFrames.linear["keyframe 1"].transparency
local b = myflag.animationKeyFrames.linear["keyframe 2"].transparency
local c = percentage
myflag:settransparency(a + (b - a)*c)
end
end
end)
elseif myflag.animation.oscillating then
this.animationLoop = RunService.Stepped:Connect(function()
local percentage = (_Tick() * (myflag.animationSpeed.oscillating / 100) - _MathFloor(_Tick() * (myflag.animationSpeed.oscillating / 100)))
if percentage > 0.5 then
percentage = percentage - 0.5
myflag:setcolor(myflag.animationKeyFrames.oscillating["keyframe 2"].color:Lerp(myflag.animationKeyFrames.oscillating["keyframe 1"].color, _MathSin(percentage * math.pi)))
if myflag.transparency then
local a = myflag.animationKeyFrames.oscillating["keyframe 2"].transparency
local b = myflag.animationKeyFrames.oscillating["keyframe 1"].transparency
local c = _MathSin(percentage * math.pi)
myflag:settransparency(a + (b - a)*c)
end
else
myflag:setcolor(myflag.animationKeyFrames.oscillating["keyframe 1"].color:Lerp(myflag.animationKeyFrames.oscillating["keyframe 2"].color, _MathSin(percentage * math.pi)))
if myflag.transparency then
local a = myflag.animationKeyFrames.oscillating["keyframe 1"].transparency
local b = myflag.animationKeyFrames.oscillating["keyframe 2"].transparency
local c = _MathSin(percentage * math.pi)
myflag:settransparency(a + (b - a)*c)
end
end
end)
elseif myflag.animation.strobe then
this.animationLoop = RunService.Stepped:Connect(function()
local percentage = (_Tick() * (myflag.animationSpeed.strobe / 100) - _MathFloor(_Tick() * (myflag.animationSpeed.strobe / 100)))
if percentage > 0.5 then
myflag:setcolor(myflag.animationKeyFrames.strobe["keyframe 2"].color)
if myflag.transparency then
myflag:settransparency(myflag.animationKeyFrames.strobe["keyframe 2"].transparency)
end
else
myflag:setcolor(myflag.animationKeyFrames.strobe["keyframe 1"].color)
if myflag.transparency then
myflag:settransparency(myflag.animationKeyFrames.strobe["keyframe 1"].transparency)
end
end
end)
elseif myflag.animation.sawtooth then
this.animationLoop = RunService.Stepped:Connect(function()
local percentage = (_Tick() * (myflag.animationSpeed.sawtooth / 100) - _MathFloor(_Tick() * (myflag.animationSpeed.sawtooth / 100)))
myflag:setcolor(myflag.animationKeyFrames.sawtooth["keyframe 1"].color:Lerp(myflag.animationKeyFrames.sawtooth["keyframe 2"].color, percentage))
if myflag.transparency then
local a = myflag.animationKeyFrames.sawtooth["keyframe 1"].transparency
local b = myflag.animationKeyFrames.sawtooth["keyframe 2"].transparency
local c = percentage
myflag:settransparency(a + (b - a)*c)
end
end)
end
end
function myflag:setAnimationKeyFrames(new)
for t, kf in next, new do
myflag.animationKeyFrames[t] = kf
end
end
function myflag:setAnimationSpeed(new)
for t, s in next, new do
myflag.animationSpeed[t] = s
end
end
myflag:setcolor(parameters.color)
if myflag.transparency then
myflag:settransparency(parameters.transparency)
end
this.outline.clicked:Connect(function()
if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen then return end
menu:callcolorpicker(name, myflag, utilities.mouse.position, myflag.transparency)
end)
this.outline.clicked2:Connect(function()
if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen then return end
menu:callcolorcopypaste(myflag, utilities.mouse.position)
end)
this.bounds = _Vector2New(28, 0)
targetobj.accessories[name] = this
end
function menu:createkeybind(parameters)
local targetobj = menu.elements[parameters.tab][parameters.subsection][parameters.object]
if not targetobj.accessories then
return
end
local name = parameters.name
local flag = parameters.flag
local this = {}
this.dropdown = {}
this.dropdownopened = false
menu.flags[flag] = {}
local myflag = menu.flags[flag]
this.myflag = myflag
myflag.__index = menu.flags[flag]
myflag.type = "keybind"
myflag.value = parameters.value
myflag.tab = parameters.tab
myflag.name = name
myflag.section = parameters.subsection
myflag.object = parameters.object
myflag.parentflag = parameters.parentflag
myflag.activation = "always"
myflag.key = nil
myflag.changed = utilities.signal.new()
local offset = baseoffset + 16
for i, v in next, (targetobj.accessories) do
offset = offset + v.bounds.x -- get the bounds of the current accessories in the thing
end
this.outline = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = targetobj.hitbox,
anchorpoint = _Vector2New(1, 0.5),
size = _UDim2New(0, 40, 0, 16),
position = _UDim2New(1, -offset, 0.5, 0),
zindex = menu.basezindex + 7,
color = menucolors.a,
visible = true,
thickness = 1,
activated = true,
filled = false,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.outline
menu.activations[1 + #menu.activations] = this.outline
this.updating = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.outline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 0, 1, 0),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 8,
color = menu.accent,
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
menu.accents[1 + #menu.accents] = this.updating
this.container = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.outline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 9,
color = menucolors.c,
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.container
this.title = DrawingFunction("text", {
parent = this.outline,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0.5, -((7)/2), 0.5, -7),
zindex = menu.basezindex + 10,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = "E",
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.title
for i, v in next, ({"hold", "toggle", "hold off", "always"}) do
this.dropdown[v] = {}
this.dropdown[v].outline = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.outline,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 64, 0, 22),
position = _UDim2New(-1, 16, 1, ((i - 1) * 20) + 2),
zindex = menu.basezindex + 11,
color = menucolors.a,
visible = false,
thickness = 0,
filled = true,
activated = true,
name = "okay",
})
menu.activations[1 + #menu.activations] = this.dropdown[v].outline
this.dropdown[v].container = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.dropdown[v].outline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 12,
color = menucolors.c,
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
this.dropdown[v].title = DrawingFunction("text", {
parent = this.dropdown[v].outline,
anchorpoint = _Vector2New(0, 0.5),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 4, 0.5, 0),
zindex = menu.basezindex + 13,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = v,
name = "okay",
})
this.dropdown[v].outline.clicked:Connect(function()
myflag:setactivation(v)
for i, v in next, (this.dropdown) do
v.outline.visible = false
end
menu.isadropdownopen = false
end)
end
this.singleupdate = function()
if not myflag.key then
myflag.value = false
end -- we dont even have a key.....
if myflag.activation == "always" then
myflag.value = true
else
myflag.value = false
end
end
function myflag:setkey(new)
if not new or new == "NONE" then -- no key !
myflag.key = nil
this.title.text = "NONE"
this.title.position = _UDim2New(0.5, -((4*7)/2), 0.5, -7)
else
local key = _tostring(new)
myflag.key = key
this.title.text = _StringSub(_StringUpper(key:sub(14)), 1, 5)
end
this.singleupdate()
end
function myflag:setactivation(new)
myflag.activation = new
for i, v in next, (this.dropdown) do
v.title.color = (myflag.activation == v.title.text) and menu.accent or _Color3FromRGB(255, 255, 255)
end
this.singleupdate()
end
myflag:setactivation("always")
function myflag:setvalue(new)
myflag.value = new
this.singleupdate()
end
this.outline.clicked2:Connect(function()
if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen then return end
this.dropdownopened = not this.dropdownopened
menu.isadropdownopen = this.dropdownopened
for i, v in next, (this.dropdown) do
v.outline.visible = this.dropdownopened
v.title.color = (myflag.activation == v.title.text) and menu.accent or _Color3FromRGB(255, 255, 255)
v.outline.position = v.outline.position
end
end)
local keyupdater
this.outline.clicked:Connect(function()
if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen then return end
this.updating.visible = true
keyupdater = InputService.InputBegan:Connect(function(Input, gameProcessed)
if InputService:GetFocusedTextBox() then return end
if Input.UserInputType == Enum.UserInputType.Keyboard then
if Input.KeyCode.Value == 27 or Input.KeyCode.Value == 8 then
myflag:setkey(nil)
else
myflag:setkey(Input.KeyCode)
end
this.updating.visible = false
if keyupdater then
keyupdater:Disconnect()
keyupdater = nil
end
end
end)
end)
myflag:setkey(parameters.value)
InputService.InputBegan:Connect(function(Input, gameProcessed)
if InputService:GetFocusedTextBox() then return end
if not myflag.key then
myflag.value = false
end -- we dont even have a key.....
if myflag.activation == "always" then
myflag.value = true
end
if myflag.activation == "always" or not myflag.key then
return
end
if Input.UserInputType == Enum.UserInputType.Keyboard then
if _tostring(Input.KeyCode) == myflag.key then
if myflag.activation == "toggle" then
myflag.value = not myflag.value
myflag.changed:Fire()
end
if myflag.activation == "hold" then
myflag.value = true
myflag.changed:Fire()
end
if myflag.activation == "hold off" then
myflag.value = false
myflag.changed:Fire()
end
end
end
end)
InputService.InputEnded:Connect(function(Input, gameProcessed)
if InputService:GetFocusedTextBox() then return end
if not myflag.key then
myflag.value = false
end -- we dont even have a key.....
if myflag.activation == "always" then
myflag.value = true
end
if myflag.activation == "always" or not myflag.key then
return
end
if myflag.activation == "always" then
myflag.value = true
end
if Input.UserInputType == Enum.UserInputType.Keyboard then
if _tostring(Input.KeyCode) == myflag.key then
if myflag.activation == "hold" then
myflag.value = false
myflag.changed:Fire()
end
if myflag.activation == "hold off" then
myflag.value = true
myflag.changed:Fire()
end
end
end
end)
this.bounds = _Vector2New(44, 0)
targetobj.accessories[name] = this
end
function menu:createslider(parameters)
local tab = parameters.tab
local subsection = parameters.subsection
local targetsection = menu.directory[tab][subsection]
local name = parameters.name
local flag = parameters.flag
local minimum = parameters.minimum
local tooltip = parameters.tooltip
local maximum = parameters.maximum
local suffix = parameters.suffix ~= nil and parameters.suffix or ""
local customtext = parameters.custom ~= nil and parameters.custom or {}
local this = {}
local offset = baseoffset + 0
menu.flags[flag] = {}
local myflag = menu.flags[flag]
this.myflag = myflag -- mypenis
myflag.__index = menu.flags[flag]
myflag.type = "slider"
myflag.name = name
myflag.value = parameters.value
myflag.element = this
myflag.changed = utilities.signal.new()
for i, v in next, (menu.elements[tab][subsection]) do
if _Type(v) == "table" then
offset = offset + v.bounds.y
end
end
this.holder = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = targetsection,
anchorpoint = _Vector2New(0.5, 0),
size = _UDim2New(1, 0, 0, 24),
position = _UDim2New(0.5, 0, 0, offset),
zindex = menu.basezindex + 6,
color = _Color3FromRGB(255, 255, 255),
visible = true,
thickness = 0,
filled = true,
transparency = 0,
name = "okay",
})
this.title = DrawingFunction("text", {
parent = this.holder,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 16, 0, 8),
zindex = menu.basezindex + 7,
color = parameters.detected and _Color3FromRGB(255, 106, 79) or _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = name,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.title
this.sliderback = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.holder,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(1, -32, 0, 6),
position = _UDim2New(0, 16, 0, 24),
zindex = menu.basezindex + 7,
color = menucolors.b,
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.sliderback
this.sliderbackoutline = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.sliderback,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 6,
color = menucolors.d,
visible = true,
thickness = 1,
filled = false,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.sliderbackoutline
this.slider = {}
for i = 1, 6 do
this.slider[i] = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.sliderback,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 6, 0, 1),
position = _UDim2New(0, 0, 0, i),
zindex = menu.basezindex + 9,
color = menu.accent:lerp(_Color3FromRGB(_MathClamp((menu.accent.r * 255) - 5, 0, 255), _MathClamp((menu.accent.g * 255) - 5, 0, 255), _MathClamp((menu.accent.b * 255) - 5, 0, 255)), (i - 1) / 5),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.slider[i]
end
menu.accents[1 + #menu.accents] = this.slider
this.hitbox = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.sliderback,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 0, 1, 10),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 7,
color = _Color3FromRGB(255, 255, 255),
visible = true,
thickness = 0,
transparency = 0,
activated = true,
filled = true,
name = "okay",
})
menu.activations[1 + #menu.activations] = this.hitbox
this.valuetitle = DrawingFunction("text", {
parent = this.sliderback,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(1, -((2 * 7)/2), 0, 0),
zindex = menu.basezindex + 9,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = "0°",
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.valuetitle
this.addtext = DrawingFunction("text", {
parent = this.sliderback,
anchorpoint = _Vector2New(1, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(1, 3, 0.5, -7),
zindex = menu.basezindex + 9,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
activated = true,
text = "+",
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.addtext
this.subtext = DrawingFunction("text", {
parent = this.sliderback,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, -10, 0.5, -7),
zindex = menu.basezindex + 9,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = "-",
activated = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.subtext
local textupdateconnection -- so u can click on the value text and manually enter a number
function myflag:setvalue(new)
if new == nil then
new = 0
end
local newtext = _tostring(new)
if textupdateconnection then -- we r typing
newtext = newtext .. "|"
else
new = _MathClamp(new, minimum, maximum)
end
newtext = _tostring(new)
if customtext[newtext] then
this.valuetitle.text = customtext[newtext]
else
this.valuetitle.text = newtext .. suffix
end
for i, v in next, this.slider do
v.position = _UDim2New((((_MathClamp(new, minimum, maximum) - minimum)) / (maximum - minimum)), 0, 0, i - 1) -- s3x
local tostart = v.absoluteposition.x - this.sliderback.absoluteposition.x
local scalederrr = -tostart / this.sliderback.absolutesize.x
v.size = _UDim2New(scalederrr, 0, 0, 1)
end
this.valuetitle.position = this.slider[#this.slider].position + _UDim2New(0, -((#this.valuetitle.text * 7)/2), 0, 0)
myflag.value = new
myflag.changed:Fire()
end
function myflag:setMax(new)
maximum = new
end
function myflag:setMin(new)
minimum = new
end
local connection
this.hitbox.clicked:Connect(function()
if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen then return end
connection = RunService.Stepped:Connect(function()
local relative = utilities.mouse.position.x
local mousebound = utilities.mouse.position.x - this.hitbox.absoluteposition.x - 1
mousebound = _MathClamp(mousebound, 0, this.hitbox.absolutesize.x)
local result = mousebound
result = _MathClamp(result, 0, this.hitbox.absolutesize.x)
result = _MathFloor(0.5 + (((maximum - minimum) / this.hitbox.absolutesize.x) * mousebound) + minimum)
myflag:setvalue(result)
if this.hitbox.holding == false or menu.uiopen == false then
connection:Disconnect()
connection = nil
return
end
end)
end)
this.addtext.mouseenter:Connect(function()
this.addtext.color = menu.accent
end)
this.addtext.mouseleave:Connect(function()
this.addtext.color = _Color3FromRGB(255, 255, 255)
end)
this.subtext.mouseenter:Connect(function()
this.subtext.color = menu.accent
end)
this.subtext.mouseleave:Connect(function()
this.subtext.color = _Color3FromRGB(255, 255, 255)
end)
this.addtext.clicked:Connect(function()
myflag:setvalue(myflag.value + 1)
end)
this.subtext.clicked:Connect(function()
myflag:setvalue(myflag.value - 1)
end)
myflag:setvalue(parameters.value)
if tooltip then
this.hitbox.mouseenter:Connect(function()
menu:calltooltip(tooltip, this.hitbox, _Vector2New(-4, 2))
end)
end
this.bounds = _Vector2New(0, 36 + boundoffset)
menu.elements[tab][subsection][name] = this
menu.elements[tab][subsection].updateScrollBarLength()
end
function menu:createdropdown(parameters)
local tab = parameters.tab
local subsection = parameters.subsection
local targetsection = menu.directory[tab][subsection]
local name = parameters.name
local flag = parameters.flag
local tooltip = parameters.tooltip
local multichoice = parameters.multichoice
local this = {}
this.dropdownopened = false
this.valuecontainer = {}
local offset = baseoffset + 0
menu.flags[flag] = {}
local myflag = menu.flags[flag]
this.myflag = myflag -- mypenis
myflag.__index = menu.flags[flag]
myflag.type = "dropdown"
myflag.value = {}
myflag.name = name
myflag.changed = utilities.signal.new()
for i, v in next, (menu.elements[tab][subsection]) do
if _Type(v) == "table" then
offset = offset + v.bounds.y
end
end
for i, v in next, (parameters.values) do
local name = v[1]
local state = v[2]
myflag.value[name] = state
end
this.holder = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = targetsection,
anchorpoint = _Vector2New(0.5, 0),
size = _UDim2New(1, 0, 0, 24),
position = _UDim2New(0.5, 0, 0, offset),
zindex = menu.basezindex + 6,
color = _Color3FromRGB(255, 255, 255),
visible = true,
thickness = 0,
filled = true,
transparency = 0,
name = "okay",
})
this.title = DrawingFunction("text", {
parent = this.holder,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 16, 0, 8),
zindex = menu.basezindex + 7,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = name,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.title
this.selection = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.holder,
anchorpoint = _Vector2New(0.5, 0),
size = _UDim2New(1, -30, 0, 16),
position = _UDim2New(0.5, 0, 0, 24),
zindex = menu.basezindex + 7,
color = menucolors.c,
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.selection
this.selectiontext = DrawingFunction("text", {
parent = this.selection,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 2, 0.5, -7),
zindex = menu.basezindex + 8,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = "",
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.selectiontext
this.icon = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.selection,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 7,
color = menucolors.c,
visible = true,
thickness = 0,
filled = true,
transparency = 0,
activated = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.icon
menu.activations[1 + #menu.activations] = this.icon
this.icontext = DrawingFunction("text", {
parent = this.icon,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(1, -10, 0.5, -7),
zindex = menu.basezindex + 8,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = "+",
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.icontext
this.selectionoutline = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.selection,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 6,
color = menucolors.d,
visible = true,
thickness = 1,
filled = false,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.selectionoutline
this.scrollerBar = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.selection,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 3, 8 / #parameters.values, 0),
position = _UDim2New(1, -3, 0, 20),
zindex = menu.basezindex + 18,
color = menu.accent,
visible = false,
filled = true,
name = "okay",
})
menu.accents[1 + #menu.accents] = this.scrollerBar
function myflag:setvalue(new)
myflag.value = new
local maximumchars = _MathFloor(this.selection.absolutesize.x / 6.5) - 4 - 2 -- suck
local selected = ""
local selections = 0
for i, v in next, (myflag.value) do
if v then
if selections > 0 then
selected = selected .. ", "
end
selected = selected .. i
selections = selections + 1
end
end
for i, v in next, this.valuecontainer do
v.selectiontext.color = myflag.value[v.selectiontext.text] and menu.accent or _Color3New(1, 1, 1)
end
local needsdotdotdot = false
if _StringLen(selected) > maximumchars then
needsdotdotdot = true
end
selected = _StringSub(selected, 0, maximumchars) .. (needsdotdotdot and "..." or "" )
if selections == 0 then
this.selectiontext.text = "none"
else
this.selectiontext.text = selected
end
myflag.changed:Fire()
end
this.selection.getpropertychangedsignal:Connect(function(prop, val)
if prop == "absolutesize" then
myflag:setvalue(myflag.value)
end
end)
local numCreated = 0
for val, v in next, (parameters.values) do
if numCreated >= 8 then
break
end
local temporary = {}
local val = v[1] -- so that its in order
temporary.value = val
temporary.selectionoutline = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.selection,
anchorpoint = _Vector2New(0.5, 0),
size = _UDim2New(1, 2, 0, 22),
position = _UDim2New(0.5, 0, 0, ((1 + #this.valuecontainer) * 20) -2),
zindex = menu.basezindex + 14,
color = menucolors.d,
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
temporary.selection = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = temporary.selectionoutline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 15,
color = menucolors.c,
visible = true,
thickness = 0,
filled = true,
activated = true,
name = "okay",
})
menu.activations[1 + #menu.activations] = temporary.selection
temporary.selectiontext = DrawingFunction("text", {
parent = temporary.selection,
anchorpoint = _Vector2New(0, 0.5),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 2, 0.5, 0),
zindex = menu.basezindex + 16,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = val,
name = "okay",
})
temporary.selection.clicked:Connect(function()
local thisVal = temporary.selectiontext.text
if parameters.multichoice == false then
for i, v in next, (myflag.value) do
myflag.value[i] = (thisVal == i) -- suck my nutz
end
else
if not myflag.value then
myflag.value[thisVal] = false
end
myflag.value[thisVal] = not myflag.value[thisVal] -- suck my nutz
end
myflag:setvalue(myflag.value)
end)
this.valuecontainer[1 + #this.valuecontainer] = temporary
numCreated = numCreated + 1
end
local currentScrollLevel = 0
if #parameters.values > 8 then
local scrollUpConnection
local scrollDownConnection
local function updateScroll()
this.scrollerBar.size = _UDim2New(0, 3, 8 / #parameters.values, 0)
local currentY = _MathFloor(currentScrollLevel / #parameters.values * 170)
currentY = _MathClamp(currentY, 1, (170) - this.scrollerBar.absolutesize.y - 1)
this.scrollerBar.position = _UDim2New(1, -3, 0, currentY + 20)
for i = 1, 8 do
local pointStartVis = currentScrollLevel + i
local ref = this.valuecontainer[i]
local flagRef = parameters.values[pointStartVis]
ref.selectiontext.text = flagRef[1]
ref.selectiontext.color = myflag.value[flagRef[1]] and menu.accent or _Color3New(1, 1, 1)
end
end
scrollUpConnection = utilities.mouse.scrollup:Connect(function(d)
if (menu.isadropdownopen and this.dropdownopened == false) or menu.isacolorpickeropen or menu.uiopen == false then return end
currentScrollLevel = _MathClamp(currentScrollLevel - d, 0, #parameters.values - 8)
updateScroll()
end)
scrollDownConnection = utilities.mouse.scrolldown:Connect(function(d)
if (menu.isadropdownopen and this.dropdownopened == false) or menu.isacolorpickeropen or menu.uiopen == false then return end
currentScrollLevel = _MathClamp(currentScrollLevel - d, 0, #parameters.values - 8)
updateScroll()
end)
end
this.icon.clicked:Connect(function()
if (menu.isadropdownopen and this.dropdownopened == false) or menu.isacolorpickeropen or menu.uiopen == false then return end
this.dropdownopened = not this.dropdownopened
this.icontext.text = (this.dropdownopened == true) and "-" or "+"
menu.isadropdownopen = this.dropdownopened
for i, v in next, (this.valuecontainer) do
v.selectionoutline.visible = this.dropdownopened
v.selectionoutline.position = v.selectionoutline.position
v.selectionoutline.size = v.selectionoutline.size
end
for i = 1, 8 do
local pointStartVis = currentScrollLevel + i
local ref = this.valuecontainer[i]
local flagRef = parameters.values[pointStartVis]
if not (ref and ref.selectiontext) then continue end
ref.selectiontext.text = flagRef[1]
ref.selectiontext.color = myflag.value[flagRef[1]] and menu.accent or _Color3New(1, 1, 1)
end
if #parameters.values > 8 then
this.scrollerBar.visible = this.dropdownopened
end
end)
if tooltip then
this.icon.mouseenter:Connect(function()
if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen or menu.uiopen == false then return end
menu:calltooltip(tooltip, this.icon, _Vector2New(-4, 2))
end)
end
local vals = {}
for i, v in next, (parameters.values) do
local name = v[1]
local state = v[2]
vals[name] = state
end
myflag:setvalue(vals)
this.bounds = _Vector2New(0, 38 + boundoffset)
menu.elements[tab][subsection][name] = this
menu.elements[tab][subsection].updateScrollBarLength()
end
function menu:createbutton(parameters)
local tab = parameters.tab
local subsection = parameters.subsection
local targetsection = menu.directory[tab][subsection]
local confirmation = parameters.confirmation ~= nil and parameters.confirmation or nil
local name = parameters.name
local flag = parameters.flag
local this = {}
menu.flags[flag] = {}
local myflag = menu.flags[flag]
this.myflag = myflag -- mypenis
myflag.__index = menu.flags[flag]
myflag.type = "button"
myflag.name = name
myflag.pressed = utilities.signal.new()
local offset = baseoffset + 10
for i, v in next, (menu.elements[tab][subsection]) do
if _Type(v) == "table" then
offset = offset + v.bounds.y
end
end
this.hitbox = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = targetsection,
anchorpoint = _Vector2New(0.5, 0),
size = _UDim2New(1, -28, 0, 20),
position = _UDim2New(0.5, 0, 0, offset),
zindex = menu.basezindex + 7,
color = menucolors.d,
visible = true,
thickness = 1,
filled = false,
activated = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.hitbox
menu.activations[1 + #menu.activations] = this.hitbox
this.container = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.hitbox,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 8,
color = menucolors.c,
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.container
this.title = DrawingFunction("text", {
parent = this.container,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0.5, -((#name * 7)/2), 0.5, -7),
zindex = menu.basezindex + 9,
color = parameters.detected and _Color3FromRGB(255, 106, 79) or _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
text = name,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.title
local lastactivation
local connection
local old = this.title.position
this.hitbox.clicked:Connect(function()
if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen then return end
if confirmation then
if this.title.text ~= "confirm?" then
this.title.text = "confirm?"
this.title.position = _UDim2New(0.5, -((#this.title.text * 7)/2), 0.5, -7)
this.title.color = menu.accent
lastactivation = _Tick()
connection = RunService.Stepped:Connect(function()
if _Tick() - lastactivation > 2 then
this.title.text = name
this.title.color = _Color3New(1, 1, 1)
this.title.position = old
lastactivation = _Tick()
connection:Disconnect()
connection = nil
end
end)
else
myflag.pressed:Fire()
this.title.text = name
this.title.color = _Color3New(1, 1, 1)
lastactivation = _Tick()
this.title.position = old
connection:Disconnect()
connection = nil
lastactivation = _Tick()
end
else
myflag.pressed:Fire()
end
this.container.color = menucolors.a
_TaskWait(0.05)
this.container.color = menucolors.c
end)
this.bounds = _Vector2New(0, 24 + boundoffset)
menu.elements[tab][subsection][name] = this -- keep a record of this fuck
menu.elements[tab][subsection].updateScrollBarLength()
end
function menu:createtextbox(parameters)
local tab = parameters.tab
local subsection = parameters.subsection
local targetsection = menu.directory[tab][subsection]
local name = parameters.text
local flag = parameters.flag
local this = {}
menu.flags[flag] = {}
local myflag = menu.flags[flag]
this.myflag = myflag -- mypenis
myflag.__index = menu.flags[flag]
myflag.type = "textbox"
myflag.value = name
myflag.name = name
myflag.changed = utilities.signal.new()
local offset = baseoffset + 10
for i, v in next, (menu.elements[tab][subsection]) do
if _Type(v) == "table" then
offset = offset + v.bounds.y
end
end
this.hitbox = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = targetsection,
anchorpoint = _Vector2New(0.5, 0),
size = _UDim2New(1, -28, 0, 20),
position = _UDim2New(0.5, 0, 0, offset),
zindex = menu.basezindex + 7,
color = menucolors.d,
visible = true,
thickness = 0,
filled = true,
activated = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.hitbox
menu.activations[1 + #menu.activations] = this.hitbox
this.container = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.hitbox,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 8,
color = menucolors.b,
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.container
this.title = DrawingFunction("text", {
parent = this.container,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 4, 0.5, -7),
zindex = menu.basezindex + 9,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = menucolors.d,
text = name,
name = "okay",
})
menu.openclose[1 + #menu.openclose] = this.title
local textupdateconnection
function myflag:setvalue(new)
myflag.value = new
this.title.text = myflag.value
if textupdateconnection then -- currently typing...
this.title.color = menu.accent
this.title.text = this.title.text .. "|"
end
myflag.changed:Fire()
end
this.hitbox.clicked:Connect(function()
if menu.uiopen == false or menu.isadropdownopen or menu.isacolorpickeropen then return end
if textupdateconnection then
textupdateconnection:Disconnect()
textupdateconnection = nil
this.title.text = this.title.text:gsub("|", "")
this.title.color = _Color3New(1, 1, 1)
end
this.title.color = menu.accent
this.title.text = this.title.text .. "|"
textupdateconnection = InputService.InputBegan:Connect(function(Input, gameProcessed)
if Input.UserInputType == Enum.UserInputType.Keyboard then
if Input.KeyCode.Value == 27 or Input.KeyCode.Value == 13 then -- escape or enter pressed -> close the thing
textupdateconnection:Disconnect()
textupdateconnection = nil
this.title.text = this.title.text:gsub("|", "")
this.title.color = _Color3New(1, 1, 1)
elseif Input.KeyCode.Value == 8 then -- backspace -> subtract the text by 1
if InputService:IsKeyDown(Enum.KeyCode.LeftControl) or InputService:IsKeyDown(Enum.KeyCode.RightControl) then
myflag:setvalue("")
else
myflag:setvalue(myflag.value:sub(0, -2)) -- remove the last char
end
elseif Input.KeyCode.Value == 32 then -- spacebar
myflag:setvalue(myflag.value .. " ") -- remove the last char
elseif Input.KeyCode.Value == 118 and (InputService:IsKeyDown(Enum.KeyCode.LeftControl) or InputService:IsKeyDown(Enum.KeyCode.RightControl)) then -- the v key
this.title.text = this.title.text:gsub("|", "")
this.title.color = _Color3New(1, 1, 1)
textupdateconnection:Disconnect()
textupdateconnection = nil
myflag:setvalue(utilities.getclipboard())
else
local key = _tostring(Input.KeyCode):sub(14)
if _TableFind(menu.validkeys, key) or menu.validnumberkeys[key] then
if menu.validnumberkeys[key] then
key = menu.validnumberkeys[key]
end
if InputService:IsKeyDown(Enum.KeyCode.LeftShift) or InputService:IsKeyDown(Enum.KeyCode.RightShift) then
key = _StringUpper(key)
else
key = _StringLower(key)
end
myflag:setvalue(myflag.value .. key)
end
end
end
end)
end)
this.bounds = _Vector2New(0, 24 + boundoffset)
menu.elements[tab][subsection][name] = this -- keep a record of this fuck
menu.elements[tab][subsection].updateScrollBarLength()
end
local baseOffsetX = 16
local baseOffsetY = 16
menu.currentnotifications = {}
menu.notificationmanagement = RunService.RenderStepped:Connect(function(dt)
local sorted = {}
local prioritiesgroups = {}
-- sort the fucker
_TableSort(menu.currentnotifications, function(a, b) return a.priority > b.priority end)
for i, v in next, menu.currentnotifications do
if v.ignoreanimations then
else
if not prioritiesgroups[v.priority] then
prioritiesgroups[v.priority] = {}
end
local thisGroup = prioritiesgroups[v.priority]
thisGroup[1 + #thisGroup] = v
end
end
for priority, notifs in next, prioritiesgroups do
_TableSort(notifs, function(a, b) return a.created < b.created end)
end
for priority, notifs in next, prioritiesgroups do
for lifepriority, notif in next, notifs do
sorted[1 + #sorted] = notif
end
end
-- this positions it accordingly
local currentLevel = 0
for i = 1, #sorted do
local notification = sorted[i]
if notification.alivetime > notification.lifetime then -- manage removing the notif once its lifetime has expired
notification.container.visible = false
notification.container.Drawingobject:Remove()
notification.outline1.Drawingobject:Remove()
notification.outline2.Drawingobject:Remove()
notification.container.Drawingobject = nil
notification.outline1.Drawingobject = nil
notification.outline2.Drawingobject = nil
table.clear(notification.container)
table.clear(notification.outline1)
table.clear(notification.outline2)
notification.container.Drawingobject = {}
notification.outline1.Drawingobject = {}
notification.outline2.Drawingobject = {}
for k, n in next, menu.currentnotifications do
if notification == n then
table.clear(notification)
_TableRemove(menu.currentnotifications, k)
end
end
else
notification.container.visible = true
-- manage x position
if notification.alivetime < 1 then -- manage x position coming out of the closet
local percentageMoved = notification.alivetime / 1
local projectedMovePercentage = (1 / (-2.71828 ^ (percentageMoved * 8))) + 1
notification.container.position = _UDim2New(0, -240 + (projectedMovePercentage * 240) + baseOffsetX, 0, 0)
elseif notification.alivetime > notification.lifetime - 0.5 then -- manage x position going back into the closet
local percentageMoved = 2 * (notification.alivetime - (notification.lifetime - 0.5))
local projectedMovePercentage = (1 / (-2.71828 ^ (percentageMoved * 1))) + 1
notification.container.position = _UDim2New(0, baseOffsetX - (projectedMovePercentage * 120), 0, 0)
else
notification.container.position = _UDim2New(0, baseOffsetX, 0, 0)
end
-- manage y position
notification.container.position = notification.container.position + _UDim2New(0, 0, 0, baseOffsetY + currentLevel)
currentLevel = currentLevel + 8 + notification.container.absolutesize.y
-- manage fade
if notification.alivetime < 1 then -- manage fade coming out of the closet
local fade = notification.alivetime / 1
notification.container.transparency = fade
notification.outline1.transparency = fade
notification.outline2.transparency = fade
notification.title.transparency = fade
elseif notification.alivetime > notification.lifetime - 0.5 then -- manage fade going back into the closet
local fade = 1 - (2 * (notification.alivetime - (notification.lifetime - 0.5)))
notification.container.transparency = fade
notification.outline1.transparency = fade
notification.outline2.transparency = fade
notification.title.transparency = fade
else
notification.container.transparency = 1
notification.outline1.transparency = 1
notification.outline2.transparency = 1
notification.title.transparency = 1
end
notification.alivetime = notification.alivetime + dt
end
end
end)
function menu:createnotification(param)
local this = {}
this.container = DrawingFunction("frame", {
parent = utilities.base,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 100, 0, 100),
position = _UDim2New(32, 0, 32, 0),
zindex = menu.basezindex + -4,
color = parameters.colors.a,
visible = false,
thickness = 1,
transparency = 1,
filled = true,
name = "okay",
})
this.outline1 = DrawingFunction("frame", {
parent = this.container,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 5,
color = parameters.colors.c,
visible = true,
thickness = 1,
filled = false,
name = "okay",
})
this.outline2 = DrawingFunction("frame", {
parent = this.containeroutline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 4,
color = parameters.colors.a,
visible = true,
thickness = 1,
filled = false,
name = "okay",
})
this.title = DrawingFunction("text", {
parent = this.container,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 8, 0, 4),
zindex = menu.basezindex + 20,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = "example notif",
name = "okay",
})
-- text editing stuffs (copied from tooltip)
local maxWidth = 36
local text = param.text
do -- WARNING !! ALAN CODE AHEAD!!
local split = text:split("")
local lastspaceidx = 0 -- the text idx that the last space is
local charinline = 0
for i, v in next, (split) do
charinline = charinline + 1
if v == " " then
lastspaceidx = i
end
if charinline >= maxWidth then
split[lastspaceidx] = "\n" -- insert a thing
charinline = 0
end
end
text = ""
for i, v in next, (split) do
text = text .. v
end
end
local split = text:split("\n")
local textlinelength = {}
local yLeng = 0
for i, v in next, (split) do
local textBound = _Vector2New()
do -- FATAL !
local getTextBoundsOfBullshit = Drawing.new("Text")
getTextBoundsOfBullshit.Visible = true
getTextBoundsOfBullshit.Font = Drawing.Fonts.Plex
getTextBoundsOfBullshit.Size = 13
getTextBoundsOfBullshit.Text = v
textBound = getTextBoundsOfBullshit.TextBounds
getTextBoundsOfBullshit.Visible = false
getTextBoundsOfBullshit:Remove()
getTextBoundsOfBullshit = nil
end
textlinelength[i] = textBound.x -- getting the number of characters each line and getting the biggest one to properly size the thing
yLeng = yLeng + textBound.y
end
_TableSort(textlinelength, function(a, b) return a > b end)
local longestthing = textlinelength[1]
this.container.size = _UDim2New(0, longestthing + 16, 0, yLeng + 8)
this.title.text = text
this.alivetime = 0
this.lifetime = param.lifetime
this.priority = param.priority
this.ignoreanimations = param.ignoreanimations
this.created = _Tick()
menu.currentnotifications[1 + #menu.currentnotifications] = this
return this
end
local colorPickerType = 2
do
do
local copyPasteMenu = {}
copyPasteMenu.outline = DrawingFunction("frame", {
parent = utilities.base,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 42, 0, 32),
position = _UDim2New(0, 100, 0, 100),
zindex = menu.basezindex + 18,
color = _Color3FromRGB(0, 0, 0),
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
copyPasteMenu.container = DrawingFunction("frame", {
parent = copyPasteMenu.outline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 18,
color = _Color3FromRGB(46, 46, 46),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
copyPasteMenu.copyTitle = DrawingFunction("text", {
parent = copyPasteMenu.container,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 2, 0, 0),
zindex = menu.basezindex + 19,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = "copy",
name = "okay",
})
copyPasteMenu.pasteTitle = DrawingFunction("text", {
parent = copyPasteMenu.container,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 2, 0, copyPasteMenu.copyTitle.absolutesize.y + 2),
zindex = menu.basezindex + 19,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = "paste",
name = "okay",
})
copyPasteMenu.copyDetection = DrawingFunction("frame", {
parent = copyPasteMenu.container,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(1, 0, 0.5, 0),
position = _UDim2New(0, 0, 0, 0),
zindex = menu.basezindex + 18,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
activated = true,
transparency = 0,
filled = true,
name = "okay",
})
copyPasteMenu.pasteDetection = DrawingFunction("frame", {
parent = copyPasteMenu.container,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(1, 0, 0.5, 0),
position = _UDim2New(0, 0, 0.5, 0),
zindex = menu.basezindex + 18,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
activated = true,
transparency = 0,
filled = true,
name = "okay",
})
copyPasteMenu.copyDetection.clicked:Connect(function()
if copyPasteMenu.focusedon then
local v = copyPasteMenu.focusedon
local val = {v.color.r, v.color.g, v.color.b, v.transparency}
local keyFrameFix = {}
for n, kfs in next, v.animationKeyFrames do
keyFrameFix[n] = {}
for idx, d in next, kfs do
keyFrameFix[n][idx] = {d.color.r, d.color.g, d.color.b, d.transparency}
end
end
local animations = {
animation = v.animation,
animationKeyFrames = keyFrameFix,
speeds = v.animationSpeed
}
local comp = {val, animations}
local result = json.encode(comp)
colorpickerClipBoard = result
end
copyPasteMenu.outline.visible = false
if copyPasteMenu.outofboundscloseconnection then
copyPasteMenu.outofboundscloseconnection:Disconnect()
copyPasteMenu.outofboundscloseconnection = nil
end
menu.isacolorpickeropen = false
end)
copyPasteMenu.pasteDetection.clicked:Connect(function()
local clipboard = colorpickerClipBoard
if copyPasteMenu.focusedon and colorpickerClipBoard then
local ff = copyPasteMenu.focusedon
local value = json.decode(clipboard)
ff:setcolor(_Color3New(value[1][1], value[1][2], value[1][3]))
if value[1][4] then
ff:settransparency(value[1][4])
end
local keyFrameFix = {}
for n, kfs in next, value[2].animationKeyFrames do
keyFrameFix[n] = {}
for idx, d in next, kfs do
keyFrameFix[n][idx] = {
color = _Color3New(d[1], d[2], d[3]),
transparency = d[4],
}
end
end
ff:setAnimation(value[2].animation)
ff:setAnimationSpeed(value[2].speeds)
ff:setAnimationKeyFrames(keyFrameFix)
end
copyPasteMenu.outline.visible = false
if copyPasteMenu.outofboundscloseconnection then
copyPasteMenu.outofboundscloseconnection:Disconnect()
copyPasteMenu.outofboundscloseconnection = nil
end
menu.isacolorpickeropen = false
end)
function menu:callcolorcopypaste(flag, position)
if not flag then return end
copyPasteMenu.outline.visible = true
copyPasteMenu.outline.position = _UDim2New(0, position.x - 1, 0, position.y - 1)
copyPasteMenu.outline.position = _UDim2New(0, position.x, 0, position.y)
copyPasteMenu.focusedon = flag
menu.isacolorpickeropen = true
copyPasteMenu.outofboundscloseconnection = utilities.mouse.mousebutton1down:Connect(function()
if utilities.mousechecks.inbounds(copyPasteMenu.outline, utilities.mouse.position) == false then -- uh oh..
copyPasteMenu.outline.visible = false
menu.isacolorpickeropen = false
if copyPasteMenu.outofboundscloseconnection then
copyPasteMenu.outofboundscloseconnection:Disconnect()
copyPasteMenu.outofboundscloseconnection = nil
end
end
end)
end
end
if colorPickerType == 1 then
menu.colorpicker = {} -- would rather make 1 that moves around instead of do this for EVERY color picker, probably shouldve done this with dropdowns and what not but i got lazy
menu.colorpicker.outline = DrawingFunction("frame", {
parent = utilities.base,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 194, 0, 208),
position = _UDim2New(0, 100, 0, 100),
zindex = menu.basezindex + 18,
color = _Color3FromRGB(0, 0, 0),
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.container = DrawingFunction("frame", {
parent = menu.colorpicker.outline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 18,
color = _Color3FromRGB(46, 46, 46),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.title = DrawingFunction("text", {
parent = menu.colorpicker.container,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 4, 0, 2),
zindex = menu.basezindex + 19,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = "Color Picker",
name = "okay",
})
menu.colorpicker.pickeroutline = DrawingFunction("frame", {
parent = menu.colorpicker.outline,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 172, 0, 172),
position = _UDim2New(0, 4, 0, 18),
zindex = menu.basezindex + 18,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.pickercontainer = DrawingFunction("frame", {
parent = menu.colorpicker.pickeroutline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 19,
color = _Color3New(1, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.picker = DrawingFunction("frame", {
parent = menu.colorpicker.pickercontainer,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 0, 1, 0),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 20,
transparency = 0,
color = _Color3New(1, 1, 1),
visible = true,
activated = true,
name = "okay",
})
menu.activations[1 + #menu.activations] = menu.colorpicker.picker
do
local parentedTo = menu.colorpicker.picker
local smoothGradient = {}
local xRes = 6
local yRes = 6
for xDim = 1, parentedTo.absolutesize.x / xRes do
smoothGradient[xDim] = {}
for yDim = 1, parentedTo.absolutesize.y / yRes do
smoothGradient[xDim][yDim] = utilities:draw("frame", {
parent = parentedTo,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, xRes, 0, yRes),
position = _UDim2New(0, (xDim - 1) * xRes, 0, (yDim - 1) * yRes),
zindex = parentedTo.zindex + 1,
color = _Color3FromHSV(0, 0, 1 - ((yDim - 1) * yRes) / parentedTo.absolutesize.y),
transparency = 1 - ((xDim - 1) * xRes) / parentedTo.absolutesize.x,
visible = true,
name = "okay",
})
end
end
end
menu.colorpicker.pickerselection = DrawingFunction("frame", {
parent = utilities.base,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 1, 0, 1),
position = _UDim2New(0, 0, 0, 0),
zindex = menu.basezindex + 22,
color = _Color3New(1, 1, 1),
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.pickerselectionoutline = DrawingFunction("frame", {
parent = menu.colorpicker.pickerselection,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 21,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.hueoutline = DrawingFunction("frame", {
parent = menu.colorpicker.outline,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 12, 0, 172),
position = _UDim2New(0, 178, 0, 18),
zindex = menu.basezindex + 18,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.huecontainer = DrawingFunction("frame", {
parent = menu.colorpicker.hueoutline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 19,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.hue = DrawingFunction("frame", {
parent = menu.colorpicker.huecontainer,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 0, 1, 0),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 20,
transparency = 0,
visible = true,
activated = true,
name = "okay",
})
menu.activations[1 + #menu.activations] = menu.colorpicker.hue
do
local parentedTo = colorReference.hue
local smoothGradient = {}
local yRes = 6
for yDim = 1, parentedTo.absolutesize.y / yRes do
smoothGradient[yDim] = utilities:draw("frame", {
parent = parentedTo,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(1, 0, 0, yRes),
position = _UDim2New(0, 0, 0, (yDim - 1) * yRes),
zindex = parentedTo.zindex + 1,
color = _Color3FromHSV(1 - ((yDim - 1) * yRes) / parentedTo.absolutesize.y, 1, 1),
visible = true,
name = "okay",
})
end
end
menu.colorpicker.hueselection = DrawingFunction("frame", {
parent = utilities.base,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 14, 0, 2),
position = _UDim2New(0, 0, 0, 0),
zindex = menu.basezindex + 22,
color = _Color3New(1, 1, 1),
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.hueselectionoutline = DrawingFunction("frame", {
parent = menu.colorpicker.hueselection,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 21,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.transparencyoutline = DrawingFunction("frame", {
parent = menu.colorpicker.outline,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 172, 0, 12),
position = _UDim2New(0, 4, 0, 192),
zindex = menu.basezindex + 18,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.transparencycontainer = DrawingFunction("frame", {
parent = menu.colorpicker.transparencyoutline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 0, 1, 0),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 19,
color = _Color3New(1, 1, 1),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.transparencypicker = DrawingFunction("frame", {
parent = menu.colorpicker.transparencycontainer,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 0, 1, 0),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 20,
transparency = 0,
visible = true,
activated = true,
name = "okay",
})
menu.activations[1 + #menu.activations] = menu.colorpicker.transparencypicker
do
local parentedTo = menu.colorpicker.transparencypicker
local smoothGradient = {}
local xRes = 6
for xDim = 1, parentedTo.absolutesize.x / xRes do
smoothGradient[xDim] = utilities:draw("frame", {
parent = parentedTo,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, xRes, 1, 0),
position = _UDim2New(0, (xDim - 1) * xRes, 0, 0),
zindex = parentedTo.zindex + 1,
color = _Color3FromHSV(0, 0, ((xDim - 1) * xRes) / parentedTo.absolutesize.x),
visible = true,
name = "okay",
})
end
end
menu.colorpicker.transparencyselection = DrawingFunction("frame", {
parent = utilities.base,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 2, 0, 14),
position = _UDim2New(0, 0, 0, 0),
zindex = menu.basezindex + 22,
color = _Color3New(1, 1, 1),
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.transparencyselectionoutline = DrawingFunction("frame", {
parent = menu.colorpicker.transparencyselection,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 21,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.outline.visible = false
menu.colorpicker.focusedon = nil
-- how 2 pick color
menu.colorpicker.picker.clicked:Connect(function()
local oldhue = _MathAbs(1 - (_MathClamp(menu.colorpicker.hueselection.absoluteposition.y, menu.colorpicker.hue.absoluteposition.y, menu.colorpicker.hue.absoluteposition.y + menu.colorpicker.hue.absolutesize.y) - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y)
local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.picker.absoluteposition.x, menu.colorpicker.picker.absoluteposition.x + menu.colorpicker.picker.absolutesize.x)
local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.picker.absoluteposition.y, menu.colorpicker.picker.absoluteposition.y + menu.colorpicker.picker.absolutesize.y)
menu.colorpicker.pickerselection.position = _UDim2New(0, xpos, 0, ypos)
-- quick maths
local sat = _MathClamp((xpos - menu.colorpicker.picker.absoluteposition.x) / menu.colorpicker.picker.absolutesize.x, 0, 1)
local val = _MathClamp(_MathAbs(1 - (ypos - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y), 0, 1)
menu.colorpicker.focusedon:setcolor(_Color3FromHSV(oldhue, sat, val))
menu.colorpicker.updater = utilities.mouse.moved:Connect(function()
local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.picker.absoluteposition.x, menu.colorpicker.picker.absoluteposition.x + menu.colorpicker.picker.absolutesize.x)
local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.picker.absoluteposition.y, menu.colorpicker.picker.absoluteposition.y + menu.colorpicker.picker.absolutesize.y)
menu.colorpicker.pickerselection.position = _UDim2New(0, xpos, 0, ypos)
-- quick maths
local sat = _MathClamp((xpos - menu.colorpicker.picker.absoluteposition.x) / menu.colorpicker.picker.absolutesize.x, 0, 1)
local val = _MathClamp(_MathAbs(1 - (ypos - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y), 0, 1)
menu.colorpicker.focusedon:setcolor(_Color3FromHSV(oldhue, sat, val))
end)
end)
menu.colorpicker.hue.clicked:Connect(function()
local old = menu.colorpicker.focusedon.color
local oldhue, oldsat, oldval = _Color3ToHSV(old)
local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.hue.absoluteposition.x, menu.colorpicker.hue.absoluteposition.x + menu.colorpicker.hue.absolutesize.x)
local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.hue.absoluteposition.y, menu.colorpicker.hue.absoluteposition.y + menu.colorpicker.hue.absolutesize.y)
menu.colorpicker.hueselection.position = _UDim2New(0, menu.colorpicker.hue.absoluteposition.x - 2, 0, ypos)
local hue = _MathAbs(1 - (ypos - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y)
menu.colorpicker.focusedon:setcolor(_Color3FromHSV(hue, oldsat, oldval))
menu.colorpicker.pickercontainer.color = _Color3FromHSV(hue, 1, 1)
menu.colorpicker.updater = utilities.mouse.moved:Connect(function()
local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.hue.absoluteposition.x, menu.colorpicker.hue.absoluteposition.x + menu.colorpicker.hue.absolutesize.x)
local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.hue.absoluteposition.y, menu.colorpicker.hue.absoluteposition.y + menu.colorpicker.hue.absolutesize.y)
menu.colorpicker.hueselection.position = _UDim2New(0, menu.colorpicker.hue.absoluteposition.x - 2, 0, ypos)
local hue = _MathAbs(1 - (ypos - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y)
menu.colorpicker.focusedon:setcolor(_Color3FromHSV(hue, oldsat, oldval))
menu.colorpicker.pickercontainer.color = _Color3FromHSV(hue, 1, 1)
end)
end)
menu.colorpicker.transparencypicker.clicked:Connect(function()
local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.transparencypicker.absoluteposition.x, menu.colorpicker.transparencypicker.absoluteposition.x + menu.colorpicker.transparencypicker.absolutesize.x)
local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.transparencypicker.absoluteposition.y, menu.colorpicker.transparencypicker.absoluteposition.y + menu.colorpicker.transparencypicker.absolutesize.y)
menu.colorpicker.transparencyselection.position = _UDim2New(0, xpos, 0, menu.colorpicker.transparencypicker.absoluteposition.y - 1)
local transparency = (xpos - menu.colorpicker.transparencypicker.absoluteposition.x) / menu.colorpicker.transparencypicker.absolutesize.x
menu.colorpicker.focusedon:settransparency(transparency)
menu.colorpicker.updater = utilities.mouse.moved:Connect(function()
local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.transparencypicker.absoluteposition.x, menu.colorpicker.transparencypicker.absoluteposition.x + menu.colorpicker.transparencypicker.absolutesize.x)
local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.transparencypicker.absoluteposition.y, menu.colorpicker.transparencypicker.absoluteposition.y + menu.colorpicker.transparencypicker.absolutesize.y)
menu.colorpicker.transparencyselection.position = _UDim2New(0, xpos, 0, menu.colorpicker.transparencypicker.absoluteposition.y - 1)
local transparency = (xpos - menu.colorpicker.transparencypicker.absoluteposition.x) / menu.colorpicker.transparencypicker.absolutesize.x
menu.colorpicker.focusedon:settransparency(transparency)
end)
end)
utilities.mouse.mousebutton1up:Connect(function()
if menu.colorpicker.updater then
menu.colorpicker.updater:Disconnect()
end
end)
function menu:callcolorpicker(name, flag, position, transparency)
if not flag then return end
local old = flag.color
local oldhue, oldsat, oldval = _Color3ToHSV(old)
menu.colorpicker.outline.visible = true
menu.isacolorpickeropen = true
menu.colorpicker.outline.position = _UDim2New(0, position.x, 0, position.y)
menu.colorpicker.title.text = name
menu.colorpicker.pickercontainer.color = _Color3FromHSV(oldhue, 1, 1)
if transparency then
menu.colorpicker.outline.size = _UDim2New(0, 194, 0, 208)
else
menu.colorpicker.outline.size = _UDim2New(0, 194, 0, 196)
end
menu.colorpicker.hueselection.visible = true
menu.colorpicker.pickerselection.visible = true
menu.colorpicker.transparencyoutline.visible = transparency ~= nil and true or false
menu.colorpicker.transparencyselection.visible = transparency ~= nil and true or false
menu.colorpicker.hueselection.position = _UDim2New(0, -2, 0, _MathAbs(1 - oldhue) * menu.colorpicker.hue.absolutesize.y) + _UDim2New(0, menu.colorpicker.hue.absoluteposition.x, 0, menu.colorpicker.hue.absoluteposition.y)
menu.colorpicker.pickerselection.position = _UDim2New(0, oldsat * menu.colorpicker.picker.absolutesize.x, 0, _MathAbs(oldval - 1) * menu.colorpicker.picker.absolutesize.y) + _UDim2New(0, menu.colorpicker.picker.absoluteposition.x, 0, menu.colorpicker.picker.absoluteposition.y)
menu.colorpicker.transparencypicker.position = menu.colorpicker.transparencypicker.position
menu.colorpicker.transparencycontainer.position = menu.colorpicker.transparencycontainer.position
if transparency then
menu.colorpicker.transparencyselection.position = _UDim2New(0, transparency * menu.colorpicker.transparencypicker.absolutesize.x, 0, -1) + _UDim2New(0, menu.colorpicker.transparencypicker.absoluteposition.x, 0, menu.colorpicker.transparencypicker.absoluteposition.y)
end
menu.colorpicker.focusedon = flag
if transparency then
menu.colorpicker.transparencyselection.position = _UDim2New(0, transparency * menu.colorpicker.transparencypicker.absolutesize.x, 0, -1) + _UDim2New(0, menu.colorpicker.transparencypicker.absoluteposition.x, 0, menu.colorpicker.transparencypicker.absoluteposition.y)
end
-- thing
menu.colorpicker.outofboundscloseconnection = utilities.mouse.mousebutton1down:Connect(function()
if utilities.mousechecks.inbounds(menu.colorpicker.outline, utilities.mouse.position) == false then -- uh oh..
if menu.colorpicker.updater then
menu.colorpicker.updater:Disconnect()
end
menu.colorpicker.outline.visible = false
menu.colorpicker.transparencyselection.visible = false
menu.colorpicker.hueselection.visible = false
menu.colorpicker.pickerselection.visible = false
menu.isacolorpickeropen = false
if menu.colorpicker.outofboundscloseconnection then
menu.colorpicker.outofboundscloseconnection:Disconnect()
menu.colorpicker.outofboundscloseconnection = nil
end
end
end)
end
else
do
local colorReference = {} -- would rather make 1 that moves around instead of do this for EVERY color picker, probably shouldve done this with dropdowns and what not but i got lazy
colorReference.outline = DrawingFunction("frame", {
parent = utilities.base,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 194, 0, 208),
position = _UDim2New(0, 100, 0, 100),
zindex = menu.basezindex + 18 + 13,
color = _Color3FromRGB(0, 0, 0),
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
colorReference.container = DrawingFunction("frame", {
parent = colorReference.outline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 18 + 13,
color = _Color3FromRGB(46, 46, 46),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
colorReference.title = DrawingFunction("text", {
parent = colorReference.container,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 4, 0, 2),
zindex = menu.basezindex + 19 + 13,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = "Color Picker",
name = "okay",
})
colorReference.pickeroutline = DrawingFunction("frame", {
parent = colorReference.outline,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 172, 0, 172),
position = _UDim2New(0, 4, 0, 18),
zindex = menu.basezindex + 18 + 13,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
colorReference.pickercontainer = DrawingFunction("frame", {
parent = colorReference.pickeroutline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 19 + 13,
color = _Color3New(1, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
colorReference.picker = DrawingFunction("frame", {
parent = colorReference.pickercontainer,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 0, 1, 0),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 20 + 13,
transparency = 0,
color = _Color3New(1, 1, 1),
visible = true,
activated = true,
name = "okay",
})
menu.activations[1 + #menu.activations] = colorReference.picker
do
local parentedTo = colorReference.picker
local smoothGradient = {}
local xRes = 6
local yRes = 6
for xDim = 1, parentedTo.absolutesize.x / xRes do
smoothGradient[xDim] = {}
for yDim = 1, parentedTo.absolutesize.y / yRes do
smoothGradient[xDim][yDim] = utilities:draw("frame", {
parent = parentedTo,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, xRes, 0, yRes),
position = _UDim2New(0, (xDim - 1) * xRes, 0, (yDim - 1) * yRes),
zindex = parentedTo.zindex + 1,
color = _Color3FromHSV(0, 0, 1 - ((yDim - 1) * yRes) / parentedTo.absolutesize.y),
transparency = 1 - ((xDim - 1) * xRes) / parentedTo.absolutesize.x,
visible = true,
name = "okay",
})
end
end
end
colorReference.pickerselection = DrawingFunction("frame", {
parent = utilities.base,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 1, 0, 1),
position = _UDim2New(0, 0, 0, 0),
zindex = menu.basezindex + 22 + 13,
color = _Color3New(1, 1, 1),
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
colorReference.pickerselectionoutline = DrawingFunction("frame", {
parent = colorReference.pickerselection,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 21 + 13,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
colorReference.hueoutline = DrawingFunction("frame", {
parent = colorReference.outline,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 12, 0, 172),
position = _UDim2New(0, 178, 0, 18),
zindex = menu.basezindex + 18 + 13,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
colorReference.huecontainer = DrawingFunction("frame", {
parent = colorReference.hueoutline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 19 + 13,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
colorReference.hue = DrawingFunction("frame", {
parent = colorReference.huecontainer,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 0, 1, 0),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 20 + 13,
transparency = 0,
visible = true,
activated = true,
name = "okay",
})
menu.activations[1 + #menu.activations] = colorReference.hue
do
local parentedTo = colorReference.hue
local smoothGradient = {}
local yRes = 6
for yDim = 1, parentedTo.absolutesize.y / yRes do
smoothGradient[yDim] = utilities:draw("frame", {
parent = parentedTo,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(1, 0, 0, yRes),
position = _UDim2New(0, 0, 0, (yDim - 1) * yRes),
zindex = parentedTo.zindex + 1,
color = _Color3FromHSV(1 - ((yDim - 1) * yRes) / parentedTo.absolutesize.y, 1, 1),
visible = true,
name = "okay",
})
end
end
colorReference.hueselection = DrawingFunction("frame", {
parent = utilities.base,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 14, 0, 2),
position = _UDim2New(0, 0, 0, 0),
zindex = menu.basezindex + 22 + 13,
color = _Color3New(1, 1, 1),
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
colorReference.hueselectionoutline = DrawingFunction("frame", {
parent = colorReference.hueselection,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 21 + 13,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
colorReference.transparencyoutline = DrawingFunction("frame", {
parent = colorReference.outline,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 172, 0, 12),
position = _UDim2New(0, 4, 0, 192),
zindex = menu.basezindex + 18 + 13,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
colorReference.transparencycontainer = DrawingFunction("frame", {
parent = colorReference.transparencyoutline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 0, 1, 0),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 19 + 13,
color = _Color3New(1, 1, 1),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
colorReference.transparencypicker = DrawingFunction("frame", {
parent = colorReference.transparencycontainer,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 0, 1, 0),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 20 + 13,
transparency = 0,
visible = true,
activated = true,
name = "okay",
})
menu.activations[1 + #menu.activations] = colorReference.transparencypicker
do
local parentedTo = colorReference.transparencypicker
local smoothGradient = {}
local xRes = 6
for xDim = 1, parentedTo.absolutesize.x / xRes do
smoothGradient[xDim] = utilities:draw("frame", {
parent = parentedTo,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, xRes, 1, 0),
position = _UDim2New(0, (xDim - 1) * xRes, 0, 0),
zindex = parentedTo.zindex + 1,
color = _Color3FromHSV(0, 0, ((xDim - 1) * xRes) / parentedTo.absolutesize.x),
visible = true,
name = "okay",
})
end
end
colorReference.transparencyselection = DrawingFunction("frame", {
parent = utilities.base,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 2, 0, 14),
position = _UDim2New(0, 0, 0, 0),
zindex = menu.basezindex + 22 + 13,
color = _Color3New(1, 1, 1),
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
colorReference.transparencyselectionoutline = DrawingFunction("frame", {
parent = colorReference.transparencyselection,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 21 + 13,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
colorReference.outline.visible = false
colorReference.focusedon = nil
-- how 2 pick color
colorReference.picker.clicked:Connect(function()
local oldhue = _MathAbs(1 - (_MathClamp(colorReference.hueselection.absoluteposition.y, colorReference.hue.absoluteposition.y, colorReference.hue.absoluteposition.y + colorReference.hue.absolutesize.y) - colorReference.picker.absoluteposition.y) / colorReference.picker.absolutesize.y)
local xpos = _MathClamp(utilities.mouse.position.x, colorReference.picker.absoluteposition.x, colorReference.picker.absoluteposition.x + colorReference.picker.absolutesize.x)
local ypos = _MathClamp(utilities.mouse.position.y, colorReference.picker.absoluteposition.y, colorReference.picker.absoluteposition.y + colorReference.picker.absolutesize.y)
colorReference.pickerselection.position = _UDim2New(0, xpos, 0, ypos)
-- quick maths
local sat = _MathClamp((xpos - colorReference.picker.absoluteposition.x) / colorReference.picker.absolutesize.x, 0, 1)
local val = _MathClamp(_MathAbs(1 - (ypos - colorReference.picker.absoluteposition.y) / colorReference.picker.absolutesize.y), 0, 1)
colorReference.focusedon:setcolor(_Color3FromHSV(oldhue, sat, val))
colorReference.updater = utilities.mouse.moved:Connect(function()
local xpos = _MathClamp(utilities.mouse.position.x, colorReference.picker.absoluteposition.x, colorReference.picker.absoluteposition.x + colorReference.picker.absolutesize.x)
local ypos = _MathClamp(utilities.mouse.position.y, colorReference.picker.absoluteposition.y, colorReference.picker.absoluteposition.y + colorReference.picker.absolutesize.y)
colorReference.pickerselection.position = _UDim2New(0, xpos, 0, ypos)
-- quick maths
local sat = _MathClamp((xpos - colorReference.picker.absoluteposition.x) / colorReference.picker.absolutesize.x, 0, 1)
local val = _MathClamp(_MathAbs(1 - (ypos - colorReference.picker.absoluteposition.y) / colorReference.picker.absolutesize.y), 0, 1)
colorReference.focusedon:setcolor(_Color3FromHSV(oldhue, sat, val))
end)
end)
colorReference.hue.clicked:Connect(function()
local old = colorReference.focusedon.color
local oldhue, oldsat, oldval = _Color3ToHSV(old)
local xpos = _MathClamp(utilities.mouse.position.x, colorReference.hue.absoluteposition.x, colorReference.hue.absoluteposition.x + colorReference.hue.absolutesize.x)
local ypos = _MathClamp(utilities.mouse.position.y, colorReference.hue.absoluteposition.y, colorReference.hue.absoluteposition.y + colorReference.hue.absolutesize.y)
colorReference.hueselection.position = _UDim2New(0, colorReference.hue.absoluteposition.x - 2, 0, ypos)
local hue = _MathAbs(1 - (ypos - colorReference.picker.absoluteposition.y) / colorReference.picker.absolutesize.y)
colorReference.focusedon:setcolor(_Color3FromHSV(hue, oldsat, oldval))
colorReference.pickercontainer.color = _Color3FromHSV(hue, 1, 1)
colorReference.updater = utilities.mouse.moved:Connect(function()
local xpos = _MathClamp(utilities.mouse.position.x, colorReference.hue.absoluteposition.x, colorReference.hue.absoluteposition.x + colorReference.hue.absolutesize.x)
local ypos = _MathClamp(utilities.mouse.position.y, colorReference.hue.absoluteposition.y, colorReference.hue.absoluteposition.y + colorReference.hue.absolutesize.y)
colorReference.hueselection.position = _UDim2New(0, colorReference.hue.absoluteposition.x - 2, 0, ypos)
local hue = _MathAbs(1 - (ypos - colorReference.picker.absoluteposition.y) / colorReference.picker.absolutesize.y)
colorReference.focusedon:setcolor(_Color3FromHSV(hue, oldsat, oldval))
colorReference.pickercontainer.color = _Color3FromHSV(hue, 1, 1)
end)
end)
colorReference.transparencypicker.clicked:Connect(function()
local xpos = _MathClamp(utilities.mouse.position.x, colorReference.transparencypicker.absoluteposition.x, colorReference.transparencypicker.absoluteposition.x + colorReference.transparencypicker.absolutesize.x)
local ypos = _MathClamp(utilities.mouse.position.y, colorReference.transparencypicker.absoluteposition.y, colorReference.transparencypicker.absoluteposition.y + colorReference.transparencypicker.absolutesize.y)
colorReference.transparencyselection.position = _UDim2New(0, xpos, 0, colorReference.transparencypicker.absoluteposition.y - 1)
local transparency = (xpos - colorReference.transparencypicker.absoluteposition.x) / colorReference.transparencypicker.absolutesize.x
colorReference.focusedon:settransparency(transparency)
colorReference.updater = utilities.mouse.moved:Connect(function()
local xpos = _MathClamp(utilities.mouse.position.x, colorReference.transparencypicker.absoluteposition.x, colorReference.transparencypicker.absoluteposition.x + colorReference.transparencypicker.absolutesize.x)
local ypos = _MathClamp(utilities.mouse.position.y, colorReference.transparencypicker.absoluteposition.y, colorReference.transparencypicker.absoluteposition.y + colorReference.transparencypicker.absolutesize.y)
colorReference.transparencyselection.position = _UDim2New(0, xpos, 0, colorReference.transparencypicker.absoluteposition.y - 1)
local transparency = (xpos - colorReference.transparencypicker.absoluteposition.x) / colorReference.transparencypicker.absolutesize.x
colorReference.focusedon:settransparency(transparency)
end)
end)
utilities.mouse.mousebutton1up:Connect(function()
if colorReference.updater then
colorReference.updater:Disconnect()
end
end)
function menu:oldcallcolorpicker(name, flag, position, transparency)
if not flag then return end
local old = flag.color
local oldhue, oldsat, oldval = _Color3ToHSV(old)
colorReference.outline.visible = true
colorReference.outline.position = _UDim2New(0, position.x, 0, position.y)
colorReference.title.text = name
colorReference.pickercontainer.color = _Color3FromHSV(oldhue, 1, 1)
if transparency then
colorReference.outline.size = _UDim2New(0, 194, 0, 208)
else
colorReference.outline.size = _UDim2New(0, 194, 0, 196)
end
colorReference.hueselection.visible = true
colorReference.pickerselection.visible = true
colorReference.transparencyoutline.visible = transparency ~= nil and true or false
colorReference.transparencyselection.visible = transparency ~= nil and true or false
colorReference.hueselection.position = _UDim2New(0, -2, 0, _MathAbs(1 - oldhue) * colorReference.hue.absolutesize.y) + _UDim2New(0, colorReference.hue.absoluteposition.x, 0, colorReference.hue.absoluteposition.y)
colorReference.pickerselection.position = _UDim2New(0, oldsat * colorReference.picker.absolutesize.x, 0, _MathAbs(oldval - 1) * colorReference.picker.absolutesize.y) + _UDim2New(0, colorReference.picker.absoluteposition.x, 0, colorReference.picker.absoluteposition.y)
colorReference.transparencypicker.position = colorReference.transparencypicker.position
colorReference.transparencycontainer.position = colorReference.transparencycontainer.position
if transparency then
colorReference.transparencyselection.position = _UDim2New(0, transparency * colorReference.transparencypicker.absolutesize.x, 0, -1) + _UDim2New(0, colorReference.transparencypicker.absoluteposition.x, 0, colorReference.transparencypicker.absoluteposition.y)
end
colorReference.focusedon = flag
if transparency then
colorReference.transparencyselection.position = _UDim2New(0, transparency * colorReference.transparencypicker.absolutesize.x, 0, -1) + _UDim2New(0, colorReference.transparencypicker.absoluteposition.x, 0, colorReference.transparencypicker.absoluteposition.y)
end
-- thing
colorReference.outofboundscloseconnection = utilities.mouse.mousebutton1down:Connect(function()
if utilities.mousechecks.inbounds(colorReference.outline, utilities.mouse.position) == false then -- uh oh..
if colorReference.updater then
colorReference.updater:Disconnect()
end
colorReference.outline.visible = false
colorReference.transparencyselection.visible = false
colorReference.hueselection.visible = false
colorReference.pickerselection.visible = false
if colorReference.outofboundscloseconnection then
colorReference.outofboundscloseconnection:Disconnect()
colorReference.outofboundscloseconnection = nil
end
end
end)
end
menu.oldcolorpicker = colorReference
end
menu.colorpicker = {} -- would rather make 1 that moves around instead of do this for EVERY color picker, probably shouldve done this with dropdowns and what not but i got lazy
menu.colorpicker.proportions = {
mainSize = {x = 240, y = 240},
secondaryBarWidth = 14,
}
menu.colorpicker.outline = DrawingFunction("frame", {
parent = utilities.base,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, menu.colorpicker.proportions.mainSize.x, 0, menu.colorpicker.proportions.mainSize.y),
position = _UDim2New(0, 100, 0, 100),
zindex = menu.basezindex + 18,
color = _Color3FromRGB(0, 0, 0),
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.title = DrawingFunction("text", {
parent = menu.colorpicker.outline,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 4, 0, 2),
zindex = menu.basezindex + 21,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = "Color Picker",
name = "okay",
})
menu.colorpicker.titleBack = DrawingFunction("frame", {
parent = menu.colorpicker.outline,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(1, 0, 0, 18),
position = _UDim2New(0, 0, 0, 0),
zindex = menu.basezindex + 19,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.titleFront = DrawingFunction("frame", {
parent = menu.colorpicker.titleBack,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 20,
color = _Color3FromRGB(46, 46, 46),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.secondTabBack = DrawingFunction("frame", {
parent = menu.colorpicker.outline,
anchorpoint = _Vector2New(1, 0),
size = _UDim2New(0, 68, 0, 18),
position = _UDim2New(1, 0, 0, 0),
zindex = menu.basezindex + 21,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
activated = true,
name = "okay",
})
menu.colorpicker.secondTabFront = DrawingFunction("frame", {
parent = menu.colorpicker.secondTabBack,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 22,
color = _Color3FromRGB(46, 46, 46),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.secondTabTitle = DrawingFunction("text", {
parent = menu.colorpicker.secondTabFront,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 2, 0, 1),
zindex = menu.basezindex + 23,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = "animation",
name = "okay",
})
menu.colorpicker.firstTabBack = DrawingFunction("frame", {
parent = menu.colorpicker.outline,
anchorpoint = _Vector2New(1, 0),
size = _UDim2New(0, 40, 0, 18),
position = _UDim2New(1, -menu.colorpicker.secondTabBack.absolutesize.x + 1, 0, 0),
zindex = menu.basezindex + 21,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
activated = true,
filled = true,
name = "okay",
})
menu.colorpicker.firstTabFront = DrawingFunction("frame", {
parent = menu.colorpicker.firstTabBack,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 22,
color = _Color3FromRGB(46, 46, 46),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.firstTabTitle = DrawingFunction("text", {
parent = menu.colorpicker.firstTabFront,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 2, 0, 1),
zindex = menu.basezindex + 23,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = "color",
name = "okay",
})
menu.colorpicker.container = DrawingFunction("frame", {
parent = menu.colorpicker.outline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 18,
color = _Color3FromRGB(46, 46, 46),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.pickeroutline = DrawingFunction("frame", {
parent = menu.colorpicker.container,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 212, 0, 212),
position = _UDim2New(0, 4, 0, 22),
zindex = menu.basezindex + 18,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.pickercontainer = DrawingFunction("frame", {
parent = menu.colorpicker.pickeroutline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 19,
color = _Color3New(1, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.picker = DrawingFunction("frame", {
parent = menu.colorpicker.pickercontainer,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 0, 1, 0),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 20,
transparency = 0,
color = _Color3New(1, 1, 1),
visible = true,
activated = true,
name = "okay",
})
menu.activations[1 + #menu.activations] = menu.colorpicker.picker
do
local parentedTo = menu.colorpicker.picker
local smoothGradient = {}
local xRes = 6
local yRes = 6
for xDim = 1, parentedTo.absolutesize.x / xRes do
smoothGradient[xDim] = {}
for yDim = 1, parentedTo.absolutesize.y / yRes do
smoothGradient[xDim][yDim] = utilities:draw("frame", {
parent = parentedTo,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, xRes, 0, yRes),
position = _UDim2New(0, (xDim - 1) * xRes, 0, (yDim - 1) * yRes),
zindex = parentedTo.zindex + 1,
color = _Color3FromHSV(0, 0, 1 - ((yDim - 1) * yRes) / parentedTo.absolutesize.y),
transparency = 1 - ((xDim - 1) * xRes) / parentedTo.absolutesize.x,
visible = true,
name = "okay",
})
end
end
end
menu.colorpicker.pickerselection = DrawingFunction("frame", {
parent = utilities.base,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 1, 0, 1),
position = _UDim2New(0, 0, 0, 0),
zindex = menu.basezindex + 22,
color = _Color3New(1, 1, 1),
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.pickerselectionoutline = DrawingFunction("frame", {
parent = menu.colorpicker.pickerselection,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 21,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.hueoutline = DrawingFunction("frame", {
parent = menu.colorpicker.pickeroutline,
anchorpoint = _Vector2New(0, 0.5),
size = _UDim2New(0, menu.colorpicker.proportions.secondaryBarWidth, 1, 0),
position = _UDim2New(1, 4, 0.5, 0),
zindex = menu.basezindex + 18,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.huecontainer = DrawingFunction("frame", {
parent = menu.colorpicker.hueoutline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 19,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.hue = DrawingFunction("frame", {
parent = menu.colorpicker.huecontainer,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 0, 1, 0),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 20,
transparency = 0,
visible = true,
activated = true,
name = "okay",
})
menu.activations[1 + #menu.activations] = menu.colorpicker.hue
do
local parentedTo = menu.colorpicker.hue
local smoothGradient = {}
local yRes = 6
for yDim = 1, parentedTo.absolutesize.y / yRes do
smoothGradient[yDim] = utilities:draw("frame", {
parent = parentedTo,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(1, 0, 0, yRes),
position = _UDim2New(0, 0, 0, (yDim - 1) * yRes),
zindex = parentedTo.zindex + 1,
color = _Color3FromHSV(1 - ((yDim - 1) * yRes) / parentedTo.absolutesize.y, 1, 1),
visible = true,
name = "okay",
})
end
end
menu.colorpicker.hueselection = DrawingFunction("frame", {
parent = utilities.base,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, menu.colorpicker.proportions.secondaryBarWidth + 2, 0, 2),
position = _UDim2New(0, 0, 0, 0),
zindex = menu.basezindex + 22,
color = _Color3New(1, 1, 1),
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.hueselectionoutline = DrawingFunction("frame", {
parent = menu.colorpicker.hueselection,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 21,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.transparencyoutline = DrawingFunction("frame", {
parent = menu.colorpicker.pickeroutline,
anchorpoint = _Vector2New(0.5, 0),
size = _UDim2New(1, 0, 0, menu.colorpicker.proportions.secondaryBarWidth),
position = _UDim2New(0.5, 0, 1, 4),
zindex = menu.basezindex + 18,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.transparencycontainer = DrawingFunction("frame", {
parent = menu.colorpicker.transparencyoutline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 19,
color = _Color3New(1, 1, 1),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.transparencypicker = DrawingFunction("frame", {
parent = menu.colorpicker.transparencycontainer,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 0, 1, 0),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 20,
transparency = 0,
visible = true,
activated = true,
name = "okay",
})
menu.activations[1 + #menu.activations] = menu.colorpicker.transparencypicker
do
local parentedTo = menu.colorpicker.transparencypicker
local smoothGradient = {}
local xRes = 6
for xDim = 1, parentedTo.absolutesize.x / xRes do
smoothGradient[xDim] = utilities:draw("frame", {
parent = parentedTo,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, xRes, 1, 0),
position = _UDim2New(0, (xDim - 1) * xRes, 0, 0),
zindex = parentedTo.zindex + 1,
color = _Color3FromHSV(0, 0, ((xDim - 1) * xRes) / parentedTo.absolutesize.x),
visible = true,
name = "okay",
})
end
end
menu.colorpicker.transparencyselection = DrawingFunction("frame", {
parent = utilities.base,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 2, 0, menu.colorpicker.proportions.secondaryBarWidth + 2),
position = _UDim2New(0, 0, 0, 0),
zindex = menu.basezindex + 22,
color = _Color3New(1, 1, 1),
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.transparencyselectionoutline = DrawingFunction("frame", {
parent = menu.colorpicker.transparencyselection,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 21,
color = _Color3FromRGB(0, 0, 0),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
menu.colorpicker.outline.visible = false
menu.colorpicker.focusedon = nil
-- animation tab fuckin thingy (FUCK CREAM)
menu.colorpicker.secondContainer = DrawingFunction("frame", {
parent = menu.colorpicker.outline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 18,
color = _Color3FromRGB(46, 46, 46),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
-- fuck me dead :c
menu.colorpicker.animationSelection = {}
menu.colorpicker.fakeDropdown = nil
menu.colorpicker.fakeDropdownFlag = nil
menu.colorpicker.fakeVals = {{"none", true}, {"rainbow", false}, {"linear", false}, {"oscillating", false}, {"sawtooth", false}, {"strobe", false}}
do
local targetsection = menu.colorpicker.secondContainer
local name = "animation"
local multichoice = false
local this = {}
this.dropdownopened = false
this.valuecontainer = {}
this.textrecord = {}
local myflag = menu.colorpicker.animationSelection
myflag.__index = myflag
myflag.type = "dropdown"
myflag.name = name
myflag.value = {}
myflag.changed = utilities.signal.new()
for i, v in next, (menu.colorpicker.fakeVals) do
local name = v[1]
local state = v[2]
myflag.value[name] = state
end
this.holder = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = targetsection,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(1, 0, 0, 24), -- WHAT THE FUCL<K>!?#?!#?!@?#!?#?!@?#$!@?H$???
position = _UDim2New(0, 0, 0, 12),
zindex = menu.basezindex + 19,
color = _Color3FromRGB(255, 255, 255),
visible = true,
thickness = 0,
filled = true,
transparency = 0,
name = "okay",
})
this.title = DrawingFunction("text", {
parent = this.holder,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 16, 0, 8),
zindex = menu.basezindex + 20,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = name,
name = "okay",
})
this.selection = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.holder,
anchorpoint = _Vector2New(0.5, 0),
size = _UDim2New(1, -30, 0, 16),
position = _UDim2New(0.5, 0, 0, 24),
zindex = menu.basezindex + 20,
color = menucolors.c,
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
this.selectiontext = DrawingFunction("text", {
parent = this.selection,
anchorpoint = _Vector2New(0, 0.5),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 2, 0.5, -1),
zindex = menu.basezindex + 21,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = "",
name = "okay",
})
this.icon = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.selection,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 20,
color = menucolors.c,
visible = true,
thickness = 0,
filled = true,
transparency = 0,
activated = true,
name = "okay",
})
menu.activations[1 + #menu.activations] = this.icon
this.icontext = DrawingFunction("text", {
parent = this.icon,
anchorpoint = _Vector2New(0, 0.5),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(1, -10, 0.5, -2),
zindex = menu.basezindex + 21,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = "+",
name = "okay",
})
this.selectionoutline = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.selection,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 19,
color = menucolors.d,
visible = true,
thickness = 1,
filled = false,
name = "okay",
})
local maximumchars = _MathFloor(this.selection.absolutesize.x / 6.5) - 4 -- suck
function myflag:setvalue(new)
myflag.value = new
local selected = ""
local selections = 0
for idx, vals in next, (this.valuecontainer) do
local i = vals.value
local v = myflag.value[i]
if not v then
myflag.value[i] = false
end
if v then
if selections > 0 then
selected = selected .. ", "
end
selected = selected .. i
selections = selections + 1
this.textrecord[i].color = menu.accent
else
this.textrecord[i].color = _Color3New(255, 255, 255)
end
end
selected = _StringSub(selected, 0, maximumchars)
if selections == 0 then
this.selectiontext.text = "none"
else
this.selectiontext.text = selected
end
myflag.changed:Fire()
-- ok so when this shit updates, update the flag thats focused
if menu.colorpicker.focusedon and menu.colorpicker.focusedon.setAnimation then
menu.colorpicker.focusedon:setAnimation(new)
end
end
for val, v in next, (menu.colorpicker.fakeVals) do
local temporary = {}
local val = v[1] -- so that its in order
temporary.value = val
temporary.selectionoutline = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.selection,
anchorpoint = _Vector2New(0.5, 0),
size = _UDim2New(1, 2, 0, 22),
position = _UDim2New(0.5, 0, 0, ((1 + #this.valuecontainer) * 20) -2),
zindex = menu.basezindex + 27,
color = menucolors.d,
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
temporary.selection = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = temporary.selectionoutline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, -2, 1, -2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 28,
color = menucolors.c,
visible = true,
thickness = 0,
filled = true,
activated = true,
name = "okay",
})
menu.activations[1 + #menu.activations] = temporary.selection
temporary.selectiontext = DrawingFunction("text", {
parent = temporary.selection,
anchorpoint = _Vector2New(0, 0.5),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 2, 0.5, 0),
zindex = menu.basezindex + 29,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = val,
name = "okay",
})
this.textrecord[val] = temporary.selectiontext
temporary.selection.clicked:Connect(function()
if menu.uiopen == false then return end
for i, v in next, (myflag.value) do
myflag.value[i] = (val == i) -- suck my nutz
end
myflag:setvalue(myflag.value)
end)
this.valuecontainer[1 + #this.valuecontainer] = temporary
end
this.icon.clicked:Connect(function()
if menu.uiopen == false then return end
this.dropdownopened = not this.dropdownopened
this.icontext.text = (this.dropdownopened == true) and "-" or "+"
menu.isadropdownopen = this.dropdownopened
for i, v in next, (this.valuecontainer) do
v.selectionoutline.visible = this.dropdownopened
v.selectionoutline.position = v.selectionoutline.position
v.selectionoutline.size = v.selectionoutline.size
if v.value and myflag.value[v.value] then
local val = myflag.value[v.value]
this.textrecord[v.value].color = (val == true) and menu.accent or _Color3FromRGB(255, 255, 255)
end
end
end)
local vals = {}
for i, v in next, (menu.colorpicker.fakeVals) do
local name = v[1]
local state = v[2]
vals[name] = state
end
myflag:setvalue(vals)
menu.colorpicker.fakeDropdown = this
menu.colorpicker.fakeDropdownFlag = myflag
end
menu.colorpicker.animationPanels = {}
-- switch out the panels based on what is selected
local first = true
for i, v in next, menu.colorpicker.fakeVals do
local name = v[1]
local state = v[2]
menu.colorpicker.animationPanels[name] = {}
menu.colorpicker.animationPanels[name].offset = 54
menu.colorpicker.animationPanels[name].panel = DrawingFunction("frame", {
parent = menu.colorpicker.secondContainer,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(1, 0, 1, 0),
position = _UDim2New(0, 0, 0, 0),
zindex = menu.basezindex + 18,
color = _Color3FromRGB(0, 0, 0),
visible = false,
transparency = 0, -- hide it
thickness = 0,
filled = true,
name = "okay",
})
if first then
menu.colorpicker.animationPanels[name].panel.visible = true
first = false
end
menu.colorpicker.animationSelection.changed:Connect(function()
for i2, v2 in next, menu.colorpicker.animationSelection.value do
if name == i2 then
menu.colorpicker.animationPanels[name].panel.visible = v2
menu.colorpicker.animationPanels[name].panel.position = menu.colorpicker.animationPanels[name].panel.position + _UDim2New(0, 1, 0, 1)
menu.colorpicker.animationPanels[name].panel.position = menu.colorpicker.animationPanels[name].panel.position - _UDim2New(0, 1, 0, 1)
end
end
end)
end
menu.colorpicker.animationPanelElements = {
none = {},
rainbow = {
{
type = "slider",
name = "speed",
max = 1000,
min = 1,
suffix = "%"
}
},
linear = {
{
type = "color",
name = "keyframe 1"
},
{
type = "color",
name = "keyframe 2"
},
{
type = "slider",
name = "speed",
max = 1000,
min = 1,
suffix = "%"
}
},
oscillating = {
{
type = "color",
name = "keyframe 1"
},
{
type = "color",
name = "keyframe 2"
},
{
type = "slider",
name = "speed",
max = 1000,
min = 1,
suffix = "%"
}
},
sawtooth = {
{
type = "color",
name = "keyframe 1"
},
{
type = "color",
name = "keyframe 2"
},
{
type = "slider",
name = "speed",
max = 1000,
min = 1,
suffix = "%"
}
},
strobe = {
{
type = "color",
name = "keyframe 1"
},
{
type = "color",
name = "keyframe 2"
},
{
type = "slider",
name = "speed",
max = 1000,
min = 1,
suffix = "%"
}
}
}
menu.colorpicker.elementReference = {}
menu.colorpicker.flagReference = {}
for name, elements in next, menu.colorpicker.animationPanelElements do
menu.colorpicker.elementReference[name] = {}
menu.colorpicker.flagReference[name] = {}
local sectionReference = menu.colorpicker.elementReference[name]
local section = menu.colorpicker.animationPanels[name]
local targetsection = section.panel
local currentOffset = section.offset
for i, data in next, elements do
menu.colorpicker.elementReference[name][data.name] = {}
local fakeFlag = {}
if data.type == "slider" then
local flag = fakeFlag
local minimum = data.min
local maximum = data.max
local suffix = data.suffix ~= nil and data.suffix or ""
local customtext = {}
local this = {}
local offset = currentOffset - 10
local myflag = fakeFlag -- mypenis
myflag.__index = fakeFlag
myflag.type = "slider"
myflag.value = data.min
myflag.changed = utilities.signal.new()
this.holder = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = targetsection,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(1, 0, 0, 24),
position = _UDim2New(0, 0, 0, offset),
zindex = menu.basezindex + 6 + 12,
color = _Color3FromRGB(255, 255, 255),
visible = true,
thickness = 0,
filled = true,
transparency = 0,
name = "okay",
})
targetsection.getpropertychangedsignal:Connect(function(prop, val)
if prop == "visible" then
this.holder.position = _UDim2New(0, 0, 0, offset)
end
end)
this.title = DrawingFunction("text", {
parent = this.holder,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 16, 0, 8),
zindex = menu.basezindex + 7 + 12,
color = parameters.detected and _Color3FromRGB(255, 106, 79) or _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = data.name,
name = "okay",
})
this.sliderback = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.holder,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(1, -32, 0, 6),
position = _UDim2New(0, 16, 0, 24),
zindex = menu.basezindex + 7 + 12,
color = menucolors.b,
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
this.sliderbackoutline = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.sliderback,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 6 + 12,
color = menucolors.d,
visible = true,
thickness = 1,
filled = false,
name = "okay",
})
this.slider = {}
for i = 1, 6 do
this.slider[i] = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.sliderback,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(0, 6, 0, 1),
position = _UDim2New(0, 0, 0, i),
zindex = menu.basezindex + 9 + 12,
color = menu.accent:lerp(_Color3FromRGB(_MathClamp((menu.accent.r * 255) - 5, 0, 255), _MathClamp((menu.accent.g * 255) - 5, 0, 255), _MathClamp((menu.accent.b * 255) - 5, 0, 255)), (i - 1) / 5),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
end
menu.accents[1 + #menu.accents] = this.slider
this.hitbox = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.sliderback,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 0, 1, 10),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 7 + 12,
color = _Color3FromRGB(255, 255, 255),
visible = true,
thickness = 0,
transparency = 0,
activated = true,
filled = true,
name = "okay",
})
menu.activations[1 + #menu.activations] = this.hitbox
this.valuetitle = DrawingFunction("text", {
parent = this.sliderback,
anchorpoint = _Vector2New(0.5, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(1, 0, 0, 0),
zindex = menu.basezindex + 9 + 12,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = "0°",
name = "okay",
})
this.addtext = DrawingFunction("text", {
parent = this.sliderback,
anchorpoint = _Vector2New(1, 0.5),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(1, 10, 0.5, -2),
zindex = menu.basezindex + 9 + 12,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
activated = true,
text = "+",
name = "okay",
})
this.subtext = DrawingFunction("text", {
parent = this.sliderback,
anchorpoint = _Vector2New(0, 0.5),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, -10, 0.5, -2),
zindex = menu.basezindex + 9 + 12,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = "-",
activated = true,
name = "okay",
})
local textupdateconnection -- so u can click on the value text and manually enter a number
function myflag:setvalue(new)
if new == nil then
new = 0
end
local newtext = _tostring(new)
if textupdateconnection then -- we r typing
newtext = newtext .. "|"
else
new = _MathClamp(new, minimum, maximum)
end
newtext = _tostring(new)
if customtext[newtext] then
this.valuetitle.text = customtext[newtext]
else
this.valuetitle.text = newtext .. suffix
end
for i, v in next, this.slider do
v.position = _UDim2New((((_MathClamp(new, minimum, maximum) - minimum)) / (maximum - minimum)), 0, 0, i - 1) -- s3x
local tostart = v.absoluteposition.x - this.sliderback.absoluteposition.x
local scalederrr = -tostart / this.sliderback.absolutesize.x
v.size = _UDim2New(scalederrr, 0, 0, 1)
end
this.valuetitle.position = this.slider[#this.slider].position + _UDim2New(0, 0, 0, 0)
myflag.value = new
myflag.changed:Fire()
if menu.colorpicker.focusedon then
menu.colorpicker.focusedon.animationSpeed[name] = new
end
end
local connection
this.hitbox.clicked:Connect(function()
if menu.uiopen == false or menu.isadropdownopen then return end
connection = RunService.Stepped:Connect(function()
local relative = utilities.mouse.position.x
local mousebound = utilities.mouse.position.x - this.hitbox.absoluteposition.x - 1
mousebound = _MathClamp(mousebound, 0, this.hitbox.absolutesize.x)
local result = mousebound
result = _MathClamp(result, 0, this.hitbox.absolutesize.x)
result = _MathFloor(0.5 + (((maximum - minimum) / this.hitbox.absolutesize.x) * mousebound) + minimum)
myflag:setvalue(result)
if this.hitbox.holding == false or menu.uiopen == false then
connection:Disconnect()
connection = nil
return
end
end)
end)
this.addtext.mouseenter:Connect(function()
this.addtext.color = menu.accent
end)
this.addtext.mouseleave:Connect(function()
this.addtext.color = _Color3FromRGB(255, 255, 255)
end)
this.subtext.mouseenter:Connect(function()
this.subtext.color = menu.accent
end)
this.subtext.mouseleave:Connect(function()
this.subtext.color = _Color3FromRGB(255, 255, 255)
end)
this.addtext.clicked:Connect(function()
myflag:setvalue(myflag.value + 1)
end)
this.subtext.clicked:Connect(function()
myflag:setvalue(myflag.value - 1)
end)
myflag:setvalue(parameters.value)
this.offsetted = currentOffset
currentOffset = currentOffset + 36
sectionReference[name] = this
elseif data.type == "color" then
local this = {}
local dn = {}
local myflag = dn
currentOffset = currentOffset
myflag.__index = dn
myflag.type = "toggle"
myflag.value = false
myflag.changed = utilities.signal.new()
this.hitbox = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = targetsection,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(1, 0, 0, 14),
position = _UDim2New(0, 0, 0, currentOffset),
zindex = menu.basezindex + 6 + 12,
color = _Color3FromRGB(255, 255, 255),
visible = true,
thickness = 0,
filled = true,
transparency = 0,
name = "okay",
})
this.toggle = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.hitbox,
anchorpoint = _Vector2New(0, 0.5),
size = _UDim2New(0, 8, 0, 8),
position = _UDim2New(0, 8, 0.5, 0),
zindex = menu.basezindex + 7 + 12,
color = _Color3FromRGB(76, 76, 76),
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
this.toggleoutline = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.toggle,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = menu.basezindex + 6 + 12,
color = _Color3FromRGB(0, 0, 0),
visible = false,
thickness = 1,
filled = false,
name = "okay",
})
this.toggled = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.toggle,
anchorpoint = _Vector2New(0, 0),
size = _UDim2New(1, 0, 1, 0),
position = _UDim2New(0, 0, 0, 0),
zindex = menu.basezindex + 7 + 12,
color = menu.accent,
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
this.title = DrawingFunction("text", {
parent = this.hitbox,
anchorpoint = _Vector2New(0, 0.5),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 16, 0.5, -1),
zindex = menu.basezindex + 6 + 12,
color = parameters.detected and _Color3FromRGB(255, 106, 79) or _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
outlinecolor = _Color3FromRGB(12, 12, 12),
text = data.name,
name = "okay",
})
this.realhitbox = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.hitbox,
anchorpoint = _Vector2New(0, 0.5),
size = _UDim2New(0, 32 + this.title.absolutesize.x, 1, 0),
position = _UDim2New(0, 0, 0.5, 0),
zindex = menu.basezindex + 8 + 12,
color = _Color3FromRGB(255, 255, 255),
visible = true,
thickness = 0,
filled = true,
transparency = 0,
name = "okay",
})
this.accessories = {} -- color pickers and what not
currentOffset = currentOffset + 14
do
local parameters = {
name = data.name,
flag = fakeFlag,
color = _Color3New(1, 1, 1),
transparency = 0
}
local targetobj = this
if not targetobj.accessories then
return
end
local flag = parameters.flag
local colorThis = {}
local myflag = fakeFlag
myflag.__index = fakeFlag
myflag.type = "color"
myflag.color = parameters.color
myflag.transparency = parameters.transparency
myflag.changed = utilities.signal.new()
colorThis.outline = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = this.hitbox,
anchorpoint = _Vector2New(1, 0.5),
size = _UDim2New(0, 24, 0, 12),
position = _UDim2New(1, -14, 0.5, 0),
zindex = menu.basezindex + 8 + 12,
color = _Color3FromRGB(12, 12, 12),
visible = true,
thickness = 0,
activated = true,
filled = true,
name = "okay",
})
colorThis.color = {}
for i = 1, 5 do
colorThis.color[i] = DrawingFunction("frame", { -- for getting the bounds of the thing
parent = colorThis.outline,
anchorpoint = _Vector2New(0.5, 0),
size = _UDim2New(1, -2, 0, 2),
position = _UDim2New(0.5, 0, 0, (i - 1) * 2 + 1),
zindex = menu.basezindex + 10 + 12,
color = parameters.color:lerp(_Color3FromRGB(_MathClamp(parameters.color.r * 255 - 33, 0, 255), _MathClamp(parameters.color.g * 255 - 33, 0, 255), _MathClamp(parameters.color.b * 255 - 33, 0, 255)), i / 5),
visible = true,
thickness = 0,
filled = true,
name = "okay",
})
end
function myflag:setcolor(new)
myflag.color = new
for i = 1, 5 do
local segment = colorThis.color[i]
segment.color = new:lerp(_Color3FromRGB(_MathClamp(new.r * 255 - 20, 0, 255), _MathClamp(new.g * 255 - 20, 0, 255), _MathClamp(new.b * 255 - 20, 0, 255)), (i - 1) / 5)
end
myflag.changed:Fire()
if menu.colorpicker.focusedon then
menu.colorpicker.focusedon.animationKeyFrames[name][data.name].color = new
end
end
function myflag:settransparency(new)
myflag.transparency = new
myflag.changed:Fire()
if menu.colorpicker.focusedon then
menu.colorpicker.focusedon.animationKeyFrames[name][data.name].transparency = new
end
end
myflag:setcolor(parameters.color)
if myflag.transparency then
myflag:settransparency(parameters.transparency)
end
colorThis.outline.clicked:Connect(function()
if menu.uiopen == false or menu.isadropdownopen then return end
menu:oldcallcolorpicker(data.name, fakeFlag, utilities.mouse.position, menu.colorpicker.focusedon.transparency and fakeFlag.transparency or nil)
end)
colorThis.bounds = _Vector2New(28, 0)
colorThis.outline.visible = true
sectionReference[data.name] = colorThis
end
end
menu.colorpicker.flagReference[name][data.name] = fakeFlag
end
end
menu.colorpicker.firstTabBack.clicked:Connect(function()
if not menu.colorpicker.focusedon then return end
menu.colorpicker.container.visible = true
menu.colorpicker.secondContainer.visible = false
local transparency = menu.colorpicker.focusedon.transparency
if transparency then
menu.colorpicker.transparencyoutline.visible = true
menu.colorpicker.transparencyselection.visible = true
menu.colorpicker.transparencyoutline.position = menu.colorpicker.transparencyoutline.position
menu.colorpicker.transparencyselection.position = _UDim2New(0, transparency * menu.colorpicker.transparencypicker.absolutesize.x, 0, -2) + _UDim2New(0, menu.colorpicker.transparencypicker.absoluteposition.x, 0, menu.colorpicker.transparencypicker.absoluteposition.y)
else
menu.colorpicker.transparencyoutline.visible = false
menu.colorpicker.transparencyselection.visible = false
end
menu.colorpicker.hueselection.visible = true
menu.colorpicker.pickerselection.visible = true
menu.colorpicker.firstTabFront.color = _Color3New(0, 0, 0)
menu.colorpicker.secondTabFront.color = _Color3FromRGB(46, 46, 46)
end)
menu.colorpicker.secondTabBack.clicked:Connect(function()
if not menu.colorpicker.focusedon then return end
menu.colorpicker.container.visible = false
menu.colorpicker.secondContainer.visible = true
menu.colorpicker.secondContainer.position = menu.colorpicker.secondContainer.position + _UDim2New(0, -1, 0, 0)
menu.colorpicker.secondContainer.position = menu.colorpicker.secondContainer.position + _UDim2New(0, 1, 0, 0)
menu.colorpicker.transparencyselection.visible = false
menu.colorpicker.hueselection.visible = false
menu.colorpicker.pickerselection.visible = false
menu.colorpicker.firstTabFront.color = _Color3FromRGB(46, 46, 46)
menu.colorpicker.secondTabFront.color = _Color3New(0, 0, 0)
menu.colorpicker.fakeDropdown.holder.position = _UDim2New(0, 0, 0, 12)
for i, v in next, menu.colorpicker.animationPanels do
v.panel.position = v.panel.position + _UDim2New(0, 0, 0, 1)
v.panel.position = v.panel.position - _UDim2New(0, 0, 0, 1)
end
end)
-- how 2 pick color
menu.colorpicker.picker.clicked:Connect(function()
local oldhue = _MathAbs(1 - (_MathClamp(menu.colorpicker.hueselection.absoluteposition.y, menu.colorpicker.hue.absoluteposition.y, menu.colorpicker.hue.absoluteposition.y + menu.colorpicker.hue.absolutesize.y) - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y)
local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.picker.absoluteposition.x, menu.colorpicker.picker.absoluteposition.x + menu.colorpicker.picker.absolutesize.x)
local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.picker.absoluteposition.y, menu.colorpicker.picker.absoluteposition.y + menu.colorpicker.picker.absolutesize.y)
menu.colorpicker.pickerselection.position = _UDim2New(0, xpos, 0, ypos)
-- quick maths
local sat = _MathClamp((xpos - menu.colorpicker.picker.absoluteposition.x) / menu.colorpicker.picker.absolutesize.x, 0, 1)
local val = _MathClamp(_MathAbs(1 - (ypos - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y), 0, 1)
menu.colorpicker.focusedon:setcolor(_Color3FromHSV(oldhue, sat, val))
menu.colorpicker.updater = utilities.mouse.moved:Connect(function()
local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.picker.absoluteposition.x, menu.colorpicker.picker.absoluteposition.x + menu.colorpicker.picker.absolutesize.x)
local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.picker.absoluteposition.y, menu.colorpicker.picker.absoluteposition.y + menu.colorpicker.picker.absolutesize.y)
menu.colorpicker.pickerselection.position = _UDim2New(0, xpos, 0, ypos)
-- quick maths
local sat = _MathClamp((xpos - menu.colorpicker.picker.absoluteposition.x) / menu.colorpicker.picker.absolutesize.x, 0, 1)
local val = _MathClamp(_MathAbs(1 - (ypos - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y), 0, 1)
menu.colorpicker.focusedon:setcolor(_Color3FromHSV(oldhue, sat, val))
end)
end)
menu.colorpicker.hue.clicked:Connect(function()
local old = menu.colorpicker.focusedon.color
local oldhue, oldsat, oldval = _Color3ToHSV(old)
local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.hue.absoluteposition.x, menu.colorpicker.hue.absoluteposition.x + menu.colorpicker.hue.absolutesize.x)
local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.hue.absoluteposition.y, menu.colorpicker.hue.absoluteposition.y + menu.colorpicker.hue.absolutesize.y)
menu.colorpicker.hueselection.position = _UDim2New(0, menu.colorpicker.hue.absoluteposition.x - 2, 0, ypos)
local hue = _MathAbs(1 - (ypos - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y)
menu.colorpicker.focusedon:setcolor(_Color3FromHSV(hue, oldsat, oldval))
menu.colorpicker.pickercontainer.color = _Color3FromHSV(hue, 1, 1)
menu.colorpicker.updater = utilities.mouse.moved:Connect(function()
local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.hue.absoluteposition.x, menu.colorpicker.hue.absoluteposition.x + menu.colorpicker.hue.absolutesize.x)
local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.hue.absoluteposition.y, menu.colorpicker.hue.absoluteposition.y + menu.colorpicker.hue.absolutesize.y)
menu.colorpicker.hueselection.position = _UDim2New(0, menu.colorpicker.hue.absoluteposition.x - 2, 0, ypos)
local hue = _MathAbs(1 - (ypos - menu.colorpicker.picker.absoluteposition.y) / menu.colorpicker.picker.absolutesize.y)
menu.colorpicker.focusedon:setcolor(_Color3FromHSV(hue, oldsat, oldval))
menu.colorpicker.pickercontainer.color = _Color3FromHSV(hue, 1, 1)
end)
end)
menu.colorpicker.transparencypicker.clicked:Connect(function()
local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.transparencypicker.absoluteposition.x, menu.colorpicker.transparencypicker.absoluteposition.x + menu.colorpicker.transparencypicker.absolutesize.x)
local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.transparencypicker.absoluteposition.y, menu.colorpicker.transparencypicker.absoluteposition.y + menu.colorpicker.transparencypicker.absolutesize.y)
menu.colorpicker.transparencyselection.position = _UDim2New(0, xpos, 0, menu.colorpicker.transparencypicker.absoluteposition.y - 2)
local transparency = (xpos - menu.colorpicker.transparencypicker.absoluteposition.x) / menu.colorpicker.transparencypicker.absolutesize.x
menu.colorpicker.focusedon:settransparency(transparency)
menu.colorpicker.updater = utilities.mouse.moved:Connect(function()
local xpos = _MathClamp(utilities.mouse.position.x, menu.colorpicker.transparencypicker.absoluteposition.x, menu.colorpicker.transparencypicker.absoluteposition.x + menu.colorpicker.transparencypicker.absolutesize.x)
local ypos = _MathClamp(utilities.mouse.position.y, menu.colorpicker.transparencypicker.absoluteposition.y, menu.colorpicker.transparencypicker.absoluteposition.y + menu.colorpicker.transparencypicker.absolutesize.y)
menu.colorpicker.transparencyselection.position = _UDim2New(0, xpos, 0, menu.colorpicker.transparencypicker.absoluteposition.y - 2)
local transparency = (xpos - menu.colorpicker.transparencypicker.absoluteposition.x) / menu.colorpicker.transparencypicker.absolutesize.x
menu.colorpicker.focusedon:settransparency(transparency)
end)
end)
utilities.mouse.mousebutton1up:Connect(function()
if menu.colorpicker.updater then
menu.colorpicker.updater:Disconnect()
end
end)
function menu:callcolorpicker(name, flag, position, transparency)
if not flag then return end
local old = flag.color
local oldhue, oldsat, oldval = _Color3ToHSV(old)
menu.colorpicker.container.visible = true
menu.colorpicker.secondContainer.visible = false
menu.colorpicker.transparencyselection.visible = true
menu.colorpicker.hueselection.visible = true
menu.colorpicker.pickerselection.visible = true
menu.colorpicker.firstTabFront.color = _Color3New(0, 0, 0)
menu.colorpicker.secondTabFront.color = _Color3FromRGB(46, 46, 46)
menu.colorpicker.outline.visible = true
menu.isacolorpickeropen = true
menu.colorpicker.outline.position = _UDim2New(0, position.x, 0, position.y)
menu.colorpicker.title.text = name
menu.colorpicker.pickercontainer.color = _Color3FromHSV(oldhue, 1, 1)
if transparency then
menu.colorpicker.outline.size = _UDim2New(0, menu.colorpicker.proportions.mainSize.x, 0, menu.colorpicker.proportions.mainSize.y + menu.colorpicker.proportions.secondaryBarWidth + 2)
else
menu.colorpicker.outline.size = _UDim2New(0, menu.colorpicker.proportions.mainSize.x, 0, menu.colorpicker.proportions.mainSize.y)
end
menu.colorpicker.hueselection.visible = true
menu.colorpicker.pickerselection.visible = true
menu.colorpicker.transparencyoutline.visible = transparency ~= nil and true or false
menu.colorpicker.transparencyselection.visible = transparency ~= nil and true or false
menu.colorpicker.hueselection.position = _UDim2New(0, -2, 0, _MathAbs(1 - oldhue) * menu.colorpicker.hue.absolutesize.y) + _UDim2New(0, menu.colorpicker.hue.absoluteposition.x, 0, menu.colorpicker.hue.absoluteposition.y)
menu.colorpicker.pickerselection.position = _UDim2New(0, oldsat * menu.colorpicker.picker.absolutesize.x, 0, _MathAbs(oldval - 1) * menu.colorpicker.picker.absolutesize.y) + _UDim2New(0, menu.colorpicker.picker.absoluteposition.x, 0, menu.colorpicker.picker.absoluteposition.y)
menu.colorpicker.focusedon = flag
if transparency then
menu.colorpicker.transparencyoutline.position = menu.colorpicker.transparencyoutline.position
menu.colorpicker.transparencyselection.position = _UDim2New(0, transparency * menu.colorpicker.transparencypicker.absolutesize.x, 0, -2) + _UDim2New(0, menu.colorpicker.transparencypicker.absoluteposition.x, 0, menu.colorpicker.transparencypicker.absoluteposition.y)
end
-- thing
menu.colorpicker.outofboundscloseconnection = utilities.mouse.mousebutton1down:Connect(function()
if utilities.mousechecks.inbounds(menu.oldcolorpicker.outline, utilities.mouse.position) == false and utilities.mousechecks.inbounds(menu.colorpicker.outline, utilities.mouse.position) == false then -- uh oh..
if menu.colorpicker.updater then
menu.colorpicker.updater:Disconnect()
end
menu.colorpicker.outline.visible = false
menu.colorpicker.transparencyselection.visible = false
menu.colorpicker.hueselection.visible = false
menu.colorpicker.pickerselection.visible = false
menu.isacolorpickeropen = false
if menu.colorpicker.outofboundscloseconnection then
menu.colorpicker.outofboundscloseconnection:Disconnect()
menu.colorpicker.outofboundscloseconnection = nil
end
do
local myflag = menu.colorpicker.animationSelection
local this = menu.colorpicker.fakeDropdown
this.dropdownopened = false
this.icontext.text = (this.dropdownopened == true) and "-" or "+"
menu.isadropdownopen = false
for i, v in next, (this.valuecontainer) do
v.selectionoutline.visible = this.dropdownopened
v.selectionoutline.position = v.selectionoutline.position
v.selectionoutline.size = v.selectionoutline.size
if v.value and myflag.value[v.value] then
local val = myflag.value[v.value]
this.textrecord[v.value].color = (val == true) and menu.accent or _Color3FromRGB(255, 255, 255)
end
end
end
end
end)
-- animation section fix
menu.colorpicker.fakeDropdownFlag:setvalue(flag.animation)
-- keyframe fix
for element, keyframes in next, flag.animationKeyFrames do
for keyindex, data in next, keyframes do
menu.colorpicker.flagReference[element][keyindex]:setcolor(data.color)
if data.transparency then
menu.colorpicker.flagReference[element][keyindex]:settransparency(data.transparency)
end
end
end
-- slider fix
for element, value in next, flag.animationSpeed do
menu.colorpicker.flagReference[element]["speed"]:setvalue(value)
end
end
menu:callcolorpicker(
"Evie <3",
{
color = _Color3New(1, 1, 1),
animation = {
none = true,
rainbow = false,
linear = false,
oscillating = false,
strobe = false
},
animationKeyFrames = {
linear = {
["keyframe 1"] = {
color = _Color3New(),
transparency = 1
},
["keyframe 2"] = {
color = _Color3New(),
transparency = 1
}
},
oscillating = {
["keyframe 1"] = {
color = _Color3New(),
transparency = 1
},
["keyframe 2"] = {
color = _Color3New(),
transparency = 1
}
},
strobe = {
["keyframe 1"] = {
color = _Color3New(),
transparency = 1
},
["keyframe 2"] = {
color = _Color3New(),
transparency = 1
}
},
}, -- color and transparency
animationSpeed = {
rainbow = 100,
linear = 100,
oscillating = 100,
strobe = 100
},
},
_Vector2New(),
nil
)
do
if menu.colorpicker.updater then
menu.colorpicker.updater:Disconnect()
end
menu.colorpicker.outline.visible = false
menu.colorpicker.transparencyselection.visible = false
menu.colorpicker.hueselection.visible = false
menu.colorpicker.pickerselection.visible = false
menu.isacolorpickeropen = false
if menu.colorpicker.outofboundscloseconnection then
menu.colorpicker.outofboundscloseconnection:Disconnect()
menu.colorpicker.outofboundscloseconnection = nil
end
do
local myflag = menu.colorpicker.animationSelection
local this = menu.colorpicker.fakeDropdown
this.dropdownopened = false
this.icontext.text = (this.dropdownopened == true) and "-" or "+"
menu.isadropdownopen = false
for i, v in next, (this.valuecontainer) do
v.selectionoutline.visible = this.dropdownopened
v.selectionoutline.position = v.selectionoutline.position
v.selectionoutline.size = v.selectionoutline.size
if v.value and myflag.value[v.value] then
local val = myflag.value[v.value]
this.textrecord[v.value].color = (val == true) and menu.accent or _Color3FromRGB(255, 255, 255)
end
end
end
end
end
end
function menu:setsize(size)
menu.objects.backborder.size = _UDim2New(0, _MathClamp(size.x, parameters.size.x, 1/0), 0, _MathClamp(size.y, parameters.size.y, 1/0))
end
function menu:savestate() -- configs!!
local state = {}
for i, v in next, (menu.flags) do
if i:match("config") or i:match("playerlist") then -- ignore the configs!!
else
local kind = v.type
if kind == "toggle" or kind == "slider" or kind == "textbox" then
local val = {v.value}
state[i] = {kind, val}
elseif kind == "color" then
local val = {v.color.r, v.color.g, v.color.b, v.transparency}
local keyFrameFix = {}
for n, kfs in next, v.animationKeyFrames do
keyFrameFix[n] = {}
for idx, d in next, kfs do
keyFrameFix[n][idx] = {d.color.r, d.color.g, d.color.b, d.transparency}
end
end
local animations = {
animation = v.animation,
animationKeyFrames = keyFrameFix,
speeds = v.animationSpeed
}
state[i] = {kind, {val, animations}}
elseif kind == "dropdown" then
local val = {}
for i, v in next, (v.value) do
val[i] = v
end
state[i] = {kind, val}
elseif kind == "keybind" then
local val = {v.key ~= "NONE" and v.key or "NONE", v.activation}
state[i] = {kind, val}
end
end
end
state.menusize = {x = menu.objects.backborder.absolutesize.x, y = menu.objects.backborder.absolutesize.y}
state.panelsize = {}
for tab, columns in next, menu.subsections do
if tab ~= "players" then
state.panelsize[tab] = {}
for column, panels in next, columns do
for panel, data in next, panels do
local sz = data.panelResize.getSize()
local ps = data.panelReposition.getPosition()
state.panelsize[tab][panel] = {
size = {
scalex = sz.X.Scale,
scaley = sz.Y.Scale,
offsetx = sz.X.Offset,
offsety = sz.Y.Offset
},
position = {
scalex = ps.X.Scale,
scaley = ps.Y.Scale,
offsetx = ps.X.Offset,
offsety = ps.Y.Offset,
side = data.panelReposition.getSide()
}
}
end
end
end
end
return json.encode(state)
end
function menu:loadstate(state)
local state = json.decode(state)
for i, v in next, (state) do
if i == "menusize" then
menu:setsize(_Vector2New(v.x, v.y))
elseif i == "panelsize" then
for tab, columns in next, menu.subsections do
if tab ~= "players" then
for column, panels in next, columns do
for panel, data in next, panels do
if v[tab] and v[tab][panel] then
local configData = v[tab][panel]
local menuPanel = data
if menuPanel then
menuPanel.panelReposition.setSide(configData.position.side)
end
end
end
end
end
end
for tab, columns in next, menu.subsections do
if tab ~= "players" then
for column, panels in next, columns do
for panel, data in next, panels do
if v[tab] and v[tab][panel] then
local configData = v[tab][panel]
local menuPanel = data
if menuPanel then
menuPanel.panelReposition.setPosition(_UDim2New(configData.position.scalex, configData.position.offsetx, configData.position.scaley, configData.position.offsety))
end
end
end
end
end
end
for tab, columns in next, menu.subsections do
if tab ~= "players" then
for column, panels in next, columns do
for panel, data in next, panels do
if v[tab] and v[tab][panel] then
local configData = v[tab][panel]
local menuPanel = data
if menuPanel then
menuPanel.panelResize.setSize(_UDim2New(configData.size.scalex, configData.size.offsetx, configData.size.scaley, configData.size.offsety))
end
end
end
end
end
end
else
local ff = menu.flags[i]
if ff then
local kind = v[1]
local value = v[2]
if kind == "toggle" or kind == "slider" or kind == "textbox" then
ff:setvalue(value[1])
elseif kind == "dropdown" then
ff:setvalue(value)
elseif kind == "color" then
ff:setcolor(_Color3New(value[1][1], value[1][2], value[1][3]))
if value[1][4] then
ff:settransparency(value[1][4])
end
local keyFrameFix = {}
for n, kfs in next, value[2].animationKeyFrames do
keyFrameFix[n] = {}
for idx, d in next, kfs do
keyFrameFix[n][idx] = {
color = _Color3New(d[1], d[2], d[3]),
transparency = d[4],
}
end
end
ff:setAnimation(value[2].animation)
ff:setAnimationSpeed(value[2].speeds)
ff:setAnimationKeyFrames(keyFrameFix)
elseif kind == "keybind" then
ff:setkey(value[1])
ff:setactivation(value[2])
end
end
end
end
end
menu.uiopen = true
menu.animations = {}
menu.targetrans = _Instancenew("NumberValue")
menu.targetrans.Value = 1
function menu:updatemenuanimations() -- thing
for i, v in next, menu.animations do
v:Disconnect()
end
table.clear(menu.animations)
for i, v in next, (menu.openclose) do
if v.transparency and v.transparency > 0 then
if v.transparency == 1 then
menu.animations[1 + #menu.animations] = menu.targetrans.Changed:Connect(function()
v.Drawingobject.Transparency = menu.targetrans.Value
end)
else
menu.animations[1 + #menu.animations] = menu.targetrans.Changed:Connect(function()
v.Drawingobject.Transparency = v.transparency * menu.targetrans.Value
end)
end
end
end
end
menu.uiopen = false
local openereses = TweenService:Create(menu.targetrans, _TweenInfonew(0.2, Enum.EasingStyle.Linear, Enum.EasingDirection.In), {Value = 1})
local closeereses = TweenService:Create(menu.targetrans, _TweenInfonew(0.2, Enum.EasingStyle.Linear, Enum.EasingDirection.Out), {Value = 0})
function menu:openui()
menu.uiopen = true
menu.objects.backborder.position = _UDim2New(0, menu.objects.backborder.absoluteposition.x, 0, menu.objects.backborder.absoluteposition.y) -- ez fix
openereses:Play()
end
function menu:closeui()
menu.uiopen = false
do
if menu.colorpicker.updater then
menu.colorpicker.updater:Disconnect()
end
menu.colorpicker.outline.visible = false
menu.colorpicker.transparencyselection.visible = false
menu.colorpicker.hueselection.visible = false
menu.colorpicker.pickerselection.visible = false
menu.isacolorpickeropen = false
if menu.colorpicker.outofboundscloseconnection then
menu.colorpicker.outofboundscloseconnection:Disconnect()
menu.colorpicker.outofboundscloseconnection = nil
end
do
local myflag = menu.colorpicker.animationSelection
local this = menu.colorpicker.fakeDropdown
this.dropdownopened = false
this.icontext.text = (this.dropdownopened == true) and "-" or "+"
menu.isadropdownopen = false
for i, v in next, (this.valuecontainer) do
v.selectionoutline.visible = this.dropdownopened
v.selectionoutline.position = v.selectionoutline.position
v.selectionoutline.size = v.selectionoutline.size
if v.value and myflag.value[v.value] then
local val = myflag.value[v.value]
this.textrecord[v.value].color = (val == true) and menu.accent or _Color3FromRGB(255, 255, 255)
end
end
end
end
closeereses:Play()
end
menu:closeui()
return menu
end
uilibrary = uilib
end
local ui
local uiflags
local cheat_path = "vaderhaxx paste"
local game_path = "cbro"
local config_path = "configurations"
local forcefieldanimations = {
["off"] = "rbxassetid://0",
["web"] = "rbxassetid://301464986",
["webbed"] = "rbxassetid://2179243880",
["scanning"] = "rbxassetid://5843010904",
["pixelated"] = "rbxassetid://140652787",
["swirl"] = "rbxassetid://8133639623",
["checkerboard"] = "rbxassetid://5790215150",
["christmas"] = "rbxassetid://6853532738",
["player"] = "rbxassetid://4494641460",
["shield"] = "rbxassetid://361073795",
["dots"] = "rbxassetid://5830615971",
["bubbles"] = "rbxassetid://1461576423",
["matrix"] = "rbxassetid://10713189068",
["honeycomb"] = "rbxassetid://179898251",
["groove"] = "rbxassetid://10785404176",
["cloud"] = "rbxassetid://5176277457",
["sky"] = "rbxassetid://1494603972",
["smudge"] = "rbxassetid://6096634060",
["scrapes"] = "rbxassetid://6248583558",
["galaxy"] = "rbxassetid://1120738433",
["galaxies"] = "rbxassetid://5101923607",
["stars"] = "rbxassetid://598201818",
["rainbow"] = "rbxassetid://10037165803",
["wires"] = "rbxassetid://14127933",
["camo"] = "rbxassetid://3280937154",
["hexagon"] = "rbxassetid://6175083785",
["particles"] = "rbxassetid://1133822388",
["triangular"] = "rbxassetid://4504368932",
["wall"] = "rbxassetid://4271279"
}
local forcefieldAnimationsDropDown = {}
for i, v in next, (forcefieldanimations) do
local okay = {i, i == "off" and true or false}
forcefieldAnimationsDropDown[1 + #forcefieldAnimationsDropDown] = okay
end
local ScriptCacheFolder = _Instancenew("Folder", workspace)
ScriptCacheFolder.Name = "ScriptCacheFolder"
local ChrModels = game:GetObjects("rbxassetid://15837369190")[1]
local AllCharacters = {}
for i,v in pairs(_GetChildren(ChrModels)) do
_TableInsert(AllCharacters, v.Name)
end
local RavenENV = {
Utility = {},
Cache = {
Client = getsenv(_FindFirstChild(LocalPlayer, "PlayerGui").Client),
HitModifiers = {
["Head"] = 4,
["FakeHead"] = 4,
["HeadHB"] = 4,
["UpperTorso"] = 1,
["LowerTorso"] = 1.25,
["LeftUpperArm"] = 1,
["LeftLowerArm"] = 1,
["LeftHand"] = 1,
["RightUpperArm"] = 1,
["RightLowerArm"] = 1,
["RightHand"] = 1,
["LeftUpperLeg"] = 0.75,
["LeftLowerLeg"] = 0.75,
["LeftFoot"] = 0.75,
["RightUpperLeg"] = 0.75,
["RightLowerLeg"] = 0.75,
["RightFoot"] = 0.75,
["ForwardTrack"] = 1,
["BackTrack"] = 1,
},
hitgroups = {
["Head"] = {"Head"},
["Chest"] = {"UpperTorso"},
["Pelvis"] = {"LowerTorso"},
["Arms"] = {"LeftLowerArm", "RightLowerArm", "LeftUpperArm", "RightUpperArm"},
["Legs"] = {"LeftLowerLeg", "LeftUpperLeg", "RightLowerLeg", "RightUpperLeg"},
["Feet"] = {"LeftFoot", "RightFoot"}
},
TracerTextures = {
["None"] = "rbxassetid://0",
["Lighting"] = "rbxassetid://7216850022",
["Laser"] = "rbxassetid://7136858729",
["Twisted Energy"] = "rbxassetid://7071778278",
["Anime Lazer"] = "rbxassetid://17441065350",
["Interstellar"] = "rbxassetid://128372145766358",
["Arrow"] = "rbxassetid://1274378728",
["Minecraft"] = "rbxassetid://152410036",
["Alien Energy Ray"] = "rbxassetid://6091341618",
["Energy Ray"] = "rbxassetid://13832105797",
["Matrix"] = "rbxassetid://15097610754",
["Cartoony Eletric"] = "rbxassetid://18722421816"
},
MaterialNames = (function()
local tbl = {}
for i, v in next, _Materials:GetEnumItems() do
_TableInsert(tbl, v.Name)
end
return tbl
end)(),
},
RageBot = {
Target = {
TargetPosition = nil,
Origin = nil,
TargetPlayer = nil,
Damage = nil,
DamageMultiplayer = nil,
Hit = nil
},
},
Visuals = {},
Movement = {},
AntiAim = {},
Calculations = {},
PlayerModule = {},
Misc = {},
Esp = {},
}
local RageBot = RavenENV.RageBot
local Cache = RavenENV.Cache
local AntiAim = RavenENV.AntiAim
local PlayerModule = RavenENV.PlayerModule
local Visuals = RavenENV.Visuals
local Utility = RavenENV.Utility
local Movement = RavenENV.Movement
local Misc = RavenENV.Misc
local Calculations = RavenENV.Calculations
local Esp = RavenENV.Esp
do
do
ui = uilibrary:start({
size = _Vector2New(560, 740),
name = "vaderhaxx paste",
accent = _Color3FromRGB(255, 200, 69),
colors = {
a = _Color3FromRGB(0, 0, 0),
b = _Color3FromRGB(56, 56, 56),
c = _Color3FromRGB(46, 46, 46),
d = _Color3FromRGB(12, 12, 12),
e = _Color3FromRGB(21, 21, 21),
f = _Color3FromRGB(84, 84, 84),
g = _Color3FromRGB(54, 54, 54),
},
tabs = {
"rage",
"misc",
"drawing",
"visuals",
"config",
}
})
ui:createnotification({text = "initializing...", lifetime = 3, priority = 0})
end
do
if not isfolder(cheat_path) then
makefolder(cheat_path)
end
if not isfolder(cheat_path .. "/" .. game_path) then
makefolder(cheat_path .. "/" .. game_path)
end
if not isfolder(cheat_path .. "/" .. game_path .. "/" .. config_path) then
makefolder(cheat_path .. "/" .. game_path .. "/" .. config_path)
end
function ui.getconfigs()
local Configs = {}
local CfgFolder = cheat_path .. "/" .. game_path .. "/" .. config_path
for i, v in next, (listfiles(CfgFolder)) do
Configs[1 + #Configs] = {_StringSub(v, #CfgFolder + 2, 256):sub(0, -5), (#Configs == 0) and true or false}
end
return Configs
end
end
do
do
ui:createsubsection({tab = "rage", name = "aimbot", length = 0.4, side = 1})
ui:createsubsection({tab = "rage", name = "hack vs. hack", length = 0.6, side = 1})
ui:createsubsection({tab = "rage", name = "anti aimbot", length = 1, side = 2})
ui:createsubsection({tab = "misc", name = "movement", length = 0.3, side = 1})
ui:createsubsection({tab = "misc", name = "another", length = 0.48, side = 1})
ui:createsubsection({tab = "misc", name = "gun mods", length = 0.22, side = 1})
ui:createsubsection({tab = "misc", name = "exploits", length = 0.34, side = 2})
ui:createsubsection({tab = "misc", name = "camera", length = 0.66, side = 2})
ui:createsubsection({tab = "drawing", name = "enemy", length = 0.65, side = 1})
ui:createsubsection({tab = "drawing", name = "settings", length = 0.35, side = 1})
ui:createsubsection({tab = "drawing", name = "team", length = 0.5, side = 2})
ui:createsubsection({tab = "drawing", name = "crosshair", length = 0.5, side = 2})
ui:createsubsection({tab = "visuals", name = "local chamses", length = 0.5, side = 1})
ui:createsubsection({tab = "visuals", name = "other", length = 0.5, side = 1})
ui:createsubsection({tab = "visuals", name = "atmosphere", length = 0.5, side = 2})
ui:createsubsection({tab = "visuals", name = "tracers", length = 0.5, side = 2})
ui:createsubsection({tab = "config", name = "other", length = 0.26, side = 1})
ui:createsubsection({tab = "config", name = "ui", length = 0.48, side = 1})
ui:createsubsection({tab = "config", name = "extra", length = 0.26, side = 1})
end
do -- rage
-- aimbot
ui:createtoggle({tab = "rage", subsection = "aimbot", name = "enabled", value = false, flag = "RageBot_Enabled"})
ui:createkeybind({tab = "rage", subsection = "aimbot", object = "enabled", name = "ragebot key", flag = "RageBot_Enabled_Key", parentflag = "RageBot_Enabled", value = Enum.KeyCode.E})
ui:createtoggle({tab = "rage", subsection = "aimbot", name = "auto wall", value = false, flag = "RageBot_AutoWall"})
ui:createslider({tab = "rage", subsection = "aimbot", name = "maximum walls", suffix = "", flag = "RageBot_MaxWalls", value = 5, minimum = 1, maximum = 25, custom = {}, tooltip = ""})
ui:createtoggle({tab = "rage", subsection = "aimbot", name = "prediction", value = false, flag = "RageBot_Prediction"})
ui:createtoggle({tab = "rage", subsection = "aimbot", name = "shoot simulation", value = false, flag = "RageBot_FakeShoot"})
ui:createslider({tab = "rage", subsection = "aimbot", name = "fov", suffix = "", flag = "RageBot_FOV", value = 50, minimum = 1, maximum = 180, custom = {["180"] = "ignore"}, tooltip = ""})
ui:createslider({tab = "rage", subsection = "aimbot", name = "min damage", suffix = "", flag = "RageBot_MinDmg", value = 1, minimum = 1, maximum = 100, custom = {}, tooltip = ""})
ui:createdropdown({tab = "rage", subsection = "aimbot", name = "target parts", flag = "RageBot_TargetParts", values = {{"Head", true}, {"Chest", true}, {"Pelvis", false}, {"Arms", false}, {"Legs", false}, {"Feet", false}}, multichoice = true, tooltip = ""})
ui:createdropdown({tab = "rage", subsection = "aimbot", name = "origin", flag = "RageBot_Origins", values = {{"Camera", true}, {"Head", false}}, multichoice = false, tooltip = ""})
ui:createtoggle({tab = "rage", subsection = "aimbot", name = "Arms at targets", value = false, flag = "RageBot_AtTargets"})
ui:createtoggle({tab = "rage", subsection = "aimbot", name = "hit logs", value = false, flag = "RageBot_HitLogs"})
ui:createslider({tab = "rage", subsection = "aimbot", name = "hit logs lifetime", flag = "RageBot_HitLogs_LifeTime", value = 2, minimum = 1, maximum = 5, custom = {}, tooltip = ""})
-- hvh
ui:createtoggle({tab = "rage", subsection = "hack vs. hack", name = "wait for round start", value = false, flag = "RageBot_Preparation"})
ui:createdropdown({tab = "rage", subsection = "hack vs. hack", name = "mode", flag = "RageBot_WaitForRoundStartMode", values = {{"Ping compensation OLD", true}, {"Ping compensation NEW", false}, {"Preparation start", false}}, multichoice = false, tooltip = ""})
ui:createslider({tab = "rage", subsection = "hack vs. hack", name = "modifier", suffix = "ms", flag = "RageBot_Ping_Compensation_Modifier", value = 1, minimum = 1, maximum = 100, custom = {}, tooltip = ""})
ui:createtoggle({tab = "rage", subsection = "hack vs. hack", name = "hitscan", value = false, flag = "RageBot_HitScan"})
ui:createdropdown({tab = "rage", subsection = "hack vs. hack", name = "hitscan points", flag = "RageBot_HitScan_Points", values = {{"Up", true}, {"Down", false}, {"Left", false}, {"Right", false}, {"Forward", false}, {"Backward", false}, {"Towards", false}}, multichoice = true, tooltip = ""})
ui:createslider({tab = "rage", subsection = "hack vs. hack", name = "hitscan maximum points", suffix = "", flag = "RageBot_HitScan_MaximumPoints", value = 8, minimum = 1, maximum = 64, custom = {}, tooltip = ""})
ui:createslider({tab = "rage", subsection = "hack vs. hack", name = "hitscan modifier", suffix = "", flag = "RageBot_HitScan_Modifier", value = 9, minimum = 1, maximum = 100, custom = {}, tooltip = ""})
ui:createtoggle({tab = "rage", subsection = "hack vs. hack", name = "auto peek", value = false, flag = "RageBot_AutoPeek"})
ui:createkeybind({tab = "rage", subsection = "hack vs. hack", object = "auto peek", name = "ragebot key", flag = "RageBot_AutoPeek_Key", parentflag = "RageBot_AutoPeek", value = Enum.KeyCode.E})
ui:createtoggle({tab = "rage", subsection = "hack vs. hack", name = "firerate", value = false, flag = "RageBot_FireRate"})
ui:createslider({tab = "rage", subsection = "hack vs. hack", name = "speed", suffix = "", flag = "RageBot_FireRateValue", value = 100, minimum = 0, maximum = 100, custom = {["0"] = "no delay"}, tooltip = ""})
ui:createslider({tab = "rage", subsection = "hack vs. hack", name = "penetration modifier", suffix = "", flag = "RageBot_PenModded", value = 1, minimum = 1, maximum = 1000, custom = {}, tooltip = ""})
ui:createtoggle({tab = "rage", subsection = "hack vs. hack", name = "forward track", value = false, flag = "ForwardTrack_Enabled"})
ui:createtoggle({tab = "rage", subsection = "hack vs. hack", name = "ignore walls", value = false, flag = "ForwardTrack_Ignore_Walls"})
ui:createslider({tab = "rage", subsection = "hack vs. hack", name = "steps to scan", suffix = "", flag = "ForwardTrack_Steps_to_Scan", value = 1, minimum = 1, maximum = 100, custom = {}, tooltip = ""})
ui:createslider({tab = "rage", subsection = "hack vs. hack", name = "ticks", suffix = "", flag = "ForwardTrack_Ticks", value = 1, minimum = 1, maximum = 5000, custom = {}, tooltip = ""})
ui:createtoggle({tab = "rage", subsection = "hack vs. hack", name = "camera resolver", value = false, flag = "Camera_Resolver"})
-- anti aimbot
ui:createtoggle({tab = "rage", subsection = "anti aimbot", name = "enabled", value = false, flag = "AntiAim_Enabled"})
ui:createdropdown({tab = "rage", subsection = "anti aimbot", name = "pitch", flag = "AntiAim_Pitch", values = {{"None", true}, {"Upwards", false}, {"Adaptive (for adaptive jiitter)", false}, {"Glitch", false}, {"Zero", false}, {"Downwards", false}, {"Random", false}}, multichoice = false, tooltip = ""})
ui:createslider({tab = "rage", subsection = "anti aimbot", name = "yaw", suffix = "", flag = "AntiAimSpin_Yaw", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
ui:createdropdown({tab = "rage", subsection = "anti aimbot", name = "yaw base", flag = "AntiAim_YawBase", values = {{"Spin", true}, {"Targets", false}, {"Camera", false}, {"Random", false}, {"Adaptive Jitter", false}}, multichoice = false, tooltip = ""})
ui:createslider({tab = "rage", subsection = "anti aimbot", name = "spinbot, jiiter max speed", suffix = "", flag = "AntiAimSpin_Speed", value = 1, minimum = 1, maximum = 360, custom = {}, tooltip = ""})
ui:createslider({tab = "rage", subsection = "anti aimbot", name = "jitter min speed", suffix = "", flag = "Jitter_MinSpeed", value = 1, minimum = 1, maximum = 360, custom = {}, tooltip = ""})
ui:createslider({tab = "rage", subsection = "anti aimbot", name = "plus angle", suffix = "", flag = "Jitter_Angle1", value = 0, minimum = 1, maximum = 360, custom = {}, tooltip = ""})
ui:createslider({tab = "rage", subsection = "anti aimbot", name = "minus angle", suffix = "", flag = "Jitter_Angle2", value = 0, minimum = 1, maximum = 360, custom = {}, tooltip = ""})
ui:createtoggle({tab = "rage", subsection = "anti aimbot", name = "360 xyz randomize spin", value = false, flag = "AntiAim_In_Gravity"})
ui:createslider({tab = "rage", subsection = "anti aimbot", name = "base spin", suffix = "", flag = "AntiAim_In_Gravity_BaseSpin", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
ui:createslider({tab = "rage", subsection = "anti aimbot", name = "maximum spin", suffix = "", flag = "AntiAim_In_Gravity_MaximumSpin", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
ui:createslider({tab = "rage", subsection = "anti aimbot", name = "speed", suffix = "", flag = "AntiAim_In_Gravity_Speed", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
ui:createtoggle({tab = "rage", subsection = "anti aimbot", name = "cframe modification", value = false, flag = "AntiAim_СFrame_Manipulation"})
ui:createslider({tab = "rage", subsection = "anti aimbot", name = "x", suffix = "", flag = "AntiAim_СFrame_Manipulation_X", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
ui:createslider({tab = "rage", subsection = "anti aimbot", name = "y", suffix = "", flag = "AntiAim_СFrame_Manipulation_Y", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
ui:createslider({tab = "rage", subsection = "anti aimbot", name = "z", suffix = "", flag = "AntiAim_СFrame_Manipulation_Z", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
ui:createslider({tab = "rage", subsection = "anti aimbot", name = "x angke", suffix = "", flag = "AntiAim_СFrame_Manipulation_X_Angles", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
ui:createslider({tab = "rage", subsection = "anti aimbot", name = "y angle", suffix = "", flag = "AntiAim_СFrame_Manipulation_Y_Angles", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
ui:createslider({tab = "rage", subsection = "anti aimbot", name = "z angle", suffix = "", flag = "AntiAim_СFrame_Manipulation_Z_Angles", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
ui:createtoggle({tab = "rage", subsection = "anti aimbot", name = "fake lags", value = false, flag = "FakeLags_Enabled"})
ui:createtoggle({tab = "rage", subsection = "anti aimbot", name = "prevent replication", value = false, flag = "FakeLags_PreventReplication"})
ui:createkeybind({tab = "rage", subsection = "anti aimbot", object = "prevent replication", name = "prevent replication key", flag = "FakeLags_PreventReplication_Key", parentflag = "FakeLags_PreventReplication", value = Enum.KeyCode.X})
ui:createslider({tab = "rage", subsection = "anti aimbot", name = "ticks", suffix = "", flag = "FakeLags_Ticks", value = 0, minimum = 0, maximum = 2056, custom = {}, tooltip = ""})
ui:createslider({tab = "rage", subsection = "anti aimbot", name = "limit", suffix = "", flag = "FakeLags_Limit", value = 0, minimum = 0, maximum = 256, custom = {}, tooltip = ""})
end
do -- misc
-- movement
ui:createtoggle({tab = "misc", subsection = "movement", name = "slide walk", value = false, flag = "Movement_SlideWalk"})
ui:createtoggle({tab = "misc", subsection = "movement", name = "speed haxx", value = false, flag = "Movement_SpeedHack"})
ui:createtoggle({tab = "misc", subsection = "movement", name = "auto hop", value = false, flag = "Movement_AutoHop"})
ui:createdropdown({tab = "misc", subsection = "movement", name = "method", flag = "Movement_SpeedHackMethod", values = {{"Velocity", true}, {"CFrame", false}}, multichoice = false, tooltip = ""})
ui:createslider({tab = "misc", subsection = "movement", name = "speed", suffix = "", flag = "Movement_Speed", value = 16, minimum = 0, maximum = 250, custom = {}, tooltip = ""})
ui:createtoggle({tab = "misc", subsection = "movement", name = "override", value = false, flag = "Movement_OverrideSpeedHack"})
ui:createslider({tab = "misc", subsection = "movement", name = "override speed", suffix = "", flag = "Movement_OverrideSpeed", value = 25, minimum = 0, maximum = 250, custom = {}, tooltip = ""})
ui:createkeybind({tab = "misc", subsection = "movement", object = "override", name = "override key", flag = "Movement_OverrideSpeedHack_Key", parentflag = "Movement_OverrideSpeedHack", value = Enum.KeyCode.E})
-- another
ui:createtoggle({tab = "misc", subsection = "another", name = "kill all", value = false, flag = "KillAll_Enabled"})
ui:createtoggle({tab = "misc", subsection = "another", name = "wait for round start", value = false, flag = "KillAll_Preparation"})
ui:createdropdown({tab = "misc", subsection = "another", name = "mode", flag = "KillAll_WaitForRoundStartMode", values = {{"Ping compensation OLD", true}, {"Ping compensation NEW", false}, {"Preparation start", false}}, multichoice = false, tooltip = ""})
ui:createslider({tab = "misc", subsection = "another", name = "ping modificator", suffix = "", flag = "KillAll_DelayAdditional", value = 25, minimum = 0, maximum = 250, custom = {}, tooltip = ""})
ui:createtoggle({tab = "misc", subsection = "another", name = "hitsounds", value = false, flag = "HitSounds_Enabled"})
ui:createslider({tab = "misc", subsection = "another", name = "hitsounds volume", suffix = "", flag = "HitSounds_Volume", value = 100, minimum = 1, maximum = 100, custom = {}, tooltip = ""})
ui:createdropdown({tab = "misc", subsection = "another", name = "select hitsound", flag = "HitSounds_Ids", values = {{'Neverlose',true},{'Skeet',false},{'Rust',false},{'Monster kill',false},{'Fatality',false},{'TF2',false},{'TF2 Pan',false},{'Beautiful',false},{'Minecraft',false},{'Minecraft XP',false},{'Cod',false},{'Ray',false},{'Matchine gun',false},{'Retro loud',false},{'CSGO',false},{'Slap',false},{'Squash',false},{'Supersmash',false},{'Killingspree',false},{'Godlike',false},{'Ownage',false},{'Ultrakill',false},{'1',false},{'MCOOF',false},{'Quek',false},{'Epic',false},{'Osu',false},{'Bell',false},{'Rocket',false},{'Vine Boom',false},{'Pow',false},{'Bag',false},{'Baimware',false},{'Overwatch',false},{'Pop',false},{'Win',false},{'Denied',false},{'Lessgo',false},{'Headshot',false},{'Bruh',false},{'Percussion',false},{'Bass',false},{'Electro',false},{'Vortex',false},{'Retro',false},{'Osu Mint',false},{'Snap',false}}, multichoice = false, tooltip = ""})
ui:createtoggle({tab = "misc", subsection = "another", name = "killsounds", value = false, flag = "KillSounds_Enabled"})
ui:createslider({tab = "misc", subsection = "another", name = "killsounds volume", suffix = "", flag = "KillSounds_Volume", value = 100, minimum = 1, maximum = 100, custom = {}, tooltip = ""})
ui:createdropdown({tab = "misc", subsection = "another", name = "select killsound", flag = "KillSounds_Ids", values = {{'Neverlose',true},{'Skeet',false},{'Rust',false},{'Monster kill',false},{'Fatality',false},{'TF2',false},{'TF2 Pan',false},{'Beautiful',false},{'Minecraft',false},{'Minecraft XP',false},{'Cod',false},{'Ray',false},{'Matchine gun',false},{'Retro loud',false},{'CSGO',false},{'Slap',false},{'Squash',false},{'Supersmash',false},{'Killingspree',false},{'Godlike',false},{'Ownage',false},{'Ultrakill',false},{'1',false},{'MCOOF',false},{'Quek',false},{'Epic',false},{'Osu',false},{'Bell',false},{'Rocket',false},{'Vine Boom',false},{'Pow',false},{'Bag',false},{'Baimware',false},{'Overwatch',false},{'Pop',false},{'Win',false},{'Denied',false},{'Lessgo',false},{'Headshot',false},{'Bruh',false},{'Percussion',false},{'Bass',false},{'Electro',false},{'Vortex',false},{'Retro',false},{'Osu Mint',false},{'Snap',false}}, multichoice = false, tooltip = ""})
-- exploits
ui:createtoggle({tab = "misc", subsection = "exploits", name = "spawn weapons", value = false, flag = "Spawn_Weapons"})
local allweapons = {}
if _FindFirstChild(replicatedStorage, "Weapons") then
for i, v in next, (_GetChildren(replicatedStorage.Weapons)) do
if (_FindFirstChild(v, "Primary") or _FindFirstChild(v, "Secondary")) and not _FindFirstChild(v, "Melee") then
allweapons[1 + #allweapons] = {v.Name, false}
end
end
end
ui:createdropdown({tab = "misc", subsection = "exploits", name = "select primary", flag = "Spawn_Weapons_Primary", values = allweapons, multichoice = false, tooltip = ""})
ui:createdropdown({tab = "misc", subsection = "exploits", name = "select secondary", flag = "Spawn_Weapons_Secondary", values = allweapons, multichoice = false, tooltip = ""})
ui:createtoggle({tab = "misc", subsection = "exploits", name = "camera resolver breaker", value = false, flag = "Anti_Camera_Resolver"})
ui:createtoggle({tab = "misc", subsection = "exploits", name = "break aura", value = false, flag = "Break_Aura"})
ui:createtoggle({tab = "misc", subsection = "exploits", name = "damage mod", value = false, flag = "Damage_Modifier"})
ui:createslider({tab = "misc", subsection = "exploits", name = "modifier", suffix = "", flag = "Damage_ModifierValue", value = 1, minimum = 1, maximum = 100, custom = {}, tooltip = ""})
--camera
ui:createtoggle({tab = "misc", subsection = "camera", name = "thirdperson", value = false, flag = "ThirdPerson_Enabled"})
ui:createslider({tab = "misc", subsection = "camera", name = "distance", suffix = "studs", flag = "ThirdPerson_Distance", value = 10, minimum = 1, maximum = 100, custom = {}, tooltip = ""})
ui:createkeybind({tab = "misc", subsection = "camera", object = "thirdperson", name = "thirdperson key", flag = "ThirdPerson_Enabled_Key", parentflag = "ThirdPerson_Enabled", value = Enum.KeyCode.E})
ui:createslider({tab = "misc", subsection = "camera", name = "field of view", suffix = "", flag = "Camera_FieldOfView", value = 80, minimum = 60, maximum = 120, custom = {}, tooltip = ""})
ui:createtoggle({tab = "misc", subsection = "camera", name = "in scope", value = false, flag = "Camera_ChangeFieldOfViewInScope"})
ui:createtoggle({tab = "misc", subsection = "camera", name = "viewmodel changer", value = false, flag = "ViewModel"})
ui:createslider({tab = "misc", subsection = "camera", name = "angle x", suffix = "", flag = "ViewModel_X", value = 180, minimum = 1, maximum = 360, custom = {}, tooltip = ""})
ui:createslider({tab = "misc", subsection = "camera", name = "angle y", suffix = "", flag = "ViewModel_Y", value = 180, minimum = 1, maximum = 360, custom = {}, tooltip = ""})
ui:createslider({tab = "misc", subsection = "camera", name = "angle z", suffix = "", flag = "ViewModel_Z", value = 180, minimum = 1, maximum = 360, custom = {}, tooltip = ""})
ui:createslider({tab = "misc", subsection = "camera", name = "cframe x", suffix = "", flag = "ViewModel_X1", value = 180, minimum = 1, maximum = 360, custom = {}, tooltip = ""})
ui:createslider({tab = "misc", subsection = "camera", name = "cframe y", suffix = "", flag = "ViewModel_Y2", value = 180, minimum = 1, maximum = 360, custom = {}, tooltip = ""})
ui:createslider({tab = "misc", subsection = "camera", name = "cframe z", suffix = "", flag = "ViewModel_Z3", value = 180, minimum = 1, maximum = 360, custom = {}, tooltip = ""})
ui:createtoggle({tab = "misc", subsection = "camera", name = "remove flash", value = false, flag = "Remove_Flash"})
-- gun mods
ui:createtoggle({tab = "misc", subsection = "gun mods", name = "inf ammo", value = false, flag = "Inf_Ammo"})
ui:createtoggle({tab = "misc", subsection = "gun mods", name = "remove spread", value = false, flag = "Remove_Spread"})
ui:createtoggle({tab = "misc", subsection = "gun mods", name = "remove recoil", value = false, flag = "Remove_Recoil"})
ui:createtoggle({tab = "misc", subsection = "gun mods", name = "disable weapon swaying", value = false, flag = "Disable_Weapon_Swaying"})
ui:createtoggle({tab = "misc", subsection = "gun mods", name = "remove scope", value = false, flag = "Remove_Scope"})
ui:createtoggle({tab = "misc", subsection = "gun mods", name = "change scope", value = false, flag = "Scope_Changer"})
ui:createdropdown({tab = "misc", subsection = "gun mods", name = "select scope", flag = "Scope_Changer_Type", values = {{"ahueno", true}, {"pizdec", false}, {"porno", false}}, multichoice = false, tooltip = ""})
end
do -- esp
ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Boxes", flag = "Enemy_Boxes", value = false, tooltip = "Shows boxes around enemies"})
ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Boxes", name = "Color", flag = "Enemy_Boxes_Color1", color = _Color3FromRGB(255,255,255)})
ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Boxes Filled", flag = "Enemy_Boxes_Filled", value = false, tooltip = "Fills the enemy boxes"})
ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Boxes Filled", name = "Color", flag = "Enemy_Boxes_Filled_Color1", color = _Color3FromRGB(255,255,255)})
ui:createslider({tab = "drawing", subsection = "enemy", name = "Transparency", flag = "Enemy_Boxes_Filled_Transperency", value = 5, minimum = 1, maximum = 10, tooltip = "Adjusts fill transparency"})
ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Health Bar", flag = "Enemy_Health_Bar", value = false, tooltip = "Shows enemy health bar"})
ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Health Bar", name = "Color 1", flag = "Enemy_Health_Bar_Color1", color = _Color3FromRGB(255,255,255)})
ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Health Bar", name = "Color 2", flag = "Enemy_Health_Bar_Color2", color = _Color3FromRGB(255,255,255)})
ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Health Bar Gradient", flag = "Enemy_Health_Bar_Gradient", value = false, tooltip = "Enables gradient health bar"})
ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Health Number", flag = "Enemy_Health_Number", value = false, tooltip = "Shows HP number"})
ui:createslider({tab = "drawing", subsection = "enemy", name = "Max HP Visibility Cap", flag = "Enemy_Max_HP_Visibility_Cap", value = 0, minimum = 0, maximum = 100, tooltip = "Hides HP if above cap"})
ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Held Weapon", flag = "Enemy_Held_Weapon", value = false, tooltip = "Shows weapon enemy is holding"})
ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Held Weapon", name = "Color", flag = "Enemy_Held_Weapon_Color1", color = _Color3FromRGB(255,255,255)})
ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Distance", flag = "Enemy_Distance", value = false, tooltip = "Displays enemy distance"})
ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Distance", name = "Color", flag = "Enemy_Distance_Color1", color = _Color3FromRGB(255,255,255)})
ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Name", flag = "Enemy_Name", value = false, tooltip = "Displays enemy name"})
ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Name", name = "Color", flag = "Enemy_Name_Color1", color = _Color3FromRGB(255,255,255)})
ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Armor", flag = "Enemy_Armor", value = false, tooltip = "Displays enemy armor"})
ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Armor", name = "Color", flag = "Enemy_Armor_Color1", color = _Color3FromRGB(255,255,255)})
ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Bomb", flag = "Enemy_Bomb", value = false, tooltip = "Shows bomb carried by enemy"})
ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Bomb", name = "Color", flag = "Enemy_Bomb_Color1", color = _Color3FromRGB(255,255,255)})
ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Cash", flag = "Enemy_Cash", value = false, tooltip = "Displays enemy cash"})
ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Cash", name = "Color", flag = "Enemy_Cash_Color1", color = _Color3FromRGB(255,255,255)})
ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Snap Lines", flag = "Enemy_Snap_Lines", value = false, tooltip = "Draws snap lines to enemies"})
ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Snap Lines", name = "Color", flag = "Enemy_Snap_Lines_Color1", color = _Color3FromRGB(255,255,255)})
ui:createslider({tab = "drawing", subsection = "enemy", name = "Snap Lines Transparency", flag = "Enemy_Snap_Lines_Transperency", value = 5, minimum = 1, maximum = 10, tooltip = "Adjusts snap line transparency"})
ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Chamses", flag = "Enemy_Chamses", value = false, tooltip = "Applies chams effect to enemies"})
ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Chamses", name = "Color 1", flag = "Enemy_Chamses_Color1", color = _Color3FromRGB(255,255,255)})
ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Chamses", name = "Color 2", flag = "Enemy_Chamses_Color2", color = _Color3FromRGB(255,255,255)})
ui:createslider({tab = "drawing", subsection = "enemy", name = "Chamses Transparency 1", flag = "Enemy_Chamses_Transperency1", value = 5, minimum = 1, maximum = 10, tooltip = "Transparency for first chams color"})
ui:createslider({tab = "drawing", subsection = "enemy", name = "Chamses Transparency 2", flag = "Enemy_Chamses_Transperency2", value = 5, minimum = 1, maximum = 10, tooltip = "Transparency for second chams color"})
ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Skeletons", flag = "Enemy_Skeletons", value = false, tooltip = "Draws skeleton on enemies"})
ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Skeletons", name = "Color", flag = "Enemy_Skeletons_Color1", color = _Color3FromRGB(255,255,255)})
ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Out of View Arrows", flag = "Enemy_Out_of_View_Arrows", value = false, tooltip = "Draws arrows for off-screen enemies"})
ui:createcolorpicker({tab = "drawing", subsection = "enemy", object = "Out of View Arrows", name = "Color", flag = "Enemy_Out_of_View_Arrows_Color1", color = _Color3FromRGB(255,255,255)})
ui:createslider({tab = "drawing", subsection = "enemy", name = "Arrow Size", flag = "Enemy_Arrow_Size", value = 16, minimum = 4, maximum = 30, tooltip = "Adjusts arrow size"})
ui:createslider({tab = "drawing", subsection = "enemy", name = "Arrow Distance", flag = "Enemy_Arrow_Distance", value = 100, minimum = 10, maximum = 100, tooltip = "Adjusts arrow distance"})
ui:createtoggle({tab = "drawing", subsection = "enemy", name = "Dynamic Arrow Size", flag = "Enemy_Dynamic_Arrow_Size", value = false, tooltip = "Arrow size changes with distance"})
ui:createtoggle({tab = "drawing", subsection = "team", name = "boxes", value = false, flag = "Team_Boxes"})
ui:createcolorpicker({tab = "drawing", subsection = "team", object = "boxes", name = "color", flag = "Team_Boxes_Color1", color = _Color3FromRGB(255,255,255)})
ui:createtoggle({tab = "drawing", subsection = "team", name = "boxes filled", value = false, flag = "Team_Boxes_Filled"})
ui:createcolorpicker({tab = "drawing", subsection = "team", object = "boxes filled", name = "color", flag = "Team_Boxes_Filled_Color1", color = _Color3FromRGB(255,255,255)})
ui:createslider({tab = "drawing", subsection = "team", name = "boxes filled transperency", suffix = "", flag = "Team_Boxes_Filled_Transperency", value = 5, minimum = 1, maximum = 10, custom = {}, tooltip = ""})
ui:createtoggle({tab = "drawing", subsection = "team", name = "health bar", value = false, flag = "Team_Health_Bar"})
ui:createcolorpicker({tab = "drawing", subsection = "team", object = "health bar", name = "color 1", flag = "Team_Health_Bar_Color1", color = _Color3FromRGB(255,255,255)})
ui:createcolorpicker({tab = "drawing", subsection = "team", object = "health bar", name = "color 2", flag = "Team_Health_Bar_Color2", color = _Color3FromRGB(255,255,255)})
ui:createtoggle({tab = "drawing", subsection = "team", name = "health bar gradient", value = false, flag = "Team_Health_Bar_Gradient"})
ui:createtoggle({tab = "drawing", subsection = "team", name = "health number", value = false, flag = "Team_Health_Number"})
ui:createslider({tab = "drawing", subsection = "team", name = "max hp visibility cap", suffix = "", flag = "Team_Max_HP_Visibility_Cap", value = 0, minimum = 0, maximum = 100, custom = {}, tooltip = ""})
ui:createtoggle({tab = "drawing", subsection = "team", name = "held weapon", value = false, flag = "Team_Held_Weapon"})
ui:createcolorpicker({tab = "drawing", subsection = "team", object = "held weapon", name = "color", flag = "Team_Held_Weapon_Color1", color = _Color3FromRGB(255,255,255)})
ui:createtoggle({tab = "drawing", subsection = "team", name = "distance", value = false, flag = "Team_Distance"})
ui:createcolorpicker({tab = "drawing", subsection = "team", object = "distance", name = "color", flag = "Team_Distance_Color1", color = _Color3FromRGB(255,255,255)})
ui:createtoggle({tab = "drawing", subsection = "team", name = "name", value = false, flag = "Team_Name"})
ui:createcolorpicker({tab = "drawing", subsection = "team", object = "name", name = "color", flag = "Team_Name_Color1", color = _Color3FromRGB(255,255,255)})
ui:createtoggle({tab = "drawing", subsection = "team", name = "armor", value = false, flag = "Team_Armor"})
ui:createcolorpicker({tab = "drawing", subsection = "team", object = "armor", name = "color", flag = "Team_Armor_Color1", color = _Color3FromRGB(255,255,255)})
ui:createtoggle({tab = "drawing", subsection = "team", name = "bomb", value = false, flag = "Team_Bomb"})
ui:createcolorpicker({tab = "drawing", subsection = "team", object = "bomb", name = "color", flag = "Team_Bomb_Color1", color = _Color3FromRGB(255,255,255)})
ui:createtoggle({tab = "drawing", subsection = "team", name = "cash", value = false, flag = "Team_Cash"})
ui:createcolorpicker({tab = "drawing", subsection = "team", object = "cash", name = "color", flag = "Team_Cash_Color1", color = _Color3FromRGB(255,255,255)})
ui:createtoggle({tab = "drawing", subsection = "team", name = "snap lines", value = false, flag = "Team_Snap_Lines"})
ui:createcolorpicker({tab = "drawing", subsection = "team", object = "snap lines", name = "color", flag = "Team_Snap_Lines_Color1", color = _Color3FromRGB(255,255,255)})
ui:createslider({tab = "drawing", subsection = "team", name = "snap lines transperency", suffix = "", flag = "Team_Snap_Lines_Transperency", value = 5, minimum = 1, maximum = 10, custom = {}, tooltip = ""})
ui:createtoggle({tab = "drawing", subsection = "team", name = "chamses", value = false, flag = "Team_Chamses"})
ui:createcolorpicker({tab = "drawing", subsection = "team", object = "chamses", name = "color 1", flag = "Team_Chamses_Color1", color = _Color3FromRGB(255,255,255)})
ui:createcolorpicker({tab = "drawing", subsection = "team", object = "chamses", name = "color 2", flag = "Team_Chamses_Color2", color = _Color3FromRGB(255,255,255)})
ui:createslider({tab = "drawing", subsection = "team", name = "chamses transperency 1", suffix = "", flag = "Team_Chamses_Transperency1", value = 5, minimum = 1, maximum = 10, custom = {}, tooltip = ""})
ui:createslider({tab = "drawing", subsection = "team", name = "chamses transperency 2", suffix = "", flag = "Team_Chamses_Transperency2", value = 5, minimum = 1, maximum = 10, custom = {}, tooltip = ""})
ui:createtoggle({tab = "drawing", subsection = "team", name = "skeletons", value = false, flag = "Team_Skeletons"})
ui:createcolorpicker({tab = "drawing", subsection = "team", object = "skeletons", name = "color", flag = "Team_Skeletons_Color1", color = _Color3FromRGB(255,255,255)})
ui:createslider({tab = "drawing", subsection = "settings", name = "text size", flag = "Esp_Settings_TextSize", value = 13, minimum = 8, maximum = 24})
ui:createdropdown({tab = "drawing", subsection = "settings", name = "text case", flag = "Esp_Settings_TextCase", values = {{"Normal", true}, {"UPPERCASE", false}, {"lowercase", false}}, multichoice = false})
ui:createdropdown({tab = "drawing", subsection = "settings", name = "text font", flag = "Esp_Settings_TextFont", values = {{"Plex", true}, {"Monospace", false}, {"UI", false}, {"System", false}}, multichoice = false})
ui:createslider({tab = "drawing", subsection = "settings", name = "flag text size", flag = "Esp_Settings_FlagTextSize", value = 13, minimum = 8, maximum = 24})
ui:createdropdown({tab = "drawing", subsection = "settings", name = "flag text case", flag = "Esp_Settings_FlagTextCase", values = {{"Normal", true}, {"UPPERCASE", false}, {"lowercase", false}}, multichoice = false})
ui:createdropdown({tab = "drawing", subsection = "settings", name = "flag text font", flag = "Esp_Settings_FlagTextFont", values = {{"Plex", true}, {"Monospace", false}, {"UI", false}, {"System", false}}, multichoice = false })
ui:createtoggle({tab = "drawing", subsection = "crosshair", name = "custom crosshair", value = false, flag = "Custom_Crosshair"})
ui:createcolorpicker({tab = "drawing", subsection = "crosshair", name = "custom crosshair color", object = "custom crosshair", flag = "Custom_Crosshair_Color1", color = _Color3FromRGB(255,255,255)})
ui:createtoggle({tab = "drawing", subsection = "crosshair", name = "impulse crosshair", value = false, flag = "Impulse_Crosshair"})
ui:createtoggle({tab = "drawing", subsection = "crosshair", name = "crosshair outlines", value = false, flag = "Crosshair_Outlines"})
ui:createslider({tab = "drawing", subsection = "crosshair", name = "cycle speed", flag = "Cycle_Speed", value = 2, minimum = 0, maximum = 10, custom = {}, tooltip = ""})
ui:createslider({tab = "drawing", subsection = "crosshair", name = "minimum speed", flag = "Minimum_Speed", value = 10, minimum = 0, maximum = 100, custom = {}, tooltip = ""})
ui:createslider({tab = "drawing", subsection = "crosshair", name = "maximum speed", flag = "Maximum_Speed", value = 10, minimum = 0, maximum = 100, custom = {}, tooltip = ""})
ui:createslider({tab = "drawing", subsection = "crosshair", name = "minimum length", flag = "Minimum_Length", value = 10, minimum = 0, maximum = 100, custom = {}, tooltip = ""})
ui:createslider({tab = "drawing", subsection = "crosshair", name = "maximum length", flag = "Maximum_Length", value = 10, minimum = 0, maximum = 100, custom = {}, tooltip = ""})
ui:createslider({tab = "drawing", subsection = "crosshair", name = "crosshair width", flag = "Crosshair_Width", value = 10, minimum = 0, maximum = 100, custom = {}, tooltip = ""})
ui:createslider({tab = "drawing", subsection = "crosshair", name = "crosshair length", flag = "Crosshair_Length", value = 10, minimum = 0, maximum = 100, custom = {}, tooltip = ""})
ui:createslider({tab = "drawing", subsection = "crosshair", name = "crosshair width gap", flag = "Crosshair_Width_Gap", value = 5, minimum = 0, maximum = 100, custom = {}, tooltip = ""})
ui:createslider({tab = "drawing", subsection = "crosshair", name = "crosshair length gap", flag = "Crosshair_Length_Gap", value = 5, minimum = 0, maximum = 100, custom = {}, tooltip = ""})
ui:createslider({tab = "drawing", subsection = "crosshair", name = "crosshair thickness", flag = "Crosshair_Thickness", value = 2, minimum = 1, maximum = 100, custom = {}, tooltip = ""})
ui:createslider({tab = "drawing", subsection = "crosshair", name = "crosshair rotation", flag = "Crosshair_Rotation", value = 0, minimum = 0, maximum = 360, custom = {}, tooltip = ""})
ui:createslider({tab = "drawing", subsection = "crosshair", name = "crosshair rotation speed", flag = "Crosshair_Rotation_Speed", value = 0, minimum = -360, maximum = 360, custom = {}, tooltip = ""})
ui:createtoggle({tab = "drawing", subsection = "crosshair", name = "crosshair at target", value = false, flag = "Crosshair_At_Target"})
ui:createtoggle({tab = "drawing", subsection = "crosshair", name = "crosshair out of view", value = true, flag = "Crosshair_OutOfView"})
ui:createslider({
tab = "drawing",
subsection = "crosshair",
name = "crosshair smoothness",
flag = "Crosshair_Smoothness",
value = 8,
minimum = 1,
maximum = 30,
custom = {},
tooltip = ""
})
ui:createslider({
tab = "drawing",
subsection = "crosshair",
name = "crosshair edge offset",
flag = "Crosshair_Edge_Offset",
value = 20,
minimum = 0,
maximum = 200,
custom = {},
tooltip = ""
})
ui:createslider({
tab = "drawing",
subsection = "crosshair",
name = "crosshair outline size",
flag = "Crosshair_Outline_Size",
value = 2,
minimum = 0,
maximum = 20,
custom = {},
tooltip = ""
})
ui:createslider({
tab = "drawing",
subsection = "crosshair",
name = "crosshair outline offset",
flag = "Crosshair_Outline_Offset",
value = 1,
minimum = 0,
maximum = 10,
custom = {},
tooltip = ""
})
end
do -- visuals
ui:createtoggle({tab = "visuals", subsection = "local chamses", name = "weapon chamses", flag = "Model_Changer_Weapon", value = false})
ui:createcolorpicker({tab = "visuals", subsection = "local chamses", object = "weapon chamses", name = "Color", flag = "Model_Changer_Color", color = _Color3FromRGB(255,255,255)})
ui:createdropdown({tab = "visuals", subsection = "local chamses", name = "weapon chamses material", flag = "Model_Changer_Material", values = {{"Ghost", true}, {"Flat", false}, {"Custom", false}, {"Reflective", false}, {"Metallic", false}}, multichoice = false})
ui:createdropdown({tab = "visuals", subsection = "local chamses", name = "weapon chamses texture", flag = "Model_Changer_Texture", values = forcefieldAnimationsDropDown, multichoice = false})
ui:createslider({tab = "visuals", subsection = "local chamses", name = "weapon transparency", flag = "Model_Changer_Transperency", value = 1, minimum = 0, maximum = 100})
ui:createslider({tab = "visuals", subsection = "local chamses", name = "weapon reflectance", flag = "Model_Changer_Reflectance", value = 1, minimum = 0, maximum = 100})
ui:createtoggle({tab = "visuals", subsection = "local chamses", name = "arms changer", flag = "Arms_Changer", value = false})
ui:createcolorpicker({tab = "visuals", subsection = "local chamses", object = "arms changer", name = "Color 1", flag = "Arms_Changer_Color1", color = _Color3FromRGB(255,255,255)})
ui:createcolorpicker({tab = "visuals", subsection = "local chamses", object = "arms changer", name = "Color 2", flag = "Arms_Changer_Color2", color = _Color3FromRGB(255,255,255)})
ui:createdropdown({tab = "visuals", subsection = "local chamses", name = "arms changer material", flag = "Arms_Changer_Material", values = {{"Ghost", true}, {"Flat", false}, {"Custom", false}, {"Reflective", false}, {"Metallic", false}}, multichoice = false})
ui:createdropdown({tab = "visuals", subsection = "local chamses", name = "arms texture", flag = "Arms_Changer_Texture", values = forcefieldAnimationsDropDown, multichoice = false})
ui:createslider({tab = "visuals", subsection = "local chamses", name = "arms transparency", flag = "Arms_Transparency1", value = 1, minimum = 0, maximum = 100})
ui:createslider({tab = "visuals", subsection = "local chamses", name = "sleeve transparency", flag = "Arms_Transparency2", value = 1, minimum = 0, maximum = 100})
ui:createslider({tab = "visuals", subsection = "local chamses", name = "arms reflectance", flag = "Arms_Reflective", value = 1, minimum = 0, maximum = 100})
ui:createslider({tab = "visuals", subsection = "local chamses", name = "sleeve reflectance", flag = "Arms_Reflective_Sleeve", value = 1, minimum = 0, maximum = 100})
ui:createtoggle({tab = "visuals", subsection = "local chamses", name = "character chamses", flag = "Local_Chams", value = false})
ui:createcolorpicker({tab = "visuals", subsection = "local chamses", object = "character chamses", name = "Color", flag = "Local_Chams_Color", color = _Color3FromRGB(255,255,255)})
ui:createdropdown({tab = "visuals", subsection = "local chamses", name = "character chamses material", flag = "Local_Chams_Material", values = {{"Ghost", true}, {"Flat", false}, {"Custom", false}, {"Reflective", false}, {"Metallic", false}}, multichoice = false})
ui:createdropdown({tab = "visuals", subsection = "local chamses", name = "character texture", flag = "Local_Chams_Texture", values = forcefieldAnimationsDropDown, multichoice = false})
ui:createslider({tab = "visuals", subsection = "local chamses", name = "character transparency", flag = "Local_Chams_Transparency", value = 1, minimum = 0, maximum = 100})
-- atmosphere
ui:createtoggle({tab = "visuals", subsection = "atmosphere", name = "ambience", value = false, flag = "Ambience_Enabled"})
ui:createcolorpicker({tab = "visuals", subsection = "atmosphere", object = "ambience", name = "Color", flag = "Ambience_Color", color = _Color3FromRGB(255,255,255)})
ui:createtoggle({tab = "visuals", subsection = "atmosphere", name = "force time", value = false, flag = "Force_Time"})
ui:createslider({tab = "visuals", subsection = "atmosphere", name = "time", flag = "Force_TimeValue", value = 1, minimum = 0, maximum = 24})
ui:createtoggle({tab = "visuals", subsection = "atmosphere", name = "custom saturation", value = false, flag = "Custom_Saturation"})
ui:createcolorpicker({tab = "visuals", subsection = "atmosphere", object = "custom saturation", name = "Color", flag = "Custom_SaturationColor", color = _Color3FromRGB(255,255,255)})
ui:createslider({tab = "visuals", subsection = "atmosphere", name = "modifier", flag = "Custom_SaturationValue", value = 0, minimum = 0, maximum = 100})
ui:createtoggle({tab = "visuals", subsection = "atmosphere", name = "custom bloom", value = false, flag = "Custom_Bloom"})
ui:createslider({tab = "visuals", subsection = "atmosphere", name = "intensity", flag = "Custom_BloomIntensity", value = 0, minimum = 0, maximum = 100})
ui:createslider({tab = "visuals", subsection = "atmosphere", name = "size", flag = "Custom_BloomSize", value = 0, minimum = 0, maximum = 100})
ui:createslider({tab = "visuals", subsection = "atmosphere", name = "threshold", flag = "Custom_BloomThreshold", value = 0, minimum = 0, maximum = 100})
ui:createtoggle({tab = "visuals", subsection = "atmosphere", name = "custom atmosphere", value = false, flag = "Custom_Atmosphere"})
ui:createcolorpicker({tab = "visuals", subsection = "atmosphere", object = "custom atmosphere", name = "Color", flag = "Atmosphere_Color1", color = _Color3FromRGB(255,255,255)})
ui:createcolorpicker({tab = "visuals", subsection = "atmosphere", object = "custom atmosphere", name = "Color 2", flag = "Atmosphere_Color2", color = _Color3FromRGB(255,255,255)})
ui:createslider({tab = "visuals", subsection = "atmosphere", name = "density", flag = "Custom_AtmosphereDensity", value = 0, minimum = 0, maximum = 100})
ui:createslider({tab = "visuals", subsection = "atmosphere", name = "glaze", flag = "Custom_AtmosphereGlare", value = 0, minimum = 0, maximum = 100})
ui:createslider({tab = "visuals", subsection = "atmosphere", name = "haze", flag = "Custom_AtmosphereHaze", value = 0, minimum = 0, maximum = 100})
ui:createtoggle({tab = "visuals", subsection = "atmosphere", name = "custom brightness", value = false, flag = "Custom_Brightness"})
ui:createdropdown({tab = "visuals", subsection = "atmosphere", name = "brightness mode", flag = "Custom_Brightness_Mode", values = {{"Fullbright", true}, {"Nightmode", false}}, multichoice = false})
-- other
ui:createtoggle({tab = "visuals", subsection = "other", name = "custom character", flag = "Custom_Character", value = false, tooltip = "Applies chams effect to enemies"})
ui:createdropdown({
tab = "visuals",
subsection = "other",
name = "character",
flag = "Custom_Character_Value",
values = (function()
local tbl = {}
_TableInsert(tbl, {"Custom", true})
for i, v in next, AllCharacters do
_TableInsert(tbl, {v, false})
end
return tbl
end)(),
multichoice = false
})
ui:createtextbox({tab = "visuals", subsection = "other", text = "1831554653", flag = "Character_Changer_Value_Custom"})
ui:createtoggle({tab = "visuals", subsection = "other", name = "flying accessory", flag = "Accessory_Enabled", value = false, tooltip = "Applies chams effect to enemies"})
ui:createslider({tab = "visuals", subsection = "other", name = "distance", flag = "Accessory_Distance", value = 6, minimum = 0, maximum = 100})
ui:createslider({tab = "visuals", subsection = "other", name = "height", flag = "Accessory_Height", value = 0, minimum = 0, maximum = 100})
ui:createtoggle({tab = "visuals", subsection = "other", name = "spin it self", flag = "Accessory_Spin_ItSelf", value = false})
ui:createslider({tab = "visuals", subsection = "other", name = "spin speed", flag = "Accessory_Spin_Speed", value = 144, minimum = 0, maximum = 360})
ui:createslider({tab = "visuals", subsection = "other", name = "rotation speed", flag = "Accessory_Rotation_Speed", value = 144, minimum = 0, maximum = 360})
ui:createtextbox({tab = "visuals", subsection = "other", text = "17899556174", flag = "Accessory_ID"})
ui:createtoggle({tab = "visuals", subsection = "other", name = "highlight", flag = "Accessory_Highlight_Enabled", value = false})
ui:createcolorpicker({tab = "visuals", subsection = "other", object = "highlight", name = "Fill Color", flag = "Accessory_Highlight_FillColor", color = _Color3FromRGB(255,255,255)})
ui:createcolorpicker({tab = "visuals", subsection = "other", object = "highlight", name = "Outline Color", flag = "Accessory_Highlight_OutlineColor", color = _Color3FromRGB(255,255,255)})
ui:createslider({tab = "visuals", subsection = "other", name = "fill transparency", flag = "Accessory_Highlight_FillTransparency", value = 5, minimum = 1, maximum = 10})
ui:createslider({tab = "visuals", subsection = "other", name = "outline transparency", flag = "Accessory_Highlight_OutlineTransparency", value = 5, minimum = 1, maximum = 10})
ui:createtoggle({tab = "visuals", subsection = "other", name = "trail", flag = "Trail_Enabled", value = false})
ui:createcolorpicker({tab = "visuals", subsection = "other", object = "trail", name = "trail color", flag = "Trail_Color", color = _Color3FromRGB(255,255,255)})
ui:createslider({tab = "visuals", subsection = "other", name = "max size", flag = "Trail_MaxSize", value = 50, minimum = 1, maximum = 500})
ui:createslider({tab = "visuals", subsection = "other", name = "life time", flag = "Trail_LifeTime", value = 5, minimum = 1, maximum = 10})
-- tracers
ui:createdropdown({
tab = "visuals",
subsection = "tracers",
name = "texture",
flag = "BulletTracerTexture",
values = (function()
local tbl = {}
for i, _ in next, Cache.TracerTextures do
_TableInsert(tbl, {i, #tbl + 1 == 3})
end
return tbl
end)(),
multichoice = false
})
-- tracers
ui:createtoggle({tab = "visuals", subsection = "tracers", name = "bullet tracer", value = false, flag = "BulletTracerEnabled"})
ui:createcolorpicker({tab = "visuals", subsection = "tracers", object = "bullet tracer", name = "color", flag = "BulletTracerColor", color = _Color3FromRGB(255,0,0)})
ui:createtoggle({tab = "visuals", subsection = "tracers", name = "second beam", value = false, flag = "BulletTracerSecondBeam"})
ui:createcolorpicker({tab = "visuals", subsection = "tracers", object = "second beam", name = "color", flag = "BulletTracerSecondBeamColor", color = _Color3FromRGB(255,255,255)})
ui:createslider({tab = "visuals", subsection = "tracers", name = "transperency", flag = "BulletTracerTransperency", value = 0, minimum = 0, maximum = 10})
ui:createslider({tab = "visuals", subsection = "tracers", name = "life time", flag = "BulletTracerLifetime", value = 2, minimum = 0, maximum = 10})
ui:createslider({tab = "visuals", subsection = "tracers", name = "fade time", flag = "BulletTracerFadetime", value = 2, minimum = 0, maximum = 10})
ui:createdropdown({
tab = "visuals",
subsection = "tracers",
name = "fading method",
flag = "BulletTracerFadeMethod",
values = {{"Horizontal collapse", true}, {"Vertical collapse", false}},
multichoice = false
})
ui:createslider({tab = "visuals", subsection = "tracers", name = "width", flag = "BulletTracerWidth", value = 2, minimum = 0.1, maximum = 50})
ui:createslider({tab = "visuals", subsection = "tracers", name = "brightness", flag = "BulletTracerBrightness", value = 1, minimum = 1, maximum = 10})
ui:createslider({tab = "visuals", subsection = "tracers", name = "light emission", flag = "BulletTracerLightEmission", value = 1, minimum = 0, maximum = 10 })
ui:createslider({tab = "visuals", subsection = "tracers", name = "light influence", flag = "BulletTracerLightInfluence", value = 0, minimum = 0, maximum = 10 })
ui:createslider({tab = "visuals", subsection = "tracers", name = "texture speed", flag = "BulletTracerTextureSpeed", value = 1, minimum = 1, maximum = 5})
ui:createslider({tab = "visuals", subsection = "tracers", name = "texture length", flag = "BulletTracerTextureLength", value = 1, minimum = 1, maximum = 10})
ui:createtoggle({tab = "visuals", subsection = "tracers", name = "face camera", value = true, flag = "BulletTracerFaceCamera"})
ui:createtoggle({tab="visuals",subsection="tracers",name="bullet impact",value=false,flag="BulletImpactEnabled"})
ui:createcolorpicker({tab="visuals",subsection="tracers",object="bullet impact",name="color",flag="BulletImpactColor",color=_Color3FromRGB(255,255,255)})
ui:createslider({tab="visuals",subsection="tracers",name="transparency",flag="BulletImpactTransparency",value=0,minimum=0,maximum=10})
ui:createslider({tab="visuals",subsection="tracers",name="size",flag="BulletImpactSize",value=1,minimum=0.1,maximum=10})
ui:createslider({tab="visuals",subsection="tracers",name="impact life time",flag="BulletImpactLifetime",value=2,minimum=0,maximum=10})
ui:createdropdown({
tab="visuals",
subsection="tracers",
name="material",
flag="BulletImpactMaterial",
values={{"Neon",false},{"Glass",false},{"SmoothPlastic",false},{"ForceField",true}},
multichoice=false
})
ui:createtoggle({tab = "visuals", subsection = "tracers", name = "hit effects", value = false, flag = "HitEffectsEnabled"})
ui:createtoggle({tab = "visuals", subsection = "tracers", name = "firework", value = false, flag = "HitEffects_Firework"})
ui:createtoggle({tab = "visuals", subsection = "tracers", name = "blinding", value = false, flag = "HitEffects_Blinding"})
end
do -- сfg
ui:createtextbox({tab = "config", subsection = "other", text = "preset name", flag = "configname"})
local newList = ui.getconfigs()
for i, v in next, newList do
ui.flags.configname:setvalue(v[1])
break
end
ui:createdropdown({tab = "config", subsection = "other", name = "preset", flag = "configselection", values = newList, multichoice = false})
ui:createbutton({tab = "config", subsection = "other", name = "save preset", flag = "saveconfig", confirmation = true})
ui:createbutton({tab = "config", subsection = "other", name = "load preset", flag = "loadconfig", confirmation = true})
ui:createbutton({tab = "config", subsection = "other", name = "delete preset", flag = "deleteconfig", confirmation = true})
ui:createtoggle({tab = "config", subsection = "ui", name = "key binds", value = false, flag = "keybinds"})
ui:createslider({tab = "config", subsection = "ui", name = "key binds horizonatal offset", flag = "keybindoffsetx", value = 0, minimum = 0, maximum = 4096})
ui:createslider({tab = "config", subsection = "ui", name = "key binds vertical offset", flag = "keybindoffsety", value = 256, minimum = 0, maximum = 4096})
ui:createtoggle({tab = "config", subsection = "ui", name = "water mark", value = true, flag = "watermark"})
ui:createtextbox({tab = "config", subsection = "ui", text = "vader", flag = "wmtext1"})
ui:createtextbox({tab = "config", subsection = "ui", text = "paste", flag = "wmtext2"})
ui:createtoggle({tab = "config", subsection = "ui", name = "ui accent", value = false, flag = "uiaccent"})
ui:createcolorpicker({tab = "config", subsection = "ui", object = "ui accent", name = "accent", flag = "uiaccentcolor", color = ui.accent})
for groupName, group in next, ui.colorGroups do
ui:createtoggle({tab = "config", subsection = "ui", name = "ui color " .. groupName, value = false, flag = "uicolor" .. groupName})
ui:createcolorpicker({tab = "config", subsection = "ui", object = "ui color " .. groupName, name = "color " .. groupName, flag = "uicolorpicker" .. groupName, color = ui.startingParameters.colors[groupName]})
end
ui:createbutton({tab = "config", subsection = "ui", name = "reset ui layout", flag = "resetuilayout", confirmation = true})
ui:createbutton({tab = "config", subsection = "extra", name = "rejoin", flag = "rejoin", confirmation = true})
ui:createbutton({tab = "config", subsection = "extra", name = "join a new game", flag = "joinnewgame", confirmation = true})
ui:createbutton({tab = "config", subsection = "extra", name = "set clipboard game id", flag = "clipboardgameid", confirmation = true})
ui:createbutton({tab = "config", subsection = "extra", name = "set clipboard teleport code", flag = "clipboardtpcode", confirmation = true})
ui:createbutton({tab = "config", subsection = "extra", name = "set clipboard join code", flag = "clipboardjoincode", confirmation = true})
end
end
do
local function resetConfigs()
local oldThis = ui.elements["config"]["other"]["preset"]
local oldHolderPos = oldThis.holder.position
local oldValues = ui.flags.configselection.value
local lastSelection
for i, v in next, oldValues do
if v then
lastSelection = i
end
end
oldThis.holder.visible = false
ui.elements["config"]["other"]["preset"] = nil
local newList = ui.getconfigs()
local setNew = false
for i, v in next, newList do
if lastSelection == v[1] then
setNew = true
break
end
end
if setNew then
for i, v in next, newList do
if lastSelection == v[1] then
ui.flags.configname:setvalue(v[1])
v[2] = true
else
v[2] = false
end
end
end
ui:createdropdown({tab = "config", subsection = "other", name = "preset", flag = "configselection", values = newList, multichoice = false})
ui.elements["config"]["other"]["preset"].holder.position = oldHolderPos
ui.flags.configselection.changed:Connect(function()
local selected
for i, v in next, (ui.flags.configselection.value) do
if v then
selected = i
end
end
if not selected then return end
ui.flags.configname:setvalue(selected)
end)
ui:updatemenuanimations()
end
ui.flags.configselection.changed:Connect(function()
local selected
for i, v in next, (ui.flags.configselection.value) do
if v then
selected = i
end
end
if not selected then return end
ui.flags.configname:setvalue(selected)
end)
ui.flags.saveconfig.pressed:Connect(function()
writefile(cheat_path .. "/" .. game_path .. "/" .. config_path .. "/" .. ui.flags.configname.value .. ".cfg", ui:savestate())
ui:createnotification({text = "saved " .. ui.flags.configname.value .. ".cfg", lifetime = 5, priority = 0})
resetConfigs()
end)
ui.flags.deleteconfig.pressed:Connect(function()
local ConfigPath = cheat_path .. "/" .. game_path .. "/" .. config_path .. "/" .. ui.flags.configname.value .. ".cfg"
if isfile(ConfigPath) then
delfile(ConfigPath)
ui:createnotification({text = "deleted " .. ui.flags.configname.value .. ".cfg", lifetime = 5, priority = 0})
end
resetConfigs()
end)
ui.flags.loadconfig.pressed:Connect(function()
local ConfigPath = cheat_path .. "/" .. game_path .. "/" .. config_path .. "/" .. ui.flags.configname.value .. ".cfg"
if isfile(ConfigPath) then
ui:loadstate(readfile(ConfigPath))
ui:createnotification({text = "loaded " .. ui.flags.configname.value .. ".cfg", lifetime = 5, priority = 0})
end
resetConfigs()
end)
_CoroutineWrap(function()
repeat
_TaskWait()
until getgenv().pasted and getgenv().pasted.loaded
_TaskWait()
if isfile(cheat_path .. "/" .. game_path .. "/" .. config_path .. "/" .. "default.cfg") then
ui:loadstate(readfile(cheat_path .. "/" .. game_path .. "/" .. config_path .. "/" .. "default.cfg"))
ui:createnotification({text = "auto-loaded defualt.cfg", lifetime = 5, priority = 0})
end
writefile(cheat_path .. "/" .. game_path .. "/" .. config_path .. "/" .. "reset" .. ".cfg", ui:savestate())
resetConfigs()
end)()
end
do
ui.flags.uiaccent.changed:Connect(function()
ui.updateaccent()
end)
ui.flags.uiaccentcolor.changed:Connect(function()
ui.updateaccent()
end)
for i, v in next, ui.startingParameters.colors do
ui.flags["uicolor" .. i].changed:Connect(function()
ui.updatecolors[i]()
end)
ui.flags["uicolorpicker" .. i].changed:Connect(function()
ui.updatecolors[i]()
end)
end
end
do
ui.flags.rejoin.pressed:Connect(function()
ui:createnotification({text = "rejoining...", lifetime = 5, priority = 0})
_GetService(game, "TeleportService"):TeleportToPlaceInstance(game.PlaceId, game.JobId)
end)
ui.flags.joinnewgame.pressed:Connect(function()
ui:createnotification({text = "joining a new game...", lifetime = 5, priority = 0})
local thing = HttpService:JSONDecode(_HttpGet(game, "https://games.roblox.com/v1/games/" .. game.PlaceId .. "/servers/Public?sortOrder=Asc&limit=100"))
local jobid = thing.data[_MathRandom(1, table.getn(thing.data))].id
_GetService(game, "TeleportService"):TeleportToPlaceInstance(game.PlaceId, jobid)
end)
ui.flags.clipboardgameid.pressed:Connect(function()
ui:createnotification({text = "set job id to clipboard!", lifetime = 5, priority = 0})
setclipboard(game.JobId)
end)
ui.flags.clipboardtpcode.pressed:Connect(function()
ui:createnotification({text = "set job id to clipboard!", lifetime = 5, priority = 0})
setclipboard('game:GetService("TeleportService"):TeleportToPlaceInstance('..game.PlaceId..',"'..game.JobId..'")')
end)
ui.flags.clipboardjoincode.pressed:Connect(function()
ui:createnotification({text = "set job id to clipboard!", lifetime = 5, priority = 0})
setclipboard('Roblox.GameLauncher.joinGameInstance('..game.PlaceId..',"'..game.JobId..'")')
end)
end
do
if oldWatermark == true then
local this = {}
this.container = utilities:draw("frame", {
parent = utilities.base,
anchorpoint = _Vector2New(1, 0),
size = _UDim2New(0, 100, 0, 100),
position = _UDim2New(32, 0, 32, 0),
zindex = ui.basezindex + -4,
color = _Color3New(0.0862745, 0.0862745, 0.0862745),
visible = false,
thickness = 1,
transparency = 1,
filled = true,
name = "okay",
})
this.outline1 = utilities:draw("frame", {
parent = this.container,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = ui.basezindex + 5,
color = _Color3New(0.262745, 0.262745, 0.262745),
visible = true,
thickness = 1,
filled = false,
name = "okay",
})
this.outline2 = utilities:draw("frame", {
parent = this.containeroutline,
anchorpoint = _Vector2New(0.5, 0.5),
size = _UDim2New(1, 2, 1, 2),
position = _UDim2New(0.5, 0, 0.5, 0),
zindex = ui.basezindex + 4,
color = _Color3New(0.0862745, 0.0862745, 0.0862745),
visible = true,
thickness = 1,
filled = false,
name = "okay",
})
local textobjs = 42
this.textObject = {}
for i = 1, textobjs do
this.textObject[i] = utilities:draw("text", {
parent = this.container,
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 8 + ((i - 1) * 7), 0, 6),
zindex = ui.basezindex + -4,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
text = " ",
name = "okay",
})
end
local statss = {
framespersec = 0,
memusage = _MathFloor(Stats:GetTotalMemoryUsageMb()),
instancecount = Stats.InstanceCount,
}
RunService.RenderStepped:Connect(function()
statss.framespersec = statss.framespersec + 1
end)
local lastthing = _Tick()
local lastcolor = _Tick()
local wmtext = ""
local textthing = {}
local hue = 0
local months = {"Jan.","Feb.","Mar.","Apr.","May","Jun.","Jul.","Aug.","Sep.","Oct.","Nov.","Dec."}
local daysinmonth = {31,28,31,30,31,30,31,31,30,31,30,31}
local function getDate()
local time = _OsTime()
local year = _MathFloor(time/60/60/24/365.25+1970)
local day = math.ceil(time/60/60/24%365.25)
local month
for i=1, #daysinmonth do
if day > daysinmonth[i] then
day = day - daysinmonth[i]
else
month = i
break
end
end
return month, day, year
end
local wtf = _Tick()
RunService.RenderStepped:Connect(function(dt)
local result = ui.startWatermark and ui.flags.watermark and ui.flags.watermark.value or false
if this.container.visible ~= result then
this.container.visible = result
end
if this.container.visible == false then return end
local gayresult = _UDim2New(1, -100, 0, 42)
if this.container.position ~= gayresult then
this.container.position = gayresult
end
hue = hue + (dt * 5) -- el speed$$
if _Tick() - lastthing > 1 then -- optimized$$$$$
local seconds = _OsDate("*t") ["sec"]
local minutes = _OsDate("*t") ["min"]
local hours = _OsDate("*t") ["hour"]
if _tonumber(seconds) <= 9 then
seconds = "0"..seconds
end
if _tonumber(minutes) <= 9 then
minutes = "0"..minutes
end
if _tonumber(hours) <= 9 then
hours = "0"..hours
end
lastthing = _Tick()
statss.memusage = _MathFloor(Stats:GetTotalMemoryUsageMb())
statss.instancecount = Stats.InstanceCount
local month, day, year = getDate()
wmtext = "[ " .. ui.flags.wmtext1.value .. ui.flags.wmtext2.value .. " ] BETA" .. " | " .. _tostring(months[month]) .. " " .. _tostring(day) .. " " .. _tostring(year)
statss.framespersec = 0
this.container.size = _UDim2New(0, (#wmtext * 7) + 16, 0, 26)
textthing = wmtext:split("")
for i = 1, textobjs do
local v = this.textObject[i]
local addhue = 0
if not textthing[i] then
v.Drawingobject.Text = ""
else
if i >= 6 + #ui.flags.wmtext1.value + #ui.flags.wmtext2.value and i <= 10 + #ui.flags.wmtext1.value + #ui.flags.wmtext2.value then
addhue = addhue + 10 -- now add a bit for the next fucken character
v.Drawingobject.Color = _Color3FromHSV(((addhue + hue / 60) + (i / 60)) % 1, 0.58, 1) -- fully saturated made it look pasted so i toned that down a notch
elseif i >= 3 + #ui.flags.wmtext1.value and i <= 3 + #ui.flags.wmtext1.value + #ui.flags.wmtext2.value then
--v.Drawingobject.Color = _Color3FromRGB(191, 255, 107)
v.Drawingobject.Color = ui.accent
else
v.Drawingobject.Color = _Color3New(1, 1, 1)
end
v.Drawingobject.Text = textthing[i]
end
end
return
end
textthing = wmtext:split("")
if _Tick() - wtf > 1/19 then
wtf = _Tick()
for i = 1, textobjs do
local v = this.textObject[i]
local addhue = 0
if not textthing[i] then
v.Drawingobject.Text = ""
else
if i >= 6 + #ui.flags.wmtext1.value + #ui.flags.wmtext2.value and i <= 10 + #ui.flags.wmtext1.value + #ui.flags.wmtext2.value then
addhue = addhue + 10 -- now add a bit for the next fucken character
v.Drawingobject.Color = _Color3FromHSV(((addhue + hue / 60) + (i / 60)) % 1, 0.58, 1) -- fully saturated made it look pasted so i toned that down a notch
elseif i >= 3 + #ui.flags.wmtext1.value and i <= 3 + #ui.flags.wmtext1.value + #ui.flags.wmtext2.value then
--v.Drawingobject.Color = _Color3FromRGB(191, 255, 107)
v.Drawingobject.Color = ui.accent
else
v.Drawingobject.Color = _Color3New(1, 1, 1)
end
v.Drawingobject.Text = textthing[i]
end
end
end
end)
else
ui.objects.watermarkback = utilities:draw("frame", {
parent = utilities.base,
anchorpoint = _Vector2New(1, 0),
size = _UDim2New(0, 420, 0, 28),
position = _UDim2New(1, 0, 0, 92),
zindex = ui.basezindex + -5,
color = _Color3FromRGB(46, 46, 46),
visible = false,
thickness = 0,
filled = true,
name = "okay",
})
ui.startWatermark = false
ui.objects.watermarktextobjects = {}
local textobjs = 56
for i = 1, textobjs do
ui.objects.watermarktextobjects[i] = utilities:draw("text", {
parent = ui.objects.watermarkback,
anchorpoint = _Vector2New(0, 0.5),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, 8 + ((i - 1) * 7), 0.5, 0),
zindex = ui.basezindex + -4,
color = _Color3FromRGB(255, 255, 255),
visible = true,
outline = false,
text = " ",
name = "okay",
})
end
local statss = {
framespersec = 0,
memusage = _MathFloor(Stats:GetTotalMemoryUsageMb()),
instancecount = Stats.InstanceCount,
}
RunService.RenderStepped:Connect(function()
statss.framespersec = statss.framespersec + 1
end)
local lastthing = _Tick()
local lastcolor = _Tick()
local wmtext = ""
local textthing = ""
local hue = 0
RunService.RenderStepped:Connect(function(dt)
local result = ui.startWatermark and ui.flags.watermark and ui.flags.watermark.value or false
if ui.objects.watermarkback.visible ~= result then
ui.objects.watermarkback.visible = result
end
if ui.objects.watermarkback.visible == false then return end
local gayresult = _UDim2New(1, 0, 0, ui.flags.watermarkoffset and ui.flags.watermarkoffset.value or 256)
if ui.objects.watermarkback.position ~= gayresult then
ui.objects.watermarkback.position = gayresult
end
if _Tick() - lastthing > 1 then -- optimized$$$$$
lastthing = _Tick()
statss.memusage = _MathFloor(Stats:GetTotalMemoryUsageMb())
statss.instancecount = Stats.InstanceCount
wmtext = "vaderhaxx paste" .. " | " .. statss.framespersec .. " fps | " .. statss.memusage .. " mb | " .. statss.instancecount .. " objects"
statss.framespersec = 0
end
hue = hue + (dt * 20) -- el speed$$
textthing = wmtext:split("")
end)
local addhue = 0
for i = 1, textobjs do
local v = ui.objects.watermarktextobjects[i]
local thislast = _Tick()
addhue = addhue + 1/360 -- now add a bit for the next fucken character
RunService.Stepped:Connect(function(u, dt)
if _Tick() - thislast < 1/20 then
return
end
thislast = _Tick()
if not textthing[i] then
v.Drawingobject.Text = ""
return
end
v.Drawingobject.Color = _Color3FromHSV(((addhue + hue / 60) + (i / 60)) % 1, 0.58, 1) -- fully saturated made it look pasted so i toned that down a notch
v.Drawingobject.Text = textthing[i]
end)
end
end
end
do
-- resizing function
ui.objects.resizedetection.clicked:Connect(function()
if not ui.uiopen then return end
local connection connection = RunService.RenderStepped:Connect(function()
if not ui.objects.resizedetection.holding then
connection:Disconnect()
connection = nil
return
end
local final = _Vector2New(utilities.mouse.position.x - ui.objects.backborder.absoluteposition.x, utilities.mouse.position.y - ui.objects.backborder.absoluteposition.y)
ui:setsize(final)
end)
end)
ui.flags.resetuilayout.pressed:Connect(function()
for tab, columns in next, ui.subsections do
if tab ~= "players" then
for column, panels in next, columns do
for panel, data in next, panels do
data.panelReposition.resetSide()
end
end
end
end
for tab, columns in next, ui.subsections do
if tab ~= "players" then
for column, panels in next, columns do
for panel, data in next, panels do
data.panelReposition.resetPosition()
end
end
end
end
for tab, columns in next, ui.subsections do
if tab ~= "players" then
for column, panels in next, columns do
for panel, data in next, panels do
data.panelResize.resetSize()
end
end
end
end
end)
end
do
-- dragging function
ui.objects.dragdetection.clicked:Connect(function()
local relative = utilities.mouse.position - ui.objects.dragdetection.absoluteposition
local connection connection = RunService.RenderStepped:Connect(function()
if not ui.objects.dragdetection.holding then
connection:Disconnect()
connection = nil
return
end
local result = _Vector2New(Mouse.x, Mouse.y + 36) - relative
ui.objects.backborder.position = _UDim2New(result.x / camera.ViewportSize.x, 0, result.y / camera.ViewportSize.y, 0)
end)
end)
end
ui:updatemenuanimations()
end
local keybindsui
do
do
local started = uilibrary:start({
size = _Vector2New(200, 64),
name = "vaderhaxx paste",
basezindex = 10000,
accent = _Color3FromRGB(255, 200, 69),
colors = {
a = _Color3FromRGB(0, 0, 0),
b = _Color3FromRGB(56, 56, 56),
c = _Color3FromRGB(46, 46, 46),
d = _Color3FromRGB(12, 12, 12),
e = _Color3FromRGB(21, 21, 21),
f = _Color3FromRGB(84, 84, 84),
g = _Color3FromRGB(54, 54, 54),
},
tabs = {
"keybinds",
}
})
keybindsui = started
end
do
keybindsui.objects.backborder.position = _UDim2New(0, 0, 0.5, 0)
local keybinders = {}
for i, v in next, ui.flags do
if v.type == "keybind" then
keybinders[1 + #keybinders] = v
end
end
local keytexts = {}
for i = 1, #keybinders do
local txt = utilities:draw("text", {
parent = keybindsui.tabs["keybinds"],
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, -8, 0, ((i - 1) * 18) -12),
zindex = keybindsui.tabs["keybinds"].zindex + 1,
color = _Color3FromRGB(255, 255, 255),
visible = false,
outline = false,
text = "",
name = "okay",
})
keytexts[i] = txt
end
local function singlekeybindupdate()
local currentkeys = {}
for i2, v2 in next, keybinders do
if v2.value == true then
local parentthatleft = v2.parentflag
if ui.flags[parentthatleft].value == true then
currentkeys[1 + #currentkeys] = v2
end
end
end
local FUCKYOU = _Vector2New(200, 64)
for i2, v2 in next, keytexts do
v2.visible = false
end
for i2, v2 in next, currentkeys do
local keynig = v2.key
local keyastext = "NONE"
if keynig and keynig ~= "NONE" then
keyastext = _StringSub(_StringUpper(keynig:sub(14)), 1, 5)
end
local thingtoshow = ""
if v2.object == "enabled" then
thingtoshow = v2.section .. ":" .. v2.activation
else
thingtoshow = v2.object .. ":" .. v2.activation
end
keytexts[i2].text = "[ " .. keyastext .. " ] " .. thingtoshow
keytexts[i2].visible = true
local xbound = keytexts[i2].absolutesize.x + 64 -- ????????????????????? bitch??
FUCKYOU = FUCKYOU + _Vector2New(xbound > FUCKYOU.x and xbound - FUCKYOU.x or 0, 18)
end
keybindsui:setsize(FUCKYOU)
end
local oldcreatekeybind = ui.createkeybind
ui.createkeybind = function(self, ...)
local arg = {...}
local param = arg[1]
local func = oldcreatekeybind(self, ...)
local flagRef = ui.flags[param.flag]
flagRef.changed:Connect(function()
singlekeybindupdate()
end)
ui.flags[flagRef.parentflag].changed:Connect(function()
singlekeybindupdate()
end)
keybinders[1 + #keybinders] = flagRef
local txt = utilities:draw("text", {
parent = keybindsui.tabs["keybinds"],
anchorpoint = _Vector2New(0, 0),
size = 13, -- x3
font = Drawing.Fonts.Plex,
position = _UDim2New(0, -8, 0, ((#keytexts - 1) * 18) -12),
zindex = keybindsui.tabs["keybinds"].zindex + 1,
color = _Color3FromRGB(255, 255, 255),
visible = false,
outline = false,
text = "",
name = "okay",
})
keytexts[1 + #keytexts] = txt
return func
end
for i, v in next, keybinders do
v.changed:Connect(function()
singlekeybindupdate()
end)
ui.flags[v.parentflag].changed:Connect(function()
singlekeybindupdate()
end)
end
singlekeybindupdate()
keybindsui.objects.backborder.visible = false
ui.flags.keybinds.changed:Connect(function()
keybindsui.objects.backborder.visible = ui.flags.keybinds.value
singlekeybindupdate()
end)
end
end
do
ui.oldaccent = ui.accent
ui.updatecolors = {}
local savedColors = {}
for i, v in next, ui.startingParameters.colors do
savedColors[i] = v
end
for i, v in next, ui.startingParameters.colors do
ui.updatecolors[i] = function()
local targetColor = ui.flags["uicolor" .. i].value and ui.flags["uicolorpicker" .. i].color or savedColors[i]
for k, menuObject in next, {ui, keybindsui} do
for i, v in next, menuObject.colorGroups[i] do
v.color = targetColor
end
end
ui.startingParameters.colors[i] = targetColor
end
end
ui.updateaccent = function()
if ui.flags.uiaccent.value then
ui.accent = ui.flags.uiaccentcolor.color
else
ui.accent = ui.oldaccent
end
for k, menuObject in next, {ui, keybindsui} do
for i, v in next, (menuObject.accents) do
if v.color then -- this is an object, not a table
v.color = ui.accent
else
if v[2] == "tabs" or v[2] == "sliders" then
if v[2] == "tabs" then
for i2, v2 in next, (v[1]) do
v2.color = ui.accent:lerp(_Color3FromRGB(_MathClamp((ui.accent.r * 255) - 100, 0, 255), _MathClamp((ui.accent.g * 255) - 100, 0, 255), _MathClamp((ui.accent.b * 255) - 100, 0, 255)), (i2 - 1) / #v)
end
else
for i2, v2 in next, (v[1]) do
v2.color = ui.accent:lerp(_Color3FromRGB(_MathClamp((ui.accent.r * 255) - 5, 0, 255), _MathClamp((ui.accent.g * 255) - 5, 0, 255), _MathClamp((ui.accent.b * 255) - 5, 0, 255)), (i2 - 1) / (#v - 1))
end
end
else
for i2, v2 in next, (v) do
v2.color = ui.accent:lerp(_Color3FromRGB(_MathClamp((ui.accent.r * 255) - 30, 0, 255), _MathClamp((ui.accent.g * 255) - 30, 0, 255), _MathClamp((ui.accent.b * 255) - 30, 0, 255)), (i2 - 1) / (#v - 1))
end
end
end
end
end
end
end
do
ui.updateaccent()
ui:closeui()
ui.objects.backborder.position = ui.objects.backborder.position + _UDim2New(0, 1, 0, 1)
ui.objects.backborder.position = ui.objects.backborder.position - _UDim2New(0, 1, 0, 1)
ui.objects.backborder.visible = true
InputService.InputBegan:Connect(function(Input, gameProcessedEvent)
if Input.UserInputType == Enum.UserInputType.Keyboard then
if Input.KeyCode == Enum.KeyCode.Insert or Input.KeyCode == Enum.KeyCode.Delete or Input.KeyCode == Enum.KeyCode.Backquote then
if ui.uiopen then
ui:closeui()
else
ui:openui()
end
end
end
end)
local cursor = Drawing.new("Triangle")
Drawings[1 + #Drawings] = cursor
cursor.Filled = true
cursor.Color = _Color3FromRGB(255, 255, 255)
cursor.ZIndex = ui.basezindex + 1000
local areaIncreasePercentage = 0.25
InputService.InputChanged:Connect(function(input, processed)
if input.UserInputType == Enum.UserInputType.MouseMovement then
local xy = InputService:GetMouseLocation()
cursor.PointA = _Vector2New(xy.x + 1, xy.y)
cursor.PointB = _Vector2New(xy.x + 1, xy.y) + _Vector2New(0, 12)
cursor.PointC = _Vector2New(xy.x + 1, xy.y) + _Vector2New(8, 8)
end
end)
ui.flags.keybindoffsetx.changed:Connect(function()
keybindsui.objects.backborder.position = _UDim2New(0, ui.flags.keybindoffsetx.value, 0, ui.flags.keybindoffsety.value)
end)
ui.flags.keybindoffsety.changed:Connect(function()
keybindsui.objects.backborder.position = _UDim2New(0, ui.flags.keybindoffsetx.value, 0, ui.flags.keybindoffsety.value)
end)
RunService.Heartbeat:Connect(function()
cursor.Visible = ui.uiopen
cursor.Color = ui.accent
end)
end
local Flags = ui.flags
do
--Funcs
do -- Player Spawned Signal
local function apply(plr)
plr.CharacterAdded:Connect(function(character)
repeat
_TaskWait()
until plr.Status.Alive.Value
playerSpawned:Fire(plr, _Tick())
local hum = character:WaitForChild("Humanoid")
local sig; sig = hum.HealthChanged:Connect(function(newHealth)
if newHealth == newHealth and newHealth <= 0 then
sig:Disconnect()
sig = nil
playerDied:Fire(plr, _Tick())
end
end)
end)
end
for i,v in next, _GetPlayers(Players) do
apply(v)
end
Players.PlayerAdded:Connect(apply)
end
do -- PlayerModule
PlayerModule.storage = {}
local function refreshEnemyType(data)
data.enemy = replicatedStorage.gametype.Value == "deathmatch" or (data.player ~= LocalPlayer and data.player.Team ~= LocalPlayer.Team)
end
_GetPropertyChangedSignal(LocalPlayer, "Team"):Connect(function()
for player,data in next, PlayerModule.storage do
refreshEnemyType(data)
end
end)
function PlayerModule.add(player)
local data = {}
data.player = player
data.lastVelocity = _Vector3New()
data.velocity = _Vector3New()
data.character = nil
data.god = false
data.currentPosition = _Vector3New()
data.lastPosition = _Vector3New()
data.lastcameracf = _CFrameNew()
data.camcf = _CFrameNew()
data.updates = {}
data.enemy = replicatedStorage.gametype.Value == "deathmatch" or (player ~= LocalPlayer and player.Team ~= LocalPlayer.Team)
_GetPropertyChangedSignal(player, "Team"):Connect(function()
refreshEnemyType(data)
end)
data.step = RunService.Stepped:Connect(function(delta)
local char = player.Character
data.character = char
data.humanoid = char and _FindFirstChild(char, "Humanoid")
data.head = char and _FindFirstChild(char, "Head")
data.headhb = char and _FindFirstChild(char, "HeadHB")
data.headfake = char and _FindFirstChild(char, "FakeHead")
data.rootpart = char and _FindFirstChild(char, "HumanoidRootPart")
data.god = data.humanoid and data.humanoid.Health ~= data.humanoid.Health
data.alive = (
char
and char.Parent == workspace
and player.Character == char
and data.humanoid
and data.humanoid.Parent == char
and data.humanoid.Health > 0
and data.humanoid.Health == data.humanoid.Health
and data.humanoid.MaxHealth > 0
and data.rootpart
and data.head
and data.headhb
and data.headfake
and (
not player:FindFirstChild("Status")
or not player.Status:FindFirstChild("Alive")
or player.Status.Alive.Value == true
)
)-- LMAOO i got bored that chamses dont loads fully lol
if data.god or data.alive then
data.protected = char and _FindFirstChildOfClass(char, "ForceField") ~= nil
if data.currentPosition then
data.lastPosition = data.currentPosition
end
data.currentPosition = data.rootpart and data.rootpart.Position
if data.camcf then
data.lastcameracf = data.camcf
end
data.camcf = _FindFirstChild(player, "CameraCF") and _FindFirstChild(player, "CameraCF").Value or _CFrameNew()
_TableInsert(data.updates, 1, {position = data.currentPosition, velocity = data.velocity, time = _Tick()})
local samples = 5
local totalDelta = 0
local totalDistance = _Vector3New()
for i = 2, _MathMin(samples, #data.updates) do
local now = data.updates[i]
local prev = data.updates[i - 1]
totalDelta = totalDelta + (now.time - prev.time)
totalDistance = totalDistance + (now.position - prev.position)
end
data.velocity = totalDistance / totalDelta
else
table.clear(data.updates)
data.protected = false
data.character = nil
data.alive = false
data.lastVelocity = _Vector3New()
data.velocity = _Vector3New()
data.currentPosition = _Vector3New()
data.lastPosition = _Vector3New()
data.humanoid = nil
data.head = nil
data.rootpart = nil
end
end)
PlayerModule.storage[player] = data
end
function PlayerModule.remove(player)
if PlayerModule.storage[player] then
PlayerModule.storage[player].step:Disconnect()
table.clear(PlayerModule.storage[player])
PlayerModule.storage[player] = nil
end
end
function PlayerModule:unload()
for player,data in next, PlayerModule.storage do
PlayerModule.remove(player)
end
table.clear(PlayerModule)
PlayerModule = {}
end
for i,v in next, _GetPlayers(Players) do
if v ~= LocalPlayer then
PlayerModule.add(v)
end
end
Players.PlayerAdded:Connect(PlayerModule.add)
Players.PlayerRemoving:Connect(PlayerModule.remove)
end
do -- Calculations
function Calculations:truncateNumber(number, decimalPlaces)
local d = 10^decimalPlaces
return _MathFloor(number*d)/d
end
function Calculations:map(x, start0, stop0, start1, stop1)
return (x - start0)/(stop0 - start0)*(stop1 - start1) + start1
end
function Calculations:safeUnit(vec, epsilon)
local magnitude = vec.magnitude
if magnitude > (epsilon or 1e-10) then
return vec/magnitude
end
return _Typeof(vec) == "Vector2" and _Vector2New() or _Vector3New()
end
--Vector3s
function Calculations:angleBetweenVector3(vec1, vec2)
local angle = _MathAtan2(vec1:Cross(vec2).magnitude, vec1:Dot(vec2))
if angle < 0 then
angle = tau - angle
end
return angle
end
function Calculations:pitchYawToLookVec(pitch, yaw)
local cx = _MathCos(pitch)
return _Vector3New(-cx*_MathSin(yaw), _MathSin(pitch), -cx*_MathCos(yaw))
end
function Calculations:lookVecToPitchYaw(lookVec)
local x, y, z = lookVec.x, lookVec.y, lookVec.z
return _MathAtan2(y, (x*x + z*z)^0.5), _MathAtan2(-x, -z)
end
--Vector2s
function Calculations:angleBetweenVector2(vec1, vec2)
local ang = math.acos(Calculations:safeUnit(vec1):Dot(Calculations:safeUnit(vec2)))
if ang < 0 then
ang = tau - ang
end
return ang
end
function Calculations:rotationMatrix(vec, angle)
local mag = vec.Magnitude
vec = Calculations:safeUnit(vec)
local co, si = _MathCos(angle), _MathSin(angle)
local x, y = vec.x, vec.y
return Calculations:safeUnit(_Vector2New(x*co - y*si, x*si + y*co))*mag
end
function Calculations:normalizeAngle(angle)
return ((angle + pi) % (2*pi)) - pi
end
do
local fov
local viewportX, viewportY
local frustumYScale
local frustumXScale
local rScaleX, rScaleY
local function refresh()
viewportSize = camera.ViewportSize
fov = camera.FieldOfView * math.pi/180
viewportX, viewportY = viewportSize.x, viewportSize.y
frustumYScale = math.tan(fov/2)
frustumXScale = viewportX/viewportY * frustumYScale
rScaleX = (1 + frustumXScale*frustumXScale)^0.5
rScaleY = (1 + frustumYScale*frustumYScale)^0.5
end
RunService.Stepped:Connect(refresh)
function Calculations:worldToViewportPoint(worldPosition, clampEdge, clampOffset)
local projectedPosition = _CFramePointToObjectSpace(camera.CFrame, worldPosition)
local pX, pY, pZ = projectedPosition.x, projectedPosition.y, -projectedPosition.z
local screenX = viewportX * (0.5 + pX/(2*pZ*frustumXScale))
local screenY = viewportY * (0.5 - pY/(2*pZ*frustumYScale))
local onScreen = pZ > 0 and screenX >= 0 and screenX <= viewportX and screenY >= 0 and screenY <= viewportY
if not clampEdge then
return _Vector3New(screenX, screenY, pZ), onScreen
end
if onScreen then
return _Vector3New(screenX, screenY, pZ), true
end
local widthEdge, heightEdge = pX < 0 and clampOffset or viewportX - clampOffset, -pY < 0 and clampOffset or viewportY - clampOffset
local m = 0.5*(pY*viewportX + pX*viewportY)
local newY = (m - pY*widthEdge)/pX
if newY > clampOffset and newY < (viewportY - clampOffset) then
return _Vector3New(widthEdge, newY, pZ), false
else
local newX = (m - pX*heightEdge)/pY
return _Vector3New(newX, heightEdge, pZ), false
end
end
function Calculations:spherePoint(worldPosition, radius)
local projectedPosition = _CFramePointToObjectSpace(camera.CFrame, worldPosition)
local pX, pY, pZ = projectedPosition.x, projectedPosition.y, -projectedPosition.z
local rX = rScaleX*radius
local rY = rScaleY*radius
return -pZ*frustumXScale < pX+rX and pX-rX < pZ*frustumXScale and -pZ*frustumYScale < pY+rY and pY-rY < pZ*frustumYScale and pZ > -radius
end
end
end
do --Utility
Utility.chammedobjects = {
["Clothing"] = {},
["Arms"] = {},
["Weapon Objects"] = {},
["Colored Arms"] = {},
["Colored Weapons"] = {},
["Original"] = {}
}
Utility.materials = {
["Ghost"] = _Materials.ForceField,
["Flat"] = _Materials.Neon,
["Custom"] = _Materials.SmoothPlastic,
["Reflective"] = _Materials.Glass,
["Metallic"] = _Materials.Glass
}
function Utility.IsPlayerAlive(Player)
if Player and _FindFirstChild(Player, "Humanoid") and _FindFirstChild(Player, "Humanoid").Health > 0 then
return true
else
return false
end
end
function Utility.CryptPosition(Pos)
local X = (((Pos.X - 74312) * 4) + 1325) * 13
local Y = ((Pos.Y + 3183421) * 4) - 4201428
local Z = ((Pos.Z * 41) - 581357) * 2
return _Vector3New(X,Y,Z)
end
Utility.Weapon = {}
function Utility.Weapon:Get()
return debug.getupvalue(Cache.Client.loadammo, 1)
end
function Utility.Weapon:UpdateInterface()
debug.getupvalue(Cache.Client.loadammo, 2)()
end
function Utility.Weapon:GetCurrentAmmo()
local Equipped = Cache.Client.equipped
local Weapon = self:Get()
return Equipped == "primary" and Weapon.countammo or Equipped == "secondary" and Weapon.countammo2 or 0
end
function Utility.Weapon:GetStoredAmmo()
local Equipped = Cache.Client.equipped
local Weapon = self:Get()
return Equipped == "primary" and Weapon.primarystored or Equipped == "secondary" and Weapon.secondarystored or 0
end
function Utility.Weapon:UpdateAmmo(Ammo)
local Equipped = Cache.Client.equipped
local Weapon = debug.getupvalue(Cache.Client.loadammo, 1)
if Equipped == "primary" then
Weapon.ammocount = Ammo
elseif Equipped == "secondary" then
Weapon.ammocount2 = Ammo
end
Utility.Weapon:UpdateInterface()
end
function Utility.Weapon:UpdateStoredAmmo(Ammo)
local Equipped = Cache.Client.equipped
local Weapon = debug.getupvalue(Cache.Client.loadammo, 1)
if Equipped == "primary" then
Weapon.primarystored = Ammo
elseif Equipped == "secondary" then
Weapon.secondarystored = Ammo
end
Utility.Weapon:UpdateInterface()
end
function Utility.IsHitBox(Name)
if Cache.HitModifiers[Name] ~= nil then
return true
end
return false
end
function Utility.SetCharacter(model)
local character = LocalPlayer.Character
if not character then return end
for _, v in ipairs(_GetChildren(character)) do
if _IsA(v, "Accessory") then
_Destroy(v)
end
end
for _, part in ipairs(_GetDescendants(character)) do
if _IsA(part, "BasePart") then
local newPart = _FindFirstChild(model, part.Name, true)
if newPart and _IsA(newPart, "BasePart") then
part.Color = newPart.Color
part.Transparency = newPart.Transparency
local colorVal = _Instancenew("Color3Value")
colorVal.Name = "OriginalColor"
colorVal.Value = part.Color
colorVal.Parent = part
local materialVal = _Instancenew("StringValue")
materialVal.Name = "OriginalMaterial"
materialVal.Value = part.Material.Name
materialVal.Parent = part
end
end
end
local head = _FindFirstChild(character, "Head")
local newHead = _FindFirstChild(model, "Head")
if head and newHead then
local headDecal = _FindFirstChildOfClass(head, "Decal")
local newHeadDecal = _FindFirstChildOfClass(newHead, "Decal")
if headDecal and newHeadDecal then
headDecal.Texture = newHeadDecal.Texture
end
end
local function copyClothing(className)
local old = _FindFirstChildOfClass(character, className)
if old then _Destroy(old) end
local new = _FindFirstChildOfClass(model, className)
if new then
local clone = _Clone(new)
clone.Parent = character
local value = _Instancenew("StringValue")
value.Name = "OriginalTexture"
value.Value = clone[className .. "Template"]
value.Parent = clone
end
end
copyClothing("Shirt")
copyClothing("Pants")
for _, accessory in ipairs(_GetChildren(model)) do
if _IsA(accessory, "Accessory") then
local cloned = _Clone(accessory)
local handle = _FindFirstChild(cloned, "Handle")
if handle then
for _, weld in ipairs(_GetChildren(handle)) do
if _IsA(weld, "Weld") and weld.Part1 then
local match = _FindFirstChild(character, weld.Part1.Name)
if match then
weld.Part1 = match
end
end
end
local colorVal = _Instancenew("Color3Value")
colorVal.Name = "OriginalColor"
colorVal.Value = handle.Color
colorVal.Parent = handle
local materialVal = _Instancenew("StringValue")
materialVal.Name = "OriginalMaterial"
materialVal.Value = handle.Material.Name
materialVal.Parent = handle
end
cloned.Parent = character
end
end
end
function Utility.SetCharacterByUserId(userId)
local model = Players:CreateHumanoidModelFromUserId(userId)
for _, descendant in ipairs(_GetDescendants(model)) do
if _IsA(descendant, "ParticleEmitter") or
_IsA(descendant, "Trail") or
_IsA(descendant, "Beam") or
_IsA(descendant, "Fire") or
_IsA(descendant, "Sparkles") or
_IsA(descendant,"Smoke") or
_IsA(descendant, "Highlight") then
_Destroy(descendant)
end
end
if _FindFirstChild(model, "FullOutline") then
_Destroy(model.FullOutline)
end
model.Name = "TargetCharacter"
model:WaitForChild("Humanoid")
Utility.SetCharacter(model)
_Destroy(model)
end
function Utility.FakeShoot(Params)
local anim1 = debug.getupvalue(Cache.Client.stopplant, 4)
local anim2 = debug.getupvalue(Cache.Client.usethatgun, 4)
local fgun = Cache.Client.fgun
local gun = _FindFirstChild(LocalPlayer.Character, "Gun")
local arms = _FindFirstChild(camera, "Arms")
if anim1 and Cache.Client.fgun ~= "none" then
anim1:Play()
replicatedStorage.Events.ReplicateAnimation:FireServer("Fire")
if gun then
local s = _FindFirstChild(gun, "SShoot") or _FindFirstChild(gun, "Shoot") or _FindFirstChild(gun, "Shoot1")
if s then
local snd = _Instancenew("Sound", camera)
snd.SoundId = s.Value
snd.PlayOnRemove = true
_Destroy(snd)
local flash = _FindFirstChild(gun, "Flash")
local armsFlash = arms and _FindFirstChild(arms, "Flash")
if flash and armsFlash then
Cache.Client.createparticle("muzzle", armsFlash)
Events.RemoteEvent:FireServer({ "createparticle", "muzzle", flash })
if Params then
for _, v in next, Params do
Cache.Client.hitobject(v["Hit"], v["Enter"], v["Normal"], Cache.Client.fgun, false)
Cache.Client.hitobject(v["Hit"], v["Exit"], -v["Normal"], Cache.Client.fgun, false)
end
end
end
end
end
end
if anim2 then anim2:Play() end
Utility.Weapon:UpdateAmmo(Utility.Weapon:GetStoredAmmo() - 1)
end
function Utility.DecryptPosition(pos)
return _Vector3New(((pos.X / 13 - 1325) / 4) + 74312, ((pos.Y + 4201432) / 4) - 3183421, (pos.Z / 2 + 581357) / 41)
end
function Utility.CreateTracer(To,From,Color,Transparency,Width,Lifetime,Texture,TextureLength,TextureSpeed,FaceCamera,LightEmission,LightInfluence,Brightness,Beam_2,Color2,Transparency2)
local part1 = _Instancenew("Part", workspace.Ray_Ignore)
local part2 = _Instancenew("Part", workspace.Ray_Ignore)
local beam = _Instancenew("Beam", part1)
local beam2 = _Instancenew("Beam", part1)
local attachment1 = _Instancenew("Attachment", part1)
local attachment2 = _Instancenew("Attachment", part2)
part1.Transparency = 1
part1.Position = To
part1.CanCollide = false
part1.Anchored = true
part2.Position = From
part2.Transparency = 1
part2.CanCollide = false
part2.Anchored = true
beam.Color = _ColorSequenceNew({_ColorSequenceKeypointNew(0, Color), _ColorSequenceKeypointNew(1, Color)})
beam.Transparency = _NumberSequenceNew({_NumberSequenceKeypointNew(0, Transparency), _NumberSequenceKeypointNew(1, Transparency)})
beam.Width0 = 0.0275*Width
beam.Width1 = 0.0275*Width
beam.FaceCamera = FaceCamera
beam.Texture = Cache.TracerTextures[Texture]
beam.TextureLength = TextureLength
beam.TextureSpeed = TextureSpeed
beam.LightEmission = LightEmission
beam.LightInfluence = LightInfluence
beam.Brightness = Brightness
beam.Attachment0 = attachment1
beam.Attachment1 = attachment2
if Beam_2 then
beam2.Color = _ColorSequenceNew({_ColorSequenceKeypointNew(0, Color2), _ColorSequenceKeypointNew(1, Color2)})
beam2.Transparency = _NumberSequenceNew({_NumberSequenceKeypointNew(0, Transparency2), _NumberSequenceKeypointNew(1, Transparency2)})
beam2.Width0 = 0.0125*Width
beam2.Width1 = 0.0125*Width
beam2.Brightness = Brightness
beam2.FaceCamera = FaceCamera
beam2.LightEmission = LightEmission
beam2.LightInfluence = LightInfluence
beam2.TextureLength = TextureLength
beam2.TextureSpeed = TextureSpeed
beam2.Texture = Cache.TracerTextures[Texture]
beam2.Attachment0 = attachment1
beam2.Attachment1 = attachment2
else
_Destroy(beam2)
end
_TaskSpawn(function()
_TaskWait(Lifetime)
local duration = Flags["BulletTracerFadetime"].value
if Flags["BulletTracerFadeMethod"].value["Horizontal collapse"] then
local originalWidth0beam1 = beam.Width0
local originalWidth1beam1 = beam.Width1
local originalWidth0beam2 = beam2 and beam2.Width0 or 0
local originalWidth1beam2 = beam2 and beam2.Width1 or 0
local passed = 0
while passed < duration do
local ratio = 1 - (passed / duration)
beam.Width0 = originalWidth0beam1 * ratio
beam.Width1 = originalWidth1beam1 * ratio
if beam2 then
beam2.Width0 = originalWidth0beam2 * ratio
beam2.Width1 = originalWidth1beam2 * ratio
end
passed = passed + _TaskWait()
end
elseif Flags["BulletTracerFadeMethod"].value["Vertical collapse"] then
local passed = 0
while passed < duration do
local ratio = passed / duration
local newFrom = From:Lerp(To, ratio)
attachment2.WorldPosition = newFrom
passed = passed + _TaskWait()
end
end
_Destroy(part1)
_Destroy(part2)
end)
end
function Utility.saveViewmodel()
Utility.chammedobjects["Weapon Objects"] = {}
Utility.chammedobjects["Arms"] = {}
Utility.chammedobjects["Clothing"] = {}
Utility.chammedobjects["Original"] = {}
if LocalPlayer.Status.Alive.Value == false then
return
end
if _FindFirstChild(camera, "Arms") then
for i, v in next, (_GetChildren(camera.Arms)) do
if _IsA(v, "Model") and _FindFirstChild(v, "Right Arm") and _FindFirstChild(v, "Left Arm") then
_TableInsert(Utility.chammedobjects["Arms"], v["Right Arm"])
_TableInsert(Utility.chammedobjects["Arms"], v["Left Arm"])
_TableInsert(Utility.chammedobjects["Clothing"], _FindFirstChild(v["Right Arm"], "RGlove") or _FindFirstChild(v["Right Arm"], "Glove"))
_TableInsert(Utility.chammedobjects["Clothing"], _FindFirstChild(v["Left Arm"], "LGlove") or _FindFirstChild(v["Left Arm"], "Glove"))
_TableInsert(Utility.chammedobjects["Clothing"], _FindFirstChild(v["Right Arm"], "Sleeve"))
_TableInsert(Utility.chammedobjects["Clothing"], _FindFirstChild(v["Left Arm"], "Sleeve"))
elseif (_IsA(v, "BasePart") or _IsA(v, "MeshPart") or _IsA(v, "SpecialMesh") or _IsA(v, "SurfaceAppearance")) and v.Transparency == 0 or v.Name == "HumanoidRootPart" then
if v.Name == "HumanoidRootPart" then
v.Transparency = 1
else
_TableInsert(Utility.chammedobjects["Weapon Objects"], v)
if _FindFirstChild(v, "SurfaceAppearance") then
_TableInsert(Utility.chammedobjects["Weapon Objects"], _FindFirstChild(v, "SurfaceAppearance"))
end
end
end
end
else
return
end
for idx, objects in next, ({Utility.chammedobjects["Arms"], Utility.chammedobjects["Clothing"], Utility.chammedobjects["Weapon Objects"]}) do
for i, v in next, (objects) do
if _IsA(v, "BasePart") or _IsA(v, "MeshPart") or _IsA(v, "SpecialMesh") then
local property = {
Color = v.Color,
Material = v.Material,
Reflectance = v.Reflectance,
Transparency = v.Transparency
}
if _IsA(v, "MeshPart") then
property.TextureID = v.TextureID
elseif _IsA(v, "SpecialMesh") then
property.TextureId = v.TextureId
end
Utility.chammedobjects["Original"][v] = property
if _FindFirstChildOfClass(v, "MeshPart") or _FindFirstChildOfClass(v, "SpecialMesh") then
local HiddenMesh = _FindFirstChildOfClass(v, "MeshPart") or _FindFirstChildOfClass(v, "SpecialMesh")
if _IsA(HiddenMesh, "MeshPart") then
Utility.chammedobjects["Original"][HiddenMesh] = {
TextureID = HiddenMesh.TextureID
}
else
Utility.chammedobjects["Original"][HiddenMesh] = {
TextureId = HiddenMesh.TextureId,
VertexColor = HiddenMesh.VertexColor
}
end
end
elseif _IsA(v, "SurfaceAppearance") then
Utility.chammedobjects["Original"][v] = {
Parent = v.Parent
}
end
end
end
end
function Utility.GetSelectedName(values)
for i, v in pairs(values) do
if v then
return i
end
end
end
function Utility.LocalPlayerChams()
if not (Flags["ThirdPerson_Enabled"].value and Flags["ThirdPerson_Enabled_Key"].value and Flags["Local_Chams"].value and Utility.IsPlayerAlive(LocalPlayer.Character)) then
return
end
local valuematerial = Utility.GetSelectedName(Flags["Local_Chams_Material"].value)
local character = LocalPlayer.Character
local material = Utility.materials[valuematerial]
local color = Flags["Local_Chams_Color"].color
local transparency = Flags["Local_Chams_Transparency"].value / 100
local texture = ""
if valuematerial == "Ghost" then
texture = forcefieldanimations[Utility.GetSelectedName(Flags["Local_Chams_Texture"].value)]
end
local function applyChamsToPart(part)
if part.Name == "HumanoidRootPart" or part.Name == "___" or part.Transparency == 1 then return end
part.Color = color
part.Material = material
part.Transparency = transparency
if _IsA(part, "UnionOperation") then
part.UsePartColor = true
elseif _IsA(part, "MeshPart") then
part.TextureID = texture
end
local mesh = _FindFirstChildOfClass(part, "SpecialMesh")
if mesh then
mesh.VertexColor = _Vector3New(color.R, color.G, color.B)
mesh.TextureId = texture
end
end
local function applyChamsToAccessory(accessory)
local handle = _FindFirstChild(accessory, "Handle")
if not handle then return end
for _, child in pairs(_GetChildren(accessory)) do
if _IsA(child, "BasePart") or _IsA(child, "MeshPart") or _IsA(child, "SpecialMesh") then
child.Color = color
child.Material = material
child.Transparency = transparency
if _IsA(child, "MeshPart") then
child.TextureID = texture
elseif _IsA(child, "SpecialMesh") then
child.TextureId = texture
child.VertexColor = _Vector3New(color.R, color.G, color.B)
end
local mesh = _FindFirstChildOfClass(child, "MeshPart") or _FindFirstChildOfClass(child, "SpecialMesh")
if mesh then
if _IsA(mesh, "MeshPart") then
mesh.Color = color
mesh.Material = material
mesh.Reflectance = child.Reflectance
mesh.TextureID = texture
else
mesh.VertexColor = _Vector3New(color.R, color.G, color.B)
mesh.TextureId = texture
end
end
end
end
end
for _, v in pairs(_GetDescendants(character)) do
if _IsA(v, "BasePart") then
applyChamsToPart(v)
elseif _IsA(v, "Accessory") then
applyChamsToAccessory(v)
elseif _IsA(v, "Shirt") or _IsA(v, "Pants") then
_Destroy(v)
end
end
end
function Utility.updateWeaponChams()
for i, v in next, (Utility.chammedobjects["Colored Weapons"]) do
local originalproperties = Utility.chammedobjects["Original"][v]
if originalproperties then
for i2, v2 in next, (originalproperties) do
v[i2] = v2
end
end
end
Utility.chammedobjects["Colored Weapons"] = {}
if Flags["Model_Changer_Weapon"].value then
local Animation = ""
local thing = Utility.chammedobjects["Colored Weapons"]
local material = Utility.GetSelectedName(Flags["Model_Changer_Material"].value)
if material == "Ghost" then
Animation = forcefieldanimations[Utility.GetSelectedName(Flags["Model_Changer_Texture"].value)]
end
for i, v in next, (Utility.chammedobjects["Weapon Objects"]) do
if _IsA(v, "Part") or _IsA(v, "MeshPart") or _IsA(v, "SpecialMesh") then
thing[1 + #thing] = v
v.Transparency = Flags["Model_Changer_Transperency"].value/100
if v.Name ~= "Dot" then
v.Color = Flags["Model_Changer_Color"].color
v.Material = Utility.materials[material]
v.Reflectance = Flags["Model_Changer_Reflectance"].value/100
if _IsA(v, "MeshPart") then
v.TextureID = Animation
end
if _IsA(v, "SpecialMesh") then
v.TextureId = Animation
end
local HiddenMesh = _FindFirstChildOfClass(v, "MeshPart") or _FindFirstChildOfClass(v, "SpecialMesh")
if HiddenMesh ~= nil then
if _IsA(HiddenMesh, "MeshPart") then
HiddenMesh.TextureID = Animation
HiddenMesh.Color = v.Color
HiddenMesh.Material = v.Material
HiddenMesh.Reflectance = v.Reflectance
else
HiddenMesh.TextureId = Animation
HiddenMesh.VertexColor = _Vector3New(v.Color.r, v.Color.g, v.Color.b)
end
thing[1 + #thing] = HiddenMesh
end
end
elseif _IsA(v, "SurfaceAppearance") then
thing[1 + #thing] = v
v.Parent = nil
end
end
end
end
function Utility.updateArmChams()
for i, v in next, (Utility.chammedobjects["Colored Arms"]) do
local originalproperties = Utility.chammedobjects["Original"][v]
if originalproperties then
for i2, v2 in next, (originalproperties) do
v[i2] = v2
end
end
end
Utility.chammedobjects["Colored Arms"] = {}
if Flags["Arms_Changer"].value then
local thing = Utility.chammedobjects["Colored Arms"]
local Animation = ""
local material = Utility.GetSelectedName(Flags["Arms_Changer_Material"].value)
if material == "Ghost" then
Animation = forcefieldanimations[Utility.GetSelectedName(Flags["Arms_Changer_Texture"].value)]
end
for idx, objects in next, ({Utility.chammedobjects["Arms"], Utility.chammedobjects["Clothing"]}) do
for i, v in next, (objects) do
if _IsA(v, "BasePart") or _IsA(v, "MeshPart") or _IsA(v, "SpecialMesh") then
v.Color = Flags["Arms_Changer_Color".. idx].color
v.Transparency = Flags["Arms_Transparency".. idx].value/100
v.Material = Utility.materials[material]
thing[1 + #thing] = v
v.Reflectance = idx == 1 and Flags["Arms_Reflective"].value/100 or Flags["Arms_Reflective_Sleeve"].value/100
if _IsA(v, "SpecialMesh") then
v.VertexColor = _Vector3New(v.Color.r, v.Color.g, v.Color.b)
if _IsA(v, "MeshPart") then
v.TextureID = Animation
else
v.TextureId = Animation
end
end
if _FindFirstChildOfClass(v, "MeshPart") or _FindFirstChildOfClass(v, "SpecialMesh") then
local HiddenMesh = _FindFirstChildOfClass(v, "MeshPart") or _FindFirstChildOfClass(v, "SpecialMesh")
thing[1 + #thing] = HiddenMesh
if _IsA(HiddenMesh, "MeshPart") then
HiddenMesh.TextureID = Animation
else
HiddenMesh.VertexColor = _Vector3New(v.Color.r, v.Color.g, v.Color.b)
HiddenMesh.TextureId = Animation
end
end
end
end
end
end
end
Flags["Local_Chams"].changed:Connect(Utility.LocalPlayerChams)
Flags["ThirdPerson_Enabled"].changed:Connect(Utility.LocalPlayerChams)
Flags["ThirdPerson_Enabled_Key"].changed:Connect(Utility.LocalPlayerChams)
Flags["Local_Chams_Color"].changed:Connect(Utility.LocalPlayerChams)
Flags["Local_Chams_Material"].changed:Connect(Utility.LocalPlayerChams)
Flags["Local_Chams_Texture"].changed:Connect(Utility.LocalPlayerChams)
Flags["Local_Chams_Transparency"].changed:Connect(Utility.LocalPlayerChams)
local CanApplyChamses = true
camera.ChildAdded:Connect(function()
CanApplyChamses = false
_TaskWait()
Utility.saveViewmodel()
CanApplyChamses = true
end)
RunService.Stepped:Connect(function()
if Flags["ThirdPerson_Enabled"].value and Flags["ThirdPerson_Enabled_Key"].value then
Utility.LocalPlayerChams()
return
end
if CanApplyChamses == false then
return
end
Utility.updateArmChams()
Utility.updateWeaponChams()
end)
function Utility.CreateImpact(To,Rotation,Color,Transparency,Material,Size,Lifetime)
local impact = _Instancenew("Part", workspace.Ray_Ignore)
impact.Transparency = Transparency
impact.Color = Color
impact.Size = _Vector3New(Size/2,Size/2,Size/2)
impact.Position = To
impact.Rotation = Rotation.Rotation or Rotation or _Vector3New()
impact.CanCollide = false
impact.Anchored = true
impact.Material = _Materials[Material]
_TaskSpawn(function()
_TaskWait(Lifetime)
for i=Transparency, 1.05, 0.05 do _TaskWait()
impact.Transparency = i
end
_Destroy(impact)
end)
end
end
do --RageBot
local Status = workspace:WaitForChild("Status")
local PreparationObj = Status:WaitForChild("Preparation")
local start = false
local PREPARATION_DURATION = 6
local prepActive = false
local prepStartTime = 0
local prepEndTime = 0
local function GetPing()
return game.Stats.PerformanceStats.Ping:GetValue() / 1000
end
local function CalculateEndTime()
local ping = GetPing()
prepEndTime = prepStartTime + PREPARATION_DURATION - (ping * 2) - Flags["RageBot_Ping_Compensation_Modifier"].value / 1000
end
PreparationObj:GetPropertyChangedSignal("Value"):Connect(function()
if PreparationObj.Value then
prepActive = true
prepStartTime = workspace:GetServerTimeNow()
CalculateEndTime()
else
prepActive = false
prepStartTime = 0
prepEndTime = 0
end
end)
local function IsRoundStarted()
if not prepActive then return true end
local remaining = prepEndTime - workspace:GetServerTimeNow()
return remaining <= 0
end
RunService.Heartbeat:Connect(function()
if prepActive then
CalculateEndTime()
start = IsRoundStarted()
end
end)
local LastShoot = _Tick()
local matMod = {
[_Materials.DiamondPlate] = 3,
[_Materials.CorrodedMetal] = 2, [_Materials.Metal] = 2,
[_Materials.Concrete] = 2, [_Materials.Brick] = 2,
[_Materials.Wood] = 0.1, [_Materials.WoodPlanks] = 0.1
}
local CalculateDamageModifier = function(from, to, weapon, ignored)
local Ignore = table.clone(ignored)
local maxPen = weapon.Penetration.Value * 0.01
local maxWalls = Flags.RageBot_AutoWall.value and Flags.RageBot_MaxWalls.value or 0
local penModded = Flags.RageBot_PenModded.value
local penPassed, walls = 0, 0
local realDir = to - from
local dist = realDir.Magnitude
local range = weapon.Range.Value * 0.0625
local dir = realDir.Unit * _MathMin(dist, range)
local unit = realDir.Unit
local enterParam = _RaycastParamsNew()
enterParam.FilterType = Enum.RaycastFilterType.Blacklist
enterParam.IgnoreWater = true
enterParam.FilterDescendantsInstances = Ignore
local exitParam = _RaycastParamsNew()
exitParam.FilterType = Enum.RaycastFilterType.Whitelist
while true do
local hit = _Raycast(workspace, from, dir, enterParam)
if not hit then return true, (1 - penPassed / maxPen), walls > 0 end
local wall, pos, mat = hit.Instance, hit.Position, hit.Instance.Material
Ignore[#Ignore + 1] = wall
if wall.Name == "nowallbang" then return end
local mod = matMod[mat] or 1
if wall.Name == "Grate" or _FindFirstChild(wall.Parent, "Humanoid") then
mod = 0.1
local hum = _FindFirstChild(wall.Parent, "Humanoid")
if hum then Ignore[#Ignore + 1] = wall.Parent end
end
if wall.Transparency == 1 or not wall.CanCollide or wall.Name == "Glass" or wall.Name == "Cardboard" or wall.Parent.Name == "Hitboxes" then
mod = 0
end
local partMod = _FindFirstChild(wall, "PartModifier")
if partMod then mod = _tonumber(partMod.Value) end
if mod >= 100 then return end
if mod > 0 then
mod /= penModded
local maxDepth = (maxPen - penPassed) / mod
local depth = _MathMin(maxDepth, (pos - to).Magnitude)
if depth <= 0 then return end
exitParam.FilterDescendantsInstances = { wall }
local exit = _Raycast(workspace, pos + unit * depth, -unit * depth, exitParam)
if not exit then return end
penPassed += (depth - exit.Distance) * mod
walls += 1
end
if penPassed >= maxPen or walls >= maxWalls then break end
enterParam.FilterDescendantsInstances = Ignore
end
end
Utility.AutoWall = CalculateDamageModifier
local prepWaitUntil2 = 0
RunService.RenderStepped:Connect(function()
local char = LocalPlayer.Character
local now = _Tick()
local MultiPlayer = Flags["KillAll_DelayAdditional"].value / 1000
if workspace.Status.Preparation.Value
and Flags["KillAll_Preparation"].value
then
if Flags["KillAll_WaitForRoundStartMode"].value["Ping compensation NEW"] then
if not IsAlreadyStartedAtServer(Flags["KillAll_DelayAdditional"].value / 100) then
return
end
elseif Flags["KillAll_WaitForRoundStartMode"].value["Ping compensation OLD"] then
if prepWaitUntil2 == 0 then
local Ping = game.Stats.PerformanceStats.Ping:GetValue()
local Ms = Ping / 1000
prepWaitUntil2 = Now + PREPARATION_DURATION - Ms - MultiPlayer
end
if Now < prepWaitUntil2 then
return
end
end
else
prepWaitUntil2 = 0
end
if not Flags["KillAll_Enabled"].value then return end
if not Utility.IsPlayerAlive(char) or workspace.Status.Preparation.Value and Flags["KillAll_Preparation"].value and Flags["KillAll_WaitForRoundStartMode"].value["Preparation start"] then return end
local weapon = Cache.Client.fgun
if not weapon or weapon == "none" then return end
for _, p in next, PlayerModule.storage do
if p.alive and not p.god and p.enemy then
HitPart:FireServer(
p.head,
{X = 0/0, Y = 0/0, Z = 0/0},
"AWP",
1,
nil,
nil,
400, true, false,
_Vector3New(), 1, _Vector3New(), true, true, true, true
)
end
end
end)
local prepWaitUntil = 0
RunService.RenderStepped:Connect(function()
local Character = LocalPlayer.Character
local Now = _Tick()
if workspace.Status.Preparation.Value
and Flags["RageBot_Preparation"].value
then
if Flags["RageBot_WaitForRoundStartMode"].value["Ping compensation NEW"] then
if not start then
return
end
elseif Flags["RageBot_WaitForRoundStartMode"].value["Ping compensation OLD"] then
if PrepWaitUntil == 0 then
local Modifier = Flags["RageBot_Ping_Compensation_Modifier"].value / 1000
local Ping = game.Stats.PerformanceStats.Ping:GetValue()
local Ms = Ping / 1000
PrepWaitUntil = Now + PREPARATION_DURATION - Ms - Modifier
end
if Now < PrepWaitUntil then
return
end
end
else
PrepWaitUntil = 0
end
-- Absolute bullshit
if not Flags.RageBot_Enabled.value
or not Flags.RageBot_Enabled_Key.value
or not Utility.IsPlayerAlive(Character)
then
RageBot.Target.TargetPosition = nil
RageBot.Target.Hit = nil
RageBot.Target.TargetPlayer = nil
RageBot.Target.Origin = nil
return
end
local Weapon = Cache.Client.fgun
if Weapon and _FindFirstChild(Weapon, "Melee") or not _FindFirstChild(Weapon, "RangeModifier") then
return
end
local CameraCF = camera.CFrame
local CameraPos, CameraLook = CameraCF.Position, CameraCF.LookVector
local Origin = (Flags.RageBot_Origins.value["Camera"] and CameraPos)
or (_FindFirstChild(Character, "Head") and Character.Head.Position)
if not Origin then return end
local EnemiesFound = false
local UseFov, MaxFov = Flags.RageBot_FOV.value ~= 180, Flags.RageBot_FOV.value
for _, Player in next, PlayerModule.storage do
if not (Player.alive and Player.enemy) or Player.protected or Player.god then continue end
local RootPart = _FindFirstChild(Player.character, "HumanoidRootPart")
if UseFov and (not RootPart or _MathDeg(math.acos(CameraLook:Dot((RootPart.Position - CameraPos).Unit))) * 2 >= MaxFov) then
continue
end
local TargetCharacter = Player.player.Character
if not TargetCharacter then continue end
if workspace.Status.Preparation.Value
and Flags.RageBot_Preparation.value
and Flags["RageBot_WaitForRoundStartMode"].value["Preparation start"]
then
continue
end
EnemiesFound = true
local FireRate = Flags.RageBot_FireRate.value
and (Flags.RageBot_FireRateValue.value / 100)
or (Weapon.FireRate and Weapon.FireRate.Value or 0.1)
if Now - LastShoot < FireRate then continue end
RageBot.Target.TargetPosition = nil
RageBot.Target.Hit = nil
RageBot.Target.TargetPlayer = nil
RageBot.Target.Origin = nil
RageBot.Target.TargetPlayer = TargetCharacter
local IgnoreList = {
camera, workspace.Ray_Ignore, workspace.Debris,
workspace.Map.Clips, workspace.Map.SpawnPoints,
Character, TargetCharacter
}
local Scan, Valid = {}, {}
for PartGroup, Enabled in next, Flags.RageBot_TargetParts.value do
if Enabled then
for _, PartName in next, Cache.hitgroups[PartGroup] do
local Part = _FindFirstChild(TargetCharacter, PartName)
if Part then
Scan[#Scan+1], Valid[Part.Name] = {Part, Part.Position}, {Part, Part.Position}
end
end
end
end
-- ForwardTrack
if Flags.ForwardTrack_Enabled.value and Player.velocity.Magnitude > 0.01 then
local Params = _RaycastParamsNew()
Params.IgnoreWater = true
Params.FilterType = Enum.RaycastFilterType.Whitelist
Params.FilterDescendantsInstances = Flags.ForwardTrack_Ignore_Walls.value and {} or {workspace.Map}
local Ping = game.Stats.PerformanceStats.Ping:GetValue() * 2
local Extrapolate = Player.velocity * ((Flags.ForwardTrack_Ticks.value + Ping) / 1000)
local Steps, TargetPart = Flags.ForwardTrack_Steps_to_Scan.value, Player.head
if TargetPart then
for Step = 1, Steps do
local Offset = Extrapolate * (Step / Steps)
local Data = Valid["Head"]
if Data then
local Inst, Center = Data[1], Data[2]
local Hit = _Raycast(workspace, Center, Offset, Params)
Scan[#Scan + 1] = {Inst, Hit and Hit.Position or Center + Offset, "Extrapolated", Step}
end
end
end
end
-- Camera resolver
if Flags.Camera_Resolver.value then
local CamPos = Player.player.CameraCF.Value.p
if CamPos == CamPos and CamPos ~= _Vector3New()
and Player.camcf ~= Player.lastcameracf
and (CamPos - Player.rootpart.CFrame.p).Magnitude > 8
then
local Ref = Scan[1][1]
Scan[#Scan+1], Valid[Ref.Name] = {Ref, CamPos}, {Ref, CamPos}
end
end
-- HitScan origins
local Origins = { {Origin} }
local BaseCF = _CFrameNew(Origin, Origin + camera.CFrame.LookVector.unit)
local Factor = Flags.RageBot_HitScan_Modifier.value
if Flags.RageBot_HitScan.value then
local Points = Flags.RageBot_HitScan_Points.value
if Points.Up then Origins[#Origins+1] = {(BaseCF * _CFrameNew(0, Factor, 0)).p} end
if Points.Down then Origins[#Origins+1] = {(BaseCF * _CFrameNew(0, -Factor, 0)).p} end
if Points.Left then Origins[#Origins+1] = {(BaseCF * _CFrameNew(-Factor, 0, 0)).p} end
if Points.Right then Origins[#Origins+1] = {(BaseCF * _CFrameNew(Factor, 0, 0)).p} end
if Points.Backward then Origins[#Origins+1] = {(BaseCF * _CFrameNew(0, 0, Factor)).p} end
if Points.Forward then Origins[#Origins+1] = {(BaseCF * _CFrameNew(0, 0, -Factor)).p} end
if Points.Towards then Origins[#Origins+1] = {(BaseCF + (_CFrameNew(Origin, Player.currentPosition).LookVector.Unit * Factor)).p} end
end
-- AutoPeek
if Flags.RageBot_AutoPeek.value and Flags.RageBot_AutoPeek_Key.value then
local _, PeekHit = workspace:FindPartOnRayWithWhitelist(_RayNew(Origin, camera.CFrame.LookVector.unit * 21), {workspace.Map}, true)
if PeekHit then Origins[#Origins+1] = {PeekHit - camera.CFrame.LookVector.unit, true} end
end
-- Scan groups
local ScanGroups = {}
local Groups = _MathMin(#Origins, 8)
local PointsPerGroup = _MathFloor(Flags.RageBot_HitScan_MaximumPoints.value / Groups)
for I = 1, Groups do
local OriginIndex = #Origins > 1 and _MathRandom(#Origins) or 1
local O = Origins[OriginIndex]
local GroupPoints = {}
for J = 1, _MathMin(#Scan, PointsPerGroup) do
local PointIndex = #Scan > 1 and _MathRandom(#Scan) or 1
GroupPoints[#GroupPoints+1] = Scan[PointIndex]
_TableRemove(Scan, PointIndex)
end
_TableRemove(Origins, OriginIndex)
ScanGroups[#ScanGroups+1] = {origins = {O}, points = GroupPoints}
end
-- Damage calculation
local BaseDamage = Weapon.DMG.Value
local ArmorPen = Weapon.ArmorPenetration.Value * 0.01
local RangeMod = Weapon.RangeModifier.Value
local Kevlar, Helmet = _FindFirstChild(TargetCharacter, "Kevlar"), _FindFirstChild(TargetCharacter, "Helmet")
local MinDamage, Scans, Mods = Flags.RageBot_MinDmg.value, {}, Cache.HitModifiers
for _, Group in next, ScanGroups do
for _, OriginData in next, Group.origins do
local From, AutoPeekFlag = OriginData[1], OriginData[2]
for _, Point in next, Group.points do
local Part, Pos = Point[1], Point[2]
local Mod = Mods[Part.Name]
if Mod then
local Can, DMod, Wallbang, Params = CalculateDamageModifier(From, Pos, Weapon, IgnoreList)
if Can and DMod then
local Damage = Weapon.Bullets.Value * BaseDamage * Mod * DMod
if Kevlar and (not _StringFind(Part.Name, "Head") or Helmet) then
Damage *= ArmorPen
end
Damage *= _MathClamp((RangeMod / 100) ^ ((From - Pos).Magnitude / 34.7), 0.45, 1)
if Damage > MinDamage then
Scans[#Scans+1] = {
Origin = From, HitTarget = Part, ShouldWeTP = AutoPeekFlag,
IsWall = Wallbang, Modifier = DMod, Taked = Damage, WallsData = Params
}
end
end
end
end
end
end
if #Scans == 0 then continue end
if #Scans > 1 then _TableSort(Scans, function(A, B) return A.Taked > B.Taked end) end
local TargetInfo = Scans[1]
if not TargetInfo then continue end
RageBot.Target.TargetPosition = TargetInfo.HitTarget.Position
RageBot.Target.Hit = TargetInfo.HitTarget
RageBot.Target.Origin = TargetInfo.Origin
HitPart:FireServer(
TargetInfo.HitTarget,
Flags.RageBot_Prediction.value and {X = 0/0, Y = 0/0, Z = 0/0}
or Utility.CryptPosition(TargetInfo.HitTarget.Position),
Weapon.Name,
0,
_FindFirstChild(LocalPlayer.Character, "Gun"),
nil, TargetInfo.Modifier, false, TargetInfo.IsWall,
_Vector3New(), 1, _Vector3New(), true, true, true, true
)
if Flags["RageBot_HitLogs"].value then
ui:createnotification({
text = "Shot at " .. RageBot.Target.TargetPlayer.Name ..
" for " .. _tostring(_MathFloor(TargetInfo.Taked + 0.5)) ..
" in the " .. TargetInfo.HitTarget.Name ..
" (" .. _tostring(_MathClamp(_MathFloor(RageBot.Target.TargetPlayer.Humanoid.Health - (TargetInfo.Taked) + 0.5), 0, 100)) .. "hp remaining)",
lifetime = Flags["RageBot_HitLogs_LifeTime"].value,
priority = 0
})
end
if TargetInfo.ShouldWeTP then
Character.HumanoidRootPart.Position = TargetInfo.Origin
end
if Flags.RageBot_FakeShoot.value then
Utility.FakeShoot(TargetInfo.WallsData)
end
LastShoot = Now
end
if not EnemiesFound then
RageBot.Target.TargetPosition = nil
RageBot.Target.CryptedPosition = nil
RageBot.Target.Hit = nil
RageBot.Target.TargetPlayer = nil
RageBot.Target.Origin = nil
end
end)
end
do --AntiAims
function AntiAim.PitchControl()
local pitchMode = Flags["AntiAim_Pitch"].value
local angle = 0
if pitchMode["Upwards"] then
angle = 1
elseif pitchMode["Downwards"] then
angle = -1
elseif pitchMode["Zero"] then
angle = 0
elseif pitchMode["Random"] then
angle = _MathRandom(-1000, 1000)/1000
elseif pitchMode["Adaptive (for adaptive jiitter)"] then
local yaw = _G.CurrentYaw or 0
local yawNorm = yaw / 180
local minPitch, maxPitch = -180, 180
local pitchAngle = -maxPitch * yawNorm
angle = _MathRad(pitchAngle)
elseif pitchMode["Glitch"] then
angle = 0/0
else
_G.CurrentPitch = nil
return
end
_G.CurrentPitch = angle
local isClimbing = LocalPlayer.Character and _FindFirstChild(LocalPlayer.Character, "Climbing") ~= nil
Events.ControlTurn:FireServer(angle, isClimbing)
end
function AntiAim.GetTargetPart()
local closest = math.huge
local target = nil
for _, plr in ipairs(_GetPlayers(Players)) do
if plr ~= LocalPlayer and plr.Team ~= LocalPlayer.Team then
local char = plr.Character
local hrp = char and _FindFirstChild(char, "HumanoidRootPart")
local hum = char and _FindFirstChild(char, "Humanoid")
if hrp and hum and hum.Health > 0 then
local screenPos, onScreen = camera:WorldToViewportPoint(hrp.Position)
if onScreen then
local dist = (_Vector2New(screenPos.X, screenPos.Y) - _Vector2New(Mouse.X, Mouse.Y)).Magnitude
if dist < closest then
closest = dist
target = hrp
end
end
end
end
end
return target
end
function AntiAim.YawControl()
local char = LocalPlayer.Character
local Root = char and _FindFirstChild(char, "HumanoidRootPart")
if not Root then return end
char.Humanoid.AutoRotate = false
local CamLook = camera.CFrame.LookVector
local baseYaw = -_MathAtan2(CamLook.Z, CamLook.X) + _MathRad(-90)
local yawBase = Flags["AntiAim_YawBase"].value
local spinSpeed = Flags["AntiAimSpin_Speed"].value*36 or 30
local yawOffset = Flags["AntiAimSpin_Yaw"].value or 0
local offset = _MathRad(-yawOffset)
if yawBase["Spin"] then
baseYaw = baseYaw + _MathRad(_Tick() * spinSpeed % 360)
elseif yawBase["Random"] then
baseYaw = baseYaw + _MathRandom(-360,360)
elseif yawBase["Adaptive Jitter"] then
local minOffset = Flags["Jitter_Angle2"].value
local maxOffset = Flags["Jitter_Angle1"].value
local minSpeed = Flags["Jitter_MinSpeed"].value
local maxSpeed = Flags["AntiAimSpin_Speed"].value
if not _G.tOffset then _G.tOffset = 0 end
local center = 0
local range = (maxOffset - minOffset) / 2
local sinVal = _MathSin(_G.tOffset)
local speedFactor = 1 - _MathAbs(sinVal)
local speed = minSpeed + (maxSpeed - minSpeed) * speedFactor
_G.tOffset = _G.tOffset + speed * 0.01
local offset = range * _MathSin(_G.tOffset)
_G.CurrentYaw = offset
baseYaw = _MathRad(_MathDeg(baseYaw) + offset)
end
local cf = _CFrameNew(Root.Position) * _CFrameAngles(0, baseYaw + offset, 0)
if yawBase["Targets"] then
local targetPart = AntiAim.GetTargetPart()
if targetPart then
local direction = (targetPart.Position - Root.Position).Unit
local lookAt = _CFrameNew(Root.Position, _Vector3New(targetPart.Position.X, Root.Position.Y, targetPart.Position.Z))
cf = lookAt * _CFrameAngles(0, offset, 0)
end
end
Root.CFrame = cf
end
RunService.RenderStepped:Connect(function()
if not Flags["AntiAim_Enabled"].value then return end
local char = LocalPlayer.Character
if not Utility.IsPlayerAlive(char) then
if char and _FindFirstChild(char, "Humanoid") then
char.Humanoid.AutoRotate = true
end
return
end
AntiAim.PitchControl()
AntiAim.YawControl()
end)
end
do --Movement
function Movement.GetCharacter()
local character = LocalPlayer.Character
if not character then return nil end
local root = _FindFirstChild(character, "HumanoidRootPart")
local humanoid = _FindFirstChild(character, "Humanoid")
if not Utility.IsPlayerAlive(character) then return nil end
if not root or not humanoid then return nil end
return character, root, humanoid
end
function Movement.GetYRotation(cframe)
local _, y = _CFrameToOrientation(cframe)
return _CFrameNew(cframe.Position) * _CFrameAngles(0, y, 0)
end
function Movement.GetMoveDirection()
local dir = Vector3.zero
if _IsKeyDown(InputService, Enum.KeyCode.W) then dir += _Vector3New(0, 0, -1) end
if _IsKeyDown(InputService, Enum.KeyCode.S) then dir += _Vector3New(0, 0, 1) end
if _IsKeyDown(InputService, Enum.KeyCode.A) then dir += _Vector3New(-1, 0, 0) end
if _IsKeyDown(InputService, Enum.KeyCode.D) then dir += _Vector3New(1, 0, 0) end
return dir.Magnitude > 0 and dir.Unit or nil
end
RunService.Stepped:Connect(function()
local character, root, humanoid = Movement.GetCharacter()
if not character then return end
if not Flags["Movement_SpeedHack"].value then return end
if _IsKeyDown(InputService, Enum.KeyCode.Space) then
humanoid.Jump = true
end
local moveDir = Movement.GetMoveDirection()
if not moveDir then return end
local camCF = camera.CFrame
local forward = Movement.GetYRotation(camCF):VectorToWorldSpace(moveDir)
local Speed = (Flags["Movement_OverrideSpeedHack"].value and Flags["Movement_OverrideSpeedHack_Key"].value) and Flags["Movement_OverrideSpeed"].value or Flags["Movement_Speed"].value
local method = Flags["Movement_SpeedHackMethod"].value
if method["Velocity"] then
local velocity = forward * Speed
root.Velocity = _Vector3New(velocity.X, root.Velocity.Y, velocity.Z)
elseif method["CFrame"] then
local offset = forward * (Speed / 50)
root.CFrame += _Vector3New(offset.X, 0, offset.Z)
end
end)
end
Esp.chamsFolder = ScriptCacheFolder
Esp.espObjects = {}
Esp.allDrawingObjects = {}
Esp.droppedWeaponStorage = {}
Esp.imagecache = {}
function Esp.createDrawing(type, prop)
local obj = Drawing.new(type)
if prop then
for index,value in next, prop do
obj[index] = value
end
end
_TableInsert(Esp.allDrawingObjects, obj)
return obj
end
do --esp and chams
Esp.gradentHealthBarSegments = 16
Esp.defaultProp = {
outlineBox = {
Visible = false,
Transparency = 0.7,
Color = _Color3FromRGB(10, 10, 10),
Thickness = 3,
Filled = false
},
box = {
Visible = false,
Transparency = 1,
Color = _Color3FromRGB(255, 255, 255),
Thickness = 1,
Filled = false
},
boxFilled = {
Visible = false,
Transparency = 0.1,
Color = _Color3FromRGB(255, 255, 255),
Filled = true
},
healthBarOutline = {
Visible = false,
Transparency = 0.7,
Color = _Color3FromRGB(10, 10, 10),
Thickness = 1,
Filled = true
},
healthBarOutlineOutline = {
Visible = false,
Transparency = 0.7,
Color = _Color3FromRGB(10, 10, 10),
Thickness = 1,
Filled = false
},
healthBar = {
Visible = false,
Transparency = 1,
Color = _Color3FromRGB(0, 255, 0),
Thickness = 1,
Filled = true
},
nameTag = {
Visible = false,
Size = 13,
Font = Drawing.Fonts.Plex,
Color = _Color3FromRGB(255, 255, 255),
Transparency = 1,
Center = true,
Outline = true
},
heldWeapon = {
Visible = false,
Size = 13,
Font = 2,
Color = _Color3FromRGB(255, 255, 255),
Transparency = 1,
Center = true,
Outline = true
},
healthNumber = {
Visible = false,
Size = 13,
Font = Drawing.Fonts.Plex,
Color = _Color3FromRGB(255, 255, 255),
Transparency = 1,
Center = true,
Outline = true
},
distanceTag = {
Visible = false,
Size = 13,
Font = 2,
Color = _Color3FromRGB(255, 255, 255),
Transparency = 1,
Center = true,
Outline = true
},
oofArrow = {
Visible = false,
Filled = true,
Color = _Color3FromRGB(255, 0, 255),
Thickness = 2,
Transparency = 1
},
oofArrowOutline = {
Visible = false,
Filled = false,
Color = _Color3FromRGB(255, 255, 255),
Thickness = 4,
Transparency = 0.9,
},
cameraCircle = {
Visible = false,
Thickness = 1,
Radius = 3,
Transparency = 1,
Filled = false
},
snapLine = {
Thickness = 1,
Color = _Color3FromRGB(255, 255, 255),
Transparency = 1,
Visible = false
},
flags = {
Visible = false,
Size = 13,
Font = Drawing.Fonts.Plex,
Color = _Color3FromRGB(255, 255, 255),
Transparency = 1,
Center = true,
Outline = true
},
}
function Esp.initializeDrawingObjects(onScreen, offScreen, general)
onScreen.outlineBox = {
object = Esp.createDrawing("Square", Esp.defaultProp.outlineBox),
originalTransparency = Esp.defaultProp.outlineBox.Transparency
}
onScreen.box = {
object = Esp.createDrawing("Square", Esp.defaultProp.box),
originalTransparency = Esp.defaultProp.box.Transparency
}
onScreen.boxFilled = {
object = Esp.createDrawing("Square", Esp.defaultProp.boxFilled),
originalTransparency = Esp.defaultProp.boxFilled.Transparency
}
onScreen.healthBarOutline = {
object = Esp.createDrawing("Square", Esp.defaultProp.healthBarOutline),
originalTransparency = Esp.defaultProp.healthBarOutline.Transparency
}
onScreen.healthBarOutlineOutline = {
object = Esp.createDrawing("Square", Esp.defaultProp.healthBarOutlineOutline),
originalTransparency = Esp.defaultProp.healthBarOutline.Transparency
}
onScreen.healthBar = {
object = Esp.createDrawing("Square", Esp.defaultProp.healthBar),
originalTransparency = Esp.defaultProp.healthBar.Transparency
}
for i = 1, Esp.gradentHealthBarSegments do
onScreen["healthBarSegment" .. i] = {
object = Esp.createDrawing("Square", Esp.defaultProp.healthBar),
originalTransparency = Esp.defaultProp.healthBar.Transparency
}
end
onScreen.nameTag = {
object = Esp.createDrawing("Text", Esp.defaultProp.nameTag),
originalTransparency = Esp.defaultProp.nameTag.Transparency
}
onScreen.heldWeapon = {
object = Esp.createDrawing("Text", Esp.defaultProp.heldWeapon),
originalTransparency = Esp.defaultProp.heldWeapon.Transparency
}
onScreen.healthNumber = {
object = Esp.createDrawing("Text", Esp.defaultProp.healthNumber),
originalTransparency = Esp.defaultProp.healthNumber.Transparency
}
onScreen.distanceTag = {
object = Esp.createDrawing("Text", Esp.defaultProp.distanceTag),
originalTransparency = Esp.defaultProp.distanceTag.Transparency
}
onScreen.armorTag = {
object = Esp.createDrawing("Text", Esp.defaultProp.flags),
originalTransparency = Esp.defaultProp.flags.Transparency
}
onScreen.bombTag = {
object = Esp.createDrawing("Text", Esp.defaultProp.flags),
originalTransparency = Esp.defaultProp.flags.Transparency
}
onScreen.moneyTag = {
object = Esp.createDrawing("Text", Esp.defaultProp.flags),
originalTransparency = Esp.defaultProp.flags.Transparency
}
offScreen.oofArrow = {
object = Esp.createDrawing("Triangle", Esp.defaultProp.oofArrow),
originalTransparency = Esp.defaultProp.oofArrow.Transparency
}
offScreen.oofArrowOutline = {
object = Esp.createDrawing("Triangle", Esp.defaultProp.oofArrowOutline),
originalTransparency = Esp.defaultProp.oofArrowOutline.Transparency
}
onScreen.cameraCircle = {
object = Esp.createDrawing("Circle", Esp.defaultProp.cameraCircle),
originalTransparency = Esp.defaultProp.cameraCircle.Transparency
}
general.snapLine = {
object = Esp.createDrawing("Line", Esp.defaultProp.snapLine),
originalTransparency = Esp.defaultProp.snapLine.Transparency
}
end
function Esp.getBoundingBox(rootCf, headCf, rootSize, headSize, hipHeight, cacheTable)
if cacheTable and rootCf then
cacheTable.rootCf = rootCf
cacheTable.headCf = headCf
cacheTable.rootSize = rootSize
cacheTable.headSize = headSize
cacheTable.hipHeight = hipHeight
elseif not rootCf then
rootCf = cacheTable.rootCf
headCf = cacheTable.headCf
rootSize = cacheTable.rootSize
headSize = cacheTable.headSize
hipHeight = cacheTable.hipHeight
end
local th = headCf * _Vector3New(0, headSize.y*0.5 + 0.5, 0)
local bf = rootCf * _Vector3New(0, -(rootSize.y*0.5 + hipHeight + 0.5), 0)
local td = (th - rootCf.p).Magnitude
local bd = (rootCf.p - bf).Magnitude
local up = rootCf.UpVector
local tp = rootCf.p + up*td
local bp = rootCf.p - up*bd
local top = Calculations:worldToViewportPoint(tp)
local bottom = Calculations:worldToViewportPoint(bp)
local width = _MathAbs(top.x - bottom.x)
local height = _MathMax(_MathAbs(top.y - bottom.y), width / 1.75)
local size = _Vector2New(_MathFloor(_MathMax(height / 1.7, width * 2.5)), _MathFloor(height))
local pos = _Vector2New(_MathFloor((bottom.x - size.x + top.x) / 2), _MathFloor(_MathMin(top.y, bottom.y)))
return Rect.new(pos, pos + size)
end
function Esp.applyEsp(player)
repeat _TaskWait() until PlayerModule.storage[player]
_TaskWait(1)
local this = {}
this.drawingObjects = {
drawOnScreen = {},
drawOffScreen = {},
drawGeneral = {},
stoppedRenderingOnScreen = true,
stoppedRenderingOffScreen = true,
lastData = {
headPos = nil,
torsoCf = nil,
health = nil,
maxHealth = nil
},
}
this.transparencyEvent = _Instancenew("BindableEvent")
this.healthPercentageSpring = spring.new()
this.healthPercentageSpring.s = 24
this.timePassed = 0
this.chamsObjects = {}
this.skeletons = {}
this.chamsTransConnections = {}
this.updatechams = false
this.transConnections = {}
this.theirpInfo = PlayerModule.storage[player]
Esp.initializeDrawingObjects(this.drawingObjects.drawOnScreen, this.drawingObjects.drawOffScreen, this.drawingObjects.drawGeneral)
for i,v in next, this.drawingObjects.drawOnScreen do
_TableInsert(this.transConnections, this.transparencyEvent.Event:Connect(function(transparency)
v.object.Transparency = v.originalTransparency * (1 - transparency)
end))
end
for i,v in next, this.drawingObjects.drawOffScreen do
_TableInsert(this.transConnections, this.transparencyEvent.Event:Connect(function(transparency)
v.object.Transparency = v.originalTransparency * (1 - transparency)
end))
end
for i,v in next, this.drawingObjects.drawGeneral do
_TableInsert(this.transConnections, this.transparencyEvent.Event:Connect(function(transparency)
v.object.Transparency = v.originalTransparency * (1 - transparency)
end))
end
function this.chamsremoved(character)
for i = #this.chamsObjects, 1, -1 do
local object = _TableRemove(this.chamsObjects, i)
if object then
_Destroy(object)
object = nil
end
end
for i = #this.skeletons, 1, -1 do
local v = _TableRemove(this.skeletons, i)
if v then
v.step:Disconnect()
v.step = nil
v.line:Remove()
v.line = nil
v.weld = nil
end
end
end
local transparencyFix = function()
local character = player.Character
if not character then return end
local pInfo = PlayerModule.storage[player]
if not pInfo then return end
local section = (this and this.theirpInfo and this.theirpInfo.enemy) and "Enemy_" or "Team_"
local chamsEnabled = Flags[section .. "Chamses"].value
local targetTransparency = chamsEnabled and 1 or 0
for _, accessory in ipairs(_GetChildren(character)) do
if _IsA(accessory, "Accessory") then
for _, part in ipairs(_GetChildren(accessory)) do
if _IsA(part, "BasePart") then
part.Transparency = targetTransparency
end
end
end
end
end
function this.chamsadded(character)
repeat
_TaskWait()
until character ~= nil
local humanoid = character:WaitForChild("Humanoid", 1/0)
local humanoidRootPart = character:WaitForChild("HumanoidRootPart", 1/0)
if humanoid.Health <= 0 then
return
end
local pInfo = PlayerModule.storage[player]
if not pInfo then
repeat
pInfo = PlayerModule.storage[player]
_TaskWait()
until pInfo
end
repeat
_TaskWait()
until pInfo.alive
--what the dog doing
local section = this and this.theirpInfo and this.theirpInfo.enemy and "Enemy_" or "Team_"
humanoidRootPart.AncestryChanged:Connect(function(child, new)
if new == nil then
this.chamsremoved()
end
end)
local yeah = _Tick()
local loop
loop = RunService.Stepped:Connect(function()
if _Tick() - yeah > 5 then
loop:Disconnect()
loop = nil
end
transparencyFix()
end)
for i,v in next, _GetChildren(character) do
if _IsA(v,"MeshPart") or _IsA(v,"BasePart") and _FindFirstChildOfClass(v, "Motor6D") and (v.Transparency ~= 1 or v.Name == "Head") then
if v.Name == "BackC4" then continue end
local weld = _FindFirstChildOfClass(v, "Motor6D")
if weld.Part0 == character.HumanoidRootPart or weld.Part1 == character.HumanoidRootPart then
else
if weld and weld.Part0 and weld.Part1 then
local data = {}
data.weld = weld
data.line = Esp.createDrawing("Line", {
Thickness = 1,
Color = Flags[section.. "Skeletons_Color1"].color,
Visible = false,
Transparency = 0.5
})
local hasBeenHidden = false
data.step = RunService.Stepped:Connect(function()
local section = this and this.theirpInfo and this.theirpInfo.enemy and "Enemy_" or "Team_"
if Flags[section.. "Skeletons"].value then
hasBeenHidden = false
local p0, v0 = Calculations:worldToViewportPoint(data.weld.Part0.Position)
local p1, v1 = Calculations:worldToViewportPoint(data.weld.Part1.Position)
if v0 and v1 then
data.line.From = _Vector2New(_MathFloor(p0.x), _MathFloor(p0.y))
data.line.To = _Vector2New(_MathFloor(p1.x), _MathFloor(p1.y))
data.line.Color = Flags[section.. "Skeletons_Color1"].color
data.line.Visible = true
else
data.line.Visible = false
end
else
if hasBeenHidden ~= true then
data.line.Visible = false
hasBeenHidden = true
end
end
end)
_TableInsert(this.skeletons, data)
end
end
end
if _IsA(v,"BasePart") and v.Name ~= "HumanoidRootPart" and v.Name ~= "Gun" and v.Name ~= "BackC4" and v.Name ~= "HeadHB" and v.Name ~= "Head" then
local isHead = v.Name == "FakeHead"
local inner = _Instancenew(isHead and "CylinderHandleAdornment" or "BoxHandleAdornment")
local outline = _Clone(inner)
inner.Name = "inner"
inner.AlwaysOnTop = true
inner.Color3 = Flags[section.. "Chamses_Color1"].color
inner.Transparency = Flags[section.. "Chamses_Transperency1"].value/10
inner.Visible = Flags[section.. "Chamses"].value
inner.ZIndex = 2
inner.Adornee = v
inner.Parent = Esp.chamsFolder
outline.Name = "outer"
outline.AlwaysOnTop = false
outline.Color3 = Flags[section.. "Chamses_Color2"].color
outline.Transparency = Flags[section.. "Chamses_Transperency2"].value/10
outline.Visible = inner.Visible
outline.ZIndex = -1
outline.Adornee = v
outline.Parent = Esp.chamsFolder
if isHead then
inner.CFrame = _CFrameAngles(math.pi / 2, 0, 0)
inner.Radius = v.Size.x * 0.58 + 0.001
inner.Height = v.Size.y + 0.17
outline.CFrame = inner.CFrame
outline.Radius = v.Size.x * 0.58 + 0.15
outline.Height = v.Size.y + 0.32
else
inner.Size = v.Size + _Vector3New(0.001, 0.001, 0.001)
outline.Size = v.Size + _Vector3New(0.15, 0.15, 0.15)
end
_TableInsert(this.chamsObjects, inner)
_TableInsert(this.chamsObjects, outline)
end
end
end
local lastFlags = {}
function this.updateChams()
if not this or not this.theirpInfo then return end
local isEnemy = this.theirpInfo.enemy
local section = isEnemy and "Enemy_" or "Team_"
local chamsEnabled = Flags[section .. "Chamses"].value
local color1 = Flags[section .. "Chamses_Color1"].color
local color2 = Flags[section .. "Chamses_Color2"].color
local transparency1 = Flags[section .. "Chamses_Transperency1"].value
local transparency2 = Flags[section .. "Chamses_Transperency2"].value
local flagKey = section .. "_chamsHash"
local currentHash = _tostring(chamsEnabled) .. _tostring(color1) .. _tostring(color2) .. transparency1 .. transparency2
if lastFlags[flagKey] == currentHash then return end
lastFlags[flagKey] = currentHash
local chams = this.chamsObjects
if chams then
for _, v in next, chams do
v.Visible = chamsEnabled
if v.Name == "inner" then
v.Color3 = color1
v.Transparency = chamsEnabled and transparency1 / 10 or 1
elseif v.Name == "outer" then
v.Color3 = color2
v.Transparency = chamsEnabled and transparency2 / 10 or 1
end
end
transparencyFix()
end
end
function this.renderOnScreen(info)
if info.pInfo then
this.drawingObjects.lastData.pInfo = info.pInfo
else
info.pInfo = this.drawingObjects.lastData.pInfo
end
local health = info.health
local maxHealth = info.maxHealth
local section = ((this and this.theirpInfo and this.theirpInfo.enemy and "Enemy_") or "Team_")
local boundingRect = info.boundingRect
local drawOnScreen = this.drawingObjects.drawOnScreen
local boxOutline = drawOnScreen.outlineBox.object
local box = drawOnScreen.box.object
local boxFilled = drawOnScreen.boxFilled.object
local healthBar = drawOnScreen.healthBar.object
local healthBarOutline = drawOnScreen.healthBarOutline.object
local healthBarOutlineOutline = drawOnScreen.healthBarOutlineOutline.object
local healthNumber = drawOnScreen.healthNumber.object
local heldWeapon = drawOnScreen.heldWeapon.object
local distanceTag = drawOnScreen.distanceTag.object
local nameTag = drawOnScreen.nameTag.object
local armorTag = drawOnScreen.armorTag.object
local moneyTag = drawOnScreen.moneyTag.object
local bombTag = drawOnScreen.bombTag.object
local fakeindicator = 0
local flagoffset = 0
local textCase = Utility.GetSelectedName(Flags["Esp_Settings_TextCase"].value)
local textSize = Flags["Esp_Settings_TextSize"].value
local textFont = Drawing.Fonts[Utility.GetSelectedName(Flags["Esp_Settings_TextFont"].value)]
local textFlagCase = Utility.GetSelectedName(Flags["Esp_Settings_FlagTextCase"].value)
local textFlagSize = Flags["Esp_Settings_FlagTextSize"].value
local textFlagFont = Drawing.Fonts[Utility.GetSelectedName(Flags["Esp_Settings_FlagTextFont"].value)]
this.healthPercentageSpring.t = info.pInfo.god == true and 0 or health/maxHealth
if info.pInfo.character and _FindFirstChild(info.pInfo.character, "EquippedTool") then
this.drawingObjects.lastData.weapon = textCase == "lowercase" and info.pInfo.character.EquippedTool.Value:lower() or textCase == "UPPERCASE" and info.pInfo.character.EquippedTool.Value:upper() or info.pInfo.character.EquippedTool.Value
end
if Flags[section.. "Boxes"].value then
box.Position = boundingRect.Min
box.Size = boundingRect.Max - boundingRect.Min
boxOutline.Position = box.Position
boxOutline.Size = box.Size
box.Color = Flags[section.. "Boxes_Color1"].color
boxFilled.Color = Flags[section.. "Boxes_Filled_Color1"].color
boxFilled.Transparency = 1 - Flags[section.. "Boxes_Filled_Transperency"].value/10
if Flags[section.. "Boxes_Filled"].value then
boxFilled.Position = box.Position + _Vector2New(_MathFloor(box.Thickness / 2) + 1, _MathFloor(box.Thickness / 2) + 1)
boxFilled.Size = box.Size - _Vector2New(box.Thickness + 1, box.Thickness + 1)
boxFilled.Visible = true
else
boxFilled.Visible = false
end
box.Visible = true
boxOutline.Visible = true
else
box.Visible = false
boxFilled.Visible = false
boxOutline.Visible = false
end
if Flags[section.. "Health_Bar"].value then
local hpMax = Flags[section.. "Health_Bar_Color1"].color
local hpLow = Flags[section.. "Health_Bar_Color2"].color
local healthPercentage = this.healthPercentageSpring.p
local fullSize = boundingRect.Height
local chunk = fullSize * healthPercentage
healthBar.Size = _Vector2New(2, chunk)
healthBar.Position = boundingRect.Min + _Vector2New(-5, fullSize - chunk)
healthBarOutline.Size = _Vector2New(4, fullSize + 2)
healthBarOutline.Position = boundingRect.Min + _Vector2New(-6, -1)
healthBarOutlineOutline.Size = healthBarOutline.Size
healthBarOutlineOutline.Position = healthBarOutline.Position
healthBar.Color = hpLow:Lerp(hpMax, healthPercentage)
local isGradient = Flags[section.. "Health_Bar_Gradient"].value
healthBar.Visible = not isGradient
healthBarOutline.Visible = true
healthBarOutlineOutline.Visible = true
if isGradient then
local sizePerSegment = math.ceil(fullSize / Esp.gradentHealthBarSegments)
local maxSegments = fullSize / sizePerSegment + 1
local minSegments = chunk / sizePerSegment + 1
local skipped = maxSegments - minSegments
local healthPos = healthBar.Position
local healthSizeX = healthBar.Size.x
local healthSizeY = healthBar.Size.y
for i = 1, Esp.gradentHealthBarSegments do
local segment = drawOnScreen["healthBarSegment" .. i].object
local projectedPosMin = _Vector2New(0, (i-1) * sizePerSegment)
local ProjectedPosMax = projectedPosMin + _Vector2New(0, sizePerSegment)
if projectedPosMin.y > chunk then
segment.Visible = false
else
segment.Visible = true
segment.Position = healthPos + projectedPosMin
segment.Size = _Vector2New(healthSizeX, ProjectedPosMax.y - healthSizeY > 0 and sizePerSegment - (ProjectedPosMax.y - healthSizeY) or sizePerSegment)
segment.Color = hpMax:Lerp(hpLow, (i + skipped)/maxSegments)
end
end
else
if drawOnScreen["healthBarSegment1"].object.Visible == true then
for i = 1, Esp.gradentHealthBarSegments do
drawOnScreen["healthBarSegment" .. i].object.Visible = false
end
end
end
else
healthBar.Visible = false
healthBarOutline.Visible = false
healthBarOutlineOutline.Visible = false
if drawOnScreen["healthBarSegment1"].object.Visible == true then
for i = 1, Esp.gradentHealthBarSegments do
drawOnScreen["healthBarSegment" .. i].object.Visible = false
end
end
end
if Flags[section.. "Health_Bar"].value and ((Flags[section.. "Health_Number"].value and health <= Flags[section.. "Max_HP_Visibility_Cap"].value) or info.pInfo.god) then
local godded = info.pInfo.god
healthNumber.Text = godded and "God" or _tostring(_MathFloor((this.healthPercentageSpring.p * maxHealth) + 0.5))
local offset = godded and 0 or (2 * this.healthPercentageSpring.p) - 1
healthNumber.Position = godded and boundingRect.Min + _Vector2New(-5 - healthBar.Size.x - (healthNumber.TextBounds.X/2), (boundingRect.Height*0.5) - healthNumber.TextBounds.Y/2 + (offset * (healthNumber.Size/4)) - (offset * 1)) or healthBar.Position + _Vector2New(-healthBar.Size.x - (healthNumber.TextBounds.X/2) - 1, -healthNumber.TextBounds.Y/2) + _Vector2New(0, (offset * (healthNumber.Size + 1) * 0.25))
healthNumber.Color = _Color3New(1, 1, 1)
healthNumber.Visible = true
else
healthNumber.Visible = false
end
local theOffsetBullshit = 0
if Flags[section.. "Held_Weapon"].value then
heldWeapon.Text = this.drawingObjects.lastData.weapon
heldWeapon.Size = textSize
heldWeapon.Font = textFont
heldWeapon.Position = boundingRect.Min + _Vector2New(_MathFloor(boundingRect.Width / 2), boundingRect.Height + 2)
heldWeapon.Color = Flags[section.. "Held_Weapon_Color1"].color
heldWeapon.Visible = true
theOffsetBullshit = theOffsetBullshit + textSize
else
heldWeapon.Visible = false
end
if Flags[section.. "Distance"].value then
distanceTag.Text = Calculations:truncateNumber((this.drawingObjects.lastData.headCf.p - camera.CFrame.p).Magnitude, 1) .. (textCase == "lowercase" and " st" or textCase == "UPPERCASE" and " ST" or " st")
distanceTag.Position = boundingRect.Min + _Vector2New(_MathFloor(boundingRect.Width / 2), boundingRect.Height + theOffsetBullshit + 2)
distanceTag.Size = textSize
distanceTag.Font = textFont
distanceTag.Color = Flags[section.. "Distance_Color1"].color
distanceTag.Visible = true
else
distanceTag.Visible = false
end
if Flags[section.. "Name"].value then
nameTag.Color = Flags[section.. "Name_Color1"].color
nameTag.Text = textCase == "lowercase" and player.Name:lower() or textCase == "UPPERCASE" and player.Name:upper() or player.Name
nameTag.Position = boundingRect.Min + _Vector2New(_MathFloor(boundingRect.Width / 2), -2 - nameTag.TextBounds.y)
nameTag.Size = textSize
nameTag.Font = textFont
nameTag.Visible = true
else
nameTag.Visible = false
end
if Flags[section.. "Armor"].value then
armorTag.Color = Flags[section.. "Armor_Color1"].color
local str = ""
if _FindFirstChild(player, "Helmet") then
str = str .. "H"
end
if _FindFirstChild(player, "Kevlar") then
str = str .. "K"
end
local rawText = str
local rawTextSplit = _StringSplit(rawText:lower(), "")
if rawTextSplit[1] then
rawTextSplit[1] = rawTextSplit[1]:upper()
for i, char in next, rawTextSplit do
if ((char == " " or char == "-") and i < #rawTextSplit) then
rawTextSplit[i + 1] = rawTextSplit[i + 1]:upper()
end
end
end
local fixedText = _TableConcat(rawTextSplit)
armorTag.Text = textFlagCase == "lowercase" and str:lower() or textFlagCase == "UPPERCASE" and str:upper() or fixedText
armorTag.Position = boundingRect.Min + _Vector2New(_MathFloor(boundingRect.Width) + (armorTag.TextBounds.X / 2) + 2, -3)
if str ~= "" then
flagoffset = flagoffset + armorTag.TextBounds.Y
end
armorTag.Visible = true
armorTag.Font = textFlagFont
armorTag.Size = textFlagSize
else
armorTag.Visible = false
end
if Flags[section.. "Cash"].value then
moneyTag.Color = Flags[section.. "Cash_Color1"].color
moneyTag.Text = _tostring(player.Cash.Value) .. "$"
moneyTag.Font = textFlagFont
moneyTag.Size = textFlagSize
moneyTag.Position = boundingRect.Min + _Vector2New(_MathFloor(boundingRect.Width) + (moneyTag.TextBounds.X / 2) + 2, -3 + flagoffset)
flagoffset = flagoffset + moneyTag.TextBounds.Y
moneyTag.Visible = true
else
moneyTag.Visible = false
end
if _FindFirstChild(workspace,"Status") and _FindFirstChild(workspace.Status,"HasBomb") and workspace.Status.HasBomb.Value == player.Name then
this.drawingObjects.lastData.hadBomb = true
else
this.drawingObjects.lastData.hadBomb = false
end
if Flags[section.. "Bomb"].value and this.drawingObjects.lastData.hadBomb then
bombTag.Color = Flags[section.. "Bomb_Color1"].color
bombTag.Text = textFlagCase == "lowercase" and "bomb" or textFlagCase == "UPPERCASE" and "BOMB" or "Bomb"
bombTag.Position = boundingRect.Min + _Vector2New(_MathFloor(boundingRect.Width) + (bombTag.TextBounds.X / 2) + 2, -3 + flagoffset)
flagoffset = flagoffset + bombTag.TextBounds.Y
bombTag.Visible = true
else
bombTag.Visible = false
end
this.updateChams()
this.drawingObjects.stoppedRenderingOnScreen = false
if not this.drawingObjects.stoppedRenderingOffScreen then
this.drawingObjects.stoppedRenderingOffScreen = true
for i,v in next, this.drawingObjects.drawOffScreen do
v.object.Visible = false
end
end
end
function this.renderOffScreen(info)
local pos = _CFramePointToObjectSpace(_CFrameLookAt(camera.CFrame.p, camera.CFrame.p + camera.CFrame.LookVector * _Vector3New(1, 0, 1)), info.position)
local oofArrow = this.drawingObjects.drawOffScreen.oofArrow.object
local oofArrowOutline = this.drawingObjects.drawOffScreen.oofArrowOutline.object
if Flags["Enemy_Out_of_View_Arrows"].value and this and this.theirpInfo and this.theirpInfo.enemy then
local angle = _MathAtan2(pos.z, pos.x)
local cx, sy = _MathCos(angle), _MathSin(angle)
local cx1, sy1 = _MathCos(angle + math.pi/2), _MathSin(angle + math.pi/2)
local cx2, sy2 = _MathCos(angle + math.pi/2*3), _MathSin(angle + math.pi/2*3)
local viewport = camera.ViewportSize
local bigger = _MathMax(viewport.x, viewport.y)
local smaller = _MathMin(viewport.x, viewport.y)
local arrowSize = _MathClamp(Flags["Enemy_Dynamic_Arrow_Size"].value and Calculations:map((info.position - camera.CFrame.p).Magnitude, 1, 100, 30, 10) or Flags["Enemy_Arrow_Size"].value, 4, 1/0)
local arrowPercentage = Flags["Enemy_Arrow_Distance"].value
local arrowOrigin = viewport/2 + (_Vector2New(cx, sy) * _Vector2New(bigger * arrowPercentage/200, smaller * arrowPercentage/200))
oofArrow.PointA = arrowOrigin + _Vector2New(arrowSize*2 * cx, arrowSize*2 * sy)
oofArrow.PointB = arrowOrigin + _Vector2New(arrowSize * cx1, arrowSize * sy1)
oofArrow.PointC = arrowOrigin + _Vector2New(arrowSize * cx2, arrowSize * sy2)
oofArrow.Color = Flags["Enemy_Out_of_View_Arrows_Color1"].color
oofArrowOutline.PointA = oofArrow.PointA
oofArrowOutline.PointB = oofArrow.PointB
oofArrowOutline.PointC = oofArrow.PointC
oofArrowOutline.Color = _Color3New(_MathMax(0, Flags["Enemy_Out_of_View_Arrows_Color1"].color.r * 0.5), _MathMax(0, Flags["Enemy_Out_of_View_Arrows_Color1"].color.g * 0.5), _MathMax(0, Flags["Enemy_Out_of_View_Arrows_Color1"].color.b * 0.5))
local trans = ((_MathCos(_Tick() * 2 * math.pi) * (0.75 - (0.25 * (_MathCos(_Tick() * 2 * math.pi))))) / 2) + 0.75
this.drawingObjects.drawOffScreen.oofArrow.originalTransparency = trans
this.drawingObjects.drawOffScreen.oofArrowOutline.originalTransparency = trans
oofArrow.Transparency = trans
oofArrowOutline.Transparency = trans
oofArrow.Visible = true
oofArrowOutline.Visible = true
else
oofArrowOutline.Visible = false
oofArrow.Visible = false
end
this.drawingObjects.stoppedRenderingOffScreen = false
if not this.drawingObjects.stoppedRenderingOnScreen then
this.drawingObjects.stoppedRenderingOnScreen = true
for i,v in next, this.drawingObjects.drawOnScreen do
v.object.Visible = false
end
end
end
function this.renderGeneral(info)
local snapLine = this.drawingObjects.drawGeneral.snapLine.object
local pos, onScreen = Calculations:worldToViewportPoint(info.position, false, 50)
if not onScreen then
local angle
local centerX, centerY = viewportSize.x/2, viewportSize.y/2
if pos.z > 0 then
angle = _MathAtan2(pos.y - centerY, pos.x - centerX)
else
angle = _MathAtan2(centerY - pos.y, centerX - pos.x)
end
local x = _MathCos(angle)
local y = _MathSin(angle)
local slope = y/x
local xEdge, yEdge = viewportSize.x, viewportSize.y
if y < 0 then
yEdge = 0
end
if x < 0 then
xEdge = 0
end
local newY = slope*xEdge + centerY - slope*centerX
if newY > 0 and newY < viewportSize.y then
pos = _Vector2New(xEdge, newY)
else
pos = _Vector2New((yEdge - centerY + slope*centerX)/slope, yEdge)
end
end
local section = this and this.theirpInfo and this.theirpInfo.enemy and "Enemy_" or "Team_"
if Flags[section.. "Snap_Lines"].value then
local trans = (1 - (Flags[section.. "Snap_Lines_Transperency"].value)/10) * (onScreen and 1 or 0.5)
snapLine.From = _Vector2New(_MathFloor(viewportSize.x / 2), _MathFloor(viewportSize.y - 50))
snapLine.To = _Vector2New(pos.x, pos.y)
snapLine.Transparency = trans
snapLine.Color = Flags[section.. "Snap_Lines_Color1"].color
snapLine.Visible = true
else
snapLine.Visible = false
end
end
function this.onSpawned()
local pInfo = PlayerModule.storage[player]
repeat
_TaskWait()
until pInfo and pInfo.alive
if this.step then
this.step:Disconnect()
this.step = nil
end
this.transparencyEvent:Fire(0)
this.fadefinished = true
this.step = RunService.Stepped:Connect(function(upTime, deltaTime)
if pInfo and (pInfo.alive or pInfo.god) then
local section = pInfo.enemy and "Enemy_" or "Team_"
local health, maxHealth = pInfo.humanoid.Health, pInfo.humanoid.MaxHealth
this.drawingObjects.lastData.health = health
this.drawingObjects.lastData.maxHealth = maxHealth
this.timePassed = 0
local onScreen = Calculations:spherePoint(pInfo.head.Position, 4)
if onScreen then
this.renderOnScreen({
boundingRect = Esp.getBoundingBox(pInfo.rootpart.CFrame, pInfo.head.CFrame, pInfo.rootpart.Size, pInfo.head.Size, pInfo.humanoid.HipHeight, this.drawingObjects.lastData),
pInfo = pInfo,
health = health,
maxHealth = maxHealth
})
else
this.renderOffScreen({
position = pInfo.currentPosition
})
end
this.renderGeneral({
position = pInfo.currentPosition,
pInfo = pInfo
})
else
if this and this.onDied then
this.onDied()
end
end
end)
end
function this.onDied()
local pInfo = PlayerModule.storage[player]
if this.step then
this.step:Disconnect()
this.step = nil
end
this.fadefinished = false
this.timePassed = 0
this.step = RunService.Stepped:Connect(function(upTime, deltaTime)
if not this.timePassed then
this.timePassed = 1
end
this.timePassed = this.timePassed + (deltaTime * 4)
if this.timePassed >= 1 then
if this.step then
this.step:Disconnect()
end
for i,v in next, this.drawingObjects.drawOnScreen do
v.object.Visible = false
end
for i,v in next, this.drawingObjects.drawOffScreen do
v.object.Visible = false
end
for i,v in next, this.drawingObjects.drawGeneral do
v.object.Visible = false
end
this.drawingObjects.stoppedRenderingOffScreen = true
this.drawingObjects.stoppedRenderingOnScreen = true
for i = #this.chamsTransConnections, 1, -1 do
local con = _TableRemove(this.chamsTransConnections, i)
if con then
con:Disconnect()
con = nil
end
end
for i = #this.chamsObjects, 1, -1 do
local object = _TableRemove(this.chamsObjects, i)
if object then
_Destroy(object)
object = nil
end
end
if this.step then
this.step:Disconnect()
this.step = nil
end
this.transparencyEvent:Fire(0)
this.fadefinished = true
else
this.transparencyEvent:Fire(Calculations:map(this.timePassed, 0, 1, 0, 1))
if this.drawingObjects.lastData.headCf then
local onScreen = Calculations:spherePoint(this.drawingObjects.lastData.headCf.p, 4)
if onScreen then
this.renderOnScreen({
boundingRect = Esp.getBoundingBox(nil, nil, nil, nil, nil, this.drawingObjects.lastData),
health = 0,
maxHealth = this.drawingObjects.lastData.maxHealth
})
else
this.renderOffScreen({
position = this.drawingObjects.lastData.headCf.p
})
end
this.renderGeneral({
position = this.drawingObjects.lastData.headCf.p
})
else
if not this.drawingObjects.stoppedRenderingOnScreen then
this.drawingObjects.stoppedRenderingOnScreen = true
for i,v in next, this.drawingObjects.drawOnScreen do
v.object.Visible = false
end
end
if not this.drawingObjects.stoppedRenderingOffScreen then
this.drawingObjects.stoppedRenderingOffScreen = true
for i,v in next, this.drawingObjects.drawOffScreen do
v.object.Visible = false
end
end
for i,v in next, this.drawingObjects.drawGeneral do
v.object.Visible = false
end
end
end
end)
end
if player.Character and _FindFirstChild(player.Character, "HumanoidRootPart") then
this.onSpawned()
this.chamsadded(player.Character)
end
Esp.espObjects[player] = this
end
function Esp.removeEsp(player)
local this = Esp.espObjects[player]
if this then
if this.step then
this.step:Disconnect()
end
for i,v in next, this.drawingObjects.drawOnScreen do
v.object:Remove()
v.object = nil
table.clear(v)
end
for i,v in next, this.drawingObjects.drawOffScreen do
v.object:Remove()
v.object = nil
table.clear(v)
end
for i,v in next, this.drawingObjects.drawGeneral do
v.object:Remove()
v.object = nil
table.clear(v)
end
for i = #this.chamsTransConnections, 1, -1 do
local con = _TableRemove(this.chamsTransConnections, i)
if con then
con:Disconnect()
con = nil
end
end
for i = #this.transConnections, 1, -1 do
local con = _TableRemove(this.transConnections, i)
if con then
con:Disconnect()
con = nil
end
end
_Destroy(this.transparencyEvent)
this.healthPercentageSpring = nil
table.clear(this)
Esp.espObjects[player] = nil
this = nil
end
end
playerSpawned:Connect(function(plr, tick)
local this = Esp.espObjects[plr]
if this then
this.chamsadded(plr.Character)
this.onSpawned()
end
end)
end
for i,v in next, _GetPlayers(Players) do
if v ~= LocalPlayer then
_TaskSpawn(Esp.applyEsp, v)
end
end
Players.PlayerAdded:Connect(Esp.applyEsp)
Players.PlayerRemoving:Connect(Esp.removeEsp)
do --Visuals
do --Camera
Flags["ThirdPerson_Enabled"].changed:Connect(function()
if Flags["ThirdPerson_Enabled"].value and Flags["ThirdPerson_Enabled_Key"].value then
RunService:BindToRenderStep("ts", 1, function()
LocalPlayer.CameraMaxZoomDistance = Flags["ThirdPerson_Distance"].value
LocalPlayer.CameraMinZoomDistance = Flags["ThirdPerson_Distance"].value
end)
else
RunService:UnbindFromRenderStep("ts")
for v = 1, 5 do
_Wait()
LocalPlayer.CameraMaxZoomDistance = 0;
LocalPlayer.CameraMinZoomDistance = 0
end;
end
end)
Flags["Remove_Flash"].changed:Connect(function()
LocalPlayer.PlayerGui.Blnd.Blind.Visible = not Flags["Remove_Flash"].value
end)
Flags["ThirdPerson_Enabled_Key"].changed:Connect(function()
if Flags["ThirdPerson_Enabled"].value and Flags["ThirdPerson_Enabled_Key"].value then
RunService:BindToRenderStep("ts", 1, function()
LocalPlayer.CameraMaxZoomDistance = Flags["ThirdPerson_Distance"].value
LocalPlayer.CameraMinZoomDistance = Flags["ThirdPerson_Distance"].value
end)
else
RunService:UnbindFromRenderStep("ts")
for v = 1, 5 do
_Wait()
LocalPlayer.CameraMaxZoomDistance = 0;
LocalPlayer.CameraMinZoomDistance = 0
end;
end
end)
RunService.RenderStepped:Connect(function()
if not Utility.IsPlayerAlive(LocalPlayer.Character) then return end
if Crosshairs.Scope.Visible ~= true or Flags["Camera_ChangeFieldOfViewInScope"].value then
camera.FieldOfView = Flags["Camera_FieldOfView"].value
end
end)
local scopelb = _FindFirstChild(LocalPlayer.PlayerGui.GUI,"ScopeLabel") or _Instancenew("ImageLabel")
scopelb.Name = "ScopeLabel"
scopelb.BackgroundTransparency = 1
scopelb.AnchorPoint = _Vector2New(0.5, 0.501)
scopelb.Position = _UDim2New(0.5, 0, 0.501, 0)
scopelb.Size = _UDim2New(0, 255, 0, 227)
scopelb.ZIndex = 99999
scopelb.Image = "rbxassetid://89734938358129"
scopelb.ImageTransparency = 1
scopelb.Visible = false
scopelb.Parent = LocalPlayer.PlayerGui.GUI
local fadeInInfo = _TweenInfonew(0.22, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local fadeOutInfo = _TweenInfonew(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.In)
local fadeId, fadeMode = 0, 0
function fade(target, info, transparency, visibleOnEnd)
fadeId += 1
local thisId = fadeId
fadeMode = transparency == 0 and 1 or 2
if transparency == 0 then scopelb.Visible = true end
local tween = TweenService:Create(target, info, {ImageTransparency = transparency})
tween:Play()
tween.Completed:Once(function()
if fadeId == thisId then
if visibleOnEnd ~= nil then target.Visible = visibleOnEnd end
fadeMode = 0
end
end)
end
local lastVisible = false
Flags["Scope_Changer_Type"].changed:Connect(function()
if Flags["Scope_Changer_Type"].value["ahueno"] then
scopelb.Image = "rbxassetid://89734938358129"
elseif Flags["Scope_Changer_Type"].value["pizdec"] then
scopelb.Image = "rbxassetid://94612942804832"
else
scopelb.Image = "rbxassetid://99619927433581"
end
end)
RunService.Heartbeat:Connect(function()
Crosshairs.Scope.Scope.Visible = not Flags["Scope_Changer"].value
local visible = Crosshairs.Frame1.Visible
if visible ~= lastVisible and Flags["Scope_Changer"].value then
lastVisible = visible
if fadeMode == 0 then
if visible then
fade(scopelb, fadeInInfo, 0)
else
fade(scopelb, fadeOutInfo, 1, false)
end
else
fadeId += 1
if visible then
fade(scopelb, fadeInInfo, 0)
else
fade(scopelb, fadeOutInfo, 1, false)
end
end
end
end)
end
Visuals.defaultlighting = {
["de_dust2"] = {
Ambient = _Color3FromRGB(90, 74, 62),
OutdoorAmbient = _Color3FromRGB(165, 156, 140),
ClockTime = 13
},
["de_seaside"] = {
Ambient = _Color3FromRGB(211, 237, 255),
OutdoorAmbient = _Color3FromRGB(180, 180, 180),
ClockTime = 14
},
["de_train"] = {
Ambient = _Color3FromRGB(130, 118, 95),
OutdoorAmbient = _Color3FromRGB(163, 161, 146),
ClockTime = 9.5
},
["de_mirage"] = {
Ambient = _Color3FromRGB(214, 214, 214),
OutdoorAmbient = _Color3FromRGB(165, 156, 140),
ClockTime = 15
},
["de_cache"] = {
Ambient = _Color3FromRGB(214, 214, 214),
OutdoorAmbient = _Color3FromRGB(165, 156, 140),
ClockTime = 14
},
["de_nuke"] = {
Ambient = _Color3FromRGB(90, 74, 62),
OutdoorAmbient = _Color3FromRGB(165, 156, 140),
ClockTime = 13
},
["de_vertigo"] = {
Ambient = _Color3FromRGB(255, 255, 255),
OutdoorAmbient = _Color3FromRGB(255, 255, 255),
ClockTime = 15
},
["de_inferno"] = {
Ambient = _Color3FromRGB(130, 118, 95),
OutdoorAmbient = _Color3FromRGB(163, 161, 146),
ClockTime = 9.5
},
["de_aztec"] = {
Ambient = _Color3FromRGB(149, 175, 179),
OutdoorAmbient = _Color3FromRGB(149, 159, 191),
ClockTime = 15
}
}
Visuals.crosshair = {
drawingObjects = {
outlines = {},
objects = {}
},
currentaddedrotation = 0,
currentrotation = 0,
screenPosition = camera.ViewportSize / 2,
targetScreenPosition = camera.ViewportSize / 2
}
for i = 1, 4 do
Visuals.crosshair.drawingObjects.outlines[i] = Esp.createDrawing("Line", {
Thickness = 3,
Color = _Color3New(0, 0, 0),
Transparency = 1,
Visible = true
})
Visuals.crosshair.drawingObjects.objects[i] = Esp.createDrawing("Line", {
Thickness = 1,
Color = _Color3New(1, 1, 1),
Transparency = 1,
Visible = true
})
end
local function GetClosestTargetWorld()
local center = camera.ViewportSize / 2
local best, bestDist = nil, math.huge
for _, plr in ipairs(Players:GetPlayers()) do
local info = PlayerModule.storage[plr]
if plr ~= LocalPlayer and info.alive and info.enemy then
local char = plr.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
local sp = camera:WorldToViewportPoint(hrp.Position)
local dist = (Vector2.new(sp.X, sp.Y) - center).Magnitude
if dist < bestDist then
bestDist = dist
best = hrp.Position
end
end
end
return best
end
RunService.Stepped:Connect(function(_, deltaTime)
if not Flags["Custom_Crosshair"].value then
for i = 1, 4 do
Visuals.crosshair.drawingObjects.objects[i].Visible = false
Visuals.crosshair.drawingObjects.outlines[i].Visible = false
end
return
end
for _, frame in next, _GetChildren(Crosshairs.Crosshair) do
if not _IsA(frame, "ImageLabel") then
frame.BackgroundTransparency = 1
end
end
local center = camera.ViewportSize / 2
local targetWorld = Flags["Crosshair_At_Target"].value and GetClosestTargetWorld() or nil
if targetWorld then
local sp, onScreen = camera:WorldToViewportPoint(targetWorld)
local raw = Vector2.new(sp.X, sp.Y)
if onScreen or not Flags["Crosshair_OutOfView"].value then
Visuals.crosshair.targetScreenPosition = raw
else
local dir = (raw - center).Unit
local radius = math.min(center.X, center.Y) - Flags["Crosshair_Edge_Offset"].value
Visuals.crosshair.targetScreenPosition = center + dir * radius
end
else
Visuals.crosshair.targetScreenPosition = center
end
Visuals.crosshair.screenPosition =
Visuals.crosshair.screenPosition:Lerp(
Visuals.crosshair.targetScreenPosition,
math.clamp(deltaTime * Flags["Crosshair_Smoothness"].value, 0, 1)
)
local screenPos = Visuals.crosshair.screenPosition
local scopeVisible = Crosshairs.Scope.Visible
for i = 1, 4 do
local obj = Visuals.crosshair.drawingObjects.objects[i]
local out = Visuals.crosshair.drawingObjects.outlines[i]
obj.Visible = true
obj.Color = Flags["Custom_Crosshair_Color1"].color
obj.Thickness = Flags["Crosshair_Thickness"].value
obj.Transparency = scopeVisible and 0 or 1
out.Visible = Flags["Crosshair_Outlines"].value
out.Thickness = Flags["Crosshair_Thickness"].value + Flags["Crosshair_Outline_Size"].value
out.Transparency = scopeVisible and 0 or 1
end
local animated = Flags["Impulse_Crosshair"].value
local t = (math.sin(tick() * Flags["Cycle_Speed"].value) + 1) * 0.5
local speed = animated
and (Flags["Minimum_Speed"].value + (Flags["Maximum_Speed"].value - Flags["Minimum_Speed"].value) * t)
or Flags["Crosshair_Rotation_Speed"].value
local scale = animated
and (Flags["Minimum_Length"].value + (Flags["Maximum_Length"].value - Flags["Minimum_Length"].value) * t)
or 1
local width = Flags["Crosshair_Width"].value * scale
local length = Flags["Crosshair_Length"].value * scale
local widthGap = Flags["Crosshair_Width_Gap"].value * scale
local lengthGap = Flags["Crosshair_Length_Gap"].value * scale
Visuals.crosshair.currentaddedrotation += speed * deltaTime
Visuals.crosshair.currentrotation =
math.rad(Flags["Crosshair_Rotation"].value + Visuals.crosshair.currentaddedrotation)
local angle = Visuals.crosshair.currentrotation
local offset = Flags["Crosshair_Outline_Offset"].value
local function setLines(i, dx, dy, gap, size)
local dir = Vector2.new(dx, dy)
local from = dir * gap
local to = from + dir * size
local of = from - dir.Unit * offset
local ot = to + dir.Unit * offset
local o1 = Visuals.crosshair.drawingObjects.objects[i]
local l1 = Visuals.crosshair.drawingObjects.outlines[i]
o1.From = screenPos - from
o1.To = screenPos - to
l1.From = screenPos - of
l1.To = screenPos - ot
local o2 = Visuals.crosshair.drawingObjects.objects[i + 1]
local l2 = Visuals.crosshair.drawingObjects.outlines[i + 1]
o2.From = screenPos + from
o2.To = screenPos + to
l2.From = screenPos + of
l2.To = screenPos + ot
end
setLines(1, math.sin(angle), math.cos(angle), lengthGap, length)
setLines(3, math.sin(angle + math.pi / 2), math.cos(angle + math.pi / 2), widthGap, width)
end)
Flags["Custom_Crosshair"].changed:Connect(function()
if not Flags["Custom_Crosshair"].value and not Flags["ThirdPerson_Enabled"].value and Flags["ThirdPerson_Enabled_Key"].value then
for _, frame in next, _GetChildren(Crosshairs.Crosshair) do
if not _IsA(frame, "ImageLabel") then
frame.BackgroundTransparency = 0
end
end
end
end)
local textures = {
"rbxassetid://304777684",
"rbxassetid://419625073"
}
local model, handle, highlight = nil, nil, nil
local angle, spin = 0, 0
local lastAssetId = 0
function Visuals.destroyAccessory()
if model then
_Pcall(function() _Destroy(model) end)
model = nil
end
if handle then
_Pcall(function() _Destroy(handle) end)
handle = nil
end
highlight = nil
end
function Visuals.applyHighlight()
if highlight then
_Pcall(function() _Destroy(highlight) end)
highlight = nil
end
if not handle or not _IsA(handle, "BasePart") or not _IsDescendantOf(handle, workspace) then return end
local h = _Instancenew("Highlight")
h.Name = "AccessoryHighlight"
h.Adornee = handle
h.Enabled = Flags.Accessory_Highlight_Enabled.value
h.FillColor = Flags.Accessory_Highlight_FillColor.color
h.OutlineColor = Flags.Accessory_Highlight_OutlineColor.color
h.FillTransparency = Flags.Accessory_Highlight_FillTransparency.value/10
h.OutlineTransparency = Flags.Accessory_Highlight_OutlineTransparency.value/10
h.Parent = handle
highlight = h
end
function Visuals.loadAccessory()
Visuals.destroyAccessory()
local rawId = Flags.Accessory_ID.value
local assetId = _tonumber(rawId)
if not assetId or assetId <= 0 then
return
end
local success, asset = _Pcall(function()
return game:GetObjects("rbxassetid://" .. assetId)[1]
end)
if not success or _Typeof(asset) ~= "Instance" then
return
end
local part = _FindFirstChild(asset, "Handle", true)
if not part or not _IsA(part, "BasePart") then
return
end
part.Anchored = true
part.CanCollide = false
part.Transparency = 0
part.Parent = workspace
model = asset
handle = part
Visuals.applyHighlight()
end
RunService.RenderStepped:Connect(function(dt)
local currentId = _tonumber(Flags.Accessory_ID.value)
if currentId ~= lastAssetId then
lastAssetId = currentId or 0
Visuals.loadAccessory()
end
if not Flags.Accessory_Enabled.value then
if handle then handle.Transparency = 1 end
if highlight then highlight.Enabled = false end
return
end
if not handle or not _IsDescendantOf(handle, workspace) then
Visuals.loadAccessory()
return
end
local root = LocalPlayer.Character and _FindFirstChild(LocalPlayer.Character, "HumanoidRootPart")
if not root then return end
handle.Transparency = 0
if highlight then
highlight.Enabled = Flags.Accessory_Highlight_Enabled.value
highlight.FillColor = Flags.Accessory_Highlight_FillColor.color
highlight.OutlineColor = Flags.Accessory_Highlight_OutlineColor.color
highlight.FillTransparency = Flags.Accessory_Highlight_FillTransparency.value/10
highlight.OutlineTransparency = Flags.Accessory_Highlight_OutlineTransparency.value/10
end
angle += Flags.Accessory_Rotation_Speed.value * dt
spin += Flags.Accessory_Spin_Speed.value * dt
local orbit = _Vector3New(
_MathCos(_MathRad(angle)) * Flags.Accessory_Distance.value,
Flags.Accessory_Height,
_MathSin(_MathRad(angle)) * Flags.Accessory_Distance.value
)
handle.Position = root.Position + orbit
handle.Orientation = Flags.Accessory_Spin_ItSelf.value and _Vector3New(0, spin % 360, 0) or Vector3.zero
end)
_Instancenew("BloomEffect", camera)
local customAtmosphere = _Instancenew("Atmosphere", Lighting)
local updateWorldColorStop = _Tick()
function Visuals.updateworldcolor()
for i, v in next, (_GetChildren(Lighting)) do
if v.Name == "Atmosphere" then
if v ~= customAtmosphere then
_Destroy(v)
end
end
end
if _Tick() - updateWorldColorStop < 1/20 then
return
end
updateWorldColorStop = _Tick()
if Flags["Ambience_Enabled"].value then
Lighting.OutdoorAmbient = Flags["Ambience_Color"].color
Lighting.Ambient = Flags["Ambience_Color"].color
else
if _FindFirstChild(workspace, "Map") and _FindFirstChild(workspace.Map, "Origin") then
if Visuals.defaultlighting[workspace.Map.Origin.Value] ~= nil then
for i, v in next, (Visuals.defaultlighting[workspace.Map.Origin.Value]) do
Lighting[i] = v
end
end
else
Lighting.OutdoorAmbient = _Color3New(0.647059, 0.611765, 0.54902)
Lighting.Ambient = _Color3New(0.509804, 0.462745, 0.372549)
end
end
if Flags["Force_Time"].value then
Lighting.ClockTime = Flags["Force_TimeValue"].value
else
Lighting.ClockTime = 9
end
if Flags["Custom_Saturation"].value then
camera.ColorCorrection.TintColor = Flags["Custom_SaturationColor"].color
camera.ColorCorrection.Saturation = Flags["Custom_SaturationValue"].value / 100
else
camera.ColorCorrection.Saturation = 0
camera.ColorCorrection.TintColor = _Color3New(1, 1, 1)
end
camera.Bloom.Enabled = Flags["Custom_Bloom"].value
if Flags["Custom_Bloom"].value then
camera.Bloom.Intensity = Flags["Custom_BloomIntensity"].value / 100
camera.Bloom.Size = Flags["Custom_BloomSize"].value * 14 / 25
camera.Bloom.Threshold = Flags["Custom_BloomThreshold"].value / 400
else
camera.Bloom.Intensity = 0
camera.Bloom.Size = 0
camera.Bloom.Threshold = 0
end
if Flags["Custom_Atmosphere"].value then
customAtmosphere.Color = Flags["Atmosphere_Color1"].color
customAtmosphere.Decay = Flags["Atmosphere_Color2"].color
customAtmosphere.Density = Flags["Custom_AtmosphereDensity"].value / 100
customAtmosphere.Glare = Flags["Custom_AtmosphereGlare"].value / 10
customAtmosphere.Haze = Flags["Custom_AtmosphereHaze"].value / 10
else
customAtmosphere.Density = 0
customAtmosphere.Glare = 0
customAtmosphere.Haze = 0
end
if Flags["Custom_Brightness"].value then
if Flags["Custom_Brightness_Mode"].value["Fullbright"] then
Lighting.Brightness = 1
Lighting.GlobalShadows = false
else
Lighting.Brightness = 0
end
else
Lighting.GlobalShadows = true
Lighting.Brightness = 1
end
end
RunService.Stepped:Connect(Visuals.updateworldcolor)
local function createTrail(character)
local hrp = _FindFirstChild(character, "HumanoidRootPart")
if not hrp then return end
if _FindFirstChild(hrp, "💀😭💀💀😎👌😊😘😘😘😒😒😒🤦♂️🤷♀️🤷♀️🤷♂️🤷♂️") then return end
local att1 = _Instancenew("Attachment")
att1.Name = "💀😭💀💀😎👌😊😘😘😘😒😒😒🤦♂️🤷♀️🤷♀️🤷♂️🤷♂️"
att1.Parent = hrp
local att2 = _Instancenew("Attachment")
att2.Name = "💀😭💀💀😎👌😊😘😘😘😒😒😒🤦♂️🤷♀️🤷♀️🤷♂️"
att2.Parent = hrp
local trail = _Instancenew("Trail")
trail.Name = "💀😭💀💀😎👌😊😘😘😘😒😒😒🤦♂️🤷♀️🤷♀️"
trail.Attachment0 = att1
trail.Attachment1 = att2
trail.Parent = hrp
trail.LightEmission = 1
trail.LightInfluence = 1
trail.MinLength = 0.01
trail.MaxLength = 50
trail.Lifetime = 2
trail.FaceCamera = true
trail.Color = _ColorSequenceNew(Flags["Trail_Color"].color)
trail.Transparency = _NumberSequenceNew(0, 0)
return trail, att1, att2
end
local trail, att1, att2
RunService.RenderStepped:Connect(function()
local character = LocalPlayer.Character
if character and _FindFirstChild(character, "HumanoidRootPart") and Flags["Trail_Enabled"].value then
if not trail or not trail.Parent then
trail, att1, att2 = createTrail(character)
end
if trail then
--retardead codding
local hrp = character.HumanoidRootPart
local ray = _RaycastParamsNew()
ray.FilterDescendantsInstances = {character}
ray.FilterType = Enum.RaycastFilterType.Blacklist
local result = _Raycast(workspace, hrp.Position, _Vector3New(0, -5, 0), ray)
if result then
att1.Position = _Vector3New(0, -(hrp.Position.Y - result.Position.Y), 0)
att2.Position = _Vector3New(0, -(hrp.Position.Y - result.Position.Y) + 0.1, 0)
else
att1.Position = _Vector3New(0, -3, 0)
att2.Position = _Vector3New(0, -2.9, 0)
end
trail.Color = _ColorSequenceNew(Flags["Trail_Color"].color)
trail.MaxLength = Flags["Trail_MaxSize"].value
trail.Lifetime = Flags["Trail_LifeTime"].value
trail.Transparency = _NumberSequenceNew(Flags["Trail_Enabled"].value and 0 or 1, Flags["Trail_Enabled"].value and 0 or 1)
end
end
end)
LocalPlayer.CharacterAdded:Connect(function(char)
char:WaitForChild("HumanoidRootPart")
trail, att1, att2 = createTrail(char)
end)
end
do --Misc
Misc.hitsound = _Instancenew("Sound", camera)
Misc.olddamage = 0
Misc.killsound = _Instancenew("Sound", camera)
Misc.oldkills = 0
Misc.fakehrp = nil
Misc.realhrp = nil
Misc.lasthrpCf = _CFrameNew()
Misc.hrpfix = nil
Misc.lastreplicationtick = _Tick()
function Misc.setupfakehrp(char)
local oldhrp = char:WaitForChild("HumanoidRootPart", 1/0)
Misc.realhrp = oldhrp
Misc.lasthrpCf = Misc.realhrp.CFrame
Misc.fakehrp = _Clone(oldhrp)
Misc.realhrp.Name = "___"
Misc.fakehrp.Name = "HumanoidRootPart"
Misc.fakehrp.Parent = char
cache.replace(Misc.realhrp, Misc.fakehrp)
Misc.fakehrp.CFrame = Misc.lasthrpCf
Misc.realhrp.CFrame = Misc.lasthrpCf
end
RunService.Stepped:Connect(function(delta)
local char = LocalPlayer.Character
if not Misc.realhrp or not Misc.fakehrp or not char then
return
end
Misc.realhrp.CFrame = Misc.lasthrpCf
Misc.realhrp.AssemblyLinearVelocity = _Vector3New()
end)
function Misc.removefakehrp()
if Misc.fakehrp == nil then return end
Misc.fakehrp.Name = "___"
Misc.realhrp.CFrame = Misc.fakehrp.CFrame
Misc.realhrp.Name = "HumanoidRootPart"
_Destroy(Misc.fakehrp)
Misc.fakehrp = nil
Misc.realhrp = nil
end
if LocalPlayer.Character then
Misc.setupfakehrp(LocalPlayer.Character)
end
LocalPlayer.CharacterAdded:Connect(function()
repeat _TaskWait() until LocalPlayer.Character and _FindFirstChild(LocalPlayer.Character, "Humanoid") and LocalPlayer.Character.Humanoid.Health > 0
_TaskWait(.1)
if LocalPlayer.Character and _FindFirstChild(LocalPlayer.Character, "HumanoidRootPart") then
Misc.setupfakehrp(LocalPlayer.Character)
end
end)
LocalPlayer.CharacterRemoving:Connect(Misc.removefakehrp)
local gui = _Instancenew("ScreenGui", LocalPlayer.PlayerGui)
gui.IgnoreGuiInset = true
gui.ResetOnSpawn = false
function createSide(side)
local frame = Instance.new("Frame")
frame.AnchorPoint = Vector2.new(side == "Left" and 0 or 1, 0)
frame.Position = UDim2.fromScale(side == "Left" and 0 or 1, 0)
frame.Size = UDim2.fromScale(0.45, 1)
frame.BackgroundColor3 = Color3.new(1,1,1)
frame.BackgroundTransparency = 1
frame.BorderSizePixel = 0
frame.Parent = gui
local gradient = Instance.new("UIGradient")
gradient.Rotation = side == "Left" and 0 or 180
gradient.Color = ColorSequence.new{
ColorSequenceKeypoint.new(0, Color3.new(1,1,1)),
ColorSequenceKeypoint.new(1, Color3.new(1,1,1))
}
gradient.Transparency = NumberSequence.new{
NumberSequenceKeypoint.new(0, 0),
NumberSequenceKeypoint.new(1, 1)
}
gradient.Parent = frame
return frame
end
RunService.Stepped:Connect(function()
local delayedcf
if not Misc.fakehrp or not Misc.realhrp or not LocalPlayer.Character and Utility:IsPlayerAlive(LocalPlayer.Character) then
return
end
local fakehrp = Misc.fakehrp
if fakehrp then
delayedcf = fakehrp.CFrame
if Flags["AntiAim_Enabled"].value and Flags["AntiAim_In_Gravity"].value then
local velocity = fakehrp.Velocity.Magnitude
local baseSpin = _MathRad(Flags["AntiAim_In_Gravity_BaseSpin"].value)
local maxSpin = _MathRad(Flags["AntiAim_In_Gravity_MaximumSpin"].value)
local spinSpeed = Flags["AntiAim_In_Gravity_Speed"].value
local speedFactor = _MathClamp(velocity / 16, 0, 1)
local t = _Tick()
local spinRange = baseSpin + (maxSpin - baseSpin) * speedFactor
local x = _MathSin(t * spinSpeed) * spinRange
local y = _MathCos(t * spinSpeed * 0.6) * spinRange
local z = _MathSin(t * spinSpeed * 0.3) * spinRange
local spinRotation = _CFrameAngles(x, y, z)
delayedcf = delayedcf * spinRotation
end
if Flags["AntiAim_СFrame_Manipulation"].value then
delayedcf = delayedcf * _CFrameNew(Flags["AntiAim_СFrame_Manipulation_X"].value, Flags["AntiAim_СFrame_Manipulation_Y"].value, Flags["AntiAim_СFrame_Manipulation_Z"].value)
delayedcf = delayedcf * _CFrameAngles(_MathRad(Flags["AntiAim_СFrame_Manipulation_X_Angles"].value), _MathRad(Flags["AntiAim_СFrame_Manipulation_Y_Angles"].value), _MathRad(Flags["AntiAim_СFrame_Manipulation_Z_Angles"].value) )
end
if Flags["FakeLags_Enabled"].value then
_TaskWait(Flags["FakeLags_Ticks"].value/1000)
local limit = Flags["FakeLags_Limit"].value / 64
local timesincelastrefresh = _Tick() - Misc.lastreplicationtick
if timesincelastrefresh < limit then
return
end
end
if Flags["FakeLags_PreventReplication"].value and Flags["FakeLags_PreventReplication_Key"].value then return end
Misc.lasthrpCf = delayedcf
Misc.lastreplicationtick = _Tick()
end
if _FindFirstChild(LocalPlayer.Character, "HeadHB") and _FindFirstChild(LocalPlayer.Character, "FakeHead") then
if not _FindFirstChild(LocalPlayer.Character.HeadHB,"Weld") and not _FindFirstChild(LocalPlayer.Character.FakeHead, "Weld") then
LocalPlayer.Character.FakeHead.AssemblyLinearVelocity = _Vector3New(0, 0, 0)
LocalPlayer.Character.HeadHB.AssemblyLinearVelocity = _Vector3New(0, 0, 0)
LocalPlayer.Character.FakeHead.CFrame = LocalPlayer.Character.Head.CFrame
LocalPlayer.Character.HeadHB.CFrame = LocalPlayer.Character.Head.CFrame
end
end
end)
Flags["Remove_Scope"].changed:Connect(function()
for i, v in next, (_GetChildren(Crosshairs)) do
if v.Name:match("Frame") then
v.BackgroundTransparency = Flags["Remove_Scope"].value and 1 or 0
elseif v.Name:match("Scope") then
v.ImageTransparency = Flags["Remove_Scope"].value and 1 or 0
end
end
end)
function Misc.hitplayer()
if LocalPlayer.Additionals.TotalDamage.Value > Misc.olddamage then
if Flags["HitSounds_Enabled"].value then
local hitsoundID = Flags["HitSounds_Ids"].value
if hitsoundID["Skeet"] then hitsoundID = '5447626464'
elseif hitsoundID["Overwatch"] then hitsoundID = '18410058858'
elseif hitsoundID["Rust"] then hitsoundID = '5043539486'
elseif hitsoundID["Minecraft"] then hitsoundID = '7273736372'
elseif hitsoundID["Minecraft XP"] then hitsoundID = '1053296915'
elseif hitsoundID["Retro loud"] then hitsoundID = '3976061026'
elseif hitsoundID["Matchine gun"] then hitsoundID = '17705555617'
elseif hitsoundID["Ray"] then hitsoundID = '131179973'
elseif hitsoundID["Cod"] then hitsoundID = '160432334'
elseif hitsoundID["Beautiful"] then hitsoundID = '5709456554'
elseif hitsoundID["Killingspree"] then hitsoundID = '937898383'
elseif hitsoundID["Squash"] then hitsoundID = '3466981613'
elseif hitsoundID["Supersmash"] then hitsoundID = '2039907664'
elseif hitsoundID["CSGO"] then hitsoundID = '7269900245'
elseif hitsoundID["Slap"] then hitsoundID = '4888372697'
elseif hitsoundID["MCOOF"] then hitsoundID = '5869422451'
elseif hitsoundID["Quek"] then hitsoundID = '4868633804'
elseif hitsoundID["Epic"] then hitsoundID = '7344303740'
elseif hitsoundID["Osu"] then hitsoundID = '7149919358'
elseif hitsoundID["TF2 Pan"] then hitsoundID = '3431749479'
elseif hitsoundID["1"] then hitsoundID = '7349055654'
elseif hitsoundID["Godlike"] then hitsoundID = '7463103082'
elseif hitsoundID["Ownage"] then hitsoundID = '6887181639'
elseif hitsoundID["Ultrakill"] then hitsoundID = '937885646'
elseif hitsoundID["Win"] then hitsoundID = '341542437'
elseif hitsoundID["Denied"] then hitsoundID = '7356986865'
elseif hitsoundID["Lessgo"] then hitsoundID = '6782594987'
elseif hitsoundID["Headshot"] then hitsoundID = '5764885927'
elseif hitsoundID["Bruh"] then hitsoundID = '535690488'
elseif hitsoundID["Bag"] then hitsoundID = '364942410'
elseif hitsoundID["Baimware"] then hitsoundID = '6607339542'
elseif hitsoundID["Neverlose"] then hitsoundID = '6607204501'
elseif hitsoundID["Pop"] then hitsoundID = '105543133746827'
elseif hitsoundID["Bass"] then hitsoundID = '12221944'
elseif hitsoundID["Electro"] then hitsoundID = '3458224686'
elseif hitsoundID["TF2"] then hitsoundID = '3455144981'
elseif hitsoundID["Percussion"] then hitsoundID = '3466985670'
elseif hitsoundID["Osu Mint"] then hitsoundID = '81883450827543'
elseif hitsoundID["Rocket"] then hitsoundID = '9087976483'
elseif hitsoundID["Vine Boom"] then hitsoundID = '9088081730'
elseif hitsoundID["Snap"] then hitsoundID = '93172144688075'
elseif hitsoundID["Vortex"] then hitsoundID = '3466980212'
elseif hitsoundID["Pow"] then hitsoundID = '3516546035'
elseif hitsoundID["Bell"] then hitsoundID = '97724019712141'
elseif hitsoundID["Retro"] then hitsoundID = '3466984142'
elseif hitsoundID["Fatality"] then hitsoundID = '115982072912004'
elseif hitsoundID["Beepo"] then hitsoundID = '3466987025'
end
Misc.hitsound.SoundId = "rbxassetid://" .. hitsoundID
Misc.hitsound.Volume = Flags["HitSounds_Volume"].value / 10
Misc.hitsound:Play()
end
end
Misc.olddamage = LocalPlayer.Additionals.TotalDamage.Value
end
LocalPlayer.Additionals.TotalDamage.Changed:Connect(Misc.hitplayer)
function Misc.killplayer()
if LocalPlayer.Status.Kills.Value > Misc.oldkills then
if Flags["HitEffectsEnabled"].value and Flags["HitEffects_Blinding"].value then
print(1)
local left = createSide("Left")
local right = createSide("Right")
local tweenInInfo = TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local tweenOutInfo = TweenInfo.new(0.8, Enum.EasingStyle.Quad, Enum.EasingDirection.In)
local tweenInLeft = TweenService:Create(left, tweenInInfo, { BackgroundTransparency = 0.2 })
local tweenInRight = TweenService:Create(right, tweenInInfo, { BackgroundTransparency = 0.2 })
tweenInLeft:Play()
tweenInRight:Play()
_TaskWait(0.6)
local tweenOutLeft = TweenService:Create(left, tweenOutInfo, { BackgroundTransparency = 1 })
local tweenOutRight = TweenService:Create(right, tweenOutInfo, { BackgroundTransparency = 1 })
tweenOutLeft:Play()
tweenOutRight:Play()
tweenOutLeft.Completed:Once(function()
if left then left:Destroy() end
end)
tweenOutRight.Completed:Once(function()
if right then right:Destroy() end
end)
end
if Flags["KillSounds_Enabled"].value then
local killsoundID = Flags["KillSounds_Ids"].value
if killsoundID["Skeet"] then killsoundID = '5447626464'
elseif killsoundID["Overwatch"] then killsoundID = '18410058858'
elseif killsoundID["Rust"] then killsoundID = '5043539486'
elseif killsoundID["Monster kill"] then killsoundID = '130772284'
elseif killsoundID["Minecraft"] then killsoundID = '7273736372'
elseif killsoundID["Minecraft XP"] then killsoundID = '1053296915'
elseif killsoundID["Retro loud"] then killsoundID = '3976061026'
elseif killsoundID["Matchine gun"] then killsoundID = '17705555617'
elseif killsoundID["Ray"] then killsoundID = '131179973'
elseif killsoundID["Cod"] then killsoundID = '160432334'
elseif killsoundID["Beautiful"] then killsoundID = '5709456554'
elseif killsoundID["Killingspree"] then killsoundID = '937898383'
elseif killsoundID["Squash"] then killsoundID = '3466981613'
elseif killsoundID["Supersmash"] then killsoundID = '2039907664'
elseif killsoundID["CSGO"] then killsoundID = '7269900245'
elseif killsoundID["Slap"] then killsoundID = '4888372697'
elseif killsoundID["MCOOF"] then killsoundID = '5869422451'
elseif killsoundID["Quek"] then killsoundID = '4868633804'
elseif killsoundID["Epic"] then killsoundID = '7344303740'
elseif killsoundID["Osu"] then killsoundID = '7149919358'
elseif killsoundID["TF2 Pan"] then killsoundID = '3431749479'
elseif killsoundID["1"] then killsoundID = '7349055654'
elseif killsoundID["Godlike"] then killsoundID = '7463103082'
elseif killsoundID["Ownage"] then killsoundID = '6887181639'
elseif killsoundID["Ultrakill"] then killsoundID = '937885646'
elseif killsoundID["Win"] then killsoundID = '341542437'
elseif killsoundID["Denied"] then killsoundID = '7356986865'
elseif killsoundID["Lessgo"] then killsoundID = '6782594987'
elseif killsoundID["Headshot"] then killsoundID = '5764885927'
elseif killsoundID["Bruh"] then killsoundID = '535690488'
elseif killsoundID["Bag"] then killsoundID = '364942410'
elseif killsoundID["Baimware"] then killsoundID = '6607339542'
elseif killsoundID["Neverlose"] then killsoundID = '6607204501'
elseif killsoundID["Pop"] then killsoundID = '105543133746827'
elseif killsoundID["Bass"] then killsoundID = '12221944'
elseif killsoundID["Electro"] then killsoundID = '3458224686'
elseif killsoundID["TF2"] then killsoundID = '3455144981'
elseif killsoundID["Percussion"] then killsoundID = '3466985670'
elseif killsoundID["Osu Mint"] then killsoundID = '81883450827543'
elseif killsoundID["Rocket"] then killsoundID = '9087976483'
elseif killsoundID["Vine Boom"] then killsoundID = '9088081730'
elseif killsoundID["Snap"] then killsoundID = '93172144688075'
elseif killsoundID["Vortex"] then killsoundID = '3466980212'
elseif killsoundID["Pow"] then killsoundID = '3516546035'
elseif killsoundID["Bell"] then killsoundID = '97724019712141'
elseif killsoundID["Retro"] then killsoundID = '3466984142'
elseif killsoundID["Fatality"] then killsoundID = '115982072912004'
elseif killsoundID["Beepo"] then killsoundID = '3466987025'
end
Misc.killsound.SoundId = "rbxassetid://" .. killsoundID
Misc.killsound.Volume = Flags["KillSounds_Volume"].value / 10
Misc.killsound:Play()
end
end
Misc.oldkills = LocalPlayer.Status.Kills.Value
end
RunService.Heartbeat:Connect(function()
if Flags["Inf_Ammo"].value then
Utility.Weapon:UpdateAmmo(9999999)
Utility.Weapon:UpdateStoredAmmo(9999999)
end
end)
LocalPlayer.Status.Kills.Changed:Connect(Misc.killplayer)
function Misc.GiveSecondaryWeapon(name)
Cache.Client.special2 = false
Cache.Client.special = false
Cache.Client.secondary = name
Cache.Client.secondaryowner = LocalPlayer.Name
Cache.Client.secondaryskin = "Stock"
Cache.Client.secondarystattrak = nil
Utility.Weapon:UpdateAmmo(9999999)
Utility.Weapon:UpdateStoredAmmo(9999999)
Cache.Client.equipped = "secondary"
Cache.Client.gun = replicatedStorage.Weapons[Cache.Client.secondary]
Cache.Client.fgun = replicatedStorage.Weapons[Cache.Client.secondary]
Cache.Client.updateInventory()
end
function Misc.GivePrimaryWeapon(name)
Cache.Client.special = false
Cache.Client.realgun = name
Cache.Client.primary = name
Cache.Client.primaryowner = LocalPlayer.Name
Cache.Client.primaryskin = "Stock"
Cache.Client.primarystattrak = nil
Utility.Weapon:UpdateAmmo(9999999)
Utility.Weapon:UpdateStoredAmmo(9999999)
Cache.Client.equipped = "primary"
Cache.Client.gun = replicatedStorage.Weapons[Cache.Client.primary]
Cache.Client.fgun = replicatedStorage.Weapons[Cache.Client.primary]
Cache.Client.updateInventory()
end
function Misc.CreateGunModel(GunName)
local gun = replicatedStorage.Weapons[GunName]
local weaponinhand = _Clone(gun.Model)
weaponinhand.Parent = LocalPlayer.Character
local gunweld = _Instancenew("Motor6D")
gunweld.Parent = weaponinhand
gunweld.Part0 = LocalPlayer.Character["RightHand"]
gunweld.Part1 = weaponinhand
gunweld.Name = "GunWeld"
weaponinhand.Name = "Gun"
if gun.Name == "DualBerettas" then
local weaponinhand2 = _Clone(gun.Model2)
weaponinhand2.Parent = LocalPlayer.Character
local gunweld = _Instancenew("Motor6D")
gunweld.Parent = weaponinhand2
gunweld.Part0 = LocalPlayer.Character["LeftHand"]
gunweld.Part1 = weaponinhand2
gunweld.Name = "GunWeld"
weaponinhand2.Name = "Gun2"
end
local string = _Instancenew("StringValue")
string.Parent = weaponinhand
string.Name = "AnimateValue"
if gun.Name == "MP7" then
gunweld.C0 = _CFrameNew(0.15, 0, 0.15)
end
if gun.Name == "Negev" then
gunweld.C0 = _CFrameNew(-0.15, 0, 0.3)
end
if gun.Name == "Bizon" then
gunweld.C0 = _CFrameNew(0.3, -0.45, 0.15) * _CFrameAngles(_MathRad(-45), _MathRad(50), _MathRad(200))
end
if gun.Name == "T Knife" or gun.Name == "CT Knife" then
gunweld.C1 = _CFrameAngles(0, 0, _MathRad(180))
end
if gun.Name == "Scout" or gun.Name == "AWP" or gun.Name == "G3SG1" then
gunweld.Part0 = LocalPlayer.Character["LeftHand"]
gunweld.C0 = _CFrameNew(0.5, -0.6, -0.5) * _CFrameAngles(_MathRad(155), _MathRad(0), _MathRad(-75))
end
end
RunService.RenderStepped:Connect(function()
if not Utility.IsPlayerAlive(LocalPlayer.Character) then return end
local SecondaryToGive = Flags["Spawn_Weapons_Secondary"].value
local PrimaryToGive = Flags["Spawn_Weapons_Primary"].value
for i,v in pairs(PrimaryToGive) do
if v then
if i ~= Cache.Client.realgun and Flags["Spawn_Weapons"].value then
Misc.GivePrimaryWeapon(i)
end
if Cache.Client.equipped == "primary" and not _FindFirstChild(LocalPlayer.Character, "Gun") and Flags["Spawn_Weapons"] then
Misc.CreateGunModel(i)
elseif _FindFirstChild(LocalPlayer.Character, "Gun") and not Cache.Client.equipped == "primary" then
_Destroy(_FindFirstChild(LocalPlayer.Character, "Gun"))
end
end
end
for i,v in pairs(SecondaryToGive) do
if v then
if i ~= Cache.Client.secondary and Flags["Spawn_Weapons"].value then
Misc.GiveSecondaryWeapon(i)
end
if Cache.Client.equipped == "secondary" and not _FindFirstChild(LocalPlayer.Character, "Gun") and Flags["Spawn_Weapons"] then
Misc.CreateGunModel(i)
elseif _FindFirstChild(LocalPlayer.Character, "Gun") and not Cache.Client.equipped == "secondary" then
_Destroy(_FindFirstChild(LocalPlayer.Character, "Gun"))
end
end
end
end)
function ChangeCharacter()
if Flags["Custom_Character"].value then
if Flags["Custom_Character_Value"].value["Custom"] then
Utility.SetCharacterByUserId(Flags["Character_Changer_Value_Custom"].value)
else
Utility.SetCharacter(_FindFirstChild(ChrModels, (function()
for i, v in pairs(Flags["Custom_Character_Value"].value) do
if v then
return i
end
end
end)()))
end
end
end
Flags["Custom_Character"].changed:Connect(ChangeCharacter)
Flags["Custom_Character_Value"].changed:Connect(ChangeCharacter)
Flags["Character_Changer_Value_Custom"].changed:Connect(ChangeCharacter)
LocalPlayer.CharacterAdded:Connect(function(char)
repeat
_TaskWait(.5)
until char and _FindFirstChild(char, "Humanoid") and char.Humanoid.Health > 0 and _FindFirstChild(char, "Gun") and _FindFirstChild(char, "Head") and _FindFirstChild(char, "HumanoidRootPart")
ChangeCharacter()
Utility.LocalPlayerChams()
end)
end
end
local emitter = _Instancenew("ParticleEmitter", ScriptCacheFolder)
emitter.Name = "Explosion"
emitter.Enabled = false
emitter.Acceleration = _Vector3New(0, -3, 0)
emitter.RotSpeed = NumberRange.new(-80, 80)
emitter.VelocitySpread = 360
emitter.Texture = "rbxassetid://7112395588"
emitter.Drag = 13
emitter.Rate = 10
emitter.LightEmission = 1
emitter.LightInfluence = 1
emitter.Rotation = NumberRange.new(0, 360)
emitter.Lifetime = NumberRange.new(0.6, 1.2)
emitter.Speed = NumberRange.new(40)
emitter.SpreadAngle = _Vector2New(360, 360)
emitter.LockedToPart = true
emitter.Size = _NumberSequenceNew({
_NumberSequenceKeypointNew(0, 0.25, 0),
_NumberSequenceKeypointNew(0.7003440260887146, 0.1875, 0),
_NumberSequenceKeypointNew(1, 0, 0)
})
local RNG = Random.new();
local Colors = {
Color3.fromRGB(255, 49, 49),
Color3.fromRGB(255, 179, 55),
Color3.fromRGB(255, 255, 53),
Color3.fromRGB(105, 255, 79),
Color3.fromRGB(70, 252, 255),
Color3.fromRGB(193, 85, 255),
Color3.fromRGB(255, 169, 225)
};
do -- Hooks
local fakeanim = _Instancenew("Animation")
fakeanim.AnimationId = "rbxassetid://0"
local oldNamecall; oldNamecall = hookmetamethod(game, "__namecall", function(self, ...)
local args = {...}
local method = getnamecallmethod()
if method == "FireServer" then
if self.Name == Events.ControlTurn.Name then
if Flags["AntiAim_Enabled"].value then
if _G.CurrentPitch then
args[1] = _G.CurrentPitch
end
end
return oldNamecall(self, _TableUnpack(args))
elseif self.Name == "ReplicateCameraUDP" and Flags["Anti_Camera_Resolver"].value then
args[1] = _CFrameNew()
return oldNamecall(self, _TableUnpack(args))
elseif self.Name == HitPart.Name then
local a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 = ...
if not Flags["KillAll_Enabled"].value then
_TaskSpawn(function()
local hitpos = RageBot.Target.TargetPosition ~= nil and RageBot.Target.TargetPosition or Utility.DecryptPosition(a2)
if Flags["BulletTracerEnabled"].value then
if _FindFirstChild(LocalPlayer.Character, "Gun") and _FindFirstChild(LocalPlayer.Character.Gun, "Flash") then
local origin = RageBot.Target.Origin ~= nil and RageBot.Target.Origin or LocalPlayer.Character.Gun.Flash.Position
Utility.CreateTracer(hitpos, origin, Flags["BulletTracerColor"].color, Flags["BulletTracerTransperency"].value/10, Flags["BulletTracerWidth"].value, Flags["BulletTracerLifetime"].value, (function()
for i, v in pairs(Flags["BulletTracerTexture"].value) do
if v then
return i
end
end
end)(), Flags["BulletTracerTextureLength"].value, Flags["BulletTracerTextureSpeed"].value, Flags["BulletTracerFaceCamera"].value, Flags["BulletTracerLightEmission"].value/10, Flags["BulletTracerLightInfluence"].value/10, Flags["BulletTracerBrightness"].value/10, Flags["BulletTracerSecondBeam"].value, Flags["BulletTracerSecondBeamColor"].color, 0.5)
end
end
if Flags["HitEffectsEnabled"].value and Flags["HitEffects_Firework"].value then
if a1.Parent.Humanoid then
local RandomColor = Colors[RNG:NextInteger(1, #Colors)]
local NewPart = _Instancenew("Part")
NewPart.CanCollide = false
NewPart.Anchored = true
NewPart.CFrame = _CFrameNew(hitpos)
NewPart.Size = _Vector3New()
NewPart.Name = "Firework"
NewPart.Parent = workspace
local ExplosionParticle = _Clone(emitter);
ExplosionParticle.Color = _ColorSequenceNew({_ColorSequenceKeypointNew(0, RandomColor), _ColorSequenceKeypointNew(1, RandomColor) });
ExplosionParticle.Parent = NewPart
ExplosionParticle:Emit(25)
Debris:AddItem(NewPart, 4);
end
end
if Flags["BulletImpactEnabled"].value then
local hitplayer = _GetPlayerFromCharacter(Players, a1.Parent)
local hitpos = RageBot.Target.TargetPosition ~= nil and RageBot.Target.TargetPosition or Utility.DecryptPosition(a2)
local color = Flags["BulletImpactColor"].color
local transperency = Flags["BulletImpactTransparency"].color
local enemyColor = Flags["BulletImpactColor2"].color
local material = Flags["BulletImpactMaterial"].value
local size = Flags["BulletImpactSize"].value
local lifetime = Flags["BulletImpactLifetime"].value
local material = Utility.GetSelectedName(Flags["BulletImpactMaterial"].value)
if hitplayer and PlayerModule.storage[hitplayer].enemy then
Utility.CreateImpact(
hitpos,
a1,
enemyColor,
transperency,
material,
size,
lifetime
)
else
Utility.CreateImpact(
hitpos,
a1,
color,
transperency,
material,
size,
lifetime
)
end
end
end)
if Flags["Damage_Modifier"].value then
a7 = Flags["Damage_ModifierValue"].value
end
end
oldNamecall(self, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30)
if Flags["Break_Aura"].value then
oldNamecall(self, a1, a2, "Multimeter", a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30)
end
return
end
elseif method == "FindPartOnRayWithIgnoreList" then
local passed = false
for i, v in next, args[2] do
if v.ClassName == "Accessory" then
passed = true
end
end
if passed then
if Flags["Remove_Spread"].value and not _FindFirstChild(Cache.Client.fgun, "Melee") then
args[1] = _RayNew(camera.CFrame.p, camera.CFrame.lookVector * Cache.Client.gun.Range.Value * 0.0625)
end
local enterParam = _RaycastParamsNew()
enterParam.FilterType = Enum.RaycastFilterType.Blacklist
enterParam.IgnoreWater = true
enterParam.FilterDescendantsInstances = args[2]
local resultOfDepressionAndLonliness = _Raycast(workspace, args[1].Origin, args[1].Direction, enterParam)
return resultOfDepressionAndLonliness and resultOfDepressionAndLonliness.Instance or nil, resultOfDepressionAndLonliness and resultOfDepressionAndLonliness.Position or (args[1].Origin + args[1].Direction), resultOfDepressionAndLonliness and resultOfDepressionAndLonliness.Normal or _Vector3New(), resultOfDepressionAndLonliness and resultOfDepressionAndLonliness.Material or nil
end
elseif method == "PivotTo" then
local arms = args[1]
if self.Name == "Arms" and LocalPlayer.Character then
if Flags["Disable_Weapon_Swaying"].value then
arms = camera.CFrame
end
if Flags["ViewModel"].value then
arms = arms * _CFrameAngles(_MathRad(Flags["ViewModel_X"].value-180), _MathRad(Flags["ViewModel_Y"].value-180), _MathRad(Flags["ViewModel_Z"].value-180))
arms = arms * _CFrameNew(_Vector3New(_MathRad(Flags["ViewModel_X1"].value-180),_MathRad(Flags["ViewModel_Y2"].value-180),_MathRad(Flags["ViewModel_Z3"].value-180)))
end
if Flags["RageBot_AtTargets"].value and RageBot.Target.TargetPosition then
arms = _CFrameLookAt(arms.Position, RageBot.Target.TargetPosition)
end
if Flags["ThirdPerson_Enabled"].value and Flags["ThirdPerson_Enabled_Key"].value then
arms = arms * _CFrameNew(1000, 1000, 1000)
end
end
return oldNamecall(self, arms, _Select(2, ...))
elseif method == "LoadAnimation" then
if Flags["Movement_SlideWalk"].value and (args[1].Name == "RunAnim" or args[1].Name == "JumpAnim") then
args[1] = fakeanim
return oldNamecall(self, _TableUnpack(args))
end
end
return oldNamecall(self, ...)
end)
local oldIndex; oldIndex = hookmetamethod(game, "__index", function(self, k)
if k == "Velocity" and self.Parent == LocalPlayer.Character and Misc.fakehrp then
return oldIndex(Misc.fakehrp, k)
end
return oldIndex(self, k)
end)
local oldNIndex; oldNIndex = hookmetamethod(game, "__newindex", function(self, k, v)
if self == workspace.CurrentCamera and k == "CFrame" then
if Flags["Remove_Recoil"].value and _tostring(getcallingscript()) == "Client" then
return
end
end
if Flags["Remove_Scope"].value and self.Name == "Blur" and self.Parent.Name == "Scope" then
v = 0
end
return oldNIndex(self, k, v)
end)
end
getgenv().vaderhaxxpaste.loaded = true
ui.startWatermark = true
for i = 1, 3 do
_TaskWait()
end
ui:createnotification({text = "leak lol", lifetime = 5, priority = 1})
ui:openui()
![mazila.wtf [UPDATE]](https://cdn.kocakz.me/images/d7e67bb115c04c998b1d76260dbd37c5e7422562302b9270e205b4d920ecbe1a.webp)


dont work
@markasi13000 try now
ok let me fix it's *
now fully fixed
print("diddyskidder#1")
@chmo yes!!! skidded leaked pasted
again dont work on xeno) I am the markasi13000
then dont work on velocity
@markasi10000 :pray: 2 months ago patched if you want you can fix you need new args and new code lol
i'm really don't care because yeah
grystno pasta bolishe nirabotiet
@chmo кб ро мертв фиксить не хочу и не буду найди метод новый фиксани и юзай там только рейдж зафиксить и килл алл итд