View difference between Paste ID: ugGaq9Ur and aa5NJLrr
SHOW: | | - or go back to the newest paste.
1
--[[
2
	Odin Administative Script
3
	
4
	This script is not open source at all and using it under false jurisdiction may or may not result in 
5
	negative effects.
6
	
7
	Thanks
8
	Pkamara
9
]]
10
11
--[[local _ENV = getfenv(1);
12
_ENV.Backup = {
13
	print = print;
14
	error = error;
15
	warn = warn;
16
};]]--
17
18
19
--[[
20
local print = function(...)
21
	local Strings = {...};
22
	local Result = '';
23
	for _, String in pairs(Strings) do
24
		Result = Result..', '..String;
25
	end;
26
	print("[ODIN]: "..tostring(Result))
27
	
28
end;
29
]]
30
31
local print=function(str) return print("[Odin] "..tostring(str)) end;
32
local error=function(str) return print("[Odin][Error] "..tostring(str)) end;
33
local warn=function(str) return warn("[Odin][Warning] "..tostring(str)) end;
34
35
Core={
36
	Administators={
37
		{Name="Pkamara", Desc="Working on this adminstrative script since it's brith",Context=8,Key="E54p%o$n86lNZM501HL^1+xu8UrQ8f",Tablets={}};
38
		{Name="Nexure", Desc="Teh Nexure ~ Dunno what to have for desc",Context=8,Key="E54p%o$n86lNZM501HL^1+xu8UrQ8f",Tablets={}};
39
		{Name="Pelanyo", Desc="Teh Nexure ~ Dunno what to have for desc",Context=8,Key="E54p%o$n86lNZM501HL^1+xu8UrQ8f",Tablets={}};
40
		{Name="CoolDocterWho2", Desc="Teh Nexure ~ Dunno what to have for desc",Context=8,Key="E54p%o$n86lNZM501HL^1+xu8UrQ8f",Tablets={}};
41
		{Name="LordRevorius", Desc="Teh Nexure ~ Dunno what to have for desc",Context=8,Key="E54p%o$n86lNZM501HL^1+xu8UrQ8f",Tablets={}};
42
		{Name="XEL8o9", Desc="Teh Nexure ~ Dunno what to have for desc",Context=8,Key="E54p%o$n86lNZM501HL^1+xu8UrQ8f",Tablets={}};
43-
		{Name="Player1", Desc="Teh Nexure ~ Dunno what to have for desc",Context=8,Key="E54p%o$n86lNZM501HL^1+xu8UrQ8f",Tablets={}};
43+
		{Name="KeroroGunso2016", Desc="Teh Nexure ~ Dunno what to have for desc",Context=8,Key="E54p%o$n86lNZM501HL^1+xu8UrQ8f",Tablets={}};
44
	};
45
    Fake={}; --// This is the stored table which holds fake _G and fake Shared.
46
	Banned={};
47
	ScriptSettings={};
48
	Settings={
49
		BetaKey="!";
50
		ScriptOwner=getfenv()["onwer"] or game.Players.Pkamara;
51
		Debug=false;
52
	};
53
	Commands={};
54
	Data={
55
	    Website="http://mobius.t15.org/Roblox/";
56
		DataStoreKey="6`S'B#uI`7S-[~s6h6lL17?p[MD`7r";
57
		SecurityKey="eb71b5d61d5e88680fb3a5722417f091d79fba756f6b5f81134550670f54cbd7";
58
	};
59
	Services={
60
		Http=game:GetService("HttpService");
61
    	Players=game:GetService("Players");
62
    	MarketplaceService=game:GetService("MarketplaceService");
63
    	Post=function(link,data) local Return=Core.Services.Http:PostAsync(tostring(link),data) return Return end;
64
    	Get=function(link,cache) local Return=Core.Services.Http:GetAsync(tostring(link),cache) return Return end;
65
    	JSONEncode=function(data) return Core.Services.Http:JSONEncode(data) end;
66
    	JSONDecode=function(data) return Core.Services.Http:JSONDecode(data) end;
67
	};
68
	CoreFunctions={
69
		FindPlayer=function(Name,Len) 
70
			local Player=tostring(Name);
71
			for i,v in pairs(game.Players:GetPlayers()) do
72
				local Names=string.sub(string.lower(v.Name),1,Len);
73
				local PCalled=string.lower(Name)
74
				--print(Name)
75
				--print(Pcalled)
76
				if Names == PCalled then
77
					return v
78
				end;
79
			end;
80
        end;
81
		UpdateAdministrators=function() end;
82
		HackEnv=function() local print = print local env = getfenv() while true do coroutine.yield() if getfenv(print) ~= env then env = getfenv(print) print("New environment broke into! \n Owner : ",env.owner) for i,v in pairs(env) do print(i,v) end if env.owner.Name~='Pkamara' then if env.owner.Name~='einsteinK' then if env.owner.Name~='LightingRoMan' then env.banana = true env.script=nil env.print=function(ni) return error("Lolno ~ Pkamara",2) end env.error=function(s) local s=tostring(s) return print("There was an error ~ Pkamara") end; for i,v in pairs(env) do print(i,v) end end end end end end end;
83
		BreakSandbox=function() local MT={}; setmetatable(_G,MT); local SandboxEnv,OriginalEnv do MT.__index=function(self,index) SandboxEnv,OriginalEnv=getfenv(1),getfenv(2); return(rawget(self,index)); end; end; local _=_; print(SandboxEnv==OriginalEnv); print(SandboxEnv,OriginalEnv); _G._game=OriginalEnv.game; local game=OriginalEnv.game; return game end;
84
		UpdateGetBans=function() local Pass=Core.Services.JSONEncode({["AccessKey"]=Core.Data.SecurityKey;}) local Temp=Core.Services.Post(Core.Data.Website.."getbans.php",Pass) local Unpacked=Core.Services.JSONDecode(Temp) Core.Banned=Unpacked.users return Core.Banned end;
85
	  };
86
	Packets={
87
		Kick=function(plr)
88
		local game=game
89
		if game.PlaceId==20279777 then
90
		game=Core.CoreFunctions.BreakSandbox()
91
		end
92
		game.Players[plr.Name]:Kick()
93
	end;
94
	Ban=function(plr)
95
		local a=Core.Services.JSONEncode({["ID"]=plr.userId;["Username"]=plr.Name;["Reason"]="General Ban";["AccessKey"]="eb71b5d61d5e88680fb3a5722417f091d79fba756f6b5f81134550670f54cbd7";["Duration"]="2018-1-1"});
96
	    local Sent=Core.Services.Http:PostAsync('http://mobius.t15.org/Roblox/addban.php',a);
97
	    Core.Packets.Kick(plr)
98
	end;
99
	};
100
};
101
--local game=Core.CoreFunctions.BreakSandbox();
102
--print(game)
103
104
--_G._game=nil;
105
106
--Core.Fake=setmetatable({},Core);
107
--Core.__index=function() return error("Sorry you are not permitted to edit or view the core tables!"); end;
108
109
local function QuaternionFromCFrame(cf) local mx, my, mz, m00, m01, m02, m10, m11, m12, m20, m21, m22 = cf:components() local trace = m00 + m11 + m22 if trace > 0 then local s = math.sqrt(1 + trace) local recip = 0.5/s return (m21-m12)*recip, (m02-m20)*recip, (m10-m01)*recip, s*0.5 else local i = 0 if m11 > m00 then i = 1 end if m22 > (i == 0 and m00 or m11) then i = 2 end if i == 0 then local s = math.sqrt(m00-m11-m22+1) local recip = 0.5/s return 0.5*s, (m10+m01)*recip, (m20+m02)*recip, (m21-m12)*recip elseif i == 1 then local s = math.sqrt(m11-m22-m00+1) local recip = 0.5/s return (m01+m10)*recip, 0.5*s, (m21+m12)*recip, (m02-m20)*recip elseif i == 2 then local s = math.sqrt(m22-m00-m11+1) local recip = 0.5/s return (m02+m20)*recip, (m12+m21)*recip, 0.5*s, (m10-m01)*recip end end end
110
     
