What you are doing here is constantly waiting for the mouse to hover over grass.
Every moment that the mouse hovers on grass, you say "OKAY, START LISTENING FOR MOUSE CLICKS" (line 07). These will add up and all happen when you click (which is why you are getting many deleted at once).
It's also why you are deleting other objects, since the deleting function doesn't actually check that the target exists and is called "Grass"
That is wrong.
Instead, you wait for a mouse click, and check THEN delete that target.
mouse = game.Players.LocalPlayer:GetMouse()
mouse.Button1Down:connect(function()
if mouse.Target ~= nil then
if mouse.Target.Name == "Grass" then
print'grass'
mouse.Target:Destroy()
end
end
end
If you did want to structure it the way you had with a while loop, it would look like this:
local mouseClick = false;
mouse.Button1Down:connect(function()
mouseClick = true;
end);
function update()
local target = mouse.Target;
if mouseClick then
if target and target.Name == "Grass" then
target:Destroy()
end
end
mouseClick = false;
end
while wait() do
update()
end
Or it could look like this:
function update()
mouse.Button1Down:wait();
local target = mouse.Target;
if target and target.Name == "Grass" then
target:Destroy();
end
end
while true do
update()
end