Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Script isn't updating from bool value?

Asked by 5 years ago
Edited by User#24403 5 years ago

Hello,

I'm making an alarm script, however, the settings will not update from the settings folder and bool value setup to tell the script if the normal alarm is on, or the gas alarm is on.

```lua while true do

wait(0.1)

if game.Workspace.Settings.Alarms.Valu e== true then
    wait(0.1)
    script.Parent.BottomLight.Enabled = true
    script.Parent.TopLight.Enabled = true
    script.Parent.Spinner.Disabled = false
else
    wait(0.1)
    script.Parent.BottomLight.Enabled=false
    script.Parent.TopLight.Enabled=false
    script.Parent.Spinner.Disabled=true
    script.Parent.Orientation = Vector3.new(90, -90, 0)

    if game.Workspace.Settings.Gas.Value == true then
        wait(0.1)
        script.Parent.Parent.Lamp.BrickColor = BrickColor.new("Really blue")

        script.Parent.TopLight.Color = Color3.new(0, 0, 255)

        script.Parent.BottomLight.Color = Color3.new(0, 0, 255)
        wait(0.1)
        script.Parent.Orientation = Vector3.new(90, -90, 0)
        script.Parent.BottomLight.Enabled = true
        script.Parent.TopLight.Enabled = true
        workspace.Settings.Alarms.Value = false
    else 
        if game.Workspace.Settings.Gas.Value == false then
            wait(0.1)
            script.Parent.Parent.Lamp.BrickColor = BrickColor.new("CGA brown")
            script.Parent.TopLight.Color = Color3.new(170, 85, 0)
            script.Parent.BottomLight.Color = Color3.new(170, 85, 0)
            script.Parent.BottomLight.Enabled = false
            script.Parent.TopLight.Enabled = false
            script.Parent.Orientation = Vector3.new(90, -90, 0)

        end
    end
end

end ```

0
Where is the bool value located and is this script local? Gameplay28 139 — 5y
0
No, this script is server, and the bool value is in workspace > Settings. User#26676 0 — 5y
0
put it in a code block this time LoganboyInCO 150 — 5y
0
I better be getting compensation for fixing your unindented code. User#24403 69 — 5y

1 answer

Log in to vote
2
Answered by 5 years ago
Edited 4 years ago

Ok, I see two main issues with your script.

  1. You don't use any variables
  2. You use a while loop instead of the useful events Roblox has provided you with

Your bug is probably stemming from the second issue that I pointed out, but solving the first issue can make your life as a programmer so much easier, and your programs could become more efficient as a result of using variables.


Let's dive right in! I notice that you use script.Parent a significant number of times. Do your hands never get tired? There's a solution that everyone knows about, but never use. It's called a variable. Now, the issue I notice a lot is that YouTubers and tutorials explain how to use a variable, but never when. As a general rule, if you're writing the same code twice, it should be in a variable or a function depending on what you are doing. In your case, you can make a variable, such as par(which would stand for parent) and use that instead of script.Parent. Once you create the variable, you can save yourself some typing time by using Ctrl + h to replace all occurrences of script.Parent with your variable name (which was par in my example).


Ok, on to fixing the actual issue. You're using a while loop to detect changes, which is not optimal nor is it recommended by any experienced programmer on Roblox. The reason it's not recommended is that there are two ways that allow you to detect changes with little to no work. They are Changed and GetPropertyChangedSignal("PropertyName"). Here's an example with both in use:

local boolVal = Instance.new("BoolValue")
boolVal.Value = false
-- first way:
boolVal.Changed:Connect(function()
    print(boolVal.Value)
end
boolVal.Value = true
-- output --> 'true'

-- other (I recommend this one) way:
boolVal:GetPropertyChangedSignal("Value"):Connect(function()
    print(boolVal.Value)
end
boolVal.Value = false
-- not output because the value did not change
boolVal.Value = true
-- output --> 'true'

I'm assuming you can figure it out from here.


If you use these methods and it still doesn't work, then it's probably because you are making the changes manually from the client, and the server cannot detect those changes (even in studio) because of filtering enabled. The way to fix this for testing is to click the button in studio that says current server (or something like that) so that you can make the changes from the server. Or, you can write a different script to make the changes in order to test.


One final note: I noticed that the indentation in your script was pretty poor. I suggest indentation because it improves readability and ease in debugging. You can read more on that here.


I hope this helps! If you have any additional questions, feel free to leave them in the comment section below.

0
My discussion about script.Parent was an example. I encourage variables for your other repeated code as well. Roblox has already made a global variable 'workspace' for your convenience. You can use that instead of game.Workspace. User#26971 0 — 5y
Ad

Answer this question