This script is inside a part. And when you touch without a ForceField you lose 100 health. (There is a shop where you can buy more health. That's why you lose 100 health instead of just setting health to 0) And if you touch it with a ForceField, you're supposed to not lose any health and have a 25% chance of getting 100 points.
debounce = false script.Parent.Touched:connect(function(hit) if not hit then return true elseif not hit.Parent then return true end local h = hit.Parent:findFirstChild("Humanoid") local ff = hit.Parent:FindFirstChild("ForceField1"),hit.Parent:FindFirstChild("ForceField2"),hit.Parent:FindFirstChild("ForceField3"),hit.Parent:FindFirstChild("ForceField4") local nff1 = hit.Parent:FindFirstChild("ForceField1",false) local nff2 = hit.Parent:FindFirstChild("ForceField2",false) local nff3 = hit.Parent:FindFirstChild("ForceField3",false) local nff4 = hit.Parent:FindFirstChild("ForceField4",false) local p = hit.Parent:findFirstChild("Grass"),hit.Parent:findFirstChild("Rock") if h then if ff then print (hit.Parent)--Player local points = game.Players:GetPlayerFromCharacter(hit.Parent):WaitForChild("Points") if hit.Parent.RocksLeft.Value ~= 0 then hit.Parent:WaitForChild("RocksLeft").Value = hit.Parent.RocksLeft.Value - 1 else ff:Destroy() end local var1 = 1 local var2 = math.random(1,4) if var2 == var1 then points.Value = points.Value + 100 end script.Parent:Destroy() elseif nff1 or nff2 or nff3 or nff4 then if debounce == false then debounce = true h.Health = h.Health - 100 print 'rip' script.Parent:Destroy() end wait(.5) debounce = false end elseif p then local var = math.random(1,3) if var == 1 then script.Parent:Destroy() end end end)
The problem is that when you touch it with a ForceField you loose 100 health, and when you touch it without a ForceField you don't lose any health.
First thing I see is that you are checking if a tuple
is true in your if statement.
Second I believe that you are using the second argument in the FindFirstChild
method wrong. The second argument specifies whether to search recursively or not.(It defaults to false)
I created a function to make sure that we find all possible forcefields.
local debounce = false function FindFF(Char) local T = {} for _,n in pairs(Char:GetChildren()) do if n:IsA("ForceField") then table.insert(T,n) end end return T end script.Parent.Touched:connect(function(hit) local char = hit.Parent local h = char:FindFirstChild("Humanoid") local ff = FindFF(char) local p = char:FindFirstChild("Grass") or char:FindFirstChild("Rock") if h then local rocks = char:WaitForChild("RocksLeft") if #ff > 0 then --If there is more than one forcefield local points = game.Players:GetPlayerFromCharacter(char):WaitForChild("Points") if rocks.Value > 0 then rocks.Value = rocks.Value - 1 else --To only destroy one forcefield do: --ff[1]:Destroy() --To remove all forcefields to: --[[ for _,n in pairs(ff) do n:Destroy() end --]] end if math.random(1,4) == 1 then points.Value = points.Value + 100 end script.Parent:Destroy() else if debounce == false then debounce = true h.Health = h.Health - 100 print 'rip' script.Parent:Destroy() wait(.5) debounce = false end end elseif p then if math.random(1,3) == 1 then script.Parent:Destroy() end end end)