Ok, so I was making a Lightsaber and I came upon this problem. Heres the code..
local remoteStorage = game:GetService("ReplicatedStorage"):WaitForChild("RemoteHandlers",3) function getRemotes(remoteName, remoteType) for i, v in pairs(remoteStorage:GetChildren()) do if v and v.Name == remoteName and v.ClassName == remoteType then return v end end warn("Remotes not found, nil will be returned") return nil end --LocalScript function OnEquipped(mouse) getRemotes("ColorSet","RemoteEvent"):FireServer(false,false,Tool.OuterBlade1,nil,nil,nil,Tool.Blade1,nil,nil,nil) --function setupColor(plr,isDouble,isDual,outer1,outer2,outer3,outer4,blade1,blade2,blade3,blade4) local idleAnim = Setting.Idle idleTrack = humanoid:LoadAnimation(idleAnim) idleTrack:Play() local BlockAnim = humanoid:LoadAnimation(Setting.Block) local function OnButton1Down() if get(player,boolCanAttack) == false then print("Cannot Attack") end if humanoid and boolCanAttack.Value == true and boolCanDamage.Value == false and Stunned.Value == false then if clicks == 1 then clicks = 2 else clicks = 1 end boolCanAttack.Value = false local attackAnimations = {Setting.Attack1,Setting.Attack2} local attackSound = {Handle.Slash1,Handle.Slash2} local attackAnim = humanoid:LoadAnimation(attackAnimations[clicks]) local sound = attackSound[clicks] attackAnim:Play() sound:Play() boolCanDamage.Value = true local attackRemote = getRemotes("attackRemote","RemoteEvent") attackRemote:FireServer(boolCanDamage.Value,boolCanAttack.Value,Setting.Damage.Value,hitBox,nil,nil,nil,false,false) --getDamage(player,canDamage,canAttack,damageValue,damagePart,damagePart2,damagePart3,damagePart4,isDual,isDouble) wait(Wait) boolCanDamage.Value = false if Stunned.Value ~= true then boolCanAttack.Value = true else boolCanAttack.Value = false end if boolBlocking.Value == false then idleTrack:Play() end end end -- Server Script ----------------Attacks function getDamage(player,canDamage,canAttack,damageValue,damagePart,damagePart2,damagePart3,damagePart4,isDual,isDouble) print(1000) local connection1 connection1 = damagePart.Touched:connect(function(hit) local ff = hit.Parent:FindFirstChild("Blocker") local hum = hit.Parent:FindFirstChild("Humanoid") print("Activated") if hum and canDamage == true and ff == nil then print("Attacked") canDamage = false hum:TakeDamage(damageValue) connection1:Disconnect() end if ff --[[and player.Block.Value > 0]] and player.CanAttack.Value == true and damagePart.Parent.Stunned.Value == false then canAttack = false canDamage = false print("how!") getRemotes("Stunner","RemoteEvent"):FireClient(player) local clashLight = damagePart.Parent.Blade1.ClashLight local sparks = damagePart.Parent.Blade1.Sparks clashLight.Enabled = true sparks.Enabled = true wait(.1) clashLight.Enabled = false sparks.Enabled = false connection1:Disconnect() end end) if isDual == true then local connection2 connection2 = damagePart2.Touched:connect(function(hit) local hum = hit.Parent:FindFirstChild("Humanoid") if hum and canDamage == true then canDamage = false hum:TakeDamage(damageValue) connection2:Disconnect() end end) end if isDouble == true then local connection3 connection3 = damagePart3.Touched:connect(function(hit) local hum = hit.Parent:FindFirstChild("Humanoid") if hum and canDamage == true then canDamage = false hum:TakeDamage(damageValue) connection3:Disconnect() end end) end if isDouble == true then local connection4 connection4 = damagePart4.Touched:connect(function(hit) local hum = hit.Parent:FindFirstChild("Humanoid") if hum and canDamage == true then canDamage = false hum:TakeDamage(damageValue) connection4:Disconnect() end end) end end getRemotes("attackRemote","RemoteEvent").OnServerEvent:Connect(getDamage)
Its a bit messy and thanks. The problem is as stated from the title. (The Attack function.) It will somehow store the number of times where the code is executed in the sabre and will just repeatedly be fired when touched multiple times when touched. Thanks!