So I'm trying to make a punching script that works with filtering enabled because of course, all my problems these days lie in FE. So, I made a script to where when you press e, it does a punch, it cycles through 4 different animations, and uses 4 different body parts with a touched event to do damage. It does damage, although I feel like it does a lot more than it should. After I punch, whenever someone touches the body part that did the punch, they get hurt, even after I'm done punching. I got it to work fine without FE, but now that I'm trying to use remote events and whatever, it's bugging out.
Server:
local punchingEvent = game.ReplicatedStorage:WaitForChild("Punching") local punch1wait = 0.5 local punch2wait = 0.5 local punch3wait = 0.5 local punch4wait = 0.5 punchingEvent.OnServerEvent:connect(function(player,bodyPart,punching,punchNumber) local char = game.Workspace:WaitForChild(player.Name) local stats = player:WaitForChild("Stats") local strengthf = stats:WaitForChild("Strength") local agilf = stats:WaitForChild("Agility") local jumpf = stats:WaitForChild("Jump") local strength = strengthf:WaitForChild("StrengthLevel") local agil = agilf:WaitForChild("AgilityLevel") local jump = jumpf:WaitForChild("JumpLevel") local dmg = true local db = false char:WaitForChild(bodyPart).Touched:connect(function(hit) if dmg == true and db == false then db = true hit.Parent.Humanoid:TakeDamage(strength.Value + math.random(10,15)) dmg = false if punchNumber == 1 then wait(punch1wait) elseif punchNumber == 2 then wait(punch2wait) elseif punchNumber == 3 then wait(punch3wait) elseif punchNumber == 4 then wait(punch4wait) end dmg = true db = false end end) end)
Client:
local player = game.Players.LocalPlayer local char = player.Character local stats = player:WaitForChild("Stats") local leaderstats = player:WaitForChild("leaderstats") local mouse = player:GetMouse() local inmotion = false local multiplier = char.Humanoid:WaitForChild("XP Multiplier") local running = script:WaitForChild("Running") local damage = false local db = false local remoteEvent = game.ReplicatedStorage.UpStats local punchingRemoteEvent = game.ReplicatedStorage:WaitForChild("Punching") local strength = stats:WaitForChild("Strength") local strengthlvl = strength:WaitForChild("StrengthLevel") local sxp = strength:WaitForChild("StrengthXp") local smax = strength:WaitForChild("StrengthMaxXp") local pushwaittime = 3 local agility = stats:WaitForChild("Agility") local agillvl = agility:WaitForChild("AgilityLevel") local axp = agility:WaitForChild("AgilXp") local amax = agility:WaitForChild("AgilMaxXp") local lungewaittime = 2.2 local jump = stats:WaitForChild("Jump") local jumplvl = jump:WaitForChild("JumpLevel") local jxp = jump:WaitForChild("JumpXp") local jmax = jump:WaitForChild("JumpMaxXp") local squatwaittime = 1.8 local stamStuff = player:WaitForChild("StaminaStuff") local stamina = stamStuff:WaitForChild("Stamina") local maxStam = stamStuff:WaitForChild("MaxStamina") local squatanim = "rbxassetid://2219181231" local lungeanim = "rbxassetid://2380575156" local pushanim = "rbxassetid://2219303213" local punch1 = "rbxassetid://2219184536" local punch2 = "rbxassetid://2219185342" local punch3 = "rbxassetid://2219186257" local punch4 = "rbxassetid://2219189003" local runAnimId = "rbxassetid://2394625968" local punch1wait = 0.5 local punch2wait = 0.5 local punch3wait = 0.5 local punch4wait = 0.5 -- Squat mouse.KeyDown:connect(function(key) if key == "c" then if inmotion == false and db == false then inmotion = true db = true local anim = Instance.new("Animation") anim.AnimationId = squatanim local squat = char.Humanoid:LoadAnimation(anim) squat.Priority = Enum.AnimationPriority.Action squat:Play() wait(squatwaittime) remoteEvent:FireServer("jump") squat:Stop() inmotion = false db = false end end end) -- Lunge mouse.KeyDown:connect(function(key) if key == "x" then if inmotion == false and db == false then inmotion = true db = true local anim = Instance.new("Animation") anim.AnimationId = lungeanim local lunge = char.Humanoid:LoadAnimation(anim) lunge.Priority = Enum.AnimationPriority.Action lunge:Play() wait(lungewaittime) remoteEvent:FireServer("agility") lunge:stop() inmotion = false db = false end end end) -- Pushup mouse.KeyDown:connect(function(key) if key == "z" then if inmotion == false and db == false then inmotion = true db = true local anim = Instance.new("Animation") anim.AnimationId = pushanim local pushanim = char.Humanoid:LoadAnimation(anim) pushanim.Priority = Enum.AnimationPriority.Action pushanim:Play() wait(pushwaittime) pushanim:Stop() remoteEvent:FireServer("strength") inmotion = false db = false end end end) -- Sprint mouse.KeyDown:connect(function(key) if key:byte() == 50 then if running.Value == false then if inmotion == false and stamina.Value >= 0 then local anim = Instance.new("Animation") anim.AnimationId = runAnimId runAnim = char.Humanoid:LoadAnimation(anim) runAnim.Priority = Enum.AnimationPriority.Action inmotion = true running.Value = true runAnim:Play() runAnim:AdjustSpeed((agillvl.Value*0.003+1.1)) char.Humanoid.WalkSpeed = agillvl.Value * 0.3 + 25 char.Humanoid.JumpPower = jumplvl.Value * 0.5 + 60 while running.Value == true and wait(0.1) do if stamina.Value > 0 then stamina.Value = stamina.Value - 1 elseif stamina.Value <= 0 then inmotion = false running.Value = false runAnim:Stop() char.Humanoid.WalkSpeed = 16 char.Humanoid.JumpPower = 50 break end end end elseif running.Value == true then inmotion = false running.Value = false runAnim:Stop() char.Humanoid.WalkSpeed = 16 char.Humanoid.JumpPower = 50 end end end) -- Punching local punching = false local count = 0 mouse.KeyDown:connect(function(key) if key == "e" and damage == false then local anim = Instance.new("Animation") if db == false and damage == false then if count == 0 then db = true anim.AnimationId = punch1 local punchanim = char.Humanoid:LoadAnimation(anim) punchanim.Priority = Enum.AnimationPriority.Action punchanim:Play() punchingRemoteEvent:FireServer("LeftHand",punching,1) damage = true wait(punch1wait) damage = false punchanim:Stop() count = 1 db = false punching = false elseif count == 1 then db = true anim.AnimationId = punch2 local punchanim = char.Humanoid:LoadAnimation(anim) punchanim.Priority = Enum.AnimationPriority.Action punchanim:Play() punchingRemoteEvent:FireServer("RightHand",punching,2) damage = true wait(punch2wait) damage = false punchanim:Stop() count = 2 db = false punching = false elseif count == 2 then db = true anim.AnimationId = punch3 local punchanim = char.Humanoid:LoadAnimation(anim) punchanim.Priority = Enum.AnimationPriority.Action punchanim:Play() punchingRemoteEvent:FireServer("LeftFoot",punching,3) damage = true wait(punch3wait) damage = false punchanim:Stop() count = 3 db = false punching = false elseif count == 3 then db = true anim.AnimationId = punch4 local punchanim = char.Humanoid:LoadAnimation(anim) punchanim.Priority = Enum.AnimationPriority.Action punchanim:Play() punchingRemoteEvent:FireServer("RightFoot",punching,4) damage = true wait(punch4wait) damage = false punchanim:Stop() count = 0 db = false punching = false end end punching = false end end)
Your script does not contain any errors, however you have literally looped the server.
Whenever you press it will change the variable to be able to attack, then you do not need to after touching the other player will set dmg = true
db = false
because in your script already it changes. If set this with touch player, start a loop
Also your waits after punching help give double damage, so I recommend you take it out.
Code tested in FE:
SERVER
local punchingEvent = game.ReplicatedStorage:WaitForChild("Punching") punchingEvent.OnServerEvent:connect(function(player,bodyPart,punching,punchNumber) local char = game.Workspace:WaitForChild(player.Name) local stats = player:WaitForChild("Stats") local strengthf = stats:WaitForChild("Strength") local agilf = stats:WaitForChild("Agility") local jumpf = stats:WaitForChild("Jump") local strength = strengthf:WaitForChild("StrengthLevel") local agil = agilf:WaitForChild("AgilityLevel") local jump = jumpf:WaitForChild("JumpLevel") local dmg = true local db = false char:WaitForChild(bodyPart).Touched:connect(function(hit) if dmg == true and db == false then db = true hit.Parent.Humanoid:TakeDamage(strength.Value + math.random(10,15)) dmg = false end wait(0.05) end) end)
Errors? tell-me on comments.