What do you want to achieve? I have a Fireball that I want to damage the Player. I have some “Safe Seats” that protect the Player if he is sitting in them. There are other “Regular Seats” in the level that are NOT SAFE and should not protect the Player.
What is the issue? I made a script on the Fireball. When it hits a Player, it should check if the Player is in the specific safe seats. If it is not in a safe seat, either standing or sitting in some other regular seat, it should cause damage.
Everything works perfect if the player is standing. –Player takes damage.
However, it does not work if the Player is sitting anywhere, safe seat OR regular seat. Basically the Touched:Connect function never triggers if the Player is sitting. If you are in a safe seat, or a regular seat, it is the same – nothing happens, the function is simply not triggered.
What solutions have you tried so far? In my script I put a lot of Print commands to help identify the problem. If you are sitting anywhere (Safe or Not) Print(otherPart) never happens. This means that the function is never run if the player is sitting anywhere.
I’m a beginner and just learning. Thank you!! Code below:
local lava = script.Parent
local damage = 25
local DB = false
local function killPlayer(otherPart)
print(otherPart) --This never fires if the player is sitting anywhere, this is bad, an error
local humanoid = otherPart.Parent:FindFirstChild("Humanoid")
if (humanoid ~= nil) then
print("!!!!!!!!!!!!!!!!!!!!!!!!!I AM HUMAN!!!!!!!!!!!!!!!!!!!!!!")
if DB == false then
DB = true
print("!!!!!!!!!!!!!!!!!!!!!!!!!SEAT CHECK!!!!!!!!!!!!!!!!!!!!!!!")
print(humanoid.SeatPart)
if humanoid.SeatPart == game.Workspace.Sal.Body.Sal_Seat1 or
humanoid.SeatPart == game.Workspace.Sal.Body.Sal_Seat2 or
humanoid.SeatPart == game.Workspace.Sal.Body.Sal_Seat3 or
humanoid.SeatPart == game.Workspace.Sal.Body.Sal_Seat4 or
humanoid.SeatPart == game.Workspace.Sal.Body.Sal_Seat5 or
humanoid.SeatPart == game.Workspace.Sal.Body.Sal_Seat6 or
humanoid.SeatPart == game.Workspace.Sal.Body.Sal_Seat7 or
humanoid.SeatPart == game.Workspace.Sal.Body.Sal_Seat8 or
humanoid.SeatPart == game.Workspace.Sal.Body.Sal_Seat9 or
humanoid.SeatPart == game.Workspace.Sal.Body.Sal_Seat10 or
humanoid.SeatPart == game.Workspace.Sal.HeadMain.SeatHead or
humanoid.SeatPart == game.Workspace.Sal.Tail.SeatTail then
print("!!!!!!!!!!!!!!!!!!!!!!!!!Safe and Sitting on SAFE SEAT!!!!!!!!!!!!!!!!!!!!!!!") --This print never runs. This proves the function never fired.
else
humanoid:TakeDamage(damage)
local player = game:GetService("Players"):GetPlayerFromCharacter(otherPart.Parent)
OuchSFXEvent:FireClient(player)
print("Yellow Fireball has caused damage to Player.") --This works. Good!
wait(1)
end
DB = true
end
end
end
lava.Touched:Connect(killPlayer)
Please do not ask people to write entire scripts or design entire systems for you. If you can’t answer the three questions above, you should probably pick a different category.
Thanks for the suggestion CommanderBot. I removed the word “local” from the function. Therefore: “local function killPlayer(otherPart)”, now reads: “function killPlayer(otherPart)”
Unfortunately, it still behaves the exact same. Thank you for trying, though.
If anyone else has suggestions, I’d be very grateful. Thank you.
@PoliBlox, Yes, I have a huge hit box (over 100 studs). It moves with a tween and always passes over the player. It actually hurts the player if he is not sitting on something (this is good). However, when sitting on anything (not just the special safe seats) the damage does not work. See attached images.
@xendatro Thank you for running a test!! Interesting Touched event normally works with a seated character. I believe my function is entirely not firing. The reason I believe this is I have a bunch of Print commands in the script.
If the player is standing, very first line “Print(otherPart)” works, along with the rest of the script.
However, if the player is sitting (on the correct safe seats - or the incorrect other seats), very first line “Print(otherPart)” DOES NOT work. So nothing at all happens in my Output, on touch contact.
I’m going to see if I can get a video up in a few minutes.
I found another potential issue. It seems like you’re setting your debounce (DB) to true (which it already is) instead of false after it has hit a Humanoid. Though, this would still not explain why your function is entirely not firing.
@xendatro Thank you again, I’ll look closer at the debounce.
But, here is the promised video. First, the yellow fire ring comes. The player is standing so it hits the player - damage works. Next, the player sits in the wrong seats (RED dragon seats are not safe for YELLOW fire). The player should be damaged. However, sitting in the wrong seats still protects the player. Finally, the player stands again, and is hit by the third and final fire ring. It works, and damages the player.
Here is some interesting additional information. I have another DIFFERENT time in the game where the main script checks if all the players are sitting on the correct dragon. This is NOT triggered by a touched:connect event (like the problematic Fire Ring Script). This is just a function in my main script. But it works great!! It is basically the same as the Fire Ring, but without touch:connect. So I am thinking there is really something wrong with my touch:connect while sitting.
Thank you again for any help with this. See similar function below.
local function checkIfPlayerSitSplashy()--Seat check
for i,v in pairs (game.Players:GetPlayers()) do
if v.Character then
if v.Character.Humanoid.SeatPart == game.Workspace.Splashy.Body.Splashy_Seat1 or
v.Character.Humanoid.SeatPart == game.Workspace.Splashy.Body.Splashy_Seat2 or
v.Character.Humanoid.SeatPart == game.Workspace.Splashy.Body.Splashy_Seat3 or
v.Character.Humanoid.SeatPart == game.Workspace.Splashy.Body.Splashy_Seat4 or
v.Character.Humanoid.SeatPart == game.Workspace.Splashy.Body.Splashy_Seat5 or
v.Character.Humanoid.SeatPart == game.Workspace.Splashy.Body.Splashy_Seat6 or
v.Character.Humanoid.SeatPart == game.Workspace.Splashy.Body.Splashy_Seat7 or
v.Character.Humanoid.SeatPart == game.Workspace.Splashy.Body.Splashy_Seat8 or
v.Character.Humanoid.SeatPart == game.Workspace.Splashy.Body.Splashy_Seat9 or
v.Character.Humanoid.SeatPart == game.Workspace.Splashy.Body.Splashy_Seat10 or
v.Character.Humanoid.SeatPart == game.Workspace.Splashy.HeadMain.SeatHead or
v.Character.Humanoid.SeatPart == game.Workspace.Splashy.Tail.SeatTail then
else
--v.Character.Humanoid.Health = 0
v.Character.Humanoid:TakeDamage(damage)
OuchSFXEvent:FireClient(v)
end
end
end
end
One buggy thing about BasePart.Touched event is that if the part is anchored and is touching a part, it will not fire. Are you sure your lava or fireball is unanchored?
Also @SuperPizzaShark, are you sure your lava or fireball is unachored? Because if it is, then the Touched event will not fired due to its reliability on physics.
Okay, I’ve done some more experimentation, and I’ve found out a few pieces of information, the main piece being something that I have run into many times myself.
Let’s set up a scenario, part a and part b, both are anchored.
I have noticed in the past that when part a’s position is updated to be in contact with part b, the touched event does not fire (remember that they are both anchored). This led me to the conclusion that the physics system requires at least one of the two given parts to be moving “naturally” (through physics, such as like a falling part). However, in my scenario, since both parts are not moving naturally (they are anchored!) their respective touched events do not fire, even though they are placed within each other.
To translate this into your case, I assume you’re using some sort of artificial positioner that constantly updates the position of the lava part instance (such as a BodyVelocity or LinearVelocity). This implies that when the lava object meets a “naturally” non-moving part, the touched event will not fire. I tested this theory out and concluded that the result isn’t reliable. At some points the touched event fired, and at other times — without changing anything — the same event did not fire. This basically summarizes what @ItzMeZeus_IGotHacked just said.
In your case, the character is always moving while standing because of server-side animations. However, when the character sits I believe all of the parts come to a complete standstill. This would explain why the touched event does not fire while your character is sitting.
To confirm this, could you tell us if the dragon part(s) are being printed in the Touched event as well? I assume the dragon part(s) do not move, so they should not fire in the Touched event.
Edit: Some of this information is wrong. See below.
@Mystxry12 I’m a new programmer, so I don’t really know. However, I think the CanTouch allows the collision detection. I think the CanCollide, will just push the player, instead of passing over. The good news is it works when the player is standing. Thoughts? Thank you again!!
**edit, thank you notzeussz. We were typing the same thing!!