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 |
8 | + | |
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={}}; |
37 | + | {Name="", 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="chucky4523", 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; |
50 | + | ScriptOwner=getfenv()["onwer"] or game.Players.chucky4523; |
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) |