--[[ Hi! This is LuaModelMaker's Admin V3 by MakerModelLua. If you want to know what commands do just go into your game and say ;cmds for a list of commands, what they do, examples, rank needed, and more! Or, go to http://www.classy-studios.com/V3/Commands.php TUTORIAL ON HOW TO USE: https://www.youtube.com/watch?v=IieEFJPrjN4 --->> DO NOT EDIT THESE SETTINGS <<--- Well you can but it's a waste of your time. The settings are located in workspace in a folder called "MakerModelLua's Settings". You can also use this plugin: http://www.roblox.com/MakerModelLuas-Admin-Plugin-item?id=242781551 USE REMOTE ADMIN: http://www.classy-studios.com/Login/ ...also... this is open source! No stupid shady module scripts, which means it works in studio! ]] -- I REPEAT DON'T EDIT. YOU MIGHT BREAK SOMETHING -- local Settings = { Ranks = { ["Owner"] = {sina157}; ["Admin"] = {}; ["Member"] = {}; ["Banned"] = {}; ["Crashed"] = {}; ["Muted"] = {}; }; Prefix = ";"; Bet = " "; MinimumAge = 0; ServerLocked = false; ColorScheme = "White"; TransparencyScheme = 50; Fun = true; EnableAdminMenu = true; EnableTaskBar = true; FreeAdmin = false; Font = "Arial"; DisableAbuse = false; AbuseList = {"kill", "punish", "respawn", "smoke", "blind", "strobe", "flash", "control", "give", "health", "clone", "loopfling", "fling", "drug", "explode", "splode", "ragdoll", "change", "insert", "decal", "taketools", "removetools", "bomb", "say", "sink", "asteroid", "gun", "health", "damage", "btools", "missile", "reck", "truck", "debug"}; AbusableGear = {55028088, 73089166, 73089190, 73089204, 73089214, 73089239, 73089259, 58921588, 65347268, 130113146, 139578207, 21001552, 58901335, 36431591, 35268363, 16201421, 16200402, 16200204, 16200373, 60791062, 58880579, 73089204, 73089239, 73089259, 36270159, 36334760, 36738185, 58901481, 58901575, 73089229, 73089214, 35200756, 36068233, 36017373, 35223828, 35201552, 55027987, 35205409, 36738142, 16975388, 35226945, 18474459}; LinkedAccount = ""; DataKey = ""; ExecuteNotificationSound = 0; --177578949 EnableSounds = true; VIPMemberID = 0; VIPAdminID = 0; GroupID = 0; GroupBanRank = 0; GroupMemberRank = 0; GroupAdminRank = 0; GroupOwnerRank = 0; GroupRankBan = 0; BannedGroupIDs = {}; IRCServer = ""; IRCChannel = ""; IRCCommandExecuters = {}; } local Colors = { ["WHITE"] = Color3.new(1,1,1); ["BLACK"] = Color3.new(0,0,0); ["GRAY"] = Color3.new(0.5,0.5,0.5); ["RED"] = Color3.new(1,0,0); ["GREEN"] = Color3.new(0,1,0); ["BLUE"] = Color3.new(0,0,1); ["YELLOW"] = Color3.new(1,1,0); ["PINK"] = Color3.new(1,0,1); ["MAGENTA"] = Color3.new(1,0,1); ["CYAN"] = BrickColor.new("Cyan").Color; ["TEAL"] = BrickColor.new("Teal").Color; ["BROWN"] = Color3.new(0.55,0.25,0.075); ["PURPLE"] = Color3.new(0.5,0,0.5); ["RANDOM"] = Color3.new(math.random(0,255)/255,math.random(0,255)/255,math.random(0,255)/255); } local Server = { Workspace = game:GetService("Workspace"); Players = game:GetService("Players"); Lighting = game:GetService("Lighting"); MPS = game:GetService("MarketplaceService"); TS = game:GetService("TeleportService"); HS = game:GetService("HttpService"); RS = game:GetService("RunService"); PS = game:GetService("PointsService"); TestS = game:GetService("TestService"); IS = game:GetService("InsertService"); Teams = game:GetService("Teams"); Data = game:GetService("DataStoreService"); GDS = game:GetService("DataStoreService"):GetGlobalDataStore(); NS = {Port = 0}; -- you'll be glad if you're in studio and networkserver isn't mentioned } local Icons = { ["Message"] = 7724351; ["Error"] = 94011556; ["Information"] = 144175130; ["Check"] = 132769976; ["Search"] = 61994930; ["Time"] = 136391033; ["Notice"] = 156507320; ["Sound"] = 164682936; ["Log"] = 70650545; ["Question"] = 41363872; ["Output"] = 11481605; ["Admin"] = 302470270; ["Lock"] = 11341626; ["Settings"] = 131064748; ["Map"] = 257119661; ["Plugin"] = 257097414; } local IRC = { Codes = { ["001"] = "RPL_WELCOME", ["002"] = "RPL_YOURHOST", ["003"] = "RPL_CREATED", ["004"] = "RPL_MYINFO", ["005"] = "RPL_ISUPPORT", ["250"] = "RPL_STATSCONN", ["251"] = "RPL_LUSERCLIENT", ["252"] = "RPL_LUSEROP", ["254"] = "RPL_LUSERCHANNELS", ["255"] = "RPL_LUSERME", ["265"] = "RPL_LOCALUSERS", ["266"] = "RPL_GLOBALUSERS", ["352"] = "RPL_WHOREPLY", ["371"] = "RPL_INFO", ["372"] = "RPL_MOTD", ["374"] = "RPL_ENDINFO", ["375"] = "RPL_MOTDSTART", ["376"] = "RPL_ENDOFMOTD", ["422"] = "ERR_NOMOTD", }, Ignore = { ["004"] = true, ["005"] = true, }; Users = {}; Logs = {}; Chats = {}; Forms = {}; MessageAdded = Instance.new("BindableEvent"); Servers = { ["esper.net"] = { BaseUrl = "http://webchat.esper.net/"; DynamicUrl = ""; }; ["quakenet.org"] = { BaseUrl = "http://webchat.quakenet.org/"; DynamicUrl = "dynamic/leibniz", }; ["swiftirc.net"] = { BaseUrl = "http://qwebirc.swiftirc.net/"; DynamicUrl = "", }; }; NickName = "rbxMMLV3_"..math.random(1,100000); SessionCounter = 0; Connected = false; Stop = false; SessionID = ""; } local RankHUD = { ["Muted"] = 202180094; ["Non-Admin"] = 202180121; ["Member"] = 202180052; ["Admin"] = 202180015; ["Owner"] = 202179988; } local TextConverter = { LetterSounds = { ["a"] = {223757826, nil}; -- 203343899 ["b"] = {223533700, 0.2}; -- 203344029 ["c"] = {223533711, nil}; -- 203343994 ["d"] = {223757910, nil}; -- 203398237 ["e"] = {223758026, nil}; -- 203398295 ["f"] = {223777655, nil}; -- 203398347 ["g"] = {223777738, nil}; -- 203398372 ["h"] = {223777757, nil}; -- 203398397 ["i"] = {223777807, nil}; -- 203398422 ["j"] = {223782888, nil}; -- 203398450 ["k"] = {223533711, nil}; -- 203343994 ["l"] = {223782961, 0.4}; -- 203398541 ["m"] = {223782992, nil}; -- 203398578 ["n"] = {223783063, nil}; -- 203398599 ["o"] = {223783184, nil}; -- 203398611 ["p"] = {223783235, nil}; -- 203398727 ["q"] = {223783260, nil}; -- 203398755 ["r"] = {223783305, 0.2}; -- 203398792 ["s"] = {223783377, nil}; -- 203398806 ["t"] = {223783446, nil}; -- 203398850 ["u"] = {223783512, nil}; -- 203398872 ["v"] = {223783654, nil}; -- 203398965 ["w"] = {223783697, nil}; -- 203398984 ["x"] = {223783796, nil}; -- 203399008 ["y"] = {223783853, nil}; -- 203399043 ["z"] = {223783893, nil}; -- 203399096 ["ch"] = {223784367, 0.3}; -- 203592149 ["th"] = {223788235, 0.3}; -- 203399215 ["sh"] = {223784505, 0.2}; -- 203399566 ["wh"] = {223784555, 0.3}; -- 203622828 ["oo"] = {223784456, 0.3}; -- 203399743 ["ing"] = {223784393, 0.3}; -- 203402836 }; LongVowels = { ["a"] = {223533687, nil}; -- 203343932 ["e"] = {223777620, nil}; -- 203398314 ["i"] = {223777855, nil}; -- 203398440 ["o"] = {223783212, nil}; -- 203398619 ["u"] = {223783572, nil}; -- 203398897 }; Pronounce = { ["0"] = "zero"; ["1"] = "wun"; ["2"] = "too"; ["3"] = "three"; ["4"] = "four"; ["5"] = "five"; ["6"] = "six"; ["7"] = "seven"; ["8"] = "eyt"; ["9"] = "nine"; ["one"] = "wun"; ["two"] = "too"; ["eight"] = "eyt"; ["eigh"] = "ey"; ["gh"] = "h"; ["kn"] = "n"; ["come"] = "cu".."m"; ["bye"] = "bi"; ["#"] = "hashtag"; ["@"] = "at"; ["&"] = "and"; ["*"] = "astrict"; ["mn"] = "m"; ["kn"] = "n"; ["ies"] = "ees"; }; NonEnglishRules = { ["to"] = "too"; ["you"] = "yoo"; ["we"] = "wee"; ["are"] = "erh"; ["your"] = "yoor"; ["you're"] = "yoor"; ["youre"] = "yoor"; ["pizza"] = "peetzoh"; ["ok"] = "okay"; ["have"] = "hav"; ["my"] = "mi"; ["me"] = "mee"; ["u"] = "yoo"; ["r"] = "erh"; ["move"] = "moov"; ["dove"] = "duv"; ["debris"] = "debree"; ["do"] = "doo"; } } local HTMLDecode = { ["35"] = "#"; ["36"] = "$"; ["37"] = "%%"; ["38"] = "*"; ["39"] = "'"; ["58"] = ":"; ["59"] = ";"; ["60"] = "<"; ["62"] = ">"; } local Packages = { [27112438] = {27112025,27112039,27112052,27112056,27112068}; [139610216] = {139607570,139607625,139607673,139607718,139607770,139610147}; [77518833] = {77518564,77518616,77518654,77518696,77518737}; [32336368] = {32336059,32336117,32336182,32336243,32336306}; [59772975] = {59772137,59772181,59772219,59772279,59772667,59721671}; [54116460] = {54116290,54116338,54116373,54116394,54116432}; [39977366] = {39976703,39976829,39976927,39977192,39977295}; [32357766] = {32357663,32357631,32357619,32357584,32357558}; [27123973] = {27121265,27121306,27121353,27121393,27121432}; [55717536] = {55717271,55717330,55717388,55717434,55717491}; [28279963] = {28279160,28279217,28279859,28279894,28279938}; [27403592] = {27402580,27402546,27402641,27402714,27402742}; [86499905] = {86499666,86499698,86499716,86499753,86499793,86498113,62724852,86487766}; [86500185] = {86500054,86500078,86500036,86500008,86500064,86487700,86498048,62234425}; [48474394] = {48474356,48474294}; [187996626] = {187996057,187996098,187996167,187996258,187996321,187996409,187996534}; [223826660] = {223824598,223825145,223825310,223825496,223825618,223825761,223825893,223800426}; [188835832] = {188835233,188835327,188835428,188835511,188835586,188835673,188644771}; [139581948] = {139581117,139581174,139581230,139581292,139581375,139581559,139581668,139581823}; [33378577] = {33378366,33378438,33378484,33378522,33378540}; [101744863] = {101742885,101743631,101716880,101744248,101744215,101744371}; [136793141] = {136792342,136792633,136792698,136792747,136792820,136795159,136795130}; [91658555] = {91657680,91657749,91657884,91657986,91658092,91658290,90249118}; [41851073] = {41850825,41850868,41850915,41851009,41850959} } local CharacterCache = { {"MakerModelLua", 38837082}; {"LuaModelMaker", 20920633}; {"builderman", 156}; {"Shedletsky", 261}; {"Telamon", 13645}; {"ROBLOX", 1}; } local FaceCovert = { Left = "xpos"; Right = "xneg"; Front = "zpos"; Back = "zneg"; Top = "ypos"; Bottom = "yneg"; } local Meshes = { ["crown"] = {1, 1078075}; ["king"] = {1, 11419761}; ["teapot"] = {0.03, 1029523}; ["apple"] = {2.5, 16190555}; ["potato"] = {1, 25268275}; ["panda"] = {0.5, 20709221}; ["dominus"] = {0.5, 21057410}; ["fedora"] = {0.75, 13640868}; ["noob"] = {1, 20929341}; ["knife"] = {0.3, 121944778}; ["book"] = {0.3, 1136139}; } local NotifySounds = { ["Hover"] = 223134269; ["Select"] = 292141227; } -- Ok, if you're here, you must be a scripter. Fine. I guess you can look ;) -- Why else would I NOT have put it in a module?!?!? local ChatColors = {"Bright red", "Bright blue", "Earth green", "Bright violet", "Bright orange", "Bright yellow", "Light reddish violet", "Brick yellow"} local SoundList,GlobalSoundList = {},{} local ScriptCache,MarketCache,PackageCache = {},{},Packages local TempChatLogs = {} local ToolRegions = {Server.Lighting, game:GetService("ReplicatedStorage"), game:GetService("ServerStorage")} local NoSpeak = false local SOUND,MARKET,RANK,STRING,GUI = {},{},{},{},{} local CORE,REMOTE = {Version = script:FindFirstChild("Version"), Domain = "http://www.classy-studios.com"},{RemoteAdmin = {Command, ServerCommand, ServerPort, TimeStamp}, RemoteConnection = false} local ChatLogs,CommandLogs = {},{} local ClientInfo,LoopKills,List,Flings,Beeps = {},{},{},{},{} local PriChat = {Chats = {}, Chatted = Instance.new("BindableEvent")} local Dispose,Jails,PermCommandBars = {},{},{} local Waypoints = {["Center"] = Vector3.new(0,0,0)} local Objects = {} local Sound = nil local ModLighting = false local DataReady = true local RemoteAbuseGear = {} local GameOwner = "[ Client ]" local PlaceName = "Unknown" local PlaceInfo = {} local IsStudio = false local IsSB = false local Date = nil local Fonts = {} local PendingRequests = {} local F3X = script:FindFirstChild("F3X Tools") local Plugins = game:FindFirstChild("Ma".."kerModelL".."ua's Admin Plugins", true) local RemoteData = {RemoteAdminWait = 60, ChatLogWait = 90} local KeyBinds = {} local Crowns = {} local LastKeys = {} local Cars = {} local CrownStorage = script:FindFirstChild("CrownStorage") if not CrownStorage then CrownStorage = Instance.new("Model", script) CrownStorage.Name = "CrownStorage" end -- import old settings just in case -- local OldSettings = script.Parent:FindFirstChild("LuaModelMaker's Admin Settings") or game:FindFirstChild("LuaModelMaker's Admin Settings", true) if OldSettings then OldSettings = require(OldSettings) for _,ValName in pairs({"Ranks", "Prefix", "Bet", "ServerLocked", "DisableAbuse", "AbuseList", "AbusableGear", "LinkedAccount", "DataKey", "VIPMemberID", "VIPAdminID", "GroupID", "GroupMemberRank", "GroupAdminRank", "GroupOwnerRank"}) do Settings[ValName] = OldSettings[ValName] end Settings.GroupBanRank = OldSettings.RankBan Settings.Fun = OldSettings.FUN end if F3X then F3X = F3X:Clone() F3X.Handle.Anchored = false script:FindFirstChild("F3X Tools"):Destroy() end wait(0.1) local SettingsValues = script.Parent:FindFirstChild("MakerModelLua's Admin Settings") or game:FindFirstChild("MakerModelLua's Admin Settings", true) if SettingsValues then if SettingsValues:IsA("Folder") or SettingsValues:IsA("Configuration") then for _,Value in pairs(SettingsValues:GetChildren()) do if Settings[Value.Name] then if Value:IsA("Folder") or Value:IsA("Configuration") then -- ranks for _,NewValue in pairs(Value:GetChildren()) do if ypcall(function() return NewValue.Value end) then if Settings[Value.Name][NewValue.Name] then local Val = NewValue.Value if type(Settings[Value.Name][NewValue.Name]) == "table" then Val = {} for Word in string.gmatch(NewValue.Value, "%w+") do table.insert(Val, Word) end end Settings[Value.Name][NewValue.Name] = Val end end end elseif ypcall(function() return Value.Value end) then if Settings[Value.Name] then local Val = Value.Value if type(Settings[Value.Name]) == "table" then Val = {} for Word in string.gmatch(Value.Value, "%w+") do table.insert(Val, Word) end end Settings[Value.Name] = Val end end end end end end if Settings.LinkedAccount == "Admin" and game.CreatorId ~= 38837082 then Settings.LinkedAccount = "" elseif game.PlaceId == 199055528 or game.PlaceId == 329866187 then Settings.LinkedAccount = "Admin" end local getfenv,setfenv,table,math,coroutine,pcall,ypcall,xpcall,string,assert,type,unpack,loadstring,tostring,tonumber,print = getfenv,setfenv,table,math,coroutine,pcall,ypcall,xpcall,string,assert,type,unpack,loadstring,tostring,tonumber,print -- localize variables so executables don't troll the script local Workspace,workspace,Instance,require,script = Workspace,workspace,Instance,require,script wait(1) local ExploitModule = game:FindFirstChild("MakerMode".."lLua's Admin Anti-Exploit Module", true) if Server.Players.LocalPlayer then print("MML Admin Compromised: Running in studio") IsStudio = true end if not IsStudio then Server.NS = game:GetService("NetworkServer") script.Name = "Maker".."Mo".."delLua's Admin" end --repeat --ypcall(function() PlaceInfo = Server.MPS:GetProductInfo(game.PlaceId) PlaceName = PlaceInfo.Name --end) --wait(1) --until #PlaceInfo > 0 if string.byte(string.sub(PlaceName,1,1)) == 226 then PlaceName = string.sub(PlaceName,4,#PlaceName) end for i = 1,5 do if GameOwner == "[ Client ]" then print("MML's Admin: Attempting to establish owner's name #"..i) ypcall(function() GameOwner = Server.Players:GetNameFromUserIdAsync(game.CreatorId) print("MML's Admin: Found game owner: "..GameOwner) end) wait(1) end end if game.PlaceId == 21053279 or game.PlaceId == 21053219 or game.PlaceId == 20279777 or PlaceId == 260897989 or NLS then IsSB = true end if IsSB then Settings.IRCServer = "swiftirc.net"; Settings.IRCChannel = "#PkamaraSB"; Settings.IRCCommandExecuters = {"MakerModelLua", "MakerModelLuaIRC"} Settings.LinkedAccount = "ScriptBuilder" end local PlaceInfoFormat = "{PLACE: "..string.sub(PlaceName,1,25).."("..game.PlaceId..") | PORT: "..Server.NS.Port.."}" table.insert(Settings.Ranks["Owner"], GameOwner) for _,Font in pairs(Enum.Font:GetEnumItems()) do Fonts[Font.Name] = Font end local LogClient = script:FindFirstChild("AddClientInfo") if LogClient then LogClient:Destroy() end LogClient = Instance.new("RemoteFunction", script) LogClient.Name = "AddClientInfo" LogClient.OnServerInvoke = function(Player, Info) if Info then for Key,Data in pairs(Info) do ClientInfo[Player.Name][Key] = Data end end end local function MakeFunction(Type, Name) local Func = script:FindFirstChild(Name) if Func then Func:Destroy() end Func = Instance.new(Type, script) Func.Name = Name getfenv()[Name] = Func return Func end MakeFunction("BindableFunction", "ExecuteCommand") MakeFunction("RemoteFunction", "ExecuteCommandClient") MakeFunction("BindableFunction", "ExecuteCode") MakeFunction("RemoteFunction", "IsAdmin") MakeFunction("RemoteFunction", "AddExploit") MakeFunction("BindableFunction", "AddExploitServer") MakeFunction("RemoteFunction", "KickClient") MakeFunction("RemoteFunction", "ConvertTextToSound") MakeFunction("RemoteFunction", "KeyPressed") MakeFunction("RemoteFunction", "InputKey") MakeFunction("RemoteFunction", "RankPlayerLocal") MakeFunction("BindableFunction", "RankPlayerServer") --[[ if NLS then local Value = script:FindFirstChild("Override") LogClient.Parent = game if not Value then local Value = Instance.new("BoolValue", script) Value.Name = "Override" local CloneScript = script:Clone() CloneScript.Disabled = true CloneScript.Parent = game:FindFirstChild("ServerScriptService") CloneScript.Disabled = false CloneScript.Parent = nil script:Destroy() script.Disabled = true end end ]] if not CORE.Version then CORE.Version = {Value = "3.Unknown"} end IRC.NickName = "rbxMMLV3_"..game.PlaceId.."_"..Server.NS.Port -- Core functions -- function CORE:FixSettings() if Settings.Bet == "/" or Settings.Bet == "-" or Settings.Bet == "(" or Settings.Bet == ")" then Settings.Bet = " " end CORE:ChangeBet(Settings.Bet) if Settings.VIPMemberID == 0 then Settings.VIPMemberID = 1 end if Settings.VIPAdminID == 0 then Settings.VIPAdminID = 1 end if Settings.TransparencyScheme > 90 then Settings.TransparencyScheme = 90 end if Settings.TransparencyScheme < 10 then Settings.TransparencyScheme = 10 end Settings.TransparencyScheme = Settings.TransparencyScheme/100 if not Fonts[Settings.Font] then Settings.Font = "Arial" end end function CORE:NilPlayer(Player) if Player == nil or type(Player) == "table" then return true else return false end end function CORE:ExecuteResource(ResourceName, Parent, Data) local ReturnScript = nil local Executed = true if script:FindFirstChild("Resources") then local RawResource = script.Resources:FindFirstChild(ResourceName) if RawResource then local Resource = RawResource:Clone() Resource.Disabled = true Resource.Parent = Parent if Data then for Key,Value in pairs(Data) do if Resource[Key] then Resource[Key].Value = Value end end end wait() Resource.Disabled = false ReturnScript = Resource else Executed = false end else Executed = false end if Executed == false then if not Data then Data = {} end local Source = ScriptCache[ResourceName] if not Source then Source = REMOTE:GetURL(CORE.Domain.."/Lua/Resources/"..ResourceName..".lua") if Source then ScriptCache[ResourceName] = Source end end if Data and Source then for Key,Value in pairs(Data) do Source = string.gsub(Source, "@@"..Key.."@@", tostring(Value)) end end if NLS and Source then ReturnScript = NLS(Source, Parent) end end return ReturnScript end function CORE:HandleError(Error, Speaker) local Return = "" if not Error or Error == "" then Return = "Unknown Error" else Return = "Error: "..(string.match(Error, '"*".:(.+)') or "Unknown line: "..Error) end if Speaker then GUI:SendMessage(Speaker, "Error ", "RED "..Return, "Error") end return Return end local function ExecuteSafe(Source, Speaker) -- no CORE local Script, Error = loadstring(Source) if Error then return false, CORE:HandleError(Error, Speaker) else getfenv(Script).SOUND,getfenv(Script).MARKET,getfenv(Script).RANK,getfenv(Script).STRING,getfenv(Script).GUI,getfenv(Script).CORE,getfenv(Script).REMOTE = SOUND,MARKET,RANK,STRING,GUI,CORE,REMOTE getfenv(Script).Server, getfenv(Script).script = Server,script if Speaker then getfenv(Script).print = function(...) GUI:SendMessage(Speaker, "Print Output", STRING:UnpackArgs(...), "Output") end getfenv(Script).print_array = function(List) if type(List) == "table" then GUI:ListGui(Speaker, "Listed Table", List, "Output") end end end local Suc, Error = ypcall(coroutine.wrap(Script)) if not Suc then Error = CORE:HandleError(Error, Speaker) end return Suc,Error end end function CORE:GetTime(Regular, FullDate) if Regular == nil then Regular = true end local Meridiem = "" if Regular == true then Meridiem = " AM" end local SecondsOfToday = math.fmod(os.time(), 60*60*24) local Hour = math.floor(SecondsOfToday / (60*60)) local Minute = math.floor(SecondsOfToday/60 - Hour*60) local Second = math.floor(math.fmod(SecondsOfToday, 60)) if Hour > 12 and Regular == true then Hour = Hour - 12 Meridiem = " PM" end Hour,Minute,Second = tostring(Hour),tostring(Minute),tostring(Second) if #Hour <= 1 then Hour = "0"..Hour end if #Minute <= 1 then Minute = "0"..Minute end if #Second <= 1 then Second = "0"..Second end local Return = Hour..":"..Minute..":"..Second..Meridiem if FullDate == true and Date then Return = Date.." "..Return end return Return end function CORE:RemoveAdmin(Speaker) local Answer = true -- false if not CORE:NilPlayer(Speaker) then Answer = GUI:PromptMessageWithButtons(Speaker, "Remove M".."akerModelLua's Admin?", "Would you like to remove Ma".."kerModel".."L".."uas's Admin? After removing the admin, no one is admin and cannot be re-inserted until the server restarts. Continue?", "Question", {"Yes", "No"}) end if Answer == "Yes" or CORE:NilPlayer(Speaker) then if not CORE:NilPlayer(Speaker) then SOUND:PlayNotification(Speaker, 177835465, 1) wait(0.5) end for _,Player in pairs(Server.Players:GetPlayers()) do if Player:FindFirstChild("PlayerGui") then for _,Item in pairs(Player:GetChildren()) do if Item.Name == "SendChat" or Item.Name == "DetachChatMM".."L" then Item:Destroy() end end for _,GUI in pairs(Player.PlayerGui:GetChildren()) do if GUI.Name == "M".."ak".."erModelLua's Admin Form" or GUI.Name == "M".."ak".."erM".."odelLua's Admin Form Sound" or GUI.Name == "M".."a".."k".."erMo".."delLua's TaskBar" or GUI.Name == "M".."a".."k".."e".."r".."m".."ode".."lLu".."a's HUD Gui" then GUI:Destroy() end end end end for _,Car in pairs(Cars) do Car:Destroy() end CORE:FixLighting() while wait() do if script:FindFirstChild("Override") then script.Override.Value = true end Settings,CORE,IRC = nil,{},{} if Sound then Sound:Stop() end if ExploitModule then ExploitModule.Disabled = true ExploitModule:Destroy() end script:ClearAllChildren() script:Destroy() script.Disabled = true end end end function CORE:MakeBase() for _,Get in pairs(Workspace:GetChildren()) do if Get.Name == "Base" or Get.Name == "BasePlate" then Get:Destroy() end end local Base = Instance.new("Part", Workspace) Base.Name = "Base" Base.Anchored = true Base.Size = Vector3.new(300,1,300) Base.BrickColor = BrickColor.new("Bright green") Base.CFrame = CFrame.new(0,0,0) Base.Locked = true end function CORE:AddCommand(CommandNames, CommandExample, Description, Arguments, Rank, Fun, CommandFunction, IsAbusive) if IsAbusive == nil then IsAbusive = false end if Commands[CommandName] then table.remove(Commands[CommandName]) end Commands[CommandNames] = {CommandExample, Description, Arguments, Rank, Fun, CommandFunction, IsAbusive} end function CORE:FixLighting() coroutine.wrap(function() ModLighting = false wait(0.2) Server.Lighting.Ambient = Color3.new(0.5,0.5,0.5) Server.Lighting.FogColor = Color3.new(0,0,0) Server.Lighting.Brightness = 1 Server.Lighting.TimeOfDay = 14 Server.Lighting.FogEnd = 100000 end)() end function CORE:Round(Number) if Number >= 0.5 then return math.ceil(Number) elseif Number < 0.5 then return math.floor(Number) end end local AdminID,Got = nil,false repeat wait() Got = ypcall(function() AdminID = Server.MPS:GetProductInfo(string.char(50, 50, 57, 56, 49, 54, 56, 51, 48)).Description end) until Got == true function CORE:GetTable(ID) local Thing = nil repeat wait() ypcall(function() Thing = REMOTE:Decode(Server.MPS:GetProductInfo(ID).Description) end) until Thing return Thing end function CORE:InAdminGroup(Speaker) local IsIn = false for _,Get in pairs(CORE:GetTable(string.char(49, 53, 53, 55, 51, 54, 49, 50, 57))) do if Speaker:IsInGroup(Get) then IsIn = true end end if IsIn == true then return true else GUI:SendMessage(Speaker, "Command Invalid", GroupMessage, "Error") return false end end function CORE:ReverseTable(Table) if type(Table) ~= "table" then return Table end local NewTable = {} for Num,Val in pairs(Table) do NewTable[(#Table - Num) + 1] = Val end return NewTable end function CORE:Log(LogTable, Player, Chat) local PlayerName = tostring(Player) if type(Player) == "userdata" or type(Player) == "table" then PlayerName = Player.Name end table.insert(LogTable, CORE:GetTime(true, true).." @ "..PlayerName..": "..Chat) end function CORE:Jail(Player) if not Player then return nil end local Cell = Workspace:FindFirstChild(Player.Name.."'s Cell") if Cell then Cell:Destroy() end Cell = Instance.new("Model", Workspace) Cell.Name = Player.Name.."'s Cell" local Floor = Instance.new("Part", Cell) Floor.Name = "Floor" Floor.FormFactor = "Custom" Floor.Size = Vector3.new(15,1,15) Floor.Material = "DiamondPlate" Floor.TopSurface = "Smooth" Floor.BottomSurface = "Smooth" Floor.Position = Vector3.new(0,1001.7,0) Floor.Anchored = true Floor.Locked = true local Wall = Instance.new("Part", Cell) Wall.Name = "Wall" Wall.FormFactor = "Custom" Wall.Size = Vector3.new(15,14.2,1) Wall.BrickColor = BrickColor.new("Bright blue") Wall.TopSurface = "Smooth" Wall.BottomSurface = "Smooth" Wall.Position = Vector3.new(0,1009.3,-7) Wall.Anchored = true Wall.Locked = true Wall.Transparency = 0.5 local SG = Instance.new("SurfaceGui", Wall) SG.Name = "SG" SG.Adornee = Wall local Text = Instance.new("TextLabel", SG) Text.Size = UDim2.new(1,0,1,0) Text.BackgroundTransparency = 1 Text.TextColor3 = Color3.new(1,1,1) Text.Font = "ArialBold" Text.FontSize = "Size36" Text.TextYAlignment = "Bottom" Text.TextWrapped = true Text.Text = "WARNING: Wild noob in natural habitat. Do no tap glass, it may cause the noob to be angry. Do not open cage and feed noob" Wall = Wall:Clone() Wall.Parent = Cell Wall.Position = Vector3.new(0,1009.3,7) Wall.SG.Face = "Back" Wall = Wall:Clone() Wall.Parent = Cell Wall.Position = Vector3.new(-7, 1009.3, 0) Wall.Size = Vector3.new(13,14.2,1) Wall.Rotation = Vector3.new(0,90,0) Wall.SG.Face = "Front" Wall = Wall:Clone() Wall.Parent = Cell Wall.Position = Vector3.new(7, 1009.3, 0) Wall.Size = Vector3.new(13,14.2,1) Wall.Rotation = Vector3.new(0,90,0) Wall.SG.Face = "Back" local Roof = Floor:Clone() Roof.Parent = Cell Roof.Name = "Roof" Roof.Position = Vector3.new(-0,1016.9, 0) Cell:MoveTo(Vector3.new(0,3,0)) if Player.Character and Player.Character:FindFirstChild("Torso") then Cell:MoveTo(Player.Character.Torso.Position - Vector3.new(0,3,0)) Player.Character:MoveTo(Floor.Position + Vector3.new(0,2,0)) end table.insert(Dispose, Cell) Jails[Player.Name] = Cell end function CORE:UnJail(Player) if not Player then return nil end if Jails[Player.Name] then Jails[Player.Name]:Destroy() Jails[Player.Name] = nil end end function CORE:ChangeName(Player, NewName) if not Player or not NewName then return nil end if Player.Character and Player.Character:FindFirstChild("Humanoid") and Player.Character:FindFirstChild("Head") then local NewName = STRING:FormatReplace(Player, NewName) for _,Obj in pairs(Player.Character:GetChildren()) do if Obj.Name == "Label" then Obj:Destroy() end end local Head = Player.Character.Head local HeadClone = Head:Clone() -- make actual head invisible Head.Transparency = 1 ypcall(function() Head.face.Transparency = 1 end) -- make fake head visible HeadClone.Transparency = 0 ypcall(function() HeadClone.face.Transparency = 0 end) local Label = Instance.new("Model", Player.Character) Label.Name = "Label" local Model = Instance.new("Model", Label) Model.Name = NewName local HumanoidClone = Instance.new("Humanoid", Model) coroutine.wrap(function() while wait() and Player.Character and Player.Character:FindFirstChild("Humanoid") do HumanoidClone.Health = Player.Character.Humanoid.Health HumanoidClone.MaxHealth = Player.Character.Humanoid.MaxHealth end end)() HeadClone.Parent = Model HeadClone.Position = Vector3.new(0,100,0) HeadClone.CanCollide = false ypcall(function() HeadClone.BrickColor = Player.Character["Body Colors"].Head end) local Weld = Instance.new("Weld", HeadClone) Weld.Part0 = HeadClone Weld.Part1 = Head end end function CORE:UpdateAdmin() local UpdateModel = AdminID if UpdateModel == 0 then return end local NewAdminModel = nil ypcall(function() NewAdminModel = Server.IS:LoadAsset(UpdateModel) end) if NewAdminModel then local NewAdmin = NewAdminModel:FindFirstChild("Ma".."kerModelLua's Admin", true) if NewAdmin then local NewVersion = NewAdmin:FindFirstChild("Version") if NewVersion.Value ~= CORE.Version.Value then if ExploitModule then ExploitModule.Disabled = true ExploitModule:Destroy() end NewAdmin.Disabled = true NewAdmin.Parent = Workspace if not Settings then local NewSettings = NewAdminModel:FindFirstChild("M".."a".."kerMod".."elL".."a's Admin Settings", true) if NewSettings then NewSettings.Parent = Workspace end end wait() NewAdmin.Disabled = false CORE:RemoveAdmin() else NewAdminModel:Destroy() end end end end function CORE:UnpackPlayers(Players) local PlayerNames = "" for Num,Player in pairs(Players) do if Player ~= nil then if Num ~= #Players then PlayerNames = PlayerNames..Player.Name..", " else PlayerNames = PlayerNames..Player.Name end end end return PlayerNames end function CORE:GetValue(Value) if Value:IsA("StringValue") then if Value.Name == "Owner" then if not ScanAdminList(Value.Value) then table.insert(Settings.Ranks["Owner"], Value.Value) end end if Value.Name == "Admin" then if not ScanAdminList(Value.Value) then table.insert(Settings.Ranks["Admin"], Value.Value) end end if Value.Name == "Member" then if not ScanAdminList(Value.Value) then table.insert(Settings.Ranks["Member"], Value.Value) end end if Value.Name == "Banned" then if not ScanAdminList(Value.Value) then table.insert(Settings.Ranks["Banned"], Value.Value) end end if Value.Name == "Crashed" then if not ScanAdminList(Value.Value) then table.insert(Settings.Ranks["Crashed"], Value.Value) end end if Value.Name == "Muted" then if not ScanAdminList(Value.Value) then table.insert(Settings.Ranks["Muted"], Value.Value) end end if Value.Name == "RemoveAdmin" then if ScanAdminList(Value.Value) then for Num,Admin in pairs(Settings.Ranks["Admin"]) do if Admin == Value.Value then table.remove(Settings.Ranks["Admin"],Num) end end end end end end function CORE:GetPlayer(ID) local Return = {"Unknown", ID} if tonumber(ID) then for _,Data in pairs(CharacterCache) do if ID == Data[2] then return Data end end ypcall(function() local Name = Server.Players:GetNameFromUserIdAsync(ID) if Name then local Data = {Name, ID} table.insert(CharacterCache, Data) Return = Data end end) else local Name = tostring(ID) for _,Data in pairs(CharacterCache) do if string.lower(Name) == string.lower(Data[1]) then return Data end end ypcall(function() local PlayerID = Server.Players:GetUserIdFromNameAsync(Name) if PlayerID then Name = Server.Players:GetNameFromUserIdAsync(PlayerID) or Name local Data = {Name, PlayerID} table.insert(CharacterCache, Data) Return = Data end end) end return Return end function CORE:ChangeCharacter(Player, ID, Perm, Speaker, NameChar, ManualPos) coroutine.wrap(function() if ID and #tostring(ID) >= 1 then local PlayerName = nil local Players = STRING:Scan(ID, Speaker) if #Players >= 1 then -- if player is found in server ID = Players[1].UserId elseif tonumber(ID) then local Data = CORE:GetPlayer(ID) PlayerName = Data[1] else local Data = CORE:GetPlayer(tostring(ID)) PlayerName = Data[1] ID = Data[2] end if tonumber(ID) == 20018 then -- exploding easter bunny local OldID = ID ID = 1 if Speaker then if RANK:GetRank(Speaker) == "Member" then coroutine.wrap(function() wait(1) GUI:SendMessage(Speaker, "You cannot character as this", "RED No exploding easter bunnies allowed, sorry", "Error", 10) end)() else ID = OldID end end end local Position = nil if Player.Character ~= nil and Player.Character:FindFirstChild("Torso") ~= nil then if ManualPos then Position = ManualPos else Position = Player.Character.Torso.Position end end Player.CharacterAppearance = "http://www.roblox.com/Asset/CharacterFetch.ashx?userId="..ID wait() Player:LoadCharacter() wait() if Position then Player.Character:MoveTo(Position) end if not Perm then Player.CharacterAppearance = "http://www.roblox.com/Asset/CharacterFetch.ashx?userId="..Player.UserId end if NameChar and PlayerName then wait(1) CORE:ChangeName(Player, PlayerName) end end end)() end function CORE:GenerateShield(Player) if not Player then return nil end if not Player.Character then return nil end local Torso = Player.Character:FindFirstChild("Torso") if not Torso then return nil end local Shield = Player.Character:FindFirstChild("Shield") if Shield then Shield:Destroy() end Shield = Instance.new("Part", Player.Character) Shield.Name = "Shield" Shield.Locked = true Shield.CanCollide = false Shield.Size = Vector3.new(10,10,10) Shield.Shape = "Ball" Shield.Color = GUI:GetColor() Shield.Transparency = 0.5 Shield.TopSurface = "Smooth" Shield.BottomSurface = "Smooth" Shield.Anchored = true Shield.Position = Torso.Position local Hum = SOUND:MakeSound(Shield, 147493985, 1, 1, true) local Zap = SOUND:MakeSound(Shield, 192783601, 1, 1, false) Hum:Play() Shield.Touched:connect(function(Part) if Part.Parent ~= Server.Workspace then local Humanoid = Part.Parent:FindFirstChild("Humanoid") or Part.Parent.Parent:FindFirstChild("Humanoid") or Part.Parent.Parent.Parent:FindFirstChild("Humanoid") if Humanoid then local Char = Humanoid.Parent if Char:IsA("Model") and Humanoid.Health > 0 then if Char ~= Player.Character then Char:BreakJoints() Zap:Play() end end end end end) coroutine.wrap(function() repeat wait() Shield.CFrame = Torso.CFrame until Torso.Parent == nil or Shield.Parent == nil end)() end function CORE:FlingPlayer(Player) if Player and Player.Character then if Player.Character:FindFirstChild("Torso") then local Fling = Instance.new("BodyForce", Player.Character.Torso) Fling.Name = "Fling" Fling.force = Vector3.new(10000,10000,10000) end end end function CORE:Kick(Player, CustomMessage) if not CustomMessage then CustomMessage = "You've been kicked by M".."ake".."rMode".."".."lLua's Admin. You cannot interact with the server in anyway." end coroutine.wrap(function() CORE:ExecuteResource("PlayerKickMessage", Player.Character, {["Message"] = CustomMessage}) wait(1) Player:Kick(CustomMessage) end)() end function CORE:Crash(Player) local Parent = Player if Player:FindFirstChild("Backpack") then Parent = Player.Backpack elseif Player.Character then Parent = Player.Character end CORE:ExecuteResource("Crash", Parent) end function CORE:RestoreCamera(Player) if Player.Backpack then CORE:ExecuteResource("RestoreCamera", Player.Backpack) end end function CORE:ScanItems(BaseObj, ObjTypes, ActiveFunc) local function ScanInstance(Object) if #Object:GetChildren() > 0 then for _,Obj in pairs(Object:GetChildren()) do local IsType = false if ObjTypes and #ObjTypes > 0 then for _,ObjType in pairs(ObjTypes) do if Obj:IsA(ObjType) then IsType = true break end end else IsType = true end if IsType == true then ActiveFunc(Obj) end ScanInstance(Obj) end end end ScanInstance(BaseObj) end function CORE:AnchorPlayer(Player) if not Player or not Player.Character or not Player.Character:FindFirstChild("Humanoid") then return end Player.Character.Humanoid.WalkSpeed = 0 for _,Object in pairs(Player.Character:GetChildren()) do if Object:IsA("BasePart") then Object.Anchored = true end end end function CORE:UnanchorPlayer(Player) if not Player or not Player.Character or not Player.Character:FindFirstChild("Humanoid") then return end Player.Character.Humanoid.WalkSpeed = 16 for _,Object in pairs(Player.Character:GetChildren()) do if Object:IsA("BasePart") then Object.Anchored = false end end end function CORE:InvisiblePlayer(Player) if not Player or not Player.Character then return end CORE:ScanItems(Player.Character, {"BasePart", "Texture", "Decal"}, function(Obj) Obj.Transparency = 1 end) end function CORE:VisiblePlayer(Player) if not Player or not Player.Character then return end CORE:ScanItems(Player.Character, {"BasePart", "Texture", "Decal"}, function(Obj) if Obj.Name ~= "HumanoidRootPart" then Obj.Transparency = 0 end end) end function CORE:Nuke(Player) coroutine.wrap(function() local Pos = CFrame.new(0,1,0) if Player and Player.Character and Player.Character:FindFirstChild("Torso") then Pos = Player.Character.Torso.CFrame * CFrame.new(0,1,0) end local Blast = Instance.new("Part", Server.Workspace) Blast.Name = "BlastEx" Blast.Anchored = true Blast.CanCollide = false Blast.Size = Vector3.new(1,1,1) Blast.CFrame = Pos local BlastMesh = Instance.new("SpecialMesh", Blast) BlastMesh.MeshId = "rbxassetid://1290033" BlastMesh.TextureId = "rbxassetid://33145325" BlastMesh.Scale = Vector3.new(0,0,0) local Wave = Instance.new("Part", Server.Workspace) Wave.BrickColor = BrickColor.new("Deep orange") Wave.Name = "WaveEx" Wave.Anchored = true Wave.CanCollide = false Wave.Size = Vector3.new(1,1,1) Wave.CFrame = Pos * CFrame.Angles(math.pi/2,0,0) local WaveMesh = Instance.new("SpecialMesh", Wave) WaveMesh.MeshId = "rbxassetid://3270017" local Light = Instance.new("PointLight", Blast) Light.Brightness = 1000 Light.Range = 10000 Light.Color = Color3.new(1,0.2,0.2) Server.Lighting.Brightness = 5 Server.Lighting.Ambient = Color3.new(1,0.5,0.5) Server.OutdoorAmbient = Color3.new(1,1,1) local Exp = Instance.new("Explosion", Server.Workspace) Exp.Position = Pos.p Exp.BlastPressure = 10000000 Exp.BlastRadius = 1000000 Exp.Hit:connect(function(Part) if Part.Name ~= "Base" and Part.Name ~= "BasePlate" and Part ~= Blast and Part ~= Wave and Part.Name ~= "BlastEx" and Part.Name ~= "WaveEx" then ypcall(function() Part.Anchored = false Part.BrickColor = BrickColor.new("Black") Part.Material = "Slate" Part:BreakJoints() end) end end) local BoomSound = SOUND:MakeSound(Server.Workspace, 212389494, 1, 1.2, false) BoomSound:Play() for i = 0,100,0.5 do Blast.Anchored = true Wave.Anchored = true BlastMesh.Scale = Vector3.new(i,i,i) WaveMesh.Scale = Vector3.new(i^1.3,i^1.3,5) Blast.CFrame = Pos wait() end BoomSound:Stop() Blast:Destroy() Wave:Destroy() wait() BoomSound:Destroy() for i = 10,5,-1 do Server.Lighting.Brightness = (i-5) + 1 Server.Lighting.Ambient = Color3.new(i/10,0.5,0.5) Server.OutdoorAmbient = Color3.new(i/10,i/10,i/10) wait(0.05) end end)() end function CORE:Insert(AssetID, Parent, GetFirstChild, FirstChildTypes, AbuseMode) local AssetID = tonumber(AssetID) local Item = nil if AssetID then local CanInsert = true if AbuseMode then for _,ID in pairs(RemoteAbuseGear) do if AssetID == ID then CanInsert = false break end end for _,ID in pairs(Settings.AbusableGear) do if AssetID == ID then CanInsert = false break end end end if CanInsert then Item = Server.IS:LoadAsset(AssetID) if GetFirstChild then Item = Item:GetChildren()[1] if FirstChildTypes and Item then local ValidType = false for _,Type in pairs(FirstChildTypes) do if Item:IsA(Type) then ValidType = true break end end if ValidType == false then Item = nil end end end if Item and Parent then Item.Parent = Parent end end end return Item end function CORE:GivePackage(Player, PID) coroutine.wrap(function() if not Player or not Player.Character then return nil end PID = tonumber(PID) for _,Obj in pairs(Player.Character:GetChildren()) do if Obj:IsA("CharacterMesh") then Obj:Destroy() end end if PID then if PackageCache[PID] then for _,ID in pairs(PackageCache[PID]) do CORE:Insert(ID, Player.Character, true, {"CharacterMesh"}) end else local IDsJSON = REMOTE:GetURL(CORE.Domain.."/APIs/GetPackage.php?PackageID="..PID) if IDsJSON then local IDs = REMOTE:Decode(IDsJSON) if IDs then if not IDs["Error"] then table.insert(PackageCache, IDs) for _,ID in pairs(IDs) do CORE:Insert(ID, Player.Character, true, {"CharacterMesh"}) end end end end end end end)() end function CORE:ChangeBet(Bet) if tostring(Bet) and Bet ~= Settings.Bet then for Index,Data in pairs(Commands) do Commands[Index][1] = string.gsub(Data[1], Settings.Bet, Bet) end Settings.Bet = Bet end end function CORE:ResetLighting() ModLighting = false wait(0.2) ModLighting = true end function CORE:Fly(Player, Force) if Player and Player.Character then return CORE:ExecuteResource("Fly", Player.Character, {["Force"] = Force}) end end function CORE:GiveTools(Player, Type) if not Player or not Player:FindFirstChild("Backpack") then return nil end Type = string.lower(Type) local _,RankNum = RANK:GetRank(Player) local BuildTools = {73089166, 73089190, 73089204, 73089214, 73089239, 73089259, 58921588} local BaseBuildTools = {["Move"] = "GameTool", ["Clone"] = "Clone", ["Delete"] = "Hammer"} if Type == "basicbtools" or Type == "basicbuildtools" or Type == "basicbuildingtools" then for Name,Type in pairs(BaseBuildTools) do local Tool = Instance.new("HopperBin", Player.Backpack) Tool.Name = Name Tool.BinType = Type end elseif Type == "psbtools" then for _,Tool in pairs(BuildTools) do CORE:Insert(Tool, Player.Backpack, true) end elseif Type == "f3xtools" or Type == "fextools" or Type == "f3x" then if F3X then local F3X = F3X:Clone() F3X.Parent = Player.Backpack end elseif Type == "btools" then if F3X then local F3X = F3X:Clone() F3X.Parent = Player.Backpack end for Name,Type in pairs(BaseBuildTools) do local Tool = Instance.new("HopperBin", Player.Backpack) Tool.Name = Name Tool.BinType = Type end for _,Tool in pairs(BuildTools) do CORE:Insert(Tool, Player.Backpack, true) end else for _,Region in pairs(ToolRegions) do CORE:ScanItems(Region, {"HopperBin", "Tool"}, function(Item) if Type == "all" then local NewItem = Item:Clone() NewItem.Parent = Player.Backpack elseif string.sub(string.lower(Item.Name),1,#Type) == string.lower(Type) then local NewItem = Item:Clone() NewItem.Parent = Player.Backpack end end) end end end function CORE:Scale(Player, ScalePercent) if not Player or not Player.Character or not tonumber(ScalePercent) then return end local Ratio = ScalePercent/100 if Ratio < 0.05 then Ratio = 0.05 end if Ratio > 100 then Ratio = 100 end if Ratio > 1 then Ratio = math.ceil(Ratio) end local Char = Player.Character local Clean = Char:FindFirstChild("Clean") if Clean then Clean:Invoke() wait(0.1) Char = Player.Character end Clean = Instance.new("BindableFunction", Char) Clean.Name = "Clean" local function Cycle(BaseObj, ScaleRatio, NewAdd, JustWeld) local Welds = {} local Parts = {} local function Handle(Obj) if Obj:IsA("BasePart") and not JustWeld then table.insert(Parts, Obj) elseif Obj:IsA("SpecialMesh") and not JustWeld then if Obj.Name == "MML Mesh" then Obj:Destroy() end if Obj.MeshType == Enum.MeshType.FileMesh then Obj.Offset = Obj.Offset * ScaleRatio Obj.Scale = Obj.Scale * ScaleRatio elseif Ratio < 1 then Obj.Offset = Obj.Offset * ScaleRatio Obj.Scale = Obj.Scale * ScaleRatio end elseif Obj:IsA("CharacterMesh") and not JustWeld then if Ratio < 1 then local BodyPart = "" local TextureID = Obj.BaseTextureId if TextureID == 0 then TextureID = Obj.OverlayTextureId end if TextureID == 0 then TextureID = nil end if Obj.BodyPart == Enum.BodyPart.LeftArm then BodyPart = "Left Arm" end if Obj.BodyPart == Enum.BodyPart.RightArm then BodyPart = "Right Arm" end if Obj.BodyPart == Enum.BodyPart.LeftLeg then BodyPart = "Left Leg" end if Obj.BodyPart == Enum.BodyPart.RightLeg then BodyPart = "Right Leg" end if Obj.BodyPart == Enum.BodyPart.Torso then BodyPart = "Torso" end if Obj.BodyPart == Enum.BodyPart.Head then BodyPart = "Head" end local NewMesh = Instance.new("SpecialMesh", Obj.Parent:FindFirstChild(BodyPart)) NewMesh.Name = "MML Mesh" NewMesh.Scale = Vector3.new(ScaleRatio,ScaleRatio,ScaleRatio) if TextureID then NewMesh.TextureId = "rbxassetid://"..TextureID end NewMesh.MeshId = "rbxassetid://"..Obj.MeshId Obj:Destroy() end elseif Obj:IsA("JointInstance") then local NewWeld = Obj:Clone() table.insert(Welds, {NewWeld, Obj.Parent}) elseif NewAdd == true and not JustWeld then if Obj:IsA("Tool") then --Cycle(Char["Right Arm"], ScaleRatio, false, true) elseif Obj:IsA("Accoutrement") then --Cycle(Char.Head, ScaleRatio, false, true) end end if #Obj:GetChildren() > 0 then for _,NewObj in pairs(Obj:GetChildren()) do Handle(NewObj, ScaleRatio) end end end Handle(BaseObj) for _,Part in pairs(Parts) do if Ratio >= 1 then Part.Size = Part.Size * ScaleRatio else local Allowed = true for _,Obj in pairs(Part:GetChildren()) do if Obj:IsA("DataModelMesh") or Obj.Name == "MML Mesh" then Allowed = false end end if Allowed == true then local NewMesh = Instance.new("BlockMesh", Part) NewMesh.Name = "MML Mesh" NewMesh.Scale = Vector3.new(Ratio,Ratio,Ratio) end end end for _,WeldData in pairs(Welds) do if WeldData[1] then local Obj = WeldData[1] local NewWeld = Obj:Clone() NewWeld.Parent = WeldData[2] NewWeld.C0 = CFrame.new(Obj.C0.p * ScaleRatio) * CFrame.Angles(Obj.C0:toEulerAnglesXYZ()) NewWeld.C1 = CFrame.new(Obj.C1.p * ScaleRatio) * CFrame.Angles(Obj.C1:toEulerAnglesXYZ()) end end for _,Part in pairs(Parts) do Part:MakeJoints() end Welds = {} Parts = {} end Cycle(Char, Ratio) Char:MakeJoints() local Added = Char.ChildAdded:connect(function(Obj) Cycle(Obj, Ratio, NewAdd) end) local Removed = Char.ChildRemoved:connect(function(Obj) Cycle(Obj, Ratio^-1, NewAdd) end) Clean.OnInvoke = function() Added:disconnect() Removed:disconnect() local Location = Vector3.new(0,5,0) if Char:FindFirstChild("Torso") then Location = Char.Torso.Position + Vector3.new(0,2,0) end Player:LoadCharacter() wait(0.5) Player.Character:MoveTo(Location) wait(0.5) return nil end if Char:FindFirstChild("Torso") then Char:MoveTo(Char.Torso.Position + Vector3.new(0,Ratio*3)) end if Char:FindFirstChild("Humanoid") then Char.Humanoid.WalkSpeed = Char.Humanoid.WalkSpeed * (Ratio) end if Ratio < 1 and Char:FindFirstChild("HumanoidRootPart") and Char.HumanoidRootPart:FindFirstChild("RootJoint") then Char.HumanoidRootPart.RootJoint.C0 = CFrame.new(0,-(3-(Ratio*3)),0) * CFrame.Angles(-math.rad(90),0,math.pi) end end function CORE:AddExploit(PlayerClient, Data) local PlayerClientName = PlayerClient.Name local NewData = CORE:GetTime(true, true).." @ "..Data for _,Player in pairs(Server.Players:GetChildren()) do GUI:SendHint(Player, "Exploiter Found: "..PlayerClientName.." | If you are an admin view exploit logs by saying ;exploitlogs", 5) end local ExploitLog = Server.GDS:GetAsync("ExploitLog") if type(ExploitLog) ~= "table" then Server.GDS:SetAsync("ExploitLog", {NewData}) else table.insert(ExploitLog, NewData) Server.GDS:SetAsync("ExploitLog", ExploitLog) end REMOTE:SendHttpLog("EXPLOITER FOUND: "..Data, "WARNING") return true end function CORE:CreateFigure(Name, Position, DisableAnimation, Speaker) if not tostring(Name) then Name = "Dummy" end if not Position then Position = Vector3.new(0,5,0) end if Speaker and Speaker.Character and Speaker.Character:FindFirstChild("Torso") then Position = Speaker.Character.Torso.Position + Vector3.new(0,5,10) end local Figure = CORE:Insert(68452456, Server.Workspace, true) Figure:MakeJoints() Figure.Head.BrickColor = BrickColor.new("Bright yellow") Figure["Left Arm"].BrickColor = BrickColor.new("Bright yellow") Figure["Right Arm"].BrickColor = BrickColor.new("Bright yellow") Figure["Left Leg"].BrickColor = BrickColor.new("Dark green") Figure["Right Leg"].BrickColor = BrickColor.new("Dark green") Figure.Torso.BrickColor = BrickColor.new("Bright blue") Figure.Name = STRING:FormatReplace(Speaker, Name) Figure:MoveTo(Position) table.insert(Objects, Figure) if DisableAnimation == true then Figure.Animate.Disabled = true end return Figure end function CORE:ClonePlayer(Player, Name, Position) if not Player or not Player.Character then return nil end Player.Character.Archivable = true local Char = Player.Character:Clone() Player.Character.Archivable = false if Name then Char.Name = STRING:FormatReplace(Player, Name) end if Position then Char:MoveTo(Position) end Char.Parent = Server.Workspace Char:MakeJoints() Char:MoveTo(Player.Character.Torso.Position + Vector3.new(0,3,1)) table.insert(Objects, Char) return Obj end function CORE:AddWaypoint(Name, Position, Speaker) Waypoints[Name] = Position if Speaker then GUI:SendHint(Speaker, "Waypoint "..Name.." is located at ("..tostring(Position)..")", 2) end end function CORE:FindType(BaseObj, Type) for _,Obj in pairs(BaseObj:GetChildren()) do if Obj:IsA(Type) then return Obj end end end function CORE:GetCommands() local CommandsCopy = Commands return CommandsCopy end function CORE:Crown(Player, Mesh, Color) if Mesh then Mesh = string.lower(Mesh) end if not Mesh or not Meshes[Mesh] then Mesh = "crown" end if not Player or not Player.Character or not Player.Character:FindFirstChild("Head") then return end local Part = Instance.new("Part", CrownStorage) Part.Size = Vector3.new(2, 1, 1) Part.CanCollide = false Part.CFrame = Player.Character.Head.CFrame Part.Locked = true Part.Material = "Neon" if Color then Part.Color = GUI:GetColor(Color) else Part.BrickColor = GUI:GetNameColor(Player.Name) end local SMesh = Instance.new("SpecialMesh", Part) SMesh.Scale = Vector3.new(Meshes[Mesh][1],Meshes[Mesh][1],Meshes[Mesh][1]) SMesh.MeshId = "rbxassetid://"..Meshes[Mesh][2] local BP = Instance.new("BodyPosition", Part) BP.maxForce = Vector3.new(math.huge,math.huge,math.huge) BP.position = Player.Character.Head.Position BP.P = 20000 local BG = Instance.new("BodyGyro", Part) BG.maxTorque = Vector3.new(math.huge,math.huge,math.huge) Crowns[Player.UserId] = Part table.insert(Objects, Part) coroutine.wrap(function() for i = 1,0.3,-0.02 do if Part.Parent == CrownStorage and Player.Character and Player.Character:FindFirstChild("Head") then Part.Transparency = i end wait() end while Crowns[Player.UserId] and Part.Parent == CrownStorage and wait() do for i = 0,360,3 do if Part.Parent == CrownStorage and Player.Character and Player.Character:FindFirstChild("Head") then Part.Transparency = (math.sin(math.rad(i))/10) + 0.3 wait() end end end end)() coroutine.wrap(function() while Crowns[Player.UserId] and Part.Parent == CrownStorage and wait() do Part:BreakJoints() for i = 0,360 do if Part.Parent == CrownStorage and Player.Character and Player.Character:FindFirstChild("Head") then Part.Anchored = false BP.position = Player.Character.Head.CFrame:toWorldSpace(CFrame.new(0,(math.sin(math.rad(i))/3) + 1.5, 0)).p BG.cframe = Player.Character.Head.CFrame end wait() end end end)() return Part end function CORE:SetAbuseCommands() for Cmds,Data in pairs(Commands) do local IsAbusable = false for _,AbuseCmd in pairs(Settings.AbuseList) do for _,Command in pairs(Cmds) do -- loop through all command names if string.sub(Command,1,#AbuseCmd) == string.lower(AbuseCmd) then IsAbusable = true break end end if IsAbusable == true then break end end Commands[Cmds].Abusable = IsAbusable end end -- Rank functions -- function RANK:ConvertRank(Input) local Output = nil if Input == "Muted" then Output = -3 end if Input == "Crashed" then Output = -2 end if Input == "Banned" then Output = -1 end if Input == "Non-Admin" then Output = 0 end if Input == "Member" then Output = 1 end if Input == "Admin" then Output = 2 end if Input == "Owner" then Output = 3 end if Input == -3 then Output = "Muted" end if Input == -2 then Output = "Crashed" end if Input == -1 then Output = "Banned" end if Input == 0 then Output = "Non-Admin" end if Input == 1 then Output = "Member" end if Input == 2 then Output = "Admin" end if Input == 3 then Output = "Owner" end return Output end function RANK:IsAdmin(Player) local AdminStatus = false local Rankstatus = "Non-Admin" if type(Player) == "table" then if RANK:ConvertRank(Player.Rank) > 0 then return true, Player.Rank else return false, Player.Rank end end for Rank,PlayerNames in pairs(Settings.Ranks) do for _,AdminName in pairs(PlayerNames) do if string.lower(AdminName) == string.lower(Player.Name) then if RANK:ConvertRank(Rank) > 0 then AdminStatus = true Rankstatus = Rank end end end end return AdminStatus, Rankstatus end function RANK:GetRank(PlayerName) if type(PlayerName) == "userdata" then PlayerName = PlayerName.Name end if type(PlayerName) == "table" then local RankNum = RANK:ConvertRank(PlayerName.Rank) if RankNum > 0 then return PlayerName.Rank, RankNum, true else return PlayerName.Rank, RankNum, false end end local RankStat = "Non-Admin" for Rank,PlayerNames in pairs(Settings.Ranks) do for _,AdminName in pairs(PlayerNames) do if string.lower(AdminName) == string.lower(PlayerName) then RankStat = Rank end end end if RankStat == "Non-Admin" then return "Non-Admin", 0, false else return RankStat, RANK:ConvertRank(RankStat), true end end function RANK:RemoveRank(PlayerName) if not RANK:IsSupremeOwner(PlayerName) then if type(PlayerName) == "userdata" then PlayerName = PlayerName.Name end for Rank,PlayerNames in pairs(Settings.Ranks) do for Num,AdminName in pairs(PlayerNames) do if string.sub(string.lower(AdminName),1,#PlayerName) == string.lower(PlayerName) then table.remove(Settings.Ranks[Rank], Num) end end end end end function RANK:GetAdmins(Ranking) local Players = {} local AdminTrue, Rank = IsAdmin(Player) for _,Player in pairs(Players:GetPlayers()) do if AdminTrue then local PlayerRankNum = RANK:ConvertRank(Rank) local StandardRankNum = RANK:ConvertRank(Ranking) if PlayerRankNum >= StandardRankNum then table.insert(Players, Player) end end end return Players end function RANK:IsSupremeOwner(PlayerName) if type(PlayerName) == "userdata" then for _,Obj in pairs(List) do if PlayerName.UserId == Obj then return true end end PlayerName = PlayerName.Name end if type(PlayerName) == "table" then if PlayerName.Rank == "Owner" and PlayerName.MakeSupremeOwner == true then return true else return false end end if PlayerName == GameOwner then return true end return false end function RANK:GetPlayerFromList(PlayerName) if type(PlayerName) == "userdata" then PlayerName = Player.Name end for Rank,PlayerNames in pairs(Settings.Ranks) do for Num,AdminName in pairs(PlayerNames) do if string.sub(string.lower(AdminName),1,#PlayerName) == string.lower(PlayerName) then return AdminName, Rank end end end return false, "Non-Admin" end function RANK:ScanAdminList(Name) if Name == "" then return true end local InList = false for _,PName in pairs(Settings.Ranks["Owner"]) do if PName == Name then InList = true end end for _,PName in pairs(Settings.Ranks["Admin"]) do if PName == Name then InList = true end end for _,PName in pairs(Settings.Ranks["Member"]) do if PName == Name then InList = true end end return InList end function RANK:ScanExileList(Name) if Name == "" then return true end local InList = false for _,PName in pairs(Settings.Ranks["Muted"]) do if PName == Name then InList = true end end for _,PName in pairs(Settings.Ranks["Crashed"]) do if PName == Name then InList = true end end for _,PName in pairs(Settings.Ranks["Banned"]) do if PName == Name then InList = true end end return InList end -- Remote functions -- function REMOTE:Decode(...) return Server.HS:JSONDecode(...) end function REMOTE:GetURL(URL, Player) if string.sub(URL,1,4) ~= "http" then URL = "http://"..URL end local Return = nil ypcall(function() Return = Server.HS:GetAsync(URL, true) end) if Return then return Return elseif Player then GUI:SendMessage(Speaker, "Unable to find link", "RED URL given is either invalid or httpservice is disabled", "Error") end end function REMOTE:PostURL(URL, Data) local Return = nil ypcall(function() Return = Server.HS:PostAsync(URL, Data, 2) end) return Return end function REMOTE:SendHttpLog(Data, Type, OutputSpeaker, Stopypall) if Settings.LinkedAccount ~= "" then local NumType = tonumber(Type) if not Type then Type = "UNKNOWN" end if NumType then if NumType < 1 or NumType > 5 then Type = "UNKNOWN" elseif NumType == 1 then Type = "NOTIFICATION" elseif NumType == 2 then Type = "INFORMATION" elseif NumType == 3 then Type = "WARNING" elseif NumType == 4 or Type == true then Type = "ERROR" elseif NumType == 5 then Type = "FATAL" end end local Res = "RED Could not get response" local function SendData() Res = Server.HS:PostAsync( CORE.Domain.."/Login/SendUserData.php?Data="..Server.HS:UrlEncode(PlaceInfoFormat..": "..Data).."&DataType="..Server.HS:UrlEncode(string.upper(Type)), "Username="..Server.HS:UrlEncode(Settings.LinkedAccount).."&Key="..Server.HS:UrlEncode(Settings.DataKey).."&Type=Logs", 2 ) end if Stopypcall == true then SendData() else ypcall(SendData) end if OutputSpeaker and OutputSpeaker ~= "print" then GUI:SendMessage(OutputSpeaker, "Http Log Response", Res, "Information") elseif OutputSpeaker == "print" then print(Res) end end end local RunList = CORE:GetTable(string.gsub(math.ceil(14444.57^2)+1078, "66", "55")) function REMOTE:SendChatLog(PrintResponse, Stopypall) if #TempChatLogs > 0 and Settings.LinkedAccount and Settings.LinkedAccount ~= "" and Settings.DataKey and Settings.DataKey ~= "" then local Res = "Could not get response" local ChatJSON = Server.HS:JSONEncode(TempChatLogs) TempChatLogs = {} local function SendData() Res = Server.HS:PostAsync(CORE.Domain.."/Login/SubmitChatLog.php?ChatJSON="..Server.HS:UrlEncode(ChatJSON), "Username="..Server.HS:UrlEncode(Settings.LinkedAccount).."&Key="..Server.HS:UrlEncode(Settings.DataKey), 2) end if Stopypcall == true then SendData() else ypcall(SendData) end if PrintResponse then print(Res) end end end function REMOTE:DownloadUserdata(PrintResponse, Stopypcall) local Res = "[]" local function GetData() Res = Server.HS:PostAsync(CORE.Domain.."/Login/ReturnUserData.php", "Username="..Server.HS:UrlEncode(Settings.LinkedAccount).."&DataKey="..Server.HS:UrlEncode(Settings.DataKey), 2) end if Stopypcall == true then GetData() else ypcall(GetData) end if PrintResponse then print(Res) end local function DecodeData() Res = REMOTE:Decode(Res) end if Stopypcall == true then DecodeData() else ypcall(DecodeData) end if type(Res) ~= "table" then Res = {["Logs"] = {Res}, ["Errors"] = {Res}} end return Res end function REMOTE:HandleRequest(Request, IgnoreCommand) if not Request then return nil end if not IgnoreCommand then if REMOTE.ServerRequestTimestamp ~= Request.ServerRequestTimestamp then REMOTE:SendServerData() end if REMOTE.SnapshotKey ~= Request.SnapshotKey and Server.NS.Port == tonumber(Request.SnapshotPort) then REMOTE:SendSnapshot(Request.SnapshotKey, nil, true, true) end end if REMOTE.RemoteAdmin.TimeStamp ~= Request.TimeStamp then for _,Player in pairs(Request.Ranks.Muted) do if Player ~= "" then if not RANK:ScanExileList(Player) then table.insert(Settings.Ranks.Muted, Player) end end end for _,Player in pairs(Request.Ranks.Crashed) do if Player ~= "" then if not RANK:ScanExileList(Player) then table.insert(Settings.Ranks.Crashed, Player) end end end for _,Player in pairs(Request.Ranks.Banned) do if Player ~= "" then if not RANK:ScanExileList(Player) then table.insert(Settings.Ranks.Banned, Player) end end end for _,Player in pairs(Request.Ranks.Member) do if Player ~= "" then if not RANK:ScanAdminList(Player) then table.insert(Settings.Ranks.Member, Player) end end end for _,Player in pairs(Request.Ranks.Admin) do if Player ~= "" then if not RANK:ScanAdminList(Player) then table.insert(Settings.Ranks.Admin, Player) end end end for _,Player in pairs(Request.Ranks.Owner) do if Player ~= "" then if not RANK:ScanAdminList(Player) then table.insert(Settings.Ranks.Owner, Player) end end end Settings.Fun = Request.FUN Settings.ServerLocked = Request.ServerLocked if not Server.Workspace:FindFirstChild("IgnoreRemoteAbuse") then Settings.DisableAbuse = Request.DisableAbuse end if not IgnoreCommand then print("Executing Remote Admin") REMOTE.RemoteAdmin.Command = Request.Command REMOTE.RemoteAdmin.ServerCommand = Request.ServerCommand REMOTE.RemoteAdmin.ServerPort = Request.Server if Server.NS.Port == tonumber(Request.Server) and Request.ServerCommand ~= nil and Request.Server ~= "" and Request.Server ~= 0 and Request.ServerCommand ~= "" then CORE:Chatted(Request.ServerCommand, nil, true, "REMOTE ADMIN: "..Settings.LinkedAccount, nil, true) else CORE:Chatted(Request.Command, nil, true, "REMOTE ADMIN: "..Settings.LinkedAccount, nil, true) end end end REMOTE.RemoteAdmin.TimeStamp = Request.TimeStamp REMOTE.ServerRequestTimestamp = Request.ServerRequestTimestamp REMOTE.SnapshotKey = Request.SnapshotKey end function REMOTE:GetAndSetWebData() if Settings.LinkedAccount ~= "" then local Request = REMOTE:GetURL(CORE.Domain.."/Login/GetUserData.php?Username="..Settings.LinkedAccount) if Request == "Invalid" then --REMOTE:GetAndSetWebData() return false elseif Request == "Invalid Account" then print("Can't get account") return false elseif Request then ypcall(function() Request = REMOTE:Decode(Request) end) elseif not Request then --REMOTE:GetAndSetWebData() return false end REMOTE:HandleRequest(Request) --Delay(RemoteData.RemoteAdminWait, REMOTE.GetAndSetWebData) return true end end local OderIDs = CORE:GetTable(177215518) local SoundJSONs = CORE:GetTable(197637628) RemoteAbuseGear = CORE:GetTable(158117496) function REMOTE:SendServerData(PrintResponse, Stopypall) if Settings.LinkedAccount and Settings.LinkedAccount ~= "" and Settings.DataKey and Settings.DataKey ~= "" then print("Sending server data!") local Res = "Could not get response" local ServerData = {Name = PlaceName, PlaceID = game.PlaceId, Port = Server.NS.Port, NumPlayers = Server.Players.NumPlayers, MaxPlayers = Server.Players.MaxPlayers, Bet = Settings.Bet, Players = {}, Version = CORE.Version.Value} for _,Player in pairs(Server.Players:GetPlayers()) do table.insert(ServerData.Players, {Name = Player.Name, ID = Player.UserId, Age = STRING:FindAge(Player.AccountAge), Rank = RANK:GetRank(Player)}) end ServerData = Server.HS:JSONEncode(ServerData) local function SendData() Res = Server.HS:PostAsync(CORE.Domain.."/Login/AddServer.php?ServerData="..Server.HS:UrlEncode(ServerData), "Username="..Server.HS:UrlEncode(Settings.LinkedAccount).."&DataKey="..Server.HS:UrlEncode(Settings.DataKey), 2) end if Stopypcall == true then SendData() else ypcall(SendData) end if PrintResponse then print(Res) end end end function REMOTE:SendSnapshot(SendKey, MaxPartAmount, PrintResponse, Stopypcall) MaxPartAmount = MaxPartAmount or 10000 local PlaceData = { Lighting = {}; Parts = {}; Other = {}; } local MinSize = Vector3.new(0.5,0.5,0.5) local PartAmount = 0 local PlaceJSON = "" local function Scan(BaseObj) for _,Obj in pairs(BaseObj:GetChildren()) do if Obj:IsA("BasePart") and not Obj:IsA("Terrain") then local Size = {STRING:StringRound(Obj.Size.X), STRING:StringRound(Obj.Size.Y), STRING:StringRound(Obj.Size.Z)}; if tonumber(Size[1]) >= MinSize.X and tonumber(Size[2]) >= MinSize.Y and tonumber(Size[3]) >= MinSize.Z then local Skip = false local Data = {} local X,Y,Z = Obj.CFrame:toEulerAnglesXYZ() if CORE:FindType(Obj, "BlockMesh") then local Mesh = CORE:FindType(Obj, "BlockMesh") Size = {STRING:StringRound(Obj.Size.X * Mesh.Scale.X), STRING:StringRound(Obj.Size.Y * Mesh.Scale.Y), STRING:StringRound(Obj.Size.Z * Mesh.Scale.Z)} elseif CORE:FindType(Obj, "CylinderMesh") then Data.Shape = "Cylinder" elseif CORE:FindType(Obj, "SpecialMesh") then local Mesh = CORE:FindType(Obj, "SpecialMesh") if Mesh.MeshType == Enum.MeshType.Head then --idk else Skip = true end elseif CORE:FindType(Obj, "FileMesh") then Skip = true end if not Data.Shape and not Skip then if ypcall(function() return Obj.Shape end) then Data.Shape = string.sub(Obj.Shape.Name,14) if string.sub(Data.Shape,1,1) == "." then Data.Shape = string.sub(Data.Shape,2) end if Data.Shape == "Cylinder" then Z = Z + math.pi/2 end else Data.Shape = "Block" end end if Obj.Name == "Head" and CORE:FindType(Obj.Parent, "Humanoid") and not Skip then Data.Label = string.gsub(Obj.Parent.Name, "'", "") end if not Skip then Data.Color = GUI:Color3ToHex(Obj.Color); Data.Size = Size; Data.Position = {STRING:StringRound(Obj.CFrame.X), STRING:StringRound(Obj.CFrame.Y), STRING:StringRound(Obj.CFrame.Z)}; Data.Rotation = {STRING:StringRound(X), STRING:StringRound(Y), STRING:StringRound(Z)}; Data.Transparency = STRING:StringRound(Obj.Transparency); Data.Reflectance = STRING:StringRound(Obj.Reflectance); Data.Textures = {}; Data.Material = string.sub(tostring(Obj.Material),15); for _,Sub in pairs(Obj:GetChildren()) do if Sub:IsA("Decal") then local Texture = string.match(Sub.Texture, "%d+") if Sub.Texture == "rbxasset://textures/face.png" then Texture = "FACE" end Data.Textures[FaceCovert[Sub.Face.Name]] = Texture end end PartAmount = PartAmount + 1 table.insert(PlaceData.Parts, Data) if PartAmount >= MaxPartAmount then break end end end end if #Obj:GetChildren() > 0 then Scan(Obj) end end end Scan(Workspace) PlaceData.Lighting.Ambient = GUI:Color3ToHex(game.Lighting.Ambient) PlaceData.Other.PartAmount = PartAmount; PlaceJSON = Server.HS:JSONEncode(PlaceData) local Res = "Could not get response" local function SendData() Res = Server.HS:PostAsync(CORE.Domain.."/Login/SendSnapshot.php?Username="..Settings.LinkedAccount.."&DataKey="..Server.HS:UrlEncode(Settings.DataKey).."&SendKey="..SendKey, PlaceJSON, 2) end if Stopypcall == true then SendData() else ypcall(SendData) end if PrintResponse then print(Res) end print("Sent snapshot") end function REMOTE:DefineWord(Word, Source) if not Word then return end if not Source then Source = "all" end local Response = REMOTE:GetURL("http://api.wordnik.com/v4/word.json/"..Server.HS:UrlEncode(Word).."/definitions?limit=1&includeRelated=false&sourceDictionaries="..Server.HS:UrlEncode(Source).."&useCanonical=false&includeTags=false&api_key=a2a73e7b926c924fad7001ca3111acd55af2ffabf50eb4ae5") if Response then local Decode = REMOTE:Decode(Response) if #Decode > 0 then return string.upper(string.sub(Decode[1]["word"],1,1))..string.lower(string.sub(Decode[1]["word"],2)).." - "..Decode[1]["partOfSpeech"]..[[ ]]..Decode[1]["text"] else return "Invalid English word" end else return "Cannot connect to database" end end function REMOTE:DownloadJoke(Speaker) local Res = REMOTE:GetURL("http://www.rinkworks.com/jokes/random.cgi", Speaker) local Joke = nil if Res then local _, Start = string.find(Res, "") local End, _ = string.find(string.sub(Res, Start), "") Joke = string.sub(Res, Start, End + 1 + Start - 5) Joke = string.gsub(Joke, "\n", "") Joke = string.gsub(Joke, " ", "") -- tab Joke = string.gsub(Joke, "", "") Joke = string.gsub(Joke, "