This is my current script:
1 | local core = script.Parent |
2 | local health = script.Parent.health.Value |
3 |
4 | core.Touched:connect( function (s) |
5 | local p = game.Players:getPlayerFromCharacter(s.Parent.Parent) |
6 | if (s.Name = = "Handle" ) and (p.TeamColor = = BrickColor.new( "Bright red" )) then |
7 | health = health - 20 |
8 | end |
9 | end ) |
health is the IntValue that's a child of core, it's set at 5000.
Handle is the name of the brick of the sword that I'm using.
I would like it to only decrease health when the player with the sword is on the Bright red team.
Whenever I am testing it, the health value simply stays at 5000 and doesn't decrease, I don't get any errors related to the script in output...
Here, you're editing a variable that's stored inside your script, not the value property of the IntValue
object, that's why, when you decrease health, it doesn't impact the value of your IntValue
. Here's how to do it : change line 2 to this...
1 | local health = script.Parent.health |
And line 7 to this...
1 | health.Value = health.Value - 20 |
You need to find the Humanoid touched by the sword, then make a delay or everytime the sword is collided with the humanoid and it moves it will takes damage:
01 | local core = script.Parent |
02 | local health = core:FindFirstChild( "health" ) -- Check for the IntValue, don't get without checking, never! |
03 |
04 | core.Touched:connect( function (s) |
05 | local h = s.Parent:FindFirstChild( "Humanoid" ) |
06 | --Don't define an instance for a color |
07 | if (p.TeamColor = = "Bright red" ) then -- It calls the function automatically in your "core" variable |
08 | health.Value = health.Value - 20 |
09 | end |
10 | end ) |