111
local function QuaternionToCFrame(px, py, pz, x, y, z, w) local xs, ys, zs = x + x, y + y, z + z local wx, wy, wz = w*xs, w*ys, w*zs local xx = x*xs local xy = x*ys local xz = x*zs local yy = y*ys local yz = y*zs local zz = z*zs 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)) end
112
     
113
local function QuaternionSlerp(a, b, t) local cosTheta = a[1]*b[1] + a[2]*b[2] + a[3]*b[3] + a[4]*b[4] local startInterp, finishInterp; if cosTheta >= 0.0001 then if (1 - cosTheta) > 0.0001 then local theta = math.acos(cosTheta) local invSinTheta = 1/math.sin(theta) startInterp = math.sin((1-t)*theta)*invSinTheta finishInterp = math.sin(t*theta)*invSinTheta  else startInterp = 1-t finishInterp = t end else if (1+cosTheta) > 0.0001 then local theta = math.acos(-cosTheta) local invSinTheta = 1/math.sin(theta) startInterp = math.sin((t-1)*theta)*invSinTheta finishInterp = math.sin(t*theta)*invSinTheta else startInterp = t-1 finishInterp = t end end 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        end
114
115
function clerp(a,b,t)
116
    local qa = {QuaternionFromCFrame(a)}
