local Itemused = script.Parent.Itemused I’m assuming this is referencing a boolValue in your model/item/whatever, in which case you should be using this instead: local Itemused = script.Parent.Itemused.Value this is because Itemused is a reference to the boolValue object, when in reality you want the boolvalue’s Value, which is the actual boolean.
References to objects are considered truthy when they exist, causing your current problem.
the itemused is basically another script that you can toggle to have more than one use, so instead of 1 use you can turn it into 2 use or 3 use (its also a number value)
My apologies, I should stop attempting to help late night.
However, the last sentence at the end of my post is still probably what you’re looking for:
References to objects are considered truthy when they exist, causing your current problem.
if Itemused is a script, then even if Value doesn’t exist, trying to check for it will (likely) still return truthy values.
If you’ve got your script set up where Value is a local inside the Itemused script, that’s not something that’s possible. boolValue or intValue objects would be a simple way around this problem.
However, keep in mind cheaters can very likely alter this value as anything that is client-replicated (such as anything part of an in-hand tool) is something they can touch.
Are you editing the IntValue to change the result desired?
Alternatively, are you making sure the change is being replicated properly? if the IntValue is on the server then any scripts on the client cannot alter it.