Error with my code

I am creating a plugin but when I first load studio my plugin gives this error:

Object is not a valid member of Script "user_Main.lua.Script"

I think the error is because it didn’t the plugin didn’t finish loading and I also used :WaitForChild

Also when I test my game in studio my plugin gives the same error.

Any help, would be awesome!

1 Like

Is object a module???

It is a folder inside main
image

try the :FindFirstChild() in case it doesn’t work.

Still not working, I tried both FindFirstChild and WaitForChild

and if you try one:

task.delay(1, function() -- ( 1 ) seconds to
-- Code here.
end)

Do I put my entire script inside it ?

1 Like

yes, Test and tell me if it worked.

No it still didn’t work :frowning: This is so confusing

Can you send the script? ------------------

Can I see a bigger hieracy? Additionally can I see the line that is erroring?

if not plugin or game:GetService("RunService"):IsRunning() then return end

-- QuickBuild
local QuickBuild = script.Parent

-- Modules Folders
local ObjectModules = script:FindFirstChild("Object") -- Line giving an error
local ObjectPositioningModules = ObjectModules.Positioning

local UIModules = script.UI

-- Modules

-- ObjectPositioning
local PreviewPositionObjectModule = require(ObjectPositioningModules.PreviewPositionObject)
local PositionObjectModule = require(ObjectPositioningModules.PositionObject)

-- UI
local UIClickDetectionModule = require(UIModules.UIClickDetection)
local MainPluginUiModule = require(UIModules.MainPluginUI)

-- Colors
local ColorsModule = require(script.Colors)

-- Services
local ChangeHistoryService = game:GetService("ChangeHistoryService")
local Selection = game:GetService("Selection")

-- Create a new toolbar section titled "Custom Script Tools"
local toolbar = plugin:CreateToolbar("Quick Build")

-- Add a toolbar button named "Create Empty Script"
local quickBuildButton = toolbar:CreateButton("Open QuickBuild UI", "Open the QuickBuild UI", "rbxassetid://4458901886")

-- Make button clickable even if 3D viewport is hidden
quickBuildButton.ClickableWhenViewportHidden = false

-- Tables

-- sidesSelected values will be either
-- positive or negative or nil
local sidesSelected = {
	XAxis = "Nil",
	YAxis = "Nil",
	ZAxis = "Nil"
}

local newSelection = {}

-- Debounces
local Opened = false

-- Create new "DockWidgetPluginGuiInfo" object
local quickBuildWidgetInfo = DockWidgetPluginGuiInfo.new(
	Enum.InitialDockState.Right, -- Window will be initialized in a floating state.
	true,                        -- Window will be initially enabled.
	false,                       -- Don't override the saved enabled/dock state.
	300,                         -- Width of the floating window.
	350,                         -- Height of the floating window.
	300,                         -- Minimum Width
	150
)

MainPluginUiModule:createMainPluginUI(quickBuildWidgetInfo, "Quick Build")

local QuickBuildWidget = MainPluginUiModule:GetMainPluginUI()

local QuickBuildMainGui = QuickBuild.QuickBuildMainGui
QuickBuildMainGui.Parent = QuickBuildWidget

local QuickBuildMainGuiButton = QuickBuildMainGui.QuickBuild.QuickBuildButton

local QuickBuildMainGuiPositioning = QuickBuildMainGui.QuickBuildMainGuiPositioning.Positioning

local QuickBuildMainGuiXPosition = QuickBuildMainGuiPositioning.XPosition
local QuickBuildMainGuiXPositionContainer = QuickBuildMainGuiXPosition.Container
local quickBuildMainGuiClonePositiveButtonX = QuickBuildMainGuiXPositionContainer.ClonePositiveX
local quickBuildMainGuiCloneNegativeButtonX = QuickBuildMainGuiXPositionContainer.CloneNegativeX

local QuickBuildMainGuiYPosition = QuickBuildMainGuiPositioning.YPosition
local QuickBuildMainGuiYPositionContainer = QuickBuildMainGuiYPosition.Container
local quickBuildMainGuiClonePositiveButtonY = QuickBuildMainGuiYPositionContainer.ClonePositiveY
local quickBuildMainGuiCloneNegativeButtonY = QuickBuildMainGuiYPositionContainer.CloneNegativeY

local QuickBuildMainGuiZPosition = QuickBuildMainGuiPositioning.ZPosition
local QuickBuildMainGuiZPositionContainer = QuickBuildMainGuiZPosition.Container
local quickBuildMainGuiClonePositiveButtonZ = QuickBuildMainGuiZPositionContainer.ClonePositiveZ
local quickBuildMainGuiCloneNegativeButtonZ = QuickBuildMainGuiZPositionContainer.CloneNegativeZ

-- Open/Close GUI
quickBuildButton.Click:Connect(function()
	if Opened then
		QuickBuildWidget.Enabled = false
		Opened = false
	else
		QuickBuildWidget.Enabled = true
		Opened = true
	end
end)

local function onPositionPreviewButtonClicked()
	local selectedObject = Selection:Get()

	if #selectedObject == 1 and selectedObject[1] ~= nil and selectedObject[1]:IsA("Part") then
		local objectToPreview = selectedObject[1]

		-- Remove preview object if there is one
		local previewObject = PreviewPositionObjectModule:getPreviewObject()

		if previewObject then
			previewObject:Destroy()
		end

		PreviewPositionObjectModule:PreviewObject(objectToPreview, sidesSelected)
	end
end

local function cancelPositionPreview()
	local previewBlinkObject = PreviewPositionObjectModule:getPreviewObject()

	if previewBlinkObject == nil then
		return
	end

	previewBlinkObject:Destroy()
end

local function onPositionButtonClicked(axis, side, button, selectionColor)
	if button == nil then
		warn("Error, please restart studio!")
		return
	end

	if button:FindFirstChild("Selected") and button:FindFirstChild("Selected").Value == false then
		local selectedObject = Selection:Get()

		local previewBlinkObject = PreviewPositionObjectModule:getPreviewObject()

		if previewBlinkObject ~= nil then
			previewBlinkObject:Destroy()
		end

		if selectedObject and #selectedObject == 1 and selectedObject[1] ~= nil and selectedObject[1]:IsA("Part") then
			for _, positionButton in ipairs(button.Parent:GetChildren()) do
				if positionButton:IsA("TextButton") and positionButton ~= button then
					positionButton.BackgroundColor3 = Color3.fromHex(ColorsModule.colors["ButtonUnselectedColor"])
					positionButton:FindFirstChild("Selected").Value = false
				end
			end

			sidesSelected[axis.."Axis"] = side

			PreviewPositionObjectModule:PreviewObject(selectedObject[1], sidesSelected)

			button.BackgroundColor3 = Color3.fromHex(selectionColor)

			button:FindFirstChild("Selected").Value = true

		elseif #selectedObject > 1 then
			warn("Cannot select more than one object")

		elseif #selectedObject < 1 then
			warn("Select at least one object")
		end

	elseif button:FindFirstChild("Selected") and button:FindFirstChild("Selected").Value == true then
		local selectedObject = Selection:Get()

		local previewBlinkObject = PreviewPositionObjectModule:getPreviewObject()

		if previewBlinkObject ~= nil then
			previewBlinkObject:Destroy()
		end

		if button == nil then
			warn("Error, please restart studio!")
			return
		end

		if selectedObject and #selectedObject == 1 and selectedObject[1] ~= nil and selectedObject[1]:IsA("Part") then
			sidesSelected[axis.."Axis"] = "Nil"

			if sidesSelected["XAxis"] == "Nil" and sidesSelected["YAxis"] == "Nil" and sidesSelected["ZAxis"] == "Nil" then
				local deleteBlinkObject = PreviewPositionObjectModule:getPreviewObject()
				if deleteBlinkObject ~= nil then
					deleteBlinkObject:Destroy()

					button.BackgroundColor3 = Color3.fromHex(ColorsModule.colors["ButtonUnselectedColor"])

					button:FindFirstChild("Selected").Value = false
					return
				end
			end

			PreviewPositionObjectModule:PreviewObject(selectedObject[1], sidesSelected)

			button.BackgroundColor3 = Color3.fromHex(ColorsModule.colors["ButtonUnselectedColor"])

			button:FindFirstChild("Selected").Value = false
		elseif #selectedObject > 1 then
			warn("Cannot select more than one object")

		elseif #selectedObject < 1 then
			warn("Select at least one object")
		end
	end