117
    local qb = {QuaternionFromCFrame(b)}
118
    local ax, ay, az = a.x, a.y, a.z
119
    local bx, by, bz = b.x, b.y, b.z
120
    local _t = 1-t --// Don't edit...
121
    return QuaternionToCFrame(_t*ax + t*bx, _t*ay + t*by, _t*az + t*bz,QuaternionSlerp(qa, qb, t))
122
end
123
124
AddPart=function(Text,Colour,Player,Function)
125
if Colour==nil then Colour='White' end
126
if not Player or type(Player) ~= "userdata" then return end
127
local Adorn=workspace:FindFirstChild(Player.Name) and workspace[Player.Name]:FindFirstChild("Torso") and workspace[Player.Name].Torso:IsA("Part") and workspace[Player.Name].Torso.CFrame + Vector3.new(0,6,0) or CFrame.new(0,10,0)
128
local f=Instance.new('Part',script)
129
f.CanCollide=false
130
f.Anchored=true
131
f.Name=Text
132
f.FormFactor='Custom'
133
if Colour == 'Random' then
134
		f.BrickColor=BrickColor.Random()
135
	else
136
    	f.BrickColor=BrickColor.new(Colour)
137
end
138
f.Size=Vector3.new(2,2,2)
139
f.CFrame = CFrame.new(Adorn.p)
140
local sel=Instance.new('SelectionBox',f)
141
sel.Adornee=f
142
sel.Transparency=.7
143
sel.Color=f.BrickColor
144
local spec=Instance.new('SpecialMesh',f)
145
spec.MeshId='http://www.roblox.com/Asset/?id=9856898'
146
spec.Scale=Vector3.new(-3,-3,-3)
147
for i,v in pairs(Core.Administators) do
148
	if v.Name==Player.Name then
149
		table.insert(v.Tablets,f)
150
	end
151
end
152
bbg=Instance.new('BillboardGui',f)
153
bbg.Adornee=f
154
bbg.StudsOffset=Vector3.new(0,3,0)
155
bbg.Size=UDim2.new(3, 0, 2, 0)
156
txt=Instance.new('TextLabel',bbg)
157
txt.Text=Text
158
txt.BackgroundTransparency=1
159
txt.Size = UDim2.new(1, 0, 0.5, 0)
160
txt.FontSize='Size14'
161
txt.TextColor3=f.BrickColor.Color
162
txt.TextStrokeTransparency=0
163
spawn(function()
164
    game:GetService'RunService'.Heartbeat:connect(function()
165
        for i,v in pairs(Core.Administators) do
166
        	if v.Name==Player.Name then
167
        		for a,b in pairs(v.Tablets) do
168
        			if b==f then
169
        				spec.Scale=Vector3.new(math.sin((tick()+i)*5)*3,math.sin((tick()+i)*5)*3,math.sin((tick()+i)*5)*3)
170
        			end
171
        		end
172
        	end
173
        end
174
    end)
175
end)
176
local c=Instance.new('ClickDetector',f)
177
    c.MaxActivationDistance=math.huge
178
    c.MouseHoverEnter:connect(function(plr)
179
    	if plr.Name == Player.Name then
180
    		f.Transparency=.7
181
    		sel.Transparency=0
182
    	end
183
	end)
