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