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

Check for boolvalue to unlock a door not working?

My code is a followup to a basic admin command I made. Chefs can use a !unlock command with the argument being user, and it will remove a forcefield for the player. What I have done so far is making a script that gives each player a boolvalue titled "forcefield" when they join that is automatically set to true. The unlock command sets the target user's forcefield to false. What I want is when a player touches the door, it checks if their boolvalue is FALSE, and if it is false it lets the player through by turning off cancollide. It is not working though. (The script is inside of the door)

local door = script.Parent

local function dothis(otherPart)
	if otherPart.Parent.forcefield.Value == false then
		script.Parent.CanCollide = false
		print("permission")
	else
		print("no permission")
	end
end

door.Touched:Connect(dothis)

Keep in mind I did check the command's code and the "on join script"'s code and they both working fine. The only hang up is the doors script.

1 answer

Is you're command script a Client/Local script? If so, use RemoteEvents to make the BoolValue go false in the Server. This is because the BoolValue is only being changed to the client (player's device) and not to all players and the server. I also recommend making your door script in the Client.

Client:

-- in your !unlock command
local RemoteEvent = game:GetService("ReplicatedStorage"):WaitForChild("RemoteEvent") -- this won't work unless you created a RemoteEvent inside ReplicatedStorage

RemoteEvent:FireServer(false)

Server:

-- inside ServerScriptService
local RemoteEvent = game:GetService("ReplicatedStorage").RemoteEvent


local OnServerEvent = function(player, bool) -- the function will run if the client script used RemoteEvent:FireServer()
	local character = player.Character or player.CharacterAdded:Wait() -- created a variable of the player's character
	local forcefield = character:FindFirstChild("forcefield") -- the forcefield BoolValue

	if forcefield ~= nil then -- checks if player has the forcefield BoolValue
		forcefield.Value = bool
	else -- if no forcefield
		local newValue = Instance.new("BoolValue", character)
		newValue.Name = "forcefield"
		newValue.Value = true
		
		OnServerEvent(player, bool) -- retries
	end
end

RemoteEvent.OnServerEvent:Connect(OnServerEvent)

Note: This answer only applies if your command script is a Client script.

(Client scripts can only be used inside StarterPlayerScripts, StarterCharacterScripts (Character), StarterGui, StarterPack (Tools), and ReplicatedFirst. They are also known as Local Scripts. Their old icon has a person's face and the new icon has a computer monitor in it.) Learn more: Documentation Fandom Wiki

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