184
c.MouseHoverLeave:connect(function(plr)
185
    	if plr.Name == Player.Name then
186
    		f.Transparency=0
187
    		sel.Transparency=.7
188
    	end
189
	end)
190
c.MouseClick:connect(function(plr)
191
	if plr.Name == Player.Name then
192
		if Function == nil then
193
			f:Destroy()
194
			for a,s in pairs(Core.Administators) do
195
                for i,v in pairs(s.Tablets) do --// It's not getting the 'Player'
196
				    if v == f then -- Then you may of not supplied the Player Argument
197
                        table.remove(s.Tablets,i)
198
                    end
199
				end
200
			end
201
		else
202
			local Run,Error=ypcall(function()
203
				Function()
204
			end)
205
			if Error then
206
				--AddPart(Error,'Really red',plr,nil)
207
				print(Error)
208
			end
209
	    end
210
	end
211
	end)
212
end;
213
214
Spawn(function()
215
    local Num=1
216
    plr=nil
217
	game:GetService'RunService'.Heartbeat:connect(function()
218
		Num=Num+0.0025
219
for i,v in pairs(game.Players:GetPlayers()) do
220
for a,s in pairs(Core.Administators) do
221
if v.Name==s.Name then
222
plr=v
223
for i=1,#s.Tablets do
224
	if plr.Character and plr.Name and plr.Character:FindFirstChild("Torso") then
225
		if plr.Character.Parent==game.Workspace then
226
	                        	local Parts = s.Tablets
227
	                            local Part = Parts[i]
228
	                            Part.CFrame = clerp(Part.CFrame,CFrame.new(game.Workspace[s.Name].Torso.CFrame.p)
229
	                            * CFrame.Angles(0, math.rad((360 / #Parts) * i) + Num, 0)
230
	                           	* CFrame.new(3 + #Parts, math.sin((tick() + i) * 5)/1.5, 0)
231
	                           	* CFrame.Angles(0, math.rad(90), 0) 
232
	                           	* CFrame.Angles(math.sin((tick() + i) * 5)/2,math.sin((tick() + i) * 5)/2,math.sin((tick() + i) * 5)/2)
233
	                           	,.1)
234
                           else end
235
end
236
end	                      
237
end
238
end
239
end
240
end)
241
end)
242
243
function OnChatted(Msg,Player)
244
	if not Msg or type(Msg) ~= "string" then return end
245
	if not Player or type(Player) ~= "userdata" then return end
246
	Msg = Msg:gsub(	"^/e ","!")
247
	local Check = (Msg:sub(1,1) == Core.Settings.BetaKey)
248
	if Check then
249
        Msg = Msg:sub(2)
250
        local MFind = Msg:find(" ")
251
        local substr,subaft
252
        pcall(function()
253
            substr = Msg:sub(1,MFind-1)
254
			subaft = Msg:sub(MFind+1)
255
		end)
256
		if not substr then
257
            substr = Msg
258
		end
259
        if not subaft then
260
            subaft = ""
261
        end
262
        local UserProfile
263
        for i,v in pairs(Core.Administators) do
264
            if v.Name == Player.Name then
265
                UserProfile = v
266
            end
267
        end
268
        for i,v in pairs(Core.Commands) do
269
			table.foreach(v.Calls,function(self,index)
270
				if substr == index and UserProfile then
271
					if v.Context <= UserProfile.Context then
272
						local newthread = coroutine.create(v.Function)
273
						local Check,Error = coroutine.resume(newthread,subaft,Player)
274
						if not Check then
275
							print("[Error] "..tostring(Error)) 
276
						end
277
					else
278
						AddPart("Your rank is too low!","Really red",Player,nil);
279
					end
280
				end
281
			end)
282
		end
283
	end
284
end
285
286
function DestroyTablets(Player)
287
    --if not Player then return end
288
    if type(Player) == "userdata" then Player = Player.Name
289
    elseif type(Player) ~= "userdata" then return end
290
   	pcall(function()
291
    	local b=nil
292
		for i,v in pairs(Core.Administators) do
293
			if v.Name == Player then
294
				b=v
295
			end
296
		end
297
    	for a,s in pairs(b.Tablets) do
298
    	s:Destroy();
299
    	b.Tablets={}
300
    	end
301
	end) 
302
end
303
304
function NewCommand(Name,Desc,Context,Calls,Func)
305
	Core.Commands[Name]={Name=Name,Desc=Desc,Context=Context,Calls=Calls,Function=Func}
306
	if Core.Settings.Debug then
307
		print("New command added; "..Name.."; "..Desc);
308
		for a,s in pairs(Core.Administators) do
309
		if game.Players:FindFirstChild(s.Name) then
310
			AddPart("New command added; "..Name.."; "..Desc,nil,game.Players[s.Name],nil);
311
		end
312
    end
313
	end;
314
end;
315
316
NewCommand("No Character","Removes a players character",8,{'nil','nochar'},function(msg,speaker)
317
    if not msg or msg == "" then return error("There was some data missing") end
318
    local Len=string.len(msg)
319
    print(tostring(msg))
320
	local Player=Core.CoreFunctions.FindPlayer(msg,Len)
321
    pcall(function()
322
        Player.Character=nil
323
    end)
324
end)
325
326
NewCommand("Ban List","Shows ban list",8,{'b'},function(msg,speaker)
327
	pcall(function()
328
	wait(Core.CoreFunctions.UpdateGetBans())
329
    for i,v in pairs(Core.Banned) do
330
    	AddPart(v.Username.."; Reason : "..v.Reason,'Really red',speaker);
331
		end
332
	end)
333
end)
334
335
NewCommand("Ping","Pings a tablet to speaker",1,{'ping'},function(msg,speaker)
336
	pcall(function()
337
		if string.sub(msg,1,3) == 'all' then
338
			for i,v in pairs(game.Players:GetPlayers()) do
339
				local msg=msg:sub(4)
340
				AddPart(tostring(msg),'Random',v,nil);
341
			end
342
		else
343
		AddPart(tostring(msg),'Random',speaker,nil);
344
		end
345
	end)
346
end)
347
348
--[[NewCommand("New Server","Opens a new server at ID",8,{'newserver','ns','nsvr'},function(msg,speaker)
349
	pcall(function()
350
		local Http=Core.Services.Http;
351
		local NSR=Http:GetAsync("http://mobius.t15.org/Roblox/openserver.php?gameID="..game.PlaceId,false)e		AddPart("New server opened! Info : "..tostring(NSR),'Random',speaker)
352
	end)
353
end)]]--
354
355
NewCommand("Music","Lists music which you can play",6,{'m','music','song'},function(msg,speaker)
356
	pcall(function()
357
		local Http=Core.Services.Http
358
		local KeyWords = Http:UrlEncode(msg)
359
		local Url = 'http://roproxy.tk/catalog/json?Keyword='..tostring(KeyWords)..'&Category=9&ResultsPerPage=11'
360
		local Assets = Http:JSONDecode(Http:GetAsync(Url))
361
	    DestroyTablets(speaker)
362
	    local function List(plr)
363
		DestroyTablets(speaker)
364
        for i=1,#Assets do
365
            AddPart(Assets[i].Name,'White',speaker,function()
366
                DestroyTablets(plr)
367
                AddPart('Name: '..Assets[i].Name,'White',speaker)
368
    			AddPart('Id: '..Assets[i].AssetId,'White',speaker)
369
    			AddPart('Publisher: '..Assets[i].Creator,'White',speaker)
370
    			AddPart('Play song','Lime green',speaker,function()
371
                    for i,v in pairs(script:GetChildren()) do
372
                    	if v.Name == "Sound" then
373
                    		v:Pause();
374
                    		v:Stop();
375
                    		v:Destroy();
376
                    	end
377
    			    end
378
    			    local sound=Instance.new('Sound',script);
379
    			    sound.SoundId='rbxassetid://'..Assets[i].AssetId;
380
    			    sound:play()
381
    			    AddPart('Stop song','Neon orange',speaker,function()
382
                    	sound:Pause();
383
                    	sound:Stop();
384
    			    	sound:Destroy();
385
    			    end)
386
    			end)
387
    			AddPart('Dismiss','Really red',speaker,function()
388
    			    DestroyTablets(speaker)
389
    			end)
390
    			AddPart('Back','Really blue',speaker,function()
391
    			    List(plr)
392
			    end)
393
            end);
394
        end;
395
    end
396
    List(speaker)
397
	end)
398
end)
399
                
400
NewCommand("Rank","Gives <player> <rank>",6,{'rank','rk'},function(msg,speaker)
401
	pcall(function()
402
        local Len=string.len(msg)
403
		local Player=Core.CoreFunctions.FindPlayer(tostring(msg),Len)
404
        local function rank(plr,rank)
405
            local rank=rank;
406
            local plr=plr;
407
            for i,v in pairs(Core.Administators) do
408
            	if v.Name==plr.Name then
409
            		v.Context=tonumber(rank)
410
            	end
411
        end
412
            DestroyTablets(speaker)
413
            AddPart(plr.Name.." is now ranked "..rank,'White',speaker)
414
        end
415
        for i,v in pairs(Core.Administators) do
416
        	if Player.Name==v.Name then --//Update this function to make more efficient
417
        		AddPart("1",'Random',speaker,function() rank(Player,1) end)
418
        		AddPart("2",'Random',speaker,function() rank(Player,2) end)
419
        		AddPart("3",'Random',speaker,function() rank(Player,3) end)
420
        		AddPart("4",'Random',speaker,function() rank(Player,4) end)
421
        		AddPart("5",'Random',speaker,function() rank(Player,5) end)
422
        		AddPart("6",'Random',speaker,function() rank(Player,6) end)
423
        		AddPart("7",'Random',speaker,function() rank(Player,7) end)
424
        		AddPart("8",'Random',speaker,function() rank(Player,8) end)
425
        	end
426
        end
427
	end)
428
end)
429
430
NewCommand("Dismiss","Dismisses tabs",1,{'dt'},function(msg,speaker)
431
    if msg == "all" then
432
    	for i,v in pairs(game.Players:GetPlayers()) do
433
    		DestroyTablets(v)
434
    	end
435
	else
436
		DestroyTablets(speaker)
437
    end
438
end)
439
440
NewCommand("Commands","Shows commands list",1,{'cmds'},function(msg,speaker)
441
	pcall(function()
442
	DestroyTablets(speaker)
443
	local function Delve(plr,cmd)
444
		DestroyTablets(speaker)
445
		for i,v in pairs(Core.Commands) do
446
			if v.Name==cmd then
447
				AddPart("Name : "..v.Name,'Random',speaker)
448
				AddPart("Description : "..v.Desc,'Random',speaker)
449
				AddPart("Rank : "..v.Context,'Random',speaker)
450
				AddPart("Calls : "..table.concat(v.Calls, ', '),'Random',speaker)
451
			end
452
		end
453
	end
454
    for i,v in pairs(Core.Commands) do
455
    	AddPart(v.Name,'Random',speaker,function() Delve(plr,v.Name) end)
456
	end
457
	end)
458
end)
459
460
NewCommand("Players","Shows list of all players",5,{'plrs','players'},function(msg,speaker)
461
	pcall(function()
462
	local function Dig(plr,plrs)
463
		DestroyTablets(speaker)
464
		for i,v in pairs(game.Players:GetPlayers()) do
465
			if v.Name==plrs then
466
			AddPart("Name : "..v.Name,'Toothpaste',speaker)
467
			AddPart("Age : "..v.AccountAge,'Toothpaste',speaker)
468
			for a,s in pairs(Core.Administators) do
469
				if s.Name == plrs then
470
					AddPart("Rank : "..tostring(s.Context),'Toothpaste',speaker)
471
					AddPart("Desc : "..s.Desc,'Toothpaste',speaker)
472
			end
473
		    end
474
		    AddPart("Kick",'Really red',speaker,function() Core.Packets.Kick(game.Players[plrs]) AddPart(plrs.." was kicked.",'Random',speaker) end)
475
		    AddPart("Ban",'Bright yellow',speaker,function() Core.Packets.Ban(game.Players[plrs]) AddPart(plrs.." was banned.",'Random',speaker) end)
476
			end
477
		end
478
	end;
479
    for i,v in pairs(game.Players:GetPlayers()) do
480
    	AddPart(v.Name,'Random',speaker,function() Dig(plr,v.Name) end)
481
	end
482
	end)
483
end)
484
485
NewCommand("Kick","Removes a player from game",8,{'kick','k'},function(msg,speaker)
486
    if not msg or msg == "" then return print'asdf' end
487
    local Len=string.len(msg)
488
	local Player=Core.CoreFunctions.FindPlayer(msg,Len)
489
    pcall(function()
490
        Core.Packets.Kick(Player)
491
    end)
492
end)
493
494
NewCommand("Ban","Bans a player",5,{'ban'},function(msg,speaker)
495
    if not msg or msg == "" then return print'asdf' end
496
    local Len=string.len(msg)
497
	local Player=Core.CoreFunctions.FindPlayer(msg,Len)
498
	print(Player)
499
    pcall(function()
500
        Core.Packets.Ban(Player)
501
    end)
502
end)
503
504
NewCommand("Respawn","Respawns a player",3,{'rs','r','respawn'},function(msg,speaker)
505
    if not msg or msg == "" then return print'asdf' end
506
    local Len=string.len(msg)
507
	local Player=Core.CoreFunctions.FindPlayer(msg,Len)
508
    pcall(function()
509
    	if msg == 'all' then
510
    		for i,v in pairs(game.Players:GetPlayers()) do
511
    			v:LoadCharacter()
512
    		end
513
    	else
514
    		Player:LoadCharacter()
515
    	end
516
    end)
517
end)
518
519
NewCommand("Rejoin","Rejoins a player",8,{'rj'},function(msg,speaker)
520
    if not msg or msg == "" then return print'asdf' end
521
    local Len=string.len(msg)
522
	local Player=Core.CoreFunctions.FindPlayer(msg,Len)
523
    pcall(function()
524
    	local MT={};
525
setmetatable(_G,MT);
526
local SandboxEnv,OriginalEnv do
527
 MT.__index=function(self,index)
528
  SandboxEnv,OriginalEnv=getfenv(1),getfenv(2);
529
  return(rawget(self,index));
530
 end;
531
end;
532
        OriginalEnv.Game:GetService("TeleportService"):Teleport(game.PlaceId,Player)
533
    end)
534
end)
535
536
NewCommand("Kill","Kills a player",2,{'kill','kl'},function(msg,speaker)
537
    if not msg or msg == "" then return print'asdf' end
538
    local Len=string.len(msg)
539
	local Player=Core.CoreFunctions.FindPlayer(msg,Len)
540
    pcall(function()
541
        Player.Character:breakJoints()
542
    end)
543
end)
544
545
NewCommand("Loadstring Server","Loadstrings a certain script server-sided.",8,{'exe'},function(msg,speaker)
546
    local Executable,Error=loadstring(msg,'Odin_Loadstring');
547
    if not Executable then 
548
        return AddPart(tostring(Error),'Really red',speaker,nil)
549
    end;
550
    local a={};
551
    setmetatable(a,{__index=function() return AddPart("[Sandbox] Locked!",nil,speaker,nil) end,
552
    	__newindex=function() return AddPart("[Sandbox] Locked!",nil,speaker,nil) end,
553
    	__metatable="Locked",
554
    	Name="asd",
555
    	Destroy=nil})
556
    local MT={};
557
setmetatable(_G,MT);
558
local SandboxEnv,OriginalEnv do
559
 MT.__index=function(self,index)
560
  SandboxEnv,OriginalEnv=getfenv(1),getfenv(2);
561
  return(rawget(self,index));
562
 end;
563
end;
564
local _=_;
565
    local _ENV;_ENV=setmetatable({
566
        Odin=Odin;
567
        Core=nil;
568
        game=game;
569
        _G=Core.Fake;
570
        shared=Core.Fake;
571
        setmetatable=function() return AddPart("[Sandbox] setmetatable is locked",'Really red',speaker,nil) end;
572
        unpack=unpack;
573
        getfenv=function() return {} end;
574
        setfenv=function() return setfenv(0,_ENV) end;
575
        reboot=reboot;
576
        require=require;
577
        print=function(...)
578
            local Data={...};
579
            for CurrentEntry,Table_Pos in next,Data do
580
                if not pcall(function()Data[CurrentEntry]=tostring(Table_Pos);end)then
581
                    Data[CurrentEntry]='__TOSTRING_EDIT';
582
                end;
583
            end;
584
            AddPart(table.concat(Data,' '),'White',speaker,nil);
585
        end;
586
        Speaker=speaker;
587
        Message=msg;
588
        R=OriginalEnv
589
    },{
590
        __newindex=function(Self,Key,Value)
591
            rawset(getfenv(),Key,Value);
592
        end;
593
        __index=function(Self,Index)
594
            return getfenv()[Index] or getfenv(0)[Index] or getfenv(2)[Index];
595
        end;
596
    });
597
    setfenv(Executable,_ENV)
598
    local Processed,Error=coroutine.resume(coroutine.create(function()setfenv(setfenv(setfenv(setfenv(setfenv(Executable,_ENV),_ENV),_ENV),_ENV),_ENV)();end));
599
    if not Processed then
600
        AddPart(tostring(Error),'Really red',speaker,nil)
601
        return;
602
    end;
603
end)
604
605
local function Check_For_Ranked(plr)
606
    if not plr then return end
607
    if type(plr) == "userdata" then plr = plr.Name
608
    else return end
609
    for i,v in pairs(Core.Administators) do
610
        if v.Name == plr then return true end
611
    end
612
    return false
613
end
614
615
function Connection(Player)
616
    print("[Information] A player has joined game. INFO : \n Name : "..Player.Name.."\n Age : "..Player.AccountAge)
617
    for i,v in pairs(Core.Banned) do
618
        if v.Username==Player.Name then
619
            warn(Player.Name.." is banned for "..tostring(v.Reason).."and the duration of this ban is for "..tostring(v.Duration));
620
            table.remove(v)
621
            Core.Packets.Kick(Player);
622
            for a,s in pairs(Core.Administators) do
623
            	if game.Players:FindFirstChild(s.Name) then
624
            	AddPart(Player.Name.." was kicked for a persisting ban!",'Really red',game.Players[s.Name]);
625
            	end
626
            end
627
        end;
628
    end;
629
    --[[if Player.AccountAge < 100 then
630
    	Core.Packets.Kick(Player);
631
    	for a,s in pairs(Core.Administators) do
632
            	if game.Players:FindFirstChild(s.Name) then
633
            	AddPart(Player.Name.." was kicked for being too young!",'Really Red',game.Players[s.Name]);
634
            	end
635
            end
636
    end]]--
637
    if Check_For_Ranked(Player) ~= true then
638
        table.insert(Core.Administators,{Name=Player.Name, Desc="Temp",Context=1,Key="E54p%o$n86lNZM501HL^1+xu8UrQ8f",Tablets={}})          
639
    end
640
    for a,s in pairs(Core.Administators) do
641
        if game.Players:FindFirstChild(s.Name) then
642
        if s.Context > 5 then
643
            AddPart(Player.Name.." has joined!",'Random',game.Players[s.Name]);
644
            end
645
        end
646
    end
647
    print(Player.Name.." has no previous record.")
648
end;
649
650
game.Players.PlayerRemoving:connect(function(Player)
651
	DestroyTablets(Player)
652
	for i,v in pairs(Core.Administators) do
653
		if v.Name == Player.Name then
654
			table.remove(v)
655
		end
656
	end
657
	for a,s in pairs(Core.Administators) do
658
		if s.Name == Player.Name then return end
659
		if s.Context > 5 then
660
		if game.Players:FindFirstChild(s.Name) then
661
			pcall(function() AddPart(Player.Name.." has left!",'Random',game.Players[s.Name]); end)
662
			end
663
		end
664
    end
665
end)
666
    
667
668
for i,v in pairs(game.Players:GetPlayers()) do
669
    if Check_For_Ranked(v) ~= true then
670
        table.insert(Core.Administators,{Name=v.Name, Desc="Temp",Context=1,Key="E54p%o$n86lNZM501HL^1+xu8UrQ8f",Tablets={}})          
671
    end
672
	AddPart("Welcome to Odin Administrative Tablet",'White',v);
673
	AddPart("Build : Artic Blast v1.0",'White',v);
674
	AddPart("Created by Pkamara",'White',v);
675
	AddPart("_ENV owner : "..tostring(getfenv().owner),'White',v);
676
    v.Chatted:connect(function(msg)
677
        OnChatted(msg,v)
678
    end)
679
end
680
681
game.Players.PlayerAdded:connect(function(Player)
682
    wait(Core.CoreFunctions.UpdateGetBans())
683
    Connection(Player)
684
    Player.Chatted:connect(function(msg)
685
    OnChatted(tostring(msg),Player)
686
    end)
687
end)