-- 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!?#?!#?!@?#!?#?!@?#$!@?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()