The script works perfectly but when you leave the zone and enter again, the mood.Entertainment.Value increases 2x faster and more than 100, when i leave and enter again, more fast and increases to infinite.
local debounce = false
local touching = {}
script.Parent.Touched:Connect(function(hit)
if hit.Parent:FindFirstChild("Humanoid") then
if script.Parent.Parent.Status.Value == true then
local player = game.Players:GetPlayerFromCharacter(hit.Parent)
local mood = game.ReplicatedStorage[player.Name.."'s Mood"]
if mood.Entertainment.Value < 100 and debounce == false then
debounce = true
touching[player.Name] = true
while mood.Entertainment.Value < 100 and touching[player.Name] do
wait(0.4)
mood.Entertainment.Value = mood.Entertainment.Value + math.random(1,2)
end
end
end
end
end)
script.Parent.TouchEnded:Connect(function()
debounce = false
touching[player.Name] = false
wait(1)
debounce = true
end)

4 comments
mood.Entertainment.Value = mood.Entertainment.Value + math.random(1,2) means everytime you touch it, it will increase itself by 1 or 2, you can do ood.Entertainment.Value = math.random(1,2) to make it either 1 or 2
TouchEnded isn't reliable.
Try making a system that uses "Region3". If you need help just ping me in chat
or Magnitude