From 199be611292ad75b467989542da176d1e57d5e7d Mon Sep 17 00:00:00 2001 From: ccuser44 <68124053+ccuser44@users.noreply.github.com> Date: Tue, 26 Nov 2024 23:57:58 +0200 Subject: [PATCH] Misc fixes and improvements (#1769) * Add clearnote alias * Optimise textureid pooling * Use script env for scriptbase * Optimise material * Better API checking * Create ClientScriptBase.server.luau * Create ClientScriptBase.meta.json * Update AnimateAvatar.meta.json * Update ClientScriptBase.meta.json * Add clientscript support for scriptbuilder * Use a clientscript for rainbowify * Add clientscript support for newscript * Delete MainModule/Server/Dependencies/Assets/Clipper.rbxmx * Create init.client.luau * Create Clip.model.json * Fix multiple issues with effect * Fix server mutex * Update Quacker.server.luau * Update Spinner.client.luau * Fix sfling creating local craters * Optimise terrain check * Fix balance name * Fix ClientScript not working * Fix rainbowify * Optimize and fix oldlogs conversion * Add `:seize` alias * Fix case * Fix lint --------- Co-authored-by: nichole <64012878+Dimenpsyonal@users.noreply.github.com> --- MainModule/Client/Plugins/Anti_Cheat.luau | 23 +-- MainModule/Client/UI/Default/Effect.luau | 134 +++++++++--------- MainModule/Server/Commands/Admins.luau | 4 +- MainModule/Server/Commands/Fun.luau | 11 +- MainModule/Server/Core/Core.luau | 8 +- MainModule/Server/Core/Logs.luau | 36 ++--- MainModule/Server/Core/Variables.luau | 2 +- .../Assets/AnimateAvatar.meta.json | 4 +- .../Server/Dependencies/Assets/Clipper.rbxmx | 67 --------- .../Assets/Clipper/Clip.model.json | 6 + .../Assets/Clipper/init.client.luau | 64 +++++++++ .../Dependencies/Assets/Quacker.server.luau | 1 + .../Server/Dependencies/Assets/Sfling.rbxmx | 2 +- .../Dependencies/Assets/Singer.server.luau | 2 +- .../Dependencies/Assets/Spinner.client.luau | 2 +- .../Dependencies/ClientScriptBase.meta.json | 6 + .../Dependencies/ClientScriptBase.server.luau | 10 ++ .../Dependencies/ScriptBase.server.luau | 7 +- MainModule/Server/Server.luau | 10 +- 19 files changed, 207 insertions(+), 192 deletions(-) delete mode 100644 MainModule/Server/Dependencies/Assets/Clipper.rbxmx create mode 100644 MainModule/Server/Dependencies/Assets/Clipper/Clip.model.json create mode 100644 MainModule/Server/Dependencies/Assets/Clipper/init.client.luau create mode 100644 MainModule/Server/Dependencies/ClientScriptBase.meta.json create mode 100644 MainModule/Server/Dependencies/ClientScriptBase.server.luau diff --git a/MainModule/Client/Plugins/Anti_Cheat.luau b/MainModule/Client/Plugins/Anti_Cheat.luau index 7c49fb78de..6c4187b325 100644 --- a/MainModule/Client/Plugins/Anti_Cheat.luau +++ b/MainModule/Client/Plugins/Anti_Cheat.luau @@ -293,29 +293,10 @@ return function(Vargs) xpcall(function() local function getCoreUrls() local coreUrls = {"rbxassetid://0", "rbxassetid://10066921516", "rbxassetid://13262267483", "rbxassetid://13253401424"} -- Whitelist for Roblox Camera SFX and Quest Controls Scheme - local backpack = Player:FindFirstChildOfClass("Backpack") - local character = Player.Character - local starterPack = service.StarterPack local screenshotHud = service.GuiService:FindFirstChildOfClass("ScreenshotHud") - if character then - for _, v in ipairs(character:GetChildren()) do - if v:IsA("BackpackItem") and service.Trim(v.TextureId) ~= "" then - table.insert(coreUrls, service.Trim(v.TextureId)) - end - end - end - - if backpack then - for _, v in ipairs(backpack:GetChildren()) do - if v:IsA("BackpackItem") and service.Trim(v.TextureId) ~= "" then - table.insert(coreUrls, service.Trim(v.TextureId)) - end - end - end - - if starterPack then - for _, v in ipairs(starterPack:GetChildren()) do + for _, container in {Player.Character, service.StarterPack, Player:FindFirstChildOfClass("Backpack")} do + for _, v in ipairs(container:GetChildren()) do if v:IsA("BackpackItem") and service.Trim(v.TextureId) ~= "" then table.insert(coreUrls, service.Trim(v.TextureId)) end diff --git a/MainModule/Client/UI/Default/Effect.luau b/MainModule/Client/UI/Default/Effect.luau index 3c51ad25f5..1208f278ba 100644 --- a/MainModule/Client/UI/Default/Effect.luau +++ b/MainModule/Client/UI/Default/Effect.luau @@ -11,8 +11,10 @@ return function(data, env) if env then setfenv(1, env) end - + local gui = service.New("ScreenGui") + gui.IgnoreGuiInset = true + gui.ClipToDeviceSafeArea = true local mode = data.Mode local gTable = client.UI.Register(gui, {Name = "Effect"}) local BindEvent = gTable.BindEvent @@ -26,12 +28,12 @@ return function(data, env) local frame = Instance.new("Frame") frame.Parent = gui local camera = workspace.CurrentCamera - local pixels = {} local resY = data.Resolution or 20 local resX = data.Resolution or 20 local depth = 0 local distance = data.Distance or 128 + local pixels = table.create((gui.AbsoluteSize.Y / resY) * (gui.AbsoluteSize.X / resX)) local function renderScreen() for _, pixel in pixels do @@ -43,23 +45,21 @@ return function(data, env) pixel.Pixel.BackgroundColor3 = if part and part.Transparency < 1 then part.BrickColor.Color else Color3.fromRGB(105, 170, 255) - else pixel.Pixel.BackgroundColor3 = Color3.fromRGB(105, 170, 255) end end end - frame.Size = UDim2.new(1, 0, 1, 40) - frame.Position = UDim2.new(0, 0, 0, -35) - for y = 0, gui.AbsoluteSize.Y+50, resY do - for x = 0, gui.AbsoluteSize.X+30, resX do - local pixel = service.New("TextLabel", { + frame.Size = UDim2.new(1, 0, 1, 0) + frame.Position = UDim2.new(0, 0, 0, 0) + for y = 0, gui.AbsoluteSize.Y, resY do + for x = 0, gui.AbsoluteSize.X, resX do + local pixel = service.New("Frame", { Parent = frame; - Text = ""; BorderSizePixel = 0; Size = UDim2.fromOffset(resX, resY); - Position = UDim2.fromOffset(x-(resX/2), y-(resY/2)); + Position = UDim2.fromOffset(x - (resX / 2), y - (resY / 2)); BackgroundColor3 = Color3.fromRGB(105, 170, 255); }) table.insert(pixels, {Pixel = pixel, X = x, Y = y}) @@ -92,26 +92,21 @@ return function(data, env) local bg = service.New("Frame", { Parent = gui; BackgroundTransparency = 1; - BackgroundColor3 = Color3.new(0,0,0); - Size = UDim2.new(2,0,2,0); - Position = UDim2.new(-0.5,0,-0.5,0); + BackgroundColor3 = Color3.new(0, 0, 0); + Size = UDim2.new(2, 0, 2, 0); + Position = UDim2.new(-1, 0, -1, 0); }) - for i = 1, 0, -0.01 do - bg.BackgroundTransparency = i - blur.Size = 56 * (1 - i); - task.wait(0.1) - end - - bg.BackgroundTransparency = 0 + service.TweenService:Create(bg, TweenInfo.new((1 / 0.01) * 0.1), { BackgroundTransparency = 0 }):Play() + service.TweenService:Create(blur, TweenInfo.new((1 / 0.01) * 0.1), { Size = (1 / 0.01) * 5.6 }):Play() elseif mode == "Trippy" then local v = service.Player local bg = Instance.new("Frame") - bg.BackgroundColor3 = Color3.new(0,0,0) + bg.BackgroundColor3 = Color3.new(0, 0, 0) bg.BackgroundTransparency = 0 - bg.Size = UDim2.new(10,0,10,0) - bg.Position = UDim2.new(-5,0,-5,0) + bg.Size = UDim2.new(10, 0, 10, 0) + bg.Position = UDim2.new(-5, 0, -5, 0) bg.ZIndex = 10 bg.Parent = gui @@ -123,15 +118,15 @@ return function(data, env) if gui then gui:Destroy() end elseif mode == "Spooky" then local frame = Instance.new("Frame") - frame.BackgroundColor3=Color3.new(0,0,0) - frame.Size=UDim2.new(1,0,1,50) - frame.Position=UDim2.new(0,0,0,-50) + frame.BackgroundColor3 = Color3.new(0, 0, 0) + frame.Size = UDim2.new(1, 0, 1, 0) + frame.Position = UDim2.new(0, 0, 0, 0) frame.Parent = gui local img = Instance.new("ImageLabel") - img.Position = UDim2.new(0,0,0,0) - img.Size = UDim2.new(1,0,1,0) + img.Position = UDim2.new(0, 0, 0, 0) + img.Size = UDim2.new(1, 0, 1, 0) img.BorderSizePixel = 0 - img.BackgroundColor3 = Color3.new(0,0,0) + img.BackgroundColor3 = Color3.new(0, 0, 0) img.Parent = frame local textures = { 299735022; @@ -158,25 +153,28 @@ return function(data, env) sound.Looped = true sound.Parent = gui sound:Play() + local lastImage while gui and gui.Parent do - for i=1,#textures do - img.Image = `rbxassetid://{textures[i]}` - task.wait(0.1) + local image = `rbxassetid://{textures[math.floor(os.clock() / 0.1) % #textures + 1]}` + if image ~= lastImage then + img.Image, lastImage = image, image end + task.wait() end + sound:Stop() elseif mode == "lifeoftheparty" then local frame = Instance.new("Frame") - frame.BackgroundColor3 = Color3.new(0,0,0) - frame.Size = UDim2.new(1,0,1,50) - frame.Position = UDim2.new(0,0,0,-50) + frame.BackgroundColor3 = Color3.new(0, 0, 0) + frame.Size = UDim2.new(1, 0, 1, 0) + frame.Position = UDim2.new(0, 0, 0, 0) frame.Parent = gui local img = Instance.new("ImageLabel") - img.Position = UDim2.new(0,0,0,0) - img.Size = UDim2.new(1,0,1,0) + img.Position = UDim2.new(0, 0, 0, 0) + img.Size = UDim2.new(1, 0, 1, 0) img.BorderSizePixel = 0 - img.BackgroundColor3 = Color3.new(0,0,0) + img.BackgroundColor3 = Color3.new(0, 0, 0) img.Parent = frame local textures = { 299733203; @@ -205,33 +203,34 @@ return function(data, env) 299733663; 299733674; 299733694; - } local sound = Instance.new("Sound") sound.SoundId = "rbxassetid://172906410" sound.Looped = true sound.Parent = gui sound:Play() + local lastImage while gui and gui.Parent do - for i=1,#textures do - img.Image = `rbxassetid://{textures[i]}` - task.wait(0.1) + local image = `rbxassetid://{textures[math.floor(os.clock() / 0.1) % #textures + 1]}` + if image ~= lastImage then + img.Image, lastImage = image, image end + task.wait() end sound:Stop() elseif mode == "trolling" then local frame = Instance.new("Frame") - frame.BackgroundColor3 = Color3.new(0,0,0) - frame.Size = UDim2.new(1,0,1,50) - frame.Position = UDim2.new(0,0,0,-50) + frame.BackgroundColor3 = Color3.new(0, 0, 0) + frame.Size = UDim2.new(1, 0, 1, 0) + frame.Position = UDim2.new(0, 0, 0, 0) frame.Parent = gui local img = Instance.new("ImageLabel") - img.Position = UDim2.new(0,0,0,0) - img.Size = UDim2.new(1,0,1,0) + img.Position = UDim2.new(0, 0, 0, 0) + img.Size = UDim2.new(1, 0, 1, 0) img.BorderSizePixel = 0 - img.BackgroundColor3 = Color3.new(0,0,0) + img.BackgroundColor3 = Color3.new(0, 0, 0) img.Parent = frame local textures = { "6172043688"; @@ -260,62 +259,63 @@ return function(data, env) "6172045193"; "6172044478"; "6172043688"; - } local sound = Instance.new("Sound") sound.SoundId = "rbxassetid://229681899" sound.Looped = true sound.Parent = gui sound:Play() + local lastImage while gui and gui.Parent do - for i=1,#textures do - img.Image = `rbxassetid://{textures[i]}` - task.wait(0.13) + local image = `rbxassetid://{textures[math.floor(os.clock() / 0.13) % #textures + 1]}` + if image ~= lastImage then + img.Image, lastImage = image, image end + task.wait() end sound:Stop() elseif mode == "Strobe" then local bg = Instance.new("Frame") - bg.BackgroundColor3 = Color3.new(0,0,0) + bg.BackgroundColor3 = Color3.new(0, 0, 0) bg.BackgroundTransparency = 0 - bg.Size = UDim2.new(10,0,10,0) - bg.Position = UDim2.new(-5,0,-5,0) + bg.Size = UDim2.new(10, 0, 10, 0) + bg.Position = UDim2.new(-5, 0, -5, 0) bg.ZIndex = 10 bg.Parent = gui while gui and gui.Parent do task.wait(1/44) - bg.BackgroundColor3 = Color3.new(1,1,1) + bg.BackgroundColor3 = Color3.new(1, 1, 1) task.wait(1/44) - bg.BackgroundColor3 = Color3.new(0,0,0) + bg.BackgroundColor3 = Color3.new(0, 0, 0) end if gui then gui:Destroy() end elseif mode == "Blind" then local bg = Instance.new("Frame") - bg.BackgroundColor3 = Color3.new(0,0,0) + bg.BackgroundColor3 = Color3.new(0, 0, 0) bg.BackgroundTransparency = 0 - bg.Size = UDim2.new(10,0,10,0) - bg.Position = UDim2.new(-5,0,-5,0) + bg.Size = UDim2.new(10, 0, 10, 0) + bg.Position = UDim2.new(-5, 0, -5, 0) bg.ZIndex = 10 bg.Parent = gui elseif mode == "ScreenImage" then local bg = Instance.new("ImageLabel") - bg.Image=`rbxassetid://{data.Image}` + bg.Image = `rbxassetid://{data.Image}` bg.BackgroundColor3 = Color3.new(0,0,0) bg.BackgroundTransparency = 0 - bg.Size = UDim2.new(1,0,1,0) - bg.Position = UDim2.new(0,0,0,0) + bg.Size = UDim2.new(1, 0, 1, 0) + bg.Position = UDim2.new(0, 0, 0, 0) bg.ZIndex = 10 bg.Parent = gui elseif mode == "ScreenVideo" then local bg = Instance.new("VideoFrame") - bg.Video=`rbxassetid://{data.Video}` - bg.BackgroundColor3 = Color3.new(0,0,0) + bg.Video = `rbxassetid://{data.Video}` + bg.BackgroundColor3 = Color3.new(0, 0, 0) bg.BackgroundTransparency = 0 - bg.Size = UDim2.new(1,0,1,0) - bg.Position = UDim2.new(0,0,0,0) + bg.Size = UDim2.new(1, 0, 1, 0) + bg.Position = UDim2.new(0, 0, 0, 0) bg.ZIndex = 10 bg.Parent = gui bg:Play() diff --git a/MainModule/Server/Commands/Admins.luau b/MainModule/Server/Commands/Admins.luau index a1f554f175..3ea208f9fb 100644 --- a/MainModule/Server/Commands/Admins.luau +++ b/MainModule/Server/Commands/Admins.luau @@ -799,6 +799,8 @@ return function(Vargs, env) if string.lower(class) == "script" or string.lower(class) == "s" then class = "Script" + elseif string.lower(class) == "clientscript" or string.lower(class) == "cs" then + class = "ClientScript" --elseif string.lower(class) == "localscript" or string.lower(class) == "ls" then -- class = "LocalScript" else @@ -1098,7 +1100,7 @@ return function(Vargs, env) DeleteNote = { Prefix = Settings.Prefix; - Commands = {"removenote", "remnote", "deletenote"}; + Commands = {"removenote", "remnote", "deletenote", "clearnote"}; Args = {"player", "note (specify 'all' to delete all notes)"}; Description = "Removes a note on the target player(s)"; AdminLevel = "Admins"; diff --git a/MainModule/Server/Commands/Fun.luau b/MainModule/Server/Commands/Fun.luau index c72d6fb418..3343588c6e 100644 --- a/MainModule/Server/Commands/Fun.luau +++ b/MainModule/Server/Commands/Fun.luau @@ -683,7 +683,7 @@ return function(Vargs, env) Fun = true; AdminLevel = "Moderators"; Function = function(plr: Player, args: {string}) - local scr = Core.NewScript("Script",[[ + local scr = Core.NewScript("ClientScript", [[ local restore = {} local tween = game:GetService("TweenService") @@ -707,7 +707,7 @@ return function(Vargs, env) end script:Destroy() end - ]]) + ]], true) scr.Name = "Rainbowify" for i, v in service.GetPlayers(plr, args[1]) do @@ -780,12 +780,13 @@ return function(Vargs, env) Material = { Prefix = Settings.Prefix; - Commands = {"mat", "material"}; + Commands = {"material", "mat"}; Args = {"player", "material"}; Description = "Make the target the material you choose"; Fun = true; AdminLevel = "Moderators"; Function = function(plr: Player, args: {string}) + --local chosenMat = if tonumber(args[2]) then Enum.Material:FromValue(tonumber(args[2])) elseif not args[2] then "Plastic" else Enum.Material:FromName(args[2]) local mats = { Plastic = 256; Wood = 512; @@ -825,7 +826,7 @@ return function(Vargs, env) for _, v in service.GetPlayers(plr, args[1]) do if v.Character then for _, p in v.Character:GetChildren() do - if p:IsA"BasePart" then + if p:IsA("BasePart") then p.Material = chosenMat end end @@ -3746,7 +3747,7 @@ return function(Vargs, env) Seizure = { Prefix = Settings.Prefix; - Commands = {"seizure"}; + Commands = {"seizure", "seize"}; Args = {"player"}; Description = "Make the target player(s)'s character spazz out on the floor"; Fun = true; diff --git a/MainModule/Server/Core/Core.luau b/MainModule/Server/Core/Core.luau index 2d18d007ba..f8b8fcdd38 100644 --- a/MainModule/Server/Core/Core.luau +++ b/MainModule/Server/Core/Core.luau @@ -517,7 +517,7 @@ return function(Vargs, GetEnv) local fixscr = service.UnWrap(scr) for _, val in Core.ExecuteScripts do - if not isLocal or (isLocal and val.Type == "LocalScript") then + if not isLocal or isLocal and (val.Type == "LocalScript" or val.Type == "ClientScript") then if (service.UnWrap(val.Script) == fixscr or code == val.Code) and (not val.runLimit or (val.runLimit ~= nil and val.Executions <= val.runLimit)) then val.Executions += 1 @@ -552,7 +552,7 @@ return function(Vargs, GetEnv) RegisterScript = function(data) data.Executions = 0 data.Time = os.time() - data.Type = data.Script.ClassName + data.Type = data.Type or data.Script.ClassName data.Wrapped = service.Wrap(data.Script) data.Wrapped:SetSpecial("Clone",function() return Core.RegisterScript({ @@ -597,6 +597,7 @@ return function(Vargs, GetEnv) NewScript = function(scriptType: string, source: string, allowCodes: boolean?, noCache: boolean?, runLimit: number?) local scr = assert( if scriptType == "Script" then Deps.ScriptBase:Clone() + elseif scriptType == "ClientScript" then Deps.ClientScriptBase:Clone() elseif scriptType == "LocalScript" then Deps.LocalScriptBase:Clone() else nil, `Invalid script type '{scriptType}'` @@ -617,7 +618,8 @@ return function(Vargs, GetEnv) local wrapped = Core.RegisterScript({ Script = scr; Code = execCode; - Source = scr:IsA("LocalScript") and Core.Bytecode(source) or source; + Type = scriptType; + Source = (scr:IsA("LocalScript") or scriptType == "ClientScript") and Core.Bytecode(source) or source; noCache = noCache; runLimit = runLimit; }) diff --git a/MainModule/Server/Core/Logs.luau b/MainModule/Server/Core/Logs.luau index 7e18420b0b..311492d0c2 100644 --- a/MainModule/Server/Core/Logs.luau +++ b/MainModule/Server/Core/Logs.luau @@ -144,29 +144,33 @@ return function(Vargs, GetEnv) end) end - local temp = {} + local temp = table.create(#oldLogs + #logsToSave + (Logs.Commands.__meta == "DLL" and Logs.Commands.count or 0)) + + local function insertLog(log) + local isTable = type(log) == "table" + local newTab = if isTable then table.clone(log) else log + + if (isTable and not log.NoSave) or not isTable then + if isTable and log.Player then + local p = log.Player + log.Player = { + Name = p.Name; + UserId = p.UserId; + } + end + table.insert(temp, log) + end + end for _, m in logsToSave do if m.__meta == "DLL" then local newTab = m:GetAsTable() - for i,v in pairs(newTab) do - table.insert(temp,v) + for _, v in ipairs(newTab) do + insertLog(v) end else - local isTable = type(m) == "table" - local newTab = if isTable then table.clone(m) else m - - if (isTable and not newTab.NoSave) or not isTable then - if isTable and newTab.Player then - local p = newTab.Player - newTab.Player = { - Name = p.Name; - UserId = p.UserId; - } - end - table.insert(temp, newTab)--{Time = m.Time; Text = `{m.Text}: {m.Desc}`; Desc = m.Desc}) - end + insertLog(m) end end diff --git a/MainModule/Server/Core/Variables.luau b/MainModule/Server/Core/Variables.luau index bfe7910b31..f7243ea007 100644 --- a/MainModule/Server/Core/Variables.luau +++ b/MainModule/Server/Core/Variables.luau @@ -189,7 +189,7 @@ return function(Vargs, GetEnv) {Name = "still", ID = 7023771708}, {Name = "sleep", ID = 7023407320}, {Name = "whatareyouwaitingfor", ID = 7028977687}, - {Name = "balace", ID = 7024183256}, + {Name = "balance", ID = 7024183256}, {Name = "brokenglass", ID = 7028799370}, {Name = "thelanguageofangels", ID = 7029031068}, {Name = "imprints", ID = 7023704173}, diff --git a/MainModule/Server/Dependencies/Assets/AnimateAvatar.meta.json b/MainModule/Server/Dependencies/Assets/AnimateAvatar.meta.json index 51c45b040c..6233c02da7 100644 --- a/MainModule/Server/Dependencies/Assets/AnimateAvatar.meta.json +++ b/MainModule/Server/Dependencies/Assets/AnimateAvatar.meta.json @@ -1,6 +1,6 @@ { "properties": { - "Disabled": true, - "RunContext": "Client" + "RunContext": "Client", + "Disabled": true } } diff --git a/MainModule/Server/Dependencies/Assets/Clipper.rbxmx b/MainModule/Server/Dependencies/Assets/Clipper.rbxmx deleted file mode 100644 index 71215654e0..0000000000 --- a/MainModule/Server/Dependencies/Assets/Clipper.rbxmx +++ /dev/null @@ -1,67 +0,0 @@ - - true - null - nil - - - - 0 - false - true - - Clipper - 0 - {CB07704A-5D5F-4007-B203-DA3FC3AFC116} - - -1 - - - - - - 0 - false - Clip - -1 - - false - - - - diff --git a/MainModule/Server/Dependencies/Assets/Clipper/Clip.model.json b/MainModule/Server/Dependencies/Assets/Clipper/Clip.model.json new file mode 100644 index 0000000000..c90e7ae102 --- /dev/null +++ b/MainModule/Server/Dependencies/Assets/Clipper/Clip.model.json @@ -0,0 +1,6 @@ +{ + "ClassName": "BoolValue", + "Properties": { + "Value": false + } +} diff --git a/MainModule/Server/Dependencies/Assets/Clipper/init.client.luau b/MainModule/Server/Dependencies/Assets/Clipper/init.client.luau new file mode 100644 index 0000000000..c9713a4b98 --- /dev/null +++ b/MainModule/Server/Dependencies/Assets/Clipper/init.client.luau @@ -0,0 +1,64 @@ +local RunService = game:GetService("RunService") + +local LIMB_NAMES = { + R6 = { + "Torso", + "HumanoidRootPart", + "Head" + }, + R15 = { + "HumanoidRootPart", + "LowerTorso", + "UpperTorso" + } +} + +local humanoid: Humanoid = script.Parent +local character = humanoid.Parent +local wasInside = false +local ignoreParams = OverlapParams.new() + +ignoreParams.FilterDescendantsInstances = {character, humanoid} +ignoreParams.FilterType = Enum.RaycastFilterType.Exclude +ignoreParams.MaxParts = 1 +ignoreParams.CollisionGroup = humanoid.RootPart and humanoid.RootPart.CollisionGroup or "Default" +ignoreParams.RespectCanCollide = true + +local function isInsideTerrain(position) + return workspace.Terrain:ReadVoxelChannels(Region3.new(position, position + Vector3.one):ExpandToGrid(4), 4, {"SolidOccupancy"}).SolidOccupancy[1][1][1] > 0 +end + +RunService.PreSimulation:Connect(function() + if script.Clip.Value then + for _, object in ipairs(character:GetDescendants()) do + if object:IsA("BasePart") and object.CanCollide then + object.CanCollide = false + end + end + + local rootPart = humanoid.RootPart + local velocity = rootPart and rootPart.AssemblyLinearVelocity + + if velocity and velocity.Y <= 0 and (#workspace:GetPartsInPart(rootPart, ignoreParams) > 0 or isInsideTerrain(rootPart.Position - Vector3.new(0, humanoid.HipHeight, 0))) then + wasInside = true + rootPart.AssemblyLinearVelocity = Vector3.new(velocity.X, math.clamp(velocity.Y, 0, math.huge), velocity.Z) + --humanoid:ChangeState(Enum.HumanoidStateType.StrafingNoPhysics) -- Enum.HumanoidStateType.StrafingNoPhysics (semi-depricated but still working and fixes the colliding if in water). + + if humanoid.Jump then + humanoid:ChangeState(Enum.HumanoidStateType.Jumping) + end + elseif wasInside then + wasInside = false + humanoid:ChangeState(Enum.HumanoidStateType.None) + end + else + for _, object in ipairs(character:GetDescendants()) do + if table.find(LIMB_NAMES[humanoid.RigType.Name] or {}, object.Name) and object:IsA("BasePart") then + object.CanCollide = true + end + end + + humanoid:ChangeState(Enum.HumanoidStateType.None) -- Enum.HumanoidStateType.None (Allows roblox to set set a state that isn't Enum.HumanoidStateType.StrafingNoPhysics) + script:Destroy() + end +end) diff --git a/MainModule/Server/Dependencies/Assets/Quacker.server.luau b/MainModule/Server/Dependencies/Assets/Quacker.server.luau index 5301e27d70..aa57c4ef3c 100644 --- a/MainModule/Server/Dependencies/Assets/Quacker.server.luau +++ b/MainModule/Server/Dependencies/Assets/Quacker.server.luau @@ -4,6 +4,7 @@ while true do if script.Parent ~= nil then script.Parent:FindFirstChild(`Quack{math.random(1, 4)}`):Play() else + script:Destroy() break end end diff --git a/MainModule/Server/Dependencies/Assets/Sfling.rbxmx b/MainModule/Server/Dependencies/Assets/Sfling.rbxmx index c58966959f..c37215ed6a 100644 --- a/MainModule/Server/Dependencies/Assets/Sfling.rbxmx +++ b/MainModule/Server/Dependencies/Assets/Sfling.rbxmx @@ -22,7 +22,7 @@ for i = 1, 100 do ex.Position = torso.Position + Vector3.new(math.random(-5, 5), -10, math.random(-5, 5)) ex.BlastRadius = 35 ex.BlastPressure = strength - ex.ExplosionType = Enum.ExplosionType.Craters + ex.ExplosionType = Enum.ExplosionType.NoCraters--Enum.ExplosionType.Craters ex.DestroyJointRadiusPercent = 0 ex.Archivable = false ex.Parent = cam diff --git a/MainModule/Server/Dependencies/Assets/Singer.server.luau b/MainModule/Server/Dependencies/Assets/Singer.server.luau index 30b558859e..8fe0633941 100644 --- a/MainModule/Server/Dependencies/Assets/Singer.server.luau +++ b/MainModule/Server/Dependencies/Assets/Singer.server.luau @@ -46,7 +46,7 @@ local WIDTH_SUPRESS = 20000 local HEIGHT_SUPRESS = 1000 local ANGLE_MULTIPLY = 100 -game:GetService("RunService").Heartbeat:connect(function() +game:GetService("RunService").Heartbeat:Connect(function() local relativeSize = head.Size / (isR15 and Vector3.new(1.2, 1.2, 1.2) or Vector3.new(2, 1, 1)) local loudness = script.Parent.PlaybackLoudness mouthMesh.Scale = mouthMesh.Scale:Lerp(Vector3.new(originalSize.X + loudness/WIDTH_SUPRESS * relativeSize.X, loudness/HEIGHT_SUPRESS * relativeSize.Y, originalSize.Z), SIZE_SMOOTHNESS) diff --git a/MainModule/Server/Dependencies/Assets/Spinner.client.luau b/MainModule/Server/Dependencies/Assets/Spinner.client.luau index 3a72663733..8354a48dbf 100644 --- a/MainModule/Server/Dependencies/Assets/Spinner.client.luau +++ b/MainModule/Server/Dependencies/Assets/Spinner.client.luau @@ -2,5 +2,5 @@ local torso = script.Parent local bg = torso:FindFirstChild("ADONIS_SPIN_GYRO") repeat task.wait(1/44) - bg.CFrame *= CFrame.Angles(0,math.rad(12),0) + bg.CFrame *= CFrame.Angles(0, math.rad(12), 0) until not bg or bg.Parent ~= torso diff --git a/MainModule/Server/Dependencies/ClientScriptBase.meta.json b/MainModule/Server/Dependencies/ClientScriptBase.meta.json new file mode 100644 index 0000000000..6233c02da7 --- /dev/null +++ b/MainModule/Server/Dependencies/ClientScriptBase.meta.json @@ -0,0 +1,6 @@ +{ + "properties": { + "RunContext": "Client", + "Disabled": true + } +} diff --git a/MainModule/Server/Dependencies/ClientScriptBase.server.luau b/MainModule/Server/Dependencies/ClientScriptBase.server.luau new file mode 100644 index 0000000000..ac51390b6b --- /dev/null +++ b/MainModule/Server/Dependencies/ClientScriptBase.server.luau @@ -0,0 +1,10 @@ +while rawget(_G, "Adonis") == nil do + task.wait() +end +local execute = script:FindFirstChild("Execute") +local code, loadCode = rawget(_G, "Adonis").Scripts.ExecutePermission(script, execute and execute.Value) +local env = getfenv() + +if code then + loadCode(code, env)() +end diff --git a/MainModule/Server/Dependencies/ScriptBase.server.luau b/MainModule/Server/Dependencies/ScriptBase.server.luau index 390e7201bd..e5b1613c8d 100644 --- a/MainModule/Server/Dependencies/ScriptBase.server.luau +++ b/MainModule/Server/Dependencies/ScriptBase.server.luau @@ -1,8 +1,11 @@ -task.wait() +while rawget(_G, "Adonis") == nil do + task.wait() +end local execute = script:FindFirstChild("Execute") local code, loadCode = rawget(_G, "Adonis").Scripts.ExecutePermission(script, execute and execute.Value) local canUseLoadstring = loadstring and pcall(loadstring, "local a = 5 local b = a + 5") or false +local env = getfenv() if code then - (canUseLoadstring and loadstring(code) or loadCode(code--[[, getfenv()]]))() + (canUseLoadstring and loadstring(code) or loadCode(code, env))() end diff --git a/MainModule/Server/Server.luau b/MainModule/Server/Server.luau index 8b9fa6638e..75245fb231 100644 --- a/MainModule/Server/Server.luau +++ b/MainModule/Server/Server.luau @@ -460,7 +460,7 @@ return service.NewProxy({ script:Destroy() return "FAILED" else - mutex = service.New("StringValue", {Name = "__Adonis_MODULE_MUTEX", Archivable = false, Value = "Running"}) + mutex = service.New("StringValue", {Name = "__Adonis_MODULE_MUTEX", Value = "Running"}) local mutexBackup = mutex:Clone() local function makePersistent(m) local connection1, connection2 = nil, nil @@ -469,9 +469,10 @@ return service.NewProxy({ connection1:Disconnect() connection2:Disconnect() warn("Adonis module mutex removed; Regenerating...") - makePersistent(mutexBackup) - mutexBackup.Parent = service.RunService - mutexBackup = mutexBackup:Clone() + mutex = mutexBackup:Clone() + mutex.Archivable = false + mutex.Parent = service.RunService + makePersistent(mutex) end end) connection2 = m:GetPropertyChangedSignal("Name"):Connect(function() @@ -482,6 +483,7 @@ return service.NewProxy({ end) end makePersistent(mutex) + mutex.Archivable = false mutex.Parent = service.RunService end