Hello, i have this script, and for some reason, the Debris for the explosion and fire fires multiple times and i only want it to do it once
bullet.Touched:Connect(function(hit)
if hit.Name == "Terrain" then
local FireDebris = game.ReplicatedStorage.FireRelease.FireDebris:Clone() --fire
FireDebris.Parent = workspace
FireDebris.CFrame = bullet.CFrame
FireDebris.Anchored = true
Debris:AddItem(FireDebris, 5)
local Explosion = game.ReplicatedStorage.FireRelease.ExplosionParticle:Clone() --/explosion
Explosion.Parent = workspace
Explosion.CFrame = bullet.CFrame
Explosion.Anchored = true
Explosion.ParticleEmitter:Emit(1)
Debris:AddItem(Explosion, 1)
bullet:Destroy()
print("hitterraim")
elseif hit:IsA("BasePart") then
local FireDebris = game.ReplicatedStorage.FireRelease.FireDebris:Clone()
FireDebris.Parent = workspace
FireDebris.CFrame = bullet.CFrame
FireDebris.Anchored = true
Debris:AddItem(FireDebris, 5)
bullet:Destroy()
end
local conn
conn = bullet.Touched:Connect(function(hit)
when the bullet touches smth you do conn:Disconnect inside the if statements.
1 Like
Uhhh, how would the exactly work?
1 Like
JodhaAT
(JodhaAT)
November 16, 2022, 12:33am
#4
you should probably implement this in the script
Hi devs! Here’s a quick overview of a new collision property for BaseParts.
BasePart.CanTouch lets your determine if the part will trigger Touched /TouchEnded events on other BaseParts with TouchTransmitters.
All BaseParts have CanTouch set to True by default.
A BasePart's Touched or TouchEnded event will only fire if otherPart has CanTouch set to True.
You cannot set up a touch event on a BasePart that has CanTouch set to False. Trying to do so will throw an error. If you set CanTouch to Fals…
This makes so that the touch event doesnt fire multiple times. Put the conn:Disconnect()
below both bullet:Destroy()
lines.
I dont know if its just me, but it doesnt seem that efficient.
I also have no idea how this works
1 Like
The CanTouch property just makes if the part’s .Touched event works or not. (if CanTouch is true then the part’s .Touched event will work, if CanTouch is not true then the part’s .Touched event wont work.) btw correct me if i got something wrong
JodhaAT
(JodhaAT)
November 16, 2022, 12:37am
#9
try this
bullet.Touched:Connect(function(hit)
bullet.CanTouch = false
if hit.Name == "Terrain" then
local FireDebris = game.ReplicatedStorage.FireRelease.FireDebris:Clone() --fire
FireDebris.Parent = workspace
FireDebris.CFrame = bullet.CFrame
FireDebris.Anchored = true
Debris:AddItem(FireDebris, 5)
local Explosion = game.ReplicatedStorage.FireRelease.ExplosionParticle:Clone() --/explosion
Explosion.Parent = workspace
Explosion.CFrame = bullet.CFrame
Explosion.Anchored = true
Explosion.ParticleEmitter:Emit(1)
Debris:AddItem(Explosion, 1)
bullet:Destroy()
print("hitterraim")
elseif hit:IsA("BasePart") then
local FireDebris = game.ReplicatedStorage.FireRelease.FireDebris:Clone()
FireDebris.Parent = workspace
FireDebris.CFrame = bullet.CFrame
FireDebris.Anchored = true
Debris:AddItem(FireDebris, 5)
bullet:Destroy()
end
Thats one of the most simple and effective ways try it, trust me, the CanTouch method also works.
local connection
connection = bullet.Touched:Connect(function(hit)
if hit.Name == "Terrain" then
-- Stuff
connection:Disconnect()
elseif hit:IsA("BasePart") then
-- Stuff
connection:Disconnect()
end
end)
Wait… so basically this is the replacement for the “conn:Disconnect()” method? Thanks bro
yeah, i did try it, didnt work
1 Like
Show me the output, also you didn’t give much details about the script itself and what it is supposed to do.
Oh yeah, sorry about that, i eneded up finding out taht it was a problem with my particle not the script.
Blafert
(Blafert)
November 16, 2022, 8:42am
#15
This is no longer the easiest implementation of this method; one can now use :Once instead of :Connect.
But then it will never work again, which may not be intended behavior. I would recommend a debounce (so using CanTouch = true/false…). The debounce can also be applied per touched part using dictionaries, if you want a player not to block the touch event for another player for example.
1 Like
Add a debounce asasasasaasasa saa
here have a debounce
local Debounce = false
urpart.Touched:Connect(function()
if not Debounce then
Debounce=true
--urcodehere
end
end)
1 Like
Surprisingly only the last 3 posts mention using a debounce, but yea a debounce should work for you
local debounce = false
bullet.Touched:Connect(function(hit)
if debounce == false then
debounce = true
if hit.Name == "Terrain" then
local FireDebris = game.ReplicatedStorage.FireRelease.FireDebris:Clone() --fire
FireDebris.Parent = workspace
FireDebris.CFrame = bullet.CFrame
FireDebris.Anchored = true
Debris:AddItem(FireDebris, 5)
local Explosion = game.ReplicatedStorage.FireRelease.ExplosionParticle:Clone() --/explosion
Explosion.Parent = workspace
Explosion.CFrame = bullet.CFrame
Explosion.Anchored = true
Explosion.ParticleEmitter:Emit(1)
Debris:AddItem(Explosion, 1)
bullet:Destroy()
print("hitterraim")
elseif hit:IsA("BasePart") then
local FireDebris = game.ReplicatedStorage.FireRelease.FireDebris:Clone()
FireDebris.Parent = workspace
FireDebris.CFrame = bullet.CFrame
FireDebris.Anchored = true
Debris:AddItem(FireDebris, 5)
bullet:Destroy()
end
end
end)
1 Like
Oh i didnt know about that, thanks for the information, also, i said “one of” the most simple and effective ways, not the most simple and effective way