Hi!
I got a Tool that I want to keep swinging while the left mouse button is down. I've tried following the UserInputService on the wiki and its confusing me. How would I incorporate this service into ensuring the Player's tool keeps swinging as long as the left mouse button is down? I reverted my script back to where it works fine with multiple clicks.
Local Script 1
local tool = script.Parent
local event = tool:WaitForChild("RemoteEvent")
event.OnClientEvent:connect(function(...)
local tuple = {...}
if tuple[1] == "RunAnimation" then
local anim = tool:FindFirstChild(tuple[2])
if anim and humanoid then
local loadedanim = humanoid:LoadAnimation(anim)
if loadedanim then
loadedanim:Play()
if themouse then
themouse.Icon = "rbxasset://textures\\GunWaitCursor.png"
wait(1)
themouse.Icon = "rbxasset://textures\\GunCursor.png"
end
end
end
end
end)
tool.Equipped:connect(function(mouse)
themouse = mouse
humanoid = tool.Parent:FindFirstChild("Humanoid")
if humanoid then
local anim = tool:FindFirstChild("IdleAnim3")
if anim and humanoid then
if loadedidleanim then
loadedidleanim:Stop()
end
loadedidleanim = humanoid:LoadAnimation(anim)
if loadedidleanim then
loadedidleanim:Play()
end
end
local anim = tool:FindFirstChild("EquipAnim")
if anim and humanoid then
local loadedanim = humanoid:LoadAnimation(anim)
if loadedanim then
loadedanim:Play()
end
end
end
if themouse then
themouse.Icon = "rbxasset://textures\\GunCursor.png"
end
end)
tool.Unequipped:connect(function()
if loadedidleanim then
loadedidleanim:Stop()
end
end)
Local Script 2 slightly abbreviated:
local plr = game.Players.LocalPlayer
local mouse = plr:GetMouse()
local tool = script.Parent
local Damage = 1
local coolDown = 0.5
local range = 10
local bin = true
function isEquipped()
if tool.Parent.Name ~= "Backpack" then
return true
else
return false
end
end
mouse.Button1Down:connect(function()
local tor = plr.Character.UpperTorso
if isEquipped() and bin then
local target = mouse.Target
if target.Parent.Name == NAME then
if (target.Position-tor.Position).magnitude <= range then
local Selec = Instance.new("SelectionBox")
Selec.Adornee = target
Selec.Color3 = Color3.new(0,1,1)
Selec.Parent = target
Selec:Destroy()
end
end
end
end)
Server Script:
local tool = script.Parent
local speedboost = 1.5
local damage = 0
local swingtime = .5
local combowindow = .5
local debris = game:GetService("Debris")
local handle = tool:WaitForChild("Handle")
local event = tool:WaitForChild("RemoteEvent")
local slashsound = handle:WaitForChild("SlashSound")
local overheadsound = handle:WaitForChild("OverheadSound")
local lungesound = handle:WaitForChild("LungeSound")
local lastclick = tick()
local combo = 0
local hithumanoids = {}
handle.Touched:connect(function(hit)
local humanoid = hit.Parent:FindFirstChild("Humanoid")
if humanoid then
local TargetPlayer = game.Players:GetPlayerFromCharacter(humanoid.Parent)
if equipped and character and humanoid and humanoid.Health > 0 and hit and not hit:isDescendantOf(character) then
if humanoid and humanoid.Health > 0 and not hithumanoids[humanoid] and (TargetPlayer and TargetPlayer.TeamColor ~= player.TeamColor or not TargetPlayer)
then
hithumanoids[ humanoid] = true
for _, v in pairs( humanoid:GetChildren()) do
if v and v.Name == "creator" then
v:remove()
end
end
local tag = Instance.new("ObjectValue")
tag.Name = "creator"
tag.Value = player
debris:AddItem(tag, 3)
tag.Parent = humanoid
humanoid:TakeDamage(damage * (combo + 1))
else
end
end
end
end)
tool.Activated:connect(function()
local clickdelta = tick() - lastclick
if clickdelta > swingtime then
lastclick = tick()
hithumanoids = {}
if clickdelta < swingtime + combowindow then
combo = (combo + 1) % 3
else
combo = 0
end
if player then
if combo == 0 then
event:FireClient(player, "RunAnimation", "SlashAnim2")
slashsound:Play()
elseif combo == 1 then
event:FireClient(player, "RunAnimation", "ThrustAnim2")
overheadsound:Play()
elseif combo == 2 then
event:FireClient(player, "RunAnimation", "OverheadAnim2")
lungesound:Play()
end
end
end
end)
tool.Equipped:connect(function()
equipped = true
lastclick = tick()
combo = 0
character = tool.Parent
player = game.Players:GetPlayerFromCharacter(character)
humanoid = character:FindFirstChild("Humanoid")
if humanoid then
humanoid.WalkSpeed = humanoid.WalkSpeed * speedboost
else
character = nil
end
end)
tool.Unequipped:connect(function()
equipped = false
if humanoid then
humanoid.WalkSpeed = humanoid.WalkSpeed / speedboost
end
character = nil
humanoid = nil
end)
How would I incorporate this service? Thanks!

3 comments
Turn on repeat
Can you elaborate more please? I've not seen this used for UserInputService.
OnaKat may be referring to enabling Loop for you animation. If you play the animation through Button1Down then it will continue forever. Just wait for the Button to go up and turn off the animation.