When the player clicks down the button and holds it, the damage will continue to happen when they are being clicked over. The problem is, the script only damages the player once
player = game.Players.LocalPlayer
character = player.Character
gun = character:FindFirstChild("Rifle")
mouse = player:GetMouse()
auto = false
function getModel(raw)
for _, child in pairs(workspace:GetChildren()) do
--calling pairs is barely any slower than using next directly, plus it's easier to read.
if raw:IsDescendantOf(child) then
return child;
end;
end;
return nil; --this allows us to not use pcall
end;
mouse.Button1Down:connect(function()
auto = true
while auto do
if mouse.Target then
local model = getModel(mouse.Target)
if model and model:FindFirstChild("Humanoid") then
model.Humanoid.Health = model.Humanoid.Health - 15
wait(1)
end
mouse.Button1Up:connect(function()
auto = false
end)
end
end
end)

2 comments
The problem may be that mouse.Target shows the current mouse's target and changes even when the mouse isn't clicked so if you move it off the player it'll stop running.
The game freezes at the spot