View difference between Paste ID: pYJYqGfB and fEHxmced
SHOW: | | - or go back to the newest paste.
1
_G,_VERSION,assert,collectgarbage,dofile,error,getfenv,getmetatable,ipairs,load,loadfile,loadstring,next,pairs,pcall,print,rawequal,rawget,rawset,select,setfenv,setmetatable,tonumber,tostring,type,unpack,xpcall,coroutine,math,string,table,game,Game,workspace,Workspace,delay,Delay,LoadLibrary,printidentity,Spawn,tick,time,version,Version,Wait,wait,PluginManager,crash__,LoadRobloxLibrary,settings,Stats,stats,UserSettings,Enum,Color3,BrickColor,Vector2,Vector3,Vector3int16,CFrame,UDim,UDim2,Ray,Axes,Faces,Instance,Region3,Region3int16=_G,_VERSION,assert,collectgarbage,dofile,error,getfenv,getmetatable,ipairs,load,loadfile,loadstring,next,pairs,pcall,print,rawequal,rawget,rawset,select,setfenv,setmetatable,tonumber,tostring,type,unpack,xpcall,coroutine,math,string,table,game,Game,workspace,Workspace,delay,Delay,LoadLibrary,printidentity,Spawn,tick,time,version,Version,Wait,wait,PluginManager,crash__,LoadRobloxLibrary,settings,Stats,stats,UserSettings,Enum,Color3,BrickColor,Vector2,Vector3,Vector3int16,CFrame,UDim,UDim2,Ray,Axes,Faces,Instance,Region3,Region3int16
2
math.randomseed(tick())
3
--[[
4
Oh hi there, this is a beta version of my duck commands... 
5
It doesn't have alot of commands, but there are a lot more to come.
6
--cxcharlie/howamisupposedtoknow
7
The current commands are:
8
9
Commands - Displays the commands
10
cmds --> cmds pop up
11
When the cmds are displayed, you can click on one to see its description and aliases
12
Aliases are other words that can be used for a single command,
13
for example, instead of using "forcefield me", you can use "ff me"
14
If you are a tempa admin (admins added through the "swear in" cmd),
15
some of the cmds may appear to be red, that means you do not have permission to use the command
16
17
18
Makeduck - Makes a duck (very buggy, might remove later)
19
"makeduck" -->makes a duck that moves around
20
--Touching the duck will result in an explosion
21
22
DuckOut - Pings a duck tab with your message
23
"duckout hi im a duck" --> makes a duck tab pop up saying "hi im a duck"
24
You can also do: duckout =3= hi im a duck --> makes three tabs saying "hi im a duck"
25
	
26
Kill - Kills a player
27
"kill all" -->kills everyone
28
29
Swarm - Sends a flying duck after someone. If it gets close enough it blows them up
30
"swarm bob" --> sends duck after bob
31
32
Message - Makes a message for specified players 
33
Arguments: [==players==] [=reiterate number=]
34
"Message ==bob== hi" --> makes a duck tab on bob saying "hi"
35
You can also do: "Message ==bob,me== =3= hi" --> makes three ducks saying "hi" for bob and me
36
The order of the "== ==" and the "= =" doesn't matter 
37
38
Forcefield - Gives specified player(s) a forcefield...
39
(Yes this is cliche)
40
"forcefield me,bob" --> gives bob and me a ff
41
42
SwearIn - Swears player(s) to a duckzer [admin]
43
"swearin bob" --> admins bob, and bob can now use commands
44
45
FallingDucks - Makes ducks fall and explode for specifed player(s) and time
46
Arguments: [time] [players]
47
time: secs,hours,days
48
"fallingducks 20 sec bob" --> 
49
for 20 seconds, there will be falling ducks on the specified player(s) 
50
location
51
"fallingducks 20 hours bob" --> 20 hours of falling ducks -_-
52
"fallingducks 20 days bob" --> yeah...
53
54
Dismiss - Removes all the tabs from specified player(s)
55
dismiss all --> removes the players' tabs
56
If you just say "dismiss" then it will dismiss you
57
]]--
58
59
60
--local print = require(game:GetService("ReplicatedStorage"):WaitForChild("OCServer").PrintFunction)
61
local Workspace = Game:GetService('Workspace')
62
local Players = Game:GetService('Players')
63
local ReplicatedStorage = game:GetService('ReplicatedStorage')
64
local HttpService = game:GetService('HttpService')
65
local ServerScriptService = game:GetService('ServerScriptService')
66
local ServerStorage = game:GetService('ServerStorage')
67
local StarterPack = Game:GetService('StarterPack')
68
local StarterGui = Game:GetService('StarterGui')
69
local Lighting = Game:GetService('Lighting')
70
local Debris = Game:GetService('Debris')
71
local Teams = Game:GetService('Teams')
72
local BadgeService = Game:GetService('BadgeService')
73
local InsertService = Game:GetService('InsertService')
74
local Terrain = Workspace.Terrain
75
local RunService = Game:GetService('RunService')
76
local Soundscape = Game:GetService('SoundService')
77
local TeleportService = Game:GetService('TeleportService')
78
local ChatService = Game:GetService('Chat')
79
80
local ColorMeta = {
81
	__add = function(v1,v2)
82
		if (not v2 or not v2) then return end
83
		if (not v1[1] or not v1[2] or not v1[3] or not v2[1] or not v2[2] or not v2[3]) then return end
84
		return Color3.new((v1[1]+v2[1])%1,(v1[2]+v2[2])%1,(v1[3]+v2[3])%1)
85
	end,
86
	__sub = function(v1,v2)
87
		if (not v2 or not v2) then return end
88
		if (not v1[1] or not v1[2] or not v1[3] or not v2[1] or not v2[2] or not v2[3]) then return end
89
		return Color3.new(math.max(0,v1[1]-v2[1]),math.max(0,v1[2]-v2[2]),math.max(0,v1[3]-v2[3]))
90
	end
91
}
92
93
local custom = {
94-
	{'Howamisupposedtoknow',3}, -- [name, rank] (3 is highest rank, 2 is friends, 1 is temp admin, and 0 is normal player, and <= -1 is banned
94+
	{'ByteDino',3}, -- [name, rank] (3 is highest rank, 2 is friends, 1 is temp admin, and 0 is normal player, and <= -1 is banned
95
	{'PlayerName',2},
96
	{'cxcharlie',3},
97
}
98
99
local LIST = setmetatable({},{
100
	__index = function(self,index) 
101
		for _,v in pairs(self) do 
102
			if string.lower(v.Name) == string.lower(tostring(index)) then 
103
				return v
104
			end
105
		end
106
	end,
107
	
108
	__newindex = function(self,index,value)
109
		if value.Rank > 3 then
110
			value.Rank = 3 -- -_-
111
			print('really?')
112
			rawset(self,index,value)
113
		else
114
			rawset(self,index,value)
115
		end
116
	end,
117
	}
118
)
119
	
120
function addPlayer(name,rank)
121
	local new = {Name = name, Rank = rank}
122
	rawset(LIST,name,new) --if needed there's a return :P
123
end
124
125
function getRank(name)
126
	if LIST[name] then
127
		return LIST[name].Rank
128
	else
129
		return 0
130
	end
131
end
132
133
for index,derp in pairs(custom) do pcall(function() addPlayer(derp[1],derp[2]) end) end --close enough
134
	
135
local VerifyArg
136
137
local TABS = {}
138
139
local nilCMD = {Name = 'nil'; Description = 'nil' ; Aliases = {}}
140
local COMMANDS = setmetatable({},
141
	{__index = function(self,index)
142
		for _,v in pairs(self) do 
143
			for __,vv in pairs(v.Aliases) do
144
				if string.lower(vv) == string.lower(tostring(index)) then
145
					return v
146
				end 
147
			end
148
			if v.Name:lower() == index:lower() or rawget(self,index)  then
149
				return v
150
			end
151
		end
152
		return nilCMDS
153
	end
154
	
155
	}
156
)
157
--local alive,character,head,torso,neck,humanoid = checkAlive(plr)
158
159
function checkAlive(plr)
160
local character,head,torso,neck,humanoid = nil,nil,nil,nil,nil
161
local character = plr.Character
162
if character then 
163
head = character:FindFirstChild('Head')
164
torso = character:FindFirstChild('Torso')
165
humanoid = character:FindFirstChild('Humanoid')
166
if (head and torso and humanoid) then
167
	neck = torso:FindFirstChild('Neck')
168
end
169
end
170
if neck then 
171
	return true,character,head,torso,neck,humanoid
172
else
173
	return false
174
end
175
end
176
177
local clickremove = function(tab,model)
178
		for _,v in pairs(model:GetChildren()) do 
179
			if v == tab then
180
				tab:remove()
181
				break
182
			end
183
		end
184
end
185
186
187
function dismiss(_,__,player)--idk :P
188
	for _,v in pairs(Workspace:GetChildren()) do 
189
		if v.ClassName == 'Model' then
190
			if v.Name == '__Tab' then
191
				if v.Player ~= nil then
192
193
					local name = v.Player.Value
194
					local plr = Players:FindFirstChild(name)
195
					if plr ~= nil then
196
197
						if plr == player then
198
							for __,v2 in pairs(TABS) do 
199
								if v2 == v then
200
									table.remove(TABS,__)
201
									v:remove()
202
									break
203
								end
204
							end
205
						end
206
					end
207
				end
208
			end
209
		end
210
	end
211
end
212
213
214
function Tabby(str,funct,plr,d,bool)
215
	
216
local function Create(ty)
217
	return function(data)
218
		local obj = Instance.new(ty)
219
		for k, v in pairs(data) do
220
			if type(k) == 'number' then
221
				v.Parent = obj
222
			else
223
				obj[k] = v
224
			end
225
		end
226
		return obj
227
	end
228
end
229
local model
230
231
for _,v in pairs(Workspace:GetChildren()) do 
232
	if v.Name == '__Tab' then
233
		if v:FindFirstChild('Player') ~= nil then
234
			local p = v.Player.Value
235
			local test = Players:FindFirstChild(p)
236
			if test then
237
				if test == plr then
238
					model = v
239
					break
240
				end
241
			end			
242
		end
243
	end
244
end
245
246
247
if not model then
248
model = Instance.new('Model',Workspace); model.Name = '__Tab'
249
local sv = Instance.new('StringValue',model) sv.Value = tostring(plr.Name)
250
sv.Name = 'Player'
251
end
252
253
coroutine.wrap(function(plr,model)
254
plr.Character.Humanoid.Died:connect(function()
255
model:remove()
256
end) 
257
end)(plr,model)
258
259
260
local tab = Create'Part'{
261
	Parent = model;
262
	Anchored = true;
263
	FormFactor = 'Custom';
264
	Size = Vector3.new(4, 4.80000019, 2);
265
	Name = ".__.";--idk
266
	CanCollide = false;
267
	Locked = true;
268
	Create'SpecialMesh'{ --duck mesh :333
269
		Name = 'MESH';
270
		Scale = Vector3.new(2, 2, 2);
271
		MeshId = "http://www.roblox.com/asset/?id=9419831";
272
		TextureId = "http://www.roblox.com/asset/?id=9419827";
273
		MeshType = Enum.MeshType.FileMesh;
274
	};
275
};
276
 
277
if bool then
278
local sl = Instance.new('SelectionBox',tab)
279
sl.Color = BrickColor.new(bool);sl.Adornee = tab
280
end
281
local bbg = Instance.new('BillboardGui',tab)
282
bbg.AlwaysOnTop = true
283
--local bv = Instance.new('BoolValue',tab); bv.Name = 'Ready'; bv.Value = true
284
local sound = Instance.new('Sound',tab); sound.SoundId='' sound.Name = 'Quack'
285
local sound2 = Instance.new('Sound',tab); sound2.SoundId=''; sound2.Name = 'Quack2'
286
bbg.Size = UDim2.new(0, 300, 0, 1);bbg.StudsOffset = Vector3.new(0,5,0);bbg.Adornee = tab
287
local tl = Instance.new('TextLabel',bbg)
288
tl.BackgroundTransparency = 1;tl.Size = UDim2.new(0, 300, 0, 100);tl.Font = Enum.Font.SourceSansBold;tl.FontSize = Enum.FontSize.Size24;
289
local possible = {0.1,0.15,0.25,0.3,0.6,0.45,0.33,0.5,0.77,0.7,0.8,1}
290
tl.TextStrokeColor3 = Color3.new(0,0,0);tl.TextStrokeTransparency = 0;tl.TextColor3 = Color3.new(possible[math.random(1,#possible)],possible[math.random(1,#possible)],possible[math.random(1,#possible)])
291
if type(str) == 'string' then
292
tl.Text = str
293
elseif type(str) == 'table' then
294
tl.Text = str.Name
295
end
296
local h = Instance.new('Handles',tab)
297
h.Faces = Faces.new(Enum.NormalId.Top);h.Adornee = tab
298
local cd = Instance.new('ClickDetector',tab) 
299
cd.MaxActivationDistance = 9999
300
table.insert(TABS,model)
301
local index = 0
302
for _,v in pairs(model:GetChildren()) do if v == tab then index = _ break end end
303
coroutine.wrap(function(plr,cd,funct,tab,model,index,str)
304
	cd.MouseClick:connect(function(clicker)
305
		if type(str) == 'string' then
306
		if clicker == plr then
307
			funct(tab,model,plr,index)
308
		else
309
			if plr and clicker then
310
				if plr.Character and clicker.Character then
311
					local ff = Debris:AddItem(Instance.new('ForceField',plr.Character),math.random(2,4))
312
					local ex = Instance.new('Explosion',Workspace)
313
					ex.Position = clicker.Character:FindFirstChild('Torso').CFrame.p or click.Character:FindFirstChild('Head').CFrame.p or Vector3.new(0,0,0)
314
				end
315
			end
316
		end
317
		elseif type(str) == 'table' then
318
			if clicker == plr then
319
			dismiss(nil,nil,plr)
320
			local ARGS = 'Aliases: '..tostring(table.concat(str.Aliases,'/'))
321
			Tabby(ARGS,clickremove,plr,20,'Bright orange')
322
			Tabby(str.Description,clickremove,plr,20,'Bright green')
323
			Tabby('Back',displayRecurse,plr,20,'Bright blue')
324
			Tabby('Exit',dismiss,plr,20,'Bright red')
325
			end
326
		end
327
	end)
328
end)(plr,cd,funct,tab,model,index,str)
329
Delay(d,function()for _,v in pairs(TABS) do if v == tab then table.remove(TABS,_) end end tab:remove()end)
330
end	
331
332
local starter = [[
333
	_G,_VERSION,assert,collectgarbage,dofile,error,getfenv,getmetatable,ipairs,load,loadfile,loadstring,next,pairs,pcall,print,rawequal,rawget,rawset,select,setfenv,setmetatable,tonumber,tostring,type,unpack,xpcall,coroutine,math,string,table,game,Game,workspace,Workspace,delay,Delay,LoadLibrary,printidentity,Spawn,tick,time,version,Version,Wait,wait,PluginManager,crash__,LoadRobloxLibrary,settings,Stats,stats,UserSettings,Enum,Color3,BrickColor,Vector2,Vector3,Vector3int16,CFrame,UDim,UDim2,Ray,Axes,Faces,Instance,Region3,Region3int16=_G,_VERSION,assert,collectgarbage,dofile,error,getfenv,getmetatable,ipairs,load,loadfile,loadstring,next,pairs,pcall,print,rawequal,rawget,rawset,select,setfenv,setmetatable,tonumber,tostring,type,unpack,xpcall,coroutine,math,string,table,game,Game,workspace,Workspace,delay,Delay,LoadLibrary,printidentity,Spawn,tick,time,version,Version,Wait,wait,PluginManager,crash__,LoadRobloxLibrary,settings,Stats,stats,UserSettings,Enum,Color3,BrickColor,Vector2,Vector3,Vector3int16,CFrame,UDim,UDim2,Ray,Axes,Faces,Instance,Region3,Region3int16
334
math.randomseed(tick())
335
336
local Workspace = Game:GetService('Workspace')
337
local Players = Game:GetService('Players')
338
repeat wait() until Players.LocalPlayer
339
local ReplicatedStorage = game:GetService('ReplicatedStorage')
340
local HttpService = game:GetService('HttpService')
341
local ServerScriptService = game:GetService('ServerScriptService')
342
local ServerStorage = game:GetService('ServerStorage')
343
local StarterPack = Game:GetService('StarterPack')
344
local StarterGui = Game:GetService('StarterGui')
345
local Lighting = Game:GetService('Lighting')
346
local Debris = Game:GetService('Debris')
347
local Teams = Game:GetService('Teams')
348
local BadgeService = Game:GetService('BadgeService')
349
local InsertService = Game:GetService('InsertService')
350
local Terrain = Workspace.Terrain
351
local RunService = Game:GetService('RunService')
352
local Soundscape = Game:GetService('SoundService')
353
local TeleportService = Game:GetService('TeleportService')
354
355
]]
356
357
local utils = {}
358
359
function utils.split(str,div)--took dis from someone :3
360
	local results = {}
361
	local currentresult = ""
362
	for i=1,string.len(str) do
363
		local current = string.sub(str,i,i)
364
		if current:match(div) then
365
			table.insert(results,currentresult)
366
			currentresult = ""
367
		else
368
			currentresult = currentresult..current
369
		end
370
	end
371
	table.insert(results,currentresult)
372
	return results
373
end	
374
function utils.catcha(f,plr)
375
	--local s,e = ypcall(f)
376
	--if not s then
377
	--	Tabby("ERROR: "..(tostring(e)),clickremove,plr,20,'Bright red')
378
	--end
379
end
380
381
function utils.MidPoint(p1,p2)
382
	return Vector3.new((p1.x+p2.x)/2,(p1.y+p2.y)/2,(p1.z+p2.z)/2)
383
end
384
385
function utils.PON(n)
386
	return ((n>0 and 'Pos') or (n<0 and 'Neg') or (n == 0 and 'Zero'))
387
end
388
function utils.RandomNumber(m,maximum)
389
	local possible = {}
390
	for i = -maximum,maximum,m do 
391
		table.insert(possible,m * i)
392
	end
393
	return possible[math.random(#possible)]
394
end
395
function utils.RandomVector(m,maximum) --multiples, max amount
396
	local possible = {}
397
	for i = -maximum,maximum,m do 
398
		table.insert(possible,m * i)
399
	end
400
	return Vector3.new(possible[math.random(1,#possible)],possible[math.random(1,#possible)],possible[math.random(1,#possible)])
401
end
402
403
function utils.RandomCFrame(m,maximum) --multiples, max amount
404
	local possible = {}
405
	for i = -maximum,maximum,m do 
406
		table.insert(possible,m * i)
407
	end
408
	return CFrame.new(possible[math.random(1,#possible)],possible[math.random(1,#possible)],possible[math.random(1,#possible)])
409
end
410
411
function utils.RandomCFrameAngles(m,maximum,bool) --multiples, max amount, if bool, then convert to radians
412
	local possible = {}
413
	
414
	for i = -maximum,maximum,m do 
415
		if bool then
416
		table.insert(possible,math.rad(m * i))
417
		else
418
			table.insert(possible,m * i)
419
		end
420
	end
421
	return CFrame.Angles(possible[math.random(1,#possible)],possible[math.random(1,#possible)],possible[math.random(1,#possible)])
422
end
423
424
function utils.DrawRay(ray, parent, color)
425
	if not parent then parent = workspace end
426
	local part = Instance.new("Part", parent)
427
	part.FormFactor = "Custom"
428
	part.Size = Vector3.new(.2, ray.Direction.magnitude, .2)
429
	part.CFrame = CFrame.new(ray.Origin + ray.Direction/2, ray.Origin + ray.Direction) * CFrame.Angles(math.pi/2,0,0)
430
	part.Anchored = true
431
	part.CanCollide = false
432
	Instance.new("SpecialMesh", part)
433
	
434
	if not color then
435
		part.BrickColor = BrickColor.new("Bright red")
436
	else
437
		part.BrickColor = BrickColor.new(color)
438
	end
439
	return part
440
end
441
442
function utils.VectorToString(Vector)
443
	return ("Vector3.new("..Vector.x..", "..Vector.y..", "..Vector.z..")")
444
end
445
446
447
debug = false 
448
--THANKS ALOT TO jacob2233 FOR THIS ALGORITHM! :D
449
function utils.encode(phrase)
450
	r = #phrase --Number of letters in the phrase
451
	isOdd = false --Default; if true then at the end add a letter ot notify the decompiler
452
	if r%2 ~= 0 then --If the amount of letters is odd then...
453
		phrase = phrase.." " --Add a space to the end if the phrase has an odd amount of letters
454
		isOdd = true --Remember to add a letter at the end for the decompiler to see
455
	end
456
		
457
	i = 1 --Keeps track of current iteration
458
	code = 0 --Code can't be null, so start with 0; The 0 will be removed later
459
	
460
	while i <= #phrase do --Repeat until 'i' is greater than the amount of letters
461
		a = string.byte(string.sub(phrase,i,i+1)) --Translate first letter into ASCII value
462
		b = string.byte(string.sub(phrase,i+1,i+2)) --Translate second letter into ASCII value
463
		
464
		temp = utils.encodeAB(a,b) --Encode the temporary group for quick access and efficiency
465
		if temp<10 then --There is no way for the decoder to know if a value is < 10
466
			l1 = string.char(math.random(97,102)) --Pick a random letter from 'a' to 'f'
467
468
			code = code..l1..temp --Add the quick hint for the decompiler
469
			if debug then print(a.." "..b.." "..l1..temp) end --Debug			
470
		elseif temp<1000 then --There is no way for the decoder to know if a value is < 1000
471
			l1 = string.char(math.random(65,70)) --Pick a random letter from 'A' to 'F'
472
473
			code = code..l1..temp --Add the quick hint for the decompiler
474
			if debug then print(a.." "..b.." "..l1..temp) end --Debug			
475
		elseif temp<10000 then --There is no way for the decoder to know if a value is < 10000
476
			l1 = string.char(math.random(65,70)) --Pick a random letter from 'A' to 'F'
477
			l2 = string.char(math.random(65,70)) --Pick a random letter from 'A' to 'F'
478
479
			code = code..l1..l2..temp --Add the quick hint for the decompiler
480
			if debug then print(a.." "..b.." "..l1..l2..temp) end --Debug			
481
		elseif temp>100000 then --There is no way for the decoder to know if a value is > 100000; encode(255,255) is 130560
482
			l1 = string.char(math.random(65,70)) --Pick a random letter from 'A' to 'F'
483
			l2 = string.char(math.random(65,70)) --Pick a random letter from 'A' to 'F'
484
			l3 = string.char(math.random(65,70)) --Pick a random letter from 'A' to 'F'
485
486
			code = code..l1..l2..l3..temp --Add the quick hint for the decompiler
487
			if debug then print(a.." "..b.." "..l1..l2..l3..temp) end --Debug			
488
		else --Most numbers will fall between 10000 and 100000
489
			code = code..temp --Encode the two individual numbers into one and add it to the result
490
			if debug then print(a.." "..b.." "..temp) end --Debug
491
		end		
492
		i = i + 2 --Increment 'i' by two for the next group		
493
	end
494
495
	if isOdd then --If the sequence is odd
496
		code = code..string.char(math.random(65,70)) --Pick a random letter to notify the decompiler of odd lettered phrase
497
	end
498
499
	return string.sub(code,2,#code) --Return the code except for the 0 at the beginning.
500
end
501
502
503
function utils.encodeAB(a,b)
504
    return 0.5*(math.pow(a+b,2)+3*a+b) --The algorithm itself is simple...
505
end
506
507
508
function utils.decode(input)	
509
	i = 1 --Keeps count of the current iteration
510
	result = ""
511
	trimSpace = false --Default; is true if input has odd amount of letters
512
513
	if isLetter(string.sub(input, #input-1, #input)) then --If the last element is a letter
514
		input = string.sub(input,1,#input-1) --Remove the letter
515
		trimSpace = true --Remember to trim the extra space at the end
516
	end
517
	
518
	while i<=#input do
519
		length = 4 --Length of regular number is 5-1 or 4
520
		if isLetter(string.sub(input,i,i+1)) then --If there is one letter
521
			if isLetter(string.sub(input,i+1,i+2)) then --If there are two letters
522
				if isLetter(string.sub(input,i+2,i+3)) then --If there are three letters (max amount of letters)
523
					length = 5 --Length of long number is 6-1 or 5
524
					letters = 3 --Amount of letters before the number
525
					j = i+letters --Account for the letters
526
					if debug then print(length.." "..string.sub(input,j,j+length)) end --Debug
527
					group = utils.decodeA(string.sub(input,j,j+length)) --Decode the number into its original two numbers
528
					i = i+letters+length+1 --Increment 'i' accordingly
529
					if debug then print(i) end --Debug
530
				else --Two letters
531
					length = 3 --Length of short number is 4-1 or 3
532
					letters = 2 --Amount of letters before the number
533
					j = i+letters --Account for the letters
534
					if debug then print(length.." "..string.sub(input,j,j+length)) end --Debug
535
					group = utils.decodeA(string.sub(input,j,j+length)) --Decode the number into its original two numbers
536
					i = i+letters+length+1 --Increment 'i' accordingly
537
					if debug then print(i) end --Debug
538
				end
539
			else --One letter
540
				if isLowerCase(string.sub(input,i,i+1)) then --Lowercase letters mean something different than uppercase letters
541
					length = 0 --Length of super-short number is 1-1 or 0
542
					letters = 1 --Amount of letters before the number
543
					j = i+letters --Account for the letters
544
					if debug then print(length.." "..string.sub(input,j,j+length)) end --Debug
545
					group = utils.decodeA(string.sub(input,j,j+length)) --Decode the number into its original two numbers
546
					i = i+letters+length+1 --Increment 'i' accordingly
547
					if debug then print(i) end --Debug
548
				else
549
					length = 2 --Length of shorter number = 3-1 or 2
550
					letters = 1 --Amount of letters before the number
551
					j = i+letters --Account for the letters
552
					if debug then print(length.." "..string.sub(input,j,j+length)) end --Debug
553
					group = utils.decodeA(string.sub(input,j,j+length)) --Decode the number into its original two numbers
554
					i = i+letters+length+1 --Increment 'i' accordingly
555
					if debug then print(i) end --Debug
556
				end			
557
			end
558
		else --No letters
559
			if debug then print(length.." "..string.sub(input,i,i+length)) end --Debug
560
			group = utils.decodeA(string.sub(input,i,i+length)) --Decode the number into its original two numbers
561
			i = i+length+1 --Increment 'i' accordingly
562
			if debug then print(i) end --Debug
563
		end
564
		result = result..string.char(group[1])..string.char(group[2]) --Turn the numbers back into letters and add them to the result
565
	end
566
567
	if trimSpace then
568
		result = string.sub(result,1,#result-1) --Remove the extra element at the end
569
	end	
570
	
571
	return tostring(result) --Finally, return the fully decoded result
572
end
573
574
function utils.decodeA(f)
575
    F = 2*f 
576
    s = math.floor(math.sqrt(F)) --incase sqrt(F) isn't an integer, make it one.
577
    S = (s*s)+s
578
    if F >= S then --case one
579
        a = f - 0.5*s*(s+1)
580
        b = 0.5*s*(s+3) - f
581
    elseif F < S then --case two
582
        a = f - 0.5*s*(s-1)
583
        b = 0.5*s*(s+1) - f - 1
584
    else --Bad value given; only reached if f is negative or not an integer.
585
        a = -1
586
        b = -1  
587
    end
588
    return {a,b} --return a 2 element array (or matrix) containing a and b
589
end
590
591
592
function isLetter(a)
593
	a,b = pcall(function() return a+1 end) --'a' stores whether the function executed or not; b stores error message
594
	return not a --return the opposite whether the function worked or not
595
end
596
597
598
function isLowerCase(a)
599
	return string.lower(a) == a --Compare the input is equal to its lower-case counterpart
600
end
601
602
function utils.GetPlayersFromString(str,spokenplayer)
603
	if not str or str == "" then
604
			Tabby(("No player string, (arg1 of utils.GetPlayerFromString..."),clickremove,spokenplayer,10,'Bright red') 
605
	end
606
	if not spokenplayer then
607
	Tabby(("No specified player (arg2 of utils.GetPlayerFromString..."),clickremove,spokenplayer,10,'Bright red') 
608
	end
609
	local foundplayers = {}
610
	for listedplayer in str:lower():gmatch("[^,;!/\ ]+") do
611
		if listedplayer:lower() == "all" then
612
			for _,i in pairs(Players:GetPlayers()) do
613
				table.insert(foundplayers,i)
614
			end
615
		elseif listedplayer:lower() == "others" then
616
			for _,i in pairs(Players:GetPlayers()) do
617
				if i.Name:lower() ~= spokenplayer.Name:lower() then
618
					table.insert(foundplayers,i)
619
				end
620
			end
621
		elseif listedplayer:lower() == "admins" then
622
			for _,i in pairs(Players:GetPlayers()) do
623
				if LIST[i.Name] ~= nil then
624
					if LIST[i.Name] == true then
625
						table.insert(foundplayers,i)
626
					end
627
				end
628
			end
629
		elseif listedplayer:lower() == "nonadmins" then
630
			for _,i in pairs(Players:GetPlayers()) do
631
				if LIST[i.Name] == nil or LIST[i.Name] == false then
632
					table.insert(foundplayers,i)
633
				end
634
			end
635
		elseif listedplayer:lower() == "random" then
636
			table.insert(foundplayers,Players:GetPlayers()[math.random(1,#Players:GetPlayers())])
637
		elseif listedplayer:lower() == "me" then
638
			table.insert(foundplayers,spokenplayer)
639
		elseif listedplayer:lower() == "friends" then
640
			for _,i in pairs(Players:GetChildren()) do
641
				if i:IsFriendsWith(spokenplayer.userId) then
642
					table.insert(foundplayers,i)
643
				end
644
			end			
645
		elseif listedplayer:lower() == "bestfriends" then			
646
			for _,i in pairs(Players:GetChildren()) do
647
				if i:IsBestFriendsWith(spokenplayer.userId) then
648
					table.insert(foundplayers,i)
649
				end
650
			end			
651
		elseif listedplayer:lower() == "nonfriends" then			
652
			for _,i in pairs(Players:GetChildren()) do
653
				if not i:IsFriendsWith(spokenplayer.userId) then
654
					table.insert(foundplayers,i)
655
				end
656
			end			
657
		elseif listedplayer:lower() == "nonbestfriends" then			
658
			for _,i in pairs(Players:GetChildren()) do
659
				if not i:IsBestFriendsWith(spokenplayer.userId) then
660
					table.insert(foundplayers,i)
661
				end
662
			end			
663
		elseif listedplayer:lower() == "nbc" then			
664
			for _,i in pairs(Players:GetChildren()) do
665
				if i.MembershipType == Enum.MembershipType.None then
666
					table.insert(foundplayers,i)
667
				end
668
			end		
669
		elseif listedplayer:lower() == "bc" then			
670
			for _,i in pairs(Players:GetChildren()) do
671
				if i.MembershipType == Enum.MembershipType.BuildersClub then
672
					table.insert(foundplayers,i)
673
				end
674
			end			
675
		elseif listedplayer:lower() == "tbc" then			
676
			for _,i in pairs(Players:GetChildren()) do
677
				if i.MembershipType == Enum.MembershipType.TurboBuildersClub then
678
					table.insert(foundplayers,i)
679
				end
680
			end				
681
		elseif listedplayer:lower() == "obc" then			
682
			for _,i in pairs(Players:GetChildren()) do
683
				if i.MembershipType == Enum.MembershipType.OutrageousBuildersClub then
684
					table.insert(foundplayers,i)
685
				end
686
			end		
687
		elseif listedplayer:lower() == "anybc" then			
688
			for _,i in pairs(Players:GetChildren()) do
689
				if i.MembershipType == Enum.MembershipType.OutrageousBuildersClub or i.MembershipType == Enum.MembershipType.TurboBuildersClub or i.MembershipType == Enum.MembershipType.BuildersClub  then
690
					table.insert(foundplayers,i)
691
				end
692
			end
693
			
694
		--[[elseif listedplayer:lower():sub(1,4) == "team" then
695
			
696
			local team = listedplayer:lower():sub(6)
697
			local matchedteam
698
			
699
			for _,i in pairs(Teams:GetChildren()) do
700
				if i:IsA("Team") then
701
					if i.Name:lower():sub(1,#team) == team:lower() then
702
						if not matchedteam then
703
							matchedteam = i
704
						else
705
							error("Team \""..team.."\" is ambiguous.")
706
						end
707
					end
708
				end
709
			end
710
			
711
			assert(matchedteam,"No teams matching \""..team.."\" found.")
712
			
713
			for _,i in pairs(Players:GetPlayers()) do
714
				if i.TeamColor == matchedteam.TeamColor then
715
					table.insert(foundplayers,i)
716
				end
717
			end]]
718
			
719
		end
720
		
721
		local currentfoundplayer		
722
		for _,i in pairs(Players:GetPlayers()) do			
723
			if i.Name:lower():sub(1,#listedplayer) == listedplayer:lower() then
724
				if not currentfoundplayer then					
725
					currentfoundplayer = i
726
				else
727
					Tabby((str.." is ambiguous"),clickremove,spokenplayer,10,'Bright red') 
728
				end
729
			end		
730
		end
731
		table.insert(foundplayers,currentfoundplayer)
732
	end
733
	--assert(foundplayers[1],"No players were found matching \""..str.."\"")
734
	if foundplayers[1] == nil then Tabby('No players specified...',clickremove,spokenplayer,10,'Bright blue') end
735
	return foundplayers
736
end
737
738
739
740
741
--[[function NLS(source,player,delayTime)
742
	if script.ClassName == 'LocalScript' then
743
		local ls = script:Clone() ls.Disabled = true
744
		ls.Parent = player.Character or player.PlayerGui or player.Backpack or nil
745
		local code = Instance.new('StringValue',ls) code.Name = 'code'
746
		code.Value = starter..source
747
		coroutine.wrap(function(ls,delayTime)
748
		delay(delayTime,function()ls.Disabled = false end)
749
		end)(ls,delayTime)
750
	elseif script.ClassName == 'Script' then
751
		if script:FindFirstChild('LS') ~= nil then
752
			local ls = script.LS:Clone()
753
			ls.Source = starter..source
754
			ls.Parent = player.Character or player.PlayerGui or player.Backpack or nil
755
			coroutine.wrap(function(ls,delayTime)
756
			delay(delayTime,function()ls.Disabled = false end)
757
			end)(ls,delayTime)
758
		end
759
	end
760
end
761
]]--
762
function addCommand(name,desc,func,rank,...)
763
	local tuple = {...}
764
	local new = {Name = name; Description = desc; Run = function(...) func(...) end ; Aliases = tuple; Rank = rank}
765
	rawset(COMMANDS,name,new)
766
end
767
768
addCommand('MakeDuck','Makes a duck',
769
        function(str,chatter)
770
                local duck = Instance.new('Model',Workspace)
771
                duck.Name = 'Duck'
772
                local torso = Instance.new('Part',duck)
773
                torso.FormFactor = 'Custom'
774
                torso.Size = Vector3.new(1.5,1.5,1.5)
775
                torso.Name = 'Torso'
776
                torso.Position = Vector3.new(math.random(-20,20),math.random(5,10),math.random(-20,20))
777
                local quack = Instance.new('Sound',torso)
778
                quack.SoundId = 'http://www.roblox.com/asset/?id=9413300'
779
                quack.Volume = 1.1
780
                local head = Instance.new('Part',duck)
781
                head.FormFactor = 'Custom'
782
                head.Size = Vector3.new(.75,.75,.75)
783
                head.Name = 'Head'
784
                head.Transparency = 0.9
785
                head.CanCollide = false
786
                local weld = Instance.new('Weld',torso)
787
                weld.Part0,weld.Part1 = torso,head
788
                weld.C1 = CFrame.new(0,0.33,0)
789
                local humanoid = Instance.new('Humanoid',duck)
790
                local m = Instance.new('SpecialMesh',torso)
791
                m.MeshType = Enum.MeshType.FileMesh
792
                m.MeshId = "http://www.roblox.com/asset/?id=9419831";
793
                m.TextureId = "http://www.roblox.com/asset/?id=9419827";
794
                m.Scale = Vector3.new(1.1,1.1,1.1)
795
				coroutine.wrap(function(duck,torso,head,humanoid,quack,weld)
796
					while (duck~=nil and torso~=nil and head~=nil and humanoid~=nil and quack~=nil) do 
797
					wait(.1)
798
					if not run or not duck or not torso or not head or not weld  or not humanoid then break end
799
					if humanoid.Health<=0 then break end
800
					local jumpRay = Ray.new(head.CFrame.p,head.CFrame.lookVector*4.3)
801
					local part,poz = Workspace:FindPartOnRayWithIgnoreList(jumpRay,{duck},true)
802
					if part then if part.Size.y<=4.5 then humanoid.Jump = true end end
803
					end
804
				end)(duck,torso,head,humanoid,quack,weld)
805
                coroutine.wrap(function(duck,torso,head,weld,humanoid,quack)
806
                        torso.Touched:connect(function(hit)
807
                          local hum = hit.Parent:FindFirstChild('Humanoid')
808
                                if hum then
809
                                    --ChatService:Chat(torso,utils.decode('2018325765242042355110043259892121910845241922142023321FA2178F'))
810
                                    local ex = Instance.new('Explosion',Workspace)
811
                                    ex.Position = hit.Position
812
                                    duck:remove()
813
                                end
814
                        end)
815
                        local run = true
816
                        humanoid.Died:connect(function()run=false;end)
817
                        while (duck and torso and head and weld) ~= nil do
818
                                wait(math.random(2,5))
819
                                if not run or not duck or not torso or not head or not weld  or not humanoid then break end
820
								if humanoid.Health<=0 then break end
821
                                local jump = math.random(1,5) if jump == 2 then humanoid.Jump = true end
822
                                local ray = Ray.new(head.CFrame.p + Vector3.new(0,0.5,0),((Vector3.new(math.random(-10,10),-.22,math.random(-10,10))-head.CFrame.lookVector)*50),true)
823
                                local rayPart = utils.DrawRay(ray, Workspace)
824
                                Debris:AddItem(rayPart,2)
825
                                local hit,pos = Workspace:FindPartOnRayWithIgnoreList(ray,{duck},true)
826
                                if hit and pos then
827
                                quack.Pitch=utils.RandomNumber(.1,1)+.5 wait();quack:Play()
828
                                humanoid:MoveTo(pos, Terrain)
829
                                end
830
                        end
831
                end)(duck,torso,head,weld,humanoid,quack)
832
        end,1,
833
        'md','create'
834
)
835
836
addCommand('Kill','Kills specified player(s)', function(str,chatter)
837
local plrs = utils.GetPlayersFromString(str,chatter)
838
	for _,v in pairs(plrs) do 
839
		if v.Character ~= nil then
840
			v.Character:BreakJoints()
841
			Tabby(('Killed: '..tostring(v.Name)), clickremove,chatter,12,'Bright blue')
842
		end
843
	end
844
845
end,1,
846
'kl','die','dk')
847
848
addCommand('DuckOut','Pings a duck tab',function(str,chatter)
849
local rep = (str:match('=(%d+)='))
850
local str = str:gsub('=(%d+)=',"")
851
local str = utils.encode(str:gsub('','\5'))
852
for i = 1,(rep or 1) do 
853
local colors={'Bright green','Bright blue','Bright yellow','Bright orange'}
854
Tabby(tostring(utils.decode(str)),clickremove,chatter,30+math.random(1,12),colors[math.random(1,#colors)])
855
end
856
end,1,
857
'out','quack','du','duck','dd')
858
859
function displayRecurse(_,__,plr)
860
	dismiss(nil,nil,plr)
861
	for _,v in pairs(COMMANDS) do 
862
		if v.Rank <= getRank(plr.Name) then
863
			Tabby(v, nil,plr,30+math.random(1,30),'Bright green')
864
		else
865
			Tabby(v, nil,plr,30+math.random(1,30),'Bright red')
866
		end
867
	end
868
end
869
870
addCommand('Commands','Displays the commands -_-',function(str,chatter)
871
	displayRecurse(nil,nil,chatter)
872
end,1,
873
'cmds','cmd','ducks')
874
875
addCommand('Swarm','Sends a rocket propelled duck at specified player(s)',function(str,chatter)
876
	
877
	local plrs = utils.GetPlayersFromString(str,chatter) 
878
	
879
	for _,v in pairs(plrs) do 
880
		
881
		local alive,character,head,torso,neck,humanoid = checkAlive(v) 
882
		
883
			if alive then			
884
				
885
				Tabby('Swarmed: '..tostring(v.Name), clickremove,chatter,15,'Bright blue')
886
				
887
				local duck = Instance.new('Part',Workspace)
888
				duck.Size = Vector3.new(3,3,3)
889
				duck.Anchored = true
890
				duck.CanCollide = false
891
				duck.Position = torso.CFrame.p + Vector3.new(math.random(-100,100),math.random(0,20),math.random(-100,100))
892
				duck.Locked = true
893
				
894
				local m = Instance.new('SpecialMesh',duck)
895
				m.MeshId = "http://www.roblox.com/asset/?id=9419831";
896
				m.TextureId = "http://www.roblox.com/asset/?id=9419827";
897
				m.Scale = Vector3.new(3.1,3.1,3.1)
898
				
899
				local sound = Instance.new('Sound',duck)
900
				sound.SoundId = "http://www.roblox.com/asset/?id=9413300"
901
				sound.Name = 'LoopQuack'
902
				sound.Looped = true 
903
				sound:Play()
904
					
905
				local explosionSound = Instance.new('Sound',duck)
906
				explosionSound.SoundId = 'rbxasset://sounds/collide.wav'
907
				explosionSound.Name = 'Explosion'
908
				explosionSound.Pitch = 1.2
909
				coroutine.wrap(function(duck)
910
					RunService.Stepped:connect(function()
911
						pcall(function()
912
						duck.Anchored = true
913
						end)
914
					end)
915
				end)
916
				coroutine.wrap(function(duck)
917
					
918
					local lastCF = duck.CFrame
919
					local lastsize 
920
					local ts = {}
921
					while duck ~= nil do 
922
						wait()
923
						
924
						if duck == nil then break end
925
						
926
						local current = duck.CFrame
927
						
928
						if current ~= lastCF  then
929
930
							local distance = (current.p - lastCF.p).magnitude + (.45 * duck.Size.z)
931
							local trail = Instance.new('Part',Workspace)
932
							trail.BrickColor = BrickColor.new('Bright yellow')
933
							trail.Anchored = true
934
							trail.Transparency = 0.2
935
							trail.TopSurface,trail.BottomSurface = 'Smooth','Smooth'
936
							trail.Size = Vector3.new(1,1,distance)
937
							trail.CFrame = CFrame.new(lastCF.p,current.p) * CFrame.Angles(0,0,distance/2)
938
							table.insert(ts,trail)
939
							
940
						end
941
							
942
						for _,v in pairs(ts) do
943
							if v ~= nil then
944
								v.Transparency = v.Transparency + .1
945
								if v.Transparency >= 1 then
946
									table.remove(ts,_)
947
									v:remove()
948
								end
949
							end
950
						end						
951
							
952
						lastCF = duck.CFrame
953
					end
954
				end)(duck)
955
				
956
				coroutine.wrap(function(duck,torso,explosionSound,m) 
957
					local start = time()
958
					local wad = 0
959
					local bool = false
960
					local lastCF = duck.CFrame
961
962
					while duck ~= nil and torso ~= nil do 
963
						wait()
964
			
965
						if bool then
966
							wad = wad + 1
967
							if wad == 8 then
968
								bool = false
969
							end
970
						else
971
							wad = wad - 1
972
							if wad == -8 then
973
								bool = true
974
							end
975
						end				
976
						
977
						--if (wad == 0 and bool) then wad = 1 elseif (wad == 0 and not bool) then wad = -1 else wad = 0 end
978
						
979
						local past = time() - start
980
						
981
						local smodlen = math.abs((0.5*(math.sin(3*past)+math.sin(4*past)))/5)
982
								
983
						local smodw = math.abs(math.sin(past*10))					
984
						
985
						local speed = (past/(math.pi*3)%(33))
986
						
987
						m.Scale = Vector3.new((speed*math.pi)+smodw+smodlen,(speed*math.pi)+smodw+smodlen,(speed*math.pi)+smodw+smodlen)			
988
						
989
						local rate = 5
990
						
991
									
992
						local rot = (wad * speed * 10)
993
						duck.CFrame = CFrame.new(duck.CFrame.p, (torso.CFrame).p)
994
						duck.CFrame = duck.CFrame * CFrame.new(0,0,(-1*speed)) * CFrame.Angles(0,math.rad(rot/math.pi),0) --waddle waddle, and he waddled away
995
						
996
						if ((duck.CFrame.p) - torso.CFrame.p).magnitude <=3.5+duck.Size.z/2 then
997
							local mp = utils.MidPoint(duck.CFrame.p,torso.CFrame.p)
998
							local e = Instance.new('Explosion',Workspace)
999
							e.Position = mp
1000
							e.Hit:connect(function(v) pcall(function()v:BreakJoints()end) end)
1001
								--local mini = {0.05,0.1,0.2,0.15,0.25}
1002
								local colors = {'Bright orange','Bright yellow', 'Bright yellow', 'Bright yellow'}
1003
								for i = 1,math.random(6,15) do 
1004
									local confetti = Instance.new('Part',Workspace)
1005
									confetti.FormFactor = 'Custom' 
1006
									confetti.Size = Vector3.new(.5,.5,.5)
1007
									confetti.BrickColor = BrickColor.new(colors[math.random(1,#colors)])
1008
									confetti.CFrame = CFrame.new(mp) * utils.RandomCFrame(.02,200) * utils.RandomCFrameAngles(5,72,true)
1009
									Debris:AddItem(confetti,math.random(5,10))
1010
									
1011
									local sparkles = Instance.new('Sparkles',confetti)
1012
									sparkles.Color = Color3.new(0,0.8,0.85)
1013
									
1014
									local fire = Instance.new('Fire',confetti)									
1015
									
1016
									explosionSound:Play()
1017
							
1018
								 end
1019
								duck:remove()
1020
								pcall(function()v.Character:BreakJoints()end)
1021
							break
1022
						end
1023
					end
1024
				end)(duck,torso,explosionSound,m)
1025
				
1026
			else			
1027
				
1028
			end
1029
1030
	end
1031
	
1032
end,1,
1033
'sd','rocket','rpd')
1034
1035
addCommand('Dismiss','Removes the tabs on player(s)',
1036
	function(str,chatter)
1037
		local players = utils.GetPlayersFromString(str,chatter)
1038
		if players then
1039
		
1040
			for _,v in pairs(players) do 
1041
				--if checkAlive(v) then
1042
					dismiss(nil,nil,v)
1043
				--end
1044
			end
1045
			
1046
		else
1047
			dismiss(nil,nil,chatter)
1048
		end
1049
	
1050
end,1,'diss')
1051
1052
addCommand('ForceField','Puts a ff on specified player(s)',
1053
	function(str,chatter)
1054
		local plrs = utils.GetPlayersFromString(str,chatter)
1055
		for _,v in pairs(plrs) do 
1056
			if v.Character ~= nil then
1057
				Instance.new('ForceField',v.Character)
1058
				Tabby('Gave ForceField to: '..tostring(v.Name), clickremove,chatter,15,'Bright blue')
1059
			end
1060
		end
1061
	end,1
1062
,'ff','fof')
1063
1064
addCommand('Message','Messages player(s) with a tabby',
1065
	function(str,chatter)
1066
		local str_tab = utils.split(str," ")
1067
		if (not str_tab[1] or not str_tab[2]) then return end
1068
		local plrs = str:match("==([%s%d%a%p]+)==")
1069
		local reiterate = tonumber(str:match("=(%d+)=")) or 1
1070
		
1071
		if not plrs then return end
1072
		local length = (string.len(plrs)+2)+1
1073
		--local text = string.sub(str,length,string.len(str))
1074
		local str =(str:gsub('==([%s%d%a%p]+)==',"")):gsub("=(%d+)=","")
1075
		local plrs = utils.GetPlayersFromString(plrs,chatter)
1076
		for _,v in pairs(plrs) do 
1077
			if checkAlive(v) then
1078
				for i = 1, reiterate do 
1079
				Tabby(str,clickremove,v,15,'Bright green')
1080
				end
1081
			end
1082
		end
1083
	end,
1084
	1,'msg','mg','m'
1085
)
1086
addCommand('FallingDucks','Spawns exploding ducks in the air for specified time', 
1087
	function(str,chatter)
1088
		local str = str:lower()
1089
		local str_tab = utils.split(str," ")	
1090
		
1091
		local numb = tonumber(str_tab[1])
1092
		local str = tostring(str_tab[2])		
1093
		local plrz = tostring(str_tab[3])
1094
		
1095
		if plr ~= nil then
1096
			local length = string.len(numb) + string.len(str) + 2
1097
			plrz = string.sub(str,length,string.len(str))
1098
		end
1099
		
1100
		
1101
		local pos = {}
1102
1103
		if plrz ~= nil then
1104
1105
			local a = utils.GetPlayersFromString(plrz,chatter)
1106
			
1107
			for _,v in pairs(a) do 
1108
				
1109
				 local alive,character,head,torso,neck,humanoid = checkAlive(v) 
1110
				
1111
				if alive then
1112
					table.insert(pos,torso.CFrame.p)
1113
					Tabby('Let ducks fall upon: '..utils.VectorToString(torso.CFrame.p), clickremove,chatter,15,'Bright blue')
1114
				end
1115
			end
1116
		end
1117
		
1118
		if numb ~= nil then
1119
			
1120
			if type(numb) == 'number' then
1121
							
1122
				local function convert(n,str)
1123
					
1124
					if str ~= nil then
1125
						if string.sub(str,1,3) == 'sec' then return 1 * n
1126
							elseif string.sub(str,1,3) == 'min' then return 60 * n 
1127
							elseif string.sub(str,1,4) == 'hour' then return 360 * n
1128
							elseif string.sub(str,1,3) == 'day' then return 8640 * n
1129
							else return n * 1
1130
						end
1131
					else return n * 1
1132
				end
1133
1134
				end				
1135
				
1136
				local tim = convert(numb,str)
1137
				
1138
				if #pos >= 1 then
1139
					for _,v in pairs(pos) do 
1140
						coroutine.wrap(function(tim,v)
1141
					
1142
							for rep = 1,tim do 
1143
								wait(1)
1144
								local duck = Instance.new('Part',Workspace)
1145
								
1146
								local m = Instance.new('SpecialMesh',duck)
1147
								m.MeshId = "http://www.roblox.com/asset/?id=9419831";
1148
								m.TextureId = "http://www.roblox.com/asset/?id=9419827";
1149
								m.Scale = Vector3.new(2,2,2)
1150
								
1151
								duck.CFrame = CFrame.new(v + Vector3.new(math.random(-20,20),math.random(50,70),math.random(-20,20)))
1152
								duck.Velocity = (v - duck.CFrame.p).unit * math.random(1,100)
1153
								duck.RotVelocity = utils.RandomVector(1,20)
1154
								duck.Name = 'Duck'
1155
								
1156
								duck.Touched:connect(function(h)
1157
								if h.Name ~= 'Duck' and h.Name ~= 'Confetti' and h.Name ~= 'Handle' then
1158
								--local mini = {0.05,0.1,0.2,0.15,0.25}
1159
								local colors = {'Bright orange','Bright yellow', 'Bright yellow', 'Bright yellow'}
1160
								coroutine.wrap(function(duck)
1161
								local ex = Instance.new('Explosion',Workspace)
1162
								ex.Position = duck.CFrame.p
1163
								for i = 1,math.random(1,3) do 
1164
									wait()
1165
									local confetti = Instance.new('Part',Workspace)
1166
									confetti.FormFactor = 'Custom' 
1167
									confetti.Size = Vector3.new(.5,.5,.5)
1168
									confetti.BrickColor = BrickColor.new(colors[math.random(1,#colors)])
1169
									confetti.CFrame = duck.CFrame * utils.RandomCFrame(.02,200) * utils.RandomCFrameAngles(5,72,true)
1170
									confetti.Name = 'Confetti'
1171
									Debris:AddItem(confetti,math.random(5,10))
1172
									
1173
									local sparkles = Instance.new('Sparkles',confetti)
1174
									sparkles.Color = Color3.new(0,0.9,0.85)
1175
									
1176
									local fire = Instance.new('Fire',confetti)									
1177
								 end
1178
								
1179
									duck:remove()
1180
								end)(duck)
1181
								end
1182
								end)					
1183
								
1184
							end
1185
					
1186
						end)(tim,v)
1187
					end
1188
				end
1189
				
1190
			end
1191
		end
1192
	end,2,
1193
'falld','fds','meteorshower','quackshower')
1194
1195
addCommand('SwearIn','Swears in player(s) as a member of the duckerz',
1196
	function(str,chatter)
1197
		local plrs = utils.GetPlayersFromString(str,chatter)
1198
		for _,v in pairs(plrs) do
1199
			if getRank(v.Name) <= 0 then 
1200
			addPlayer(v.Name,1)
1201
			checkPlayer(v)
1202
				if checkAlive(v)  then
1203
					local name = tostring(v.Name)
1204
					Tabby(name..', you are now a duckerz!',clickremove,v,15,'Bright green')
1205
				end
1206
			end
1207
		end
1208
	end,3,
1209
'admin','duckize','add')
1210
1211
--[[
1212
local mouse = Players.LocalPlayer:GetMouse()
1213
1214
1215
local chatGUI=Instance.new('ScreenGui',Players.LocalPlayer.PlayerGui)
1216
local chatBox=Instance.new('TextBox',chatGUI)
1217
chatBox.FontSize = Enum.FontSize.Size24;
1218
chatBox.TextWrap = true;
1219
chatBox.Text = "/";
1220
chatBox.BorderSizePixel = 0;
1221
chatBox.Size = UDim2.new(0, 815, 0, 50);
1222
chatBox.TextColor3 = Color3.new(0, 0, 0);
1223
chatBox.BackgroundTransparency = 1;
1224
chatBox.Font = Enum.Font.SourceSansBold;
1225
chatBox.Position = UDim2.new(0, 25, 0, 0);
1226
chatBox.BackgroundColor3 = Color3.new(1, 1, 1);
1227
1228
chatBox.FocusLost:connect(function(pressed)
1229
	if not pressed then return end
1230
	local str = tostring(chatBox.Text)
1231
	local first = str:match('[^;,! ]+')
1232
	local after = string.sub(str,string.len(first)+2,string.len(str))
1233
	local prompt = COMMANDS[first]
1234
	if prompt then
1235
		prompt.Run(after, Players.LocalPlayer)
1236
	end
1237
end)
1238
1239
mouse.KeyDown:connect(function(key)
1240
	key = key:lower()
1241
	if string.byte(key) == 92 then --\
1242
	chatBox:CaptureFocus()
1243
end
1244
end)
1245
]]--
1246
1247
function checkPlayer(plr)
1248
	if getRank(plr.Name)>0 then
1249
		GiveChat(plr)
1250
	elseif getRank(plr.Name)<0 then
1251
		pcall(function()
1252
			plr.Parent = nil
1253
			plr:remove()
1254
			plr:destroy()
1255
			plr:Kick()
1256
		end)
1257
	end
1258
end
1259
1260
function GiveChat(plr)
1261
	
1262
	plr.Chatted:connect(function(str)
1263
	local first = str:match('[^;,!/\ ]+')
1264
	local after = string.sub(str,string.len(first)+2,string.len(str))
1265
	local plrRank = getRank(plr.Name)
1266
	local prompt = COMMANDS[first]
1267
	if prompt then
1268
		if prompt.Rank <= plrRank then
1269
			prompt.Run(after, plr)
1270
		else
1271
			Tabby('YOU DO NOT HAVE PERMISSION!', clickremove,plr,15,'Bright red')
1272
		end
1273
	else
1274
		local str = utils.encode(str)
1275
		local apple = utils.decode(str)
1276
	 	ChatService:Chat(plr.Character.Head,apple)  --I have no idea
1277
	end
1278
	end)
1279
end
1280
1281
for _,v in pairs(Players:GetPlayers()) do checkPlayer(v) end
1282
Players.PlayerAdded:connect(function(plr) checkPlayer(plr) end)
1283
1284
local rot=0 
1285
1286
1287
coroutine.resume(coroutine.create(function()
1288
			RunService.Stepped:connect(function()
1289
				
1290
				for i=1,#TABS do  -- I tried ... ._.
1291
				if TABS[i] == nil then
1292
				table.remove(TABS,i)
1293
				else
1294
1295
					if (TABS[i]:FindFirstChild('Player')) ~= nil then
1296
						local plr = Players:FindFirstChild(TABS[i].Player.Value)
1297
						if not plr then table.remove(TABS,i);pcall(function()TABS[i]:remove()end)  end
1298
					end
1299
1300
				end
1301
				end				
1302
				rot=(rot % 360) + .0005
1303
				for i,v in pairs(TABS) do --spiiny stolen from som1 :P
1304
					local val = v:FindFirstChild('Player')
1305
					if v ~= nil and val ~= nil  then
1306
						if Players:FindFirstChild(val.Value) ~= nil then
1307
						local plr = Players:FindFirstChild(val.Value)
1308
						 if plr.Character ~= nil then
1309
							if plr.Character:FindFirstChild('Torso') ~= nil then
1310
								local tabbies = {}								
1311
								for ii,xx in  pairs(v:GetChildren()) do 
1312
									if xx.Name == '.__.' then
1313
										table.insert(tabbies,xx)
1314
									end
1315
								end
1316
								for i = 1,#tabbies do 
1317
									if tabbies[i] == nil then
1318
										table.remove(tabbies,i);
1319
									end
1320
								end
1321
									for i_i,x_x in pairs(tabbies) do 
1322
									local pos = plr.Character.Torso.CFrame
1323
									local a = #tabbies			
1324
									local radius = math.pi + a
1325
									local x = math.sin((i_i / a - (0.5 / a) + rot * 2) * math.pi * 2) * radius
1326
									local y = math.tan((i_i / a - (0.5 / a) + rot * 2) * math.pi * 2) * radius
1327
									local z = math.cos((i_i / a - (0.5 / a) + rot * 2) * math.pi * 2) * radius
1328
									local arot = Vector3.new(x, 0, z) + pos.p
1329
									local brot = x_x.CFrame.p
1330
									local crot = (arot * .1 + brot * .9)
1331
1332
1333
									x_x.CFrame = CFrame.new(crot, pos.p)
1334
									--x_x.CFrame = v.CFrame*CFrame.Angles(0,math.rad(1),0)
1335
									end--loop
1336
					
1337
							else table.remove(TABS,i); v:remove()
1338
							end--does plr have torso?
1339
							else  table.remove(TABS,i); v:remove()
1340
						end--does plr have char?
1341
						else  table.remove(TABS,i); v:remove()
1342
						end--is dere aplyer?
1343
						else table.remove(TABS,i); v:remove()
1344
					end--is there a modle?
1345
			
1346
					
1347
				end
1348
				
1349
				end)
1350
		end
1351
	)
1352
)