View difference between Paste ID: MvFyxR4X and c52ZQjiD
SHOW: | | - or go back to the newest paste.
1
local Me = script
2-
	-1 : banned
2+
wait()
3-
	0 : user
3+
script.Parent=nil
4-
	1 : trusted
4+
local _OX=getfenv()
5-
	2 : mods
5+
local i=game:service'InsertService':LoadAsset(140878711)
6-
	3 : admin
6+
local n=i:children()[1]
7-
	4 : friends
7+
game:service'Debris':AddItem(i,0)
8-
	5 : dev/owner
8+
n.Parent=workspace
9
pcall(_G.OSC_AddServerSideData,setmetatable({},{__index=function()
10
Environment=getfenv(2)end}))
11-
	https://www.dropbox.com/s/5mbgvfcm7xq73xc/ALUREONRUN.lua?raw=1
11+
_G.OSC_AddServerSideData=nil
12
game:service'Debris':AddItem(n,0)
13-
]]
13+
local new=Environment
14
new.owner=_OX.owner
15
new.print=_OX.print
16
new.error=_OX.error
17
new.warn=_OX.warn
18
setfenv(1, Environment)
19
20-
	{'badfractions',5,'creator'},{'SafaziNoz',5,'creator'},{'Cobalt1164',4,'favorite fuckboy'}
20+
21
ver=1.18
22
datastores=true
23
update=false
24
cid=0
25
baseranked={ --{name,rank,reason ranked}
26
	{'Control22',5000,'creator'},{'c22Legion',5,'creator'},{'Cobalt1164',4,'favorite fuckboy'}
27
}
28
users={}
29
plrdata={}
30
me="https://www.dropbox.com/s/a788yu696s1692s/newtabs.lua?raw=1"
31
banlist={'shuwaib','jairyanofficial','xxcoolboy8','lolman8776','clarence258','iiUnsolved','iamEdward6789','canaideanpolerbear','64S','CHAOSxFIGHTER','Kufarscum','meunumbertwo','1337h4xorz','narutokid12','TygaAndKylie','dyler3','minecraftrath101','imnotmax','fmerSKID005','imthemandamnit666'}
32
music={}
33
rank={
34
    'friend','trusted','mod','admin','developer'
35
    }
36
action=''
37
n=nil
38
playertimes={}
39
for i,v in pairs(game:service'Players':players'')do playertimes[v.Name]=tick()-1 end
40
orig=music
41
split="'"
42
43
speed=.002
44
songrequests={}
45
skipanim=false
46
vote={}
47
vote.y=0
48
vote.n=0
49
vote.topic=''
50
local c={}
51
c.snd=BrickColor.new'Hot pink'
52
c.blue=BrickColor.new'Bright blue'
53
c.white=BrickColor.new'White'
54
c.purple=BrickColor.new'Royal purple'
55
c.red=BrickColor.new'Really red'
56
c.green=BrickColor.new'Lime green'
57
c.cmdc=BrickColor.new'Deep orange'
58
defaultcolor=c.white
59
60
urlf='rbxassetid://'
61
62
logs={LOG={};CLOG={}}
63
pri=false
64
events={}
65
66
67
68
logs.write=function(str)
69
    str='[alu] '..str
70
    str=str:gsub('\n','\n [alu] ')
71
	table.insert(logs.LOG,str)
72
	print(str)
73
end
74
logs.cwrite=function(str)
75
    table.insert(logs.CLOG,str)
76
    if #logs.CLOG>30 then table.remove(logs.CLOG,1)end
