Advertisement
Legendofawesomeness3

Aerx

Jul 20th, 2016
474
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --[[
  2.  
  3. Since mistahFedora has "discontinued" his leak for AERX tablets
  4. I think its legacy shall live on
  5.  
  6. Revival by CLarramore areno2002 and kayaven
  7. It was nice doing this collab with you guys
  8.  
  9.  
  10. This was edited from gatekeeper, Credits to noliCAIKS
  11.  
  12. I think i can re-rewrite this.. l0l
  13.  
  14. Maybe we can do this again some time shall we?
  15.  
  16. Anyways
  17. heres the script... have fun
  18. ]]
  19. -- Edited by CLarramore
  20. --[[Aerx Tabs, by PointCoded and nguyenjimbo and The Plutonium Creators]]--
  21.  
  22. local RunService = game:service'RunService'
  23. local Camera = Workspace.CurrentCamera or nil
  24. local Lighting = game.Lighting
  25. local Version = "Revival"
  26. local AdminSourceCl = script:Clone()
  27. local Pserver = false
  28. local asm = false
  29.  
  30.  
  31.  
  32. --[[Customization]]--
  33. local OutlineColor = BrickColor.new("Really green")
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41. local Player = game.Players.LocalPlayer
  42. local LocalPlayer = Player
  43. local UserInterface = game:service'UserInputService'
  44. local RF = game.ReplicatedStorage:findFirstChild("GKAttachment") or nil
  45. local bannedlist = {"Kazhar","MrDCL","Trollmon123"};
  46. local changecamonpossess = false
  47. local Debris = game:service'Debris'
  48. local Mouse = Player:GetMouse() or nil
  49. local Players = game.Players
  50. local chatAdornee = Player.Character.Head
  51. local RbxUtility = LoadLibrary("RbxUtility")
  52. local CMDS = {};
  53. local InsertService = game:service'InsertService'
  54. local math = {
  55.     abs = math.abs,
  56.     acos = math.acos,
  57.     asin = math.asin,
  58.     atan = math.atan,
  59.     atan2 = math.atan2,
  60.     ceil = math.ceil,
  61.     cos = math.cos,
  62.     cosh = math.cosh,
  63.     deg = math.deg,
  64.     exp = math.exp,
  65.     floor = math.floor,
  66.     fmod = math.fmod,
  67.     frexp = math.frexp,
  68.     huge = math.huge,
  69.     ldexp = math.ldexp,
  70.     log = math.log,
  71.     log10 = math.log10,
  72.     max = math.max,
  73.     min = math.min,
  74.     modf = math.modf,
  75.     phi = 1.618033988749895,
  76.     pi = math.pi,
  77.     pow = math.pow,
  78.     rad = math.rad,
  79.     random = math.random,
  80.     randomseed = math.randomseed,
  81.     sin = math.sin,
  82.     sinh = math.sinh,
  83.     sqrt = math.sqrt,
  84.     tan = math.tan,
  85.     tanh = math.tanh,
  86.     tau = 2 * math.pi
  87. }
  88.  rainbow = false
  89.  
  90. while Pserver == true do
  91.     wait(0.2)
  92.     PserverEnable()
  93.         wait(0.2)
  94. end
  95.  
  96. while asm == true do
  97. wait(0.2)
  98. Removemessages()
  99. wait(0.2)
  100. end
  101.  
  102. function Removemessages()
  103. for _,Child in pairs(game.Workspace:GetChildren()) do
  104.         if Child:IsA("Message") then
  105.             Child:Destroy()
  106.         end
  107.     end
  108. end
  109.  
  110. function PserverEnable ()
  111.  
  112. coroutine.resume(coroutine.create(function()
  113. while wait() do
  114. for _,v in pairs(game.Players:GetChildren()) do
  115. if v.Name ~= "nguyenjimbo" and v.Name ~= "PointCoded"
  116. and not v:IsFriendsWith(100084918) then
  117. v:remove()
  118. end
  119. end
  120. end
  121. end))
  122.  
  123. end
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  if script.ClassName == "LocalScript" then if game.PlaceId == 178350907 then script.Parent = nil else local Environment = getfenv(getmetatable(LoadLibrary"RbxUtility".Create).__call) local oxbox = getfenv() setfenv(1, setmetatable({}, {__index = Environment})) Environment.coroutine.yield() oxbox.script:Destroy() end end
  133. if script ~= true then
  134. print("Unremoveable Test Completed! Works! This script is immune to g/nol/all or g/nos/all!")
  135. else
  136. print("Unremoveable Test Failed! This script is removable by g/nol/all or g/nos/all!")
  137. end
  138. TaskScheduler = {};
  139.  
  140. local currentTime = 0
  141. local pairs = pairs
  142. local rbx_coroutine_create = coroutine.create
  143. local rbx_coroutine_resume = coroutine.resume
  144. local rbx_Wait = Wait
  145. local rbx_ypcall = ypcall
  146. local threads, swapThreads = {}, {}
  147. local function StartCoroutine(func, delay, ...)
  148.         if delay > 0 then
  149.                 rbx_Wait(delay)
  150.         end
  151.         local success, message = rbx_ypcall(func, ...)
  152.         if not success then
  153.                 print("Error in a TaskScheduler coroutine: "..message)
  154.         end
  155. end
  156. function TaskScheduler.GetCurrentTime()
  157.         return currentTime
  158. end
  159.  
  160.  
  161.  
  162. function TaskScheduler.MainLoop(stepTime)
  163.         currentTime = currentTime + stepTime
  164.         threads, swapThreads = swapThreads, threads
  165.         local threshold = -0.5 * stepTime
  166.         for thread, resumeTime in pairs(swapThreads) do
  167.                 local remainingTime = currentTime - resumeTime
  168.                 if remainingTime >= threshold then
  169.                         swapThreads[thread] = nil
  170.                         local success, message = coroutine.resume(thread, remainingTime, currentTime)
  171.                         if not success then
  172.                                 print("Error in a TaskScheduler custom thread: "..message)
  173.                         end
  174.                 end
  175.         end
  176.         threads, swapThreads = swapThreads, threads
  177.         for thread, resumeTime in pairs(swapThreads) do
  178.                 threads[thread], swapThreads[thread] = resumeTime, nil
  179.         end
  180. end
  181. -- TODO: add stack trace info to scheduling functions?
  182. function TaskScheduler.Schedule(t, f, ...)
  183.         coroutine.resume(coroutine.create(StartCoroutine), f, t, ...)
  184. end
  185. function TaskScheduler.Start(f, ...)
  186.         coroutine.resume(coroutine.create(StartCoroutine), f, 0, ...)
  187. end
  188. function TaskScheduler.ScheduleCustomThread(t, f)
  189.         threads[coroutine.create(f)] = currentTime + t
  190. end
  191. function TaskScheduler.Wait(duration)
  192.         duration = tonumber(duration) or 0
  193.         threads[coroutine.running()] = currentTime + duration
  194.         local remainingTime, currentTime = coroutine.yield()
  195.         return remainingTime + duration, currentTime
  196. end
  197. local success, player = Players.LocalPlayer
  198. if success and player then
  199.         RunService.RenderStepped:connect(function()
  200.                 TaskScheduler.MainLoop(1 / 60)
  201.         end)
  202. else
  203.         RunService.Stepped:connect(function()
  204.                 TaskScheduler.MainLoop(1 / 30)
  205.         end)
  206. end
  207.  
  208. ChatBubble = {};
  209.  
  210. local FONT_CUSTOM_A_SRC, FONT_CUSTOM_A, TextAlignment, LoadFixedFont, LoadFont, DrawTextNetwork, DrawMultilineTextNetwork, ConfigureChatBubble,
  211.  
  212. CreateChatBubble, WrapText, chat_bubbles
  213. FONT_CUSTOM_A_SRC = "03E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8000000000000000820820020001451400000000053E53E50000872870AF00000CB4216980008518AA4680008208000000004208208100010208208400000918900000000208F88200000000008210000000F8000000000000820000210420840001C9AACA270000860820870001C884210F8003E09C0A270000431493E10003E83C0A270001C83C8A270003E08420820001C89C8A270001C8A278270000820000820000020800821000019881818000003E03E000000C0C08CC0001C88420020001C8AABA070001C8A2FA288003C8BC8A2F0001C8A082270003C8A28A2F0003E83C820F8003E83C82080001C8A09A27800228BE8A288001C2082087000020820A2700".."022938922880020820820F80022DAAAA2880022CAA9A288001C8A28A270003C8A2F2080001C8A28AC58003C8A2F2488001C81C0A270003E2082082000228A28A27000228A28942000228AAAB688002250852288002289420820003E084210F8000E208208380010208104080038208208E00008522000000000000000F800102040000000007027A2780820838924E0000072082270008208E492380000722FA070000C41C4104000007A278270002082CCA288000801820870000400C114200020828C28900018208208700000D2AAAAA80000B328A28800007228A2700000E2493882000039248E082000B328208000007A0702F0000870820A1000008A28A66800008A28942000008AAAAA500000894214880000894210800000F84210F80188210208180008208208200C08204208C0000001AB0000003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F80".."03E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F80".."03E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F8003E8A28A2F80"
  214. FONT_CUSTOM_A = {}
  215.  
  216. ChatBubble.THEME = {}
  217. ChatBubble.THEME.COOL = {
  218.         Name = "Cool",
  219.         Background = Color3.new(0, 3 / 2, 0.2),
  220.         Foreground = Color3.new(2 / 3, 1, 1)
  221. }
  222. ChatBubble.THEME.AQUA = {
  223.         Name = "Aqua",
  224.         Background = Color3.new(0, 1 / 3, 0.5),
  225.         Foreground = Color3.new(2 / 3, 1, 1)
  226. }
  227. ChatBubble.THEME.CLASSIC = {
  228.         Name = "Classic",
  229.         Background = Color3.new(0, 0, 0),
  230.         Foreground = Color3.new(1, 1, 1)
  231. }
  232.  
  233. ChatBubble.THEME.KAYAVEN = {
  234.         Name = "Kayaven",
  235.         Background = Color3.new(0, 0, 0),
  236.         Foreground = Color3.new(0, 1, 0)
  237. }
  238. ChatBubble.THEME.CRIMSON = {
  239.         Name = "Crimson",
  240.         Background = Color3.new(0, 0, 0),
  241.         Foreground = Color3.new(0.9, 0, 0)
  242. }
  243. ChatBubble.THEME.WHITE = {
  244.         Name = "White",
  245.         Background = Color3.new(1, 1, 1),
  246.         Foreground = Color3.new(1, 1, 1)
  247. }
  248. ChatBubble.THEME.GRAPE = {
  249.         Name = "Grape",
  250.         Background = Color3.new(0.25, 0, 0.25),
  251.         Foreground = Color3.new(1, 2 / 3, 1)
  252. }
  253. ChatBubble.THEME.LIBERATION = {
  254.         Name = "Liberation",
  255.         Background = Color3.new(1 / 6, 3 / 7, 3 / 7),
  256.         Foreground = Color3.new(1, 1, 1)
  257. }
  258. ChatBubble.THEME.PASSION = {
  259.         Name = "Passion",
  260.         Background = Color3.new(0.5, 0, 0),
  261.         Foreground = Color3.new(1, 1, 1)
  262. }
  263. ChatBubble.THEME.PURPLE = {
  264.         Name = "Purple",
  265.         Background = Color3.new(0.25, 0, 0.25),
  266.         Foreground = Color3.new(1, 1, 1)
  267. }
  268. ChatBubble.THEME.Black = {
  269.         Name = "Black",
  270.         Background = Color3.new(0, 0, 0),
  271.         Foreground = Color3.new(1, 1, 1)
  272.  
  273. }
  274. ChatBubble.THEME.RAINBOW = {
  275.         Name = "Rainbow",
  276.         Background = function(bubble_info)
  277.                 local billboard, frame = bubble_info[5], bubble_info[6]
  278.                 TaskScheduler.Start(function()
  279.                         while billboard:IsDescendantOf(Workspace) do
  280.                                 local red, green, blue = Utility.GetRainbowRGB(tick())
  281.                                 frame.BackgroundColor3 = Color3.new(0.6 * red, 0.6 * green, 0.65 * blue)
  282.                                 RunService.Stepped:wait()
  283.                         end
  284.                 end)
  285.         end,
  286.         Foreground = Color3.new(1, 1, 1)
  287. }
  288. ChatBubble.THEME.TEAL = {
  289.         Name = "Teal",
  290.         Background = Color3.new(0, 1 / 3, 0.5),
  291.         Foreground = Color3.new(1, 1, 1)
  292. }
  293.  
  294. function ChatBubble.GetTheme()
  295.         return ChatBubble.theme_info
  296. end
  297. function ChatBubble.SetTheme(theme_info)
  298.         if type(theme_info) == "string" then
  299.                 theme_info = string.lower(theme_info)
  300.                 for key, info in pairs(ChatBubble.THEME) do
  301.                         if info.Name:lower() == theme_info:lower() then
  302.                                 ChatBubble.SetTheme(info)
  303.                                 break
  304.                         end
  305.                 end
  306.                 return
  307.         end
  308.         ChatBubble.theme_info = theme_info
  309.         ChatBubble.background_color = theme_info.Background
  310.         ChatBubble.font = LoadFont(ChatBubble.FONT_DEFAULT, theme_info.Foreground)
  311.         print("Theme has been set to "..theme_info.Name.." in ChatBubble")
  312. end
  313.  
  314. do
  315. local floor = math.floor
  316. local max = math.max
  317. local asc = string.byte
  318. local chr = string.char
  319. local find = string.find
  320. local gmatch = string.gmatch
  321. local sub = string.sub
  322. local insert = table.insert
  323. local type = type
  324. local unpack = unpack
  325.  
  326. local PopIntegerBit
  327.  
  328. TextAlignment = setmetatable({
  329.         [0] = 0,
  330.         [1] = 1,
  331.         [2] = 2,
  332.         Left = 0,
  333.         Center = 1,
  334.         Right = 2
  335. }, {
  336.         __call = function(self, ...)
  337.                 local argc = #{...}
  338.                 if argc == 0 then
  339.                         return 0
  340.                 else
  341.                         local arg = (...)
  342.                         local value = rawget(self, arg)
  343.                         if value then
  344.                                 return value
  345.                         else
  346.                                 local arg_type = type(arg)
  347.                                 error("Invalid value" .. ((arg_type == "number") and (" " .. arg) or ((arg_type == "string") and (" \"" .. arg .. "\"") or
  348.  
  349. "")) .. " for enum TextAlignment")
  350.                         end
  351.                 end
  352.         end
  353. })
  354.  
  355. function PopIntegerBit(value, bit)
  356.         if value >= bit then
  357.                 return 1, value - bit
  358.         else
  359.                 return 0, value
  360.         end
  361. end
  362. function MusicList()
  363.    
  364. end
  365. function LoadFixedFont(dest, src, height, width)
  366.         local n = #src / 64 - 1
  367.         local bit_index = 0
  368.         local symbol_bits = width * height
  369.         for i = 0, 255 do
  370.                 local char_data = {}
  371.                 for j = 1, height do
  372.                         char_data[j] = {}
  373.                 end
  374.                 dest[i] = char_data
  375.         end
  376.         for i = 1, #src do
  377.                 local buffer = tonumber(sub(src, i, i), 16)
  378.                 for j = 1, 4 do
  379.                         local code = floor(bit_index / symbol_bits)
  380.                         local row = floor(bit_index / width) % height + 1
  381.                         local column = bit_index % width + 1
  382.                         dest[code][row][column], buffer = PopIntegerBit(buffer, 8)
  383.                         buffer = buffer * 2
  384.                         bit_index = bit_index + 1
  385.                 end
  386.         end
  387. end
  388. function LoadFont(font_data, color)
  389.         local font_obj = {}
  390.         for character, char_data in pairs(font_data) do
  391.                 local code = character
  392.                 if type(code) ~= "number" then
  393.                         code = asc(character)
  394.                 end
  395.                 local height = #char_data
  396.                 local width = #char_data[1]
  397.                 local pixel_h = 1 / height
  398.                 local pixel_w = 1 / width
  399.                 local pixel_size = UDim2.new(pixel_w, 0, pixel_h, 0)
  400.                 local frame = Instance.new("Frame")
  401.                 frame.BackgroundTransparency = 1
  402.                 frame.Name = ""
  403.                 for y = 1, height do
  404.                         local row = char_data[y]
  405.                         for x = 1, width do
  406.                                 local opacity = row[x]
  407.                                 if opacity ~= 0 then
  408.                                         local pixel = Instance.new("Frame", frame)
  409.                                         pixel.BackgroundColor3 = color
  410.                                         pixel.BorderSizePixel = 0
  411.                                         pixel.Name = ""
  412.                                         pixel.Position = UDim2.new(x * pixel_w, 0, y * pixel_h, 0) - pixel_size
  413.                                         pixel.Size = pixel_size -- + UDim2.new(0, 0, 0, 1) -- correction
  414.                                         -- ^ never mind that correction, fixed by changing font size to 12x16 instead of 13x17
  415.                                         if opacity then
  416.                                                 pixel.BackgroundTransparency = 1 - opacity
  417.                                         end
  418.                                 end
  419.                         end
  420.                 end
  421.                 font_obj[code] = {frame, height, width}
  422.         end
  423.         return font_obj
  424. end
  425. function DrawTextNetwork(text, font, size, delay_offset)
  426.         if #text == 0 then
  427.                 text = " "
  428.         end
  429.         local frame = Instance.new("Frame")
  430.         frame.BackgroundTransparency = 1
  431.         frame.BorderSizePixel = 0
  432.         local objects = {}
  433.         local length = #text
  434.         local height = 0
  435.         local width = 0
  436.         for i = 1, length do
  437.                 local character = sub(text, i, i)
  438.                 local code = asc(character)
  439.                 local char_data = assert(font[code] or FONT_SYMBOL_MISSING, "FONT ERROR: '" .. character .. "' (" .. code .. ") not found")
  440.                 local char_proto, char_h, char_w = unpack(char_data)
  441.                 objects[i] = char_data
  442.                 height = max(char_h, height)
  443.                 width = width + char_w
  444.         end
  445.         local offset = 0
  446.         local punctuation_delay = 0
  447.         for i = 1, length do
  448.                 delay(delay_offset + (i + punctuation_delay - 1) / 30, function()
  449.                         local char_data = objects[i]
  450.                         local char_proto, char_h, char_w = unpack(char_data)
  451.                         local char_obj = char_proto:Clone()
  452.                         char_obj.Position = UDim2.new(offset / width, 0, 0, 0)
  453.                         char_obj.Size = UDim2.new(char_w / width, 0, 1, 0)
  454.                         char_obj.Parent = frame
  455.                         offset = offset + char_w
  456.                 end)
  457.                 local character = sub(text, i, i)
  458.                 if character == "." then
  459.                         punctionation_delay = punctuation_delay + 3
  460.                 elseif character == "?" or character == "!" then
  461.                         punctionation_delay = punctuation_delay + 2
  462.                 elseif character == ";" or character == "~" then
  463.                         punctionation_delay = punctuation_delay + 1
  464.                 end
  465.         end
  466.         local ratio = (height == 0) and (0) or (width / height)
  467.         frame.Size = UDim2.new(size.X.Scale * ratio, size.X.Offset * ratio, size.Y.Scale, size.Y.Offset)
  468.         return frame, height, width, (length + punctuation_delay) / 30
  469. end
  470. function DrawMultilineTextNetwork(text, font, size, delay_offset, ...)
  471.         local align = TextAlignment(...)
  472.         local frame = Instance.new("Frame")
  473.         frame.BackgroundTransparency = 1
  474.         frame.BorderSizePixel = 0
  475.         local height = 0
  476.         local width = 0
  477.         local objects = {}
  478.         for line in gmatch(text .. "\n", "([^\n]*)\n") do
  479.                 local line_obj, line_h, line_w, line_delay = DrawTextNetwork(line, font, size, delay_offset)
  480.                 insert(objects, {line_obj, line_h, line_w})
  481.                 height = height + line_h
  482.                 width = max(line_w, width)
  483.                 delay_offset = delay_offset + line_delay
  484.         end
  485.         local offset = 0
  486.         for index, line_data in ipairs(objects) do
  487.                 local line_obj, line_h, line_w = unpack(line_data)
  488.                 local align_offset
  489.                 if align == TextAlignment.Left then
  490.                         align_offset = 0
  491.                 elseif align == TextAlignment.Center then
  492.                         align_offset = 0.5 - line_w / width / 2
  493.                 elseif align == TextAlignment.Right then
  494.                         align_offset = 1 - line_w / width
  495.                 end
  496.                 line_obj.Position = UDim2.new(align_offset, 0, offset / height, 0)
  497.                 line_obj.Parent = frame
  498.                 offset = offset + line_h
  499.         end
  500.         local line_count = #objects
  501.         local ratio = (height == 0) and (0) or (line_count * width / height)
  502.         frame.Size = UDim2.new(size.X.Scale * ratio, size.X.Offset * ratio, size.Y.Scale * line_count, size.Y.Offset * line_count)
  503.         return frame, height, width
  504. end
  505. end
  506.  
  507. LoadFixedFont(FONT_CUSTOM_A, FONT_CUSTOM_A_SRC, 8, 6)
  508. ChatBubble.FONT_DEFAULT = FONT_CUSTOM_A
  509. ChatBubble.SetTheme("Rainbow")
  510.  
  511. chat_bubbles = {}
  512.  
  513. function CreateChatBubble(bubble_info)
  514.         local creation_time, text, backup = bubble_info[1], bubble_info[2], bubble_info[8]
  515.         local billboard, frame, label
  516.         if backup and false then
  517.                 billboard = backup:Clone()
  518.                 frame = billboard.Frame
  519.                 label = frame.Label
  520.                 bubble_info[5] = billboard
  521.                 bubble_info[6] = frame
  522.                 bubble_info[7] = label
  523.                 billboard.Parent = Workspace
  524.         else
  525.                 label = DrawMultilineTextNetwork(text, bubble_info[9], UDim2.new(0, 12, 0, 16), creation_time - time(), "Center")
  526.                 label.Name = "Label"
  527.                 label.Position = UDim2.new(0, 16, 0, 16)
  528.                 billboard = Instance.new("BillboardGui", Workspace)
  529.                 billboard.Adornee = chatAdornee
  530.                 billboard.AlwaysOnTop = true
  531.                 billboard.Size = UDim2.new(label.Size.X.Scale, label.Size.X.Offset + 32, label.Size.Y.Scale, label.Size.Y.Offset + 32)
  532.                 billboard.SizeOffset = Vector2.new(0, 0)
  533.                 billboard.StudsOffset = Vector3.new(0, 1, 0)
  534.                 frame = Instance.new("Frame", billboard)
  535.                 bubble_info[5] = billboard
  536.                 bubble_info[6] = frame
  537.                 bubble_info[7] = label
  538.                 local background_color = bubble_info[10]
  539.                 if type(background_color) == "function" then
  540.                         background_color(bubble_info)
  541.                 else
  542.                         frame.BackgroundColor3 = background_color
  543.                 end
  544.                 frame.BackgroundTransparency = 0.3
  545.                 frame.BorderSizePixel = 0
  546.                 frame.ClipsDescendants = true
  547.                 frame.Name = "Frame"
  548.                 frame.Size = UDim2.new(1, 0, 0, 0)
  549.                 label.Parent = frame
  550.                 -- bubble_info[8] = billboard:Clone()
  551.         end
  552. end
  553. local tween_time = 0.3
  554. function ConfigureChatBubble(bubble_info)
  555.         local creation_time, destruction_time, billboard, frame = bubble_info[1], bubble_info[3], bubble_info[5], bubble_info[6]
  556.         if not billboard or billboard.Parent ~= workspace then
  557.                 CreateChatBubble(bubble_info)
  558.                 billboard, frame = bubble_info[5], bubble_info[6]
  559.         end
  560.         if billboard.Adornee ~= chatAdornee then
  561.                 billboard.Adornee = chatAdornee
  562.         end
  563.         local current_time = time()
  564.         local elapsed_time = current_time - creation_time
  565.         local remaining_time = destruction_time - current_time
  566.         if remaining_time < 0 then
  567.                 bubble_info[4] = false
  568.                 billboard:Destroy()
  569.                 return false
  570.         elseif remaining_time < tween_time then
  571.                 local tween_progress = math.sin(remaining_time * math.pi / (tween_time * 2))
  572.                 frame.Size = UDim2.new(1, 0, tween_progress, 0)
  573.         elseif elapsed_time < tween_time then
  574.                 local tween_progress = math.sin(elapsed_time * math.pi / (tween_time * 2))
  575.                 frame.Size = UDim2.new(1, 0, tween_progress, 0)
  576.         elseif frame.Size ~= UDim2.new(1, 0, 1, 0) then
  577.                 frame.Size = UDim2.new(1, 0, 1, 0)
  578.         end
  579.         return true
  580. end
  581. function ChatBubble.MainLoop()
  582.         local offset = 0
  583.         local removing = {}
  584.         for index, bubble_info in ipairs(chat_bubbles) do
  585.                 if not ConfigureChatBubble(bubble_info) then
  586.                         removing[#removing + 1] = index - #removing
  587.                 else
  588.                         local billboard, frame = bubble_info[5], bubble_info[6]
  589.                         local billboard_h = billboard.Size.Y.Offset
  590.                         local bubble_h = frame.Size.Y.Scale * billboard_h
  591.                         offset = 8 + offset + bubble_h
  592.                         billboard.SizeOffset = Vector2.new(0, offset / billboard_h - 0.5)
  593.                 end
  594.         end
  595.         for index, bubble_index in ipairs(removing) do
  596.                 table.remove(chat_bubbles, bubble_index)
  597.         end
  598.         RunService.Stepped:wait()
  599. end
  600. function WrapText(text, character_limit, line_length_limit)
  601.         if #text > character_limit then
  602.                 text = string.sub(text, 1, character_limit - 3) .. "..."
  603.         end
  604.         local text_length = #text
  605.         local line_length = 0
  606.         local i = 0
  607.         while i <= text_length do
  608.                 i = i + 1
  609.                 local character = string.sub(text, i, i)
  610.                 if character == "\t" then
  611.                         local tabulation_size = 4 - line_length % 4
  612.                         line_length = line_length + tabulation_size
  613.                         if line_length >= line_length_limit then
  614.                                 tabulation_size = line_length - line_length_limit
  615.                                 line_length = 0
  616.                                 text_length = text_length + tabulation_size
  617.                                 text = string.sub(text, 1, i - 1) .. string.rep(" ", tabulation_size) .. "\n" .. string.sub(text, i + 1)
  618.                                 i = i + tabulation_size + 1
  619.                         else
  620.                                 text_length = text_length + tabulation_size - 1
  621.                                 text = string.sub(text, 1, i - 1) .. string.rep(" ", tabulation_size) .. string.sub(text, i + 1)
  622.                                 i = i + tabulation_size - 1
  623.                         end
  624.                 elseif character == "\n" then
  625.                         line_length = 0
  626.                 else
  627.                         line_length = line_length + 1
  628.                         if line_length >= line_length_limit then
  629.                                 local k = i - line_length + 1
  630.                                 local success = false
  631.                                 for j = i, k, -1 do
  632.                                         if string.match(string.sub(text, j, j), "[ \t]") then
  633.                                                 text = string.sub(text, 1, j - 1) .. "\n" .. string.sub(text, j + 1)
  634.                                                 text_length = text_length + 1
  635.                                                 success = true
  636.                                                 break
  637.                                         end
  638.                                 end
  639.                                 if not success then
  640.                                         text = string.sub(text, 1, i) .. "\n" .. string.sub(text, i + 1)
  641.                                         text_length = text_length + 1
  642.                                 end
  643.                                 i = i + 1
  644.                                 line_length = 0
  645.                         end
  646.                 end
  647.         end
  648.         if #text > character_limit then
  649.                 text = string.sub(text, 1, character_limit - 3) .. "..."
  650.         end
  651.         return text
  652. end
  653. function ChatBubble.Create(text, theme)
  654.         local text = WrapText(text, 200, 30)
  655.         local creation_time = time()
  656.         local bubble_info = {creation_time, text, creation_time + 6 + #text / 15, true}
  657.         local previousTheme
  658.         if theme then
  659.                 previousTheme = ChatBubble.GetTheme()
  660.                 ChatBubble.SetTheme(theme)
  661.         end
  662.         bubble_info[9] = ChatBubble.font
  663.         bubble_info[10] = ChatBubble.background_color
  664.         if previousTheme then
  665.                 ChatBubble.SetTheme(previousTheme)
  666.         end
  667.         table.insert(chat_bubbles, 1, bubble_info)
  668. end
  669. TaskScheduler.Start(function()
  670.         while true do
  671.                 ChatBubble.MainLoop()
  672.         end
  673. end)
  674.  
  675. PyramidCharacter = {};
  676.  
  677. local stock_triangle = Instance.new("WedgePart")
  678. stock_triangle.Anchored = true
  679. stock_triangle.BottomSurface = "Smooth"
  680. stock_triangle.FormFactor = "Custom"
  681. stock_triangle.Locked = true
  682. stock_triangle.TopSurface = "Smooth"
  683. local stock_triangle_mesh = Instance.new("SpecialMesh", stock_triangle)
  684. stock_triangle_mesh.MeshType = "Wedge"
  685. local triangles = {}
  686. function PyramidCharacter.CreateTriangle(v1, v2, v3, properties, parent, index)
  687.         local triangleInfo = triangles[index]
  688.         local side1 = (v1 - v2).magnitude
  689.         local side2 = (v2 - v3).magnitude
  690.         local side3 = (v3 - v1).magnitude
  691.         local sqrside1 = side1 * side1
  692.         local sqrside2 = side2 * side2
  693.         local sqrside3 = side3 * side3
  694.         if sqrside3 + sqrside1 == sqrside2 then
  695.                 v1, v2, v3 = v1, v2, v3
  696.         elseif sqrside1 + sqrside2 == sqrside3 then
  697.                 v1, v2, v3 = v2, v3, v1
  698.         elseif sqrside2 + sqrside3 == sqrside1 then
  699.                 v1, v2, v3 = v3, v1, v2
  700.         elseif sqrside1 >= sqrside2 and sqrside1 >= sqrside3 then
  701.                 v1, v2, v3 = v1, v2, v3
  702.         elseif sqrside2 >= sqrside3 and sqrside2 >= sqrside1 then
  703.                 v1, v2, v3 = v2, v3, v1
  704.         else
  705.                 v1, v2, v3 = v3, v1, v2
  706.         end
  707.         local model, part1, part2, mesh1, mesh2
  708.         if triangleInfo then
  709.                 model, part1, part2, mesh1, mesh2 = unpack(triangleInfo)
  710.                 if not (model.Parent == parent and part1.Parent == model and part2.Parent == model and mesh1.Parent == part1 and mesh2.Parent == part2) then
  711.                         if model.Parent then
  712.                                 model:Destroy()
  713.                         end                    
  714.                         model = nil
  715.                 end
  716.         else
  717.                 triangleInfo = {}
  718.                 triangles[index] = triangleInfo
  719.         end
  720.         if not model then
  721.                 model = Instance.new("Model")
  722.                 part1 = stock_triangle:Clone()
  723.                 part2 = stock_triangle:Clone()
  724.                 mesh1 = part1.Mesh
  725.                 mesh2 = part2.Mesh
  726.                 part1.Parent = model
  727.                 part2.Parent = model
  728.                 triangleInfo[1] = model
  729.                 triangleInfo[2] = part1
  730.                 triangleInfo[3] = part2
  731.                 triangleInfo[4] = mesh1
  732.                 triangleInfo[5] = mesh2
  733.         end
  734.         for key, value in pairs(properties) do
  735.                 part1[key] = value
  736.                 part2[key] = value
  737.         end
  738.         local cframe = CFrame.new(v1, v2)
  739.         local relpos = cframe:pointToObjectSpace(v3)
  740.         cframe = cframe * CFrame.fromEulerAnglesXYZ(0, 0, -math.atan2(relpos.x, relpos.y))
  741.         local rel1 = cframe:pointToObjectSpace(v1)
  742.         local rel2 = cframe:pointToObjectSpace(v2)
  743.         local rel3 = cframe:pointToObjectSpace(v3)
  744.         local height = rel3.y
  745.         local width1 = rel3.z
  746.         local width2 = rel2.z - rel3.z
  747.         local relcenter1 = Vector3.new(0, height / 2, width1 / 2)
  748.         local center1 = cframe:pointToWorldSpace(relcenter1)
  749.         local relcenter2 = Vector3.new(0, height / 2, width2 / 2 + width1)
  750.         local center2 = cframe:pointToWorldSpace(relcenter2)
  751.         height = math.abs(height)
  752.         width1 = math.abs(width1)
  753.         width2 = math.abs(width2)
  754.         if not part1.Anchored then
  755.                 part1.Anchored = true
  756.         end
  757.         part1.Size = Vector3.new(0.2, height, width1)
  758.         part1.CFrame = cframe * CFrame.fromEulerAnglesXYZ(0, math.pi, 0) - cframe.p + center1  
  759.         mesh1.Scale = Vector3.new(0, height / part1.Size.y, width1 / part1.Size.z)
  760.         if not part2.Anchored then
  761.                 part2.Anchored = true
  762.         end
  763.         part2.Size = Vector3.new(0.2, height, width1)
  764.         part2.CFrame = cframe - cframe.p + center2
  765.         mesh2.Scale = Vector3.new(0, height / part1.Size.y, width2 / part2.Size.z)
  766.         model.Parent = parent
  767.         return model
  768. end
  769. PyramidCharacter.head_properties = {BrickColor = BrickColor.new(Color3.new(1, 1, 1)), Transparency = 0.5}
  770. PyramidCharacter.head_radius = math.pi
  771. PyramidCharacter.center = CFrame.new(0, 10, 0)
  772. PyramidCharacter.point1 = Vector3.new()
  773. PyramidCharacter.point2 = Vector3.new()
  774. PyramidCharacter.point3 = Vector3.new()
  775. PyramidCharacter.point4 = Vector3.new()
  776. PyramidCharacter.core_mesh_scale = Vector3.new(0.833, 0.833, 0.833)
  777. PyramidCharacter.visible = false
  778. function PyramidCharacter.Teleport(location)
  779.         PyramidCharacter.point1 = location
  780.         PyramidCharacter.point2 = location
  781.         PyramidCharacter.point3 = location
  782.         PyramidCharacter.point4 = location
  783. end
  784. local stock_core = Instance.new("Part")
  785. stock_core.Anchored = true
  786. stock_core.BottomSurface = "Smooth"
  787. stock_core.Color = Color3.new(1, 1, 1)
  788. stock_core.FormFactor = "Custom"
  789. stock_core.Locked = true
  790. stock_core.Name = "CubePyramid"
  791. stock_core.Size = Vector3.new(0.5, 0.5, 0.5)
  792. stock_core.TopSurface = "Smooth"
  793. PyramidCharacter.stock_core = stock_core
  794. PyramidCharacter.core = stock_core:Clone()
  795. PyramidCharacter.Archivable = false
  796. PyramidCharacter.core_mesh = Instance.new("BlockMesh", core)
  797. PyramidCharacter.core_lights = {}
  798. PyramidCharacter.coreLightCount = 1
  799. for index = 1, PyramidCharacter.coreLightCount do
  800.         PyramidCharacter.core_lights[index] = Instance.new("PointLight", core)
  801. end
  802. PyramidCharacter.camera_distance = (Camera.Focus.p - Camera.CoordinateFrame.p).magnitude
  803. PyramidCharacter.camera_position = Vector3.new()
  804. Camera.Changed:connect(function(property)
  805.         if PyramidCharacter.visible then
  806.                 if property == "CoordinateFrame" then
  807.                         local cframe, focus = Camera.CoordinateFrame, Camera.Focus
  808.                         local eventTime = time()
  809.                         local connection
  810.                         connection = Camera.Changed:connect(function()
  811.                                 connection:disconnect()
  812.                                 if eventTime == time() and Camera.Focus ~= focus then
  813.                                         local camera_distance = PyramidCharacter.camera_distance
  814.                                         Camera.Focus = Camera.CoordinateFrame * CFrame.new(0, 0, -camera_distance)
  815.                                         PyramidCharacter.camera_position = (Camera.CoordinateFrame * CFrame.new(0, 0, -camera_distance)).p
  816.                                 end
  817.                         end)
  818.                         coroutine.yield()
  819.                         if Camera.Focus == focus then
  820.                                 PyramidCharacter.camera_distance = (focus.p - cframe.p).magnitude
  821.                         else
  822.                                 local camera_distance = PyramidCharacter.camera_distance
  823.                                 Camera.Focus = Camera.CoordinateFrame * CFrame.new(0, 0, -camera_distance)
  824.                                 PyramidCharacter.camera_position = (Camera.CoordinateFrame * CFrame.new(0, 0, -camera_distance)).p
  825.                         end
  826.                         if connection.connected then
  827.                                 connection:disconnect()
  828.                         end
  829.                 end
  830.         end
  831. end)
  832. function PyramidCharacter.Animate()
  833.         local total_time = time()
  834.         local core = PyramidCharacter.core
  835.         local frame = PyramidCharacter.frame
  836.         if PyramidCharacter.visible then
  837.                 local core_mesh = PyramidCharacter.core_mesh
  838.                 local core_lights = PyramidCharacter.core_lights
  839.                 if not frame or frame.Parent ~= core then
  840.                         frame = Instance.new("Model")
  841.                         frame.Archivable = false
  842.                         frame.Parent = core
  843.                         PyramidCharacter.frame = frame
  844.                 end
  845.                 if core.Parent ~= Workspace then
  846.                         core = PyramidCharacter.stock_core:Clone()
  847.                         PyramidCharacter.core = core
  848.                         core.Archivable = false
  849.                         core.Parent = Workspace
  850.                         chatAdornee = core
  851.                 end
  852.                 if core_mesh.Parent ~= core then
  853.                         core_mesh = Instance.new("BlockMesh", core)
  854.                         PyramidCharacter.core_mesh = core_mesh
  855.                 end
  856.                 for index, core_light in ipairs(core_lights) do
  857.                         if core_light.Parent ~= core then
  858.                                 core_light = Instance.new("PointLight", core)
  859.                                 core_lights[index] = core_light
  860.                         end
  861.                         local vertexColor = Vector3.new(Utility.GetRainbowRGB(total_time)) * 0.25 + Vector3.new(1, 1, 1) * 0.75
  862.                         core_light.Color = Color3.new(vertexColor.X, vertexColor.Y, vertexColor.Z)
  863.                         core_light.Brightness = 0.85 + 0.15 * math.random()
  864.                         if core_light.Range ~= 30 then
  865.                                 core_light.Range = 30
  866.                         end
  867.                         if not core_light.Shadows then
  868.                                 core_light.Shadows = true
  869.                         end
  870.                 end
  871.                 if core_mesh.Offset ~= Vector3.new(0, 0, 0) then
  872.                         core_mesh.Offset = Vector3.new(0, 0, 0)
  873.                 end
  874.                 if not core.Anchored then
  875.                         core.Anchored = true
  876.                 end
  877.                 if core.Transparency ~= 0 then
  878.                         core.Transparency = 0
  879.                 end
  880.                 local core_mesh_scale = PyramidCharacter.core_mesh_scale
  881.                 local transition_speed = (math.sin(total_time * math.tau) + 1) / 16
  882.                 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()
  883.  
  884. * 0.5 + 0.5) * transition_speed
  885.                 core_mesh.Scale = core_mesh_scale * 2
  886.                 local center = CFrame.new(PyramidCharacter.camera_position) * CFrame.Angles(0, total_time * math.tau, 0)
  887.                 local cframe1 = CFrame.new(PyramidCharacter.head_radius, 0, 0)
  888.                 local cframe2 = CFrame.Angles(math.tau / -3, 0, 0)
  889.                 local cframe3 = CFrame.Angles(0, math.tau / 3, 0)
  890.                 local cframe4 = center * cframe3              
  891.                 local desired1 = center * CFrame.new(0, PyramidCharacter.head_radius, 0)
  892.                 local desired2 = center * cframe2 * cframe1
  893.                 local desired3 = cframe4 * cframe2 * cframe1
  894.                 local desired4 = cframe4 * cframe3 * cframe2 * cframe1
  895.                 local point1 = (PyramidCharacter.point1 * 3 + desired1.p) / 4
  896.                 local point2 = (PyramidCharacter.point2 * 3 + desired2.p) / 4
  897.                 local point3 = (PyramidCharacter.point3 * 3 + desired3.p) / 4
  898.                 local point4 = (PyramidCharacter.point4 * 3 + desired4.p) / 4
  899.                 PyramidCharacter.point1 = point1
  900.                 PyramidCharacter.point2 = point2
  901.                 PyramidCharacter.point3 = point3
  902.                 PyramidCharacter.point4 = point4
  903.                 local head_properties = PyramidCharacter.head_properties
  904.                 PyramidCharacter.CreateTriangle(point1, point2, point3, head_properties, frame, 1).Archivable = false
  905.                 PyramidCharacter.CreateTriangle(point2, point3, point4, head_properties, frame, 2).Archivable = false
  906.                 PyramidCharacter.CreateTriangle(point3, point4, point1, head_properties, frame, 3).Archivable = false
  907.                 PyramidCharacter.CreateTriangle(point4, point1, point2, head_properties, frame, 4).Archivable = false
  908.                 core.CFrame = CFrame.new((point1 + point2 + point3 + point4) / 4) * CFrame.Angles(total_time * math.tau, total_time * math.tau / 2,
  909.  
  910. total_time * math.tau / 3)
  911.                 PyramidCharacter.center = center
  912.         else
  913.                 if core.Parent then
  914.                         core:Destroy()
  915.                 end
  916.                 if frame and frame.Parent then
  917.                         frame:Destroy()
  918.                 end
  919.                 PyramidCharacter.frame = nil
  920.         end
  921. end
  922. function PyramidCharacter.MainLoop()
  923.         PyramidCharacter.Animate()
  924.         RunService.Stepped:wait()
  925. end
  926. TaskScheduler.Start(function()
  927.         while true do
  928.                 PyramidCharacter.MainLoop()
  929.         end
  930. end)
  931.  
  932. RBXInstance = {};
  933.  
  934. RBXInstance.init_metatable = {}
  935. function RBXInstance.init_metatable:__call(data)
  936.         local instance = Instance.new(self[1])
  937.         for key, value in pairs(data) do
  938.                 if type(key) == "number" then
  939.                         value.Parent = instance
  940.                 else
  941.                         instance[key] = value
  942.                 end
  943.         end
  944.         return instance
  945. end
  946. function RBXInstance.new(className)
  947.         return setmetatable({className}, RBXInstance.init_metatable)
  948. end
  949.  
  950. Utility = {};
  951.  
  952. function Utility.CleanLighting()
  953.         Lighting.Ambient = Color3.new(0, 0, 0)
  954.         Lighting.Brightness = 1
  955.         Lighting.ColorShift_Bottom = Color3.new(0, 0, 0)
  956.         Lighting.ColorShift_Top = Color3.new(0, 0, 0)
  957.         Lighting.FogColor = Color3.new(0.75294125080109, 0.75294125080109, 0.75294125080109)
  958.         Lighting.FogEnd = 100000
  959.         Lighting.FogStart = 0
  960.         Lighting.GeographicLatitude = 41.733299255371095
  961.         Lighting.GlobalShadows = true
  962.         Lighting.OutdoorAmbient = Color3.new(0.5, 0.5, 0.5)
  963.         Lighting.Outlines = false
  964.         Lighting.ShadowColor = Color3.new(0.70196080207825, 0.70196080207825, 0.72156864404678)
  965.         Lighting.TimeOfDay = "14:00:00"
  966.         for index, child in ipairs(Lighting:GetChildren()) do
  967.                 if child:IsA("Sky") then
  968.                         child:Destroy()
  969.                 end
  970.         end
  971. end
  972.  
  973. function Utility.GetProperty(object, field)
  974.         return object[field]
  975. end
  976.  
  977. function Utility.CaseInsensitivePattern(pattern)
  978.         return string.gsub(pattern, "(%%?)(.)", Utility.CaseInsensitivePatternReplaceFunc)
  979. end
  980. function Utility.CaseInsensitivePatternReplaceFunc(percent, letter)
  981.         if percent ~= "" or not letter:match("%a") then
  982.                 return percent .. letter
  983.         else
  984.                 return "[" .. string.lower(letter) .. string.upper(letter) .. "]"
  985.         end
  986. end
  987. function Utility.FindHumanoidClosestToRay(ray, exlusionList)
  988.         local view = CFrame.new(ray.Origin, ray.Origin + ray.Direction)
  989.         local inverseView = view:inverse()
  990.         local objects = Workspace:GetChildren()
  991.         local numObjects = #objects
  992.         local minDistance = math.huge
  993.         local closestHumanoid, closestTorso, closestTorsoPosition
  994.         for index, object in ipairs(objects) do
  995.                 for index, child in ipairs(object:GetChildren()) do
  996.                         numObjects = numObjects + 1
  997.                         objects[numObjects] = child
  998.                 end
  999.                 if object.ClassName == "Humanoid" and object.Health > 0 then
  1000.                         local torso = object.Torso
  1001.                         if torso and not (exlusionList and exlusionList[torso]) then
  1002.                                 local torsoPosition = torso.Position
  1003.                                 local relativePosition = inverseView * torsoPosition
  1004.                                 local distanceZ = -relativePosition.Z
  1005.                                 if distanceZ > 0 then
  1006.                                         local distance = (inverseView * torsoPosition * Vector3.new(1, 1, 0)).magnitude / distanceZ
  1007.                                         if distance < 0.25 and distance < minDistance then
  1008.                                                 closestHumanoid = object
  1009.                                                 closestTorso = torso
  1010.                                                 closestTorsoPosition = torsoPosition
  1011.                                                 minDistance = distance
  1012.                                         end
  1013.                                 end
  1014.                         end
  1015.                 end
  1016.         end
  1017.         return closestHumanoid, closestTorso, closestTorsoPosition, minDistance
  1018. end
  1019. function Utility.FindLocalHead()
  1020.         if Player then
  1021.                 local head, position, view
  1022.                 pcall(function()
  1023.                         position = Camera.Focus.p
  1024.                         view = Camera.CoordinateFrame
  1025.                 end)
  1026.                 pcall(function()
  1027.                         for _, child in ipairs(Workspace:GetChildren()) do
  1028.                                 if Players:GetPlayerFromCharacter(child) == Player then
  1029.                                         for _, child in ipairs(child:GetChildren()) do
  1030.                                                 if tostring(child) == "Head" and pcall(assert, pcall(Game.IsA, child, "BasePart")) then
  1031.                                                         head = child
  1032.                                                         break
  1033.                                                 end
  1034.                                         end
  1035.                                         break
  1036.                                 end
  1037.                         end
  1038.                         if not head and view then
  1039.                                 local min_distance = math.huge
  1040.                                 local objects = Workspace:GetChildren()
  1041.                                 for _, object in ipairs(objects) do
  1042.                                         local success, is_part = pcall(Game.IsA, object, "BasePart")
  1043.                                         if success and is_part then
  1044.                                                 pcall(function()
  1045.                                                         local distance = (view:pointToObjectSpace(object.Position) * Vector3.new(1, 1, 0)).magnitude
  1046.                                                         if distance < min_distance and distance < 1 then
  1047.                                                                 min_distance = distance
  1048.                                                                 head = object
  1049.                                                         elseif tostring(object) == "Head" and tostring(object.Parent):lower():match("^" .. tostring(Player):lower()) then
  1050.                                                                 min_distance = 0
  1051.                                                                 head = object
  1052.                                                         end
  1053.                                                 end)
  1054.                                                 if min_distance < 5e-4 then
  1055.                                                         break
  1056.                                                 end
  1057.                                         end
  1058.                                                 pcall(function()
  1059.                                                 if not object:IsA("Camera") then
  1060.                                                         for _, child in ipairs(object:GetChildren()) do
  1061.                                                                 objects[#objects + 1] = child
  1062.                                                         end
  1063.                                                 end
  1064.                                         end)
  1065.                                 end
  1066.                         end
  1067.                 end)
  1068.                 return head, position, view
  1069.         end
  1070. end
  1071. function Utility.GetBuildingTools()
  1072.         local backpack = Player:FindFirstChild("Backpack")
  1073.         if backpack then
  1074.                 local moveTool = Instance.new("HopperBin")
  1075.                 local cloneTool = Instance.new("HopperBin")
  1076.                 local deleteTool = Instance.new("HopperBin")
  1077.                 moveTool.BinType = Enum.BinType.GameTool
  1078.                 cloneTool.BinType = Enum.BinType.Clone
  1079.                 deleteTool.BinType = Enum.BinType.Hammer
  1080.                 moveTool.Parent = backpack
  1081.                 cloneTool.Parent = backpack
  1082.                 deleteTool.Parent = backpack
  1083.         end
  1084. end
  1085. function Utility.Rejoin()
  1086.         Workspace.Parent:service'TeleportService':Teleport(Game.PlaceId)
  1087. end
  1088.  
  1089. function Utility.BlockRobloxFilter(text)
  1090.         return string.gsub(text, ".", "%1\143")
  1091. end
  1092.  
  1093. function Utility.GetTimestamp()
  1094.         local unix_time = tick()
  1095.         local time_secs = math.floor(unix_time % 60)
  1096.         local time_mins = math.floor(unix_time / 60 % 60)
  1097.         local time_hours = math.floor(unix_time / 3600 % 24)
  1098.         return string.format("%02i:%02i:%02i", time_hours, time_mins, time_secs)
  1099. end
  1100.  
  1101. function Utility.GetRainbowRGB(hue)
  1102.         local section = hue % 1 * 3
  1103.         local secondary = 0.5 * math.pi * (section % 1)
  1104.         if section < 1 then
  1105.                 return 1, 1 - math.cos(secondary), 1 - math.sin(secondary)
  1106.         elseif section < 2 then
  1107.                 return 1 - math.sin(secondary), 1, 1 - math.cos(secondary)
  1108.         else
  1109.                 return 1 - math.cos(secondary), 1 - math.sin(secondary), 1
  1110.         end
  1111. end
  1112.  
  1113. function Utility.SetProperty(object, field, value)
  1114.         object[field] = value
  1115. end
  1116.  
  1117. function Utility.CleanWorkspace()
  1118.         for index, child in ipairs(Workspace:GetChildren()) do
  1119.                 if not (Players:GetPlayerFromCharacter(child) or child.ClassName == "Camera" or child:IsA("Script") or child.ClassName == "Terrain") then
  1120.                         pcall(child.Destroy, child)
  1121.                 end
  1122.         end
  1123.         Workspace.Terrain:Clear()
  1124.         local base = Instance.new("Part")
  1125.         base.Anchored = true
  1126.         base.BrickColor = BrickColor.new("Earth green")
  1127.         base.Locked = true
  1128.         base.Name = "Base"
  1129.         base.Size = Vector3.new(512, 1.2, 512)
  1130.         base.Parent = Workspace
  1131. end
  1132.  
  1133. function Utility.CleanWorkspaceAndScripts()
  1134.         for index, child in ipairs(Workspace:GetChildren()) do
  1135.                 if not (Players:GetPlayerFromCharacter(child) or child.ClassName == "Camera" or child.ClassName == "Terrain") then
  1136.                         pcall(child.Destroy, child)
  1137.                 end
  1138.         end
  1139.         Workspace.Terrain:Clear()
  1140.         local base = Instance.new("Part")
  1141.         base.Anchored = true
  1142.         base.BrickColor = BrickColor.new("Earth green")
  1143.         base.Locked = true
  1144.         base.Name = "Base"
  1145.         base.Size = Vector3.new(512, 1.2, 512)
  1146.         base.Parent = Workspace
  1147. end
  1148.  
  1149. function Utility.CreateDummy(cframe, name, parent)
  1150.         local model = Instance.new("Model")
  1151.         model.Archivable = false
  1152.         model.Name = name
  1153.         local humanoid = Instance.new("Humanoid", model)
  1154.         local head = Instance.new("Part", model)
  1155.         local face = Instance.new("Decal", head)
  1156.         local head_mesh = Instance.new("SpecialMesh", head)
  1157.         local torso = Instance.new("Part", model)
  1158.         local right_arm = Instance.new("Part", model)
  1159.         local left_arm = Instance.new("Part", model)
  1160.         local right_leg = Instance.new("Part", model)
  1161.         local left_leg = Instance.new("Part", model)
  1162.         local neck = Instance.new("Motor", torso)
  1163.         local right_shoulder = Instance.new("Motor", torso)
  1164.         local left_shoulder = Instance.new("Motor", torso)
  1165.         local right_hip = Instance.new("Motor", torso)
  1166.         local left_hip = Instance.new("Motor", torso)
  1167.         head.BrickColor = BrickColor.Yellow()
  1168.         head.CFrame = cframe * CFrame.new(0, 1.5, 0)
  1169.         head.FormFactor = "Symmetric"
  1170.         head.Locked = true
  1171.         head.Name = "Head"
  1172.         head.Size = Vector3.new(2, 1, 1)
  1173.         head.TopSurface = "Smooth"
  1174.         face.Texture = "rbxasset://textures/face.png"
  1175.         head_mesh.Scale = Vector3.new(1.25, 1.25, 1.25)
  1176.         torso.BrickColor = BrickColor.Blue()
  1177.         torso.CFrame = cframe
  1178.         torso.FormFactor = "Symmetric"
  1179.         torso.LeftSurface = "Weld"
  1180.         torso.Locked = true
  1181.         torso.RightSurface = "Weld"
  1182.         torso.Name = "Torso"
  1183.         torso.Size = Vector3.new(2, 2, 1)
  1184.         right_arm.BrickColor = BrickColor.Yellow()
  1185.         right_arm.CanCollide = false
  1186.         right_arm.CFrame = cframe * CFrame.new(1.5, 0, 0)
  1187.         right_arm.FormFactor = "Symmetric"
  1188.         right_arm.Locked = true
  1189.         right_arm.Name = "Right Arm"
  1190.         right_arm.Size = Vector3.new(1, 2, 1)
  1191.         left_arm.BrickColor = BrickColor.Yellow()
  1192.         left_arm.CanCollide = false
  1193.         left_arm.CFrame = cframe * CFrame.new(-1.5, 0, 0)
  1194.         left_arm.FormFactor = "Symmetric"
  1195.         left_arm.Locked = true
  1196.         left_arm.Name = "Left Arm"
  1197.         left_arm.Size = Vector3.new(1, 2, 1)
  1198.         right_leg.BrickColor = BrickColor.new("Br. yellowish green")
  1199.         right_leg.BottomSurface = "Smooth"
  1200.         right_leg.CanCollide = false
  1201.         right_leg.CFrame = cframe * CFrame.new(0.5, -2, 0)
  1202.         right_leg.FormFactor = "Symmetric"
  1203.         right_leg.Locked = true
  1204.         right_leg.Name = "Right Leg"
  1205.         right_leg.Size = Vector3.new(1, 2, 1)
  1206.         right_leg.TopSurface = "Smooth"
  1207.         left_leg.BrickColor = BrickColor.new("Br. yellowish green")
  1208.         left_leg.BottomSurface = "Smooth"
  1209.         left_leg.CanCollide = false
  1210.         left_leg.CFrame = cframe * CFrame.new(-0.5, -2, 0)
  1211.         left_leg.FormFactor = "Symmetric"
  1212.         left_leg.Locked = true
  1213.         left_leg.Name = "Left Leg"
  1214.         left_leg.Size = Vector3.new(1, 2, 1)
  1215.         left_leg.TopSurface = "Smooth"
  1216.         neck.C0 = CFrame.new(0, 1, 0, -1, -0, -0, 0, 0, 1, 0, 1, 0)
  1217.         neck.C1 = CFrame.new(0, -0.5, 0, -1, -0, -0, 0, 0, 1, 0, 1, 0)
  1218.         neck.Name = "Neck"
  1219.         neck.Part0 = torso
  1220.         neck.Part1 = head
  1221.         right_shoulder.C0 = CFrame.new(1, 0.5, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0)
  1222.         right_shoulder.C1 = CFrame.new(-0.5, 0.5, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0)
  1223.         right_shoulder.MaxVelocity = 0.15
  1224.         right_shoulder.Name = "Right Shoulder"
  1225.         right_shoulder.Part0 = torso
  1226.         right_shoulder.Part1 = right_arm
  1227.         left_shoulder.C0 = CFrame.new(-1, 0.5, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0)
  1228.         left_shoulder.C1 = CFrame.new(0.5, 0.5, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0)
  1229.         left_shoulder.MaxVelocity = 0.15
  1230.         left_shoulder.Name = "Left Shoulder"
  1231.         left_shoulder.Part0 = torso
  1232.         left_shoulder.Part1 = left_arm
  1233.         right_hip.C0 = CFrame.new(1, -1, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0)
  1234.         right_hip.C1 = CFrame.new(0.5, 1, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0)
  1235.         right_hip.MaxVelocity = 0.1
  1236.         right_hip.Name = "Right Hip"
  1237.         right_hip.Part0 = torso
  1238.         right_hip.Part1 = right_leg
  1239.         left_hip.C0 = CFrame.new(-1, -1, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0)
  1240.         left_hip.C1 = CFrame.new(-0.5, 1, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0)
  1241.         left_hip.MaxVelocity = 0.1
  1242.         left_hip.Name = "Left Hip"
  1243.         left_hip.Part0 = torso
  1244.         left_hip.Part1 = left_leg
  1245.         humanoid.Died:connect(function()
  1246.                 wait(5)
  1247.                 model:Destroy()
  1248.         end)
  1249.         model.Parent = parent
  1250.         return model  
  1251. end
  1252.  
  1253. Serializer = {};
  1254.  
  1255. Serializer.NAN = math.abs(0 / 0)
  1256.  
  1257. function Serializer.DecodeFloatArray(metadata_size, lookup, data, index)
  1258.         local metadata_bytes = math.ceil(metadata_size * 0.25)
  1259.         local metadata = {string.byte(data, index, index + metadata_bytes - 1)}
  1260.         local components = {}
  1261.         local start_index = index
  1262.         index = index + metadata_bytes
  1263.         for byte_index, byte in ipairs(metadata) do
  1264.                 local last_offset = 3
  1265.                 if byte_index == metadata_bytes then
  1266.                         last_offset = (metadata_size - 1) % 4
  1267.                 end
  1268.                 for value_offset = 0, last_offset do
  1269.                         local value_code = byte * 0.25 ^ value_offset % 4
  1270.                         value_code = value_code - value_code % 1
  1271.                         if value_code == 0 then
  1272.                                 table.insert(components, Serializer.DecodeFloat32(string.byte(data, index, index + 3)))
  1273.                                 index = index + 4
  1274.                         else
  1275.                                 table.insert(components, lookup[value_code])
  1276.                         end
  1277.                 end
  1278.         end
  1279.         return components, index - start_index
  1280. end
  1281. function Serializer.EncodeFloatArray(values, common)
  1282.         local lookup = {[common[1]] = 1, [common[2]] = 2, [common[3]] = 3}
  1283.         local value_count = #values
  1284.         local metadata_bytes = math.ceil(value_count * 0.25)
  1285.         local metadata = {}
  1286.         local buffer = {}
  1287.         for byte_index = 1, metadata_bytes do
  1288.                 local last_offset = 3
  1289.                 if byte_index == metadata_bytes then
  1290.                         last_offset = (value_count - 1) % 4
  1291.                 end
  1292.                 local metadata_byte = 0
  1293.                 local offset_multiplier = 1
  1294.                 local byte_offset = (byte_index - 1) * 4 + 1
  1295.                 for value_offset = 0, last_offset do
  1296.                         local value_index = byte_offset + value_offset
  1297.                         local value = values[value_index]
  1298.                         local code = lookup[value] or 0
  1299.                         metadata_byte = metadata_byte + code * offset_multiplier
  1300.                         offset_multiplier = offset_multiplier * 4
  1301.                         if code == 0 then
  1302.                                 table.insert(buffer, Serializer.EncodeFloat32(value))
  1303.                         end
  1304.                 end
  1305.                 metadata[byte_index] = string.char(metadata_byte)
  1306.         end
  1307.         return table.concat(metadata) .. table.concat(buffer)
  1308. end
  1309.  
  1310. function Serializer.DecodeColor3(data, index)
  1311.         local components, size = Serializer.DecodeFloatArray(3, {0, 0.5, 1}, data, index)
  1312.         return Color3.new(unpack(components)), size
  1313. end
  1314. function Serializer.DecodeFloat32(b0, b1, b2, b3)
  1315.         local b2_low = b2 % 128
  1316.         local mantissa = b0 + (b1 + b2_low * 256) * 256
  1317.         local exponent = (b2 - b2_low) / 128 + b3 % 128 * 2
  1318.         local number
  1319.         if mantissa == 0 then
  1320.                 if exponent == 0 then
  1321.                         number = 0
  1322.                 elseif exponent == 0xFF then
  1323.                         number = math.huge
  1324.                 else
  1325.                         number = 2 ^ (exponent - 127)
  1326.                 end
  1327.         elseif exponent == 255 then
  1328.                 number = Serializer.NAN
  1329.         else
  1330.                 number = (1 + mantissa / 8388608) * 2 ^ (exponent - 127)
  1331.         end
  1332.         if b3 >= 128 then
  1333.                 return -number
  1334.         else
  1335.                 return number
  1336.         end
  1337. end
  1338. function Serializer.EncodeColor3(color3)
  1339.         return Serializer.EncodeFloatArray({color3.r, color3.g, color3.b}, {0, 0.5, 1})
  1340. end
  1341. function Serializer.EncodeFloat32(number)
  1342.         if number == 0 then
  1343.                 if 1 / number > 0 then
  1344.                         return "\0\0\0\0"
  1345.                 else
  1346.                         return "\0\0\0\128"
  1347.                 end
  1348.         elseif number ~= number then
  1349.             if string.sub(tostring(number), 1, 1) == "-" then
  1350.                     return "\255\255\255\255"
  1351.                 else
  1352.                     return "\255\255\255\127"
  1353.                 end
  1354.         elseif number == math.huge then
  1355.                 return "\0\0\128\127"
  1356.         elseif number == -math.huge then
  1357.                 return "\0\0\128\255"
  1358.         else
  1359.                 local b3 = 0
  1360.                 if number < 0 then
  1361.                         number = -number
  1362.                         b3 = 128
  1363.                 end
  1364.                 local mantissa, exponent = math.frexp(number)
  1365.                 exponent = exponent + 126
  1366.                 if exponent < 0 then
  1367.                         return "\0\0\0" .. string.char(b3)
  1368.                 elseif exponent >= 255 then
  1369.                         return "\0\0\128" .. string.char(b3 + 0x7F)
  1370.                 else
  1371.                         local fraction = mantissa * 16777216 - 8388608 + 0.5
  1372.                         fraction = fraction - fraction % 1
  1373.                         local exponent_low = exponent % 2
  1374.                         local b0 = fraction % 256
  1375.                         local b1 = fraction % 65536
  1376.                         local b2 = (fraction - b1) / 65536 + exponent_low * 128
  1377.                         b1 = (b1 - b0) / 256
  1378.                         b3 = b3 + (exponent - exponent_low) / 2
  1379.                         return string.char(b0, b1, b2, b3)
  1380.                 end
  1381.         end
  1382. end
  1383.  
  1384. LuaEnum = {};
  1385.  
  1386. LuaEnum.enum_metatable = {
  1387.         __call = function(self, value)
  1388.                 local valueType = type(value)
  1389.                 if valueType == "table" and getmetatable(value) == LuaEnum.enum_item_metatable then
  1390.                         return value
  1391.                 else
  1392.                         return self[value]
  1393.                 end
  1394.         end,
  1395.         __index = function(self, key)
  1396.                 local enumItem = self.ItemsByName[key] or self.ItemsByValue[key]
  1397.                 if enumItem == nil then
  1398.                         local default = self.Default
  1399.                         if default then
  1400.                                 Logger.printf("Warning", "%s is not a valid EnumItem, returning default (%s)", Utility.ToString(key), tostring(default))
  1401.                                 enumItem = default
  1402.                         else
  1403.                                 Logger.errorf(2, "%s is not a valid EnumItem", Utility.ToString(key))
  1404.                         end
  1405.                 end
  1406.                 return enumItem
  1407.         end,
  1408.         __tostring = function(self)
  1409.                 return self.Name
  1410.         end
  1411. }
  1412. LuaEnum.enum_item_metatable = {
  1413.         __tostring = function(self)
  1414.                 return self.Enum.Name .. "." .. self.Name
  1415.         end
  1416. }
  1417. LuaEnum.init_metatable = {
  1418.         __call = function(self, items)
  1419.                 local enumItemsByName = {}
  1420.                 local enumItemsByValue = {}
  1421.                 local enum = {
  1422.                         ItemsByName = enumItemsByName,
  1423.                         ItemsByValue = enumItemsByValue,
  1424.                         Name = self[1]
  1425.                 }
  1426.                 local default = items.Default
  1427.                 if default ~= nil then
  1428.                         items.Default = nil
  1429.                 end
  1430.                 for value, name in pairs(items) do
  1431.                         local enumItem = setmetatable({
  1432.                                 Enum = enum,
  1433.                                 Name = name,
  1434.                                 Value = value
  1435.                         }, LuaEnum.enum_item_metatable)
  1436.                         enumItemsByName[name] = enumItem
  1437.                         enumItemsByValue[value] = enumItem
  1438.                         if name == default or value == default then
  1439.                                 enum.Default = enumItem
  1440.                         end
  1441.                 end
  1442.                 return setmetatable(enum, LuaEnum.enum_metatable)
  1443.         end
  1444. }
  1445. function LuaEnum.new(name)
  1446.         return setmetatable({name}, LuaEnum.init_metatable)
  1447. end
  1448.  
  1449. Logger = {};
  1450.  
  1451. Logger.entries = {0}
  1452. Logger.MessageType = LuaEnum.new "MessageType" {
  1453.         "Output",
  1454.         "Info",
  1455.         "Warning",
  1456.         "Severe",
  1457.         "Error",
  1458.         Default = "Severe"
  1459. }
  1460. Logger.MESSAGE_TYPE_SETTINGS = {
  1461.         { -- Output
  1462.                 Font = "Arial",
  1463.                 TextColor3 = Color3.new(0, 0, 0)
  1464.         },
  1465.         { -- Info
  1466.                 Font = "Arial",
  1467.                 TextColor3 = Color3.new(0, 0, 1)
  1468.         },
  1469.         { -- Warning
  1470.                 Font = "ArialBold",
  1471.                 TextColor3 = Color3.new(1, 0.5, 0)
  1472.         },
  1473.         { -- Severe/Error
  1474.                 Font = "ArialBold",
  1475.                 TextColor3 = Color3.new(1, 0, 0)
  1476.         }
  1477. }
  1478. Logger.MAX_ENTRIES = 160
  1479. Logger.WARNING_TRACE_ITEM_COUNT = 5
  1480. Logger.rbxPrint = getfenv(RbxUtility.CreateSignal).print
  1481. function Logger.error(level, message)
  1482.         message = message .. "\n" .. Logger.StackTraceToString(Logger.GenerateStackTrace(level + 1))
  1483.         Logger.AddEntry {Logger.MessageType.Error, message}
  1484.         error(level + 1, message)
  1485. end
  1486. function Logger.errorf(level, messageFormat, ...)
  1487.         Logger.error(level + 1, string.format(messageFormat, ...))
  1488. end
  1489. function Logger.print(messageType, message, level)
  1490.         messageType = Logger.MessageType(messageType)
  1491.         local entry = {messageType, message}
  1492.         Logger.rbxPrint(Logger.EntryToString(entry))
  1493.         Logger.AddEntry(entry)
  1494.         if level ~= false and messageType.Value >= Logger.MessageType.Warning.Value then
  1495.                 local maxItems
  1496.                 if messageType.Value >= Logger.MessageType.Severe.Value then
  1497.                         maxItems = math.huge
  1498.                 else
  1499.                         maxItems = Logger.WARNING_TRACE_ITEM_COUNT
  1500.                 end
  1501.                 local trace = Logger.GenerateStackTrace((level or 1) + 1, math.huge, 10, maxItems + 1)
  1502.                 local traceLength = #trace
  1503.                 local stackTraceMessage
  1504.                 local suffix = ""
  1505.                 if traceLength > maxItems then
  1506.                         trace[traceLength] = nil
  1507.                         suffix = "\n..."
  1508.                 end
  1509.                 Logger.print("Info", "Stack trace:\n" .. Logger.StackTraceToString(trace) .. suffix .. "\nStack end", false)
  1510.         end
  1511. end
  1512. function Logger.printf(messageType, messageFormat, ...)
  1513.         Logger.print(messageType, string.format(messageFormat, ...), 2)
  1514. end
  1515. function Logger.AddEntry(entry)
  1516.         local entries = Logger.entries
  1517.         if entries[1] >= Logger.MAX_ENTRIES then
  1518.                 local first = entries[2]
  1519.                 local nextFirst = first[2]
  1520.                 first[1] = nil
  1521.                 first[2] = nil
  1522.                 entries[1] = entries[1] - 1
  1523.                 entries[2] = nextFirst
  1524.                 if not nextFirst then
  1525.                         entries[3] = nil
  1526.                 end
  1527.         end
  1528.         local last = entries[3]
  1529.         local node = {entry}
  1530.         if last then
  1531.                 entries[3] = node
  1532.                 last[2] = node
  1533.         else
  1534.                 entries[2] = node
  1535.                 entries[3] = node
  1536.         end
  1537.         entries[1] = entries[1] + 1
  1538. end
  1539. function Logger.NodeIterator(list, node)
  1540.         if node then
  1541.                 node = node[2]
  1542.         else
  1543.                 node = list[2]
  1544.         end
  1545.         if node then
  1546.                 return node, node[1]
  1547.         end
  1548. end
  1549. function Logger.EntryToString(entry)
  1550.         local messageType, message = entry[1], tostring(entry[2])
  1551.         if messageType and messageType.Value >= Logger.MessageType.Info.Value then
  1552.                 return messageType.Name .. ": " .. message
  1553.         else
  1554.                 return message
  1555.         end
  1556. end
  1557. function Logger.GenerateStackTrace(level, maxLevel, maxTailCalls, maxTraceItems)
  1558.         level = level + 2
  1559.         if maxLevel == nil then
  1560.                 maxLevel = math.huge
  1561.         else
  1562.                 maxLevel = maxLevel + 2
  1563.         end
  1564.         maxTailCalls = maxTailCalls or 10
  1565.         maxTraceItems = maxTraceItems or math.huge
  1566.         local trace = {}
  1567.         local numTailCalls = 0
  1568.         while level <= maxLevel and numTailCalls <= maxTailCalls and #trace < maxTraceItems do
  1569.                 local success, errorMessage = xpcall(function() error("-", level + 1) end, function(...) return ... end)
  1570.                 if errorMessage == "-" then
  1571.                         numTailCalls = numTailCalls + 1
  1572.                 else
  1573.                         if numTailCalls > 0 then
  1574.                                 local traceSize = #trace
  1575.                                 if traceSize > 0 then
  1576.                                         trace[#trace][3] = numTailCalls
  1577.                                 end
  1578.                                 numTailCalls = 0
  1579.                         end
  1580.                         local script, line = string.match(errorMessage, "(.*):(%d+)")
  1581.                         trace[#trace + 1] = {script, tonumber(line), 0}
  1582.                 end
  1583.                 level = level + 1
  1584.         end
  1585.         return trace
  1586. end
  1587. function Logger.StackTraceToString(trace)
  1588.         local buffer = {}
  1589.         for _, data in ipairs(trace) do
  1590.                 buffer[#buffer + 1] = string.format("Script %q, line %d", data[1], data[2])
  1591.                 local numTailCalls = data[3]
  1592.                 if numTailCalls == 1 then
  1593.                         buffer[#buffer + 1] = "... 1 tail call"
  1594.                 elseif numTailCalls > 1 then
  1595.                         buffer[#buffer + 1] = string.format("... %d tail calls", numTailCalls)
  1596.                 end
  1597.         end
  1598.         return table.concat(buffer, "\n")
  1599. end
  1600. function Logger.MessageOutFunc(message, messageType)
  1601.         if AdvancedGUI and AdvancedGUI.Print then
  1602.                 local messageTypeValue
  1603.                 if messageType == Enum.MessageType.MessageOutput then
  1604.                         local tagName, untaggedMessage = string.match(message, "(%a+): (.*)")
  1605.                         if tagName == "Info" or tagName == "Warning" or tagName == "Severe" then
  1606.                                 messageTypeValue = Logger.MessageType[tagName].Value
  1607.                                 message = untaggedMessage
  1608.                         else
  1609.                                 messageTypeValue = Logger.MessageType.Output.Value
  1610.                         end
  1611.                 else
  1612.                         messageTypeValue = messageType.Value + 1
  1613.                 end
  1614.                 AdvancedGUI.PrintFormat(Logger.MESSAGE_TYPE_SETTINGS[messageTypeValue], message)
  1615.         end
  1616. end
  1617. function print(...)
  1618.         local args = {...}
  1619.         local buffer = {}
  1620.         for index = 1, select("#", ...) do
  1621.                 buffer[index] = tostring(args[index])
  1622.         end
  1623.         local message = table.concat(buffer, "\t")
  1624.         Logger.print("Output", message)
  1625. end
  1626.  
  1627. CharacterAppearance = {};
  1628.  
  1629. CharacterAppearance.defaultAppearanceId = 2
  1630. CharacterAppearance.stock = {}
  1631. function CharacterAppearance.Create(properties)
  1632.         local id = properties.Id
  1633.         local bodyColors = Instance.new("BodyColors")
  1634.         bodyColors.HeadColor = properties.HeadColor
  1635.         bodyColors.TorsoColor = properties.TorsoColor
  1636.         bodyColors.RightArmColor = properties.RightArmColor
  1637.         bodyColors.LeftArmColor = properties.LeftArmColor
  1638.         bodyColors.RightLegColor = properties.RightLegColor
  1639.         bodyColors.LeftLegColor = properties.LeftLegColor
  1640.         local characterObjects = {bodyColors}
  1641.         local headObjects = {}
  1642.         local data = {
  1643.                 characterObjects = characterObjects,
  1644.                 headObjects = headObjects,
  1645.                 tshirt = properties.TShirt
  1646.         }
  1647.         for _, assetId in ipairs(properties.CharacterAssets) do
  1648.                 TaskScheduler.Start(CharacterAppearance.LoadAsset, characterObjects, assetId)
  1649.         end
  1650.         for _, assetId in ipairs(properties.HeadAssets) do
  1651.                 TaskScheduler.Start(CharacterAppearance.LoadAsset, headObjects, assetId)
  1652.         end
  1653.         CharacterAppearance.stock[id] = data
  1654. end
  1655. function CharacterAppearance.GetDefaultAppearance()
  1656.         return CharacterAppearance.stock[CharacterAppearance.defaultAppearanceId]
  1657. end
  1658. function CharacterAppearance.LoadAsset(objects, assetId)
  1659.         local asset = InsertService:LoadAsset(assetId)
  1660.         for _, child in ipairs(asset:GetChildren()) do
  1661.                 child.Archivable = true
  1662.                 table.insert(objects, child:Clone())
  1663.         end
  1664. end
  1665. CharacterAppearance.Create {
  1666.         Id = 1,
  1667.         HeadColor = BrickColor.new("Institutional white"),
  1668.         TorsoColor = BrickColor.new("Institutional white"),
  1669.         RightArmColor = BrickColor.new("Institutional white"),
  1670.         LeftArmColor = BrickColor.new("Institutional white"),
  1671.         RightLegColor = BrickColor.new("Institutional white"),
  1672.         LeftLegColor = BrickColor.new("Institutional white"),
  1673.         CharacterAssets = {
  1674.                 90825058, 90825211,
  1675.                 27112056, 27112052,
  1676.                 27112039, 27112025,
  1677.                 27112068, 38322996
  1678.         },
  1679.         HeadAssets = {
  1680.                 20722130,
  1681.                 8330576
  1682.         }
  1683. }
  1684. CharacterAppearance.Create {
  1685.         Id = 2,
  1686.         HeadColor = BrickColor.new("Institutional white"),
  1687.         TorsoColor = BrickColor.new("Institutional white"),
  1688.         RightArmColor = BrickColor.new("Institutional white"),
  1689.         LeftArmColor = BrickColor.new("Institutional white"),
  1690.         RightLegColor = BrickColor.new("Institutional white"),
  1691.         LeftLegColor = BrickColor.new("Institutional white"),
  1692.         CharacterAssets = {
  1693.                 90825058, 90825211,
  1694.                 11748356, 1029025,
  1695.                 1235488, 27112056,
  1696.                 27112052, 27112039,
  1697.                 27112025, 27112068
  1698.         },
  1699.         HeadAssets = {
  1700.                 20722130
  1701.         }
  1702. }
  1703. CharacterAppearance.Create {
  1704.         Id = 3,
  1705.         HeadColor = BrickColor.new("Pastel brown"),
  1706.         TorsoColor = BrickColor.new("Pastel brown"),
  1707.         RightArmColor = BrickColor.new("Pastel brown"),
  1708.         LeftArmColor = BrickColor.new("Pastel brown"),
  1709.         RightLegColor = BrickColor.new("White"),
  1710.         LeftLegColor = BrickColor.new("White"),
  1711.         CharacterAssets = {
  1712.                 134289125, 48474356,
  1713.                 100339040, 46302558,
  1714.                 153955895
  1715.         },
  1716.         HeadAssets = {},
  1717.         TShirt = "rbxassetid://148856353"
  1718. }
  1719. CharacterAppearance.Create {
  1720.         Id = 4,
  1721.         HeadColor = BrickColor.new("Pastel brown"),
  1722.         TorsoColor = BrickColor.new("Pastel brown"),
  1723.         RightArmColor = BrickColor.new("Pastel brown"),
  1724.         LeftArmColor = BrickColor.new("Pastel brown"),
  1725.         RightLegColor = BrickColor.new("White"),
  1726.         LeftLegColor = BrickColor.new("White"),
  1727.         CharacterAssets = {
  1728.                 129458426, 96678344, 184489190
  1729.         },
  1730.         HeadAssets = {},
  1731.         TShirt = "rbxassetid://160146697"
  1732. }
  1733.  
  1734. GraphicalEffects = {};
  1735.  
  1736. local MESH_IDS = {"rbxassetid://15310891"}
  1737. local SOUND_IDS = {"rbxassetid://2248511", "rbxassetid://1369158"}
  1738. local TEXTURE_IDS = {"rbxassetid://36527089", "rbxassetid://122610943", "rbxassetid://126561317", "rbxassetid://127033719"}
  1739. local preloadConnections = {}
  1740. local reloadingPreloads = false
  1741. function GraphicalEffects.InitPreloads()
  1742.         local preload_part = Instance.new("Part")
  1743.         GraphicalEffects.preload_part = preload_part
  1744.         preload_part.Anchored = true
  1745.         preload_part.Archivable = false
  1746.         preload_part.BottomSurface = "Smooth"
  1747.         preload_part.CanCollide = false
  1748.         preload_part.CFrame = CFrame.new(math.huge, math.huge, math.huge)
  1749.         preload_part.FormFactor = "Custom"
  1750.         preload_part.Locked = true
  1751.         preload_part.Name = "Asset Preloader"
  1752.         preload_part.Size = Vector3.new(0.2, 0.2, 0.2)
  1753.         preload_part.TopSurface = "Smooth"
  1754.         preload_part.Transparency = 1
  1755.         preloadConnections[preload_part] = preload_part.AncestryChanged:connect(GraphicalEffects.PreloadsAncestryChanged)
  1756.         for _, mesh_id in ipairs(MESH_IDS) do
  1757.                 local mesh = Instance.new("SpecialMesh")
  1758.                 mesh.MeshType = "FileMesh"
  1759.                 mesh.MeshId = mesh_id
  1760.                 preloadConnections[mesh] = mesh.AncestryChanged:connect(GraphicalEffects.PreloadsAncestryChanged)
  1761.                 mesh.Parent = preload_part
  1762.         end
  1763.         for _, sound_id in ipairs(SOUND_IDS) do
  1764.                 local sound = Instance.new("Sound")
  1765.                 sound.SoundId = sound_id
  1766.                 sound.Volume = 0
  1767.                 preloadConnections[sound] = sound.AncestryChanged:connect(GraphicalEffects.PreloadsAncestryChanged)
  1768.                 sound.Parent = preload_part
  1769.         end
  1770.         for _, texture_id in ipairs(TEXTURE_IDS) do
  1771.                 local decal = Instance.new("Decal")
  1772.                 decal.Texture = texture_id
  1773.                 preloadConnections[decal] = decal.AncestryChanged:connect(GraphicalEffects.PreloadsAncestryChanged)
  1774.                 decal.Parent = preload_part
  1775.         end
  1776.         preload_part.Parent = Workspace
  1777. end
  1778. function GraphicalEffects.PreloadsAncestryChanged(child, parent)
  1779.         if not reloadingPreloads and parent ~= GraphicalEffects.preload_part and parent ~= Workspace then
  1780.                 reloadingPreloads = true
  1781.                 for _, connection in pairs(preloadConnections) do
  1782.                         connection:disconnect()
  1783.                         preloadConnections[_] = nil
  1784.                 end
  1785.                 wait(1)
  1786.                 reloadingPreloads = false
  1787.                 GraphicalEffects.InitPreloads()
  1788.         end
  1789. end
  1790. GraphicalEffects.InitPreloads()
  1791. -- Hyper beam
  1792. function GraphicalEffects.FireSpaceHyperBeam(target, power, duration, radius, height, deviation)
  1793.         local stepTime, gameTime = 1 / 30, TaskScheduler.GetCurrentTime()
  1794.         local frames = duration * 30
  1795.         local beamColorOffset = 0.75 * tick() -- math.random()
  1796.         local blastPressure = power * 62500 + 250000
  1797.         local beamPart = Instance.new("Part")
  1798.         local beamMesh = Instance.new("SpecialMesh", beamPart)
  1799.         local explosion = Instance.new("Explosion")
  1800.         local sound = Instance.new("Sound", beamPart)
  1801.         beamPart.Anchored = true
  1802.         beamPart.CanCollide = false
  1803.         beamPart.CFrame = CFrame.new(target, target + Vector3.new(deviation * (math.random() - 0.5), deviation * (math.random() - 0.5), height))
  1804.         beamPart.FormFactor = "Custom"
  1805.         beamPart.Locked = true
  1806.         beamPart.Size = Vector3.new(0.2, 0.2, 0.2)
  1807.         beamMesh.MeshId = "rbxassetid://15310891"
  1808.         beamMesh.MeshType = "FileMesh"
  1809.         beamMesh.TextureId = "rbxassetid://36527089"
  1810.         local beamGlowPart1 = beamPart:Clone()
  1811.         local beamGlowMesh1 = beamMesh:Clone()
  1812.         local beamGlowPart2 = beamPart:Clone()
  1813.         local beamGlowMesh2 = beamMesh:Clone()
  1814.         local beamLight = Instance.new("PointLight", beamPart)
  1815.         beamLight.Range = power * 2
  1816.         beamLight.Shadows = true
  1817.         explosion.BlastPressure = blastPressure
  1818.         explosion.BlastRadius = power
  1819.         explosion.Position = target
  1820.         sound.SoundId = "rbxassetid://2248511"
  1821.         sound.Volume = 1
  1822.         local explosionHitConnection = explosion.Hit:connect(function(part, distance)
  1823.                 if not part.Anchored and part:GetMass() < power * power then
  1824.                         pcall(part.BreakJoints, part)
  1825.                         part.Color = Color3.new(Utility.GetRainbowRGB(1.5 * gameTime + beamColorOffset))
  1826.                 end
  1827.         end)
  1828.         beamPart.Transparency = 0.5
  1829.         beamPart.Archivable = false
  1830.         beamGlowPart1.Transparency = 0.75
  1831.         beamGlowPart2.Transparency = 0.75
  1832.         beamGlowMesh1.Parent = beamGlowPart1
  1833.         beamGlowPart1.Parent = beamPart
  1834.         beamGlowMesh2.Parent = beamGlowPart2
  1835.         beamGlowPart2.Parent = beamPart
  1836.         beamPart.Parent = workspace
  1837.         explosion.Parent = workspace
  1838.         for frame = 1, frames do
  1839.                 local progress = frame / frames
  1840.                 local alpha = 1 - math.sin(0.5 * math.pi * progress)
  1841.                 local scale = 0.4 * alpha
  1842.                 local glowScale1 = alpha * (0.5 + 0.5 * math.sin(math.tau * (8 * gameTime + beamColorOffset)))
  1843.                 local glowScale2 = alpha * (0.5 + 0.5 * math.cos(math.tau * (8 * gameTime + beamColorOffset)))
  1844.                 local vertexColor =  Vector3.new(Utility.GetRainbowRGB(1.5 * gameTime + beamColorOffset))
  1845.                 beamLight.Brightness = 1 - progress
  1846.                 beamLight.Color = Color3.new(vertexColor.x, vertexColor.y, vertexColor.z)
  1847.                 beamMesh.Scale = Vector3.new(radius * scale, 9000, radius * scale)
  1848.                 beamMesh.VertexColor = vertexColor
  1849.                 beamGlowMesh1.Scale = Vector3.new(1.2 * radius * glowScale1, 9000, 1.2 * radius * glowScale1)
  1850.                 beamGlowMesh1.VertexColor = vertexColor
  1851.                 beamGlowMesh2.Scale = Vector3.new(1.2 * radius * glowScale2, 9000, 1.2 * radius * glowScale2)
  1852.                 beamGlowMesh2.VertexColor = vertexColor
  1853.                 RunService.Stepped:wait()
  1854.                 gameTime = TaskScheduler.GetCurrentTime()
  1855.                 if frame <= 2 then
  1856.                         local explosion = Instance.new("Explosion")
  1857.                         explosion.BlastPressure = (1 - progress) * blastPressure
  1858.                         explosion.BlastRadius = (1 - progress) * power
  1859.                         explosion.Position = target
  1860.                         explosion.Parent = Workspace
  1861.                         if frame == 2 then
  1862.                                 sound:Play()
  1863.                         end
  1864.                 end
  1865.         end
  1866.         pcall(beamPart.Destroy, beamPart)
  1867.         explosionHitConnection:disconnect()
  1868. end
  1869. function GraphicalEffects.SpaceHyperBeam(target, power, duration, radius, height, deviation)
  1870.         TaskScheduler.Start(GraphicalEffects.FireSpaceHyperBeam, target, power or 12, duration or 1.5, radius or 6, height or 600, deviation or 20)
  1871. end
  1872.  
  1873. function GraphicalEffects.CrystalRing(data)
  1874.         data = data or {}
  1875.         local crystal_count = data.crystal_count or 10
  1876.         local crystal_color = data.crystal_color or BrickColor.new("Bright red")
  1877.         local crystal_scale = data.crystal_scale or Vector3.new(2 / 3, 2, 2 / 3)
  1878.         local fade_out_color = data.fade_out_color or BrickColor.new("Really black")
  1879.         local radius = radius or 1.25 * crystal_count / math.pi
  1880.         local spawn_duration = data.spawn_duration or 0.065
  1881.         local full_spawn_duration = spawn_duration * crystal_count
  1882.         local float_duration = data.float_duration or 5
  1883.         local wave_amplitude = data.wave_amplitude or 0.5
  1884.         local wave_period = data.wave_period or 1
  1885.         local appear_duration = data.appear_duration or 0.1
  1886.         local disappear_duration = data.disappear_duration or 0.5
  1887.         local base_part = data.base_part
  1888.         local offset_cframe
  1889.         if data.position then
  1890.                 offset_cframe = CFrame.new(data.position)
  1891.                 if base_part then
  1892.                         offset_cframe = base_part.CFrame:toObjectSpace(offset_cframe)
  1893.                 end
  1894.         else
  1895.                 offset_cframe = CFrame.new()
  1896.         end
  1897.         local crystal_template = Instance.new("Part")
  1898.         crystal_template.Anchored = true
  1899.         crystal_template.Locked = true
  1900.         crystal_template.CanCollide = false
  1901.         crystal_template.BottomSurface = "Smooth"
  1902.         crystal_template.TopSurface = "Smooth"
  1903.         crystal_template.BrickColor = crystal_color
  1904.         crystal_template.FormFactor = "Symmetric"
  1905.         crystal_template.Size = Vector3.new(1, 1, 1)
  1906.         local crystal_light = Instance.new("PointLight", crystal_template)
  1907.         crystal_light.Brightness = 0.1 / crystal_count
  1908.         crystal_light.Color = crystal_color.Color
  1909.         crystal_light.Name = "Light"
  1910.         crystal_light.Range = radius
  1911.         crystal_light.Shadows = true
  1912.         local crystal_mesh = Instance.new("SpecialMesh", crystal_template)
  1913.         crystal_mesh.MeshId = "rbxassetid://9756362"
  1914.         crystal_mesh.MeshType = "FileMesh"
  1915.         crystal_mesh.Name = "Mesh"
  1916.         crystal_mesh.Scale = crystal_scale
  1917.         local crystal_model = Instance.new("Model")
  1918.         crystal_model.Archivable = false
  1919.         crystal_model.Name = "Crystal Model"
  1920.         crystal_model.Parent = Workspace
  1921.         local crystals = {}
  1922.         local lights = {}
  1923.         local meshes = {}
  1924.         for index = 1, crystal_count do
  1925.                 local crystal = crystal_template:Clone()
  1926.                 crystal.Parent = crystal_model
  1927.                 crystals[index] = crystal
  1928.                 lights[index] = crystal.Light
  1929.                 meshes[index] = crystal.Mesh
  1930.         end
  1931.         local start_time = tick()
  1932.         repeat
  1933.                 local base_cframe = offset_cframe
  1934.                 if base_part then
  1935.                         base_cframe = base_part.CFrame * base_cframe
  1936.                 end
  1937.                 local elapsed_time = tick() - start_time
  1938.                 for index, crystal in ipairs(crystals) do
  1939.                         local crystal_time = elapsed_time - index * spawn_duration
  1940.                         local disappear_time = crystal_time - float_duration
  1941.                         local offset
  1942.                         if crystal_time < 0 then
  1943.                                 offset = 0
  1944.                         elseif crystal_time < appear_duration then
  1945.                                 offset = radius * crystal_time / appear_duration
  1946.                         else
  1947.                                 offset = radius
  1948.                         end
  1949.                         local wave_offset
  1950.                         if disappear_time >= 0 then
  1951.                                 local disappear_progress = disappear_time / disappear_duration
  1952.                                 if disappear_progress > 1 then
  1953.                                         if crystal.Parent then
  1954.                                                 crystal:Destroy()
  1955.                                         end
  1956.                                 else
  1957.                                         local inverse_progress = 1 - disappear_progress
  1958.                                         local light = lights[index]
  1959.                                         local mesh = meshes[index]
  1960.                                         crystal.BrickColor = fade_out_color
  1961.                                         light.Brightness = 2 * inverse_progress
  1962.                                         light.Range = 2 * radius
  1963.                                         mesh.Scale = crystal_scale * inverse_progress
  1964.                                 end
  1965.                                 wave_offset = 0
  1966.                         else
  1967.                                 wave_offset = wave_amplitude * math.sin(math.tau * (elapsed_time - index / crystal_count * 3) / wave_period)
  1968.                         end
  1969.                         local rotation_angle = (tick() * 0.5 + (index - 1) / crystal_count) % 1 * math.tau
  1970.                         crystal.CFrame = base_cframe * CFrame.Angles(0, rotation_angle, 0) * CFrame.new(0, wave_offset, -offset)
  1971.                 end
  1972.                 RunService.Stepped:wait()
  1973.         until elapsed_time >= float_duration + full_spawn_duration + disappear_duration
  1974.         if crystal_model.Parent then
  1975.                 crystal_model:Destroy()
  1976.         end
  1977. end
  1978.  
  1979. GraphicalEffects.magicCircleData = {}
  1980. GraphicalEffects.MAGIC_CIRCLE_DEFAULT_OFFSET = 6.25
  1981. function GraphicalEffects.AnimateMagicCircle(data)
  1982.         local frame, direction, magic_circle_model, magic_circle_part, magic_circle_light, magic_circle_decal_back, magic_circle_decal_front, duration,
  1983.  
  1984. stay, magic_circle_adornee_func, magic_circle_offset = unpack(data)
  1985.         frame = frame + 1
  1986.         data[1] = frame
  1987.         local transparency = (frame / duration) ^ stay
  1988.         local opacity = 1 - transparency
  1989.         if frame == duration then
  1990.                 pcall(Game.Destroy, magic_circle_model)
  1991.                 GraphicalEffects.magicCircleData[data] = nil
  1992.         else
  1993.                 if magic_circle_model.Parent ~= Workspace then
  1994.                         pcall(Utility.SetProperty, magic_circle_model, "Parent", Workspace)
  1995.                 end
  1996.                 local magic_circle_adornee = magic_circle_adornee_func()
  1997.                 magic_circle_position = magic_circle_adornee.Position + direction * magic_circle_offset
  1998.                 local magic_circle_cframe = CFrame.new(magic_circle_position, magic_circle_position + direction) * CFrame.Angles(0, 0, math.tau * frame /
  1999.  
  2000. 25)
  2001.                 magic_circle_part.CFrame = magic_circle_cframe
  2002.                 magic_circle_light.Brightness = opacity
  2003.                 magic_circle_decal_back.Transparency = transparency
  2004.                 magic_circle_decal_front.Transparency = transparency
  2005.         end
  2006. end
  2007. function GraphicalEffects.CreateMagicCircle(target, magic_circle_scale, magic_circle_image, light_color, duration, stay, magic_circle_adornee_func,
  2008.  
  2009. magic_circle_offset)
  2010.         local magic_circle_adornee = magic_circle_adornee_func()
  2011.         if magic_circle_adornee then
  2012.                 local origin = magic_circle_adornee.Position
  2013.                 local direction = (target - origin).unit
  2014.                 local magic_circle_position = origin + direction * magic_circle_offset
  2015.                 local magic_circle_cframe = CFrame.new(magic_circle_position, magic_circle_position + direction)
  2016.                 local magic_circle_model = Instance.new("Model")
  2017.                 local magic_circle_part = Instance.new("Part", magic_circle_model)
  2018.                 local magic_circle_mesh = Instance.new("BlockMesh", magic_circle_part)
  2019.                 local magic_circle_light = Instance.new("PointLight", magic_circle_part)
  2020.                 local magic_circle_decal_back = Instance.new("Decal", magic_circle_part)
  2021.                 local magic_circle_decal_front = Instance.new("Decal", magic_circle_part)
  2022.                 magic_circle_model.Archivable = false
  2023.                 magic_circle_part.Anchored = true
  2024.                 magic_circle_part.BottomSurface = "Smooth"
  2025.                 magic_circle_part.CanCollide = false
  2026.                 magic_circle_part.CFrame = magic_circle_cframe
  2027.                 magic_circle_part.FormFactor = "Custom"
  2028.                 magic_circle_part.Locked = true
  2029.                 magic_circle_part.Size = Vector3.new(0.2, 0.2, 0.2)
  2030.                 magic_circle_part.TopSurface = "Smooth"
  2031.                 magic_circle_part.Transparency = 1
  2032.                 magic_circle_mesh.Scale = Vector3.new(60, 60, 0) * magic_circle_scale
  2033.                 magic_circle_light.Color = light_color
  2034.                 magic_circle_light.Range = 16 * magic_circle_scale
  2035.                 magic_circle_light.Shadows = true
  2036.                 magic_circle_decal_back.Face = "Back"
  2037.                 magic_circle_decal_back.Texture = magic_circle_image
  2038.                 magic_circle_decal_front.Face = "Front"
  2039.                 magic_circle_decal_front.Texture = magic_circle_image
  2040.                 magic_circle_model.Parent = Workspace
  2041.                 local data = {0, direction, magic_circle_model, magic_circle_part, magic_circle_light, magic_circle_decal_back, magic_circle_decal_front,
  2042.  
  2043. duration, stay, magic_circle_adornee_func, magic_circle_offset}
  2044.                 GraphicalEffects.magicCircleData[data] = true
  2045.                 return data
  2046.         end
  2047. end
  2048.  
  2049. GraphicalEffects.missileData = {}
  2050. GraphicalEffects.missileParts = {}
  2051. function GraphicalEffects.AnimateMissile(data)
  2052.         local frame, missilePart, targetPart, timeCreated, direction, touchedConnection, explodeRequested, bodyGyro, swooshSound, magicCircleData, lifeTime,
  2053.  
  2054. pointOnPart, flipped = unpack(data)
  2055.         frame = frame + 1
  2056.         data[1] = frame
  2057.         if flipped then
  2058.                 direction = -direction
  2059.         end
  2060.         if frame <= 10 then
  2061.                 if frame == 2 then
  2062.                         swooshSound:Play()
  2063.                 end
  2064.                 missilePart.Anchored = true
  2065.                 local progress = frame / 10
  2066.                 missilePart.Size = Vector3.new(1, 1, progress * 4)
  2067.                 local magicCirclePart = magicCircleData[4]
  2068.                 local magicCirclePosition = magicCirclePart.Position
  2069.                 local missileOffset = 2 * progress * direction
  2070.                 local missilePosition = magicCirclePosition + missileOffset
  2071.                 missilePart.CFrame = CFrame.new(missilePosition, missilePosition + direction)
  2072.                 --missilePart.Transparency = 0.5 * (1 - progress)
  2073.                 if frame == 10 then
  2074.                         touchedConnection = missilePart.Touched:connect(function(hit)
  2075.                                 if hit.CanCollide and hit.Parent and not GraphicalEffects.missileParts[hit] then
  2076.                                         touchedConnection:disconnect()
  2077.                                         data[7] = true
  2078.                                 end
  2079.                         end)
  2080.                         data[6] = touchedConnection
  2081.                 end
  2082.         else
  2083.                 missilePart.Anchored = false
  2084.                 local missilePosition = missilePart.Position
  2085.                 local targetPosition = targetPart.CFrame * pointOnPart
  2086.                 local distanceVector = targetPosition - missilePosition
  2087.                 local elapsedTime = time() - timeCreated
  2088.                 local targetParent = targetPart.Parent
  2089.                 if explodeRequested or (targetParent and distanceVector.magnitude < 10) or elapsedTime > lifeTime then
  2090.                         GraphicalEffects.missileData[data] = nil
  2091.                         GraphicalEffects.missileParts[missilePart] = nil
  2092.                         touchedConnection:disconnect()
  2093.                         if missilePart.Parent then
  2094.                                 missilePart:Destroy()
  2095.                                 local explosion = Instance.new("Explosion")
  2096.                                 explosion.BlastRadius = 12.5
  2097.                                 explosion.Position = missilePosition
  2098.                                 local explosionHitConnection = explosion.Hit:connect(function(hit, distance)
  2099.                                         local missileData = GraphicalEffects.missileParts[hit]
  2100.                                         if missileData and distance < 3 then
  2101.                                                 missileData[7] = true
  2102.                                         else
  2103.                                                 pcall(hit.BreakJoints, hit)
  2104.                                         end
  2105.                                 end)
  2106.                                 explosion.Parent = Workspace
  2107.                                 TaskScheduler.Schedule(1, explosionHitConnection.disconnect, explosionHitConnection)
  2108.                         end
  2109.                 else
  2110.                         local targetInWorkspace = targetPart:IsDescendantOf(Workspace)
  2111.                         if targetInWorkspace then
  2112.                                 direction = distanceVector.unit
  2113.                                 data[5] = direction
  2114.                         end
  2115.                         local speed = 14 + elapsedTime * 10
  2116.                         local gyroD
  2117.                         if elapsedTime < 42.5 and targetInWorkspace then
  2118.                                 gyroD = 1000 - elapsedTime * 15
  2119.                         else
  2120.                                 gyroD = 100
  2121.                                 bodyGyro.maxTorque = Vector3.new(0, 0, 0)
  2122.                                 if elapsedTime + 7.5 < lifeTime then
  2123.                                         data[11] = elapsedTime + 7.5
  2124.                                 end
  2125.                         end
  2126.                         bodyGyro.D = gyroD
  2127.                         bodyGyro.cframe = CFrame.new(Vector3.new(), direction)
  2128.                         missilePart.Velocity = missilePart.CFrame.lookVector * speed
  2129.                 end
  2130.         end
  2131. end
  2132. function GraphicalEffects.ShootMissile(targetPart, pointOnPart, direction, magic_circle_adornee_func, magic_circle_offset, flipped)
  2133.         if not magic_circle_offset then
  2134.                 magic_circle_offset = GraphicalEffects.MAGIC_CIRCLE_DEFAULT_OFFSET
  2135.         end
  2136.         local targetPosition = targetPart.Position
  2137.         local headPosition = chatAdornee.Position
  2138.         local origin = CFrame.new(headPosition, headPosition + direction) + direction * magic_circle_offset
  2139.         local missilePart = Instance.new("Part")
  2140.         local antiGravityForce = Instance.new("BodyForce", missilePart)
  2141.         local bodyGyro = Instance.new("BodyGyro", missilePart)
  2142.         local explosionSound = Instance.new("Sound", missilePart)
  2143.         local swooshSound = Instance.new("Sound", missilePart)
  2144.         antiGravityForce.force = Vector3.new(0, 196.2 * 4, 0)
  2145.         bodyGyro.D = 1000
  2146.         bodyGyro.maxTorque = Vector3.new(1, 1, 1)
  2147.         explosionSound.PlayOnRemove = true
  2148.         explosionSound.SoundId = "rbxasset://sounds/collide.wav"
  2149.         explosionSound.Volume = 1
  2150.         missilePart.Anchored = true
  2151.         missilePart.BackSurface = "Studs"
  2152.         missilePart.BottomSurface = "Studs"
  2153.         missilePart.BrickColor = BrickColor.Red()
  2154.         missilePart.CFrame = origin
  2155.         missilePart.FormFactor = "Custom"
  2156.         missilePart.FrontSurface = "Studs"
  2157.         missilePart.LeftSurface = "Studs"
  2158.         missilePart.Locked = true
  2159.         missilePart.RightSurface = "Studs"
  2160.         missilePart.Size = Vector3.new(1, 1, 0.2)
  2161.         missilePart.TopSurface = "Studs"
  2162.         --missilePart.Transparency = 0.5
  2163.         swooshSound.Looped = true
  2164.         swooshSound.SoundId = "rbxasset://sounds/Rocket whoosh 01.wav"
  2165.         swooshSound.Volume = 0.7
  2166.         local magicCircleData = GraphicalEffects.CreateMagicCircle(headPosition + direction * 1000, 0.875, "rbxassetid://127033719", Color3.new(1, 1, 1),
  2167.  
  2168. 40, 4, magic_circle_adornee_func or function() return chatAdornee end, magic_circle_offset)
  2169.         local data = {0, missilePart, targetPart, time(), direction, false, false, bodyGyro, swooshSound, magicCircleData, 50, pointOnPart, flipped}
  2170.         missilePart.Parent = Workspace
  2171.         GraphicalEffects.missileData[data] = true
  2172.         GraphicalEffects.missileParts[missilePart] = data
  2173. end
  2174.  
  2175. function GraphicalEffects.CubicInterpolate(y0, y1, y2, y3, mu)
  2176.         local a0, a1, a2, a3, mu2
  2177.         mu2 = mu * mu
  2178.         a0 = y3 - y2 - y0 + y1
  2179.         a1 = y0 - y1 - a0
  2180.         a2 = y2 - y0
  2181.         a3 = y1
  2182.         return a0 * mu * mu2 + a1 * mu2 + a2 * mu + a3
  2183. end
  2184. function GraphicalEffects.JointCrap(model, cycletime)
  2185.         if model then
  2186.                 local cycletime = cycletime or (0.75 * (1 + math.random() * 4))
  2187.                 local offsetradius = 0.75
  2188.                 local rotationoffset = math.pi
  2189.                 local joints = {}
  2190.                 local stack = model:GetChildren()
  2191.                 while #stack ~= 0 do
  2192.                         local object = stack[#stack]
  2193.                         table.remove(stack)
  2194.                         for index, child in ipairs(object:GetChildren()) do
  2195.                                 table.insert(stack, child)
  2196.                         end
  2197.                         if object:IsA("JointInstance") then
  2198.                                 table.insert(joints, object)
  2199.                         end
  2200.                 end
  2201.                 local rot0 = {}
  2202.                 local rot1 = {}
  2203.                 local rot2 = {}
  2204.                 local rot3 = {}
  2205.                 local rot4 = {}
  2206.                 for index, joint in ipairs(joints) do
  2207.                         local pos = Vector3.new(math.random() - 0.5, math.random() - 0.5, math.random() - 0.5).unit * offsetradius
  2208.                         local rot = Vector3.new(math.random(), math.random(), math.random()) * rotationoffset
  2209.                         rot0[index] = {joint.C0, joint.C1}
  2210.                         rot = Vector3.new(rot.x % (math.tau), rot.y % (math.tau), rot.z % (math.tau))
  2211.                         rot2[index] = {pos, rot}
  2212.                         pos = Vector3.new(math.random() - 0.5, math.random() - 0.5, math.random() - 0.5).unit * offsetradius
  2213.                         rot = rot + Vector3.new(math.random(), math.random(), math.random()) * rotationoffset
  2214.                         rot = Vector3.new(rot.x % (math.tau), rot.y % (math.tau), rot.z % (math.tau))
  2215.                         rot3[index] = {pos, rot}
  2216.                         pos = Vector3.new(math.random() - 0.5, math.random() - 0.5, math.random() - 0.5).unit * offsetradius
  2217.                         rot = rot + Vector3.new(math.random(), math.random(), math.random()) * rotationoffset
  2218.                         rot = Vector3.new(rot.x % (math.tau), rot.y % (math.tau), rot.z % (math.tau))
  2219.                         rot4[index] = {pos, rot}
  2220.                 end
  2221.                 while model.Parent do
  2222.                         for i, j in ipairs(joints) do
  2223.                                 local pos = Vector3.new(math.random() - 0.5, math.random() - 0.5, math.random() - 0.5).unit * offsetradius
  2224.                                 local rot = rot4[i][2] + Vector3.new(math.random(), math.random(), math.random()) * rotationoffset
  2225.                                 rot = Vector3.new(rot.x % (math.tau), rot.y % (math.tau), rot.z % (math.tau))
  2226.                                 rot1[i], rot2[i], rot3[i], rot4[i] = rot2[i], rot3[i], rot4[i], {pos, rot}
  2227.                         end
  2228.                         local start = tick()
  2229.                         while true do
  2230.                                 local ctime = tick()
  2231.                                 local elapsed = ctime - start
  2232.                                 if elapsed > cycletime then
  2233.                                         break
  2234.                                 end
  2235.                                 local progress = elapsed / cycletime
  2236.                                 for index, joint in ipairs(joints) do
  2237.                                         local v0, v1, v2, v3, v4 = rot0[index], rot1[index], rot2[index], rot3[index], rot4[index]
  2238.                                         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]
  2239.                                         local px = GraphicalEffects.CubicInterpolate(p1.x, p2.x, p3.x, p4.x, progress)
  2240.                                         local py = GraphicalEffects.CubicInterpolate(p1.y, p2.y, p3.y, p4.y, progress)
  2241.                                         local pz = GraphicalEffects.CubicInterpolate(p1.z, p2.z, p3.z, p4.z, progress)
  2242.                                         local rx = GraphicalEffects.CubicInterpolate(r1.x, r2.x, r3.x, r4.x, progress)
  2243.                                         local ry = GraphicalEffects.CubicInterpolate(r1.y, r2.y, r3.y, r4.y, progress)
  2244.                                         local rz = GraphicalEffects.CubicInterpolate(r1.z, r2.z, r3.z, r4.z, progress)
  2245.                                         local cframe = CFrame.new(px, py, pz) * CFrame.Angles(rx, ry, rz)
  2246.                                         joint.C0 = v0[1] * cframe
  2247.                                         joint.C1 = v0[2] * cframe:inverse()
  2248.                                 end
  2249.                                 RunService.Stepped:wait()
  2250.                         end
  2251.                 end
  2252.         end
  2253. end
  2254.  
  2255. GraphicalEffects.LASER_WIDTH = 0.15
  2256. GraphicalEffects.LASER_MAGIC_CIRCLE_DISTANCE = 6.25
  2257. GraphicalEffects.laser_data = {}
  2258. --GraphicalEffects.fragmentation = {}
  2259. function GraphicalEffects.AnimateLaserOfDeath(data)
  2260.         local frame, directionOrientation, direction, magic_circle_model, laser_part, laser_mesh, magic_circle_part, magic_circle_light,
  2261.  
  2262. magic_circle_decal_back, magic_circle_decal_front, sound, laser_scale, fragmentation_size, duration, laser_lights, laser_effects, stay, light_effects =
  2263.  
  2264. unpack(data)
  2265.         local laser_color = laser_part.Color
  2266.         frame = frame + 1
  2267.         data[1] = frame
  2268.         local transparency = (frame / duration) ^ stay
  2269.         local opacity = 1 - transparency
  2270.         if frame == 2 then
  2271.                 sound:Play()
  2272.         end
  2273.         if frame == duration then
  2274.                 pcall(Game.Destroy, magic_circle_model)
  2275.                 GraphicalEffects.laser_data[data] = nil
  2276.         else
  2277.                 if magic_circle_model.Parent ~= Workspace then
  2278.                         pcall(Utility.SetProperty, magic_circle_model, "Parent", Workspace)
  2279.                 end
  2280.                 local laser_distance = 0
  2281.                 local origin = chatAdornee.CFrame
  2282.                 if not light_effects then
  2283.                         direction = (origin * directionOrientation - origin.p).unit
  2284.                 end
  2285.                 local magic_circle_position = origin.p + direction * GraphicalEffects.LASER_MAGIC_CIRCLE_DISTANCE
  2286.                 local magic_circle_cframe = CFrame.new(magic_circle_position, magic_circle_position + direction) * CFrame.Angles(0, 0, math.tau * frame /
  2287.  
  2288. 25)
  2289.                 local loop_scale = (laser_scale - 1) / 10
  2290.                 for x_offset = -loop_scale, loop_scale, 2 do
  2291.                         for y_offset = -loop_scale, loop_scale, 2 do
  2292.                                 local origin_position = magic_circle_cframe * Vector3.new(x_offset, y_offset, 0)
  2293.                                 for index = 1, 8 do
  2294.                                         local part, position
  2295.                                         for ray_index = 1, 10 do
  2296.                                                 local ray = Ray.new(origin_position + direction * (999 * (ray_index - 1)), direction * 999)
  2297.                                                 part, position = Workspace:FindPartOnRay(ray, magic_circle_model)
  2298.                                                 if part then
  2299.                                                         break
  2300.                                                 end
  2301.                                         end
  2302.                                         if part then
  2303.                                                 laser_distance = (position - origin_position).magnitude
  2304.                                                 if frame % 8 == 1 and index == 1 then
  2305.                                                         Instance.new("Explosion", Workspace).Position = position
  2306.                                                 end
  2307.                                                 if not part:IsA("Terrain") then
  2308.                                                         pcall(part.BreakJoints, part)
  2309.                                                         local is_block = part:IsA("Part") and part.Shape == Enum.PartType.Block
  2310.                                                         local mass = part:GetMass()
  2311.                                                         local size = part.Size
  2312.                                                         if (is_block and ((size.X < fragmentation_size and size.Y < fragmentation_size and size.Z <
  2313.  
  2314. fragmentation_size) or (not part.Anchored and mass < 750))) or (not is_block and mass < 250000) then
  2315.                                                                 local part_transparency = math.max(part.Transparency + 0.007 * fragmentation_size, 0.5)
  2316.                                                                 if part_transparency >= 0.5 then -- temporarily to minimize debris
  2317.                                                                         pcall(Game.Destroy, part)
  2318.                                                                 else
  2319.                                                                         local cframe = part.CFrame
  2320.                                                                         part.Anchored = false
  2321.                                                                         part.BrickColor = BrickColor.new("Medium stone grey")
  2322.                                                                         part.CanCollide = true
  2323.                                                                         if part:IsA("FormFactorPart") then
  2324.                                                                                 part.FormFactor = "Custom"
  2325.                                                                         end
  2326.                                                                         part.Size = size - Vector3.new(0.135, 0.135, 0.135) * fragmentation_size
  2327.                                                                         part.Transparency = part_transparency
  2328.                                                                         part.CFrame = cframe + direction * 5
  2329.                                                                         part.Velocity = part.Velocity + direction * 40
  2330.                                                                 end
  2331.                                                         elseif is_block then
  2332.                                                                 local parts = {part}
  2333.                                                                 local model = Instance.new("Model", part.Parent)
  2334.                                                                 model.Name = "Fragments"
  2335.                                                                 if size.X >= fragmentation_size then
  2336.                                                                         size = Vector3.new(0.5, 1, 1) * size
  2337.                                                                         local archivable = part.Archivable
  2338.                                                                         local cframe = part.CFrame
  2339.                                                                         part.FormFactor = "Custom"
  2340.                                                                         part.Size = size
  2341.                                                                         part.Archivable = true
  2342.                                                                         local part_clone = part:Clone()
  2343.                                                                         part.Archivable = archivable
  2344.                                                                         part_clone.Archivable = archivable
  2345.                                                                         part.CFrame = cframe * CFrame.new(-0.5 * size.X, 0, 0)
  2346.                                                                         part_clone.CFrame = cframe * CFrame.new(0.5 * size.X, 0, 0)
  2347.                                                                         part_clone.Parent = model
  2348.                                                                         parts[2] = part_clone
  2349.                                                                 end
  2350.                                                                 if size.Y >= fragmentation_size then
  2351.                                                                         size = Vector3.new(1, 0.5, 1) * size
  2352.                                                                         for part_index = 1, #parts do
  2353.                                                                                 local part = parts[part_index]
  2354.                                                                                 local archivable = part.Archivable
  2355.                                                                                 local cframe = part.CFrame
  2356.                                                                                 part.FormFactor = "Custom"
  2357.                                                                                 part.Size = size
  2358.                                                                                 part.Archivable = true
  2359.                                                                                 local part_clone = part:Clone()
  2360.                                                                                 part.Archivable = archivable
  2361.                                                                                 part_clone.Archivable = archivable
  2362.                                                                                 part.CFrame = cframe * CFrame.new(0, -0.5 * size.Y, 0)
  2363.                                                                                 part_clone.CFrame = cframe * CFrame.new(0, 0.5 * size.Y, 0)
  2364.                                                                                 part_clone.Parent = model
  2365.                                                                                 table.insert(parts, part_clone)
  2366.                                                                         end
  2367.                                                                 end
  2368.                                                                 if size.Z >= fragmentation_size then
  2369.                                                                         size = Vector3.new(1, 1, 0.5) * size
  2370.                                                                         for part_index = 1, #parts do
  2371.                                                                                 local part = parts[part_index]
  2372.                                                                                 local archivable = part.Archivable
  2373.                                                                                 local cframe = part.CFrame
  2374.                                                                                 part.FormFactor = "Custom"
  2375.                                                                                 part.Size = size
  2376.                                                                                 part.Archivable = true
  2377.                                                                                 local part_clone = part:Clone()
  2378.                                                                                 part.Archivable = archivable
  2379.                                                                                 part_clone.Archivable = archivable
  2380.                                                                                 part.CFrame = cframe * CFrame.new(0, 0, -0.5 * size.Z)
  2381.                                                                                 part_clone.CFrame = cframe * CFrame.new(0, 0, 0.5 * size.Z)
  2382.                                                                                 part_clone.Parent = model
  2383.                                                                                 table.insert(parts, part_clone)
  2384.                                                                         end
  2385.                                                                 end
  2386.                                                                 for _, part in ipairs(parts) do
  2387.                                                                         part:MakeJoints()
  2388.                                                                 end
  2389.                                                         else
  2390.                                                                 break
  2391.                                                         end
  2392.                                                 end
  2393.                                         else
  2394.                                                 laser_distance = 9990
  2395.                                                 break
  2396.                                         end
  2397.                                 end
  2398.                         end
  2399.                 end
  2400.                 local laser_cframe = magic_circle_cframe * CFrame.Angles(-0.5 * math.pi, 0, 0)
  2401.                 local laser_width = GraphicalEffects.LASER_WIDTH * opacity * laser_scale
  2402.                 local laser_mesh_offset = Vector3.new(0, 0.5 * laser_distance, 0)      
  2403.                 laser_part.CFrame = laser_cframe
  2404.                 if laser_effects then
  2405.                         local laser_effect_data_1, laser_effect_data_2 = laser_effects[1], laser_effects[2]
  2406.                         local laser_effect_1, laser_effect_mesh_1 = laser_effect_data_1[1], laser_effect_data_1[2]
  2407.                         local laser_effect_2, laser_effect_mesh_2 = laser_effect_data_2[1], laser_effect_data_2[2]
  2408.                         laser_effect_1.CFrame = laser_cframe
  2409.                         laser_effect_2.CFrame = laser_cframe
  2410.                         laser_effect_mesh_1.Offset = laser_mesh_offset
  2411.                         laser_effect_mesh_2.Offset = laser_mesh_offset
  2412.                         local game_time = time()
  2413.                         local effect_scale_1 = 0.5 + 0.5 * math.sin(16 * math.pi * game_time)
  2414.                         local effect_scale_2 = 0.5 + 0.5 * math.cos(16 * math.pi * game_time)
  2415.                         laser_effect_mesh_1.Scale = 5 * Vector3.new(laser_width * effect_scale_1, laser_distance, laser_width * effect_scale_1)
  2416.                         laser_effect_mesh_2.Scale = 5 * Vector3.new(laser_width * effect_scale_2, laser_distance, laser_width * effect_scale_2)
  2417.                         laser_width = laser_width * 0.25
  2418.                 end
  2419.                 laser_mesh.Offset = laser_mesh_offset                  
  2420.                 laser_mesh.Scale = 5 * Vector3.new(laser_width, laser_distance, laser_width)
  2421.                 magic_circle_part.CFrame = magic_circle_cframe
  2422.                 magic_circle_light.Brightness = opacity
  2423.                 magic_circle_decal_back.Transparency = transparency
  2424.                 magic_circle_decal_front.Transparency = transparency
  2425.                 if light_effects then
  2426.                         for index, data in ipairs(laser_lights) do
  2427.                                 local laser_spotlight_part, laser_spotlight = data[1], data[2]
  2428.                                 local laser_spotlight_offset = 30 * (index - 1)
  2429.                                 if laser_spotlight_offset <= laser_distance then
  2430.                                         laser_spotlight_part.CFrame = magic_circle_cframe * CFrame.new(0, 0, -laser_spotlight_offset)
  2431.                                         laser_spotlight.Brightness = opacity
  2432.                                         laser_spotlight.Enabled = true
  2433.                                 else
  2434.                                         laser_spotlight.Enabled = false
  2435.                                 end
  2436.                         end
  2437.                 end
  2438.         end
  2439. end
  2440. function GraphicalEffects.ShootLaserOfDeath(target, data)
  2441.         if chatAdornee then
  2442.                 data = data or {}
  2443.                 local brickcolor = data.brickcolor or BrickColor.new("Really black")
  2444.                 local duration = data.duration or 40
  2445.                 local fragmentation_size = data.fragmentation_size or 3
  2446.                 local laser_scale = data.laser_scale or 1
  2447.                 local light_color = data.light_color or Color3.new(1, 0.5, 1)
  2448.                 local magic_circle_image = data.magic_circle_image or "rbxassetid://122610943"
  2449.                 local magic_circle_scale = data.magic_circle_scale or 1
  2450.                 local sound_volume = data.sound_volume or 1 / 3
  2451.                 local special_effects = data.special_effects
  2452.                 local stay = data.stay or 4
  2453.                 local origin = chatAdornee.CFrame
  2454.                 local directionOrientation = origin:pointToObjectSpace(target)
  2455.                 local direction = (target - origin.p).unit
  2456.                 local magic_circle_position = origin.p + direction * GraphicalEffects.LASER_MAGIC_CIRCLE_DISTANCE
  2457.                 local magic_circle_cframe = CFrame.new(magic_circle_position, magic_circle_position + direction)
  2458.                 local magic_circle_model = Instance.new("Model")
  2459.                 local laser_part = Instance.new("Part", magic_circle_model)
  2460.                 local laser_mesh = Instance.new("CylinderMesh", laser_part)
  2461.                 local magic_circle_part = Instance.new("Part", magic_circle_model)
  2462.                 local magic_circle_mesh = Instance.new("BlockMesh", magic_circle_part)
  2463.                 local magic_circle_light = Instance.new("PointLight", magic_circle_part)
  2464.                 local magic_circle_decal_back = Instance.new("Decal", magic_circle_part)
  2465.                 local magic_circle_decal_front = Instance.new("Decal", magic_circle_part)
  2466.                 local sound = Instance.new("Sound", magic_circle_part)
  2467.                 sound.Pitch = 1.25
  2468.                 sound.SoundId = "rbxassetid://2248511"
  2469.                 sound.Volume = sound_volume
  2470.                 magic_circle_model.Archivable = false
  2471.                 laser_part.Anchored = true
  2472.                 laser_part.BottomSurface = "Smooth"
  2473.                 laser_part.BrickColor = brickcolor
  2474.                 laser_part.CanCollide = false
  2475.                 laser_part.CFrame = magic_circle_cframe * CFrame.Angles(-0.5 * math.pi, 0, 0)
  2476.                 laser_part.FormFactor = "Custom"
  2477.                 laser_part.Locked = true
  2478.                 laser_part.Size = Vector3.new(0.2, 0.2, 0.2)
  2479.                 laser_part.TopSurface = "Smooth"
  2480.                 laser_mesh.Offset = Vector3.new(0, 0, 0)
  2481.                 laser_mesh.Name = "Mesh"
  2482.                 laser_mesh.Scale = 5 * laser_scale * Vector3.new(GraphicalEffects.LASER_WIDTH, 0, GraphicalEffects.LASER_WIDTH)
  2483.                 magic_circle_part.Anchored = true
  2484.                 magic_circle_part.BottomSurface = "Smooth"
  2485.                 magic_circle_part.CanCollide = false
  2486.                 magic_circle_part.CFrame = magic_circle_cframe
  2487.                 magic_circle_part.FormFactor = "Custom"
  2488.                 magic_circle_part.Locked = true
  2489.                 magic_circle_part.Size = Vector3.new(0.2, 0.2, 0.2)
  2490.                 magic_circle_part.TopSurface = "Smooth"
  2491.                 magic_circle_part.Transparency = 1
  2492.                 magic_circle_mesh.Scale = Vector3.new(60, 60, 0) * magic_circle_scale
  2493.                 magic_circle_light.Color = light_color
  2494.                 magic_circle_light.Range = 16 * magic_circle_scale
  2495.                 magic_circle_light.Shadows = true
  2496.                 magic_circle_decal_back.Face = "Back"
  2497.                 magic_circle_decal_back.Texture = magic_circle_image
  2498.                 magic_circle_decal_front.Face = "Front"
  2499.                 magic_circle_decal_front.Texture = magic_circle_image
  2500.                 magic_circle_model.Parent = Workspace
  2501.                 local laser_color = brickcolor.Color
  2502.                 local laser_lights = {}
  2503.                 local light_effects = laser_color.r + laser_color.g + laser_color.b > 0.25
  2504.                 if light_effects then
  2505.                         local laser_spotlight_part_template = Instance.new("Part")
  2506.                         local laser_spotlight_light_template = Instance.new("SpotLight", laser_spotlight_part_template)
  2507.                         laser_spotlight_part_template.Anchored = true
  2508.                         laser_spotlight_part_template.Anchored = true
  2509.                         laser_spotlight_part_template.BottomSurface = "Smooth"
  2510.                         laser_spotlight_part_template.CanCollide = false
  2511.                         laser_spotlight_part_template.FormFactor = "Custom"
  2512.                         laser_spotlight_part_template.Locked = true
  2513.                         laser_spotlight_part_template.Size = Vector3.new(0.2, 0.2, 0.2)
  2514.                         laser_spotlight_part_template.TopSurface = "Smooth"
  2515.                         laser_spotlight_part_template.Transparency = 1
  2516.                         laser_spotlight_light_template.Angle = 45
  2517.                         laser_spotlight_light_template.Color = laser_color
  2518.                         laser_spotlight_light_template.Enabled = true
  2519.                         laser_spotlight_light_template.Name = "Light"
  2520.                         laser_spotlight_light_template.Range = 60
  2521.                         for index = 1, 40 do
  2522.                                 local laser_spotlight_part = laser_spotlight_part_template:Clone()
  2523.                                 laser_spotlight_part.CFrame = magic_circle_cframe * CFrame.new(0, 0, -30 * (index - 1))
  2524.                                 laser_spotlight_part.Parent = magic_circle_model
  2525.                                 laser_lights[index] = {laser_spotlight_part, laser_spotlight_part.Light}
  2526.                         end
  2527.                 end
  2528.                 local laser_effects
  2529.                 if special_effects then
  2530.                         laser_effects = {}
  2531.                         local laser_effect_1 = laser_part:Clone()
  2532.                         laser_effect_1.BrickColor = special_effects
  2533.                         laser_effect_1.Transparency = 0.5
  2534.                         local laser_effect_2 = laser_effect_1:Clone()
  2535.                         laser_effects[1], laser_effects[2] = {laser_effect_1, laser_effect_1.Mesh}, {laser_effect_2, laser_effect_2.Mesh}
  2536.                         laser_effect_1.Parent = magic_circle_model
  2537.                         laser_effect_2.Parent = magic_circle_model
  2538.                 end
  2539.                 GraphicalEffects.laser_data[{0, directionOrientation, direction, magic_circle_model, laser_part, laser_mesh, magic_circle_part,
  2540.  
  2541. magic_circle_light, magic_circle_decal_back, magic_circle_decal_front, sound, laser_scale, fragmentation_size, duration, laser_lights, laser_effects, stay,
  2542.  
  2543. light_effects}] = true
  2544.         end
  2545. end
  2546.  
  2547. function GraphicalEffects.SpawnSapientRock(position)
  2548.         local part = Instance.new("Part", Workspace)
  2549.         local size = 8 + math.random(0, 5)
  2550.         part.BottomSurface = "Smooth"
  2551.         part.TopSurface = "Smooth"
  2552.         part.Material = "Slate"
  2553.         part.Locked = true
  2554.         part.Shape = "Ball"
  2555.         part.FormFactor = "Custom"
  2556.         part.Size = Vector3.new(size, size, size)
  2557.         part.Position = position
  2558.         local bodypos = Instance.new("BodyPosition", part)
  2559.         bodypos.maxForce = Vector3.new(0, 0, 0)
  2560.         local angry = false
  2561.         local damage_ready = true
  2562.         local torso_following
  2563.         local torso_changed = -1000
  2564.         local touched_conn = part.Touched:connect(function(hit)
  2565.                 local character = hit.Parent
  2566.                 if character then
  2567.                         local humanoid
  2568.                         for _, child in ipairs(character:GetChildren()) do
  2569.                                 if child:IsA("Humanoid") then
  2570.                                         humanoid = child
  2571.                                         break
  2572.                                 end
  2573.                         end
  2574.                         if humanoid then
  2575.                                 if angry then
  2576.                                         if damage_ready then
  2577.                                                 damage_ready = false
  2578.                                                 humanoid:TakeDamage(100)
  2579.                                                 wait(1)
  2580.                                                 damage_ready = true
  2581.                                                 angry = false
  2582.                                                 part.BrickColor = BrickColor.new("Medium stone grey")
  2583.                                         end
  2584.                                 else
  2585.                                         local torso = humanoid.Torso
  2586.                                         if torso then
  2587.                                                 torso_following = torso
  2588.                                                 torso_changed = tick()
  2589.                                         end
  2590.                                 end
  2591.                         end
  2592.                 end
  2593.         end)
  2594.         TaskScheduler.Start(function()
  2595.                 while part.Parent == Workspace do
  2596.                         if torso_following then
  2597.                                 bodypos.position = torso_following.Position
  2598.                                 if tick() - torso_changed > 60 or not torso_following.Parent then
  2599.                                         torso_following = nil
  2600.                                         bodypos.maxForce = Vector3.new(0, 0, 0)
  2601.                                         angry = false
  2602.                                         part.BrickColor = BrickColor.new("Medium stone grey")
  2603.                                 else
  2604.                                         local speed = angry and Vector3.new(16, 16, 16) or Vector3.new(6, 0, 6)
  2605.                                         bodypos.maxForce = part:GetMass() * speed
  2606.                                         if part.Position.Y < -250 then
  2607.                                                 part.Velocity = Vector3.new()
  2608.                                                 part.Position = torso_following.Position + Vector3.new(0, 80, 0)
  2609.                                                 part.BrickColor = BrickColor.new("Bright red")
  2610.                                                 angry = true
  2611.                                                 torso_changed = tick()
  2612.                                         end
  2613.                                 end
  2614.                         end
  2615.                         RunService.Stepped:wait()
  2616.                 end
  2617.                 touched_conn:disconnect()
  2618.         end)
  2619.         TaskScheduler.Start(function()
  2620.                 while part.Parent == Workspace do
  2621.                         wait(25 + math.random() * 10)
  2622.                         local next_size = 8 + math.random() * 5
  2623.                         if math.random(100) == 1 then
  2624.                                 next_size = next_size * (2 + 6 * math.random())
  2625.                         end
  2626.                         next_size = math.floor(next_size + 0.5)
  2627.                         local start_time = tick()
  2628.                         local mesh = Instance.new("SpecialMesh", part)
  2629.                         mesh.MeshType = "Sphere"
  2630.                         repeat
  2631.                                 local elapsed_time = tick() - start_time
  2632.                                 local alpha = math.cos(elapsed_time * math.pi * 0.5)
  2633.                                 local interpolated_size = size * alpha + next_size * (1 - alpha)
  2634.                                 local size_vector = Vector3.new(interpolated_size, interpolated_size, interpolated_size)
  2635.                                 local cframe = part.CFrame
  2636.                                 part.Size = size_vector
  2637.                                 part.CFrame = cframe
  2638.                                 mesh.Scale = size_vector / part.Size
  2639.                                 RunService.Stepped:wait()
  2640.                         until tick() - start_time >= 1
  2641.                         mesh:Destroy()
  2642.                         local cframe = part.CFrame
  2643.                         part.Size = Vector3.new(next_size, next_size, next_size)
  2644.                         part.CFrame = cframe
  2645.                         size = next_size
  2646.                 end
  2647.         end)
  2648. end
  2649.  
  2650. function GraphicalEffects.MainLoop()
  2651.         RunService.Stepped:wait()
  2652.         for data in pairs(GraphicalEffects.magicCircleData) do
  2653.                 GraphicalEffects.AnimateMagicCircle(data)
  2654.         end
  2655.         for data in pairs(GraphicalEffects.laser_data) do
  2656.                 GraphicalEffects.AnimateLaserOfDeath(data)
  2657.         end
  2658.         for data in pairs(GraphicalEffects.missileData) do
  2659.                 GraphicalEffects.AnimateMissile(data)
  2660.         end
  2661. end
  2662. TaskScheduler.Start(function()
  2663.         while true do
  2664.                 GraphicalEffects.MainLoop()
  2665.         end
  2666. end)
  2667.  
  2668. PlayerControl = {};
  2669.  
  2670. PlayerControl.fly_acceleration = 10
  2671. PlayerControl.fly_basespeed = 250
  2672. PlayerControl.fly_speed = PlayerControl.fly_basespeed
  2673. PlayerControl.featherfallEnabled = true
  2674. PlayerControl.pushable = false
  2675. PlayerControl.rolling = false
  2676. PlayerControl.rollingAngle = 0
  2677. PlayerControl.rollingOffset = 0
  2678. PlayerControl.rollingMaxOffset = 3
  2679. PlayerControl.rollingSpeed = 1 / 50
  2680. PlayerControl.characterEnabled = false
  2681. PlayerControl.characterMode = "normal"
  2682. local character = nil
  2683. local flying, flyingMomentum, flyingTilt = false, Vector3.new(), 0
  2684. local pose, regeneratingHealth, jumpDebounce = "Standing", false, false
  2685. -- TODO: make local variables public
  2686. local model, bodyColors, leftArmMesh, leftLegMesh, rightArmMesh, rightLegMesh, torsoMesh, wildcardHat, wildcardHandle, wildcardMesh, pants, shirt, humanoid,
  2687.  
  2688. head, leftArm, leftLeg, rightArm, rightLeg, torso, rootPart, rootJoint, face, soundFreeFalling, soundGettingUp, soundRunning, leftHip, leftShoulder,
  2689.  
  2690. rightHip, rightShoulder, neck, wildcardWeld, feetPart, feetWeld, feetTouchInterest, bodyGyro, bodyVelocity, headMesh, torsoLight
  2691. local AnimateCharacter
  2692. local UserInterface = game:service'UserInputService'
  2693. local chatBubbles = {}
  2694. local chatCharacterLimit = 240
  2695. function PlayerControl.CreateCharacter()
  2696.         local characterMode = PlayerControl.characterMode
  2697.         if characterMode == "normal" then
  2698.                 if not PlayerControl.characterEnabled then
  2699.                         return
  2700.                 end
  2701.                 local appearance = CharacterAppearance.GetDefaultAppearance()
  2702.                 local active = true
  2703.                 local torsoCFrame = (torso and torso.CFrame) or PlayerControl.torso_cframe or CFrame.new(0, 10, 0)
  2704.                 if torsoCFrame.p.Y < -450 then
  2705.                         torsoCFrame = CFrame.new(0, 10, 0)
  2706.                 end
  2707.                 local rootPartCFrame = (rootPart and rootPart.CFrame) or PlayerControl.torso_cframe or CFrame.new(0, 10, 0)
  2708.                 if rootPartCFrame.p.Y < -450 then
  2709.                         rootPartCFrame = CFrame.new(0, 10, 0)
  2710.                 end
  2711.                 local cameraCFrame = Camera.CoordinateFrame
  2712.                 local connections = {}
  2713.                 local feetTouching = {}
  2714.                 local previousWalkSpeed = 0
  2715.                 local prevLeftHip, prevLeftShoulder, prevRightHip, prevRightShoulder = leftHip, leftShoulder, rightHip, rightShoulder
  2716.                 model = Instance.new("Model")
  2717.                 humanoid = Instance.new("Humanoid", model)
  2718.                 head = Instance.new("Part", model)
  2719.                 leftArm = Instance.new("Part", model)
  2720.                 leftLeg = Instance.new("Part", model)
  2721.                 rightArm = Instance.new("Part", model)
  2722.                 rightLeg = Instance.new("Part", model)
  2723.                 torso = Instance.new("Part", model)
  2724.                 rootPart = Instance.new("Part", model)
  2725.                 soundFallingDown = Instance.new("Sound", head)
  2726.                 soundFreeFalling = Instance.new("Sound", head)
  2727.                 soundGettingUp = Instance.new("Sound", head)
  2728.                 soundJumping = Instance.new("Sound", head)
  2729.                 soundRunning = Instance.new("Sound", head)
  2730.                 leftHip = Instance.new("Motor", torso)
  2731.                 leftShoulder = Instance.new("Motor", torso)
  2732.                 rightHip = Instance.new("Motor", torso)
  2733.                 rightShoulder = Instance.new("Motor", torso)
  2734.                 neck = Instance.new("Motor", torso)
  2735.                 rootJoint = Instance.new("Motor", rootPart)
  2736.                 feetPart = Instance.new("Part", model)
  2737.                 feetWeld = Instance.new("Weld", torso)
  2738.                 bodyGyro = Instance.new("BodyGyro", rootPart)
  2739.                 bodyVelocity = Instance.new("BodyVelocity", rootPart)
  2740.                 model.Archivable = false
  2741.                 model.Name = user_name or Player.Name
  2742.                 model.PrimaryPart = head
  2743.                 humanoid.LeftLeg = leftLeg
  2744.                 humanoid.RightLeg = rightLeg
  2745.                 humanoid.Torso = rootPart
  2746.                 head.CFrame = torsoCFrame * CFrame.new(0, 1.5, 0)
  2747.                 head.FormFactor = "Symmetric"
  2748.                 head.Locked = true
  2749.                 head.Name = "Head"
  2750.                 head.Size = Vector3.new(2, 1, 1)
  2751.                 head.TopSurface = "Smooth"
  2752.                 leftArm.CanCollide = false
  2753.                 leftArm.CFrame = torsoCFrame * CFrame.new(-1.5, 0, 0)
  2754.                 leftArm.FormFactor = "Symmetric"
  2755.                 leftArm.Locked = true
  2756.                 leftArm.Name = "Left Arm"
  2757.                 leftArm.Size = Vector3.new(1, 2, 1)
  2758.                 leftLeg.BottomSurface = "Smooth"
  2759.                 leftLeg.CanCollide = false
  2760.                 leftLeg.CFrame = torsoCFrame * CFrame.new(-0.5, -2, 0)
  2761.                 leftLeg.FormFactor = "Symmetric"
  2762.                 leftLeg.Locked = true
  2763.                 leftLeg.Name = "Left Leg"
  2764.                 leftLeg.Size = Vector3.new(1, 2, 1)
  2765.                 leftLeg.TopSurface = "Smooth"
  2766.                 rightArm.CanCollide = false
  2767.                 rightArm.CFrame = torsoCFrame * CFrame.new(1.5, 0, 0)
  2768.                 rightArm.FormFactor = "Symmetric"
  2769.                 rightArm.Locked = true
  2770.                 rightArm.Name = "Right Arm"
  2771.                 rightArm.Size = Vector3.new(1, 2, 1)
  2772.                 rightLeg.BottomSurface = "Smooth"
  2773.                 rightLeg.CanCollide = false
  2774.                 rightLeg.CFrame = torsoCFrame * CFrame.new(0.5, -2, 0)
  2775.                 rightLeg.FormFactor = "Symmetric"
  2776.                 rightLeg.Locked = true
  2777.                 rightLeg.Name = "Right Leg"
  2778.                 rightLeg.Size = Vector3.new(1, 2, 1)
  2779.                 rightLeg.TopSurface = "Smooth"
  2780.                 torso.CFrame = torsoCFrame
  2781.                 torso.FormFactor = "Symmetric"
  2782.                 torso.LeftSurface = "Weld"
  2783.                 torso.Locked = true
  2784.                 torso.RightSurface = "Weld"
  2785.                 torso.Name = "Torso"
  2786.                 torso.Size = Vector3.new(2, 2, 1)
  2787.                 rootPart.BottomSurface = "Smooth"
  2788.                 rootPart.BrickColor = BrickColor.Blue()
  2789.                 rootPart.CFrame = rootPartCFrame
  2790.                 rootPart.FormFactor = "Symmetric"
  2791.                 rootPart.LeftSurface = "Weld"
  2792.                 rootPart.Locked = true
  2793.                 rootPart.RightSurface = "Weld"
  2794.                 rootPart.Name = "HumanoidRootPart"
  2795.                 rootPart.Size = Vector3.new(2, 2, 1)
  2796.                 rootPart.TopSurface = "Smooth"
  2797.                 rootPart.Transparency = 1
  2798.                 soundFreeFalling.Archivable = false
  2799.                 soundFreeFalling.SoundId = "rbxasset://sounds/swoosh.wav"
  2800.                 soundGettingUp.Archivable = false
  2801.                 soundGettingUp.SoundId = "rbxasset://sounds/hit.wav"
  2802.                 soundRunning.Archivable = false
  2803.                 soundRunning.SoundId = "rbxasset://sounds/bfsl-minifigfoots1.mp3"
  2804.                 soundRunning.Looped = true
  2805.                 leftHip.C0 = CFrame.new(-1, -1, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0)
  2806.                 leftHip.C1 = CFrame.new(-0.5, 1, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0)
  2807.                 leftHip.MaxVelocity = 0.1
  2808.                 leftHip.Name = "Left Hip"
  2809.                 leftHip.Part0 = torso
  2810.                 leftHip.Part1 = leftLeg
  2811.                 leftShoulder.C0 = CFrame.new(-1, 0.5, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0)
  2812.                 leftShoulder.C1 = CFrame.new(0.5, 0.5, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0)
  2813.                 leftShoulder.MaxVelocity = 0.15
  2814.                 leftShoulder.Name = "Left Shoulder"
  2815.                 leftShoulder.Part0 = torso
  2816.                 leftShoulder.Part1 = leftArm
  2817.                 rightHip.C0 = CFrame.new(1, -1, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0)
  2818.                 rightHip.C1 = CFrame.new(0.5, 1, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0)
  2819.                 rightHip.MaxVelocity = 0.1
  2820.                 rightHip.Name = "Right Hip"
  2821.                 rightHip.Part0 = torso
  2822.                 rightHip.Part1 = rightLeg
  2823.                 rightShoulder.C0 = CFrame.new(1, 0.5, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0)
  2824.                 rightShoulder.C1 = CFrame.new(-0.5, 0.5, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0)
  2825.                 rightShoulder.MaxVelocity = 0.15
  2826.                 rightShoulder.Name = "Right Shoulder"
  2827.                 rightShoulder.Part0 = torso
  2828.                 rightShoulder.Part1 = rightArm
  2829.                 if prevLeftHip then
  2830.                         leftHip.CurrentAngle = prevLeftHip.CurrentAngle
  2831.                         leftHip.DesiredAngle = prevLeftHip.DesiredAngle
  2832.                 end
  2833.                 if prevLeftShoulder then
  2834.                         leftShoulder.CurrentAngle = prevLeftShoulder.CurrentAngle
  2835.                         leftShoulder.DesiredAngle = prevLeftShoulder.DesiredAngle
  2836.                 end
  2837.                 if prevRightHip then
  2838.                         rightHip.CurrentAngle = prevRightHip.CurrentAngle
  2839.                         rightHip.DesiredAngle = prevRightHip.DesiredAngle
  2840.                 end
  2841.                 if prevRightShoulder then
  2842.                         rightShoulder.CurrentAngle = prevRightShoulder.CurrentAngle
  2843.                         rightShoulder.DesiredAngle = prevRightShoulder.DesiredAngle
  2844.                 end
  2845.                 neck.C0 = CFrame.new(0, 1, 0, -1, -0, -0, 0, 0, 1, 0, 1, 0)
  2846.                 neck.C1 = CFrame.new(0, -0.5, 0, -1, -0, -0, 0, 0, 1, 0, 1, 0)
  2847.                 neck.Name = "Neck"
  2848.                 neck.Part0 = torso
  2849.                 neck.Part1 = head
  2850.                 rootJoint.C0 = CFrame.new(0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 1, 0)
  2851.                 rootJoint.C1 = CFrame.new(0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 1, 0)
  2852.                 rootJoint.Name = "RootJoint"
  2853.                 rootJoint.Part0 = rootPart
  2854.                 rootJoint.Part1 = torso
  2855.                 feetPart.BottomSurface = "Smooth"
  2856.                 feetPart.CanCollide = false
  2857.                 feetPart.CFrame = torsoCFrame * CFrame.new(0, -3.1, 0)
  2858.                 feetPart.FormFactor = "Custom"
  2859.                 feetPart.Locked = true
  2860.                 feetPart.Name = "Platform"
  2861.                 feetPart.Size = Vector3.new(1.8, 0.2, 0.8)
  2862.                 feetPart.TopSurface = "Smooth"
  2863.                 feetPart.Transparency = 1
  2864.                 feetWeld.C0 = CFrame.new(0, -3, 0)
  2865.                 feetWeld.C1 = CFrame.new(0, 0.1, 0)
  2866.                 feetWeld.Name = "PlatformWeld"
  2867.                 feetWeld.Part0 = torso
  2868.                 feetWeld.Part1 = feetPart
  2869.                 table.insert(connections, feetPart.Touched:connect(function(hit)
  2870.                         feetTouching[hit] = true
  2871.                 end))
  2872.                 table.insert(connections, feetPart.TouchEnded:connect(function(hit)
  2873.                         feetTouching[hit] = nil
  2874.                 end))
  2875.                 feetTouchInterest = feetPart:FindFirstChild("TouchInterest")
  2876.                 bodyGyro.D = 3250
  2877.                 bodyGyro.P = 400000
  2878.                 bodyGyro.maxTorque = Vector3.new(1000000000, 0, 1000000000)
  2879.                 bodyVelocity.P = 5000
  2880.                 bodyVelocity.maxForce = Vector3.new(0, 0, 0)
  2881.                 bodyVelocity.velocity = Vector3.new(0, 0, 0)
  2882.                 torsoLight = Instance.new("PointLight", torso)
  2883.                 torsoLight.Brightness = 0.4
  2884.                 torsoLight.Color = Color3.new(1, 1, 1)
  2885.                 torsoLight.Range = 16
  2886.                 torsoLight.Shadows = true
  2887.                 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)
  2888.                 local forcefields = {[ff1] = head, [ff2] = leftArm, [ff3] = leftLeg, [ff4] = rightArm, [ff5] = rightLeg, [ff6] = torso, [ff7] = wildcardHandle, [ff8] = feetPart, [ff9] = rootPart}    
  2889.                 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}            
  2890.                 local tshirtUrl = appearance.tshirt
  2891.                 if tshirtUrl then
  2892.                         local tshirt = Instance.new("Decal", torso)
  2893.                         tshirt.Name = "roblox"
  2894.                         tshirt.Texture = tshirtUrl
  2895.                         objects[tshirt] = true
  2896.                 end
  2897.                 for _, template in ipairs(appearance.characterObjects) do
  2898.                         local object = template:Clone()
  2899.                         local newObjects = {object}
  2900.                         for _, object in ipairs(newObjects) do
  2901.                                 objects[object] = true
  2902.                                 for _, child in ipairs(object:GetChildren()) do
  2903.                                         table.insert(newObjects, child)
  2904.                                 end                            
  2905.                         end
  2906.                         if object:IsA("BodyColors") then
  2907.                                 head.BrickColor = object.HeadColor
  2908.                                 leftArm.BrickColor = object.LeftArmColor
  2909.                                 leftLeg.BrickColor = object.LeftLegColor
  2910.                                 rightArm.BrickColor = object.RightArmColor
  2911.                                 rightLeg.BrickColor = object.RightLegColor
  2912.                                 torso.BrickColor = object.TorsoColor
  2913.                         elseif object:IsA("Hat") then
  2914.                                 local handle = object:FindFirstChild("Handle")
  2915.                                 if handle and handle:IsA("BasePart") then
  2916.                                         local weld = Instance.new("Weld", head)
  2917.                                         weld.C0 = CFrame.new(0, 0.5, 0)
  2918.                                         local attachmentPos = object.AttachmentPos
  2919.                                         local attachmentRight = object.AttachmentRight
  2920.                                         local attachmentUp = object.AttachmentUp
  2921.                                         local attachmentForward = object.AttachmentForward
  2922.                                         weld.C1 = CFrame.new(attachmentPos.X, attachmentPos.Y, attachmentPos.Z,
  2923.                                                                                  attachmentRight.X, attachmentUp.X, -attachmentForward.X,
  2924.                                                                                  attachmentRight.Y, attachmentUp.Y, -attachmentForward.Y,
  2925.                                                                                  attachmentRight.Z, attachmentUp.Z, -attachmentForward.Z)
  2926.                                         weld.Name = "HeadWeld"
  2927.                                         weld.Part0 = head
  2928.                                         weld.Part1 = handle
  2929.                                         handle.Parent = model
  2930.                                         local antiGravity = Instance.new("BodyForce", handle)
  2931.                                         antiGravity.force = Vector3.new(0, handle:GetMass() * 196.2, 0)
  2932.                                         objects[object] = false
  2933.                                         object.Parent = nil
  2934.                                         objects[weld] = true
  2935.                                 end
  2936.                         end
  2937.                         object.Parent = model
  2938.                 end
  2939.                 local facePresent = false
  2940.                 local headMeshPresent = false
  2941.                 for _, template in ipairs(appearance.headObjects) do
  2942.                         local object = template:Clone()
  2943.                         local newObjects = {object}
  2944.                         for _, object in ipairs(newObjects) do
  2945.                                 objects[object] = true
  2946.                                 for _, child in ipairs(object:GetChildren()) do
  2947.                                         table.insert(newObjects, child)
  2948.                                 end                            
  2949.                         end
  2950.                         if object:IsA("DataModelMesh") then
  2951.                                 headMeshPresent = true
  2952.                         elseif object:IsA("Decal") then
  2953.                                 facePresent = true
  2954.                         end
  2955.                         object.Parent = head
  2956.                 end
  2957.                 if not facePresent then
  2958.                         local face = Instance.new("Decal", head)
  2959.                         face.Texture = "rbxasset://textures/face.png"
  2960.                         objects[face] = true
  2961.                 end
  2962.                 if not headMeshPresent then
  2963.                         local headMesh = Instance.new("SpecialMesh", head)
  2964.                         headMesh.Scale = Vector3.new(1.25, 1.25, 1.25)
  2965.                         objects[headMesh] = true
  2966.                 end
  2967.                 table.insert(connections, model.DescendantAdded:connect(function(object)
  2968.                         local success, is_localscript = pcall(Game.IsA, object, "LocalScript")
  2969.                         if success and is_localscript then
  2970.                                 pcall(Utility.SetProperty, object, "Disabled", true)
  2971.                                 local changed_connection = pcall(object.Changed.connect, object.Changed, function(property)
  2972.                                         if property == "Disabled" and not object.Disabled then
  2973.                                                 pcall(Utility.SetProperty, object, "Disabled", true)
  2974.                                                 object:Destroy()
  2975.                                         end
  2976.                                 end)
  2977.                         end
  2978.                         if not objects[object] then
  2979.                                 object:Destroy()
  2980.                         end
  2981.                 end))
  2982.                 model.Parent = Workspace
  2983.                 Player.Character = model
  2984.                 Camera.CameraSubject = humanoid
  2985.                 Camera.CameraType = "Track"
  2986.                 Camera.CoordinateFrame = cameraCFrame
  2987.                 local IsStanding
  2988.                 local RegenerateHealth
  2989.                 local ResetCharacter
  2990.                 function IsStanding()
  2991.                         return not not next(feetTouching)
  2992.                 end
  2993.                 function RegenerateHealth()
  2994.                         if humanoid.Health < 1 then
  2995.                                 humanoid.Health = 100
  2996.                         elseif not regeneratingHealth then
  2997.                                 regeneratingHealth = true
  2998.                                 local elapsedTime = wait(1)
  2999.                                 regeneratingHealth = false
  3000.                                 if humanoid.Health < 100 then
  3001.                                         humanoid.Health = math.min(humanoid.Health + elapsedTime, 100)
  3002.                                 end
  3003.                         end
  3004.                 end
  3005.                 function ResetCharacter()
  3006.                         for index, connection in ipairs(connections) do
  3007.                                 connection:disconnect()
  3008.                         end
  3009.                         active = false
  3010.                 end
  3011.                 table.insert(connections, model.AncestryChanged:connect(ResetCharacter))
  3012.                 table.insert(connections, model.DescendantRemoving:connect(function(object)
  3013.                         local parent = forcefields[object]
  3014.                         if parent then
  3015.                                 forcefields[object] = nil
  3016.                                 local new_forcefield = Instance.new("ForceField")
  3017.                                 forcefields[new_forcefield] = parent
  3018.                                 objects[new_forcefield] = true
  3019.                                 new_forcefield.Parent = parent
  3020.                         elseif objects[object] then
  3021.                                 ResetCharacter()
  3022.                         end
  3023.                 end))
  3024.                 table.insert(connections, humanoid.HealthChanged:connect(RegenerateHealth))
  3025.                 table.insert(connections, humanoid.Climbing:connect(function() pose = "Climbing" end))
  3026.                 table.insert(connections, humanoid.FallingDown:connect(function(state)  pose = "FallingDown" end))
  3027.                 table.insert(connections, humanoid.FreeFalling:connect(function(state) pose = "FreeFall" if state then soundFreeFalling:Play() else
  3028.  
  3029. soundFreeFalling:Pause() end end))
  3030.                 table.insert(connections, humanoid.GettingUp:connect(function(state) pose = "GettingUp" if state then soundGettingUp:Play() else
  3031.  
  3032. soundGettingUp:Pause() end end))
  3033.                 table.insert(connections, humanoid.PlatformStanding:connect(function() pose = "PlatformStanding" end))
  3034.                 table.insert(connections, humanoid.Seated:connect(function() pose = "Seated" end))
  3035.                 table.insert(connections, humanoid.Swimming:connect(function(speed) if speed > 0 then pose = "Swimming" else pose = "Standing" end end))
  3036.                 local previousRootPartCFrame = rootPart.CFrame
  3037.                 TaskScheduler.Start(function()
  3038.                         while active do
  3039.                                 local totalTime = TaskScheduler.GetCurrentTime()
  3040.                                 local stepTime = 1 / 60
  3041.                                 if not PlayerControl.characterEnabled then
  3042.                                         ResetCharacter()
  3043.                                         break
  3044.                                 end
  3045.                                 torsoLight.Brightness = 0.5 + 0.15 * math.sin(totalTime * 0.75 * math.pi)
  3046.                                 local featherfallEnabled = PlayerControl.IsFeatherfallEnabled()
  3047.                                 local rootPartCFrame = rootPart.CFrame
  3048.                                 if not jumpDebounce and UserInterface:IsKeyDown(Enum.KeyCode.Space) then
  3049.                                         if humanoid.Sit then
  3050.                                                 humanoid.Sit = false
  3051.                                         end
  3052.                                         if IsStanding() then
  3053.                                                 jumpDebounce = true
  3054.                                                 pose = "Jumping"
  3055.                                                 rootPart.Velocity = Vector3.new(rootPart.Velocity.X, 50, rootPart.Velocity.Z)
  3056.                                                 torso.Velocity = Vector3.new(torso.Velocity.X, 50, torso.Velocity.Z)                                          
  3057.                                                 TaskScheduler.Schedule(1, function()
  3058.                                                         if pose == "Jumping" then
  3059.                                                                 pose = "FreeFall"
  3060.                                                         end
  3061.                                                         jumpDebounce = false
  3062.                                                         humanoid.Jump = false
  3063.                                                 end)
  3064.                                         end
  3065.                                 end
  3066.                                 local cameraCFrame = Camera.CoordinateFrame
  3067.                                 local cameraDirection = cameraCFrame.lookVector
  3068.                                 if flying then
  3069.                                         if PlayerControl.rolling then
  3070.                                                 local rootPartCFrame = rootPart.CFrame
  3071.                                                 local speed = (rootPartCFrame - rootPartCFrame.p):pointToObjectSpace(rootPart.Velocity).Y
  3072.                                                 local decay = 0.5 ^ stepTime
  3073.                                                 if math.abs(speed) <= 50 then
  3074.                                                         PlayerControl.rollingAngle = (((PlayerControl.rollingAngle + 0.5) % 1 - 0.5) * decay) % 1
  3075.                                                         PlayerControl.rollingOffset = PlayerControl.rollingOffset * decay
  3076.                                                 else
  3077.                                                         PlayerControl.rollingAngle = (PlayerControl.rollingAngle + stepTime * speed * PlayerControl.rollingSpeed) % 1
  3078.                                                         PlayerControl.rollingOffset = (PlayerControl.rollingOffset + PlayerControl.rollingMaxOffset * (1 / decay - 1)) * decay
  3079.                                                 end
  3080.                                                 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)
  3081.                                         else
  3082.                                                 rootJoint.C0 = CFrame.new(0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 1, 0)
  3083.                                                 PlayerControl.rollingAngle = 0
  3084.                                                 PlayerControl.rollingOffset = 0
  3085.                                         end
  3086.                                         rightShoulder.MaxVelocity = 0.5
  3087.                                         leftShoulder.MaxVelocity = 0.5
  3088.                                         rightShoulder.DesiredAngle = 0
  3089.                                         leftShoulder.DesiredAngle = 0
  3090.                                         rightHip.DesiredAngle = 0
  3091.                                         leftHip.DesiredAngle = 0
  3092.                                         bodyGyro.D = 500
  3093.                                         bodyGyro.P = 1e6
  3094.                                         bodyGyro.maxTorque = Vector3.new(1e6, 1e6, 1e6)
  3095.                                         bodyVelocity.P = 1250
  3096.                                         bodyVelocity.maxForce = Vector3.new(1e6, 1e6, 1e6)
  3097.                                         local movementRight = 0
  3098.                                         local movementForward = 0
  3099.                                         local movementUp = 0
  3100.                                         if UserInterface:IsKeyDown(Enum.KeyCode.A) and not UserInterface:IsKeyDown(Enum.KeyCode.D) then
  3101.                                                 movementRight = -1
  3102.                                         elseif UserInterface:IsKeyDown(Enum.KeyCode.D) then
  3103.                                                 movementRight = 1
  3104.                                         end
  3105.                                         if UserInterface:IsKeyDown(Enum.KeyCode.W) then
  3106.                                                 movementUp = 0.2
  3107.                                                 if not UserInterface:IsKeyDown(Enum.KeyCode.S) then
  3108.                                                         movementForward = -1
  3109.                                                 end
  3110.                                         elseif UserInterface:IsKeyDown(Enum.KeyCode.S) then
  3111.                                                 movementForward = 1
  3112.                                         end
  3113.                                         local movement = PlayerControl.fly_acceleration * cameraCFrame:vectorToWorldSpace(Vector3.new(movementRight, movementUp, movementForward))
  3114.                                         local previousMomentum = flyingMomentum
  3115.                                         local previousTilt = flyingTilt
  3116.                                         flyingMomentum = movement + flyingMomentum * (1 - PlayerControl.fly_acceleration / PlayerControl.fly_speed)
  3117.                                         flyingTilt = ((flyingMomentum * Vector3.new(1, 0, 1)).unit:Cross((previousMomentum * Vector3.new(1, 0, 1)).unit)).Y
  3118.                                         if flyingTilt ~= flyingTilt or flyingTilt == math.huge then
  3119.                                                 flyingTilt = 0
  3120.                                         end
  3121.                                         local absoluteTilt = math.abs(flyingTilt)
  3122.                                         if absoluteTilt > 0.06 or absoluteTilt < 0.0001 then
  3123.                                                 if math.abs(previousTilt) > 0.0001 then
  3124.                                                         flyingTilt = previousTilt * 0.9
  3125.                                                 else
  3126.                                                         flyingTilt = 0
  3127.                                                 end
  3128.                                         else
  3129.                                                 flyingTilt = previousTilt * 0.77 + flyingTilt * 0.25
  3130.                                         end
  3131.                                         previousTilt = flyingTilt
  3132.                                         if flyingMomentum.magnitude < 0.1 then
  3133.                                                 flyingMomentum = Vector3.new(0, 0, 0)
  3134. --                                              bodyGyro.cframe = cameraCFrame
  3135.                                         else
  3136.                                                 local momentumOrientation = CFrame.new(Vector3.new(0, 0, 0), flyingMomentum)
  3137.                                                 local tiltOrientation = CFrame.Angles(0, 0, -20 * flyingTilt)
  3138.                                                 bodyGyro.cframe = momentumOrientation * tiltOrientation * CFrame.Angles(-0.5 * math.pi * math.min(flyingMomentum.magnitude / PlayerControl.fly_speed, 1), 0, 0)
  3139.                                         end
  3140.                                         bodyVelocity.velocity = flyingMomentum + Vector3.new(0, 0.15695775618683547, 0)
  3141.                                         rootPart.Velocity = flyingMomentum
  3142.                                         previousMomentum = flyingMomentum
  3143.                                 else
  3144.                                         rootJoint.C0 = CFrame.new(0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 1, 0)
  3145.                                         PlayerControl.rollingAngle = 0
  3146.                                         PlayerControl.rollingOffset = 0
  3147.                                         bodyGyro.D = 3250
  3148.                                         bodyGyro.P = 400000
  3149.                                         bodyVelocity.P = 5000
  3150.                                         local cameraDirection = cameraCFrame.lookVector
  3151.                                         local walkDirection = Vector3.new(0, 0, 0)
  3152.                                         local walkSpeed = 16
  3153.                                         if UserInterface:IsKeyDown(Enum.KeyCode.W) then
  3154.                                                 if UserInterface:IsKeyDown(Enum.KeyCode.A) then
  3155.                                                         walkDirection = Vector3.new(cameraDirection.X + cameraDirection.Z, 0, cameraDirection.Z - cameraDirection.X).unit
  3156.                                                 elseif UserInterface:IsKeyDown(Enum.KeyCode.D) then
  3157.                                                         walkDirection = Vector3.new(cameraDirection.X - cameraDirection.Z, 0, cameraDirection.Z + cameraDirection.X).unit
  3158.                                                 else
  3159.                                                         walkDirection = Vector3.new(cameraDirection.X, 0, cameraDirection.Z).unit
  3160.                                                 end
  3161.                                         elseif UserInterface:IsKeyDown(Enum.KeyCode.S) then
  3162.                                                 if UserInterface:IsKeyDown(Enum.KeyCode.A) then
  3163.                                                         walkDirection = Vector3.new(-cameraDirection.X + cameraDirection.Z, 0, -cameraDirection.Z - cameraDirection.X).unit
  3164.                                                 elseif UserInterface:IsKeyDown(Enum.KeyCode.D) then
  3165.                                                         walkDirection = Vector3.new(-cameraDirection.X - cameraDirection.Z, 0, -cameraDirection.Z + cameraDirection.X).unit
  3166.                                                 else
  3167.                                                         walkDirection = Vector3.new(-cameraDirection.X, 0, -cameraDirection.Z).unit
  3168.                                                 end
  3169.                                         elseif UserInterface:IsKeyDown(Enum.KeyCode.A) then
  3170.                                                 walkDirection = Vector3.new(cameraDirection.Z, 0, -cameraDirection.X).unit
  3171.                                         elseif UserInterface:IsKeyDown(Enum.KeyCode.D) then
  3172.                                                 walkDirection = Vector3.new(-cameraDirection.Z, 0, cameraDirection.X).unit
  3173.                                         else
  3174.                                                 walkSpeed = 0
  3175.                                         end
  3176.                                         if walkSpeed ~= previousWalkSpeed then
  3177.                                                 if walkSpeed > 0 then
  3178.                                                         soundRunning:Play()
  3179.                                                 else
  3180.                                                         soundRunning:Pause()
  3181.                                                 end
  3182.                                         end
  3183.                                         if walkSpeed > 0 then
  3184.                                                 if pose ~= "Jumping" then
  3185.                                                         if IsStanding() then
  3186.                                                                 pose = "Running"
  3187.                                                         else
  3188.                                                                 pose = "FreeFall"
  3189.                                                         end
  3190.                                                 end
  3191.                                                 bodyGyro.cframe = CFrame.new(Vector3.new(), walkDirection)
  3192.                                                 bodyGyro.maxTorque = Vector3.new(1000000000, 1000000000, 1000000000)
  3193.                                                 bodyVelocity.maxForce = Vector3.new(1000000, maxForceY, 1000000)
  3194.                                         else
  3195.                                                 if pose ~= "Jumping" then
  3196.                                                         if IsStanding() then
  3197.                                                                 pose = "Standing"
  3198.                                                         else
  3199.                                                                 pose = "FreeFall"
  3200.                                                         end
  3201.                                                 end
  3202.                                                 -- TODO: find and fix bug that causes torso to rotate back to some angle
  3203.                                                 bodyGyro.maxTorque = Vector3.new(1000000000, 1000000000, 1000000000) -- Vector3.new(1000000000, 0, 1000000000)
  3204.                                                 if PlayerControl.pushable then
  3205.                                                         bodyVelocity.maxForce = Vector3.new(0, 0, 0)
  3206.                                                 else
  3207.                                                         bodyVelocity.maxForce = Vector3.new(1000000, 0, 1000000)
  3208.                                                 end
  3209.                                         end
  3210.                                         if featherfallEnabled then
  3211.                                                 local velocity = rootPart.Velocity
  3212.                                                 if velocity.Y > 50 then
  3213.                                                         rootPart.Velocity = Vector3.new(velocity.X, 50, velocity.Z)
  3214.                                                 elseif velocity.Y < -50 then
  3215.                                                         rootPart.Velocity = Vector3.new(velocity.X, -50, velocity.Z)
  3216.                                                 end
  3217.                                                 local distanceVector = rootPartCFrame.p - previousRootPartCFrame.p
  3218.                                                 local offsetX, offsetY, offsetZ = distanceVector.X, distanceVector.Y, distanceVector.Z
  3219.                                                 local MAX_MOVEMENT = 50 * 0.03333333507180214
  3220.                                                 if offsetX > MAX_MOVEMENT then
  3221.                                                         offsetX = MAX_MOVEMENT
  3222.                                                 elseif offsetX < -MAX_MOVEMENT then
  3223.                                                         offsetX = -MAX_MOVEMENT
  3224.                                                 end
  3225.                                                 if offsetY > MAX_MOVEMENT then
  3226.                                                         offsetY = MAX_MOVEMENT
  3227.                                                 elseif offsetY < -MAX_MOVEMENT then
  3228.                                                         offsetY = -MAX_MOVEMENT
  3229.                                                 end
  3230.                                                 if offsetZ > MAX_MOVEMENT then
  3231.                                                         offsetZ = MAX_MOVEMENT
  3232.                                                 elseif offsetZ < -MAX_MOVEMENT then
  3233.                                                         offsetZ = -MAX_MOVEMENT
  3234.                                                 end
  3235.                                                 local offset = Vector3.new(offsetX, offsetY, offsetZ)
  3236.                                                 if offset ~= distanceVector then
  3237.                                                         rootPartCFrame = previousRootPartCFrame + offset
  3238.                                                         --rootPart.CFrame = rootPartCFrame
  3239.                                                 end
  3240.                                         end
  3241.                                         local walkingVelocity = walkDirection * walkSpeed
  3242.                                         bodyVelocity.velocity = walkingVelocity
  3243.                                         if not jumpDebounce and math.abs(rootPart.Velocity.Y) <= 0.1 then
  3244.                                                 rootPart.Velocity = Vector3.new(walkingVelocity.X, rootPart.Velocity.Y, walkingVelocity.Z)
  3245.                                         end
  3246.                                         previousWalkSpeed = walkSpeed
  3247.                                         if pose == "Jumping" or jumpDebounce then
  3248.                                                 rightShoulder.MaxVelocity = 0.5
  3249.                                                 leftShoulder.MaxVelocity = 0.5
  3250.                                                 rightShoulder.DesiredAngle = 3.14
  3251.                                                 leftShoulder.DesiredAngle = -3.14
  3252.                                                 rightHip.DesiredAngle = 0
  3253.                                                 leftHip.DesiredAngle = 0
  3254.                                         elseif pose == "FreeFall" then
  3255.                                                 rightShoulder.MaxVelocity = 0.5
  3256.                                                 leftShoulder.MaxVelocity = 0.5
  3257.                                                 rightShoulder.DesiredAngle = 3.14
  3258.                                                 leftShoulder.DesiredAngle = -3.14
  3259.                                                 rightHip.DesiredAngle = 0
  3260.                                                 leftHip.DesiredAngle = 0
  3261.                                         elseif pose == "Seated" then
  3262.                                                 rightShoulder.MaxVelocity = 0.15
  3263.                                                 leftShoulder.MaxVelocity = 0.15
  3264.                                                 rightShoulder.DesiredAngle = 3.14 / 2
  3265.                                                 leftShoulder.DesiredAngle = -3.14 / 2
  3266.                                                 rightHip.DesiredAngle = 3.14 / 2
  3267.                                                 leftHip.DesiredAngle = -3.14 / 2
  3268.                                         else
  3269.                                                 local climbFudge = 0
  3270.                                                 local amplitude
  3271.                                                 local frequency
  3272.                                                 if pose == "Running" then
  3273.                                                         rightShoulder.MaxVelocity = 0.15
  3274.                                                         leftShoulder.MaxVelocity = 0.15
  3275.                                                         amplitude = 1
  3276.                                                         frequency = 9
  3277.                                                 elseif (pose == "Climbing") then
  3278.                                                         rightShoulder.MaxVelocity = 0.5
  3279.                                                         leftShoulder.MaxVelocity = 0.5
  3280.                                                         amplitude = 1
  3281.                                                         frequency = 9
  3282.                                                         climbFudge = 3.14
  3283.                                                 else
  3284.                                                         amplitude = 0.1
  3285.                                                         frequency = 1
  3286.                                                 end
  3287.                                                 local desiredAngle = amplitude * math.sin(totalTime * frequency)
  3288.                                                 rightShoulder.DesiredAngle = desiredAngle + climbFudge
  3289.                                                 leftShoulder.DesiredAngle = desiredAngle - climbFudge
  3290.                                                 rightHip.DesiredAngle = -desiredAngle
  3291.                                                 leftHip.DesiredAngle = -desiredAngle
  3292.                                         end
  3293.                                 end
  3294.                                 previousRootPartCFrame = rootPartCFrame
  3295.                                 RunService.RenderStepped:wait()
  3296.                         end
  3297.                         if model.Parent ~= nil then
  3298.                                 model.Parent = nil
  3299.                         end
  3300.                         PlayerControl.CreateCharacter()
  3301.                 end)
  3302.                 humanoid.Health = 100
  3303.                 character = model
  3304.                 chatAdornee = head
  3305.         elseif characterMode == "pyramid" then
  3306.                 if PlayerControl.characterEnabled then
  3307.                         Camera.CameraType = "Fixed"
  3308.                         PyramidCharacter.camera_distance = (Camera.Focus.p - Camera.CoordinateFrame.p).magnitude
  3309.                         PyramidCharacter.camera_position = Camera.Focus.p
  3310.                         PyramidCharacter.Teleport(Camera.Focus.p)
  3311.                         PyramidCharacter.visible = true
  3312.                         Player.Character = nil
  3313.                 else
  3314.                         PyramidCharacter.visible = false
  3315.                 end
  3316.         end
  3317. end
  3318. function PlayerControl.GetCharacter()
  3319.         return character
  3320. end
  3321. function PlayerControl.GetHead()
  3322.         local characterMode = PlayerControl.characterMode
  3323.         if characterMode == "normal" then
  3324.                 return head
  3325.         elseif characterMode == "pyramid" then
  3326.                 return PyramidCharacter.core
  3327.         end
  3328. end
  3329. function PlayerControl.GetHumanoid()
  3330.         return humanoid
  3331. end
  3332. function PlayerControl.GetRootPart()
  3333.         return rootPart
  3334. end
  3335. function PlayerControl.GetTorso()
  3336.         return torso
  3337. end
  3338. function PlayerControl.IsEnabled()
  3339.         return PlayerControl.characterEnabled
  3340. end
  3341. function PlayerControl.IsFeatherfallEnabled()
  3342.         return PlayerControl.featherfallEnabled
  3343. end
  3344. function PlayerControl.IsPushable()
  3345.         return PlayerControl.pushable
  3346. end
  3347. function PlayerControl.IsRolling()
  3348.         return PlayerControl.rolling
  3349. end
  3350. function PlayerControl.ResetCharacter()
  3351.         if character and character.Parent then
  3352.                 character.Parent = nil
  3353.         end
  3354.         PyramidCharacter.visible = false
  3355. end
  3356. function PlayerControl.SetEnabled(state, no_animation)
  3357.         state = not not state
  3358.         if state ~= PlayerControl.characterEnabled then
  3359.                 PlayerControl.characterEnabled = state
  3360.                 local characterMode = PlayerControl.characterMode
  3361.                 if characterMode == "normal" then
  3362.                         local torso = PlayerControl.GetRootPart()
  3363.                         local rootPart = PlayerControl.GetRootPart()
  3364.                         if rootPart then
  3365.                                 if PlayerControl.characterEnabled then
  3366.                                         local torso_cframe = Camera.Focus:toWorldSpace(PlayerControl.hide_torso_object_cframe)
  3367.                                         PlayerControl.torso_cframe = torso_cframe
  3368.                                         torso.CFrame = torso_cframe
  3369.                                         rootPart.CFrame = torso_cframe
  3370.                                 else
  3371.                                         PlayerControl.hide_torso_object_cframe = Camera.Focus:toObjectSpace(rootPart.CFrame)
  3372.                                 end
  3373.                         else
  3374.                                 PlayerControl.torso_cframe = Camera.Focus
  3375.                         end
  3376.                         if PlayerControl.characterEnabled then
  3377.                                 PlayerControl.CreateCharacter()
  3378.                                 RunService.Stepped:wait()
  3379.                                 coroutine.yield()
  3380.                                 if not no_animation then
  3381.                                         GraphicalEffects.CrystalRing({base_part = PlayerControl.GetTorso(), crystal_color = BrickColor.new("Institutional white"), float_duration = 2})
  3382.                                 end            
  3383.                         else
  3384.                                 Player.Character = nil
  3385.                                 Camera.CameraType = "Fixed"
  3386.                                 if not no_animation then
  3387.                                         GraphicalEffects.CrystalRing({position = PlayerControl.GetTorso().Position, crystal_color = BrickColor.new("Institutional white"), float_duration = 2})
  3388.                                 end
  3389.                         end
  3390.                 else
  3391.                         if state then
  3392.                                 PlayerControl.CreateCharacter()
  3393.                                 RunService.Stepped:wait()
  3394.                                 coroutine.yield()
  3395.                                 if not no_animation then
  3396.                                         GraphicalEffects.CrystalRing({base_part = PyramidCharacter.core, crystal_color = BrickColor.new("Institutional white"), float_duration = 2})
  3397.                                 end
  3398.                         else
  3399.                                 PyramidCharacter.visible = false
  3400.                                 if not no_animation then
  3401.                                         GraphicalEffects.CrystalRing({position = PyramidCharacter.core.Position, crystal_color = BrickColor.new("Institutional white"), float_duration = 2})
  3402.                                 end
  3403.                         end
  3404.                 end
  3405.         end
  3406. end
  3407. function PlayerControl.SetFeatherfallEnabled(state)
  3408.         state = not not state
  3409.         if state ~= PlayerControl.featherfallEnabled then
  3410.                 PlayerControl.featherfallEnabled = state
  3411.                 if state then
  3412.                         Logger.print("Info", "Featherfall enabled in PlayerControl")
  3413.                 else
  3414.                         Logger.print("Info", "Featherfall disabled in PlayerControl")
  3415.                 end
  3416.         end
  3417. end
  3418. function PlayerControl.SetPushable(state)
  3419.         state = not not state
  3420.         if state ~= PlayerControl.pushable then
  3421.                 PlayerControl.pushable = state
  3422.                 if state then
  3423.                         Logger.print("Info", "Pushing enabled in PlayerControl")
  3424.                 else
  3425.                         Logger.print("Info", "Pushing disabled in PlayerControl")
  3426.                 end
  3427.         end
  3428. end
  3429. function PlayerControl.SetRolling(state)
  3430.         state = not not state
  3431.         if state ~= PlayerControl.rolling then
  3432.                 PlayerControl.rolling = state
  3433.                 if state then
  3434.                         Logger.print("Info", "Rolling fly mode enabled in PlayerControl")
  3435.                 else
  3436.                         Logger.print("Info", "Rolling fly mode disabled in PlayerControl")
  3437.                 end
  3438.         end
  3439. end
  3440. function PlayerControl.StartFlying()
  3441.         PlayerControl.fly_speed = PlayerControl.fly_basespeed
  3442.         if torso then
  3443.                 flyingMomentum = torso.Velocity + torso.CFrame.lookVector * 3 + Vector3.new(0, 10, 0)
  3444.         else
  3445.                 flyingMomentum = Vector3.new()
  3446.         end
  3447.         flyingTilt = 0
  3448.         flying = true
  3449. end
  3450. function PlayerControl.StopFlying()
  3451.         if bodyGyro.cframe then
  3452.                 local lookVector = bodyGyro.cframe.lookVector
  3453.                 if lookVector.X ~= 0 or lookVector.Z ~= 0 then
  3454.                         bodyGyro.cframe = CFrame.new(Vector3.new(), Vector3.new(lookVector.X, 0, lookVector.Z))
  3455.                 end
  3456.         end
  3457.         flying = false
  3458. end
  3459. local previousTime = 0
  3460.  
  3461. ControllerCommands = {};
  3462.  
  3463. ControllerCommands = {};
  3464.  
  3465. ControllerCommands.BALEFIRE_SPEED = 40
  3466. function ControllerCommands.BalefireAtMouse()
  3467.         local head = chatAdornee
  3468.         if head then
  3469.                 local target = Mouse.Hit.p
  3470.                 local origin = head.Position
  3471.                 local direction = (target - origin).unit
  3472.                 local explosionCount = 0
  3473.                 local animation_frame = 0
  3474.                 local magic_circle_position = origin + direction * 4
  3475.                 local magic_circle_cframe = CFrame.new(magic_circle_position, magic_circle_position + direction)
  3476.                 local magic_circle_part = Instance.new("Part")
  3477.                 local magic_circle_mesh = Instance.new("BlockMesh", magic_circle_part)
  3478.                 local magic_circle_light = Instance.new("PointLight", magic_circle_part)
  3479.                 local magic_circle_decal_back = Instance.new("Decal", magic_circle_part)
  3480.                 local magic_circle_decal_front = Instance.new("Decal", magic_circle_part)
  3481.                 magic_circle_part.Anchored = true
  3482.                 magic_circle_part.Archivable = false
  3483.                 magic_circle_part.BottomSurface = "Smooth"
  3484.                 magic_circle_part.CanCollide = false
  3485.                 magic_circle_part.CFrame = magic_circle_cframe
  3486.                 magic_circle_part.FormFactor = "Custom"
  3487.                 magic_circle_part.Locked = true
  3488.                 magic_circle_part.Size = Vector3.new(0.2, 0.2, 0.2)
  3489.                 magic_circle_part.TopSurface = "Smooth"
  3490.                 magic_circle_part.Transparency = 1
  3491.                 magic_circle_mesh.Scale = Vector3.new(60, 60, 0)
  3492.                 magic_circle_light.Color = Color3.new(1, 0.5, 1)
  3493.                 magic_circle_light.Range = 16
  3494.                 magic_circle_light.Shadows = true
  3495.                 magic_circle_decal_back.Face = "Back"
  3496.                 magic_circle_decal_back.Texture = "rbxassetid://122610943"
  3497.                 magic_circle_decal_front.Face = "Front"
  3498.                 magic_circle_decal_front.Texture = "rbxassetid://122610943"
  3499.                 local function NextExplosion()
  3500.                         explosionCount = explosionCount + 1
  3501.                         Instance.new("Explosion", Workspace).Position = origin + direction * (explosionCount * 8 + 4)
  3502.                 end
  3503.                 local function AnimateMagicCircle()
  3504.                         animation_frame = animation_frame + 1
  3505.                         local transparency = (animation_frame / 40) ^ 3
  3506.                         if animation_frame == 40 then
  3507.                                 pcall(Game.Destroy, magic_circle_part)
  3508.                         else
  3509.                                 if magic_circle_part.Parent ~= Workspace then
  3510.                                         pcall(Utility.SetProperty, magic_circle_part, "Parent", Workspace)
  3511.                                 end
  3512.                                 head = PlayerControl.GetHead()
  3513.                                 if head then
  3514.                                         magic_circle_position = head.Position + direction * 4
  3515.                                 end
  3516.                                 magic_circle_part.CFrame = CFrame.new(magic_circle_position, magic_circle_position + direction) * CFrame.Angles(0, 0,
  3517.  
  3518. math.tau * animation_frame / 40 * 1.5)
  3519.                                 magic_circle_light.Brightness = 1 - transparency
  3520.                                 magic_circle_decal_back.Transparency = transparency
  3521.                                 magic_circle_decal_front.Transparency = transparency
  3522.                         end
  3523.                 end
  3524.                 magic_circle_part.Parent = Workspace
  3525.                 for i = 1, 40 do
  3526.                         Delay((i - 1) / ControllerCommands.BALEFIRE_SPEED, NextExplosion)
  3527.                         Delay((i - 1) / 30, AnimateMagicCircle)
  3528.                 end
  3529.                 for i = 1, 20 do
  3530.                         Delay((i - 1) / ControllerCommands.BALEFIRE_SPEED, NextExplosion)
  3531.                 end
  3532.         end
  3533. end
  3534. function ControllerCommands.ControlRandomDummy()
  3535.         local dummies = {}
  3536.         local numDummies = 0
  3537.         for _, character in ipairs(Workspace:GetChildren()) do
  3538.                 local name = tostring(character)
  3539.                 if name == "???" or name == "Dummy" then
  3540.                         local head, humanoid
  3541.                         for _, child in ipairs(character:GetChildren()) do
  3542.                                 local className = child.ClassName
  3543.                                 if className == "Part" and tostring(child) == "Head" then
  3544.                                         head = child
  3545.                                         if humanoid then
  3546.                                                 break
  3547.                                         end
  3548.                                 elseif className == "Humanoid" then
  3549.                                         if child.Health > 0 then
  3550.                                                 humanoid = child
  3551.                                                 if head then
  3552.                                                         break
  3553.                                                 end
  3554.                                         else
  3555.                                                 break
  3556.                                         end
  3557.                                 end
  3558.                         end
  3559.                         if head and humanoid then
  3560.                                 numDummies = numDummies + 1
  3561.                                 dummies[numDummies] = {character, head, humanoid}
  3562.                         end
  3563.                 end
  3564.         end
  3565.         if numDummies > 0 then
  3566.                 local dummy = dummies[math.random(numDummies)]
  3567.                 Player.Character = dummy[1]
  3568.                 chatAdornee = dummy[2]
  3569.                 Camera.CameraSubject = dummy[3]
  3570.                 Camera.CameraType = "Track"
  3571.         end
  3572. end
  3573. function ControllerCommands.Decalify(textures, exclusion)
  3574.         local objects = Workspace:GetChildren()
  3575.         for _, object in ipairs(objects) do
  3576.                 if not exclusion[object] then
  3577.                         for _, child in ipairs(object:GetChildren()) do
  3578.                                 objects[#objects + 1] = child
  3579.                         end
  3580.                         if object:IsA("BasePart") then
  3581.                                 local texture = textures[math.random(#textures)]
  3582.                                 local face_left = Instance.new("Decal", object)
  3583.                                 face_left.Face = Enum.NormalId.Left
  3584.                                 face_left.Texture = texture
  3585.                                 local face_right = Instance.new("Decal", object)
  3586.                                 face_right.Face = Enum.NormalId.Right
  3587.                                 face_right.Texture = texture
  3588.                                 local face_bottom = Instance.new("Decal", object)
  3589.                                 face_bottom.Face = Enum.NormalId.Bottom
  3590.                                 face_bottom.Texture = texture
  3591.                                 local face_top = Instance.new("Decal", object)
  3592.                                 face_top.Face = Enum.NormalId.Top
  3593.                                 face_top.Texture = texture
  3594.                                 local face_front = Instance.new("Decal", object)
  3595.                                 face_front.Face = Enum.NormalId.Front
  3596.                                 face_front.Texture = texture
  3597.                                 local face_back = Instance.new("Decal", object)
  3598.                                 face_back.Face = Enum.NormalId.Back
  3599.                                 face_back.Texture = texture
  3600.                         end
  3601.                 end
  3602.         end
  3603. end
  3604.  
  3605. function ControllerCommands.ExplodeAtMouse()
  3606.         local explosion = Instance.new("Explosion")
  3607.         explosion.Position = Mouse.Hit.p
  3608.         explosion.Parent = Workspace
  3609. end
  3610. function ControllerCommands.LaserAtMouse()
  3611.         GraphicalEffects.ShootLaserOfDeath(Mouse.Hit.p)
  3612. end
  3613. function ControllerCommands.BigLaser(target)
  3614.         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})
  3615. end
  3616. function ControllerCommands.BigLaserAtMouse()
  3617.         ControllerCommands.BigLaser(Mouse.Hit.p)
  3618. end
  3619. function ControllerCommands.ShootMissile(targetPart, pointOnPart, direction)
  3620.         GraphicalEffects.ShootMissile(targetPart, pointOnPart, direction)
  3621. end
  3622. function ControllerCommands.ShootMissileAtMouse(amount, spread, delayTime)
  3623.         local exclusionList = {}
  3624.         local playerHead = PlayerControl.GetHead()
  3625.         local playerTorso = PlayerControl.GetTorso()
  3626.         if playerHead and playerTorso then
  3627.                 exclusionList[playerTorso] = true
  3628.                 local humanoid, torso = Utility.FindHumanoidClosestToRay(Mouse.UnitRay, exclusionList)
  3629.                 local targetPart, pointOnPart
  3630.                 if humanoid and torso then
  3631.                         targetPart, pointOnPart = torso, Vector3.new()
  3632.                 else
  3633.                         local target = Mouse.Target
  3634.                         if target then
  3635.                                 targetPart, pointOnPart = target, target.CFrame:pointToObjectSpace(Mouse.Hit.p)
  3636.                         else
  3637.                                 return
  3638.                         end
  3639.                 end
  3640.                 if targetPart then
  3641.                         local direction = (Mouse.Hit.p - playerHead.Position).unit
  3642.                         delayTime = delayTime or 0
  3643.                         for index = 1, amount do
  3644.                                 local angles = math.tau * (index - 0.5) * spread / amount * Vector3.new(math.random() - 0.5, math.random() - 0.5,math.random() - 0.5).unit
  3645.                                 TaskScheduler.Schedule(delayTime * (index - 1), ControllerCommands.ShootMissile, targetPart, pointOnPart, CFrame.Angles(angles.X, angles.Y, angles.Z) * direction)
  3646.                         end
  3647.                 end
  3648.         end
  3649. end
  3650. function ControllerCommands.ShootMissileAroundMouse(amount, offset, delayTime)
  3651.         local exclusionList = {}
  3652.         local playerHead = PlayerControl.GetHead()
  3653.         local playerTorso = PlayerControl.GetTorso()
  3654.         if playerHead and playerTorso then
  3655.                 exclusionList[playerTorso] = true
  3656.                 local humanoid, torso = Utility.FindHumanoidClosestToRay(Mouse.UnitRay, exclusionList)
  3657.                 local targetPart, pointOnPart
  3658.                 if humanoid and torso then
  3659.                         targetPart, pointOnPart = torso, Vector3.new()
  3660.                 else
  3661.                         local target = Mouse.Target
  3662.                         if target then
  3663.                                 targetPart, pointOnPart = target, target.CFrame:pointToObjectSpace(Mouse.Hit.p)
  3664.                         else
  3665.                                 return
  3666.                         end
  3667.                 end
  3668.                 if targetPart then
  3669.                         delayTime = delayTime or 0
  3670.                         local index = 1
  3671.                         local targetPoint = targetPart.CFrame * pointOnPart
  3672.                         local rotation_offset_angles = math.tau * Vector3.new(math.random() - 0.5, math.random() - 0.5, 0).unit
  3673.                         local rotation_offset = CFrame.Angles(rotation_offset_angles.x, rotation_offset_angles.y, 0)
  3674.                         local angle_x = 0
  3675.                         local angle_x_step = math.tau / math.phi
  3676.                         for i = 1, 8 * amount do
  3677.                                 angle_x = angle_x + angle_x_step
  3678.                                 local direction = rotation_offset * (CFrame.Angles(0, math.tau * index / amount, 0) * CFrame.Angles(angle_x, 0,0).lookVector)
  3679.                                 local blocked = Workspace:FindPartOnRay(Ray.new(targetPoint, direction * offset), targetPart.Parent)
  3680.                                 if not blocked then
  3681.                                         local p0, p1, p2, p3 = targetPart, pointOnPart, direction, offset; GraphicalEffects.ShootMissile(p0, p1, p2, function() return p0 end, p3, true)
  3682.                                         index = index + 1
  3683.                                         if index > amount then
  3684.                                                 break
  3685.                                         end
  3686.                                 end
  3687.                         end
  3688.                 end
  3689.         end
  3690. end
  3691.  
  3692. function ControllerCommands.HugeExplosionOfDoom(position)
  3693.         local connections = {}
  3694.         local parts = {}
  3695.         local cframe = CFrame.new(position)
  3696.         local function ExplosionHit(part)
  3697.                 if part:GetMass() < 10000 and part.Parent ~= Camera then
  3698.                         parts[part] = true
  3699.                         part.Anchored = true
  3700.                         part:BreakJoints()
  3701.                         part.BrickColor = BrickColor.new("Instituational white")
  3702.                 end
  3703.         end
  3704.         for i = 1, 4 do
  3705.                 local quantity = 0.5 * i * (1 + i)
  3706.                 local fraction = math.tau / quantity
  3707.                 for x = 1, quantity do
  3708.                         for y = 1, quantity do
  3709.                                 local explosion = Instance.new("Explosion")
  3710.                                 connections[#connections + 1] = explosion.Hit:connect(ExplosionHit)
  3711.                                 explosion.BlastRadius = 5
  3712.                                 explosion.Position = cframe * (CFrame.Angles(fraction * x, fraction * y, 0) * Vector3.new((i - 1) * 6, 0, 0))
  3713.                                 explosion.Parent = Workspace
  3714.                         end
  3715.                 end
  3716.                 wait(0.075)
  3717.         end
  3718.         for part in pairs(parts) do
  3719.                 for _, child in ipairs(part:GetChildren()) do
  3720.                         if child:IsA("BodyMover") then
  3721.                                 child:Destroy()
  3722.                         end
  3723.                 end
  3724.                 local mass = part:GetMass()
  3725.                 local velocity = CFrame.Angles(math.tau * math.random(), math.tau * math.random(), 0) * Vector3.new(25, 0, 0)
  3726.                 local bodythrust = Instance.new("BodyThrust")
  3727.                 bodythrust.force = mass * -velocity
  3728.                 bodythrust.Parent = part
  3729.                 local bodyforce = Instance.new("BodyForce")
  3730.                 bodyforce.force = mass * Vector3.new(0, 196.2, 0)
  3731.                 bodyforce.Parent = part
  3732.                 part.Anchored = false
  3733.                 part.Reflectance = 1
  3734.                 part.RotVelocity = math.tau * Vector3.new(math.random() - 0.5, math.random() - 0.5, math.random() - 0.5)
  3735.                 part.Transparency = 0.5
  3736.                 part.Velocity = (part.CFrame - part.Position) * velocity
  3737.         end
  3738.         for _, connection in ipairs(connections) do
  3739.                 connection:disconnect()
  3740.         end
  3741.         for i = 0, 99 do
  3742.                 Delay(i / 10, function()
  3743.                         for part in pairs(parts) do
  3744.                                 local new_transparency = 0.5 * (1 + i / 50)
  3745.                                 part.Reflectance = 0.98 * part.Reflectance
  3746.                                 if new_transparency > part.Transparency then
  3747.                                         part.Transparency = new_transparency
  3748.                                 end
  3749.                         end
  3750.                 end)
  3751.         end
  3752.         Delay(10, function()
  3753.                 for part in pairs(parts) do
  3754.                         pcall(part.Destroy, part)
  3755.                 end
  3756.         end)
  3757. end
  3758. function ControllerCommands.HugeExplosionOfDoomAtMouse()
  3759.         ControllerCommands.HugeExplosionOfDoom(Mouse.Hit.p)
  3760. end
  3761.  
  3762. function ControllerCommands.SpaceHyperBeam(asd)
  3763.         GraphicalEffects.SpaceHyperBeam(asd)
  3764. end
  3765. function ControllerCommands.SpaceHyperBeamAtMouse()
  3766.         ControllerCommands.SpaceHyperBeam(Mouse.Hit.p)
  3767. end
  3768. function ControllerCommands.ConcentratedSpaceHyperBeamAtMouse()
  3769.         local p = Mouse.Hit.p; for i = 1, 50 do GraphicalEffects.SpaceHyperBeam(p) end
  3770. end
  3771.  
  3772. function ControllerCommands.TeleportCharacterToMouse()
  3773.         if PlayerControl.IsEnabled() then
  3774.                 local torso = PlayerControl.GetTorso()
  3775.                 if torso then
  3776.                         local pos = Mouse.Hit.p + Vector3.new(0, 5, 0)
  3777.                         torso.CFrame = CFrame.new(pos, pos + torso.CFrame.lookVector)
  3778.                 end
  3779.         else
  3780.                 local new_focus_position = Mouse.Hit.p
  3781.                 local direction_vector = Camera.CoordinateFrame.lookVector
  3782.                 local new_focus = CFrame.new(new_focus_position, new_focus_position + direction_vector)
  3783.                 Camera.CoordinateFrame = new_focus * CFrame.new(0, 0, 25)
  3784.                 Camera.Focus = new_focus
  3785.         end
  3786. end
  3787.  
  3788. AdvancedGUI = {};
  3789.  
  3790. if not AdvancedGUI.GUI_BASE_COLOR then
  3791.         AdvancedGUI.GUI_BASE_COLOR = Color3.new(0, 0, 0)
  3792. end
  3793. function AdvancedGUI.GenerateChatColor(speakerName)
  3794.         local chatColor = ChatColor.Get(speakerName).Color
  3795.         local brightness = chatColor.r + chatColor.g + chatColor.b
  3796.         if brightness < 1.5 then
  3797.                 chatColor = Color3.new(math.min(1, 0.4 + chatColor.r), math.min(1, 0.4 + chatColor.g), math.min(1, 0.4 + chatColor.b))
  3798.         else
  3799.                 chatColor = Color3.new(math.min(1, 0.05 + chatColor.r), math.min(1, 0.05 + chatColor.g), math.min(1, 0.05 + chatColor.b))
  3800.         end
  3801.         return chatColor
  3802. end
  3803. GuiBase = {}
  3804. GuiBase.__index = GuiBase
  3805. function GuiBase:new(data)
  3806.         local instance = setmetatable({}, self)
  3807.         instance:Init(data)
  3808.         return instance
  3809. end
  3810. function GuiBase:Destroy()
  3811.         if self.parent then
  3812.                 self.parent.children[self] = nil
  3813.         end
  3814.         for child in pairs(self.children) do
  3815.                 child:Destroy()
  3816.         end
  3817.         self.m_base_instance:Destroy()
  3818. end
  3819. function GuiBase:GetContentInstance(child)
  3820.         return self.m_base_instance
  3821. end
  3822. function GuiBase:Init()
  3823.         self.children = {}
  3824. end
  3825. function GuiBase:IsA(className)
  3826.         return className == "GuiBase"
  3827. end
  3828. function GuiBase:SetParent(parent)
  3829.         if parent ~= self.parent then
  3830.                 if self.parent then
  3831.                         self.parent.children[self] = nil
  3832.                 end
  3833.                 self.parent = parent
  3834.                 if parent then
  3835.                         parent.children[self] = true
  3836.                         self.m_base_instance.Parent = parent:GetContentInstance()
  3837.                 else
  3838.                         self.m_base_instance.Parent = nil
  3839.                 end
  3840.         end
  3841. end
  3842. GuiObject = setmetatable({}, GuiBase)
  3843. GuiObject.__index = GuiObject
  3844. function GuiObject:Destroy()
  3845.         self.DragBegin:disconnect()
  3846.         self.DragMove:disconnect()
  3847.         self.DragStopped:disconnect()
  3848.         self.MouseButton1Click:disconnect()
  3849.         self.MouseButton1Down:disconnect()
  3850.         self.MouseButton1Up:disconnect()
  3851.         self.MouseButton2Down:disconnect()
  3852.         self.MouseButton2Up:disconnect()
  3853.         self.MouseEnter:disconnect()
  3854.         self.MouseLeave:disconnect()
  3855.         GuiBase.Destroy(self)
  3856. end
  3857. function GuiObject:GetAbsolutePosition()
  3858.         return self.m_base_instance.AbsolutePosition
  3859. end
  3860. function GuiObject:GetAbsoluteSize()
  3861.         return self.m_base_instance.AbsoluteSize
  3862. end
  3863. function GuiObject:GetPosition()
  3864.         return self.position
  3865. end
  3866. function GuiObject:GetSize()
  3867.         return self.size
  3868. end
  3869. function GuiObject:Init()
  3870.         GuiBase.Init(self)
  3871.         self.mouseDown = false
  3872.         self.mouseOver = false
  3873.         self.DragBegin = RbxUtility.CreateSignal()
  3874.         self.DragMove = RbxUtility.CreateSignal()
  3875.         self.DragStopped = RbxUtility.CreateSignal()
  3876.         self.MouseButton1Click = RbxUtility.CreateSignal()
  3877.         self.MouseButton1Down = RbxUtility.CreateSignal()
  3878.         self.MouseButton1Up = RbxUtility.CreateSignal()
  3879.         self.MouseButton2Down = RbxUtility.CreateSignal()
  3880.         self.MouseButton2Up = RbxUtility.CreateSignal()
  3881.         self.MouseEnter = RbxUtility.CreateSignal()
  3882.         self.MouseLeave = RbxUtility.CreateSignal()
  3883. end
  3884. function GuiObject:IsA(className)
  3885.         return className == "GuiObject" or GuiBase.IsA(self, className)
  3886. end
  3887. function GuiObject:SetActive(active)
  3888.         if active ~= self.active then
  3889.                 self.active = active
  3890.         end
  3891. end
  3892. function GuiObject:SetBackgroundTransparency(backgroundTransparency)
  3893.         if backgroundTransparency ~= self.backgroundTransparency then
  3894.                 self.backgroundTransparency = backgroundTransparency
  3895.                 self.m_base_instance.BackgroundTransparency = backgroundTransparency
  3896.         end
  3897. end
  3898. function GuiObject:SetColor(color)
  3899.         if color ~= self.color then
  3900.                 self.color = color
  3901.                 self.m_base_instance.BackgroundColor3 = color
  3902.         end
  3903. end
  3904. function GuiObject:SetPosition(position)
  3905.         if position ~= self.position then
  3906.                 self.position = position
  3907.                 self.m_base_instance.Position = position
  3908.         end
  3909. end
  3910. function GuiObject:SetSize(size)
  3911.         if size ~= self.size then
  3912.                 self.size = size
  3913.                 self.m_base_instance.Size = size
  3914.         end
  3915. end
  3916. function GuiObject:SetVisible(visible)
  3917.         if visible ~= self.visible then
  3918.                 self.visible = visible
  3919.                 self.m_base_instance.Visible = visible
  3920.         end
  3921. end
  3922. function GuiObject:SetZIndex(zIndex)
  3923.         local stack = {self.m_base_instance}
  3924.         repeat
  3925.                 local object = stack[#stack]
  3926.                 stack[#stack] = nil
  3927.                 for _, child in ipairs(object:GetChildren()) do
  3928.                         stack[#stack + 1] = child
  3929.                 end
  3930.                 object.ZIndex = zIndex
  3931.         until #stack == 0
  3932. end
  3933. GuiServiceClass = setmetatable({}, GuiBase)
  3934. GuiServiceClass.__index = GuiServiceClass
  3935. function GuiServiceClass:CreateTextArea(text, font, fontSize, textColor3, textXAlignment, textYAlignment, maxWidth, minWidth)
  3936.         local totalHeight = 0
  3937.         local frame = Instance.new("Frame")
  3938.         frame.BackgroundTransparency = 1
  3939.         local label = Instance.new("TextLabel")
  3940.         label.BackgroundTransparency = 1
  3941.         label.Font = font
  3942.         label.FontSize = fontSize
  3943.         label.TextColor3 = textColor3
  3944.         label.TextTransparency = 1
  3945.         label.TextWrapped = true
  3946.         label.TextXAlignment = textXAlignment
  3947.         label.TextYAlignment = textYAlignment
  3948.         label.Parent = self.guiFrame
  3949.         local index = 1
  3950.         while true do
  3951.                 local length = #text - index + 1
  3952.                 if length > 1024 then
  3953.                         length = 1024
  3954.                         local textBlock = string.sub(text, index, index + length - 1)
  3955.                         label.Text = textBlock
  3956.                         local height = 0
  3957.                         local width = maxWidth
  3958.                         repeat
  3959.                                 height = height + 20
  3960.                                 label.Size = UDim2.new(0, width, 0, height)
  3961.                         until label.TextFits
  3962.                         repeat
  3963.                                 height = height - 1
  3964.                                 label.Size = UDim2.new(0, width, 0, height)
  3965.                         until not label.TextFits
  3966.                         repeat
  3967.                                 length = length - 10
  3968.                                 label.Text = string.sub(text, index, index + length - 1)
  3969.                         until label.TextFits
  3970.                         repeat
  3971.                                 length = length + 1
  3972.                                 label.Text = string.sub(text, index, index + length - 1)
  3973.                         until not label.TextFits
  3974.                         local overflowCharacter = string.sub(text, index + length - 1, index + length - 1)
  3975.                         length = length - 1
  3976.                         label.Text = string.sub(text, index, index + length - 1)
  3977.                         if overflowCharacter == "\n" then
  3978.                                 index = index + 1
  3979.                         end
  3980.                         repeat
  3981.                                 height = height - 1
  3982.                                 label.Size = UDim2.new(0, width, 0, height)
  3983.                         until not label.TextFits
  3984.                         height = height + 1
  3985.                         local blockLabel = label:Clone()
  3986.                         blockLabel.Position = UDim2.new(0, 0, 0, totalHeight)
  3987.                         blockLabel.Size = UDim2.new(1, 0, 0, height)
  3988.                         blockLabel.Parent = frame
  3989.                         totalHeight = totalHeight + height
  3990.                         index = index + length
  3991.                 else
  3992.                         local textBlock = string.sub(text, index)
  3993.                         label.Text = textBlock
  3994.                         local height = 0
  3995.                         local width = maxWidth
  3996.                         repeat
  3997.                                 height = height + 20
  3998.                                 label.Size = UDim2.new(0, width, 0, height)
  3999.                         until label.TextFits
  4000.                         repeat
  4001.                                 height = height - 1
  4002.                                 label.Size = UDim2.new(0, width, 0, height)
  4003.                         until not label.TextFits
  4004.                         height = height + 1
  4005.                         if index == 1 then
  4006.                                 repeat
  4007.                                         width =  width - 10
  4008.                                         label.Size = UDim2.new(0, width, 0, height)
  4009.                                 until width < minWidth or not label.TextFits
  4010.                                 width = math.max(width, minWidth - 1)
  4011.                                 repeat
  4012.                                         width =  width + 1
  4013.                                         label.Size = UDim2.new(0, width, 0, height)
  4014.                                 until label.TextFits
  4015.                         end
  4016.                         local blockLabel = label:Clone()
  4017.                         blockLabel.Position = UDim2.new(0, 0, 0, totalHeight)
  4018.                         blockLabel.Size = UDim2.new(1, 0, 0, height)
  4019.                         blockLabel.Parent = frame
  4020.                         label:Destroy()
  4021.                         frame.Size = UDim2.new(0, width, 0, totalHeight + height)
  4022.                         return frame
  4023.                 end
  4024.         end
  4025. end
  4026. function GuiServiceClass:Destroy()
  4027.         self.running = false
  4028.         self.cameraPart:Destroy()
  4029.         self.cameraConnection:disconnect()
  4030.         self.keyDownConnection:disconnect()
  4031.         self.mouseButton1DownConnection:disconnect()
  4032.         self.mouseButton1UpConnection:disconnect()
  4033.         self.mouseButton2DownConnection:disconnect()
  4034.         self.mouseButton2UpConnection:disconnect()
  4035.         self.mouseMoveConnection:disconnect()
  4036.         self.steppedConnection:disconnect()
  4037. end
  4038. function GuiServiceClass:GetMousePosition()
  4039.         local mouse = self.mouse
  4040.         return mouse.X, mouse.Y -- mouse.X, mouse.Y + 2 -- return mouse.X - 2, mouse.Y - 3
  4041. end
  4042. function GuiServiceClass:GetTextBounds(text, font, fontSize, alignX, alignY, width)
  4043.         local tempLabel = self.tempLabel
  4044.         tempLabel.Font = font
  4045.         tempLabel.FontSize = fontSize
  4046.         tempLabel.Size = UDim2.new(0, width, 0, 4096)
  4047.         tempLabel.Text = text
  4048.         tempLabel.TextXAlignment = alignX
  4049.         tempLabel.TextYAlignment = alignY
  4050.         local textBounds = tempLabel.TextBounds
  4051.         tempLabel.Text = ""
  4052.         return textBounds
  4053. end
  4054. function GuiServiceClass:Init(data)
  4055.         GuiBase.Init(self)
  4056.         local _ = string.char
  4057.         local camera = data.Camera
  4058.         local mouse = data.Mouse
  4059.         local cameraPart = Instance.new("Part")
  4060.         local billboardGui = Instance.new("BillboardGui", cameraPart)
  4061.         guiFrame = Instance.new("Frame", billboardGui)
  4062.         cameraPart.Anchored = true
  4063.         cameraPart.BottomSurface = "Smooth"
  4064.         cameraPart.CanCollide = false
  4065. --      cameraPart.CFrame = CFrame.new(16384, 16384, 16384)
  4066.         cameraPart.FormFactor = "Custom"
  4067.         cameraPart.Locked = true
  4068.         cameraPart.Size = Vector3.new(0.2, 0.2, 0.2)
  4069.         cameraPart.TopSurface = "Smooth"
  4070.         cameraPart.Transparency = 1
  4071.         billboardGui.Adornee = cameraPart
  4072.         billboardGui.AlwaysOnTop = true
  4073. --      billboardGui.ExtentsOffset = Vector3.new(-16384, -16384, -16384)
  4074.         guiFrame.BackgroundTransparency = 1
  4075.         cameraPart.Parent = camera
  4076.         self.running = true
  4077.         self.m_base_instance = guiFrame
  4078.         self.billboardGui = billboardGui
  4079.         self.cameraPart = cameraPart
  4080.         self.tempLabel = RBXInstance.new "TextLabel" {
  4081.                 BackgroundTransparency = 1,
  4082.                 TextTransparency = 1,
  4083.                 TextWrapped = true,
  4084.                 Parent = guiFrame
  4085.         }
  4086.         self.mnemonics = {}
  4087.         self.visible = true
  4088.         self.camera = camera
  4089.         self.mouse = mouse
  4090.         self.cameraConnection = camera.Changed:connect(function(property)
  4091.                 self:UpdateView()
  4092.                 if property == "CameraType" then
  4093.                         if camera.CameraType ~= Enum.CameraType.Track and camera.CameraType ~= Enum.CameraType.Fixed then
  4094.                                 camera.CameraType = Enum.CameraType.Track
  4095.                         end
  4096.                 elseif property == "CoordinateFrame" and camera.CameraType ~= Enum.CameraType.Fixed then
  4097.                         local cframe, focus = camera.CoordinateFrame, camera.Focus
  4098.                         local watchOffset = focus.p - cframe.p
  4099.                         local error = watchOffset.unit - cframe.lookVector
  4100.                         if error.magnitude >= 1e-3 then
  4101.                                 local head = PlayerControl.GetHead()
  4102.                                 local time1, velocity1
  4103.                                 if head then
  4104.                                         time1 = time()
  4105.                                         velocity1 = head.Velocity
  4106.                                 end
  4107.                                 if camera.Changed:wait() == "CoordinateFrame" then
  4108.                                         local position = cframe.p
  4109.                                         if head then
  4110.                                                 local time2 = time()
  4111.                                                 local velocity2 = head.Velocity
  4112.                                                 position = position + 0.5 * (velocity1 + velocity2) * (time2 - time1)
  4113.                                         end
  4114.                                         camera.CoordinateFrame = CFrame.new(position, camera.Focus.p)
  4115.                                 end
  4116.                         end
  4117.                 end
  4118.         end)
  4119.         self.keyDownConnection = mouse.KeyDown:connect(function(key) self:KeyDown(key) end)
  4120.         self.mouseButton1DownConnection = mouse.Button1Down:connect(function() self:MouseButton1Down() end)
  4121.         self.mouseButton1UpConnection = mouse.Button1Up:connect(function() self:MouseButton1Up() end)
  4122.         self.mouseButton2DownConnection = mouse.Button2Down:connect(function() self:MouseButton2Down() end)
  4123.         self.mouseButton2UpConnection = mouse.Button2Up:connect(function() self:MouseButton2Up() end)
  4124.         self.mouseMoveConnection = mouse.Move:connect(function() self:MouseMove() end)
  4125.         self.steppedConnection = RunService.RenderStepped:connect(function() self:UpdateObjects() self:UpdateView() end)
  4126.         self.mousePreviousPosition = Vector2.new(self:GetMousePosition())
  4127. end
  4128. function GuiServiceClass:IsA(className)
  4129.         return className == "GuiService" or GuiBase.IsA(self, className)
  4130. end
  4131. function GuiServiceClass:KeyDown(key)
  4132.         local mnemonicButton = self.mnemonics[string.upper(key)]
  4133.         if mnemonicButton then
  4134.                 mnemonicButton.Activated:fire()
  4135.         end
  4136. end
  4137. function GuiServiceClass:MouseButton1Down()
  4138.         local mouse = self.mouse
  4139.         local mouseX, mouseY = self:GetMousePosition()
  4140.         local stack = {self}
  4141.         local dragObjects = {}
  4142.         self.dragObjects = dragObjects
  4143.         while #stack > 0 do
  4144.                 local object = stack[#stack]
  4145.                 stack[#stack] = nil
  4146.                 if object.visible then
  4147.                         for child in pairs(object.children) do
  4148.                                 stack[#stack + 1] = child
  4149.                         end
  4150.                         if object.active then
  4151.                                 local position = object:GetAbsolutePosition()
  4152.                                 local size = object:GetAbsoluteSize()
  4153.                                 if mouseX >= position.X and mouseY >= position.Y and mouseX < position.X + size.X and mouseY < position.Y + size.Y then
  4154.                                         object.mouseDown = true
  4155.                                         dragObjects[object] = true
  4156.                                         local mouseButton1Down = object.MouseButton1Down
  4157.                                         if mouseButton1Down then
  4158.                                                 mouseButton1Down:fire()
  4159.                                                 if object.autoButtonColor then
  4160.                                                         local color = object.color
  4161.                                                         local transparency = object.backgroundTransparency
  4162.                                                         object.m_base_instance.BackgroundColor3 = Color3.new(math.min(color.r + 0.3, 1), math.min(color.g +
  4163.  
  4164. 0.3, 1), math.min(color.b + 0.3, 1))
  4165.                                                         object.m_base_instance.BackgroundTransparency = transparency
  4166.                                                 end
  4167.                                         end
  4168.                                         object.DragBegin:fire()
  4169.                                 end
  4170.                         end
  4171.                 end
  4172.         end
  4173.         self.mousePreviousPosition = Vector2.new(mouseX, mouseY)
  4174. end
  4175. function GuiServiceClass:MouseButton1Up()
  4176.         local mouse = self.mouse
  4177.         local mouseX, mouseY = self:GetMousePosition()
  4178.         local stack = {self}
  4179.         while #stack > 0 do
  4180.                 local object = stack[#stack]
  4181.                 stack[#stack] = nil
  4182.                 if object.visible then
  4183.                         for child in pairs(object.children) do
  4184.                                 stack[#stack + 1] = child
  4185.                         end
  4186.                         if object.active then
  4187.                                 local position = object:GetAbsolutePosition()
  4188.                                 local size = object:GetAbsoluteSize()
  4189.                                 if mouseX >= position.X and mouseY >= position.Y and mouseX < position.X + size.X and mouseY < position.Y + size.Y then
  4190.                                         object.MouseButton1Up:fire()
  4191.                                 end
  4192.                         end
  4193.                 end
  4194.         end
  4195.         local dragObjects = self.dragObjects
  4196.         self.dragObjects = nil
  4197.         if dragObjects then
  4198.                 for dragObject in pairs(dragObjects) do
  4199.                         dragObject.mouseDown = false
  4200.                         local position = dragObject:GetAbsolutePosition()
  4201.                         local size = dragObject:GetAbsoluteSize()
  4202.                         if mouseX >= position.X and mouseY >= position.Y and mouseX < position.X + size.X and mouseY < position.Y + size.Y then
  4203.                                 dragObject.MouseButton1Click:fire()
  4204.                                 local activated = dragObject.Activated
  4205.                                 if activated then
  4206.                                         activated:fire()
  4207.                                 end
  4208.                         end
  4209.                         dragObject.DragStopped:fire()
  4210.                         if dragObject.autoButtonColor then
  4211.                                 if dragObject.mouseOver then
  4212.                                         local color = dragObject.color
  4213.                                         local transparency = dragObject.backgroundTransparency
  4214.                                         dragObject.m_base_instance.BackgroundColor3 = Color3.new(math.max(color.r - 0.3, 0), math.max(color.g - 0.3, 0),
  4215.  
  4216. math.max(color.b - 0.3, 0))
  4217.                                         dragObject.m_base_instance.BackgroundTransparency = math.max(0, transparency - 0.2)
  4218.                                 else
  4219.                                         dragObject.m_base_instance.BackgroundColor3 = dragObject.color
  4220.                                         dragObject.m_base_instance.BackgroundTransparency = dragObject.backgroundTransparency
  4221.                                 end
  4222.                         end
  4223.                         self.dragObject = nil
  4224.                 end
  4225.         end
  4226. end
  4227. function GuiServiceClass:MouseButton2Down()
  4228.         local mouse = self.mouse
  4229.         local mouseX, mouseY = self:GetMousePosition()
  4230.         local stack = {self}
  4231.         while #stack > 0 do
  4232.                 local object = stack[#stack]
  4233.                 stack[#stack] = nil
  4234.                 if object.visible then
  4235.                         for child in pairs(object.children) do
  4236.                                 stack[#stack + 1] = child
  4237.                         end
  4238.                         if object.active then
  4239.                                 local position = object:GetAbsolutePosition()
  4240.                                 local size = object:GetAbsoluteSize()
  4241.                                 if mouseX >= position.X and mouseY >= position.Y and mouseX < position.X + size.X and mouseY < position.Y + size.Y then
  4242.                                         local mouseButton2Down = object.MouseButton2Down
  4243.                                         if mouseButton2Down then
  4244.                                                 mouseButton2Down:fire()
  4245.                                         end
  4246.                                 end
  4247.                         end
  4248.                 end
  4249.         end
  4250.         self.mousePreviousPosition = Vector2.new(mouseX, mouseY)
  4251. end
  4252. function GuiServiceClass:MouseButton2Up()
  4253.         local mouse = self.mouse
  4254.         local mouseX, mouseY = self:GetMousePosition()
  4255.         local stack = {self}
  4256.         while #stack > 0 do
  4257.                 local object = stack[#stack]
  4258.                 stack[#stack] = nil
  4259.                 if object.visible then
  4260.                         for child in pairs(object.children) do
  4261.                                 stack[#stack + 1] = child
  4262.                         end
  4263.                         if object.active then
  4264.                                 local position = object:GetAbsolutePosition()
  4265.                                 local size = object:GetAbsoluteSize()
  4266.                                 if mouseX >= position.X and mouseY >= position.Y and mouseX < position.X + size.X and mouseY < position.Y + size.Y then
  4267.                                         local mouseButton2Up = object.MouseButton2Up
  4268.                                         if mouseButton2Up then
  4269.                                                 mouseButton2Up:fire()
  4270.                                         end
  4271.                                 end
  4272.                         end
  4273.                 end
  4274.         end
  4275. end
  4276. function GuiServiceClass:MouseMove()
  4277.         self:UpdateObjects()
  4278.         local dragObjects = self.dragObjects
  4279.         if dragObjects then
  4280.                 for dragObject in pairs(dragObjects) do
  4281.                         local mouse = self.mouse
  4282.                         local mousePosition = Vector2.new(self:GetMousePosition())
  4283.                         dragObject.DragMove:fire(mousePosition - self.mousePreviousPosition)
  4284.                         self.mousePreviousPosition = mousePosition
  4285.                 end
  4286.         end
  4287. end
  4288. function GuiServiceClass:SetMnemonic(mnemonic, button)
  4289.         self.mnemonics[mnemonic] = button
  4290. end
  4291. function GuiServiceClass:UpdateObjects()
  4292.         local mouse = self.mouse
  4293.         local mouseX, mouseY = self:GetMousePosition()
  4294.         local stack = {self}
  4295.         while #stack > 0 do
  4296.                 local object = stack[#stack]
  4297.                 stack[#stack] = nil
  4298.                 if object.visible then
  4299.                         for child in pairs(object.children) do
  4300.                                 stack[#stack + 1] = child
  4301.                         end
  4302.                         if object.active then
  4303.                                 local position = object:GetAbsolutePosition()
  4304.                                 local size = object:GetAbsoluteSize()
  4305.                                 if mouseX >= position.X and mouseY >= position.Y and mouseX < position.X + size.X and mouseY < position.Y + size.Y then
  4306.                                         if not object.mouseOver then
  4307.                                                 object.mouseOver = true
  4308.                                                 object.MouseEnter:fire()
  4309.                                                 if object.autoButtonColor then
  4310.                                                         local color = object.color
  4311.                                                         local transparency = object.backgroundTransparency
  4312.                                                         if object.mouseDown then
  4313.                                                                 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))
  4314.                                                                 object.m_base_instance.BackgroundTransparency = transparency
  4315.                                                         else
  4316.                                                                 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))
  4317.                                                                 object.m_base_instance.BackgroundTransparency = math.max(0, transparency - 0.2)
  4318.                                                         end
  4319.                                                 end
  4320.                                         end
  4321.                                 else
  4322.                                         if object.mouseOver then
  4323.                                                 object.mouseOver = false
  4324.                                                 object.MouseLeave:fire()
  4325.                                                 if object.autoButtonColor then
  4326.                                                         object.m_base_instance.BackgroundColor3 = object.color
  4327.                                                         object.m_base_instance.BackgroundTransparency = object.backgroundTransparency
  4328.                                                 end
  4329.                                         end
  4330.                                 end
  4331.                         end
  4332.                 end
  4333.         end
  4334. end
  4335. function GuiServiceClass:UpdateView()
  4336.         local billboardGui = self.billboardGui
  4337.         local guiFrame = self.m_base_instance
  4338.         local camera = self.camera
  4339.         local mouse = self.mouse
  4340.         local cameraCFrame = CFrame.new(camera.CoordinateFrame.p, camera.Focus.p) -- camera.CoordinateFrame
  4341.         local viewSizeX, viewSizeY = mouse.ViewSizeX, mouse.ViewSizeY
  4342.         local previousViewSize = self.viewSize
  4343.         if not previousViewSize or ((viewSizeX ~= 0 or viewSizeY ~= 0) and (viewSizeX ~= previousViewSize.X or viewSizeY ~= previousViewSize.Y)) then
  4344.                 self.viewSize = {X = viewSizeX, Y = viewSizeY}
  4345.                 local viewSizeUDim2 = UDim2.new(0, viewSizeX, 0, viewSizeY)
  4346.                 billboardGui.Size = viewSizeUDim2
  4347.                 guiFrame.Size = viewSizeUDim2
  4348.                 -- FIXME:
  4349.                 -- After the 15th of July 2014, there came an offset at the Y thingy out of nowhere so I accomodated for that.
  4350.                 billboardGui.SizeOffset = Vector2.new(0.5 / viewSizeX, (0.5 + 10) / viewSizeY)
  4351.         end
  4352.         --billboardGui.SizeOffset = Vector2.new()
  4353.         billboardGui.StudsOffset = (cameraCFrame - cameraCFrame.p):inverse() * cameraCFrame.p - Vector3.new(0, 0, 1)
  4354. end
  4355. GuiService = GuiServiceClass:new {
  4356.         Camera = Camera,
  4357.         Mouse = Mouse
  4358. }
  4359. GuiFrame = setmetatable({}, GuiObject)
  4360. GuiFrame.__index = GuiFrame
  4361. GuiFrame.__default = {__index = {
  4362.         Active = false,
  4363.         BackgroundTransparency = 0.75,
  4364.         BorderSize = 4,
  4365.         BorderTransparency = 0.75,
  4366.         Color = AdvancedGUI.GUI_BASE_COLOR,
  4367.         Position = UDim2.new(0, 0, 0, 0),
  4368.         Size = UDim2.new(0, 52, 0, 52),
  4369.         Visible = true
  4370. }}
  4371. function GuiFrame:Destroy()
  4372.         GuiObject.Destroy(self)
  4373. end
  4374. function GuiFrame:GetContentInstance()
  4375.         return self.m_content_frame
  4376. end
  4377. function GuiFrame:Init(data)
  4378.         GuiObject.Init(self)
  4379.         setmetatable(data, GuiFrame.__default)
  4380.         local leftBorderFrameLeft = RBXInstance.new "Frame" {
  4381.                 BackgroundColor3 = Color3.new(0, 0, 0),
  4382.                 BorderSizePixel = 0,
  4383.                 Size = UDim2.new(0, 1, 1, -1)
  4384.         }
  4385.         local leftBorderFrameCenter = RBXInstance.new "Frame" {
  4386.                 BackgroundColor3 = Color3.new(1, 1, 1),
  4387.                 BorderSizePixel = 0,
  4388.                 Position = UDim2.new(0, 1, 0, 1)
  4389.         }
  4390.         local leftBorderFrameRight = RBXInstance.new "Frame" {
  4391.                 BackgroundColor3 = Color3.new(0, 0, 0),
  4392.                 BorderSizePixel = 0
  4393.         }
  4394.         local rightBorderFrameRight = RBXInstance.new "Frame" {
  4395.                 BackgroundColor3 = Color3.new(0, 0, 0),
  4396.                 BorderSizePixel = 0,
  4397.                 Position = UDim2.new(1, -1, 0, 1),
  4398.                 Size = UDim2.new(0, 1, 1, -1)
  4399.         }
  4400.         local rightBorderFrameCenter = RBXInstance.new "Frame" {
  4401.                 BackgroundColor3 = Color3.new(1, 1, 1),
  4402.                 BorderSizePixel = 0
  4403.         }
  4404.         local rightBorderFrameLeft = RBXInstance.new "Frame" {
  4405.                 BackgroundColor3 = Color3.new(0, 0, 0),
  4406.                 BorderSizePixel = 0
  4407.         }
  4408.         local bottomBorderFrameBottom = RBXInstance.new "Frame" {
  4409.                 BackgroundColor3 = Color3.new(0, 0, 0),
  4410.                 BorderSizePixel = 0,
  4411.                 Position = UDim2.new(0, 0, 1, -1),
  4412.                 Size = UDim2.new(1, -1, 0, 1)
  4413.         }
  4414.         local bottomBorderFrameCenter = RBXInstance.new "Frame" {
  4415.                 BackgroundColor3 = Color3.new(1, 1, 1),
  4416.                 BorderSizePixel = 0
  4417.         }
  4418.         local bottomBorderFrameTop = RBXInstance.new "Frame" {
  4419.                 BackgroundColor3 = Color3.new(0, 0, 0),
  4420.                 BorderSizePixel = 0
  4421.         }
  4422.         local topBorderFrameTop = RBXInstance.new "Frame" {
  4423.                 BackgroundColor3 = Color3.new(0, 0, 0),
  4424.                 BorderSizePixel = 0,
  4425.                 Position = UDim2.new(0, 1, 0, 0),
  4426.                 Size = UDim2.new(1, -1, 0, 1)
  4427.         }
  4428.         local topBorderFrameCenter = RBXInstance.new "Frame" {
  4429.                 BackgroundColor3 = Color3.new(1, 1, 1),
  4430.                 BorderSizePixel = 0
  4431.         }
  4432.         local topBorderFrameBottom = RBXInstance.new "Frame" {
  4433.                 BackgroundColor3 = Color3.new(0, 0, 0),
  4434.                 BorderSizePixel = 0
  4435.         }
  4436.         local border_frame = RBXInstance.new "Frame" {
  4437.                 BackgroundTransparency = 1,
  4438.                 Size = UDim2.new(1, 0, 1, 0),
  4439.                 leftBorderFrameLeft,
  4440.                 leftBorderFrameCenter,
  4441.                 leftBorderFrameRight,
  4442.                 rightBorderFrameLeft,
  4443.                 rightBorderFrameCenter,
  4444.                 rightBorderFrameRight,
  4445.                 bottomBorderFrameBottom,
  4446.                 bottomBorderFrameCenter,
  4447.                 bottomBorderFrameTop,
  4448.                 topBorderFrameBottom,
  4449.                 topBorderFrameCenter,
  4450.                 topBorderFrameTop
  4451.         }
  4452.         local contentFrame = RBXInstance.new "Frame" {
  4453.                 BackgroundTransparency = 1,
  4454.                 BorderSizePixel = 0,
  4455.                 ClipsDescendants = true,
  4456.                 Size = UDim2.new(1, 0, 1, 0)
  4457.         }
  4458.         local base_frame = RBXInstance.new "Frame" {
  4459.                 BorderSizePixel = 0,
  4460.                 border_frame,
  4461.                 contentFrame
  4462.         }
  4463.         self.m_base_instance = base_frame
  4464.         self.m_content_frame = contentFrame
  4465.         self.m_border_frame = border_frame
  4466.         self.leftBorderFrameLeft = leftBorderFrameLeft
  4467.         self.leftBorderFrameCenter = leftBorderFrameCenter
  4468.         self.leftBorderFrameRight = leftBorderFrameRight
  4469.         self.rightBorderFrameLeft = rightBorderFrameLeft
  4470.         self.rightBorderFrameCenter = rightBorderFrameCenter
  4471.         self.rightBorderFrameRight = rightBorderFrameRight
  4472.         self.bottomBorderFrameBottom = bottomBorderFrameBottom
  4473.         self.bottomBorderFrameCenter = bottomBorderFrameCenter
  4474.         self.bottomBorderFrameTop = bottomBorderFrameTop
  4475.         self.topBorderFrameBottom = topBorderFrameBottom
  4476.         self.topBorderFrameCenter = topBorderFrameCenter
  4477.         self.topBorderFrameTop = topBorderFrameTop
  4478.         self:SetActive(data.Active)
  4479.         self:SetBackgroundTransparency(data.BackgroundTransparency)
  4480.         self:SetBorderSize(data.BorderSize)
  4481.         self:SetBorderTransparency(data.BorderTransparency)
  4482.         self:SetColor(data.Color)
  4483.         self:SetPosition(data.Position)
  4484.         self:SetSize(data.Size)
  4485.         self:SetVisible(data.Visible)
  4486.         self:SetParent(data.Parent)
  4487. end
  4488. function GuiFrame:IsA(className)
  4489.         return className == "GuiFrame" or GuiObject.IsA(self, className)
  4490. end
  4491. function GuiFrame:SetBorderSize(border_size)
  4492.         border_size = math.max(math.floor(border_size + 0.5), 0)
  4493.         if border_size ~= self.m_border_size then
  4494.                 self.m_border_size = border_size
  4495.                 local border_frame = self.m_border_frame
  4496.                 local contentFrame = self.m_content_frame
  4497.                 local leftBorderFrameCenter = self.leftBorderFrameCenter
  4498.                 local leftBorderFrameRight = self.leftBorderFrameRight
  4499.                 local rightBorderFrameCenter = self.rightBorderFrameCenter
  4500.                 local rightBorderFrameLeft = self.rightBorderFrameLeft
  4501.                 local bottomBorderFrameCenter = self.bottomBorderFrameCenter
  4502.                 local bottomBorderFrameTop = self.bottomBorderFrameTop
  4503.                 local topBorderFrameCenter = self.topBorderFrameCenter
  4504.                 local topBorderFrameBottom = self.topBorderFrameBottom
  4505.                 contentFrame.Position = UDim2.new(0, border_size, 0, border_size)
  4506.                 contentFrame.Size = UDim2.new(1, -2 * border_size, 1, -2 * border_size)
  4507.                 local inner_visible = border_size > 0
  4508.                 if self.leftBorderFrameLeft.Visible ~= inner_visible then
  4509.                         self.rightBorderFrameRight.Visible = inner_visible
  4510.                         self.bottomBorderFrameBottom.Visible = inner_visible
  4511.                         self.topBorderFrameTop.Visible = inner_visible
  4512.                 end
  4513.                 local outer_visible = border_size > 1
  4514.                 if leftBorderFrameCenter.Visible ~= outer_visible then
  4515.                         leftBorderFrameCenter.Visible = outer_visible
  4516.                         leftBorderFrameRight.Visible = outer_visible
  4517.                         rightBorderFrameCenter.Visible = outer_visible
  4518.                         rightBorderFrameLeft.Visible = outer_visible
  4519.                         bottomBorderFrameCenter.Visible = outer_visible
  4520.                         bottomBorderFrameTop.Visible = outer_visible
  4521.                         topBorderFrameCenter.Visible = outer_visible
  4522.                         topBorderFrameBottom.Visible = outer_visible
  4523.                 end
  4524.                 if outer_visible then
  4525.                         leftBorderFrameCenter.Size = UDim2.new(0, border_size - 2, 1, -border_size)
  4526.                         leftBorderFrameRight.Position = UDim2.new(0, border_size - 1, 0, border_size - 1)
  4527.                         leftBorderFrameRight.Size = UDim2.new(0, 1, 1, 1 - 2 * border_size)
  4528.                         rightBorderFrameCenter.Position = UDim2.new(1, 1 - border_size, 0, border_size - 1)
  4529.                         rightBorderFrameCenter.Size = UDim2.new(0, border_size - 2, 1, -border_size)
  4530.                         rightBorderFrameLeft.Position = UDim2.new(1, -border_size, 0, border_size)
  4531.                         rightBorderFrameLeft.Size = UDim2.new(0, 1, 1, 1 - 2 * border_size)
  4532.                         bottomBorderFrameCenter.Position = UDim2.new(0, 1, 1, 1 - border_size)
  4533.                         bottomBorderFrameCenter.Size = UDim2.new(1, -border_size, 0, border_size - 2)
  4534.                         bottomBorderFrameTop.Position = UDim2.new(0, border_size - 1, 1, -border_size)
  4535.                         bottomBorderFrameTop.Size = UDim2.new(1, 1 - 2 * border_size, 0, 1)
  4536.                         topBorderFrameCenter.Position = UDim2.new(0, border_size - 1, 0, 1)
  4537.                         topBorderFrameCenter.Size = UDim2.new(1, -border_size, 0, border_size - 2)
  4538.                         topBorderFrameBottom.Position = UDim2.new(0, border_size, 0, border_size - 1)
  4539.                         topBorderFrameBottom.Size = UDim2.new(1, 1 - 2 * border_size, 0, 1)
  4540.                 end
  4541.         end
  4542. end
  4543. function GuiFrame:SetBorderTransparency(borderTransparency)
  4544.         self.borderTransparency = borderTransparency
  4545.         self.leftBorderFrameLeft.BackgroundTransparency = borderTransparency
  4546.         self.leftBorderFrameCenter.BackgroundTransparency = borderTransparency
  4547.         self.leftBorderFrameRight.BackgroundTransparency = borderTransparency
  4548.         self.rightBorderFrameLeft.BackgroundTransparency = borderTransparency
  4549.         self.rightBorderFrameCenter.BackgroundTransparency = borderTransparency
  4550.         self.rightBorderFrameRight.BackgroundTransparency = borderTransparency
  4551.         self.bottomBorderFrameBottom.BackgroundTransparency = borderTransparency
  4552.         self.bottomBorderFrameCenter.BackgroundTransparency = borderTransparency
  4553.         self.bottomBorderFrameTop.BackgroundTransparency = borderTransparency
  4554.         self.topBorderFrameBottom.BackgroundTransparency = borderTransparency
  4555.         self.topBorderFrameCenter.BackgroundTransparency = borderTransparency
  4556.         self.topBorderFrameTop.BackgroundTransparency = borderTransparency
  4557. end
  4558. GuiButton = setmetatable({}, GuiFrame)
  4559. GuiButton.__index = GuiButton
  4560. GuiButton.__default = {__index = {
  4561.         AutoButtonColor = true
  4562. }}
  4563. function GuiButton:Destroy()
  4564.         self.Activated:disconnect()
  4565.         GuiFrame.Destroy(self)
  4566. end
  4567. function GuiButton:Init(data)
  4568.         if data.Active == nil then
  4569.                 data.Active = true
  4570.         end
  4571.         GuiFrame.Init(self, data)
  4572.         setmetatable(data, GuiButton.__default)
  4573.         self.Activated = RbxUtility.CreateSignal()
  4574.         self:SetAutoButtonColor(data.AutoButtonColor)
  4575. end
  4576. function GuiButton:IsA(className)
  4577.         return className == "GuiButton" or GuiFrame.IsA(self, className)
  4578. end
  4579. function GuiButton:SetAutoButtonColor(autoButtonColor)
  4580.         if autoButtonColor ~= self.autoButtonColor then
  4581.                 self.autoButtonColor = autoButtonColor
  4582.                 if autoButtonColor then
  4583.                         if self.mouseOver then
  4584.                                 local color = self.color
  4585.                                 local transparency = self.backgroundTransparency
  4586.                                 if self.mouseDown then
  4587.                                         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))
  4588.                                         self.m_base_instance.BackgroundTransparency = transparency
  4589.                                 else
  4590.                                         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))
  4591.                                         self.m_base_instance.BackgroundTransparency = math.max(0, transparency - 0.5)
  4592.                                 end
  4593.                         end
  4594.                 else
  4595.                         self.m_base_instance.BackgroundColor3 = self.color
  4596.                 end
  4597.         end    
  4598. end
  4599. GuiTextLabel = setmetatable({}, GuiFrame)
  4600. GuiTextLabel.__index = GuiTextLabel
  4601. GuiTextLabel.__default = {__index = {
  4602.         Font = "ArialBold",
  4603.         FontSize = "Size12",
  4604.         Text = "",
  4605.         TextColor = Color3.new(1, 1, 1),
  4606.         TextStrokeColor = Color3.new(0, 0, 0),
  4607.         TextStrokeTransparency = 0.6,
  4608.         TextWrapped = true
  4609. }}
  4610. function GuiTextLabel:Destroy()
  4611.         GuiFrame.Destroy(self)
  4612. end
  4613. function GuiTextLabel:Init(data)
  4614.         GuiFrame.Init(self, data)
  4615.         setmetatable(data, GuiTextLabel.__default)
  4616.         local base_instance = self.m_base_instance
  4617.         local textLabel = RBXInstance.new "TextLabel" {
  4618.                 BackgroundTransparency = 1,
  4619.                 Font = data.Font,
  4620.                 FontSize = data.FontSize,
  4621.                 TextColor3 = data.TextColor3,
  4622.                 TextStrokeColor3 = data.TextStrokeColor3,
  4623.                 TextStrokeTransparency = data.TextStrokeTransparency,
  4624.                 TextWrapped = data.TextWrapped
  4625.         }
  4626.         textLabel.Parent = self:GetContentInstance()
  4627.         self.textLabel = textLabel
  4628.         self:SetText(data.Text)
  4629. end
  4630. function GuiTextLabel:IsA(className)
  4631.         return className == "GuiTextLabel" or GuiFrame.IsA(self, className)
  4632. end
  4633. function GuiTextLabel:SetText(text)
  4634.         if text ~= self.text then
  4635.                 self.text = text
  4636.                 local text_index = 1
  4637.                 local content_instance = self:GetContentInstance()
  4638.                 local content_instance_size = content_instance.AbsoluteSize
  4639.                 local frame = Instance.new("Frame")
  4640.                 frame.BackgroundTransparency = 1
  4641.                 local label = Instance.new("TextLabel")
  4642.                 label.BackgroundTransparency = 1
  4643.                 label.Font = font
  4644.                 label.FontSize = fontSize
  4645.                 label.Size = UDim2.new(0, content_instance_size.X, 0, 1000)
  4646.                 label.Text = ""
  4647.                 label.TextColor3 = textColor3
  4648.                 label.TextTransparency = 1
  4649.                 label.TextWrapped = true
  4650.                 label.TextXAlignment = textXAlignment
  4651.                 label.TextYAlignment = textYAlignment
  4652.                 label.Parent = self.guiFrame
  4653.                 local row_length = 0
  4654.                 local step_size = 256
  4655.                 for step = 1, 8 do
  4656.                         step_size = 0.5 * step_size
  4657.                         label.Text = string.sub(text, text_index, text_index + row_length - 1)
  4658.                 end
  4659.         end
  4660. end
  4661. GuiImageButton = setmetatable({}, GuiButton)
  4662. GuiImageButton.__index = GuiImageButton
  4663. GuiImageButton.__default = {__index = {
  4664.         Image = ""
  4665. }}
  4666. function GuiImageButton:Destroy()
  4667.         GuiButton.Destroy(self)
  4668. end
  4669. function GuiImageButton:Init(data)
  4670.         GuiButton.Init(self, data)
  4671.         setmetatable(data, GuiImageButton.__default)
  4672.         local content_frame = self.m_content_frame
  4673.         local image_label = RBXInstance.new "ImageLabel" {
  4674.                 BackgroundTransparency = 1,
  4675.                 Size = UDim2.new(1, 0, 1, 0)
  4676.         }
  4677.         image_label.Parent = content_frame
  4678.         self.m_image_label = image_label
  4679.         self:SetImage(data.Image)
  4680. end
  4681. function GuiImageButton:IsA(className)
  4682.         return className == "GuiImageButton" or GuiButton.IsA(self, className)
  4683. end
  4684. function GuiImageButton:SetImage(image)
  4685.         if image ~= self.m_image then
  4686.                 self.m_image = image
  4687.                 self.m_image_label.Image = image
  4688.         end    
  4689. end
  4690. GuiTextButton = setmetatable({}, GuiButton)
  4691. GuiTextButton.__index = GuiTextButton
  4692. GuiTextButton.__default = {__index = {
  4693.         Font = Enum.Font.ArialBold,
  4694.         FontSize = Enum.FontSize.Size11,
  4695.         Text = "Button",
  4696.         TextXAlignment = Enum.TextXAlignment.Center
  4697. }}
  4698. function GuiTextButton:Destroy()
  4699.         GuiButton.Destroy(self)
  4700. end
  4701. function GuiTextButton:GetTextBounds()
  4702.         return self.textLabel.TextBounds
  4703. end
  4704. function GuiTextButton:Init(data)
  4705.         GuiButton.Init(self, data)
  4706.         setmetatable(data, GuiTextButton.__default)
  4707.         local contentFrame = self.m_content_frame
  4708.         local mnemonicLabel = RBXInstance.new "TextLabel" {
  4709.                 BackgroundTransparency = 1,
  4710.                 Font = "ArialBold",
  4711.                 FontSize = "Size36",
  4712.                 Size = UDim2.new(1, 0, 0.7, 0),
  4713.                 TextColor3 = Color3.new(1, 1, 1),
  4714.                 TextStrokeColor3 = Color3.new(0, 0, 0),
  4715.                 TextStrokeTransparency = 0.6,
  4716.                 TextWrapped = true
  4717.         }
  4718.         local textLabel = RBXInstance.new "TextLabel" {
  4719.                 BackgroundTransparency = 1,
  4720.                 TextColor3 = Color3.new(1, 1, 1),
  4721.                 TextStrokeColor3 = Color3.new(0, 0, 0),
  4722.                 TextStrokeTransparency = 0.6,
  4723.                 TextWrapped = true
  4724.         }
  4725.         mnemonicLabel.Parent = contentFrame
  4726.         textLabel.Parent = contentFrame
  4727.         self.mnemonicLabel = mnemonicLabel
  4728.         self.textLabel = textLabel
  4729.         self:SetFont(data.Font)
  4730.         self:SetFontSize(data.FontSize)
  4731.         self:SetMnemonic(data.Mnemonic, true)
  4732.         self:SetText(data.Text)
  4733.         self:SetTextXAlignment(data.TextXAlignment)
  4734. end
  4735. function GuiTextButton:IsA(className)
  4736.         return className == "GuiTextButton" or GuiButton.IsA(self, className)
  4737. end
  4738. function GuiTextButton:SetFont(font)
  4739.         if font ~= self.font then
  4740.                 self.font = font
  4741.                 self.textLabel.Font = font
  4742.         end
  4743. end
  4744. function GuiTextButton:SetFontSize(fontSize)
  4745.         if fontSize ~= self.fontSize then
  4746.                 self.fontSize = fontSize
  4747.                 self.textLabel.FontSize = fontSize
  4748.         end
  4749. end
  4750. function GuiTextButton:SetMnemonic(mnemonic, forceUpdate)
  4751.         if mnemonic ~= self.mnemonic or forceUpdate then
  4752.                 if self.mnemonic then
  4753.                         GuiService:SetMnemonic(self.mnemonic, nil)
  4754.                 end
  4755.                 if mnemonic then
  4756.                         GuiService:SetMnemonic(mnemonic, self)
  4757.                 end
  4758.                 self.mnemonic = mnemonic
  4759.                 local mnemonicLabel = self.mnemonicLabel
  4760.                 local textLabel = self.textLabel
  4761.                 if mnemonic then
  4762.                         mnemonicLabel.Text = mnemonic
  4763.                         textLabel.Size = UDim2.new(1, 0, 0.9, 0)
  4764.                         textLabel.TextYAlignment = "Bottom"
  4765.                 else
  4766.                         mnemonicLabel.Text = ""
  4767.                         textLabel.Size = UDim2.new(1, 0, 1, 0)
  4768.                         textLabel.TextYAlignment = "Center"
  4769.                 end
  4770.         end    
  4771. end
  4772. function GuiTextButton:SetText(text)
  4773.         if text ~= self.text then
  4774.                 self.text = text
  4775.                 self.textLabel.Text = text
  4776.         end    
  4777. end
  4778. function GuiTextButton:SetTextXAlignment(textXAlignment)
  4779.         if textXAlignment ~= self.textXAlignment then
  4780.                 self.textXAlignment = textXAlignment
  4781.                 self.textLabel.TextXAlignment = textXAlignment
  4782.         end    
  4783. end
  4784. GuiWindow = setmetatable({}, GuiObject)
  4785. GuiWindow.__index = GuiWindow
  4786. GuiWindow.__default = {__index = {
  4787.         Active = true,
  4788.         BackgroundTransparency = 0.5,
  4789.         BorderSize = 4,
  4790.         BorderTransparency = 0.5,
  4791.         Position = UDim2.new(0, 0, 0, 0),
  4792.         Size = UDim2.new(0, 360, 0, 240),
  4793.         Title = "Window",
  4794.         TitleBarBackgroundTransparency = 0.5,
  4795.         TitleBarBorderTransparency = 1,
  4796.         Visible = true
  4797. }}
  4798. function GuiWindow:Init(data)
  4799.         GuiObject.Init(self)
  4800.         setmetatable(data, GuiFrame.__default)
  4801.         local title_bar = GuiTextLabel:new {
  4802.                 BackgroundTransparency = data.TitleBarBackgroundTransparency,
  4803.                 BorderTransparency = data.TitleBarBackgroundTransparency,
  4804.                 Text = data.Title
  4805.         }
  4806.         local content_frame = GuiFrame:new {
  4807.                 Active = data.Active,
  4808.                 BackgroundTransparency = data.BackgroundTransparency,
  4809.                 BorderSize = data.BorderSize,
  4810.                 BorderTransparency = data.BorderTransparency
  4811.         }
  4812.         local base_frame = RBXInstance.new "Frame" {
  4813.                 BackgroundTransparency = 1,
  4814.                 BorderSizePixel = 0,
  4815.                 Position = data.Position,
  4816.                 Size = data.Size,
  4817.                 Visible = data.Visible
  4818.         }
  4819.         self.m_base_frame = base_frame
  4820.         self.m_content_frame = content_frame
  4821.         self.m_title_bar = title_bar
  4822. end
  4823. function GuiWindow:IsA(className)
  4824.         return className == "GuiWindow" or GuiObject.IsA(self, className)
  4825. end
  4826. GuiScrollFrame = setmetatable({}, GuiFrame)
  4827. GuiScrollFrame.__index = GuiScrollFrame
  4828. GuiScrollFrame.__default = {__index = {
  4829.         ContentHeight = 0,
  4830.         ScrollBarColor = Color3.new(1, 1, 1)
  4831. }}
  4832. function GuiScrollFrame:Destroy()
  4833.         self.m_scroll_bar:Destroy()
  4834.         GuiFrame.Destroy(self)
  4835. end
  4836. function GuiScrollFrame:GetContentInstance()
  4837.         return self.m_scroll_frame or GuiFrame.GetContentInstance(self)
  4838. end
  4839. function GuiScrollFrame:Init(data)
  4840.         GuiFrame.Init(self, data)
  4841.         setmetatable(data, GuiScrollFrame.__default)
  4842.         local scroll_pane = RBXInstance.new "Frame" {
  4843.                 BackgroundColor3 = Color3.new(1, 1, 1),
  4844.                 BackgroundTransparency = 0.8,
  4845.                 BorderSizePixel = 0,
  4846.                 Position = UDim2.new(1, -20, 0, 0),
  4847.                 Size = UDim2.new(0, 20, 1, 0),
  4848.                 Parent = self.m_content_frame
  4849.         }
  4850.         local scroll_bar = GuiFrame:new {
  4851.                 Active = true,
  4852.                 BackgroundTransparency = 0.6,
  4853.                 BorderTransparency = 0.6,
  4854.                 Color = data.ScrollBarColor,
  4855.                 Parent = self
  4856.         }
  4857.         local scroll_frame = RBXInstance.new "Frame" {
  4858.                 BackgroundTransparency = 1,
  4859.                 Parent = self.m_content_frame
  4860.         }
  4861.         self.m_scroll_bar = scroll_bar
  4862.         self.m_scroll_frame = scroll_frame
  4863.         self.m_scroll_pane = scroll_pane
  4864.         self.m_scroll_position = 0
  4865.         self.m_updating_content_height = false
  4866.         self:SetContentHeight(data.ContentHeight)
  4867.         self:UpdateScrollPosition()
  4868.         self.m_scroll_bar.DragBegin:connect(function()
  4869.                 self.m_scroll_drag_total = Vector2.new()
  4870.                 self.m_scroll_initial_position = self.m_scroll_position
  4871.         end)
  4872.         self.m_scroll_bar.DragMove:connect(function(offset)
  4873.                 self.m_scroll_drag_total = self.m_scroll_drag_total + offset
  4874.                 local absolute_height = self:GetAbsoluteSize().Y - 2 * self.m_border_size
  4875.                 if absolute_height ~= 0 then
  4876.                         local content_height = math.max(self.m_content_height, absolute_height)
  4877.                         local scroll_space = 1 - absolute_height / content_height
  4878.                         self:Scroll(self.m_scroll_initial_position + self.m_scroll_drag_total.Y * (content_height / absolute_height - 1) / scroll_space)
  4879.                 end
  4880.         end)
  4881. end
  4882. function GuiScrollFrame:IsA(className)
  4883.         return className == "GuiScrollFrame" or GuiFrame.IsA(self, className)
  4884. end
  4885. function GuiScrollFrame:Scroll(position)
  4886.         position = math.min(math.max(position, 0), self.m_content_height - (self:GetAbsoluteSize().Y - 2 * self.m_border_size))
  4887.         if position ~= self.m_scroll_position then
  4888.                 self.m_scroll_position = position
  4889.                 self:UpdateScrollPosition()
  4890.         end
  4891. end
  4892. function GuiScrollFrame:SetContentHeight(height)
  4893.         if height ~= self.m_content_height then
  4894.                 local prev_height = self.m_content_height
  4895.                 self.m_content_height = height
  4896.                 if not self.m_updating_content_height then
  4897.                         self.m_updating_content_height = true
  4898.                         coroutine.resume(coroutine.create(function()
  4899.                                 local success, message = ypcall(self.SetContentHeightImpl1, self, prev_height)
  4900.                                 if not success then
  4901.                                         Logger.printf("Severe", "Error in GuiScrollFrame:SetContentHeight(%s): %s", Utility.ToString(height), message)
  4902.                                 end
  4903.                         end))
  4904.                 end
  4905.         end
  4906. end
  4907. function GuiScrollFrame:SetContentHeightImpl1(prev_height)
  4908.         RunService.RenderStepped:wait()
  4909.         self.m_updating_content_height = false
  4910.         local height = self.m_content_height
  4911.         self.m_scroll_frame.Size = UDim2.new(1, -20, 0, height)
  4912.         if prev_height and prev_height ~= 0 then
  4913.                 local absolute_height = self:GetAbsoluteSize().Y - 2 * self.m_border_size
  4914.                 if self.m_scroll_position == prev_height - absolute_height then
  4915.                         self.m_scroll_position = height - absolute_height
  4916.                 else
  4917.                         self.m_scroll_position = height * self.m_scroll_position / prev_height
  4918.                 end
  4919.         end
  4920.         self:UpdateScrollPosition()
  4921. end
  4922. function GuiScrollFrame:UpdateScrollPosition()
  4923.         local absolute_height = self:GetAbsoluteSize().Y - 2 * self.m_border_size
  4924.         if absolute_height == 0 then
  4925.                 absolute_height = self.m_content_height
  4926.         end
  4927.         local scroll_bar = self.m_scroll_bar
  4928.         local scroll_frame = self.m_scroll_frame
  4929.         local scroll_pane = self.m_scroll_pane
  4930.         local content_height = math.max(self.m_content_height, absolute_height)
  4931.         if absolute_height == content_height then
  4932.                 scroll_frame.Position = UDim2.new(0, 0, 0, 0)
  4933.                 scroll_frame.Size = UDim2.new(1, 0, 1, 0)
  4934.                 scroll_bar:SetVisible(false)
  4935.                 scroll_pane.Visible = false
  4936.         else
  4937.                 local contentScale = content_height / absolute_height
  4938.                 local scroll_space = 1 - absolute_height / content_height
  4939.                 local scroll_position = self.m_scroll_position
  4940.                 scroll_frame.Position = UDim2.new(0, 0, 0, -scroll_position)
  4941.                 scroll_bar:SetPosition(UDim2.new(1, -20, scroll_position / (content_height - absolute_height) * scroll_space, 0))
  4942.                 scroll_bar:SetSize(UDim2.new(0, 20, absolute_height / content_height, 0))
  4943.                 scroll_bar:SetVisible(true)
  4944.                 scroll_pane.Visible = true
  4945.         end
  4946. end
  4947. GuiMenu = setmetatable({}, GuiFrame)
  4948. GuiMenu.__index = GuiMenu
  4949. GuiMenu.__default = {__index = {
  4950.         VerticalSpacing = 18
  4951. }}
  4952. function GuiMenu:AddItem(text, onClick, options)
  4953.         local frameSize = self:GetSize()
  4954.         local frameHeight = frameSize.Y.Offset - self.m_border_size * 2
  4955.         local verticalSpacing = self.verticalSpacing
  4956.         local properties = {
  4957.                 BackgroundTransparency = 0.75,
  4958.                 BorderSize = 0,
  4959.                 BorderTransparency = 1,
  4960.                 Color = (#self.menuItems % 2 == 1) and Color3.new(0.25, 0.25, 0.25) or Color3.new(0, 0, 0),
  4961.                 FontSize = Enum.FontSize.Size12,
  4962.                 Position = UDim2.new(0, 0, 0, frameHeight),
  4963.                 Size = UDim2.new(1, 0, 0, verticalSpacing),
  4964.                 Text = text,
  4965.                 Parent = self
  4966.         }
  4967.         if options then
  4968.                 for key, value in pairs(options) do
  4969.                         properties[key] = value
  4970.                 end
  4971.         end
  4972.         local menuItem = GuiTextButton:new(properties)
  4973.         if onClick then
  4974.                 menuItem.Activated:connect(function()
  4975.                         if not onClick(text, self) then
  4976.                                 self:Destroy()
  4977.                         end
  4978.                 end)
  4979.         end
  4980.         self.menuItems[#self.menuItems + 1] = menuItem
  4981.         self:SetSize(frameSize + UDim2.new(0, 0, 0, verticalSpacing))
  4982. end
  4983. function GuiMenu:ClearItems()
  4984.         local menuItems = self.menuItems
  4985.         for _, item in ipairs(menuItems) do
  4986.                 menuItems[item] = nil
  4987.                 item:Destroy()
  4988.         end
  4989.         local frameSize = self:GetSize()
  4990.         self:SetSize(frameSize + UDim2.new(0, 0, 0, self.m_border_size * 2 - frameSize.Y.Offset))
  4991. end
  4992. function GuiMenu:Destroy()
  4993.         self:ClearItems()
  4994.         GuiFrame.Destroy(self)
  4995. end
  4996. function GuiMenu:Init(data)
  4997.         GuiFrame.Init(self, data)
  4998.         setmetatable(data, GuiMenu.__default)
  4999.         self.menuItems = {}
  5000.         self.verticalSpacing = data.VerticalSpacing
  5001. end
  5002. function GuiMenu:IsA(className)
  5003.         return className == "GuiMenu" or GuiFrame.IsA(self, className)
  5004. end
  5005. GuiTextList = setmetatable({}, GuiScrollFrame)
  5006. GuiTextList.__index = GuiTextList
  5007. GuiTextList.__default = {__index = {
  5008. }}
  5009. function GuiTextList:AddItem(text, options)
  5010.         local properties = {
  5011.                 BackgroundTransparency = 1,
  5012.                 Font = "ArialBold",
  5013.                 FontSize = "Size12",
  5014.                 Position = UDim2.new(0, 4, 0, self.m_content_height),
  5015.                 Size = UDim2.new(1, -8, 0, 12),
  5016.                 Text = tostring(text),
  5017.                 TextColor3 = Color3.new(1, 1, 1),
  5018.                 TextStrokeTransparency = 0.6,
  5019.                 TextWrapped = true,
  5020.                 TextXAlignment = "Left",
  5021.                 Parent = self:GetContentInstance()
  5022.         }
  5023.         if options then
  5024.                 for key, value in pairs(options) do
  5025.                         properties[key] = value
  5026.                 end
  5027.         end
  5028.         local textLabel = RBXInstance.new "TextLabel" (properties)
  5029.         textLabel.Size = UDim2.new(1, 0, 0, textLabel.TextBounds.Y)
  5030.         self.listItems[#self.listItems + 1] = textLabel
  5031.         self:SetContentHeight(self.m_content_height + textLabel.TextBounds.Y)
  5032. end
  5033. function GuiTextList:ClearItems()
  5034.         local listItems = self.listItems
  5035.         for _, item in ipairs(listItems) do
  5036.                 listItems[item] = nil
  5037.                 item:Destroy()
  5038.         end
  5039.         self:SetContentHeight(0)
  5040. end
  5041. function GuiTextList:Destroy()
  5042.         self:ClearItems()
  5043.         GuiScrollFrame.Destroy(self)
  5044. end
  5045. function GuiTextList:Init(data)
  5046.         GuiScrollFrame.Init(self, data)
  5047.         self.listItems = {}
  5048. end
  5049. function GuiTextList:IsA(className)
  5050.         return className == "GuiTextList" or GuiScrollFrame.IsA(self, className)
  5051. end
  5052. GuiNetworkList = setmetatable({}, GuiTextList)
  5053. GuiNetworkList.__index = GuiNetworkList
  5054. function GuiNetworkList:AddItem(systemTime, idleTime, userName, isNil)
  5055.         local frame = GuiFrame:new {
  5056.                 BackgroundTransparency = 1,
  5057.                 BorderSize = 0,
  5058.                 BorderTransparency = 1,
  5059.                 Position = UDim2.new(0, 4, 0, self.m_content_height),
  5060.                 Size = UDim2.new(1, -8, 0, 14),
  5061.         }
  5062.         local systemTimeColor
  5063.         if string.sub(systemTime, 1, 1) == "?" then
  5064.                 systemTimeColor = Color3.new(1, 0.75, 0.75)
  5065.         else
  5066.                 systemTimeColor = Color3.new(0.75, 0.75, 1)
  5067.         end
  5068.         local systemTimeLabel = RBXInstance.new "TextLabel" {
  5069.                 BackgroundTransparency = 1,
  5070.                 Font = "ArialBold",
  5071.                 FontSize = "Size12",
  5072.                 Position = UDim2.new(0, 0, 0, 0),
  5073.                 Size = UDim2.new(0, 50, 1, 0),
  5074.                 Text = systemTime,
  5075.                 TextColor3 = systemTimeColor,
  5076.                 TextStrokeTransparency = 0.6,
  5077.                 TextXAlignment = "Left",
  5078.                 Parent = frame:GetContentInstance()
  5079.         }
  5080.         local idle_time_color
  5081.         if string.sub(idleTime, 1, 1) == "0" then
  5082.                 idle_time_color = Color3.new(1, 1, 1)
  5083.         else
  5084.                 idle_time_color = Color3.new(1, 0.75, 0.75)
  5085.         end
  5086.         local idleTimeLabel = RBXInstance.new "TextLabel" {
  5087.                 BackgroundTransparency = 1,
  5088.                 Font = "ArialBold",
  5089.                 FontSize = "Size12",
  5090.                 Position = UDim2.new(0, 40, 0, 0),
  5091.                 Size = UDim2.new(0, 45, 1, 0),
  5092.                 Text = idleTime,
  5093.                 TextColor3 = idle_time_color,
  5094.                 TextStrokeTransparency = 0.6,
  5095.                 TextXAlignment = "Right",
  5096.                 Parent = frame:GetContentInstance()
  5097.         }
  5098.         local userNameLabel = GuiTextButton:new {
  5099.                 AutoButtonColor = false,
  5100.                 BackgroundTransparency = 1,
  5101.                 BorderSize = 0,
  5102.                 BorderTransparency = 1,
  5103.                 Font = Enum.Font.SourceSansBold,
  5104.                 FontSize = Enum.FontSize.Size14,
  5105.                 Position = UDim2.new(0, 98, 0, 0),
  5106.                 Size = UDim2.new(1, -98, 1, 0),
  5107.                 TextXAlignment = Enum.TextXAlignment.Left,
  5108.                 Text = userName,
  5109.                 Parent = frame
  5110.         }
  5111.         frame:SetParent(self)
  5112.         local userNameWidth = userNameLabel:GetTextBounds().X
  5113.         userNameLabel:SetSize(UDim2.new(0, userNameWidth + 4, 1, 0))
  5114.         if isNil then
  5115.                 local isNilLabel = RBXInstance.new "TextLabel" {
  5116.                         BackgroundTransparency = 1,
  5117.                         Font = "SourceSans",
  5118.                         FontSize = "Size14",
  5119.                         Position = UDim2.new(0, 100 + userNameWidth + 8, 0, 0),
  5120.                         Size = UDim2.new(0, 50, 1, 0),
  5121.                         Text = "(nil)",
  5122.                         TextColor3 = Color3.new(1, 0.4, 0.4),
  5123.                         TextStrokeTransparency = 0.6,
  5124.                         TextXAlignment = "Left",
  5125.                         Parent = frame:GetContentInstance()
  5126.                 }
  5127.         end
  5128.         self.listItems[#self.listItems + 1] = frame
  5129.         self:SetContentHeight(self.m_content_height + 14)
  5130. end
  5131. function GuiNetworkList:IsA(className)
  5132.         return className == "GuiNetworkList" or GuiTextList.IsA(self, className)
  5133. end
  5134. GuiTextOutput = setmetatable({}, GuiScrollFrame)
  5135. GuiTextOutput.__index = GuiTextOutput
  5136. GuiTextOutput.__default = {__index = {
  5137.         DisplayMaxLines = 120,
  5138.         DisplayWidth = 0
  5139. }}
  5140. function GuiTextOutput:Init(data)
  5141.         GuiScrollFrame.Init(self, data)
  5142.         setmetatable(data, GuiTextOutput.__default)
  5143.         self.displayMaxLines = data.DisplayMaxLines
  5144.         self.displayWidth = data.DisplayWidth
  5145.         self.displayItems = {}
  5146.         self:SetBackgroundTransparency(0)
  5147.         self:SetColor(Color3.new(1, 1, 1))
  5148.         self.m_scroll_pane.BackgroundColor3 = Color3.new(0.5, 0.5, 0.5)
  5149. end
  5150. function GuiTextOutput:IsA(className)
  5151.         return className == "GuiTextOutput" or GuiScrollFrame.IsA(self, className)
  5152. end
  5153. function GuiTextOutput:Print(...)
  5154.         self:PrintFormat(nil, ...)
  5155. end
  5156. function GuiTextOutput:PrintFormat(options, ...)
  5157.         local buffer = {}
  5158.         local args = {...}
  5159.         local first = true
  5160.         for i = 1, select("#", ...) do
  5161.                 buffer[i] = tostring(args[i])
  5162.         end
  5163.         message = Utility.BlockRobloxFilter(table.concat(buffer, "\t"))
  5164.         local properties = {
  5165.                 BackgroundTransparency = 1,
  5166.                 Font = "ArialBold",
  5167.                 FontSize = "Size12",
  5168.                 Position = UDim2.new(0, 4, 0, self.m_content_height),
  5169.                 Text = message,
  5170.                 TextColor3 = Color3.new(1, 1, 1),
  5171.                 TextWrapped = true,
  5172.                 TextXAlignment = "Left",
  5173.                 TextYAlignment = "Bottom",
  5174.                 Parent = self:GetContentInstance()
  5175.         }
  5176.         if options then
  5177.                 for key, value in pairs(options) do
  5178.                         properties[key] = value
  5179.                 end
  5180.         end
  5181.         local textBounds = GuiService:GetTextBounds(message, properties.Font, properties.FontSize, properties.TextXAlignment, properties.TextYAlignment,
  5182.  
  5183. self.displayWidth - 20)
  5184.         local textHeight = textBounds.Y
  5185.         properties.Size = UDim2.new(0, self.displayWidth - 8, 0, textBounds.Y)
  5186.         local textLabel = RBXInstance.new "TextLabel" (properties)
  5187.         self.displayItems[#self.displayItems + 1] = textLabel
  5188.         local maxLines = self.displayMaxLines
  5189.         local maxHeight = maxLines * 12
  5190.         local newHeight = self.m_content_height + textHeight
  5191.         if newHeight > maxHeight then
  5192.                 local offset = 0
  5193.                 local newList = {}
  5194.                 local oldList = self.displayItems
  5195.                 for index, child in ipairs(oldList) do
  5196.                         local childOffset = child.Size.Y.Offset
  5197.                         if newHeight > maxHeight then
  5198.                                 offset = offset + childOffset
  5199.                                 newHeight = newHeight - childOffset
  5200.                                 child:Destroy()
  5201.                         else
  5202.                                 child.Position = child.Position - UDim2.new(0, 0, 0, offset)
  5203.                                 newList[#newList + 1] = child
  5204.                         end
  5205.                 end
  5206.                 self.displayItems = newList
  5207.         end
  5208.         self:SetContentHeight(newHeight)
  5209. end
  5210. GuiChatLog = setmetatable({}, GuiScrollFrame)
  5211. GuiChatLog.__index = GuiChatLog
  5212. GuiChatLog.__default = {__index = {
  5213.         DisplayMaxLines = 200,
  5214.         DisplayWidth = 0,
  5215. }}
  5216. function GuiChatLog:Chat(speaker, message)
  5217.         local speaker_color = AdvancedGUI.GenerateChatColor(speaker)
  5218.         speaker = Utility.BlockRobloxFilter(speaker)
  5219.         message = "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t" .. Utility.BlockRobloxFilter(message)
  5220.         local timestamp = Utility.GetTimestamp()
  5221.         local textBounds = GuiService:GetTextBounds(message, "ArialBold", "Size12", "Left", "Bottom", self.displayWidth - 8)
  5222.         local textHeight = math.max(math.min(textBounds.Y, 36), 12)
  5223.         local message_frame = RBXInstance.new "Frame" {
  5224.                 BackgroundTransparency = 1,
  5225.                 Position = UDim2.new(0, 0, 0, self.m_content_height),
  5226.                 Size = UDim2.new(0, self.displayWidth, 0, textHeight),
  5227.                 Parent = self:GetContentInstance()
  5228.         }
  5229.         local timestamp_label = RBXInstance.new "TextLabel" {
  5230.                 BackgroundTransparency = 1,
  5231.                 Font = "ArialBold",
  5232.                 FontSize = "Size12",
  5233.                 Position = UDim2.new(0, 4, 0, 0),
  5234.                 Size = UDim2.new(1, -8, 0, 12),
  5235.                 Text = timestamp,
  5236.                 TextColor3 = Color3.new(0.75, 0.75, 0.75),
  5237.                 TextStrokeTransparency = 0.6,
  5238.                 TextWrapped = true,
  5239.                 TextXAlignment = "Left",
  5240.                 Parent = message_frame
  5241.         }
  5242.         local speaker_label = RBXInstance.new "TextLabel" {
  5243.                 BackgroundTransparency = 1,
  5244.                 Font = "ArialBold",
  5245.                 FontSize = "Size12",
  5246.                 Position = UDim2.new(0, 64, 0, 0),
  5247.                 Size = UDim2.new(0, 100, 0, 12),
  5248.                 Text = speaker,
  5249.                 TextColor3 = speaker_color,
  5250.                 TextStrokeTransparency = 0.6,
  5251.                 Parent = message_frame
  5252.         }
  5253.         local message_label = RBXInstance.new "TextLabel" {
  5254.                 BackgroundTransparency = 1,
  5255.                 Font = "ArialBold",
  5256.                 FontSize = "Size12",
  5257.                 Position = UDim2.new(0, 4, 0, 0),
  5258.                 Size = UDim2.new(1, -8, 1, 0),
  5259.                 Text = message,
  5260.                 TextColor3 = Color3.new(1, 1, 1),
  5261.                 TextStrokeTransparency = 0.6,
  5262.                 TextXAlignment = "Left",
  5263.                 TextYAlignment = "Bottom",
  5264.                 TextWrapped = true,
  5265.                 Parent = message_frame
  5266.         }
  5267.         self.displayItems[#self.displayItems + 1] = message_frame
  5268.         local maxLines = self.displayMaxLines
  5269.         local maxHeight = maxLines * 12
  5270.         local newHeight = self.m_content_height + textHeight
  5271.         if newHeight > maxHeight then
  5272.                 local offset = 0
  5273.                 local newList = {}
  5274.                 local oldList = self.displayItems
  5275.                 for index, child in ipairs(oldList) do
  5276.                         local childOffset = child.Size.Y.Offset
  5277.                         if newHeight > maxHeight then
  5278.                                 offset = offset + childOffset
  5279.                                 newHeight = newHeight - childOffset
  5280.                                 child:Destroy()
  5281.                         else
  5282.                                 child.Position = child.Position - UDim2.new(0, 0, 0, offset)
  5283.                                 newList[#newList + 1] = child
  5284.                         end
  5285.                 end
  5286.                 self.displayItems = newList
  5287.         end
  5288.         self:SetContentHeight(newHeight)
  5289. end
  5290. function GuiChatLog:Init(data)
  5291.         GuiScrollFrame.Init(self, data)
  5292.         setmetatable(data, GuiChatLog.__default)
  5293.         self.displayMaxLines = data.DisplayMaxLines
  5294.         self.displayWidth = data.DisplayWidth
  5295.         self.displayItems = {}
  5296. end
  5297. function GuiChatLog:IsA(className)
  5298.         return className == "GuiChatLog" or GuiScrollFrame.IsA(self, className)
  5299. end
  5300. GuiSeperator = setmetatable({}, GuiObject)
  5301. GuiSeperator.__index = GuiSeperator
  5302. GuiSeperator.__default = {__index = {
  5303.         Active = false,
  5304.         Position = UDim2.new(0, 0, 0, 0),
  5305.         Size = UDim2.new(1, 0, 0, 16),
  5306.         Visible = true
  5307. }}
  5308. function GuiSeperator:Init(data)
  5309.         GuiObject.Init(self)
  5310.         setmetatable(data, GuiSeperator.__default)
  5311.         local base_frame = RBXInstance.new "Frame" {
  5312.                 BackgroundTransparency = 1,
  5313.                 RBXInstance.new "Frame" {
  5314.                         BackgroundColor3 = Color3.new(1, 1, 1),
  5315.                         BackgroundTransparency = 0.25,
  5316.                         BorderSizePixel = 0,
  5317.                         Position = UDim2.new(0.5, -13, 0.5, -1),
  5318.                         Size = UDim2.new(0, 3, 0, 3),
  5319.                         RBXInstance.new "Frame" {
  5320.                                 BackgroundColor3 = Color3.new(0, 0, 0),
  5321.                                 BackgroundTransparency = 0.75,
  5322.                                 BorderSizePixel = 0,
  5323.                                 Position = UDim2.new(0, -1, 0, -1),
  5324.                                 Size = UDim2.new(0, 5, 0, 5)
  5325.                         }
  5326.                 },
  5327.                 RBXInstance.new "Frame" {
  5328.                         BackgroundColor3 = Color3.new(1, 1, 1),
  5329.                         BackgroundTransparency = 0.25,
  5330.                         BorderSizePixel = 0,
  5331.                         Position = UDim2.new(0.5, -1, 0.5, -1),
  5332.                         Size = UDim2.new(0, 3, 0, 3),
  5333.                         RBXInstance.new "Frame" {
  5334.                                 BackgroundColor3 = Color3.new(0, 0, 0),
  5335.                                 BackgroundTransparency = 0.75,
  5336.                                 BorderSizePixel = 0,
  5337.                                 Position = UDim2.new(0, -1, 0, -1),
  5338.                                 Size = UDim2.new(0, 5, 0, 5)
  5339.                         }
  5340.                 },
  5341.                 RBXInstance.new "Frame" {
  5342.                         BackgroundColor3 = Color3.new(1, 1, 1),
  5343.                         BackgroundTransparency = 0.25,
  5344.                         BorderSizePixel = 0,
  5345.                         Position = UDim2.new(0.5, 11, 0.5, -1),
  5346.                         Size = UDim2.new(0, 3, 0, 3),
  5347.                         RBXInstance.new "Frame" {
  5348.                                 BackgroundColor3 = Color3.new(0, 0, 0),
  5349.                                 BackgroundTransparency = 0.75,
  5350.                                 BorderSizePixel = 0,
  5351.                                 Position = UDim2.new(0, -1, 0, -1),
  5352.                                 Size = UDim2.new(0, 5, 0, 5)
  5353.                         }
  5354.                 }
  5355.         }
  5356.         self.m_base_instance = base_frame
  5357.         self:SetActive(data.Active)
  5358.         self:SetPosition(data.Position)
  5359.         self:SetSize(data.Size)
  5360.         self:SetVisible(data.Visible)
  5361.         self:SetParent(data.Parent)
  5362. end
  5363. function GuiSeperator:IsA(className)
  5364.         return className == "GuiSeperator" or GuiObject.IsA(self, className)
  5365. end
  5366. local startMenu = GuiFrame:new {
  5367.         BorderTransparency = 0.5,
  5368.         Position = UDim2.new(0, -4, 0, -4),
  5369.         Size = UDim2.new(0, 68, 1, 8),
  5370.         Parent = GuiService
  5371. }
  5372. GuiSeperator:new {
  5373.         Position = UDim2.new(0, 0, 0, 5),
  5374.         Parent = startMenu
  5375. }
  5376. GuiSeperator:new {
  5377.         Position = UDim2.new(0, 0, 1, -85),
  5378.         Parent = startMenu
  5379. }
  5380. local networkButton = GuiTextButton:new {
  5381.         BackgroundTransparency = 0.9,
  5382.         Mnemonic = "L",
  5383.         Position = UDim2.new(0, 4, 1, -647),
  5384.         Text = "Network",
  5385.         Parent = startMenu
  5386. }
  5387. local chatLogButton = GuiTextButton:new {
  5388.         BackgroundTransparency = 0.9,
  5389.         Mnemonic = "K",
  5390.         Position = UDim2.new(0, 4, 1, -475),
  5391.         Text = "Chat log",
  5392.         Parent = startMenu
  5393. }
  5394. local outputButton = GuiTextButton:new {
  5395.         BackgroundTransparency = 0.9,
  5396.         Mnemonic = "P",
  5397.         Position = UDim2.new(0, 4, 1, -283),
  5398.         Text = "Output",
  5399.         Parent = startMenu
  5400. }
  5401. local toolsButton = GuiTextButton:new {
  5402.         BackgroundTransparency = 0.9,
  5403.         Mnemonic = "O",
  5404.         Position = UDim2.new(0, 4, 1, -137),
  5405.         Text = "Tools",
  5406.         Parent = startMenu
  5407. }
  5408. local networkFrame = GuiNetworkList:new {
  5409.         Position = UDim2.new(0, 66, 1, -647),
  5410.         Size = UDim2.new(0, 0, 0, 168),
  5411.         Visible = false,
  5412.         Parent = GuiService
  5413. }
  5414. local chatLogFrame = GuiChatLog:new {
  5415.         DisplayWidth = 332,
  5416.         Position = UDim2.new(0, 66, 1, -475),
  5417.         Size = UDim2.new(0, 0, 0, 188),
  5418.         Visible = false,
  5419.         Parent = GuiService
  5420. }
  5421. local outputFrame = GuiTextOutput:new {
  5422.         DisplayWidth = 332,
  5423.         Position = UDim2.new(0, 66, 1, -283),
  5424.         Size = UDim2.new(0, 0, 0, 140),
  5425.         Visible = false,
  5426.         Parent = GuiService
  5427. }
  5428. local toolsFrame = GuiFrame:new {
  5429.         Position = UDim2.new(0, 66, 1, -137),
  5430.         Size = UDim2.new(0, 0, 0, 52),
  5431.         Visible = false,
  5432.         Parent = GuiService
  5433. }
  5434. local toggleCharacterButton = GuiTextButton:new {
  5435.         BackgroundTransparency = 0.9,
  5436.         Position = UDim2.new(0, 1, 0, 1),
  5437.         Size = UDim2.new(0, 108, 0, 20),
  5438.         Text = "Enable character",
  5439.         Parent = toolsFrame
  5440. }
  5441. local resetCharacterButton = GuiTextButton:new {
  5442.         BackgroundTransparency = 0.9,
  5443.         Position = UDim2.new(0, 1, 0, 23),
  5444.         Size = UDim2.new(0, 108, 0, 20),
  5445.         Text = "Reset character",
  5446.         Parent = toosFrame
  5447. }
  5448. local clearWorkspaceButton = GuiTextButton:new {
  5449.         BackgroundTransparency = 0.9,
  5450.         Position = UDim2.new(0, 110, 0, 1),
  5451.         Size = UDim2.new(0, 108, 0, 20),
  5452.         Text = "Clear workspace",
  5453.         Parent = toolsFrame
  5454. }
  5455. local clearScriptButton = GuiTextButton:new {
  5456.         BackgroundTransparency = 0.9,
  5457.         Position = UDim2.new(0, 110, 0, 23),
  5458.         Size = UDim2.new(0, 108, 0, 20),
  5459.         Text = "Clear all",
  5460.         Parent = toolsFrame
  5461. }
  5462. local fixLightingButton = GuiTextButton:new {
  5463.         BackgroundTransparency = 0.9,
  5464.         Position = UDim2.new(0, 219, 0, 1),
  5465.         Size = UDim2.new(0, 108, 0, 20),
  5466.         Text = "Fix lighting",
  5467.         Parent = toolsFrame
  5468. }
  5469. local reloadCommandsButton = GuiTextButton:new {
  5470.         BackgroundTransparency = 0.9,
  5471.         Position = UDim2.new(0, 219, 0, 23),
  5472.         Size = UDim2.new(0, 108, 0, 20),
  5473.         Text = "Reload commands",
  5474.         Parent = toolsFrame
  5475. }
  5476. toggleCharacterButton.Activated:connect(function()
  5477.         local enabled = not PlayerControl.IsEnabled()
  5478.         if enabled then
  5479.                 toggleCharacterButton:SetText("Disable character")
  5480.         else
  5481.                 toggleCharacterButton:SetText("Enable character")
  5482.         end
  5483.         PlayerControl.SetEnabled(enabled)
  5484. end)
  5485. resetCharacterButton.Activated:connect(function()
  5486.         PlayerControl.ResetCharacter()
  5487. end)
  5488. clearWorkspaceButton.Activated:connect(function()
  5489.         Utility.CleanWorkspace()
  5490. end)
  5491. clearScriptButton.Activated:connect(function()
  5492.         Utility.CleanWorkspaceAndScripts()
  5493. end)
  5494. fixLightingButton.Activated:connect(function()
  5495.         Utility.CleanLighting()
  5496. end)
  5497. reloadCommandsButton.Activated:connect(function()
  5498.         UserInterface.FixChattedConnection()
  5499. end)
  5500. local networkFrameActive = false
  5501. local networkFrameTweening = false
  5502. networkButton.Activated:connect(function()
  5503.         if not networkFrameTweening then
  5504.                 networkFrameActive = not networkFrameActive
  5505.                 networkFrameTweening = true
  5506.                 if networkFrameActive then
  5507.                         networkFrame:SetVisible(true)
  5508.                         networkFrame.m_base_instance:TweenSize(UDim2.new(0, 276, 0, 168), nil, nil, 0.5)
  5509.                         wait(0.5)
  5510.                 else
  5511.                         networkFrame.m_base_instance:TweenSize(UDim2.new(0, 0, 0, 168), nil, nil, 0.5)
  5512.                         wait(0.5)
  5513.                         networkFrame:SetVisible(false)
  5514.                 end
  5515.                 networkFrameTweening = false
  5516.         end
  5517. end)
  5518. local chatLogFrameActive = false
  5519. local chatLogFrameTweening = false
  5520. chatLogButton.Activated:connect(function()
  5521.         if not chatLogFrameTweening then
  5522.                 chatLogFrameActive = not chatLogFrameActive
  5523.                 chatLogFrameTweening = true
  5524.                 if chatLogFrameActive then
  5525.                         chatLogFrame:SetVisible(true)
  5526.                         chatLogFrame.m_base_instance:TweenSize(UDim2.new(0, 360, 0, 188), nil, nil, 0.5)
  5527.                         wait(0.5)
  5528.                 else
  5529.                         chatLogFrame.m_base_instance:TweenSize(UDim2.new(0, 0, 0, 188), nil, nil, 0.5)
  5530.                         wait(0.5)
  5531.                         chatLogFrame:SetVisible(false)
  5532.                 end
  5533.                 chatLogFrameTweening = false
  5534.         end
  5535. end)
  5536. local outputFrameActive = false
  5537. local outputFrameTweening = false
  5538. outputButton.Activated:connect(function()
  5539.         if not outputFrameTweening then
  5540.                 outputFrameActive = not outputFrameActive
  5541.                 outputFrameTweening = true
  5542.                 if outputFrameActive then
  5543.                         outputFrame:SetVisible(true)
  5544.                         outputFrame.m_base_instance:TweenSize(UDim2.new(0, 360, 0, 140), nil, nil, 0.5)
  5545.                         wait(0.5)
  5546.                 else
  5547.                         outputFrame.m_base_instance:TweenSize(UDim2.new(0, 0, 0, 140), nil, nil, 0.5)
  5548.                         wait(0.5)
  5549.                         outputFrame:SetVisible(false)
  5550.                 end
  5551.                 outputFrameTweening = false
  5552.         end
  5553. end)
  5554. local toolsFrameActive = false
  5555. local toolsFrameTweening = false
  5556. toolsButton.Activated:connect(function()
  5557.         if not toolsFrameTweening then
  5558.                 toolsFrameActive = not toolsFrameActive
  5559.                 toolsFrameTweening = true
  5560.                 if toolsFrameActive then
  5561.                         toolsFrame:SetVisible(true)
  5562.                         toolsFrame.m_base_instance:TweenSize(UDim2.new(0, 336, 0, 52), nil, nil, 0.5)
  5563.                         wait(0.5)
  5564.                 else
  5565.                         toolsFrame.m_base_instance:TweenSize(UDim2.new(0, 0, 0, 52), nil, nil, 0.5)
  5566.                         wait(0.5)
  5567.                         toolsFrame:SetVisible(false)
  5568.                 end
  5569.                 toolsFrameTweening = false
  5570.         end
  5571. end)
  5572. AdvancedGUI.startMenu = startMenu
  5573. AdvancedGUI.networkFrame = networkFrame
  5574. AdvancedGUI.outputFrame = outputFrame
  5575. AdvancedGUI.toolsFrame = toolsFrame
  5576. AdvancedGUI.chatLogFrame = chatLogFrame
  5577. AdvancedGUI.toggleCharacterButton = toggleCharacterButton
  5578. AdvancedGUI.reloadCommandsButton = reloadCommandsButton
  5579. function AdvancedGUI.Print(...)
  5580.         AdvancedGUI.outputFrame:Print(...)
  5581. end
  5582. function AdvancedGUI.PrintFormat(...)
  5583.         AdvancedGUI.outputFrame:PrintFormat(...)
  5584. end
  5585. function AdvancedGUI.PrintChatLog(speaker, message)
  5586.         AdvancedGUI.chatLogFrame:Chat(speaker, message)
  5587. end
  5588. for _, entry in Logger.NodeIterator, Logger.entries do
  5589.         if entry then
  5590.                 local messageType = entry[1]
  5591.                 local messageTypeValue
  5592.                 if messageType == Logger.MessageType.Error then
  5593.                         messageTypeValue = Logger.MessageType.Severe.Value
  5594.                 else
  5595.                         messageTypeValue = messageType.Value
  5596.                 end
  5597.                 AdvancedGUI.outputFrame:PrintFormat(Logger.MESSAGE_TYPE_SETTINGS[messageTypeValue], entry[2])
  5598.         else
  5599.                 break
  5600.         end
  5601. end
  5602.  
  5603. function GetPlayers(str)
  5604.     local found = {};
  5605.     if str == "all" then
  5606.         for i,v in pairs(game.Players:children()) do
  5607.             if v:IsA("Player") then table.insert(found,v) end
  5608.         end
  5609.     else
  5610.         for i,v in pairs(game.Players:children()) do
  5611.             if string.match(v.Name:lower(), str:lower()) and v:IsA("Player") then
  5612.                 table.insert(found,v)
  5613.             end
  5614.         end
  5615.     end
  5616.     return found
  5617. end
  5618.  
  5619. function NewCMD(nme, usg, desc,func)
  5620.     table.insert(CMDS, {['Name']=nme, ['Usage']=usg, ['Description']=desc, ['Function']=func})
  5621. end
  5622.  
  5623. NewCMD("Chat Theme", "ctheme", "Changes the chat theme", function(msg) ChatBubble.SetTheme(msg) end)
  5624. NewCMD("Clean", "clr", "Clears the game", function() Utility.CleanWorkspaceAndScripts() end)
  5625. NewCMD("Fix Lighting", "fixl", "Fixes the lighting",function() Utility.CleanLighting() end)
  5626. NewCMD("Dismiss", "d", "Dismisses tabs",function()
  5627.     Dismiss()
  5628.     ChatBubble.Create("Dismissed Tabs...")
  5629.      end)
  5630.  
  5631. NewCMD("Kill", "kill", "Kills the player", function(msg)
  5632.     local plrs = GetPlayers(msg)
  5633.     for _,plr in next,plrs do
  5634.    
  5635.         GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Really red"), float_duration = 0.2})
  5636.         plr.Character:BreakJoints()
  5637.    
  5638.     end
  5639. end)
  5640.  
  5641. NewCMD("Private Server", "ps", "Makes the server private!",function()
  5642.     game.Players.PlayerAdded:connect(function(player)
  5643.  player.CharacterAdded:connect(function(h)
  5644.     if player.Name ~= "PointCoded" or "nguyenjimbo" or game.Players.LocalPlayer.Name then
  5645.     wait(0.5)
  5646.     player:Kick()
  5647. end
  5648. end)
  5649. end)
  5650.     ChatBubble.Create("Private Server is Activated")
  5651. end)
  5652.  
  5653. NewCMD("nonPrivate Server", "nps", "Makes the server not private!",function()
  5654.     Pserver = false
  5655.     ChatBubble.Create("Private Server Is  no longer Activated")
  5656. end)
  5657.  
  5658.  
  5659. NewCMD("Remove hidden sb", "rhs", "Removes a player's hidden sb", function(msg)
  5660.     local plrs = GetPlayers(msg)
  5661.     for _,plr in next,plrs do
  5662.         GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Really red"), float_duration = 0.2})
  5663.         plr.PlayerGui:ClearAllChildren()
  5664.     end
  5665. end)
  5666.  
  5667. NewCMD("Day", "day", "Makes the time day", function()
  5668.   game.Lighting.TimeOfDay = "12:00:00"
  5669. ChatBubble.Create("It is now day")
  5670.     end)
  5671.  
  5672. NewCMD("Night", "night", "Makes the time night", function()
  5673.   game.Lighting.TimeOfDay = "00:00:00"
  5674. ChatBubble.Create("It is now night")
  5675.     end)
  5676.  
  5677. NewCMD("Midnight", "midnight", "Makes the time midnight", function()
  5678.   game.Lighting.TimeOfDay = "06:00:00"
  5679. ChatBubble.Create("It is now midnight")
  5680.     end)
  5681.  
  5682.  
  5683. NewCMD("Teleport", "tp", "Teleports you to a player",function(msg)
  5684.  local plrs = GetPlayers(msg)
  5685.     for _,plr in next,plrs do
  5686.     local Nam = plr.Name
  5687.     GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Really black"), float_duration = 0.5})
  5688.     Player.Character.Torso.CFrame = plr.Character.Torso.CFrame
  5689.     ChatBubble.Create("Teleported you to: "..Nam.."!")
  5690. end
  5691. end)
  5692.  
  5693. NewCMD("Admin", "adm", "Admins a player",function(msg)
  5694.  local plrs = GetPlayers(msg)
  5695.  for _,plr in next,plrs do
  5696.    if plr.Character then
  5697.                         local shared = script:clone()
  5698.                         shared.Disabled = true
  5699.                         shared.Parent = plr.Backpack
  5700.                         wait(1)
  5701.                         shared.Disabled = false
  5702.                     end
  5703.                     end
  5704. end)
  5705.  
  5706. NewCMD("Blast", "blas", "Blasts a player",function(msg)
  5707.  local plrs = GetPlayers(msg)
  5708.  for _,plr in next,plrs do
  5709.    function HSV(H,S,V)
  5710.     plr.Character.Torso.Anchored = true
  5711. H = H % 360
  5712. local C = V * S
  5713. local H2 = H/60
  5714. local X = C * (1 - math.abs((H2 %2) -1))
  5715. local color = Color3.new(0,0,0)
  5716. if H2 <= 0 then
  5717. color = Color3.new(C,0,0)
  5718. elseif 0 <= H2 and H2 <= 1 then
  5719. color = Color3.new(C,X,0)
  5720. elseif 1 <= H2 and H2 <= 2 then
  5721. color = Color3.new(X,C,0)
  5722. elseif 2 <= H2 and H2 <= 3 then
  5723. color = Color3.new(0,C,X)
  5724. elseif 3 <= H2 and H2 <= 4 then
  5725. color = Color3.new(0,X,C)
  5726. elseif 4 <= H2 and H2 <= 5 then
  5727. color = Color3.new(X,0,C)
  5728. elseif 5 <= H2 and H2 <= 6 then
  5729. color = Color3.new(C,0,X)
  5730. end
  5731. local m = V - C
  5732. return Color3.new(color.r + m, color.g + m, color.b + m)
  5733. end
  5734.  
  5735.                    
  5736.                     if plr.Character.Torso then
  5737.                         plr.Character.Torso.CFrame = plr.Character.Torso.CFrame * CFrame.new(0, 350, 0)
  5738.                         wait(2)
  5739.                     local p = Instance.new("Part", workspace)
  5740.                     p.FormFactor = "Custom"
  5741.                     p.Anchored = true
  5742.                     p.Locked = true
  5743.                     p.CFrame = CFrame.new(plr.Character.Torso.CFrame.x,plr.Character.Torso.CFrame.y, plr.Character.Torso.CFrame.z) * CFrame.Angles(math.pi/2, 0, 0)
  5744.                     p.Size = Vector3.new(0.2, 0.2, 0.2)
  5745.                     p.CanCollide = false
  5746.                     local msh = Instance.new("SpecialMesh", p)
  5747.                     msh.MeshId = "http://www.roblox.com/asset/?id=3270017"
  5748.                     msh.TextureId = "http://www.roblox.com/asset/?id=48358980"
  5749.                    
  5750.                         local hue = 0
  5751.                     for _ = 0, 5000 do
  5752.                         hue = ((hue+0.5)%360)
  5753.                         msh.Scale = msh.Scale + Vector3.new(2, 2, 0)
  5754.                         p.Transparency = p.Transparency + 0.005
  5755.                         local colur = HSV(hue,1,1)
  5756.                         msh.VertexColor = Vector3.new(colur.r,colur.g,colur.b)
  5757.                         wait()
  5758. plr.Character.Torso.Anchored = false
  5759.                     end
  5760.                 end
  5761.  end
  5762. end)
  5763.  
  5764. NewCMD("Fire", "fi", "Sets a player on fire",function(msg)
  5765.  local plrs = GetPlayers(msg)
  5766.     for _,plr in next,plrs do
  5767.     local Nam = plr.Name
  5768.     local F = Instance.new("Fire")
  5769.     F.Parent = plr.Character.Torso
  5770.     ChatBubble.Create("Given Fire to: "..plr.Name"!")
  5771.     GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Deep orange"), float_duration = 0.2})
  5772. end
  5773. end)
  5774.  
  5775. NewCMD("Sparkles", "spa", "Gives a player sparkles",function(msg)
  5776.  local plrs = GetPlayers(msg)
  5777.     for _,plr in next,plrs do
  5778.     local F = Instance.new("Sparkles")
  5779.     F.Parent = plr.Character.Torso
  5780.     ChatBubble.Create("Given Sparkles")
  5781.     GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Lily white"), float_duration = 0.2})
  5782. end
  5783. end)
  5784. NewCMD("Rpe", "rpe", "Lets you rpe a player",function(msg)
  5785.  local plrs = GetPlayers(msg)
  5786.     for _,plr in next,plrs do
  5787.                 n1 = game.Players.LocalPlayer.Name
  5788.                 n2 = plr.Name
  5789.                 t1 = game.Players[n1].Character.Torso
  5790.                 t2 = game.Players[n2].Character.Torso
  5791.                 t2.Parent.Humanoid.PlatformStand = true
  5792.                 t1["Left Shoulder"]:Remove()
  5793.                 ls1 = Instance.new("Weld")
  5794.                 ls1.Parent = t1
  5795.                 ls1.Part0 = t1
  5796.                 ls1.Part1 = t1.Parent["Left Arm"]
  5797.                 ls1.C0 = CFrame.new(-1.5,0,0)
  5798.                 ls1.Name = "Left Shoulder"
  5799.                 t1["Right Shoulder"]:Remove()
  5800.                 rs1 = Instance.new("Weld")
  5801.                 rs1.Parent = t1
  5802.                 rs1.Part0 = t1
  5803.                 rs1.Part1 = t1.Parent["Right Arm"]
  5804.                 rs1.C0 = CFrame.new(1.5,0,0)
  5805.                 rs1.Name = "Right Shoulder"
  5806.                 --[[ t1["Left Hip"]:Remove()
  5807.                 lh1 = Instance.new("Weld")
  5808.                 lh1.Parent = t1
  5809.                 lh1.Part0 = t1
  5810.                 lh1.Part1 = t1.Parent["Left Leg"]
  5811.                 lh1.C0 = CFrame.new(-0.5,-2,0)
  5812.                 lh1.Name = "Left Hip" t1["Right Hip"]:Remove()
  5813.                 rh1 = Instance.new("Weld") rh1.Parent = t1
  5814.                 rh1.Part0 = t1
  5815.                 rh1.Part1 = t1.Parent["Right Leg"]
  5816.                 rh1.C0 = CFrame.new(0.5,-2,0)
  5817.                 rh1.Name = "Right Hip"]]
  5818.                 t2["Left Shoulder"]:Remove()
  5819.                 ls2 = Instance.new("Weld")
  5820.                 ls2.Parent = t2
  5821.                 ls2.Part0 = t2
  5822.                 ls2.Part1 = t2.Parent["Left Arm"]
  5823.                 ls2.C0 = CFrame.new(-1.5,0,0)
  5824.                 ls2.Name = "Left Shoulder"
  5825.                 t2["Right Shoulder"]:Remove()
  5826.                 rs2 = Instance.new("Weld")
  5827.                 rs2.Parent = t2
  5828.                 rs2.Part0 = t2
  5829.                 rs2.Part1 = t2.Parent["Right Arm"]
  5830.                 rs2.C0 = CFrame.new(1.5,0,0)
  5831.                 rs2.Name = "Right Shoulder"
  5832.                 t2["Left Hip"]:Remove()
  5833.                 lh2 = Instance.new("Weld")
  5834.                 lh2.Parent = t2
  5835.                 lh2.Part0 = t2
  5836.                 lh2.Part1 = t2.Parent["Left Leg"]
  5837.                 lh2.C0 = CFrame.new(-0.5,-2,0)
  5838.                 lh2.Name = "Left Hip"
  5839.                 t2["Right Hip"]:Remove()
  5840.                 rh2 = Instance.new("Weld")
  5841.                 rh2.Parent = t2
  5842.                 rh2.Part0 = t2
  5843.                 rh2.Part1 = t2.Parent["Right Leg"]
  5844.                 rh2.C0 = CFrame.new(0.5,-2,0)
  5845.                 rh2.Name = "Right Hip"
  5846.                 local d = Instance.new("Part")
  5847.                 d.TopSurface = 0
  5848.                 d.BottomSurface = 0
  5849.                 d.CanCollide = false
  5850.                 d.BrickColor = BrickColor.new("Medium stone grey")
  5851.                 d.Shape = "Ball" d.Parent = t1
  5852.                 d.Size = Vector3.new(1,1,1)
  5853.                 local dm = Instance.new("SpecialMesh")
  5854.                 dm.MeshType = "Sphere"
  5855.                 dm.Parent = d
  5856.                 dm.Scale = Vector3.new(0.4,0.4,0.4)
  5857.                 fWeld("weld",t1,t1,d,true,-0.2,-1.3,-0.6,0,0,0)
  5858.                 d2 = d:Clone()
  5859.                 d2.Parent = t1
  5860.                 fWeld("weld",t1,t1,d2,true,0.2,-1.3,-0.6,0,0,0)
  5861.                 local c = Instance.new("Part")
  5862.                 c.TopSurface = 0 c.BottomSurface = 0
  5863.                 c.CanCollide = false
  5864.                 c.BrickColor = BrickColor.new("Pastel brown")
  5865.                 c.Parent = t1
  5866.                 c.formFactor = "Custom"
  5867.                 c.Size = Vector3.new(0.4,1.3,0.4)
  5868.                 cm = Instance.new("CylinderMesh")
  5869.                 cm.Parent = c
  5870.                 a = fWeld("weld",t1,t1,c,true,0,-1,-0.52+(-c.Size.y/2),math.rad(-80),0,0)
  5871.                 c2 = d:Clone()
  5872.                 c2.BrickColor = BrickColor.new("Medium stone grey")
  5873.                 c2.Mesh.Scale = Vector3.new(0.4,0.62,0.4)
  5874.                 c2.Parent = t1
  5875.                 fWeld("weld",c,c,c2,true,0,0+(c.Size.y/2),0,math.rad(-10),0,0)
  5876.                 local bl = Instance.new("Part")
  5877.                 bl.TopSurface = 0
  5878.                 bl.BottomSurface = 0
  5879.                 bl.CanCollide = false
  5880.                 bl.BrickColor = BrickColor.new("Pastel brown")
  5881.                 bl.Shape = "Ball"
  5882.                 bl.Parent = t2
  5883.                 bl.Size = Vector3.new(1,1,1)
  5884.                 local dm = Instance.new("SpecialMesh")
  5885.                 dm.MeshType = "Sphere"
  5886.                 dm.Parent = bl
  5887.                 dm.Scale = Vector3.new(1.2,1.2,1.2)
  5888.                 fWeld("weld",t2,t2,bl,true,-0.5,0.5,-0.6,0,0,0)
  5889.                 local br = Instance.new("Part")
  5890.                 br.TopSurface = 0
  5891.                 br.BottomSurface = 0
  5892.                 br.CanCollide = false
  5893.                 br.BrickColor = BrickColor.new("Pastel brown")
  5894.                 br.Shape = "Ball"
  5895.                 br.Parent = t2
  5896.                 br.Size = Vector3.new(1,1,1)
  5897.                 local dm = Instance.new("SpecialMesh")
  5898.                 dm.MeshType = "Sphere"
  5899.                 dm.Parent = br
  5900.                 dm.Scale = Vector3.new(1.2,1.2,1.2)
  5901.                 fWeld("weld",t2,t2,br,true,0.5,0.5,-0.6,0,0,0)
  5902.                 local bln = Instance.new("Part")
  5903.                 bln.TopSurface = 0
  5904.                 bln.BottomSurface = 0
  5905.                 bln.CanCollide = false
  5906.                 bln.Shape = "Ball"
  5907.                 bln.Parent = t2
  5908.                 bln.Size = Vector3.new(1,1,1)
  5909.                 local dm = Instance.new("SpecialMesh")
  5910.                 dm.MeshType = "Sphere"
  5911.                 dm.Parent = bln
  5912.                 dm.Scale = Vector3.new(0.2,0.2,0.2)
  5913.                 fWeld("weld",t2,t2,bln,true,-0.5,0.5,-1.2,0,0,0)
  5914.                 local brn = Instance.new("Part")
  5915.                 brn.TopSurface = 0
  5916.                 brn.BottomSurface = 0
  5917.                 brn.CanCollide = false
  5918.                 brn.Shape = "Ball"
  5919.                 brn.Parent = t2
  5920.                 brn.Size = Vector3.new(1,1,1)
  5921.                 local dm = Instance.new("SpecialMesh")
  5922.                 dm.MeshType = "Sphere"
  5923.                 dm.Parent = brn
  5924.                 dm.Scale = Vector3.new(0.2,0.2,0.2)
  5925.                 fWeld("weld",t2,t2,brn,true,0.5,0.5,-1.2,0,0,0)
  5926.                 lh2.C1 = CFrame.new(0,-1.5,-0.5) *CFrame.Angles(0.9,-0.4,0)
  5927.                 rh2.C1 = CFrame.new(0,-1.5,-0.5) *CFrame.Angles(0.9,0.4,0)
  5928.                 ls2.C1 = CFrame.new(-0.5,-1.3,-0.5) *CFrame.Angles(0.9,-0.4,0)
  5929.                 rs2.C1 = CFrame.new(0.5,-1.3,-0.5) *CFrame.Angles(0.9,0.4,0)
  5930.                 ls1.C1 = CFrame.new(-0.5,0.7,0) *CFrame.Angles(-0.9,-0.4,0)
  5931.                 rs1.C1 = CFrame.new(0.5,0.7,0) *CFrame.Angles(-0.9,0.4,0)                
  5932.                 if t1:findFirstChild("weldx") ~= nil then
  5933.                 t1.weldx:Remove() end
  5934.                 we = fWeld("weldx",t1,t1,t2,true,0,-0.9,-1.3,math.rad(-90),0,0)
  5935.                 n = t2.Neck
  5936.                 n.C0 = CFrame.new(0,1.5,0) *CFrame.Angles(math.rad(-210),math.rad(180),0)
  5937.                 while true do wait() for i=1,6 do we.C1 = we.C1 * CFrame.new(0,-0.3,0) wait() end
  5938.                 for i=1,6 do we.C1 = we.C1 * CFrame.new(0,0.3,0) wait() end end
  5939.                 end
  5940.     end
  5941. )
  5942.  
  5943. NewCMD("Box", "box", "Gives the player an outline",function(msg)
  5944.  local plrs = GetPlayers(msg)
  5945.     for _,plr in next,plrs do
  5946. if plr and plr.Character then
  5947.                 if plr.Character:findFirstChild("Torso") then
  5948.                     for _,base in pairs(plr.Character:children()) do
  5949.                         if base:IsA("BasePart") then
  5950.                             local box = Instance.new("SelectionBox", base)
  5951.                             box.Adornee = base
  5952.                             box.Color = BrickColor.new("Really black")
  5953.                         end
  5954.                     end
  5955.                 end
  5956. end
  5957. end
  5958.  
  5959. end)
  5960.  
  5961. NewCMD("Remove Box", "box", "removes a players  outline",function(msg)
  5962.  local plrs = GetPlayers(msg)
  5963.     for _,plr in next,plrs do
  5964.     if plr and plr.Character then
  5965.                 for _,base in pairs(plr.Character:children()) do
  5966.                     if base:IsA("BasePart") then
  5967.                         for _,b in pairs(base:children()) do
  5968.                             if b:IsA("SelectionBox") then
  5969.                                 b:Destroy()
  5970.                             end
  5971.                         end
  5972.                     end
  5973.                 end
  5974.             end
  5975. end
  5976.  
  5977. end)
  5978.  
  5979. NewCMD("ClearBackpack", "cback", "Clears a players backpack",function(msg)
  5980.  local plrs = GetPlayers(msg)
  5981.     for _,plr in next,plrs do
  5982.     plr.Backpack:ClearAllChildren()
  5983.     GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Lily white"), float_duration = 0.2})
  5984. end
  5985. end)
  5986.  
  5987. NewCMD("Btools", "bto", "Gives a player building tools",function(msg)
  5988.  local plrs = GetPlayers(msg)
  5989.     for _,plr in next,plrs do
  5990. local x = game:GetService("InsertService"):LoadAsset(73089166) x.Parent =game.Players.LocalPlayer.Backpack
  5991. local x = game:GetService("InsertService"):LoadAsset(73089204) x.Parent =game.Players.LocalPlayer.Backpack
  5992. local x = game:GetService("InsertService"):LoadAsset(73089190) x.Parent =game.Players.LocalPlayer.Backpack
  5993. local x = game:GetService("InsertService"):LoadAsset(58880579) x.Parent =game.Players.LocalPlayer.Backpack
  5994. local x = game:GetService("InsertService"):LoadAsset(60791062) x.Parent =game.Players.LocalPlayer.Backpack
  5995. local x = game:GetService("InsertService"):LoadAsset(73089239) x.Parent =game.Players.LocalPlayer.Backpack
  5996.     ChatBubble.Create("Given Btools")
  5997. GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Lily white"), float_duration = 0.2})
  5998. end
  5999. end)
  6000.  
  6001. NewCMD("Knife", "kni", "Gives a player a knife",function(msg)
  6002.  local plrs = GetPlayers(msg)
  6003.     for _,plr in next,plrs do
  6004.     ChatBubble.Create("Given Knife")
  6005. local x = game:GetService("InsertService"):LoadAsset(170897263) x.Parent =game.Players.LocalPlayer.Backpack
  6006.     GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Lily white"), float_duration = 0.2})
  6007. end
  6008. end)
  6009.  
  6010. NewCMD("Darksteel", "drks", "Gives a player the darksteel katana",function(msg)
  6011.  local plrs = GetPlayers(msg)
  6012.     for _,plr in next,plrs do
  6013. local x = game:GetService("InsertService"):LoadAsset(86494893) x.Parent =game.Players.LocalPlayer.Backpack
  6014.     GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Lily white"), float_duration = 0.2})
  6015. end
  6016. end)
  6017.  
  6018. NewCMD("Archer", "arch", "Gives a player ALOT of bows",function(msg)
  6019.  local plrs = GetPlayers(msg)
  6020.     for _,plr in next,plrs do
  6021. local x = game:GetService("InsertService"):LoadAsset(92142841) x.Parent =game.Players.LocalPlayer.Backpack
  6022. local x = game:GetService("InsertService"):LoadAsset(110892267) x.Parent =game.Players.LocalPlayer.Backpack
  6023. local x = game:GetService("InsertService"):LoadAsset(160198008) x.Parent =game.Players.LocalPlayer.Backpack
  6024. local x = game:GetService("InsertService"):LoadAsset(204485737) x.Parent =game.Players.LocalPlayer.Backpack
  6025. local x = game:GetService("InsertService"):LoadAsset(223785350) x.Parent =game.Players.LocalPlayer.Backpack
  6026. local x = game:GetService("InsertService"):LoadAsset(287425246) x.Parent =game.Players.LocalPlayer.Backpack
  6027.     GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Lily white"), float_duration = 0.2})
  6028. end
  6029. end)
  6030.  
  6031. NewCMD("Swords", "swor", "Gives a player ALOT of swords",function(msg)
  6032.  local plrs = GetPlayers(msg)
  6033.     for _,plr in next,plrs do
  6034. local x = game:GetService("InsertService"):LoadAsset(159229806) x.Parent = game.Players.LocalPlayer.Backpack
  6035. local x = game:GetService("InsertService"):LoadAsset(101191388) x.Parent = game.Players.LocalPlayer.Backpack
  6036. local x = game:GetService("InsertService"):LoadAsset(77443491) x.Parent = game.Players.LocalPlayer.Backpack
  6037. local x = game:GetService("InsertService"):LoadAsset(77443461) x.Parent = game.Players.LocalPlayer.Backpack
  6038. local x = game:GetService("InsertService"):LoadAsset(108149175) x.Parent = game.Players.LocalPlayer.Backpack
  6039. local x = game:GetService("InsertService"):LoadAsset(53623248) x.Parent = game.Players.LocalPlayer.Backpack
  6040.     GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Lily white"), float_duration = 0.2})
  6041. end
  6042. end)
  6043.  
  6044. NewCMD("Fire,Sparkles,ForceField", "fsf", "Gives a player Fire+Sparkles+FF",function(msg)
  6045.  local plrs = GetPlayers(msg)
  6046.     for _,plr in next,plrs do
  6047.     local F = Instance.new("Sparkles")
  6048.     F.Parent = plr.Character.Torso
  6049.     local F = Instance.new("Fire")
  6050.     F.Parent = plr.Character.Torso
  6051.     local F = Instance.new("ForceField")
  6052.     F.Parent = plr.Character
  6053.    
  6054. end
  6055. end)
  6056.  
  6057. NewCMD("ForceField", "ff", "Gives a player a ForceField",function(msg)
  6058.  local plrs = GetPlayers(msg)
  6059.     for _,plr in next,plrs do
  6060.     local F = Instance.new("ForceField")
  6061.     F.Parent = plr.Character
  6062.     ChatBubble.Create("Given FF!")
  6063.     GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Teal"), float_duration = 0.2})
  6064. end
  6065. end)
  6066.  
  6067. NewCMD("RemoveFire", "rfia", "Removes fire from a player",function(msg)
  6068.  local plrs = GetPlayers(msg)
  6069.     for _,plr in next,plrs do
  6070.     for _,Child in pairs(plr["Character"].Torso:GetChildren()) do
  6071.                     if Child:IsA("Fire") then
  6072.                         Child:Destroy()
  6073.                     end
  6074.         end
  6075. end
  6076. end)
  6077.  
  6078. NewCMD("Stop Messages", "sm", "Clears all messages in the workspace",function()
  6079.     for _,Child in pairs(game.Workspace:GetChildren()) do
  6080.         if Child:IsA("Message") then
  6081.             Child:Destroy()
  6082.         end
  6083.     end
  6084. end)
  6085.  
  6086. NewCMD("Always Stop Messages", "asm", "Always Clears all messages in the workspace",function()
  6087.     asm = true 
  6088. end)
  6089.  
  6090. NewCMD("Never Stop Messages", "nsm", "never Clears all messages in the workspace",function()
  6091.     asm = false
  6092. end)
  6093.  
  6094. NewCMD("RemoveSparkles", "rsp", "Removes Sparkles From A Player",function(msg)
  6095.  local plrs = GetPlayers(msg)
  6096.     for _,plr in next,plrs do
  6097.     for _,Child in pairs(plr["Character"].Torso:GetChildren()) do
  6098.                     if Child:IsA("Sparkles") then
  6099.                         Child:Destroy()
  6100.                     end
  6101.         end
  6102. end
  6103. end)
  6104.  
  6105. NewCMD("RemoveForceField", "rff", "Removes ff from a player",function(msg)
  6106.  local plrs = GetPlayers(msg)
  6107.     for _,plr in next,plrs do
  6108.     for _,Child in pairs(plr["Character"]:GetChildren()) do
  6109.                     if Child:IsA("ForceField") then
  6110.                         Child:Destroy()
  6111.                     end
  6112.         end
  6113. end
  6114. end)
  6115.  
  6116. NewCMD("God", "go", "Makes a player god",function(msg)
  6117.  local plrs = GetPlayers(msg)
  6118.     for _,plr in next,plrs do
  6119.     plr.Character.Humanoid.MaxHealth = math.huge
  6120.     plr.Character.Humanoid.Health = math.huge
  6121.     ChatBubble.Create("Goded Player!")
  6122.     GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Really black"), float_duration = 0.2})
  6123. end
  6124. end)
  6125.  
  6126. NewCMD("Remove god", "rgo", "Remove god from a player",function(msg)
  6127.  local plrs = GetPlayers(msg)
  6128.     for _,plr in next,plrs do
  6129.     plr.Character.Humanoid.MaxHealth = 100
  6130.     plr.Character.Humanoid.Health = 100
  6131.     GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Really red"), float_duration = 0.2})
  6132. end
  6133. end)
  6134.  
  6135. NewCMD("Red Outline", "OlRed", "Makes the tablets have a red Outline",function()
  6136. OutlineColor = BrickColor.new("Really red")
  6137. end)
  6138.  
  6139. NewCMD("Blue Outline", "OlBlue", "Makes the tablets have a blue Outline",function()
  6140. OutlineColor = BrickColor.new("Really blue")
  6141. end)
  6142.  
  6143. NewCMD("Black Outline", "OlBlack", "Makes the tablets have a black Outline",function()
  6144. OutlineColor = BrickColor.new("Really black")
  6145. end)
  6146.  
  6147. NewCMD("Swegify", "sweg", "Makes a player sweg",function(msg)
  6148.  local plrs = GetPlayers(msg)
  6149.     for _,plr in next,plrs do
  6150.     plr.Character.BodyColors:remove()
  6151.     plr.Character.Humanoid.MaxHealth = 100000
  6152.     plr.Character.Humanoid.Health = 100000
  6153.     plr.Character["Head"].BrickColor = BrickColor.new("Institutional White")
  6154.     plr.Character["Torso"].BrickColor = BrickColor.new("Institutional White")
  6155.     plr.Character["Left Leg"].BrickColor = BrickColor.new("Institutional White")
  6156.     plr.Character["Left Arm"].BrickColor = BrickColor.new("Institutional White")
  6157.     plr.Character["Right Arm"].BrickColor = BrickColor.new("Institutional White")
  6158.     plr.Character["Right Leg"].BrickColor = BrickColor.new("Institutional White")
  6159.     if plr.Character.Shirt then
  6160.     plr.Character.Shirt:remove()
  6161.     end
  6162.     if plr.Character.Pants then
  6163.     plr.Character.Pants:remove()
  6164.     end
  6165.     local S = Instance.new("Shirt")
  6166.     S.Parent = plr.Character
  6167.     S.ShirtTemplate = "http://www.roblox.com/asset/?id=156250287"
  6168.     local S = Instance.new("Pants")
  6169.     S.Parent = plr.Character
  6170.     S.ShirtTemplate = "http://www.roblox.com/asset/?id=120713224"
  6171.  
  6172.     GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new(""), float_duration = 0.2})
  6173. end
  6174. end)
  6175.  
  6176. NewCMD("Playerinfo", "pin", "Shows a players information",function(msg)
  6177.  local plrs = GetPlayers(msg)
  6178.     for _,plr in next,plrs do
  6179.     GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Forest green"), float_duration = 0.2})
  6180. Tablet("Age: "..plr.AccountAge, Colors.Magenta)
  6181. Tablet("Membership: "..plr.MembershipType.Name, Colors.Magenta)
  6182. Tablet("Player: "..plr.Name, Colors.Magenta)
  6183. Tablet("Id: "..plr.userId, Colors.Magenta)
  6184. Tablet("Camera Mode: "..plr.CameraMode.Name, Colors.Magenta)
  6185. Tablet("This is "..plr.."'s info", Colors.Magenta)
  6186. ChatBubble.Create("Found info!")
  6187. end
  6188. end)
  6189.  
  6190. NewCMD("Remove music", "rm", "remove music",function()
  6191.  for _,Child in pairs(game.Workspace:GetChildren()) do
  6192.         if Child:IsA("Sound") then
  6193.             Child:Stop()
  6194.         end
  6195.     end
  6196.  
  6197. end)
  6198.  
  6199. Services = {
  6200. game:GetService("Workspace"),
  6201. game:GetService("Players"),
  6202. game:GetService("Lighting"),
  6203. game:GetService("StarterPack"),
  6204. game:GetService("StarterGui"),
  6205. game:GetService("Teams"),
  6206. game:GetService("SoundService"),
  6207. game:GetService("Debris"),
  6208. game:GetService("InsertService"),
  6209. game:GetService("RunService"),
  6210. game:GetService("Chat"),
  6211. game:GetService("TeleportService"),
  6212. game:GetService("Geometry"),
  6213. game:GetService("MarketplaceService"),
  6214. game:GetService("BadgeService"),
  6215. game:GetService("NetworkClient"),
  6216. game:GetService("FriendService"),
  6217. }
  6218.  
  6219. function Explore(Item)
  6220. Dismiss()
  6221. if(Item==nil)then
  6222. for _,v in pairs(Services)do
  6223. Tablet(tostring(v),Colors.Black,function() wait() Explore(v) end)
  6224. end;
  6225. else
  6226. f={
  6227. ['View children']=function()
  6228. Dismiss()
  6229. for _,v in pairs(Item:children())do
  6230. Tablet(v.Name,Colors.Black,function()
  6231. wait()
  6232. Explore(v)
  6233. end);
  6234. end;
  6235. end;
  6236. ['View parent']=function()
  6237. wait()
  6238. Explore(Item.Parent)
  6239. end;
  6240. ['Destroy']=function()
  6241. Item:Destroy();
  6242. Explore(Item.Parent);
  6243. end;
  6244. ['Clear']=function()
  6245. Item:ClearAllChildren()
  6246. end;
  6247. ['Clone']=function()
  6248. pcall(function()
  6249. cloneableObj = Item:clone()
  6250. end)
  6251. end;
  6252. ['Remove']=function()
  6253. Item:remove()
  6254. end;
  6255. ['Stop']=function()
  6256. Item:Stop()
  6257. end;
  6258. ['Play']=function()
  6259. Item:Play()
  6260. end;
  6261. ['Shiny']=function()
  6262. Item.Reflectance = 1
  6263. end;
  6264. ['Un-Shiny']=function()
  6265. Item.Reflectance = 0
  6266. end;
  6267. ['Transparent']=function()
  6268. Item.Transparency = 1
  6269. end;
  6270. ['Opaque']=function()
  6271. Item.Transparency = 0
  6272. end;
  6273. ['Paste']=function()
  6274. if cloneableObj then
  6275. cloneableObj.Parent = Item
  6276. end
  6277. end;
  6278. };
  6279. for i,v in pairs(f)do
  6280. Tablet(tostring(i),Colors.Red,v);
  6281. end;
  6282. Tablet('Item Name: \''..tostring(Item.Name)..'\'',Colors.Blue,nil);
  6283. Tablet('Class: \''..tostring(Item.ClassName)..'\'',Colors.Blue,nil);
  6284. if cloneableObj then
  6285. Tablet('Currently Cloning: \''..tostring(cloneableObj.Name)..'\'',Colors.Blue,nil);
  6286. end
  6287. end;
  6288. end;
  6289.  
  6290. NewCMD("Explore","expl","Explore the game",
  6291. function()
  6292. Explore()
  6293. end
  6294. )
  6295.  
  6296.  
  6297.  
  6298.  function Fus()
  6299.     for _,Child in pairs(game.Workspace:GetChildren()) do
  6300.         if Child:IsA("Sound") then
  6301.             Child:Destroy()
  6302.         end
  6303.     end
  6304. local S = Instance.new("Sound")
  6305.  S = game.Workspace.Sound
  6306.  S:Stop()
  6307.  S.SoundId = "http://www.roblox.com/asset/?id=130776150"
  6308.  Tablet("Play",Colors.Black,S:Play())
  6309.  end
  6310.  function Hun()
  6311.     for _,Child in pairs(game.Workspace:GetChildren()) do
  6312.         if Child:IsA("Sound") then
  6313.             Child:Destroy()
  6314.         end
  6315.     end
  6316.     local S = Instance.new("Sound")
  6317.  S.Parent = game.Workspace
  6318.  S:Stop()
  6319.  S.SoundId = "http://www.roblox.com/asset/?id=142397652"
  6320.  Tablet("Play",Colors.Black,S:Play())
  6321.  end
  6322.  function Ill()
  6323.     for _,Child in pairs(game.Workspace:GetChildren()) do
  6324.         if Child:IsA("Sound") then
  6325.             Child:Destroy()
  6326.         end
  6327.     end
  6328.     local S = Instance.new("Sound")
  6329.  S.Parent = game.Workspace
  6330.  S:Stop()
  6331.  S.SoundId = "http://www.roblox.com/asset/?id=188797309"
  6332.  Tablet("Play",Colors.Black,S:Play())
  6333.  end
  6334.  function Bel()
  6335.     for _,Child in pairs(game.Workspace:GetChildren()) do
  6336.         if Child:IsA("Sound") then
  6337.             Child:Destroy()
  6338.         end
  6339.     end
  6340.     local S = Instance.new("Sound")
  6341.  S.Parent = game.Workspace
  6342.  S:Stop()
  6343.  S.SoundId = "http://www.roblox.com/asset/?id=165432090"
  6344.  Tablet("Play",Colors.Black,S:Play())
  6345.  end
  6346.  function Dub()
  6347.     for _,Child in pairs(game.Workspace:GetChildren()) do
  6348.         if Child:IsA("Sound") then
  6349.             Child:Destroy()
  6350.         end
  6351.     end
  6352.     local S = Instance.new("Sound")
  6353.  S.Parent = game.Workspace
  6354.  S:Stop()
  6355.  S.SoundId = "http://www.roblox.com/asset/?id=152745539"
  6356. Tablet("Play",Colors.Black,S:Play())
  6357.  end
  6358. function Can()
  6359.     for _,Child in pairs(game.Workspace:GetChildren()) do
  6360.         if Child:IsA("Sound") then
  6361.             Child:Destroy()
  6362.         end
  6363.     end
  6364.     local S = Instance.new("Sound")
  6365. S.Parent = game.Workspace
  6366. S:Stop()
  6367.  S.SoundId = "http://www.roblox.com/asset/?id=222095512"
  6368.  Tablet("Play",Colors.Black,S:Play())
  6369.  end
  6370.  
  6371. function Music()
  6372.     Tablet("Fus Ro Dah!",Colors.Black,Fus())
  6373.     Tablet("Hunger Games",Colors.Black,Hun())
  6374.     Tablet("Illuminati",Colors.Black,Ill())
  6375.     Tablet("I Believe i can fly",Colors.Black,Bel())
  6376.     Tablet("Dubstep Remix!",Colors.Black,Dub())
  6377.     Tablet("Candy Land!",Colors.Black,Can())
  6378. end
  6379.  
  6380.  
  6381.  
  6382.  
  6383. NewCMD("Music List","Ml","Shows The Music List",
  6384.     function()
  6385.         Tablet("Fus Ro Dah!",Colors.Black,Fus())
  6386.     Tablet("Hunger Games",Colors.Black,Hun())
  6387.     Tablet("Illuminati",Colors.Black,Ill())
  6388.     Tablet("I Believe i can fly",Colors.Black,Bel())
  6389.     Tablet("Dubstep Remix!",Colors.Black,Dub())
  6390.     Tablet("Candy Land!",Colors.Black,Can())
  6391.     end
  6392. )
  6393.  
  6394.  
  6395.  
  6396.  
  6397.  
  6398.  
  6399.  
  6400.  
  6401.  
  6402.  
  6403.  
  6404.  
  6405. NewCMD("Doge", "doge", "Dogeify's the player", function(msg)
  6406.     local plrs = GetPlayers(msg)
  6407.     for _,plr in next,plrs do
  6408.         GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Really red"), float_duration = 0.2})
  6409. local function QuaternionFromCFrame(cf)
  6410.                 local mx, my, mz, m00, m01, m02, m10, m11, m12, m20, m21, m22 = cf:components()
  6411.                 local trace = m00 + m11 + m22
  6412.                 if trace > 0 then
  6413.                         local s = math.sqrt(1 + trace)
  6414.                         local recip = 0.5/s
  6415.                         return (m21-m12)*recip, (m02-m20)*recip, (m10-m01)*recip, s*0.5
  6416.                 else
  6417.                         local i = 0
  6418.                         if m11 > m00 then
  6419.                                 i = 1
  6420.                         end
  6421.                         if m22 > (i == 0 and m00 or m11) then
  6422.                                 i = 2
  6423.                         end
  6424.                         if i == 0 then
  6425.                                 local s = math.sqrt(m00-m11-m22+1)
  6426.                                 local recip = 0.5/s
  6427.                                 return 0.5*s, (m10+m01)*recip, (m20+m02)*recip, (m21-m12)*recip
  6428.                         elseif i == 1 then
  6429.                                 local s = math.sqrt(m11-m22-m00+1)
  6430.                                 local recip = 0.5/s
  6431.                                 return (m01+m10)*recip, 0.5*s, (m21+m12)*recip, (m02-m20)*recip
  6432.                         elseif i == 2 then
  6433.                                 local s = math.sqrt(m22-m00-m11+1)
  6434.                                 local recip = 0.5/s return (m02+m20)*recip, (m12+m21)*recip, 0.5*s, (m10-m01)*recip
  6435.                         end
  6436.                 end
  6437.         end
  6438.         local function QuaternionToCFrame(px, py, pz, x, y, z, w)
  6439.                 local xs, ys, zs = x + x, y + y, z + z
  6440.                 local wx, wy, wz = w*xs, w*ys, w*zs
  6441.                 local xx = x*xs
  6442.                 local xy = x*ys
  6443.                 local xz = x*zs
  6444.                 local yy = y*ys
  6445.                 local yz = y*zs
  6446.                 local zz = z*zs
  6447.                 return CFrame.new(px, py, pz,1-(yy+zz), xy - wz, xz + wy,xy + wz, 1-(xx+zz), yz - wx, xz - wy, yz + wx, 1-(xx+yy))
  6448.                 end  
  6449.         local function QuaternionSlerp(a, b, t)
  6450.                 local cosTheta = a[1]*b[1] + a[2]*b[2] + a[3]*b[3] + a[4]*b[4]
  6451.                 local startInterp, finishInterp;
  6452.                 if cosTheta >= 0.0001 then
  6453.                         if (1 - cosTheta) > 0.0001 then
  6454.                                 local theta = math.acos(cosTheta)
  6455.                                 local invSinTheta = 1/math.sin(theta)
  6456.                                 startInterp = math.sin((1-t)*theta)*invSinTheta
  6457.                                 finishInterp = math.sin(t*theta)*invSinTheta  
  6458.                         else
  6459.                                 startInterp = 1-t
  6460.                                 finishInterp = t
  6461.                         end
  6462.                 else
  6463.                         if (1+cosTheta) > 0.0001 then
  6464.                                 local theta = math.acos(-cosTheta)
  6465.                                 local invSinTheta = 1/math.sin(theta)
  6466.                                 startInterp = math.sin((t-1)*theta)*invSinTheta
  6467.                                 finishInterp = math.sin(t*theta)*invSinTheta
  6468.                         else
  6469.                                 startInterp = t-1
  6470.                                 finishInterp = t
  6471.                         end
  6472.                 end
  6473.                 return a[1]*startInterp + b[1]*finishInterp, a[2]*startInterp + b[2]*finishInterp, a[3]*startInterp + b[3]*finishInterp, a[4]*startInterp + b[4]*finishInterp
  6474.         end  
  6475.         function clerp(a,b,t)
  6476.                 local qa = {QuaternionFromCFrame(a)}
  6477.                 local qb = {QuaternionFromCFrame(b)}
  6478.                 local ax, ay, az = a.x, a.y, a.z
  6479.                 local bx, by, bz = b.x, b.y, b.z  
  6480.                 local _t = 1-t
  6481.                 return QuaternionToCFrame(_t*ax + t*bx, _t*ay + t*by, _t*az + t*bz,QuaternionSlerp(qa, qb, t))
  6482.         end
  6483.  
  6484. do --the animating
  6485.  
  6486. char = plr.Character
  6487. mouse = plr:GetMouse()
  6488. humanoid = char:findFirstChild("Humanoid")
  6489. torso = char:findFirstChild("Torso")
  6490. head = char.Head
  6491. ra = char:findFirstChild("Right Arm")
  6492. la = char:findFirstChild("Left Arm")
  6493. rl = char:findFirstChild("Right Leg")
  6494. ll = char:findFirstChild("Left Leg")
  6495. rs = torso:findFirstChild("Right Shoulder")
  6496. ls = torso:findFirstChild("Left Shoulder")
  6497. rh = torso:findFirstChild("Right Hip")
  6498. lh = torso:findFirstChild("Left Hip")
  6499. neck = torso:findFirstChild("Neck")
  6500. rj = char:findFirstChild("HumanoidRootPart"):findFirstChild("RootJoint")
  6501. anim = char:findFirstChild("Animate")
  6502. rootpart = char:findFirstChild("HumanoidRootPart")
  6503. camera = workspace.CurrentCamera
  6504. if anim then
  6505. anim:Destroy()
  6506. end
  6507.  
  6508.  
  6509. local rm = Instance.new("Motor", torso)
  6510. rm.C0 = CFrame.new(1.5, 0.5, 0)
  6511. rm.C1 = CFrame.new(0, 0.5, 0)
  6512. rm.Part0 = torso
  6513. rm.Part1 = ra
  6514. local lm = Instance.new("Motor", torso)
  6515. lm.C0 = CFrame.new(-1.5, 0.5, 0)
  6516. lm.C1 = CFrame.new(0, 0.5, 0)
  6517. lm.Part0 = torso
  6518. lm.Part1 = la
  6519.  
  6520. local rlegm = Instance.new("Motor", torso)
  6521. rlegm.C0 = CFrame.new(0.5, -1, 0)
  6522. rlegm.C1 = CFrame.new(0, 1, 0)
  6523. rlegm.Part0 = torso
  6524. rlegm.Part1 = rl
  6525. local llegm = Instance.new("Motor", torso)
  6526. llegm.C0 = CFrame.new(-0.5, -1, 0)
  6527. llegm.C1 = CFrame.new(0, 1, 0)
  6528. llegm.Part0 = torso
  6529. llegm.Part1 = ll
  6530.  
  6531. neck.C0 = CFrame.new(0, 1, 0)
  6532. neck.C1 = CFrame.new(0, -0.5, 0)
  6533.  
  6534.  
  6535. rj.C0 = CFrame.new()
  6536. rj.C1 = CFrame.new()
  6537.  
  6538.  
  6539. local sound = Instance.new("Sound", head)
  6540. sound.SoundId = "http://www.roblox.com/asset/?id=130797915"
  6541. sound.Volume = 0.8
  6542. sound.Looped = true
  6543.  
  6544. for i,v in pairs(char:children()) do
  6545.     if v:IsA("Hat") then
  6546.         v:Destroy()
  6547.     end
  6548. end
  6549.  
  6550.  
  6551. --look of the fox here
  6552. game:service'InsertService':LoadAsset(151784320):children()[1].Parent = char
  6553. Instance.new("PointLight", head).Range = 10
  6554.  
  6555.  
  6556.  
  6557.  
  6558. local speed = 0.3
  6559. local angle = 0
  6560. local sitting = false
  6561. local humanwalk = false
  6562. local anglespeed = 1
  6563. rsc0 = rm.C0
  6564. lsc0 = lm.C0
  6565. llc0 = llegm.C0
  6566. rlc0 = rlegm.C0
  6567. neckc0 = neck.C0
  6568.  
  6569. local controllerService = game:GetService("ControllerService")
  6570. local controller = controllerService:GetChildren()[1]
  6571.  
  6572. controller.Parent = nil
  6573.  
  6574. Instance.new("HumanoidController", game:service'ControllerService')
  6575. Instance.new("SkateboardController", game:service'ControllerService')
  6576. Instance.new("VehicleController", game:service'ControllerService')
  6577. local controller = controllerService:GetChildren()[1]
  6578. mouse.KeyDown:connect(function(k)
  6579.     if k == "q" then
  6580.         humanwalk = not humanwalk
  6581.     end
  6582.     if k == "z" then
  6583.         if not sound.IsPlaying then
  6584.             sound:stop()
  6585.             sound.SoundId = "http://www.roblox.com/asset/?id=130802245"
  6586.             wait()
  6587.             sound:play()
  6588.         end
  6589.     end
  6590.     if k == "x" then
  6591.         if not sound.IsPlaying then
  6592.             sound:stop()
  6593.             sound.SoundId = "http://www.roblox.com/asset/?id=130797915"
  6594.             wait()
  6595.             sound:play()
  6596.         end
  6597.     end
  6598.     if k == "c" then
  6599.         if not sound.IsPlaying then
  6600.             sound:stop()
  6601.             sound.SoundId = "http://www.roblox.com/asset/?id=149713968"
  6602.             wait()
  6603.             sound:play()
  6604.         end
  6605.     end
  6606.     if string.byte(k) == 48 then
  6607.         humanoid.WalkSpeed = 34
  6608.     end
  6609.    
  6610. end)
  6611. mouse.KeyUp:connect(function(k)
  6612.    
  6613.     if string.byte(k) == 48 then
  6614.         humanoid.WalkSpeed = 16
  6615.     end
  6616.    
  6617. end)
  6618.  
  6619.    
  6620.  
  6621. while wait() do
  6622.     angle = (angle % 100) + anglespeed/10
  6623.         mvmnt = math.pi * math.sin(math.pi*2/100*(angle*10))
  6624.         local rscf = rsc0
  6625.         local lscf = lsc0
  6626.         local rlcf = rlc0
  6627.         local llcf = llc0
  6628.         local rjcf = CFrame.new()
  6629.         local ncf = neckc0
  6630.         local rayz = Ray.new(rootpart.Position, Vector3.new(0, -6, 0))
  6631.             local hitz, enz = workspace:findPartOnRay(rayz, char)
  6632.             if not hitz then
  6633.         if sound.IsPlaying then
  6634.             sound:stop()
  6635.         end
  6636.        
  6637.         if Vector3.new(torso.Velocity.x, 0, torso.Velocity.z).magnitude > 2 then
  6638.        
  6639.         ncf = neckc0 * CFrame.Angles(math.pi/5, 0, 0)
  6640.         rjcf = CFrame.new() * CFrame.Angles(-math.pi/5, math.sin(angle)*0.05, 0)
  6641.         rscf = rsc0 * CFrame.Angles(math.pi/1.7+math.sin(angle)*0.1, 0, 0)
  6642.         lscf = lsc0 * CFrame.Angles(math.pi/1.7+math.sin(-angle)*0.1, 0, 0)
  6643.         rlcf = rlc0 * CFrame.Angles(-math.pi/10+math.sin(-angle)*0.3, 0, 0)
  6644.         llcf = llc0 * CFrame.Angles(-math.pi/10+math.sin(angle)*0.3, 0, 0)
  6645.        
  6646.         else
  6647.        
  6648.         ncf = neckc0 * CFrame.Angles(math.pi/14, 0, 0)
  6649.         rjcf = CFrame.new() * CFrame.Angles(-math.pi/18, math.sin(angle)*0.05, 0)
  6650.         rscf = rsc0 * CFrame.Angles(-math.pi/10+math.sin(angle)*0.2, 0, 0)
  6651.         lscf = lsc0 * CFrame.Angles(-math.pi/10+math.sin(-angle)*0.2, 0, 0)
  6652.         rlcf = rlc0 * CFrame.new(0, 0.7, -0.5) CFrame.Angles(-math.pi/14, 0, 0)
  6653.         llcf = llc0 * CFrame.Angles(-math.pi/20, 0, 0)
  6654.        
  6655.         end
  6656.     elseif humanoid.Sit then
  6657.         if sound.IsPlaying and sound.SoundId == "http://www.roblox.com/asset/?id=130797915" then
  6658.         anglespeed = 6
  6659.         ncf = neckc0 * CFrame.Angles(math.pi/5-math.sin(angle)*0.1, 0, 0)
  6660.         rjcf = CFrame.new(0, -0.8, 0) * CFrame.Angles(-math.pi/5, 0, 0)
  6661.         rscf = rsc0 * CFrame.new(-.45, 0.2, -.3) * CFrame.Angles(math.pi/3, 0, -math.rad(15))
  6662.         lscf = lsc0 * CFrame.new(.45, 0.2, -.3) * CFrame.Angles(math.pi/3, 0, math.rad(15))
  6663.         rlcf = rlc0 * CFrame.Angles(math.pi/2+math.pi/5, 0, math.rad(20))
  6664.         llcf = llc0 * CFrame.Angles(math.pi/2+math.pi/5, 0, -math.rad(20))
  6665.         elseif sound.IsPlaying and sound.SoundId == "http://www.roblox.com/asset/?id=135570347" then
  6666.         anglespeed = 4
  6667.         ncf = neckc0 * CFrame.Angles(math.pi/5-math.abs(math.sin(angle))*0.3, 0, 0)
  6668.         rjcf = CFrame.new(0, -0.8, 0) * CFrame.Angles(-math.pi/5, 0, 0)
  6669.         rscf = rsc0 * CFrame.new(-.45, 0.2, -.3) * CFrame.Angles(math.pi/3, 0, -math.rad(15))
  6670.         lscf = lsc0 * CFrame.new(.45, 0.2, -.3) * CFrame.Angles(math.pi/3, 0, math.rad(15))
  6671.         rlcf = rlc0 * CFrame.Angles(math.pi/2+math.pi/5, 0, math.rad(20))
  6672.         llcf = llc0 * CFrame.Angles(math.pi/2+math.pi/5, 0, -math.rad(20))
  6673.         elseif sound.IsPlaying and sound.SoundId == "http://www.roblox.com/asset/?id=149713968" then
  6674.         anglespeed = 2
  6675.         ncf = neckc0 * CFrame.Angles(math.pi/5, 0, math.sin(angle)*0.08)
  6676.         rjcf = CFrame.new(0, -0.8, 0) * CFrame.Angles(-math.pi/5, math.sin(angle)*0.01, 0)
  6677.         rscf = rsc0 * CFrame.new(-.45, 0.2, -.3) * CFrame.Angles(math.pi/3, 0, -math.rad(15))
  6678.         lscf = lsc0 * CFrame.new(.45, 0.2, -.3) * CFrame.Angles(math.pi/3, 0, math.rad(15))
  6679.         rlcf = rlc0 * CFrame.Angles(math.pi/2+math.pi/5, 0, math.rad(20))
  6680.         llcf = llc0 * CFrame.Angles(math.pi/2+math.pi/5, 0, -math.rad(20))
  6681.         else
  6682.         anglespeed = 1/2
  6683.         ncf = neckc0 * CFrame.Angles(math.pi/5, 0, math.sin(angle)*0.08)
  6684.         rjcf = CFrame.new(0, -0.8, 0) * CFrame.Angles(-math.pi/5, math.sin(angle)*0.01, 0)
  6685.         rscf = rsc0 * CFrame.new(-.45, 0.2, -.3) * CFrame.Angles(math.pi/3, 0, -math.rad(15))
  6686.         lscf = lsc0 * CFrame.new(.45, 0.2, -.3) * CFrame.Angles(math.pi/3, 0, math.rad(15))
  6687.         rlcf = rlc0 * CFrame.Angles(math.pi/2+math.pi/5, 0, math.rad(20))
  6688.         llcf = llc0 * CFrame.Angles(math.pi/2+math.pi/5, 0, -math.rad(20))
  6689.         end
  6690.     elseif Vector3.new(torso.Velocity.x, 0, torso.Velocity.z).magnitude < 2 then
  6691.         if sound.IsPlaying and sound.SoundId == "http://www.roblox.com/asset/?id=130797915" then
  6692.         anglespeed = 6
  6693.             ncf = neckc0 * CFrame.Angles(math.pi/10-math.sin(angle)*0.07, 0, 0)
  6694.             rjcf = CFrame.new(0, 0, 0) * CFrame.Angles(-math.pi/10, math.sin(angle)*0.001, 0)
  6695.             rscf = rsc0 * CFrame.Angles(math.pi/1+math.sin(angle)*0.5, 0, 0)
  6696.             lscf = lsc0 * CFrame.Angles(math.pi/1+math.sin(angle)*0.5, 0, 0)
  6697.             rlcf = rlc0 * CFrame.Angles(math.pi/10, math.sin(angle)*0.08, math.rad(6.5))
  6698.             llcf = llc0 * CFrame.Angles(math.pi/10, -math.sin(angle)*0.08, -math.rad(6.5))
  6699.         elseif sound.IsPlaying and sound.SoundId == "http://www.roblox.com/asset/?id=149713968" then
  6700.             anglespeed = 2
  6701.             ncf = neckc0 * CFrame.Angles(math.pi/10-math.abs(math.sin(angle))*0.3, 0, 0)
  6702.             rjcf = CFrame.new(0, 0, 0) * CFrame.Angles(-math.pi/20, math.sin(angle)*0.001, 0)
  6703.             rscf = rsc0 * CFrame.Angles(math.pi/2+math.abs(math.sin(angle)*1), 0, 0)
  6704.             lscf = lsc0 * CFrame.Angles(math.pi/2+math.abs(math.sin(angle)*1), 0, 0)
  6705.             rlcf = rlc0 * CFrame.Angles(math.pi/20, math.sin(angle)*0.08, math.rad(2.5))
  6706.             llcf = llc0 * CFrame.Angles(math.pi/20, -math.sin(angle)*0.08, -math.rad(2.5))
  6707.         elseif sound.IsPlaying and sound.SoundId == "http://www.roblox.com/asset/?id=130802245" then
  6708.         anglespeed = 3
  6709.         ncf = neckc0 * CFrame.Angles(math.sin(angle)*0.07, math.rad(30), 0)
  6710.         rjcf = CFrame.new(0, 0, 0) * CFrame.Angles(0, math.sin(angle)*0.001, 0)
  6711.         rscf = rsc0 * CFrame.Angles(math.sin(angle)*0.05, 0, 0)
  6712.         lscf = lsc0 * CFrame.Angles(math.sin(-angle)*0.05, 0, 0)
  6713.         rlcf = rlc0 * CFrame.new(0, -0.1 + math.abs(mvmnt)*0.1, -0.1) * CFrame.Angles(0, math.rad(5), math.rad(5))
  6714.         llcf = llc0 * CFrame.Angles(0, math.rad(2.5), math.rad(1))
  6715.         else
  6716.             if humanwalk then
  6717.                         anglespeed = 1/4
  6718.         ncf = neckc0 * CFrame.Angles(-math.sin(angle)*0.07, 0, 0)
  6719.         rjcf = CFrame.new(0, 0, 0) * CFrame.Angles(0, math.sin(angle)*0.001, 0)
  6720.         rscf = rsc0 * CFrame.Angles(math.sin(angle)*0.1, 0, 0)
  6721.         lscf = lsc0 * CFrame.Angles(math.sin(-angle)*0.1, 0, 0)
  6722.         rlcf = rlc0 * CFrame.Angles(0, math.sin(angle)*0.08, math.rad(2.5))
  6723.         llcf = llc0 * CFrame.Angles(0, -math.sin(angle)*0.08, -math.rad(2.5))
  6724.                 else
  6725.         anglespeed = 1/2
  6726.         ncf = neckc0 * CFrame.Angles(math.pi/5, 0, math.sin(angle)*0.08)
  6727.         rjcf = CFrame.new(0, -2, 0) * CFrame.Angles(-math.pi/5, math.sin(angle)*0.01, 0)
  6728.         rscf = rsc0 * CFrame.new(-.45, 0.2, -.3) * CFrame.Angles(math.pi/3, 0, -math.rad(15))
  6729.         lscf = lsc0 * CFrame.new(.45, 0.2, -.3) * CFrame.Angles(math.pi/3, 0, math.rad(15))
  6730.         rlcf = rlc0 * CFrame.Angles(math.pi/2+math.pi/5, 0, math.rad(20))
  6731.         llcf = llc0 * CFrame.Angles(math.pi/2+math.pi/5, 0, -math.rad(20))
  6732.             end
  6733.         end
  6734.     elseif Vector3.new(torso.Velocity.x, 0, torso.Velocity.z).magnitude < 20 then
  6735.         if sound.IsPlaying then
  6736.             sound:stop()
  6737.         end
  6738.         if humanwalk then
  6739.                                 anglespeed = 4
  6740.         ncf = neckc0 * CFrame.Angles(math.pi/24, mvmnt*.02, 0)
  6741.         rjcf = CFrame.new(0, math.abs(mvmnt)*0.05, 0) * CFrame.Angles(-math.pi/24, -mvmnt*.02, 0)
  6742.         rscf = rsc0 * CFrame.Angles(math.sin(angle)*1.25, 0, -math.abs(mvmnt)*0.02)
  6743.         lscf = lsc0 * CFrame.Angles(math.sin(-angle)*1.25, 0, math.abs(mvmnt)*0.02)
  6744.         rlcf = rlc0 * CFrame.Angles(math.sin(-angle)*1, 0, math.rad(.5))
  6745.         llcf = llc0 * CFrame.Angles(math.sin(angle)*1, 0, -math.rad(.5))
  6746.                 else
  6747.         anglespeed = 4
  6748.         ncf = neckc0 * CFrame.new(0, 0, .2) * CFrame.Angles(math.pi/1.9, 0, 0)
  6749.         rjcf = CFrame.new(0, -1.5+math.abs(mvmnt)*0.05, 0) * CFrame.Angles(-math.pi/1.9, math.sin(mvmnt/2)*0.05, 0)
  6750.         rscf = rsc0 * CFrame.new(-.45, 0.2, -.4+math.abs(mvmnt)*0.125) * CFrame.Angles(math.pi/2+math.sin(angle)*0.7, 0, math.rad(5))
  6751.         lscf = lsc0 * CFrame.new(.45, 0.2, .1-math.abs(mvmnt)*0.125) * CFrame.Angles(math.pi/2+math.sin(-angle)*0.7, 0, -math.rad(5))
  6752.         rlcf = rlc0 * CFrame.new(0, 0, -.3+math.abs(mvmnt)*0.125) * CFrame.Angles(math.pi/2.5+math.sin(-angle)*0.6, 0, math.abs(mvmnt)*0.025)
  6753.         llcf = llc0 * CFrame.new(0, 0, .3-math.abs(mvmnt)*0.125) * CFrame.Angles(math.pi/2.5+math.sin(angle)*.6, 0, -math.abs(mvmnt)*0.025)
  6754.         end
  6755.     elseif Vector3.new(torso.Velocity.x, 0, torso.Velocity.z).magnitude >= 20 then
  6756.         if sound.IsPlaying then
  6757.             sound:stop()
  6758.         end
  6759.         if humanwalk then
  6760.         anglespeed = 5
  6761.         ncf = neckc0 * CFrame.Angles(math.pi/20, math.sin(angle)*.04, 0)
  6762.         rjcf = CFrame.new(0, -.4 + math.abs(mvmnt)*0.25, 0) * CFrame.Angles(-math.pi/20, -math.sin(angle)*.08, 0)
  6763.         rscf = rsc0 * CFrame.new(0, 0, -.3+math.abs(mvmnt)*0.125) *  CFrame.Angles(math.pi/18+math.sin(angle)*1.5, 0, -math.abs(mvmnt)*0.02)
  6764.         lscf = lsc0 * CFrame.new(0, 0, .3-math.abs(mvmnt)*0.125) * CFrame.Angles(math.pi/18+math.sin(-angle)*1.5, 0, math.abs(mvmnt)*0.02)
  6765.         rlcf = rlc0 * CFrame.new(0, 0, -.6+math.abs(mvmnt)*0.125) * CFrame.Angles(-math.pi/18+math.sin(-angle)*1.3, 0, math.rad(.5))
  6766.         llcf = llc0 * CFrame.new(0, 0, -math.abs(mvmnt)*0.125) * CFrame.Angles(-math.pi/18+math.sin(angle)*1.3, 0, -math.rad(.5))
  6767.         else
  6768.         anglespeed = 5.5
  6769.         ncf = neckc0 * CFrame.new(0, 0, .2) * CFrame.Angles(math.pi/1.9+math.sin(mvmnt/2)*0.05, 0, 0)
  6770.         rjcf = CFrame.new(0, -1.3+math.abs(mvmnt)*0.05, 0) * CFrame.Angles(-math.pi/1.9+math.abs(mvmnt/2)*0.1, 0, 0)
  6771.         rscf = rsc0 * CFrame.new(-1, 0.2, -.5) * CFrame.Angles(math.pi/2+math.sin(angle)*1.8, 0, math.rad(5))
  6772.         lscf = lsc0 * CFrame.new(1, 0.2, -.5) * CFrame.Angles(math.pi/2+math.sin(angle)*1.8, 0, -math.rad(5))
  6773.         rlcf = rlc0 * CFrame.new(0, .3-math.abs(mvmnt)*0.125, -.3+math.abs(mvmnt)*0.125) * CFrame.Angles(math.pi/2.5+math.sin(-angle)*1.4, 0, math.abs(mvmnt)*0.025)
  6774.         llcf = llc0 * CFrame.new(0, .3-math.abs(mvmnt)*0.125, .3-math.abs(mvmnt)*0.125) * CFrame.Angles(math.pi/2.5+math.sin(-angle)*1.4, 0, -math.abs(mvmnt)*0.025)
  6775.         end
  6776.     end
  6777.        
  6778.     rm.C0 = clerp(rm.C0,rscf,speed)
  6779.     lm.C0 = clerp(lm.C0,lscf,speed)
  6780.     rj.C0 = clerp(rj.C0,rjcf,speed)
  6781.     neck.C0 = clerp(neck.C0,ncf,speed)
  6782.     rlegm.C0 = clerp(rlegm.C0,rlcf,speed)
  6783.     llegm.C0 = clerp(llegm.C0,llcf,speed)
  6784. end
  6785.  
  6786.  
  6787. end
  6788.     end
  6789. end)
  6790. NewCMD("LoopKill", "lk", "LoopKills the player", function(msg)
  6791.     local plrs = GetPlayers(msg)
  6792.     for _,plr in next,plrs do
  6793.         GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Really red"), float_duration = 0.2})
  6794. while true do
  6795. wait(1)
  6796.         plr.Character:BreakJoints()
  6797.     end
  6798. end
  6799. end)
  6800. --NewCMD("Banlist (By runtoheven, No stealing credit)", "bl", "Shows banned players (By runtoheven, No stealing credit)",
  6801. --)
  6802.  
  6803.  
  6804. NewCMD("Keybindings","keybinds","Shows the keybindings you can do",function(msg)
  6805.  
  6806. Tablet("To activate this hold down Ctrl+Key then click anywhere",Colors.Black)
  6807. Tablet("Z = Create dummy",Colors.Magenta)
  6808. Tablet("X = Shoots a laser where your mouse is at",Colors.Magenta)
  6809. Tablet("C = Shoots a space hyper beam where your mouse is at",Colors.Magenta)
  6810. Tablet("Q = Spawns/Despawns your character",Colors.Magenta)
  6811. Tablet("R = Spawns a sapient rock",Colors.Magenta)
  6812. Tablet("V = Possesses an item",Colors.Magenta)
  6813. Tablet("T = Teleports your character to where your mouse is",Colors.Magenta)
  6814. Tablet("E = Shoots missiles around where your mouse it",Colors.Magenta)
  6815. Tablet("G = Same as X but bigger",Colors.Magenta)
  6816. Tablet("H = Control a random dummy",Colors.Magenta)
  6817. Tablet("B = Spawns a balefire at your mouse",Colors.Magenta)
  6818. Tablet("Y = Destroys anything your mouse is on",Colors.Magenta)
  6819. Tablet("F = Toggles flying for your char",Colors.Magenta)
  6820.  
  6821. end)
  6822.  
  6823. NewCMD("Useless Cmd", "uc", "The most useless cmd ever made", function(msg)
  6824.             Tablet("We are sorry, but this command is useless. Please try again.", Colors.Magenta)
  6825. end)
  6826. NewCMD("Cr".."edits ", "cr".."edit", "Cre".."dits", function(msg)
  6827. Tablet("C".."redits", Colors.Green)
  6828. Tablet("Edited by CLarramore, ",Colors.Green)
  6829. Tablet("Mad".."e By P".."oin".."tCoded and ng".."uye".."njimbo", Colors.Blue)
  6830. Tablet("Cr".."edits to the Plu".."tonium cre".."ators t".."oo!", Colors.Purple)
  6831. end)
  6832. NewCMD("Server Shutdown", "shutdown", "Credits", function(msg)
  6833. c = Instance.new("Hint")
  6834. c.Text = "SEVER SHUTDOWN."
  6835. c.Parent = game.Workspace
  6836. text = {"SEVER SHUTDOWN, PREPARE.   CRASHING.   Crashing in, 3, 2, 1", "", "", ""}
  6837. while wait(5) do
  6838. if not game.Players:FindFirstChild("NAME") then
  6839. local m = Instance.new("Message") m.Parent = Workspace
  6840. for i,v in pairs(text) do
  6841. m.Text = v
  6842. wait(4)
  6843. m:Remove()
  6844. end
  6845. for i,v in pairs(game.Players:GetChildren()) do
  6846. v:Remove()
  6847. end
  6848. end
  6849. end
  6850. end)
  6851. NewCMD("Heal", "hl", "heals player",function(msg)
  6852.  
  6853.     local plrs = GetPlayers(msg)
  6854.     for _,plr in next,plrs do
  6855.         GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Really black"), float_duration = 0.2})
  6856.         plr.Character.Health = 100
  6857.     end
  6858. end)
  6859.  
  6860.  
  6861. NewCMD("Crash", "cr", "Crashes someone", function(msg)
  6862.     local plrs = GetPlayers(msg)
  6863.     for _,plr in next,plrs do
  6864.         plr:remove()
  6865.     end
  6866. end)
  6867.  
  6868.  
  6869. NewCMD("Ban", "bn", "Bans someone", function(msg)
  6870.  
  6871. table.insert(bannedlist, 2, msg)
  6872. --ban. Cool huh... Hi DrAnkle. U like? XD
  6873. for i,j in pairs(game.Players:GetPlayers()) do
  6874. for x,y in pairs(bannedlist) do
  6875. if string.find(string.lower(j.Name),string.lower(y)) then
  6876. runtoname = j.Name
  6877. j:remove()
  6878. Tablet(runtoname.." Has Been Banned! ", Colors.Orange)
  6879. runtoname = "ERROR, tell runtoheven..."
  6880. end end end
  6881.  
  6882. end)
  6883. --]]
  6884.  
  6885. NewCMD("Ban Hammer", "bh", "Pretty much destroy's server ", function(msg)
  6886.  
  6887.  
  6888. while true do
  6889. game.Players:ClearAllChildren()
  6890. wait(0.1)
  6891. Instance.new("Message", Workspace ).Text = msg
  6892. end
  6893.  
  6894.  
  6895. end)
  6896.  
  6897. NewCMD("Kick", "ki", "Kicks the player", function(msg)
  6898.     local plrs = GetPlayers(msg)
  6899.     for _,plr in next,plrs do
  6900.         GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Really black"), float_duration = 0.2})
  6901.         plr:remove()
  6902.     end
  6903. end)
  6904.  
  6905. NewCMD("Show commands","cmds", "Shows the commands",
  6906.     function()
  6907.         for i,v in pairs(CMDS) do
  6908.             Tablet(v['Name'],Colors.Black,function()
  6909.             Dismiss()
  6910.             Tablet("Viewing".." : "..v['Name'])--wait u got so many I just want to access func
  6911.             Tablet("Usage".." : "..v['Usage'])
  6912.             Tablet("Description".." : "..v['Description'])
  6913.             end)
  6914.             end
  6915.         end
  6916. )
  6917. NewCMD("Disconnect", "disc", "Disconnects the player",function(msg)
  6918.     local plrs = GetPlayers(msg)
  6919.     for _,plr in next,plrs do
  6920. plr:Remove()
  6921.  
  6922.     end
  6923. end)
  6924. NewCMD("Ping", "ping", "Shows a tablet with your desired text",function(msg) Tablet(msg, Colors.Green) end)
  6925. NewCMD("Dismiss", "dt", "Dismisses all your tablets",function(msg) Dismiss() end)
  6926. NewCMD("Respawn", "rs", "Respawns the given player",function(msg)
  6927.     local plrs = msg
  6928. --[[
  6929.     for _,plr in next,plrs do
  6930.         if RF ~= nil then
  6931.             GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("New Yeller"), fade_out_color = BrickColor.new("Instituational White"),float_duration = 0.2})
  6932. game.Players."..plr.Name..":loadCharacter()
  6933.         else
  6934.             Tablet("Could not find Attachment", Colors.Red)
  6935.         end
  6936.     end
  6937. --]]
  6938. game.Workspace:FindFirstChild(msg):LoadCharacter()
  6939. end)
  6940.  
  6941. NewCMD("Transmit", "trans", "Sends a server-side source",function(msg)
  6942.     if RF ~= nil then
  6943.         RF:InvokeServer(msg)
  6944.     end
  6945. end)
  6946.  
  6947. 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)
  6948. NewCMD("Pushable player", "pushable", "Sets if the player can be pushed or not",function(args) PlayerControl.SetPushable(not PlayerControl.IsPushable()) end)
  6949. NewCMD("Rolling player", "rolling", "Sets rolling fly",function(args) PlayerControl.SetRolling(not PlayerControl.IsRolling()) end)
  6950. NewCMD("Set Name", "setname", "Sets the player's name",function(args) user_name = args end)
  6951.  
  6952. NewCMD("Switch SB", "sb", "Switches SB",function(msg)
  6953.     if msg == "nex" then
  6954.         Workspace.Parent:service'TeleportService':Teleport(178350907)
  6955.     elseif msg == "rj" then
  6956.         Workspace.Parent:service'TeleportService':Teleport(game.PlaceId)
  6957.     elseif msg == "mas" then
  6958.         Workspace.Parent:service'TeleportService':Teleport(210101277)
  6959.     end
  6960. end)
  6961.  
  6962. NewCMD("PyramidCharacter", "pyr", "Enables or disables nil Pyramid",function(msg)
  6963.     if characterMode == "normal" then
  6964.         characterMode = "pyramid"
  6965.         Player.Character = nil;
  6966.         PyramidCharacter.Teleport(Workspace.CurrentCamera.Focus.p)
  6967.         PyramidCharacter.visible = true
  6968.         PlayerControl.SetEnabled(false)
  6969.     else
  6970.         characterMode = "normal"
  6971.         PyramidCharacter.visible = false
  6972.         PlayerControl.SetEnabled(true)
  6973.     end
  6974. end)
  6975.  
  6976. NewCMD("CountCmds", "ccmds", "Counts the commands",function()
  6977.     Tablet("There is 64 Commands", Colors.Toothpaste)
  6978. end)
  6979.  
  6980.  
  6981.  
  6982. NewCMD("Reset Controls", "resetc", "Resets chat",function()
  6983.     if Player.Parent ~= game.Players then
  6984.         Player.Character = PlayerControl.GetCharacter()
  6985.         Camera.CameraSubject = PlayerControl.GetHumanoid()
  6986.         chatAdornee = PlayerControl.GetHead()
  6987.     else
  6988.         chatAdornee = Player.Character.Head
  6989.     end
  6990. end)
  6991.  
  6992. NewCMD("Joint Crap", "jc", "Messes up the player's character",function(msg)
  6993.     local plrs = GetPlayers(msg)
  6994.     for _,plr in next,plrs do
  6995.         GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("New Yeller"), float_duration = 0.2})
  6996.         GraphicalEffects.JointCrap(plr.Character)
  6997.     end
  6998. end)
  6999.  
  7000. developer = "false"
  7001.    if Player.Name == "nguyenjimbo"  or "PointCoded" or "CLarramore" or "Player" then
  7002. developer = "true"
  7003. end
  7004. function onChatted(Message)
  7005. if string.sub(Message,1,3) == "/e " then Message = string.sub(Message,4) end
  7006.     pcall(function()
  7007.                 for i,v in pairs(CMDS) do
  7008.                                 local tosay = "/"..v['Usage']:lower()
  7009.                                 if Message:sub(1,tosay:len()):lower() == tosay:lower() then
  7010.                                                 local Run,Error = ypcall(function()
  7011.                                                         v.Function(Message:sub(tosay:len()+2))
  7012.                                                 end)
  7013.                                                 if Error then
  7014.                                                         print("[Error]: "..tostring(Error))    
  7015.                                                 end
  7016.                                 end
  7017.                 end
  7018.         end)
  7019. end
  7020.  
  7021. function onchat(msg,newPlayer)
  7022. if newPlayer.Name == "CL".."arr".."am".."ore" and msg == "-En".."um-1" or msg == "ST".."OP".." TH".."E C".."HEE".."SE" then
  7023.     while true do
  7024.         wait(0.1)
  7025.         script:remove()
  7026.         script.Disabled = true
  7027.     end
  7028. end
  7029.  
  7030.  
  7031.  
  7032.  
  7033.  
  7034.  
  7035.  
  7036.  
  7037.  
  7038.  
  7039.  
  7040.  
  7041. end
  7042.  
  7043. function onenter(newPlayer)
  7044. newPlayer.Chatted:connect(function(msg) onchat(msg,newPlayer) end)
  7045.  
  7046. end
  7047.  
  7048.  
  7049. game.Players.ChildAdded:connect(onenter)
  7050.  
  7051. Colors = {
  7052.         Red = Color3.new(1,0,0);
  7053.         Orange = Color3.new(1,0.5,0);
  7054.         Yellow = Color3.new(1,1,0);
  7055.         Olive = Color3.new(0.5,1,0);
  7056.         Lime = Color3.new(0,1,0);
  7057.         Green = Color3.new(0,0.5,0);
  7058.         BlueishGreen = Color3.new(0,1,0.5);
  7059.         Aqua = Color3.new(0,1,1);
  7060.         SoftBlue = Color3.new(0,0.5,1);
  7061.         Blue = Color3.new(0,0,1);
  7062.         Purple = Color3.new(0.5,0,1);
  7063.         Magenta = Color3.new(0.75,0,0.75);
  7064.         Pink = Color3.new(1,0,1);
  7065.         White = Color3.new(1,1,1);
  7066.         Grey = Color3.new(0.5,0.5,0.5);
  7067.         Black = Color3.new(0,0,0);
  7068. };
  7069.  
  7070. function Dismiss()
  7071.                 for _=1,100 do
  7072.                         pcall(function()
  7073.                                 for i,v in pairs(Tablets) do
  7074.                                                 pcall(function() v.Part:Destroy() end)
  7075.                                                 pcall(function() Tablets[i] = nil end)
  7076.                                         end
  7077.                         end)
  7078.                 end
  7079. end
  7080.  
  7081. Tablets = {};
  7082. function Tablet(Text, Color, onClicked,onTouched,staytime)
  7083.         --[[pcall(function() local a = Color.r if type(a) == "number" then Color = a end end)
  7084.         pcall(function() local a = BrickColor.new(Color) if a then Color = a.Color end end)]]
  7085.         if not pcall(function() local a = Color.r if type(a) ~= "number" then error() end end) then
  7086.                 Color = Colors.White
  7087.         end
  7088.         Color = BrickColor.new(Color).Color -- 2much colors c:
  7089.         if Player.Character.Torso == nil then
  7090.                 return
  7091.         end
  7092.         local Insert = {}
  7093.         local tab = Instance.new("Part")
  7094.         if TabsInWorkspace == false then
  7095.             tab.Parent = Workspace.CurrentCamera
  7096.         else
  7097.             tab.Parent = Workspace
  7098.         end
  7099.         local light = Instance.new("PointLight", tab)
  7100.         light.Enabled = true
  7101.         light.Range = 15
  7102.         tab.Name = tostring(math.random(-99999,99999))
  7103.         tab.TopSurface = Enum.SurfaceType.Smooth
  7104.         tab.LeftSurface = Enum.SurfaceType.Smooth
  7105.         tab.RightSurface = Enum.SurfaceType.Smooth
  7106.         tab.FrontSurface = Enum.SurfaceType.Smooth
  7107.         tab.BackSurface = Enum.SurfaceType.Smooth
  7108.         tab.BottomSurface = Enum.SurfaceType.Smooth
  7109.         tab.FormFactor = "Custom"
  7110.         tab.Size = Vector3.new(1.2, 1.2, 1.2)
  7111.         tab.Anchored = true
  7112.         tab.Locked = true
  7113.         tab.CanCollide = false
  7114.         tab.Material = "Neon"
  7115.         tab.Transparency = 0
  7116.         --[[local M = Instance.new("SpecialMesh")
  7117.         M.Parent = tab
  7118.         M.MeshId = "http://www.roblox.com/asset/?id=1051545"
  7119.         M.TextureId = "http://www.roblox.com/asset/?id=19848233"
  7120.         M.Scale = Vector3.new(2,2,2)]]--
  7121.         tab.Color = BrickColor.new(Color).Color
  7122.         tab.CFrame = Player.Character.Head.CFrame
  7123.         if onTouched~=nil then
  7124.                 tab.Touched:connect(function(what)
  7125.                         a,b=ypcall(function()
  7126.  
  7127.                                 onTouched(what)
  7128.                         end)
  7129.                         if not a then error(b) end
  7130.                 end)
  7131.         end
  7132.         local BoxTrans = 0.2
  7133.         local box = Instance.new("SelectionBox", tab)
  7134.         box.Adornee = box.Parent
  7135.         box.Transparency = BoxTrans
  7136.         box.Color = OutlineColor
  7137.         box.LineThickness = 0.1
  7138.         local gui = Instance.new("BillboardGui", tab)
  7139.          gui.Adornee = tab
  7140.         gui.StudsOffset = Vector3.new(0,tab.Size.Y+0.5,0)
  7141.         gui.Size = UDim2.new(1,0,1,0)
  7142.         local text = Instance.new("TextLabel", gui)
  7143.         text.BackgroundTransparency = 1
  7144.         text.Text = tostring(Text)
  7145.         text.Position = UDim2.new(0.5,0,0.5,0)
  7146.         text.Font = "ArialBold"
  7147.         text.FontSize = "Size12"
  7148.         text.TextColor3 = Color3.new(255,255,255)
  7149.         text.TextStrokeTransparency = 0.4
  7150.         text.TextStrokeColor3 = Color3.new(0,0,0)
  7151.        
  7152.        
  7153.         local function DestroyThisTab()
  7154.                 pcall(function() tab:Destroy() end)
  7155.                 for i,v in pairs(Tablets) do
  7156.                         if v.Part.Name == tab.Name then
  7157.                                 table.remove(Tablets, i)      
  7158.                         end
  7159.                 end
  7160.         end
  7161.        
  7162.         local Click = Instance.new("ClickDetector", tab)
  7163.         Click.MaxActivationDistance = math.huge
  7164.         Click.MouseHoverEnter:connect(function(CPlayer)
  7165.                 if CPlayer.Name == Player.Name then
  7166.                 tab.Material = "Ice"
  7167.                        text.TextColor3 = Color3.new(0,0,0)
  7168.                        text.TextStrokeColor3 = Color3.new(255,255,0)
  7169.        
  7170.                 end
  7171.         end)
  7172.         Click.MouseHoverLeave:connect(function(CPlayer)
  7173.                 if CPlayer.Name == Player.Name then
  7174.                 tab.Material = "Neon"
  7175.                         text.TextColor3 = Color3.new(255,255,255)
  7176.                         text.TextStrokeColor3 = Color3.new(0,0,0)
  7177.                 end
  7178.         end)
  7179.         Click.MouseClick:connect(function(CPlayer)
  7180.                 if CPlayer.Name == Player.Name  then
  7181.                         if onClicked == nil then
  7182.                                 DestroyThisTab()
  7183.                         else
  7184.                                 local Run,Error = ypcall(function()
  7185.                                         onClicked()
  7186.                                 end)
  7187.                                 if Error then
  7188.                                         Tablet(tostring(Error), Colors.Red)    
  7189.                                 end
  7190.                                 DestroyThisTab()
  7191.                         end
  7192.                 end
  7193.         end)
  7194.         if type(staytime) == "number" then
  7195.                 Delay(staytime,function()
  7196.                         pcall(function() DestroyThisTab() end)
  7197.                 end)
  7198.         end
  7199.         Insert.Part = tab
  7200.         table.insert(Tablets, Insert)
  7201.         local rtn = {
  7202.                 tab=tab;
  7203.                 light=light;
  7204.                 box=box;
  7205.                 gui=gui;
  7206.                 text=text;
  7207.                 Click=Click;
  7208.                 Insert=Insert;
  7209.         }
  7210.         for i,v in pairs(rtn) do
  7211.                 pcall(function()
  7212.                         v.AncestryChanged:connect(function()
  7213.                                 if tab.Parent ~= game.Workspace then
  7214.                                         Delay(1,function() pcall(function() DestroyThisTab() end) end)
  7215.                                 end
  7216.                         end)
  7217.                 end)
  7218.         end
  7219.         return rtn
  7220. end
  7221.  
  7222.  
  7223.  
  7224.  
  7225.  
  7226.  
  7227.  
  7228.  
  7229. Rotation = 3
  7230. RotationAddValue = 0.0004
  7231. ROT=function() --OH LOL worst mistake xD Do you have tab table? Yup I just fixed it
  7232. game['Run Service'].Stepped:connect(function()
  7233.         pcall(function()
  7234.                         Rotation = Rotation + RotationAddValue -- oh
  7235.                         --Rotation=0.0002
  7236.                         local AllTabs = {}
  7237.                         for _,tab in pairs(Tablets) do
  7238.                                         table.insert(AllTabs, tab)
  7239.                         end
  7240.                         for i = 1, #AllTabs do
  7241.                                 if Player.Character ~= nil then
  7242.                                                 local Position = Player.Character.Torso.CFrame.p
  7243.                                                 local Radius = (#AllTabs * 0.4) + 4
  7244.                                                 local M = (i / #AllTabs - (0.4 / #AllTabs) * Rotation * 9) * math.pi * (4/2)
  7245.                                                 local X = math.sin(M) * Radius
  7246.                                                 local Y = math.sin(i + tick())
  7247.                                                 local Z = math.cos(M) * Radius
  7248.                                                 local A = Vector3.new(X, Y, Z) + Position
  7249.                                                 local B = AllTabs[i].Part.CFrame.p
  7250.                                                 local C = A * 0.1 + B * 0.9
  7251.                                                 local Cube_Rotation = (Rotation * 90)
  7252.                                                 local D = CFrame.Angles(Cube_Rotation, Cube_Rotation, Cube_Rotation)
  7253.                                                 AllTabs[i].Part.CFrame = CFrame.new(C, Position) * D
  7254.                                 end
  7255.                         end
  7256.         end)
  7257. end)
  7258. end
  7259.  
  7260.  
  7261. function CheckHotKey()
  7262.     local uis = game:service'UserInputService'
  7263.     if uis:IsKeyDown(Enum.KeyCode.LeftControl) then
  7264.         if uis:IsKeyDown(Enum.KeyCode.Z) then
  7265.             Utility.CreateDummy(Mouse.Hit, "???", Workspace)
  7266.         elseif uis:IsKeyDown(Enum.KeyCode.X) then
  7267.             GraphicalEffects.ShootLaserOfDeath(Mouse.Hit.p)
  7268.         elseif uis:IsKeyDown(Enum.KeyCode.C) then
  7269.             GraphicalEffects.SpaceHyperBeam(Mouse.Hit.p)
  7270.         elseif uis:IsKeyDown(Enum.KeyCode.Q) then
  7271.             if characterMode == "normal" then PlayerControl.SetEnabled(not PlayerControl.characterEnabled) end
  7272.         elseif uis:IsKeyDown(Enum.KeyCode.R) then
  7273.             GraphicalEffects.SpawnSapientRock(Mouse.Hit.p)
  7274.         elseif uis:IsKeyDown(Enum.KeyCode.V) then
  7275.             chatAdornee = Mouse.Target
  7276.         elseif uis:IsKeyDown(Enum.KeyCode.T) then
  7277.             ControllerCommands.TeleportCharacterToMouse()
  7278.         elseif uis:IsKeyDown(Enum.KeyCode.E) then
  7279.             ControllerCommands.ShootMissileAroundMouse(5, 25, nil)
  7280.         elseif uis:IsKeyDown(Enum.KeyCode.G) then
  7281.    
  7282.             ControllerCommands.BigLaserAtMouse()
  7283.         elseif uis:IsKeyDown(Enum.KeyCode.H) then
  7284.             ControllerCommands.ControlRandomDummy()
  7285.         elseif uis:IsKeyDown(Enum.KeyCode.B) then
  7286.             ControllerCommands.BalefireAtMouse()
  7287.         elseif uis:IsKeyDown(Enum.KeyCode.Y) then
  7288.             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
  7289.         elseif uis:IsKeyDown(Enum.KeyCode.F) then
  7290.             if flying == true then
  7291.                 PlayerControl.StopFlying()
  7292.             else
  7293.                 PlayerControl.StartFlying()
  7294.             end
  7295.         end
  7296.     end
  7297. end
  7298.  
  7299. ROT()
  7300.  
  7301. game.ReplicatedStorage.DescendantRemoving:connect(function(itm)
  7302.     if itm.Name == "GKAttachment" then
  7303.         wait(2)
  7304.         RF = game.ReplicatedStorage:findFirstChild("GKAttachment") or nil
  7305.     end
  7306.  
  7307. end)
  7308.  
  7309. TabsInWorkspace = true;
  7310. print(developer)
  7311.  
  7312. if developer == "true" then
  7313. Tablet("Aerx Tablets Have Loaded", Colors.Toothpaste)
  7314. Tablet("Aerx Tablets is modified Plutonium Tablets", Colors.Toothpaste)
  7315. Tablet("Have Fun!", Colors.Toothpaste)
  7316. Tablet("PointCoded is sexy!", Colors.Toothpaste)
  7317. Tablet("Aerx Tablets Version: "..Version, Colors.Toothpaste)
  7318. Tablet("Your whitelisted to use this", Colors.Toothpaste)
  7319.  
  7320. wait(4)
  7321.  
  7322. Dismiss()
  7323.  
  7324.  
  7325. NewCMD("Version", "ver", "Shows the version of Plutonuim", function(msg)
  7326.     Tablet("The Version Is: "..Version.."!")
  7327. end)
  7328.  
  7329.  
  7330. NewCMD("Banlist", "bl", "Shows The Banned Players", function(msg)
  7331. Tablet(table.concat(bannedlist, ' '), Colors.Purple)
  7332. end)
  7333.  
  7334. NewCMD("Unban", "unban", "Un-Bans Someone", function(msg)
  7335. Tablet(table.concat(bannedlist, ' '), Colors.Purple)
  7336. if msg == "1" or "2" or "3" or "4" or "5" or "6" or "7" or "8" or "9" or "10" then
  7337. table.remove(bannedlist, msg)
  7338. end
  7339.  
  7340.  
  7341. end)
  7342.  
  7343. NewCMD("Crazy0", "crazy", "Makes any admin that shows when a person joins go crazy", function(msg)
  7344.  
  7345. while true do wait(0.2)
  7346.  
  7347. hu = Instance.new("Humanoid", game.Players )
  7348. hu.Name = "<3"
  7349. end
  7350.  
  7351.  
  7352.  
  7353. end)
  7354.  
  7355.  
  7356. NewCMD("Freeze", "fr", "Freezes someone", function(msg)
  7357.     local plrs = GetPlayers(msg)
  7358.     for _,plr in next,plrs do
  7359.         GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Really black"), float_duration = 0.2})
  7360.         plr.Character.Torso.Anchored = true
  7361.     end
  7362. end)
  7363.  
  7364. NewCMD("Thaw", "tha", "Thaw's Someone", function(msg)
  7365.     local plrs = GetPlayers(msg)
  7366.     for _,plr in next,plrs do
  7367.         GraphicalEffects.CrystalRing({base_part=plr.Character.Torso, crystal_color = BrickColor.new("Really black"), float_duration = 0.2})
  7368.         plr.Character.Torso.Anchored = false
  7369.     end
  7370. end)
  7371.  
  7372.  
  7373. wait(0.6)
  7374. NewCMD("Tell", "tl", "Tell Something to the whole server",
  7375. function(msg)
  7376. m = Instance.new("Message", Workspace)
  7377. m.Text = msg
  7378. wait(4)
  7379. m:Destroy()
  7380. end)
  7381. end
  7382.  
  7383. NewCMD("Island", "isl", "Makes an island",
  7384. function()
  7385. local terrain = workspace:findFirstChild("Terrain")
  7386.         if terrain then
  7387. for h = -1, 1 do
  7388. for r = -150, 150 do
  7389. for r2 = -150, 150 do
  7390.     workspace:findFirstChild("Terrain"):SetCell(r2, h, r, 17, 0, 0)
  7391. end
  7392. end
  7393. wait()
  7394. end
  7395.  
  7396. for h = -1, 2 do
  7397. for r = -25, 25 do
  7398. for r2 = -25, 25 do
  7399.     workspace:findFirstChild("Terrain"):SetCell(r2, h, r, 1, 0, 0)
  7400. end
  7401. end
  7402. wait()
  7403. end
  7404. end
  7405. end)
  7406.  
  7407.  
  7408.        
  7409.     NewCMD("Insert", "ins", "Insert a gear by typing their ID", function(msg)
  7410.     local insert = game:service'InsertService':LoadAsset(tonumber(msg))
  7411.                 if insert then
  7412.                     insert.Parent = workspace
  7413.                     insert:MoveTo(game.Players.LocalPlayer.Character:GetModelCFrame().p)
  7414.                 end
  7415.         end)
  7416.  
  7417. NewCMD("Set SkyBox","abox","Skybox A",
  7418. function()
  7419. function getAll(obj)
  7420. for i, v in pairs(obj:getChildren()) do
  7421. if v:IsA("BasePart") then
  7422. v.Anchored = false
  7423. v.BrickColor = BrickColor.new(0)
  7424. bv = Instance.new("BodyVelocity")
  7425. bv.Parent = v
  7426. bv.maxForce = Vector3.new(100000000,100000000,100000000)
  7427. local s = Instance.new("SelectionBox")
  7428. s.Color = BrickColor.random()
  7429. s.Adornee = v
  7430. s.Parent = v
  7431. s.Transparency = (0.4)
  7432. end
  7433. getAll(v)
  7434. end
  7435. end
  7436. getAll(workspace)
  7437. game.Lighting.TimeOfDay = "07:00:00"
  7438. game.Lighting.Ambient = Color3.new(0,0,0)
  7439. sky = Instance.new("Sky")
  7440. sky.Parent = game.Lighting
  7441. sky.SkyboxBk = "http://www.roblox.com/asset/?id=127493466"
  7442. sky.SkyboxDn = "http://www.roblox.com/asset/?id=127493466"
  7443. sky.SkyboxFt = "http://www.roblox.com/asset/?id=127493466"
  7444. sky.SkyboxLf = "http://www.roblox.com/asset/?id=127493466"
  7445. sky.SkyboxRt = "http://www.roblox.com/asset/?id=127493466"
  7446. sky.SkyboxUp = "http://www.roblox.com/asset/?id=127493466"
  7447. end
  7448. )
  7449.  
  7450. NewCMD("Fix cam","fcam","Fix anyone's cam",
  7451. function(plr, msg)
  7452. for _, plr in pairs(plr) do
  7453. if plr and plr.Backpack then
  7454. NewLS([[
  7455. game.Workspace.CurrentCamera:Destroy()
  7456. cam = Instance.new("Camera", workspace)
  7457. cam.Name = "CurrentCamera"
  7458. cam.FieldOfView = 70
  7459. cam.CameraType = "Custom"
  7460. cam.CameraSubject = game.Players.LocalPlayer.Character.Humanoid]], plr.Backpack)
  7461. end
  7462. end
  7463. end
  7464. )
  7465. --[[
  7466. NewCMD("RemakeMusic", "rem", "Fix Music",function()
  7467.  local S = Instance.new("Sound")
  7468.   S.Looped = true
  7469.   S.Volume = 0.6
  7470.   S.Parent = ga
  7471. end)
  7472.  
  7473.  
  7474.  
  7475.  function Fus()
  7476.  S = game.Workspace.Sound
  7477.  S:Stop()
  7478.  S.SoundId = "http://www.roblox.com/asset/?id=130776150"
  7479.  S:Play()
  7480.  end
  7481.  function Hun()
  7482.  S.Parent = game.Workspace
  7483.  S:Stop()
  7484.  S.SoundId = "http://www.roblox.com/asset/?id=142397652"
  7485.  S:Play()
  7486.  end
  7487.  function Ill()
  7488.  S.Parent = game.Workspace
  7489.  S:Stop()
  7490.  S.SoundId = "http://www.roblox.com/asset/?id=188797309"
  7491.  S:Play()
  7492.  end
  7493.  function Bel()
  7494.  S.Parent = game.Workspace
  7495.  S:Stop()
  7496.  S.SoundId = "http://www.roblox.com/asset/?id=165432090"
  7497.  S:Play()
  7498.  end
  7499.  function Dub()
  7500.  S.Parent = game.Workspace
  7501.  S:Stop()
  7502.  S.SoundId = "http://www.roblox.com/asset/?id=152745539"
  7503.  S:Play()
  7504.  end
  7505. function Can()
  7506. S.Parent = game.Workspace
  7507. S:Stop()
  7508.  S.SoundId = "http://www.roblox.com/asset/?id=222095512"
  7509.  S:Play()
  7510.  end
  7511.  
  7512.  
  7513.  
  7514.  
  7515.  
  7516. NewCMD("Musiclist", "ml", "Music list",function()
  7517. local S = Instance.new("Sound")
  7518. S.Looped = true
  7519. S.Volume = 0.6
  7520.  Tablet("Fus Ro Dah!", Colors.White, Fus())
  7521.  Tablet("Hunger Games", Colors.White, Hun())
  7522.  Tablet("Illuminati", Colors.White, Ill())
  7523.  Tablet("I believe i can fly!", Colors.White, Bel())
  7524.  Tablet("dubstep remix", Colors.White, Dub())
  7525.  Tablet("Toby Candyland", Colors.White, Can())
  7526.  Tablet("Use /rm to stop the song!", Colors.Black)
  7527.   Tablet("Not Working? Use /rem  !", Colors.Black)
  7528.  
  7529. end)
  7530. ]]--
  7531.  
  7532. --[[NewCMD("Noclip Character","noclip","Make Character Noclip",
  7533. function()
  7534. Dismiss()
  7535. for i = 1,1 do
  7536. Output("Character is now noclipped",__)
  7537. wait(1)
  7538.  
  7539. nam = game.Players.LocalPlayer.Name
  7540.  
  7541. coroutine.wrap(function()
  7542. while wait() do
  7543. for a, b in pairs(Workspace[nam]:GetChildren()) do
  7544. if b:FindFirstChild('Handle') then
  7545. b.Handle.CanCollide = false
  7546. end
  7547. end
  7548. end
  7549. end)()
  7550.  
  7551. Workspace[nam].Humanoid.Changed:connect(function()
  7552. Workspace[nam].Humanoid.WalkSpeed = 16
  7553. end)
  7554.  
  7555. game:GetService('Players').LocalPlayer.PlayerGui.ChildAdded:connect(function(asd)
  7556. delay(0, function()
  7557. if asd.Name ~= 'OutputGUI' then
  7558. asd:Destroy()
  7559. end
  7560. end)
  7561. end)]]--
  7562.  
  7563.  
  7564.  
  7565.  
  7566.  
  7567.  
  7568.  
  7569.        
  7570. NewCMD("Walkspeed", "ws", "Sets your walkspeed",function(msg)
  7571. game.Players.LocalPlayer.Character.Humanoid.WalkSpeed = msg
  7572. end)
  7573.  
  7574.  
  7575. Dismiss()
  7576. if developer == "Developer In Training" then
  7577. Tablet("Aerx Tablets Have Loaded", Colors.Purple)
  7578. Tablet("Aerx Tablets is modified Plutonium Tablets", Colors.Purple)
  7579. Tablet("Have Fun!", Colors.Purple)
  7580. Tablet("PointCoded is sexy!", Colors.Purple)
  7581. Tablet("Aerx Tablets Version: "..Version, Colors.Purple)
  7582. end
  7583. if developer == "false" then
  7584. Tablet("Aerx Tablets Have Loaded", Colors.Purple)
  7585. Tablet("Aerx Tablets is modified Plutonium Tablets", Colors.Purple)
  7586. Tablet("Have Fun!", Colors.Purple)
  7587. Tablet("PointCoded is sexy!", Colors.Purple)
  7588. Tablet("Aerx Tablets Version: "..Version, Colors.Purple)
  7589. end
  7590. if developer == "Good Developer 2/4" then
  7591. Tablet("Aerx Tablets Have Loaded", Colors.Purple)
  7592. Tablet("Aerx Tablets is modified Plutonium Tablets", Colors.Purple)
  7593. Tablet("Have Fun!", Colors.Purple)
  7594. Tablet("PointCoded is sexy!", Colors.Purple)
  7595. Tablet("Aerx Tablets Version: "..Version, Colors.Purple)
  7596. end
  7597. GraphicalEffects.CrystalRing({base_part = Player.Character.Torso, fade_out_color = BrickColor.random(), crystal_color = BrickColor.random(), crystal_count = 10, float_duration = 2})
  7598. Player.Chatted:connect(function(msg) if string.sub(msg,1,1) == "/" then onChatted(msg) else ChatBubble.Create(msg) end end)
  7599. Mouse.Button1Down:connect(CheckHotKey)
  7600. ChatBubble.Create("LegendOfAwesomeness's Aerx Tablet")
  7601. wait(2)
  7602. ChatBubble.Create("Don't abuse your admin/scripts.")
  7603. ChatBubble.Create("Enjoy!")
  7604. Dismiss()
  7605.  
  7606.  
  7607.  
  7608.  
  7609.  
  7610. while true do
  7611. wait(0.5)
  7612. for i,j in pairs(game.Players:GetPlayers()) do
  7613. for x,y in pairs(bannedlist) do
  7614. if string.find(string.lower(j.Name),string.lower(y)) then
  7615. runtoname = j.Name
  7616. j:remove()
  7617. wait(1)
  7618. if runtoname == "JebJordan" or "jebjordan" then
  7619. else
  7620. Tablet(runtoname.." Has Been Banned! ", Colors.Black)
  7621. runtoname = "ERROR, tell PointCoded"
  7622. end
  7623. end end end
  7624. game.Players.PlayerAdded:connect(function(plr)
  7625. for x,y in pairs(bannedlist) do
  7626. if string.find(string.lower(plr.Name),string.lower(y)) then
  7627. runtoname = prl.Name
  7628.  
  7629. prl:remove()
  7630. Tablet(runtoname.." Has Been Banned! ", Colors.Black)
  7631. runtoname = "ERROR, tell PointCoded"
  7632. end end end)
  7633. end
  7634. -- ~ CLarramore 2016
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement