Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

Why won't this place?

My tool that places a shield doesn't work. The output shows no relative error whatsoever. It works in Studio, but not the in game. I have tried switching it from a script, to a localscript, but that only caused irrelevant errors (ServerStorage is not a valid member of DataModel(game)). Here is my code:

tool = script.Parent
db = true
r = 0
angle = 0
eq = false
player = tool.Parent.Parent 
	tool.Equipped:connect(function(mouse)
		eq = true
	
	mouse.Icon = "rbxasset://textures\\GunCursor.png"
	mouse.Button1Down:connect(function()
		if db and eq then
			db = false
			tool.Name = "[Shield; " .. angle .. "; Recharging]"
			mouse.Icon = "rbxasset://textures\\GunWaitCursor.png"
			local torso = tool.Parent:FindFirstChild("Torso")
			local shield = game.ServerStorage.Shield:Clone()
			shield.Parent = game.Workspace
			shield.Name = "Shield" .. r
			r = r + 1
			shield:SetPrimaryPartCFrame(CFrame.new(torso.CFrame.x, torso.CFrame.y - 3, torso.CFrame.z + 3) * CFrame.Angles(0, angle, 0) )
			game:GetService("Debris"):AddItem(game.Workspace:FindFirstChild(shield.Name), 60)
	
			wait(120)
			db = true
			tool.Name = "[Shield; ".. angle .. "; Ready]"
			mouse.Icon = "rbxaset://textures\\GunCursor.png"
		end
			mouse.KeyDown:connect(function(key)
		if key == "r" and db then
				
			if angle == 0 then
				angle = 90
			elseif angle == 90 then
				angle = 180
			elseif angle == 180 then
				angle = 0
			end
			
			tool.Name = "[Shield; " .. angle .. "; Ready]"
		
		end
	end)
	end)
end)
tool.Unequipped:connect(function()
		eq = false
	end)

Please help. (As far as I know,) There is absolutely no reason for it to not work.

1 answer

It works in studio because when you test something out there, you are both the server and the client.

In online mode, tools should use localscripts. Thus, the errors you got were not irrelevant, but an explanation of what you need to change.

ex, you got the error "ServerStorage is not a valid member of DataModel". This is because the clients don't receive ServerStorage. You need to move the Shield to ReplicatedStorage and have your script be a localscript and have it access the shield from ReplicatedStorage.

Notably, if you have FilteringEnabled, your script will need to be separated into a LocalScript and a Script with a RemoteEvent. The LocalScript would tell the Script when the player wants to activate a shield; the Shield would make sure that player is allowed to do that and - if so - activate the shield for that player. In this case, it's fine to keep the Shield in ServerStorage.

This discussion is preserved as it was. New answers, comments, and votes are closed.