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) |