Advertisement
Sazious

Untitled

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