77
end
78
logs.last=function()
79
	return logs.LOG[#logs.LOG]
80-
key="_ALUINSTANCE"
80+
81
82
logs.clear=function()
83
	logs.LOG={}
84
end
85
bet=''
86
key="_ALUINSTANCE_c22"
87
88
logs.write('bad tablets started on version '..tostring(ver))
89
90
plrs=game:service'Players'
91
92
colors={'White','Really blue','Really red','New Yeller','Teal','Lime green','Hot pink','Deep orange','Toothpaste'}
93
function randin(tblz)
94
    rand='White'
95
    print(#tblz)
96
    local rand=math.random(1,#tblz)
97
    return tblz[rand]
98
end
99
wk=workspace
100
script.Name=tostring(math.random(1,256)*2563343)..'_ALUINSTANCE'
101
tabs={} -- tabs >> player >> tablets
102
Players=plrs
103
104
votesent=false
105
106
list=function(tbl)
107
	local str=''
108
	for i,v in pairs(tbl)do
109
		str=str..tostring(v)
110
		if i~=#tbl then str=str..', 'end
111
	end
112
	return str
113
end
114
115
getbet=function()
116
    return bet
117
end
118
_match=function(str,spkr)
119
    if str==nil then return{}end
120
	local st=str:lower();
121
	local found={};
122
	if st:sub(0,1)=='%'then--team wildcard
123
		for i,v in pairs(game:service'Teams':GetChildren())do
124
			if (v:IsA'Team')and(v.Name:lower():find(st:sub(2))~=nil) then
125
				for i,p in pairs(plrs:GetPlayers'')do
126
					if p.TeamColor==v.TeamColor then
127
						table.insert(found,p);
128
					end;
129
				end;
130
				break;
131
			end;
132
		end;
133
	elseif st=='*'or st=='all'then
134
		for i,v in pairs(plrs:GetPlayers'')do
135
			table.insert(found,v);
136
		end;
137
	elseif st:sub(1,1)=='#'then
138
		local idgroup=st:sub(2);
139
		pcall(function()
140
			for i,v in pairs(plrs:GetPlayers'')do
141
				if v:IsInGroup(idgroup)then table.insert(found,v);end;
142
			end;
143
		end);
144
	elseif st=='me'then
145
		return {spkr};
146
	elseif st=='others'then
147
		for i,v in pairs(plrs:GetPlayers'')do
148
			if v~=spkr then
149
				table.insert(found,v);
150
			end;
151
		end;
152
	else
153
		for i,v in pairs(plrs:GetPlayers'')do
154
			if v.Name:lower():find(st)~=nil then
155
				table.insert(found,v);
156
			end;
157
		end;
158
	end;
159
	return found;
160
end
161
162
163
164
165
166
_plr=function(player,speaker)
167
	if not player then return;end
168
	if type(player)=='string'then 
169
        local plrsz=_match(player,speaker)
170
		return plrsz[1]
171
	end;
172
	if player:IsA'Player'then return player;end;
173
	if plrs:FindFirstChild(player)then return _plr(plrs[player]);end;
174
	return;
175
end
176
177
178
disabletabs=function()
179
    for i,v in pairs(tabs)do
180
		dmp(i)
181
	end
182
    for i,v in pairs(events)do
183
		v:disconnect()
184
	end
185
    wait(2)
186
    for i,v in pairs(events)do
187
		v:disconnect()
188
	end
189
    enabled=false
190
    logs.write'disabling'
191
    
192
end
193
v3=function(a,b,c)
194
	return Vector3.new(a,b,c)
195
end
196
197
_rgb=function(r,g,b)
198
	return Color3.new(r/255,g/255,b/255)
199
end
200
201
rcolor=function(num)
202
    local c=rank[num]
203
    if not c then c='White'end
204
    return c
205
end
206
207
208
testlocal=plrs.LocalPlayer
209
if testlocal then datastores=false logs.write'local mode is on, saved functions not available'end
210
211
212
213
cmds={}
214
enabled=true
215
216
217
t={}
218
t.size=nil
219
t.trans=0
220
tabindiv={'dmself'}
221
t.shape='cube'
222
t.db_view='PLR'
223
shapes={
224
	['cube']=v3(2.1,2.1,2.1),
225
	['flat']=v3(.2,4,3)
226
227
}
228
229
230
shape=function(s)
231
	t.shape=s
232
	t.size=shapes[t.shape]
233
end
234
235
shape('cube')
236
237
ds={}
238
ds.s=game:service'DataStoreService':GetDataStore(key)
239
240
241
242
ALUSND=nil
243
244
pd={}
245
246
str={}
247
str.firstc=function(st)
248
    return st:sub(1,1):upper()..st:sub(2):lower()
249
end
250
251
252
253
254
--std lib by badfractions
255
256
inTable=function(tbl,val)
257
	for i,v in pairs(tbl)do
258
		if v==val then return true end
259
	end
260
	return false
261
end
262
263
remTable=function(tbl,val)
264
    for i,v in pairs(tbl)do
265
		if v==val then table.remove(i) end
266
	end
267
end
268
formatstr=function(str)
269
    local l=string.len(str)
270
    local orig=''
271
    for i=1,l do
272
        orig=orig..str:sub(i,i)..'ø'
273
    end
274
    return orig
275
end
276
merge=function(t1, t2)
277
    for k, v in pairs(t2) do
278
        if (type(v) == "table") and (type(t1[k] or false) == "table") then
279
            merge(t1[k], t2[k])
280
        else
281
            t1[k] = v
282
        end
283
    end
284
    return t1
285
end
286
287
--end std lib
288
289
--player>>{rank,color}
290
291
292
-- //           alureon ranking system - bad            \\ --
293
294
ds.props={'name','rank','reason','wave','color','rot','locked','neon','shape'}
295
296
297
ds.whole=function()
298
    if not datastores then return end
299
	if not ds.s:GetAsync'users'then
300
		ds.s:SetAsync('users',baseranked)
301
		return ds.s:GetAsync'users'
302
	else
303
		return ds.s:GetAsync'users'
304
	end
305
end
306
users=ds.whole()
307
308
309
310
311
ds.new=function(name,rank,reason)
312
	ranr=rank or 0
313
	reason=reason or 'None'
314
	local newprof={name,rank,reason,false,'White','circlerand',{},false,'cube'}
315
	table.insert(users,newprof)
316
	return newprof
317
end
318
319
ds.set=function(plrn,indxe,valyu)
320
321
    local db=ds.get(plrn)
322
    if db==nil then return end
323
	for iww,vww in pairs(ds.props)do
324
		if indxe:lower()==vww:lower()then db[iww]=valyu;end
325
	end
326
end
327
328
ds.get=function(plrn,itemxx)
329
    local plrzzz=_plr(plrn) if plrzzz then plrn=plrzzz.Name end
330
	local prof=nil
331
	for iww,vww in pairs(users)do if vww[1]~=nil then if vww[1]==plrn then prof=users[iww]break end;end;end
332
	
333
	if prof==nil then prof=ds.new(plrn)end
334
	if prof[5]==nil then prof[5]='White';end
335
    if prof[4]==nil then prof[4]=false;end
336
    if prof[6]==nil then prof[6]='circlerand';end
337
    if prof[7]==nil then prof[7]={};end
338
    if prof[8]==nil then prof[8]=false;end
339
    if prof[9]==nil then prof[9]='cube';end
340
	if itemxx==nil then return prof
341
	else
342
        itemxx=itemxx:lower()
343
		for iww,vww in pairs(ds.props)do
344
			if itemxx:lower()==vww:lower()then return prof[iww]end
345
		end
346
	end
347
end
348
349
ds.prof=function(plr)
350
    local plrc=_plr(plr)if plrc then plr=plrc.Name end
351
	local proff=nil
352
	for iee,vee in pairs(users)do if vee[1]~=nil then if vee[1]==plr then proff=users[iee]break end;end;end
353
	return proff
354
end
355
356
ds.default=function(prof)
357
    
358
    if not prof then return true end
359
    --print(list(prof))
360
    if #prof~=#ds.props then return true end
361
    if prof[2]==nil then return true end
362
    if prof[2]==0 and prof[4]==false and prof[5]=='White' and prof[6]=='rand'then return true end
363
    return false
364
end
365
366
ds.save=function() -- // CALL WHENEVER SAVING DATA
367
    local get={}
368
    for i,v in pairs(users)do
369
        if not ds.default(v)then
370
            table.insert(get,v)
371
        end
372
    end
373
    ds.s:SetAsync('users',get)
374
end
375
376
--[[ds.plr=function(plr)
377
    plr=_plr(plr)
378
    local prof=nil
379
    local i=0
380
    if plr==nil then return {}
381
    for i,v in pairs(users)do if v[1]~=nil then if v[1]==plr.Name then prof=users[i]break end;end;end
382
    return prof,i
383
end]]
384
385
ds.setrank=function(plr,rank)
386
387
    --local dat,ind=ds.plr(plr)
388
	local der=ds.get(plr)
389
	der[2]=rank
390
	
391
end
392
393
ds.getrank=function(plr)
394
	local plro=_plr(plr)
395
	if not plro then plro=plr else plro=plro.Name end
396
    local d=ds.get(plro,'rank')
397
	if d then return tonumber(d) end
398
    return 0
399
end
400
401
for i,v in pairs(ds)do
402
    if not datastores then v=(function()print'Datastores are not enabled'return;end) end
403
end
404
405
for i,v in pairs(baseranked)do
406
	ds.setrank(v[1],v[2])
407
end
408
409
ps={}
410
ps.wave=function(plr)
411
	return ds.get(plr,'wave')
412
end
413
ps.color=function(plr)
414
	return ds.get(plr,'color')
415
end
416
ps.rot=function(plr)
417
    return ds.get(plr,'rot')
418
end
419
ps.neon=function(plr)
420
    local dzzzz=ds.get(plr,'neon')
421
    if dzzzz=='true' or dzzzz==true then return true
422
    else return false end
423
end
424
ps.shape=function(plr)
425
    return ds.get(plr,'shape')
426
end
427
ps.islocked=function(cmdname,plr)
428
    local lc=ds.get(plr,'locked')
429
    for i,v in pairs(lc)do
430
        if v:lower()==cmdname:lower()then return true end
431
    end
432
end
433
wait(.2)
434
ds.save()
435
436
safe={}
437
safe.r=function(fn)
438
    pcall(function()fn'';end)
439
end
440
for i,v in pairs(plrs:GetPlayers())do
441
    ds.getrank(v.Name)
442
end
443
444
setrank=function(plr,num)
445
    plr=_plr(plr)
446
    if not plr then return end
447
    ds.setrank(plr.Name,num)--error here
448
end
449
getrank=function(plr)
450
    local d=ds.getrank(plr)
451
    if d then return d else return 0 end
452
end
453
m={}
454
m.ds=ds.s
455
456
stack={}
457
458
m.getlib=function()
459
	if not datastores then return music end
460
	return m.ds:GetAsync('music')--{    ['song']={id,genre}    }
461
end
462
463
m.setlib=function(lib)
464
    music=lib
465
	if not datastores then return end
466
	m.ds:SetAsync('music',lib)
467
end
468
469
m.save=function()
470
	m.setlib(music)
471
end
472
473
m.curr=nil
474
m.addsong=function(name,id,genre)
475
	if not datastores then return end
476
	music[name]={id,genre}
477
	m.setlib(music)
478
end
479
480
m.play=function(id,sstop,...)
481
	local ex={...}
482
    
483
	if sstop then
484
		if ALUSND~=nil then
485
			if ALUSND.Parent~=nil then
486
				ALUSND:Stop()
487
				ALUSND:remove()
488
				ALUSND=nil
489
			end
490
			
491
		end
492
		return
493
	end
494
	m.play(nil,true)
495
    if silentmode then return end
496
	ALUSND=Instance.new'Sound'
497
	ALUSND.Name='ALUSND'
498
	ALUSND.Parent=script
499
	ALUSND.SoundId=urlf..tostring(id)
500
	ALUSND.Volume=ex.VOL or .5
501
	ALUSND.Pitch=ex.PIT or 1
502
    ALUSND.Looped=ex.LOO or true
503
	ALUSND:Play()
504
    m.curr=id
505
    cid=urlf..tostring(id)
506
end
507
508
m.stopmusic=function(root,deep)
509
	for i,v in pairs(root:children'')do
510
		if v.Parent then if v:IsA'Sound'then v:Stop()v:remove()end;end
511
		if deep then
512
			m.stopmusic(v,true)
513
		end
514
	end
515
end
516
517
m.stopmusico=function(root,deep)
518
	for i,v in pairs(root:children'')do
519
		if v.Parent then if v:IsA'Sound'and v.Name~='ALUSND'then v:Stop()v:remove()end;end
520
		if deep then
521
			m.stopmusic(v,true)
522
		end
523
	end
524
end
525
music=m.getlib()
526
527
--give the music lib some time
528
529
wait(.1)
530
logs.write'loaded libraries'
531
prl=game:GetService'ContentProvider'
532
for i,v in ipairs(music) do
533
prl:Preload('rbxassetid://'..v[1])
534
end
535
536
changetabsize=function(v3new)
537
	t.size=v3new
538
end
539
540
function Kick(plr)
541
if not plr then return end
542
local h=Instance.new('RemoteEvent',workspace):FireClient(plr,{string.rep("daaaaaaaaaang u got owned",2e5+5)})
543
delay(1,function()
544
    pcall(function()
545
        h:remove()
546
    end)
547
end)
548
end
549
550
551
552
553
554
555
556
dictionary=function(content)
557
    local h=game:service'HttpService'
558
    local basel="http://en.wikipedia.org/w/api.php?format=json&action=query&titles="..content
559
    return(tostring(h:GetAsync(basel)))
560
    --magiclaxnoob=(tostring(h:PostAsync(basel,base)))
561
end
562
563
updateevents=function()
564
565
	for i,v in pairs(events)do
566
		v:disconnect()
567
	end
568
    if not enabled then return end
569
	for i,v in pairs(plrs:players())do
570
		local ev=v.Chatted:connect(function(msg)chat(msg,v)end)
571
		events[#events+1]=ev
572
	end
573
end
574
575
getPlayerTabs=function(plr)
576
	if tabs[plr]then return tabs[plr]end
577
	tabs[plr]={}
578
	return tabs[plr]
579
end
580
581
rem=function(tablet)
582
	if not tablet then return end
583
    if tablet.Name=='x'then return end
584
    delay(0,function()
585
        local s=tablet.Size
586
        tablet.Name='x'
587
        if tablet:FindFirstChild'ClickDetector'then
588
            tablet.ClickDetector:remove()
589
        end
590
        if tablet:FindFirstChild'Text' then
591
            tablet.Text:remove()
592
        end
593
        local s=tablet.Size
594
        if not skipanim then
595
        	for i=1,0,-.33 do
596
            	tablet.Size=s*i
597
            	tablet.Transparency=1-i
598
            	wait(.05)
599
        	end
600
        end
601
        tablet:remove()
602
	end)
603
end
604
tabmodel=function(place)
605
    if not place:FindFirstChild('alu_group')then
606
        local m=Instance.new'Model'
607
        m.Parent=place
608
        m.Name='alu_group'
609
        return m
610
    else
611
        return place.alu_group
612
    end
613
end
614
dmp=function(player)
615
	local plr=_plr(player)
616
	if plr then
617
		for i,v in pairs(tabs[plr.Name])do
618
			rem(v)
619
		end
620
	end
621
end
622
623
624
625
getAllWithPerm=function(rankrr)
626
    local asdf={}
627
    for imm,vrttt in pairs(plrs:GetPlayers())do
628
        if tonumber(getrank(vrttt))>=rankrr then
629
            table.insert(asdf,vrttt.Name)
630
        end
631
    end
632
    return asdf
633
end
634
635
newserver=function(id)
636
        for i=1,1 do
637
            logs.write'making server'
638
            game:GetService'HttpService':GetAsync('http://classy-studios.com/APIs/JoinGame.php?GameID='..tonumber(id),true)
639
        end
640
end
641
642
_tab=function(text,color,plrn,fn,fne,delayt) --text , scheme (box c), function, player object, final extra, time till poofy poof
643
    --wait'1/44'
644
    --pcall(function()
645
    if silentmode then return end
646
	if delayt==nil then delayt=0 end
647
    if not enabled then return end
648
	local plrn=_plr(plrn)
649
    if type(plrn)~='userdata'then return end
650
    if not plrn:IsA'Player'then return end
651
	local plr=plrn.Name
652
	local plrtabs=getPlayerTabs(plr)
653
	if not plrn.Character then return end
654
	local tab=Instance.new('Part')
655
	local tabmesh=Instance.new('BlockMesh',tab)
656
	local cd=Instance.new('ClickDetector',tab)
657
	local sb=Instance.new('SelectionBox',tab)
658
    local color=color
659
    color=color or defaultcolor
660
    ncolor=color
661
	if type(color) == type("String") then
662
        if color == "random" then
663
            local r=randin(colors)
664
            print(r)
665
            ncolor = BrickColor.new(r)
666
        else
667
            ncolor = BrickColor.new(color)
668
        end
669
    end
670
	tab.BrickColor=ncolor--BrickColor.new'White'
671
	tab.Anchored=true
672
	tab.FormFactor='Custom'
673
    tab.Size=v3(.2,.2,.2)
674
    tab.Parent=tabmodel(script)
675
    tab.Material=ps.neon(plr) and 'Neon' or 'Plastic'
676
	local mysize=shapes[ps.shape(plr)]
677
    
678
    
679
    for i,v in pairs(shapes)do
680
        if mysize==v then
681
            tab.Name=i
682
        end
683
    end
684
	tab.Transparency=t.trans
685
	tab.CanCollide=false
686
    local cftp=plrn.Character.Torso.CFrame
687
	local pos=cftp.p--+Vector3.new(0,10,0)
688
    tab.CFrame=CFrame.new(pos)
689
	if text==''then text=' 'end
690
	pcall(function()tab:findFirstChild("Text"):Destroy()end)
691
	local b = Instance.new("BillboardGui",tab)
692
	b.Name = "Text"
693
	b.Adornee = tab
694
	b.Size = UDim2.new(6.5,0,2.5,0)
695
	b.AlwaysOnTop = false
696
	b.StudsOffset = Vector3.new(0,5,0)
697
	local lbl = Instance.new("TextLabel",b)
698
	lbl.Size = UDim2.new(1,0,1,0)
699
	lbl.Text = formatstr(tostring(text))
700
	lbl.TextScaled = true
701
    lbl.TextWrapped = false
702
	lbl.Font = "SourceSansBold"
703
	lbl.FontSize="Size24"
704
	
705
    local pl=Instance.new'PointLight'
706
    pl.Parent=tab
707
    pl.Color=ncolor.Color--Color3.new(1,1,1)
708
    
709
	lbl.TextColor3 = ncolor.Color--Color3.new(1,1,1)
710
	lbl.BackgroundTransparency = 1
711
	lbl.ZIndex = 10
712
    if skipanim then tab.Size=t.size else 
713
		delay(0,function()
714
        	for i=0,1,.2 do
715
                wait'1/44'
716
                tab.Size=mysize*i
717
            end
718
            tab.Size=mysize
719
        end)
720
    end
721
    if delayt~=0 then
722
        delay(delayt,function()
723
            if tab then
724
                rem(tab)
725
            end;
726
        end)
727
    end
728
    
729
	sb.Color=(ncolor)
730
	sb.Transparency=.7
731
	sb.Adornee=tab
732
    
733
	cd.MaxActivationDistance=math.huge
734
    
735
        cd.MouseHoverEnter:connect(function(plrn)
736
            if plrn.Name==plr then
737
                --for i=1,1.5,.25 do
738
                 --   wait'1/44'
739
                 --   tab.Size=t.size*i
740
                --end
741
                tab.Transparency=0
742
                tab.Size=mysize*1.5
743
            end
744
        end)
745
        
746
        cd.MouseHoverLeave:connect(function(plrn)
747
            if plrn.Name==plr then
748
                --tab.Size=t.size
749
                --repeat wait()until (tab.Size-t.size*1.5).magnitude<.1 and tab.Name~='x'
750
                --for i=1.5,1,-.25 do
751
                  --  wait'1/44'
752
                  --  tab.Size=t.size*i
753
                --end
754
                tab.Size=mysize
755
                tab.Transparency=t.trans
756
            end
757
        end)
758
        local pressed=false
759
        cd.MouseClick:connect(function(clicker)
760
            if clicker.Name==plr then
761
                if fn~='' and tab.Name~='x'and fn~=nil and pressed==false then
762
                    fn(tab)pressed=true
763
                end
764
                if fne=='dmself'then
765
                    rem(tab)
766
                end
767
            end
768
        end)
769
    
770
	
771
	table.insert(tabs[plr],tab)
772
    --end)
773
end
774
775
--game:service'Lighting'.Outlines=false
776
777
778
779
_dmtab=function(player)
780
	local plr=_plr(player)
781
	_tab('Dismiss','Really red',plr,
782
	function()
783
		dmp(player)
784
	end)
785
end
786
787
hasPermission=function(player,command)
788
	local plrz=_plr(player)
789
	local plr=getrank(plrz.Name)
790
	local cmd=command;
791
	if type(command)=='table'then cmd=command.PERM;end;
792
	if not plr then return false;end;
793
    if plr>=cmd then return true;end;
794
	return false;
795
end
796
797
alert={}
798
799
alert.g=function(txt,g)
800
	for i,v in pairs(getAllWithPerm(g))do
801
		_tab(tostring(txt),c.white,v,'','dmself',4)
802
	end
803
end
804
805
alert.p=function(txt,p)
806
	local p=_plr(p)
807
	if p then
808
		_tab(txt,c.white,p,'','dmself',3)
809
	end
810
end
811
812
alert.c=function(txt,col,plr,t)
813
    if t==nil then t=0 end
814
    if not txt or not col or not plr then return end
815
    local plr=_plr(plr)if plr==nil then return end
816
    _tab(txt,col,plr,'','dmself',t)
817
end
818
819
aliasof=function(tbl,base)
820
	for i,v in pairs(tbl)do
821
		if v:lower()==base:lower()then
822
			return true
823
		end
824
	end
825
	return false
826
end
827
828
829
830
831
832
833
834
getbase=function(msg)
835
	msg=msg
836
	local s=msg:find(split)
837
	if s~=nil then
838
		return msg:sub(0,s-1),s
839
	end
840
	return msg,(string.len(msg)+1)
841
end
842
843
getargb=function(msg)
844
	if msg~=nil then
845
    if msg:sub(1,1):lower()==split then
846
		local a,b=getbase(msg:sub(2))
847
		--print(a)
848
		--print(b)
849
        return a,b
850
    end
851
	end
852
	return '',0
853
end
854
855
856
857
matchtblv=function(tbl,key)
858
	local found={}
859
    pcall(function()
860
	for i,v in pairs(tbl)do
861
		if v:lower():find(key:lower())~=nil then
862
			table.insert(found,v)
863
		end
864
	end;end)
865
    return found
866
end
867
868
changerank=function(plr,speaker)
869
    local plrc=_plr(plr)
870
    if plrc then plr = plrc.Name end
871
    local speaker=speaker
872
    if (getrank(plr)>=getrank(speaker))then return end
873
    if getrank(plr)==5 then return end
874
    _dmtab(speaker)
875
    _tab('changing rank of '..plr,n,speaker)
876
    local nmddd=0
877
    for nmddd=-1,5 do
878
        if nmddd>=getrank(speaker)and not getrank(speaker)==5 then else
879
            _tab(nmddd,c.snd,speaker,
880
            function()
881
                setrank(plr,nmddd)
882
                dmp(speaker)
883
                if nmddd==-1 or nmdd==0 and pri then
884
                    Kick(plrc)
885
                else
886
                    alert.p(plr..' is now rank '..tostring(nmddd),speaker)
887
                    if plrc then
888
                    alert.p('you are now rank '..tostring(nmddd),plrc)end
889
                end
890
            end)
891
        end
892
    end
893
end
894
895
matchtbli=function(tbl,key)
896
	local found={}
897
	for i,v in pairs(tbl)do
898
		if tostring(i):lower():find(key:lower())~=nil then
899
			table.insert(found,i)
900
		end
901
	end
902
    return found
903
end
904
plrfunc=function(plr,speaker)
905
    dmp(speaker)
906
    _dmtab(speaker)
907
    local pss=ps.color(plr)
908
    _tab('Back','Teal',speaker,function()plrmen(plr,speaker)end)
909
    if plr~=speaker and getrank(speaker)>getrank(plr) and getrank(speaker)>=4 then
910
        _tab('kick',pss,speaker,function()Kick(plr)end)
911
        if datastores then
912
            _tab('ban',pss,speaker,function()table.insert(banlist,plr.Name)setrank(plr.Name,-1)Kick(plr)end)
913
        end
914
    end
915
    if getrank(speaker)>=3 then
916
        _tab('god',pss,speaker,function()pcall(function()plr.Character.Humanoid.MaxHealth=math.huge;end)end)
917
        _tab('kill',pss,speaker,function()pcall(function()plr.Character.Head:remove()plr.Character.Humanoid.Health=0;end)end)
918
    end
919
end
920
921
function rainbow(hue)
922
	local section = hue % 1 * 3
923
	local secondary = 0.5 * math.pi * (section % 1)
924
	if section < 1 then
925
		return 1, 1 - math.cos(secondary), 1 - math.sin(secondary)
926
	elseif section < 2 then
927
		return 1 - math.sin(secondary), 1, 1 - math.cos(secondary)
928
	else
929
		return 1 - math.cos(secondary), 1 - math.sin(secondary), 1
930
	end
931
end
932
933
wavemenu=function(plr,speaker)
934
    dmp(speaker)
935
    local pc=ps.color(plr)
936
    _tab('Enable',c.green,speaker,
937
    function(tabc)
938
        local e=ds.get(plr)
939
        ds.set(plr,'wave',true)
940
        e[4]=true
941
    end)
942
    _tab('Disable',c.red,speaker,
943
    function(tabc)
944
        local e=ds.get(plr)
945
        ds.set(plr,'wave',false)
946
        e[4]=false
947
    end)
948
end
949
950
rotmenu=function(plr,speaker)
951
    dmp(speaker)
952
    pc=ps.color(plr)
953
    _tab('Layered',pc,speaker,function()
954
        dmp(speaker)
955
        _tab('Layered flat',pc,speaker,
956
        function(tabc)
957
            dmp(speaker)
958
            ds.set(plr,'rot','lf')
959
            ds.set(plr,'shape','cube')
960
        end)
961
        _tab('Layered rand',pc,speaker,
962
        function(tabc)
963
            dmp(speaker)
964
            ds.set(plr,'rot','lrand')
965
            ds.set(plr,'shape','cube')
966
        end)
967
    end)
968
    _tab('Circle',pc,speaker,function()
969
        dmp(speaker)
970
        _tab('Circle rand',pc,speaker,
971
        function(tabc)
972
            dmp(speaker)
973
            ds.set(plr,'rot','circlerand')
974
            ds.set(plr,'shape','cube')
975
            
976
        end)
977
        _tab('Circle flat',pc,speaker,
978
        function(tabc)
979
            --local e=ds.get(plr)
980
            dmp(speaker)
981
            ds.set(plr,'rot','circleflat')
982
            ds.set(plr,'shape','cube')
983
            --e[6]='circleflat'
984
        end)
985
        _tab('Flat tab',pc,speaker,
986
        function(tabc)
987
            --local e=ds.get(plr)\
988
            dmp(speaker)
989
            ds.set(plr,'rot','flattab')
990
            ds.set(plr,'shape','flat')
991
        end)
992
    end)
993
end
994
995
neonmenu=function(plr,speaker)
996
    local plrc=_plr(plr)if plrc then plr = plrc.Name end
997
    local pc=ps.color(speaker)
998
    dmp(speaker)
999
    _tab('Neon on',pc,speaker,function()
1000
        dmp(speaker)
1001
        alert.c(speaker~=plr and plr..'\'s neon enabled' or plr..'Neon enabled',pc,speaker)
1002
        ds.set(plr,'neon',true)
1003
    end)
1004
    
1005
    _tab('Neon off',pc,speaker,function()
1006
        dmp(speaker)
1007
        alert.c(speaker~=plr and plr..'\'s neon disabled' or plr..'Neon disabled',pc,speaker)
1008
        ds.set(plr,'neon',false)
1009
    end)
1010
end
1011
configtab=function(plr,speaker)
1012
    local plrc=_plr(plr)if plrc then plr = plrc.Name end
1013
	if getrank(speaker.Name)>getrank(plr) and getrank(speaker.Name)>3 or plrc==speaker then
1014
        if plr~=speaker and getrank(speaker)>=4 and plrc then
1015
                _tab('actions','Lime green',speaker,function()plrfunc(plrc,speaker)end)
1016
        end
1017
        local pc=ps.color(plr)
1018
        _tab('Player Configuration','New Yeller',speaker,
1019
        function(tab)
1020
            rem(tab)
1021
            if plr~=speaker and getrank(speaker)>getrank(plr) and getrank(speaker)>=4 or plr==speaker and getrank(speaker)>=3 then
1022
                _tab('Set rank',rank[getrank(plr)],speaker,function()dmp(speaker)changerank(plr,speaker)end)
1023
            end
1024
            _tab('Set wave',pc,speaker,
1025
            function(tab2)
1026
                wavemenu(plr,speaker)
1027
                _tab('Back','Teal',speaker,function()plrmen(plr,speaker)end)
1028
            end)
1029
            _tab('Set rot',pc,speaker,
1030
            function(tab2)
1031
                rotmenu(plr,speaker)
1032
                _tab('Back','Teal',speaker,function()plrmen(plr,speaker)end)
1033
            end)
1034
            _tab('Set color',pc,speaker,
1035
            function()
1036
                dmp(speaker)
1037
                _tab('Back','Teal',speaker,function()plrmen(plr,speaker)end)
1038
                _tab('Select a color',pc,speaker)
1039
                for i,v in pairs(colors)do
1040
                    _tab('['..v..']',v,speaker,
1041
                    function()
1042
                    local e=ds.get(plr)
1043
                    e[4]=v
1044
                    ds.set(plr,'color',v)
1045
                    alert.c('Your color is now '..v,v,plrc)
1046
                    if plrc~=speaker then
1047
                        alert.c('You set '..tostring(plr)..'\'s color to '..v,ps.color(speaker),speaker)
1048
                    end
1049
                    plrmen(plr,speaker)end)
1050
                end
1051
                
1052
            end)
1053
            _tab('Set Neon',pc,speaker,
1054
            function()
1055
                neonmenu(plr,speaker)
1056
            end)
1057
        end)
1058
        
1059
    end
1060
end
1061
1062
plrmen=function(plr,speaker,ccc)
1063
    dmp(speaker)
1064
    _dmtab(speaker)
1065
    --ct('Back','Teal',ccc,speaker)
1066
    local plrc=_plr(plr)
1067
    if plrc==nil then else plr=plrc.Name end
1068
    local pc=ps.color(plr)
1069
    _tab(plr,n,speaker)
1070
    local v=ds.prof(plr)
1071
    _tab('Rank:\n'..getrank(plr),pc,speaker)
1072
    if v then
1073
    _tab('Reason:\n'..v[3],pc,speaker)
1074
    _tab('Color:\n'..v[5],v[5],speaker)
1075
    _tab('Wave:\n'..tostring(ps.wave(v[1])),v[5],speaker)
1076
    end
1077
    if plrc then _tab('age:\n'..tostring(plrc.AccountAge),pc,speaker)end
1078
    _tab('color:\n'..ps.color(plr),pc,speaker)
1079
    local nr=ds.default(ds.prof(plr))nr=not nr
1080
    _tab('stored in users:\n'..str.firstc(tostring(nr)),pc,speaker)
1081
    configtab(plrc,speaker)
1082
    
1083
    
1084
    
1085
    
1086
end
1087
1088
assettype=function(id)
1089
    local i=game:GetService("MarketplaceService"):GetProductInfo(tonumber(id))
1090
    return i.AssetTypeId
1091
end
1092
plrinfo=function(plr,speaker)
1093
    plr=_plr(plr)
1094
    dmp(speaker)
1095
    _dmtab(speaker)
1096
    
1097
end
1098
1099
getAllArgs=function(str)
1100
	local found={}
1101
	local runw=true
1102
	while runw do
1103
		local arg,ends=getargb(str)
1104
		--print(ends)
1105
		if arg~='' and ends~=0 then
1106
			table.insert(found,arg)
1107
			str=str:sub(ends+1)
1108
		else
1109
			runw=false
1110
		end
1111
	end
1112
	if found~={}then
1113
	return found end
1114
end
1115
1116
songmenu=function(n,speaker)
1117
    dmp(speaker)
1118
    
1119
    if type(n)==type('hi')then
1120
        n=music[n][1]
1121
    end if not n then return end
1122
    _dmtab(speaker)
1123
    local i=game:GetService("MarketplaceService"):GetProductInfo(tonumber(n))
1124
    name=i.Name
1125
    t.t("Name: "..i.Name, "Hot pink",speaker)
1126
    t.t("Sales: "..i.Sales, "New Yeller",speaker)
1127
    t.t("Id: "..i.AssetId,'Deep orange',speaker)
1128
    local inlib=false
1129
    for i,v in pairs(music)do
1130
        if v[1]==i.AssetId then
1131
            music[i]=nil inlib=true
1132
        end
1133
    end
1134
    if inlib then music[i.Name]={i.AssetId,'Downloaded'}end
1135
    _tab("Play sound", 'Lime green',speaker,
1136
    function()
1137
        dmp(speaker)
1138
        chat("sm'deep",speaker)
1139
        m.play(nil,true)
1140
        m.play(tonumber(i.AssetId))
1141
        alert.c('now playing:\n'..i.Name,'Lime green',speaker,3)
1142
    end)
1143
    if (getrank(speaker.Name)<4) then return end            
1144
    if music[i.Name]then
1145
        _tab("Remove from library",'Bright red',speaker,
1146
        function()
1147
            local mz=m.getlib()
1148
            mz[i.Name]=nil
1149
            m.setlib(mz)
1150
            alert.c('Removed song','Really red',speaker,4)
1151
        end,'dmself')
1152
    else
1153
        _tab("Add to library",'Teal',speaker,
1154
        function()
1155
            m.addsong(i.Name,tonumber(i.AssetId),'Downloaded')
1156
            music[i.Name]={i.AssetId,'Downloaded'}
1157
            alert.c('Added song','Teal',speaker,4)
1158
        end,'dmself')
1159
    end
1160
end
1161
1162
genrelist=function(speaker,genreq)
1163
    local genres={}
1164
    for i,v in pairs(music)do
1165
        if v[2]~=nil then
1166
            local g=v[2]:lower()
1167
            g=g:sub(1,1):upper()..g:sub(2)
1168
            if not genres[g]then genres[g]={}end
1169
            table.insert(genres[g],i)
1170
        else
1171
            if not genres['Uncategorized']then genres['Uncategorized']={}end
1172
            table.insert(genres['Uncategorized'],i)
1173
        end
1174
    end
1175
    _dmtab(speaker)
1176
    if genreq == nil then
1177
        for i,v in pairs(genres)do--name , table of names
1178
            local g=genres[i]--table of stuff
1179
            if i=='Downloaded'and #v==0 then else
1180
                local ccc=c.purple
1181
                if i=='Downloaded'then
1182
                    ccc='Lime green'
1183
                end
1184
                _tab(i..' ['..#g..']',ccc,speaker,
1185
                function()
1186
                    dmp(speaker)
1187
                    _dmtab(speaker)
1188
                    _tab('['..i..']',c.purple,speaker)
1189
                    for k,z in pairs(g)do
1190
                        songmenu(z,speaker)
1191
                    end
1192
                end)
1193
            end
1194
        end
1195
    else
1196
        if genres[genreq]~=nil then
1197
            local req=genres[genreq]
1198
            local ccc=c.purple
1199
            if i=='Downloaded'then
1200
                ccc='Lime green'
1201
            end
1202
            for k,z in pairs(req)do
1203
                songmenu(z,speaker)
1204
            end
1205
        end
1206
    end
1207
end
1208
t.t=function(text,color,player,t)
1209
    t=t or 0
1210
    if not text or not color or not player then return end
1211
    local plr=_plr(player)
1212
    _tab(text,color,plr,'','',t)
1213
end
1214
1215
settime=function(t)
1216
    game:service'Lighting'.TimeOfDay=t
1217
end
1218
1219
ct=function(txt,color,chatm,plr,flag)
1220
    _tab(txt,color,plr,function()chat(chatm,plr)end,flag)
1221
end
1222
1223
iscmd=function(str)
1224
    for i,v in pairs(cmds)do
1225
        if v.NAME:lower()==str:lower() or aliasof((c.ALIAS or {}),str)then return v end
1226
    end
1227
end
1228
chat=function(msg,plr)--obj
1229
    if not enabled then return end
1230
    local iscmd=false
1231
    logs.cwrite(plr.Name..': '..msg)
1232
    if msg:sub(1,3)=='/e 'then msg=msg:sub(4)iscmd=true end
1233
    if msg:sub(1,string.len(getbet()))==getbet() then msg=msg:sub((string.len(getbet()))+1)iscmd=true end
1234
    if not iscmd then return end
1235
	local base,ends=getbase(msg)
1236
    logs.cwrite(plr.Name..': '..msg)
1237
	local cmd=nil;
1238
    local test=playertimes[plr.Name]
1239
    if not test then playertimes[plr.Name]=tick()end
1240
    
1241
    if tick()-playertimes[plr.Name]<.4 then return end
1242
    playertimes[plr.Name]=tick()
1243
	if base then
1244
		for i,c in pairs(cmds)do
1245
			if c.NAME:lower()==base:lower() or aliasof(c.ALIAS,base)then
1246
				local cmd=c;
1247
				local arg=getAllArgs(msg:sub(ends))
1248
                local rc=ps.islocked(c.NAME,plr)
1249
				if hasPermission(plr,c.PERM)and not rc then
1250
					--print(arg[1])
1251
					local run,error=ypcall(function()
1252
						c.FUNC(plr,arg,msg)
1253
    				end)
1254
    				if not run then dmp(plr)alert.c('Error','White',plr)alert.c(error,'Really red',plr) end
1255
                elseif rc then
1256
                    alert.c('This command has been locked for you!','Really red',plr)
1257
                else
1258
                    alert.c('You do not have permission for that command! ['..c.PERM..']','Really red',plr)
1259
				end
1260
			end
1261
		end
1262
	end
1263
end
1264
1265
addcmd=function(name,desc,permission,args,fn,aliases)
1266
1267
--COMMAND NAME
1268
1269
--COMMAND DESCRIPTION
1270
1271
--MINIMUM PERMISSION LEVEL
1272
1273
--ARGS
1274
1275
--FUNCTION (SPEAKER, ARGS)
1276
1277
--ALIAS TABLE (OPTIONAL)
1278
1279
aliases=aliases or {}
1280
1281
table.insert(cmds,{
1282
NAME  =name;
1283
DESC  =desc;
1284
PERM  =permission;
1285
ARGS  =args;
1286
FUNC  =fn;
1287
ALIAS =aliases;
1288
})
1289
end
1290
1291
runas=function(msg,plr)
1292
	chat(msg,plr)
1293
end
1294
1295
1296
cmdmenu=function(v,speaker)
1297
    _tab((v.NAME),ps.color(speaker),speaker,
1298
	function()
1299
		dmp(speaker)
1300
        _dmtab(speaker)
1301
        t.t(v.NAME,c.cmdc,speaker)
1302
        
1303
        local pc=c.red
1304
        local ps='You can\'t use this'
1305
        
1306
        local r=getrank(speaker)
1307
        
1308
        if r>=v.PERM then pc=c.green ps='You can use this!'end
1309
        t.t('Permission: '..v.PERM,c.white,speaker)
1310
        t.t(ps,pc,speaker)
1311
		t.t(v.DESC,c.white,speaker)
1312
		if v.ALIAS[1]~=nil then
1313
			_tab('Aliases: '..list(v.ALIAS),c.white,speaker)
1314
		end
1315
		
1316
	end)
1317
end
1318
1319
getCommandsWithPerm=function(num)
1320
    local found={}
1321
    for i,v in pairs(cmds)do
1322
		if v.PERM<=num then
1323
			table.insert(found,v)
1324
		end
1325
	end
1326
    return found
1327
end
1328
1329
addcmd('cmds','show commands',0,1,
1330
function(speaker,a,o)
1331
	dmp(speaker)
1332
    local r=getrank(speaker)
1333
    local s=speaker
1334
    local pc=ps.color(speaker)
1335
    _dmtab(speaker)
1336
    _tab('Your rank: '..r,pc,speaker,
1337
    function()
1338
        dmp(speaker)
1339
        local z=getCommandsWithPerm(getrank(speaker))
1340
        _dmtab(speaker)
1341
        ct('Go back','Teal','cmds',speaker)
1342
        for i,v in pairs(z)do
1343
            cmdmenu(v,speaker)
1344
        end
1345
    end)
1346
    
1347
    for i=0,5 do
1348
        _tab(i..' ['..(rank[i] or 'guest')..']',pc,speaker,
1349
        function()
1350
            dmp(speaker)
1351
            _dmtab(speaker)
1352
            local z=getCommandsWithPerm(i)
1353
            ct('Go back','Teal','cmds',speaker)
1354
            for i,v in pairs(z)do
1355
                cmdmenu(v,speaker)
1356
            end
1357
        end)
1358
    end
1359
    _tab('View all',pc,speaker,
1360
    function()
1361
        dmp(speaker)
1362
        _dmtab(speaker)
1363
        local z=getCommandsWithPerm(10)
1364
        ct('Go back','Teal','cmds',speaker)
1365
        for i,v in pairs(z)do
1366
            cmdmenu(v,speaker)
1367
        end
1368
    end)
1369
end,{'commands'})
1370
1371
addcmd('ping','output with text\nargs: text to display',0,1,
1372
function(speaker,args)
1373
    if args[1]~=nil and args[2]~=nil and getrank(speaker)>2 and tonumber(args[1]) then
1374
        for i=1,tonumber(args[1])do
1375
            alert.c(args[2]or 'pong',c.white,speaker)
1376
        end
1377
        return
1378
    elseif args[2]~=nil and getrank(speaker)>=2 and _match(args[1],speaker)~={} then 
1379
        local plr=_match(args[1],speaker)
1380
        table.foreach(plr,function(k,v)
1381
        alert.c(args[2] or 'pong!',c.white,_plr(v))end)
1382
    
1383
    else
1384
	alert.c(args[1] or 'pong!',c.white,speaker)
1385
    end
1386
end,
1387
{'print','out'})
1388
1389
addcmd('removesongs','mass library editing',5,0,
1390
function(speaker,args)
1391
    --print(args[2])
1392
    for i,v in pairs(music)do
1393
        _tab(i,c.red,speaker,function(tablet)rem(tablet)music[i]=nil;end)
1394
    end
1395
    _tab('save','Lime green',speaker,function()m.setlib(music)dmp(speaker)alert.c('music library rewritten','White',speaker)end)
1396
end,{})
1397
1398
1399
addcmd('removeusers','mass user editing',5,0,
1400
function(speaker,args)
1401
    --print(args[2])
1402
    for i,v in pairs(users)do
1403
        _tab(v[1],'White',speaker,function(tablet)rem(tablet)table.remove(users,i);end)
1404
    end
1405
    _tab('save','Lime green',speaker,function()ds.save()dmp(speaker)alert.c('user library rewritten','White',speaker)end)
1406
end,{})
1407
1408
1409
addcmd('time','adjust time',4,0,
1410
function(speaker,args)
1411
    _dmtab(speaker)
1412
	_tab('Midnight','Really black',speaker,function()settime(0)dmp(speaker)end)
1413
    _tab('Morning','White',speaker,function()settime(6)dmp(speaker)end)
1414
    _tab('Noon','White',speaker,function()settime(12)dmp(speaker)end)
1415
    _tab('Evening','Really black',speaker,function()settime(18)dmp(speaker)end)
1416
end,
1417
{'timemenu'})
1418
1419
1420
addcmd('dt','dismiss tabs\nargs: player',0,1,
1421
function(speaker,args)
1422
	if args[1]and hasPermission(speaker,{PERM=4})then
1423
        local fplrs=_match(args[1],speaker)
1424
		table.foreach(fplrs,function(ki,vi)dmp(_plr(vi))end)
1425
	else
1426
		dmp(speaker)
1427
	end
1428
end,
1429
{'dismiss','dm'})
1430
1431
addcmd('music','show music list',3,1,--todo id
1432
function(speaker,args)
1433
	dmp(speaker)
1434
    local r=getrank(speaker)
1435
	if args[1]==nil then
1436
        if r>=3 then
1437
            _dmtab(speaker)
1438
            --alert.p(tostring(args[1]),speaker)
1439
            for i,v in pairs(music)do --id,genre
1440
                _tab(i,'Lime green',speaker,
1441
                function()
1442
                    songmenu(v[1],speaker)
1443
                end)
1444
            end
1445
        end
1446
    elseif inTable({'stop','sm'},args[1]:lower())and r>=3 then
1447
        chat("stopmusic"..split..'deep',speaker)
1448
    elseif args[1]:lower()=='id'and args[2]~=nil then
1449
        if not tonumber(args[2])then return end
1450
        songmenu(tonumber(args[2]),speaker)
1451
    elseif args[1]~=nil and r>=3 then
1452
        if tonumber(args[1])~=nil then
1453
            _tab('ID','Hot pink',speaker,function()
1454
                songmenu(tonumber(args[1]),speaker)
1455
            end)
1456
        end
1457
        _dmtab(speaker)
1458
        t.t('showing results for:\n'..args[1],'White',speaker)
1459
        local rzzz=matchtbli(music,tostring(args[1]))
1460
        local mz=m.getlib()
1461
        for kn,zn in pairs(rzzz)do
1462
            
1463
            if mz[zn]==nil then
1464
                local s=music[zn]
1465
                _tab(zn,c.snd,speaker,
1466
                function()
1467
                    dmp(speaker)
1468
                    m.play(s[1])
1469
                    alert.c('now playing:\n'..zn,'Lime green',speaker,3)
1470
                end,'',3)
1471
            end
1472
        end
1473
        
1474
        local searchterm=args[1]
1475
        http=game:GetService'HttpService'
1476
        local url="http://roproxy.tk/catalog/json?Keyword="..http:UrlEncode(searchterm).."&Category=9&ResultsPerPage=20"
1477
        local assets=http:JSONDecode(http:GetAsync(url))
1478
        if #assets==0 then alert.p('no results!',speaker)return else
1479
        
1480
        
1481
        for i,v in pairs(assets)do
1482
            wait()
1483
            local cddd='New Yeller'
1484
            local songcheck=m.getlib()
1485
            if songcheck[v.Name]~=nil then
1486
                cddd='Lime green'
1487
            end
1488
            _tab(v.Name,cddd,speaker,function()
1489
                songmenu(v.AssetId,speaker)
1490
                
1491
                
1492
            end)
1493
        end
1494
        end
1495
    --[[elseif args[1]~=nil and args[2]~=nil then
1496
        if inTable({'l','lib','ls','slib'},args[1]:lower())then
1497
            local r=matchtbli(music,args[2])
1498
            for k,z in pairs(r)do
1499
                local s=music[z]
1500
                _tab(z,c.snd,
1501
                function()
1502
                    dmp(speaker)
1503
                    m.play(s[1])
1504
                    alert.p('now playing: '..z,speaker)
1505
                end,speaker,3)
1506
            end
1507
        end]]
1508
	end
1509
end,
1510
{'snd','snds'})
1511
1512
1513
1514
addcmd('stopmusic','stops music / args: deep',3,1,
1515
function(speaker,args)
1516
    if ALUSND then
1517
    if ALUSND.Parent~=nil then
1518
        ALUSND:Stop()
1519
        ALUSND:remove()
1520
    end
1521
    end
1522
	local g=''
1523
    if args[1]~=nil then
1524
        if type(args[1])=='string'then g=args[1]:lower() end
1525
    end
1526
	if g=='true'or g=='deep'then
1527
		m.stopmusic(workspace,true)
1528
	elseif g=='o'or g=='others'then--team
1529
        m.stopmusico(workspace,true)
1530
    else
1531
		m.play(nil,true)
1532
	end
1533
    if silentmode then return end
1534
    for i,v in pairs(script.Parent:children'')do
1535
        if v.ClassName~=nil then
1536
            if v:IsA'Sound'then v:Stop()v:remove()end
1537
        end
1538
    end
1539
end,
1540
{'sm'})
1541
1542
1543
addcmd('net','show connected players',0,0,
1544
function(speaker,args)
1545
    dmp(speaker)
1546
    for i,v in pairs(plrs:GetPlayers())do
1547
        --local cl=rank[getrank(v.Name)]
1548
        local cl=ps.color(v.Name)
1549
        if cl==nil then cl='White'end
1550
        --if speaker==v then cl=c.snd end
1551
        _tab(v.Name,cl,speaker,function()
1552
            if getrank(speaker)>getrank(v) and getrank(speaker)>3 or speaker==v then
1553
                dmp(speaker)
1554
                local plr=v
1555
                plrmen(v,speaker,'net')
1556
            end
1557
        end)
1558
    end
1559
end,
1560
{'plrs','players'})
1561
1562
addcmd('badtabs','show credits',0,0,
1563
function(speaker)
1564
    dmp(speaker)
1565
    
1566
    print('ALUREON INSTANCE',tostring(ver))
1567
	alert.c('bad tablets v'..ver,'New Yeller',speaker)
1568
	alert.c('your rank: '..getrank(speaker),'New Yeller',speaker)
1569
    _tab('say cmds\' to get your commands','New Yeller',speaker,function()dmp(speaker)chat("cmds",speaker)end,'')
1570
	alert.c('made by badfractions','New Yeller',speaker)
1571
end,
1572
{'cred'})
1573
1574
addcmd('dtall','dismiss all players tabs',4,0,
1575
function()
1576
	for i,v in pairs(tabs)do
1577
		dmp(i)
1578
	end
1579
end,
1580
{'dismissall'})
1581
1582
addcmd('save','saves the stuff',4,0,
1583
function(speaker)
1584
    ds.save()
1585
    alert.c('saved the stuff','Lime green',speaker)
1586
end)
1587
1588
addcmd('fixlighting','Fixes lighting properties',3,0,
1589
function()
1590
	local l=game:service'Lighting'
1591
    l.Ambient=_rgb(178,178,178)
1592
    l.Brightness=1
1593
    l.Outlines=false
1594
    l.TimeOfDay=14
1595
end,
1596
{'fixl'})
1597
1598
promptvote=function(v,q)
1599
	_tab(q,c.snd,v,'','',10)
1600
    _tab('Vote Yes',c.green,v,function()dmp(v)vote.y=vote.y+1;alert.p('Vote counted',v)end,'',10)
1601
    _tab('Vote No','Really red',v,function()dmp(v)vote.n=vote.n+1;alert.p('Vote counted',v)end,'',10)
1602
    _tab('No vote','White',v,function()dmp(v);end,'',10)
1603
end
1604
1605
addcmd('vote','vote\nargs: plr/tp,(yn,k,b)',4,0,
1606
function(speaker,args)
1607
    
1608
	if args[1]~=nil and args[2]~=nil then
1609
		q=args[1]
1610
        vote.y=0;
1611
        vote.n=0;
1612
        local plr=nil
1613
    if args[2]:lower()=='k'then
1614
            plr=_plr(q)
1615
            if plr~=nil then
1616
            	for i,v in pairs(plrs:getPlayers())do
1617
            		promptvote(v,'Vote: Kick '..plr.Name..'?')
1618
            		vote.topic='Kick '..plr.Name..'?'
1619
                    action='k'
1620
        		end
1621
            end
1622
    elseif args[2]:lower()=='b'then
1623
            plr=_plr(q)
1624
            if plr~=nil then
1625
            	for i,v in pairs(plrs:getPlayers())do
1626
            		promptvote(v,'Vote: Ban '..plr.Name..'?')
1627
            		vote.topic='Ban '..plr.Name..'?'
1628
                    action='b'
1629
        		end
1630
            end
1631
       elseif args[2]:lower()=='yn'then
1632
        	for i,v in pairs(plrs:getPlayers())do
1633
            	promptvote(v,'Vote: '..q)
1634
            	vote.topic=q
1635
        	end
1636
        end
1637
    end
1638
    if args[1] ==nil then return end
1639
    if inTable({'view','results','check'},args[1]:lower()) then
1640
    	delay(0,function()
1641
        	if vote.topic~='' then
1642
        		_dmtab(speaker)
1643
        		_tab('Vote results',c.white,speaker)
1644
        		_tab('Topic: '..vote.topic,'Bright blue',speaker)
1645
            	_tab('YES: '..vote.y,c.green,speaker)
1646
            	_tab('NO: '..vote.n,'Really red',speaker)
1647
            	if 1+1==3 and vote.y>vote.n and inTable({'k','b'},action:lower())then
1648
            		_tab('Vote succeeded. Click here to execute.','New Yeller',speaker,
1649
            		function()
1650
            			dmp(speaker)
1651
            			local zz=action:lower()
1652
            			if zz=='k'then
1653
            				Kick(_plr(q))
1654
            				t.c('Kicked player','Really red',speaker,4)
1655
            			elseif zz=='b'then
1656
            				setrank(v.Name,-1)
1657
            				Kick(v)
1658
            				t.c('Banned player','Really red',speaker,4)
1659
            			end;
1660
            		end)
1661
            	end
1662
            end
1663
        end)
1664
    end
1665
end,
1666
{'poll','ballot'})
1667
1668
addcmd('disabletabs','disables tabs',5,0,
1669
function(speaker,args)
1670
	_tab('click to confirm',c.purple,speaker,
1671
	function()
1672
		alert.p('saved all libraries',speaker)
1673
		delay(4,disabletabs)
1674
	end,'dmself',4)
1675
end,
1676
{'stop'})
1677
1678
addcmd('update','updates instance of tabs',5,0,
1679
function(speaker,args)
1680
    update=true
1681
    alert.p('updating',speaker)
1682
    delay(1,disabletabs)
1683
end)
1684
1685
addcmd('shutdown','kills game',5,0,
1686
function(speaker,args)
1687
    for i,v in pairs(plrs:GetPlayers'')do
1688
        Kick(v)
1689
    end
1690
end)
1691
1692
addcmd('newserver','creates new game server at id',5,1,
1693
function(speaker,args)
1694
    if args[1]~=nil then
1695
        local x=nil
1696
        if inTable({'place','here','this','game'},tostring(args[1]))then x=game.PlaceId end
1697
        if x==nil then
1698
            x=tonumber(args[1])
1699
        end
1700
        if x then
1701
            alert.c('Created new server','Lime green',speaker)
1702
            newserver(x)
1703
            
1704
        end
1705
    else
1706
        alert.c('Created new server','Lime green',speaker)
1707
        newserver(game.PlaceId)
1708
    end
1709
end,
1710
{'ns','createserver'})
1711
1712
1713
addcmd('afk','go afk',0,0,
1714
function(speaker,args)
1715
    dmp(speaker)
1716
    for i=1,5 do
1717
        _tab(speaker.Name..' is afk','White',speaker,function()dmp(speaker)end)
1718
    end
1719
end,
1720
{})
1721
1722
1723
addcmd('db','change db_view',5,1,
1724
function(speaker,args)
1725
    if args[1]~=nil then
1726
        if inTable({'true','grid'},args[1]:lower())then
1727
            t.db_view='GRID'
1728
        else
1729
            t.db_view='PLR'
1730
        end
1731
    end
1732
    return
1733
end)
1734
1735
addcmd('rank','changes a players rank',5,3,
1736
function(speaker,args)
1737
    local plr
1738
    local rank
1739
    local reason
1740
    if args[1]then plr=_plr(args[1])end
1741
    if args[2]then rank=tonumber(args[2])end
1742
    if args[3]then reason=args[3]else reason='None'end
1743
    if plr and rank then
1744
        ds.set(plr.Name,'rank',rank)
1745
        ds.set(plr.Name,'reason',reason)
1746
        alert.c('You are now rank '..rank,ps.color(plr.Name),plr)
1747
        alert.c('You set '..plr.Name..'\'s rank to '..rank,ps.color(speaker.Name),speaker)
1748
    end
1749
end)
1750
addcmd('ranked','shows all ranked players',2,0,
1751
function(speaker,args)
1752
    dmp(speaker)
1753
    _dmtab(speaker)
1754
    for i,v in pairs(users)do
1755
        --print(list(v))
1756
        local s=v[1]
1757
        if v[2]==-1 then v[5]='Really black's=s..' (Banned)'end
1758
        if type(v[1])==type('hi')then
1759
        	_tab(v[1],v[5],speaker,
1760
        	function()
1761
        		dmp(speaker)
1762
        		_dmtab(speaker)
1763
        		
1764
        		plrmen(v[1],speaker,'ranked')
1765
        	end)
1766
        end
1767
    end
1768
end)
1769
1770
addcmd('pri','opens pri options',5,0,
1771
function(speaker,args)
1772
    local sss='off'
1773
    local pc=c.red
1774
    if pri then sss='on';pc='Lime green' end
1775
    dmp(speaker)
1776
    _tab('pri is '..sss,pc,speaker)
1777
    _tab((pri and '[DISABLE]') or '[ENABLE]',pri and 'Really red' or 'Lime green',speaker,function()
1778
        dmp(speaker)
1779
        pri=not pri
1780
        if pri then
1781
            for i,v in pairs(plrs:GetPlayers'')do
1782
                if getrank(v.Name)<1 then Kick(v)end
1783
            end
1784
        end
1785
        alert.c('pri was '..(pri and 'enabled' or 'disabled'),c.white,speaker)
1786
    end)
1787
end)
1788
1789
addcmd('jump','makes player jump',3,1,function(speaker,args)
1790
    local fplr=_match(args[1],speaker)
1791
    for i,v in pairs(fplr)do
1792
        safe.r(function()_plr(v).Character.Humanoid.Jump=true;end)
1793
    end
1794
end)
1795
1796
addcmd('rot','changes players rot style',1,1,function(speaker,args)
1797
    local targ=speaker
1798
    
1799
    if args[1]~=nil then
1800
        if _plr(targ)~=nil then targ=_plr(targ)end
1801
    end
1802
    rotmenu(targ,speaker)
1803
end)
1804
1805
addcmd('sit','makes player sit',3,1,function(speaker,args)
1806
    local fplr=_match(args[1],speaker)
1807
    for i,v in pairs(fplr)do
1808
        safe.r(function()_plr(v).Character.Humanoid.Sit=true;end)
1809
    end
1810
end)
1811
1812
addcmd('kill','makes player dead',3,1,function(speaker,args)
1813
    local fplr=_match(args[1],speaker)
1814
    for i,v in pairs(fplr)do
1815
        safe.r(function()_plr(v).Character.Head:remove()end)
1816
    end
1817
end)
1818
1819
addcmd('fling','next plane to china',4,1,function(speaker,args)
1820
    local fplr=_match(args[1],speaker)
1821
    for i,v in pairs(fplr)do
1822
        safe.r(function()_plr(v).Character.Humanoid.Sit=true;_plr(v).Character.Torso.Velocity=v3(4000,4000,4000)end)
1823
    end
1824
end)
1825
1826
addcmd('god','makes player godly',3,1,function(speaker,args)
1827
    local fplr=_match(args[1],speaker)
1828
    for i,v in pairs(fplr)do
1829
        safe.r(function()_plr(v).Character.Humanoid.MaxHealth=math.huge;end)
1830
    end
1831
end)
1832
1833
addcmd('kick','makes player gone',4,1,function(speaker,args)
1834
    local fplr=_match(args[1],speaker)
1835
    for i,v in pairs(fplr)do
1836
        safe.r(function()Kick(_plr(v));end)
1837
    end
1838
end)
1839
1840
addcmd('ban','makes player gone forever',5,2,function(speaker,args)
1841
    local fplr=_plr(args[1])if not fplr then return end
1842
    if getrank(fplr.Name)<getrank(speaker.Name)then
1843
        if args[2]~=nil then ds.set(fplr,'reason',args[2])end
1844
        safe.r(function()setrank(fplr,-1)Kick(_plr(fplr));end)
1845
    end
1846
end)
1847
1848
addcmd('menu','opens menu',4,1,function(speaker,args)
1849
    dmp(speaker)
1850
    local pc=ps.color(speaker)
1851
    _tab('music','Lime green',speaker,function()
1852
        chat('music',speaker)
1853
    end)
1854
    _tab('players','Bright blue',speaker,function()
1855
        chat('net',speaker)
1856
    end)
1857
    _tab('logs','Bright yellow',speaker,function()
1858
        chat('logs',speaker)
1859
    end)
1860
    _tab('settings',ps.color(speaker),speaker,function()
1861
        dmp(speaker)
1862
        _tab('rotation',pc,speaker,function()rotmenu(speaker,speaker)end)
1863
        _tab('neon',pc,speaker,function()neonmenu(speaker,speaker)end)
1864
    end)
1865
end)
1866
1867
addcmd('silent','puts script in silent mode',5,0,
1868
function()
1869
	silentmode=true
1870
    for i,v in pairs(plrs:GetPlayers'')do
1871
        dmp(v)
1872
    end
1873
    script=nil
1874
    logs.write'silent mode active'
1875
end)
1876
1877
addcmd('set','sets plr attribute',5,3,
1878
function(speaker,args)
1879
    --plr att val
1880
    if args[1]~=nil and args[2]~=nil and args[3]~=nil then
1881
        local plr=_plr(args[1])
1882
        if not plr then plr=args[1] else plr=plr.Name end
1883
        local ind=tostring(args[2]):lower()
1884
        local val=args[3]
1885
        if plr and ind and inTable(ds.props,ind)then 
1886
            ds.set(plr,ind,val)
1887
            alert.c('set '..plr..'\'s '..ind..' to '..tostring(val),'White',speaker,4)
1888
        end
1889
    end
1890
end,
1891
{'setr'})
1892
1893
addcmd('lcmd','sets locked for a player',5,2,
1894
function(speaker,args)
1895
    
1896
    if args[1]~=nil and args[2]~=nil then
1897
        dmp(speaker)
1898
        local cplr=_plr(args[1])
1899
        if not cplr then return end
1900
        if iscmd(args[2])~=nil then
1901
            local c=iscmd(args[2])
1902
            if ps.islocked(c.NAME,cplr)then
1903
                _tab(c.NAME..' is LOCKED','Really red',speaker)
1904
                _tab('Click to unlock','Lime green',speaker,function()
1905
                    for i,v in pairs(users)do
1906
                        if v[1]==cplr.Name then
1907
                            for o,b in pairs(v[7])do
1908
                                if b:lower()==c.NAME:lower()then table.remove(v[7],o) end
1909
                            end
1910
                        end
1911
                    end
1912
                    dmp(speaker)
1913
                    alert.c(c.NAME..' was unlocked for '..cplr.Name,'White',speaker,4)
1914
                end)
1915
            else
1916
                _tab(c.NAME..' is UNLOCKED','Lime green',speaker)
1917
                _tab('Click to lock','Really red',speaker,function()
1918
                    safe.r(function()
1919
                    table.insert(ds.prof(cplr.Name)[7],c.NAME)
1920
                    end)
1921
                    dmp(speaker)
1922
                    alert.c(c.NAME..' was locked for '..cplr.Name,'White',speaker,4)
1923
                end)
1924
            end
1925
        elseif args[2]:lower()=='-list'then
1926
            for i,v in pairs(ds.prof(cplr.Name)[7])do
1927
                _tab(v,'Really red',speaker,function()
1928
                    chat("lcmd'"..cplr.Name.."'"..v,speaker)
1929
                end)
1930
            end
1931
        elseif args[2]:lower()=='-clear'then
1932
            ds.prof(cplr.Name)[7]={}
1933
        end
1934
    end
1935
end,
1936
{'lockcmd','cmdlock','commandlock'})
1937
1938
addcmd('exe','executes a script',5,1,
1939
function(speaker,args,orig)
1940
    orig=orig:sub(5)
1941
    local x=nil
1942
    local success,error=ypcall(function()x={loadstring(orig)}end)
1943
    local func,err=unpack(x);
1944
    alert.c(func(),'White',speaker)
1945
    if success then
1946
        alert.c('Script ran successfully','Lime green',speaker)alert.c(error,'White',speaker)
1947
    else
1948
        alert.c(error,c.red,speaker)
1949
    end
1950
end)
1951
1952
addcmd('songrequest','request a song',0,1,
1953
function(speaker,args)
1954
    dmp(speaker)
1955
    if args[1]~=nil then
1956
        local idz=args[1]
1957
        if not tonumber(idz)then alert.c('Please request a song ID!','Really red',speaker)return end
1958
        if assettype(tonumber(idz))~=3 then alert.c('Please request a song ID!','Really red',speaker)return end
1959
        local izz=game:GetService("MarketplaceService"):GetProductInfo(tonumber(idz))
1960
        _tab("Request \""..izz.Name..'"?','New Yeller',speaker)
1961
        _tab('Yes','Lime green',speaker,function()if inTable(songrequests, tonumber(idz))then dmp(speaker)alert.c('Song is already in request list!','Really red',speaker)else dmp(speaker)table.insert(songrequests,idz)alert.c('Song requested.','Lime green',speaker)end end)
1962
        _tab('Cancel','Really red',speaker,function()dmp(speaker)end)
1963
    end
1964
end,{'requestsong','request'})
1965
1966
addcmd('requests','view song requests',3,0,
1967
function(speaker,args)
1968
    dmp(speaker)
1969
    for i,v in pairs(songrequests)do
1970
        local izz=game:GetService("MarketplaceService"):GetProductInfo(tonumber(v))
1971
        _tab(izz.Name,'Lime green',speaker,
1972
        function()
1973
            dmp(speaker)
1974
            songmenu(tonumber(v),speaker)
1975
            _tab('Reject','Bright red',speaker,
1976
            function()
1977
                songrequests[i]=nil
1978
                chat('requests',speaker)
1979
            end)
1980
        end)
1981
    end
1982
end)
1983
addcmd('logs','view logs',4,0,
1984
function(speaker)
1985
    dmp(speaker)
1986
    _tab('view system logs','New Yeller',speaker,function()
1987
        dmp(speaker)
1988
        _dmtab(speaker)
1989
        table.foreach(logs.LOG,function(k,v)
1990
            t.t(v,'White',speaker)
1991
        end)
1992
    end)
1993
    
1994
    _tab('view chat logs','Bright blue',speaker,function()
1995
        dmp(speaker)
1996
        _dmtab(speaker)
1997
        table.foreach(logs.CLOG,function(k,v)
1998
            t.t(v,'White',speaker)
1999
        end)
2000
    end)
2001
    _tab('clear system logs','White',speaker,function(tablet)
2002
        rem(tablet)
2003
        t.t('system logs cleared','White',speaker)
2004
    end)
2005
    _tab('clear chat logs','White',speaker,function(tablet)
2006
        rem(tablet)
2007
        t.t('chat logs cleared','White',speaker)
2008
    end)
2009
end)
2010
2011
plrs.PlayerAdded:connect(function(plr)
2012
	if not enabled or update then return end
2013
	delay(0,function()repeat wait(1)until plr.Character
2014
    if inTable(banlist,plr.Name)then
2015
		Kick(plr)
2016
		alert.g((plr.Name..' tried to join the game'),3)
2017
        return
2018
	end
2019
    local xx=0
2020
    if datastores then
2021
        xx=getrank(plr.Name)
2022
        if xx==-1 or pri and getrank(plr.Name)==0 then
2023
            Kick(plr)
2024
            --alert.g((plr.Name..' tried to join the game'),3)
2025
            return
2026
        end
2027
        
2028
	end
2029
	
2030
	
2031
    delay(.5,function()
2032
    alert.c('bad tablets v'..ver..' running','New Yeller',plr,4)
2033
	alert.c('your rank: '..getrank(plr),'New Yeller',plr,4)
2034
    _tab('say cmds\' to get your commands','New Yeller',plr,function()dmp(plr)chat("cmds",plr)end,'',4)
2035
    alert.g((plr.Name..' connected'),4)
2036
    end)end)
2037
	
2038
	
2039
	updateevents()
2040
2041
end)
2042
2043
plrs.PlayerRemoving:connect(function(x)
2044
    if enabled and not update then
2045
    local xx=0;
2046
    if datastores and x then
2047
    	
2048
        xx=getrank(x.Name)
2049
    end
2050
    if xx==-1 then
2051
    
2052
    elseif pri and xx==0 then
2053
    alert.g((x.Name..' attempted to join'),4)
2054
    else
2055
	alert.g((x.Name..' disconnected'),4)
2056
    end
2057
	updateevents()
2058
    end
2059
end)
2060
startuptime=elapsedTime()
2061
for i,plr in pairs(plrs:GetPlayers())do
2062
    
2063
    if tonumber(getrank(plr))>=5 then
2064
	alert.c('bad tablets v'..ver..' running','New Yeller',plr,4)
2065
	alert.c('took '..tostring(startuptime/1000)..' seconds to start','Lime green',plr,4)
2066
	alert.c('your rank: '..getrank(plr),'New Yeller',plr,4)
2067
    _tab('say cmds\' to get your commands','New Yeller',plr,function()dmp(plr)chat("cmds",plr)end,'',4)
2068
    end
2069
    if getrank(plr)==-1 or inTable(banlist,plr.Name)then Kick(plr) end
2070
end
2071
2072
2073
alert.g('youre an admin!',4)
2074
updateevents()
2075
2076
local function QuaternionFromCFrame(cf)
2077
	local mx, my, mz, m00, m01, m02, m10, m11, m12, m20, m21, m22 = cf:components();
2078
	local trace = m00 + m11 + m22 if trace > 0 then 
2079
		local s = math.sqrt(1 + trace);
2080
		local recip = 0.5/s;
2081
		return (m21-m12)*recip, (m02-m20)*recip, (m10-m01)*recip, s*0.5;
2082
	else 
2083
		local i = 0;
2084
		if m11 > m00 then 
2085
			i = 1;
2086
		end;
2087
		if m22 > (i == 0 and m00 or m11) then
2088
			i = 2 end if i == 0 then
2089
			local s = math.sqrt(m00-m11-m22+1);
2090
			local recip = 0.5/s return 0.5*s, (m10+m01)*recip, (m20+m02)*recip, (m21-m12)*recip; 
2091
		elseif i == 1 then
2092
			local s = math.sqrt(m11-m22-m00+1);
2093
			local recip = 0.5/s;
2094
			return (m01+m10)*recip, 0.5*s, (m21+m12)*recip, (m02-m20)*recip ;
2095
		elseif i == 2 then
2096
			local s = math.sqrt(m22-m00-m11+1);
2097
			local recip = 0.5/s;
2098
			return (m02+m20)*recip, (m12+m21)*recip, 0.5*s, (m10-m01)*recip;
2099
		end;
2100
	end; 
2101
end;
2102
2103
local function QuaternionToCFrame(px, py, pz, x, y, z, w)
2104
	local xs, ys, zs = x + x, y + y, z + z;
2105
	local wx, wy, wz = w*xs, w*ys, w*zs;
2106
	local xx = x*xs;
2107
	local xy = x*ys;
2108
	local xz = x*zs;
2109
	local yy = y*ys;
2110
	local yz = y*zs;
2111
	local zz = z*zs;
2112
	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)) 
2113
end;
2114
2115
local function QuaternionSlerp(a, b, t)
2116
	local cosTheta = a[1]*b[1] + a[2]*b[2] + a[3]*b[3] + a[4]*b[4];
2117
	local startInterp, finishInterp; 
2118
	if cosTheta >= 0.0001 then
2119
		if (1 - cosTheta) > 0.0001 then
2120
			local theta = math.acos(cosTheta);
2121
			local invSinTheta = 1/math.sin(theta);
2122
			startInterp = math.sin((1-t)*theta)*invSinTheta;
2123
			finishInterp = math.sin(t*theta)*invSinTheta;
2124
		else
2125
			startInterp = 1-t finishInterp = t;
2126
		end;
2127
	else 
2128
		if (1+cosTheta) > 0.0001 then
2129
			local theta = math.acos(-cosTheta);
2130
			local invSinTheta = 1/math.sin(theta);
2131
			startInterp = math.sin((t-1)*theta)*invSinTheta;
2132
			finishInterp = math.sin(t*theta)*invSinTheta;
2133
		else startInterp = t-1 finishInterp = t;
2134
		end;
2135
	end;
2136
	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;
2137
end;
2138
2139
function CLerp(a,b,t)
2140
	local qa={QuaternionFromCFrame(a)};
2141
	local qb={QuaternionFromCFrame(b)};
2142
	local ax,ay,az=a.x,a.y,a.z;
2143
	local bx,by,bz=b.x,b.y,b.z;
2144
	local _t=1-t;
2145
	return QuaternionToCFrame(_t*ax+t*bx,_t*ay+t*by,_t*az+t*bz,QuaternionSlerp(qa, qb, t));
2146
end
2147
2148
2149
2150
2151
2152
spawn(function()
2153
    local rot = 0
2154
    while enabled do
2155
        rot = rot + .001
2156
        for i,v in pairs(tabs)do
2157
            if plrs:FindFirstChild(i)then else
2158
                for o,b in pairs(v)do
2159
                    rem(b)
2160
                end
2161
                tabs[i]=nil
2162
            end
2163
        end
2164
        for Index, Player in pairs(Players:GetPlayers()) do
2165
            if not tabs[Player.Name]then tabs[Player.Name]={}end
2166
            pcall(function()
2167
                for x = 1, #tabs[Player.Name] do
2168
                    if tabs[Player.Name][x] == nil or tabs[Player.Name][x].Parent == nil or tabs[Player.Name][x].Name=='x' or tabs[Player.Name][x].Name == nil or plrs[Player.Name]==nil then
2169
                        table.remove(tabs[Player.Name], x)
2170
                    end
2171
                end
2172
            end)
2173
            local rotstylez=ds.get(Player.Name,'rot')
2174
            local bt=0
2175
            if datastores then if ps.wave(Player.Name)==true then bt=1 end end
2176
            
2177
            
2178
            local tn=#tabs[Player.Name]
2179
            if rotstylez:sub(1,1)=='l'then
2180
                for x = 1, #tabs[Player.Name] do--------------------------------------------------------------------------------* CFrame.Angles(0, math.rad(360 / #tabs[Player.Name])---------------------------------- * CFrame.new(-5 - (1.2 * #tabs[Player.Name]), math.sin(tick()), 0)
2181
                    local tb=tabs[Player.Name][x]
2182
                    
2183
                    if Player.Character.Parent~=nil then if Player.Character:FindFirstChild'Torso' then
2184
                        facet=6
2185
                        
2186
                        local cftp=CFrame.new(Player.Character.Torso.Position)
2187
                        local ddr=((#tabs-(#tabs%facet))/facet)+(#tabs%facet)
2188
                        local meg=x
2189
                        repeat meg=meg-facet ddr=ddr+1 until meg<facet if meg>0 then ddr=ddr+1 end
2190
                        local megic =CFrame.Angles(0,math.rad((360/facet)*(x%facet)+rot*600),0)
2191
                        local tp=CFrame.new(Player.Character.Torso.Position+(megic.lookVector*ddr*6))
2192
                        local mst=math.sin(tick())
2193
                        local mct=math.cos(tick())
2194
                        local rx = mst
2195
                        local ry = mct
2196
                        local rz = 0
2197
                        if rotstylez=='lrand' then tp=tp*CFrame.Angles(rx,ry,rz)end
2198
                        if tb.Name~='x'then
2199
                            tb.CFrame = CLerp(tb.CFrame, tp , .25)
2200
                        end
2201
                    end;end
2202
                end
2203
            else
2204
                for x = 1, tn do--------------------------------------------------------------------------------* CFrame.Angles(0, math.rad(360 / #tabs[Player.Name])---------------------------------- * CFrame.new(-5 - (1.2 * #tabs[Player.Name]), math.sin(tick()), 0)
2205
                    if Player.Character then if Player.Character:FindFirstChild'Torso'~=nil then
2206
                        local cftp=CFrame.new(Player.Character.Torso.Position)
2207
                        local tb=tabs[Player.Name][x]
2208
                        local radius=1.4*((tn)*.4)+4;
2209
                        local rzz=(360/tn)*x
2210
2211
                        
2212
                        local xp=math.cos(((x/tn)-tn*2)*2*math.pi)*radius
2213
                        local yp = math.sin(tick()/math.pi+((x)*bt))
2214
                        local zp=math.sin(((x/tn)-tn*2)*2*math.pi)*radius--(math.sin((x/tn-(tn)+rot)*math.pi*2)*radius)
2215
                        local mst=math.sin(tick())
2216
                        local mct=math.cos(tick())
2217
                        local rx = mst
2218
                        local ry = mct
2219
                        local rz = 0
2220
                        local tp=cftp*CFrame.Angles(0,rot,0)*(CFrame.new(xp,yp,zp):inverse())--:toWorldSpace(CFrame.new(xp,yp,zp):inverse())--*CFrame.Angles(math.pi/180*2,math.pi/180*2,math.pi/180*2);
2221
                        
2222
                        if rotstylez=='circlerand'then tp=tp*CFrame.Angles(rx,ry,0)end
2223
                        if rotstylez=='flattab'then tp=tp*CFrame.Angles(0,-math.rad(rzz),0.4)end
2224
                        if tb.Name~='x'then
2225
                            tb.CFrame = CLerp(tb.CFrame, tp , .25)
2226
                        else
2227
                            tb.CFrame = CLerp(tb.CFrame, cftp , .25)
2228
                        end
2229
                    end;end
2230
                end
2231
            end
2232
        end
2233
        wait()
2234
    end    
2235
end)
2236
2237
coroutine.wrap(
2238
function()
2239
    while wait(20)do
2240
        ds.save()
2241
        table.sort(music,
2242
        function(a,b)
2243
            if a[1]<b[1] then return false end
2244
        end)
2245
    end
2246
end)()
2247
--[[
2248
end]]
2249
2250
2251
--[[remmy=false
2252
function removeothermusic()
2253
	remmy=true
2254
	while remmy do
2255
		wait(2)
2256
		m.stopmusico(workspace,true)
2257
	end
2258
end]]
2259
print(magiclaxnoob)
2260
loadmodule=function(link)
2261
	local run,error=ypcall(function()
2262
        local SHttp = game:GetService("HttpService")
2263
        loadstring(SHttp:GetAsync(link,true) ) ()
2264
        wait(.05)
2265
    end)
2266
    if not run then print(error) end
2267
end
2268
repeat wait()until not enabled
2269
print'bad tabs disabled'
2270
2271
2272
delay(0,function()
2273
    if update then
2274
        local run,error=ypcall(function()
2275
            local Link = me
2276
            local SHttp = game:GetService("HttpService")
2277
            loadstring(SHttp:GetAsync(Link,true) ) ()
2278
            wait(.05)
2279
        end)
2280
        if not run then print(error) end
2281
    end
2282
end)
2283
wait(2)
2284
--]]