Hello, I have been making a punch script (For a fighting game) and so far it has went pretty well, but there's one problem, and that is that if you punch an enemy, sometimes it takes multiple hits, the player will be unable to punch, there are no error messages, and all I know is that it wont turn Hitting.Value to false. Everything else works fine. The layout for items you need is listed here:
LocalScript (Inside of Starter Player Scripts, Parents a animation)
local UserInputService = game:GetService("UserInputService") local function onInputEnded(inputObject, gameProcessedEvent) -- First check if the 'gameProcessedEvent' is true -- This indicates that another script had already processed the input, so this one can be ignored if gameProcessedEvent then return end -- Next, check that the input was a keyboard event if inputObject.UserInputType == Enum.UserInputType.Keyboard then print("A key was released: " .. inputObject.KeyCode.Name) if inputObject.KeyCode.Name == script.Parent.Parent.Backpack.Keys.PunchKey.Value then if script.Parent.Parent.Backpack.UsingAbility.Value == false and script.Parent.Parent.Backpack.Hitting.Value == false then if game.Players.LocalPlayer.Backpack.Mana.Value > 10 then print("ability") local Anim =game.Players.LocalPlayer.Character.Humanoid:LoadAnimation(script:WaitForChild("PunchAnim",1)) print("AnimLoaded") Anim:Play() game.ReplicatedStorage.Special:FireServer("Punch") print("using") wait(0.4) Anim:Stop() wait(0.35) print("finished") end end end end end UserInputService.InputEnded:Connect(onInputEnded)
Script (Inside of Server Script Service)
function ability(user, move) if move == "Punch" then user.Backpack.Mana.Value = user.Backpack.Mana.Value - 10 print(move.."was used by"..user.Name) local char = user.Character user.Backpack.UsingAbility.Value = true char.RightHand.Touched:Connect(function(hit) if user.Backpack.Hitting.Value == false then print("slap") if hit.Name ~= "Shader" or hit.ClassName ~= "Accessory" then user.Backpack.Hitting.Value = true hit.Parent.Humanoid.Health = hit.Parent.Humanoid.Health - 10 elseif hit.Name == "Shader" or hit.Name == "Accessory" then hit.Parent.Parent.Humanoid.Health = hit.Parent.Parent.Humanoid.Health - 10 user.Backpack.Hitting.Value = true end end end) print("Donehitting") wait(0.75) user.Backpack.Hitting.Value = false print("falsed hitting") user.Backpack.UsingAbility.Value = false end end game.ReplicatedStorage.Special.OnServerEvent:Connect(ability)
There is a RemoteEvent named special in Replicated Storage In Starter Pack there are these Values: -Mana (Int) -UsingAbility (Bool) -Hitting (Bool) I also used a cel shader, which is why it has to detect for "Shader" I am a beginner at scripting, so it might be messy, sorry!