end

local function onQuickBuildButtonClicked()
	local selectedObject = Selection:Get()

	if sidesSelected["XAxis"] == "Nil" and sidesSelected["YAxis"] == "Nil" and sidesSelected["ZAxis"] == "Nil" then
		warn("Select a side to build first")
		return
	end

	if #selectedObject == 1 then		
		if selectedObject and #selectedObject == 1 and selectedObject[1] ~= nil and selectedObject[1]:IsA("Part") then
			local previewBlinkObject = PreviewPositionObjectModule:getPreviewObject()

			if previewBlinkObject == nil then
				return
			end

			previewBlinkObject:Destroy()

			local objectToClone = selectedObject[1]:Clone()

			PositionObjectModule:PositionObject(sidesSelected, objectToClone)

			-- Set selection to object cloned for efficiency
			table.insert(newSelection, objectToClone)

			Selection:Set(newSelection)

			-- Remove from table so multiple objects don't get selected
			table.remove(newSelection, 1)

			ChangeHistoryService:SetWaypoint("Positioned the selected object")

			PreviewPositionObjectModule:PreviewObject(objectToClone, sidesSelected)
		end

	elseif #selectedObject > 1 then
		warn("Cannot select more than one object")

	elseif #selectedObject < 1 then
		warn("Select at least one object")	
	end	
end

-- Buttons Action Connections

QuickBuildMainGuiButton.MouseButton1Click:Connect(function()
	onQuickBuildButtonClicked()
end)

-- X Position Buttons
quickBuildMainGuiClonePositiveButtonX.MouseButton1Click:Connect(function()
	onPositionButtonClicked("X", "Positive", quickBuildMainGuiClonePositiveButtonX, ColorsModule.colors["ButtonSelectedColor"])
end)

quickBuildMainGuiCloneNegativeButtonX.MouseButton1Click:Connect(function()
	onPositionButtonClicked("X", "Negative", quickBuildMainGuiCloneNegativeButtonX, ColorsModule.colors["ButtonSelectedColor"])
end)

-- Y Position Buttons
quickBuildMainGuiClonePositiveButtonY.MouseButton1Click:Connect(function()
	onPositionButtonClicked("Y", "Positive", quickBuildMainGuiClonePositiveButtonY, ColorsModule.colors["ButtonSelectedColor"])
end)

quickBuildMainGuiCloneNegativeButtonY.MouseButton1Click:Connect(function()
	onPositionButtonClicked("Y", "Negative", quickBuildMainGuiCloneNegativeButtonY, ColorsModule.colors["ButtonSelectedColor"])
end)

-- Z Position Buttons
quickBuildMainGuiClonePositiveButtonZ.MouseButton1Click:Connect(function()
	onPositionButtonClicked("Z", "Positive", quickBuildMainGuiClonePositiveButtonZ, ColorsModule.colors["ButtonSelectedColor"])
end)

quickBuildMainGuiCloneNegativeButtonZ.MouseButton1Click:Connect(function()
	onPositionButtonClicked("Z", "Negative", quickBuildMainGuiCloneNegativeButtonZ, ColorsModule.colors["ButtonSelectedColor"])
end)

Enable the PluginDebugger in studio fille > Studio Settings

Then restart roblox studio and check under PluginDebugService
image

image
Here

What line is even erroring? I looked at line 5 and found


Just to debug:

print("Script: ", script)
for _, child in ipairs(script:GetChildren()) do
     print("Child:", child)
end

Hmm what I found is very strange, there are multiple copies of my plugin,
image

I think I remember because I saved my plugin 3 different times in different files but now I only need the 3rd one. How would I be able to do that?

user_Main.lua is a completly different plugin it has no children check your Plugin folder

1 Like

I have 2 old copies of my plugin still in there user_main and user_QuickBuild.lua
I only need user_QuickBuild.rbxmx, how would I delete the other two?