Basically, the gear script eliminates every decal one-by-one (I know how to assert, but I see potential problems doing so).
But, now and then, I get a "LocalScript:65: attempt to index field '?' (a nil value)" error while using the gear, and I was wondering if anyone could help me fix this. Thanks in advance.
sp = script.Parent spraypart = script.Parent.SprayPart cooldown = 2.1 spraysize = 5 range = 10 local debris = game:GetService("Debris") equipped = false check = true function onEquipped(mouse) if spraypart ~= nil and spraypart.Parent ~= nil then local weld = Instance.new("Weld") weld.Name = "SprayerWeld" weld.Part0 = spraypart weld.Part1 = sp.Handle -- correction term to account for average skew between physics update and heartbeat local HitPos = spraypart.Position --+ (-arrow.Velocity * (1/60)) --+ (arrow.CFrame.lookVector * .5) local CJ = CFrame.new(HitPos) local C0 = spraypart.CFrame:inverse() * CJ local C1 = sp.Handle.CFrame:inverse() * CJ weld.C0 = C0 weld.C1 = C1 weld.Parent = sp.Handle end equipped = true local plr = game.Players.LocalPlayer if mouse ~= nil and plr ~= nil then mouse.Button1Down:connect(function() local chr = sp.Parent if chr and check and mouse.Target ~= nil and mouse.TargetSurface ~= nil and sprayid > 0 then local surface = mouse.TargetSurface local t = chr:FindFirstChild("Torso") local h = chr:FindFirstChild("Humanoid") local animobject = sp:FindFirstChild("SprayPaint") if t and h and animobject then if h.Health > 0 then check = false local anim = h:LoadAnimation(animobject) if anim then anim:Play() sp.Handle.Sound:Play() end if spraypart ~= nil and spraypart.Parent ~= nil then spraypart.SprayEffect.Enabled = true end wait() for i = 1, #mouse.Target:GetChildren() do if mouse.Target:GetChildren()[i]:IsA('Decal') or mouse.Target:GetChildren()[i]:IsA('Texture') then repeat mouse.Target:GetChildren()[i].Transparency = mouse.Target:GetChildren()[i].Transparency + .1 wait(.1) until mouse.Target:GetChildren()[i].Transparency > 1 mouse.Target:GetChildren()[i].Transparency = 1 mouse.Target:GetChildren()[i].Texture = 'http://www.roblox.com/images/empty.png' end end end wait(cooldown) if spraypart ~= nil and spraypart.Parent ~= nil then spraypart.SprayEffect.Enabled = false end sp.Handle.Sound:Stop() check = true end end end) end end function onUnequipped() equipped = false end sp.Equipped:connect(onEquipped) sp.Unequipped:connect(onUnequipped)
Simple, set a variable that is the Mouse target.
Here, at
repeat mouse.Target:GetChildren()[i].Transparency = mouse.Target:GetChildren()[i].Transparency + .1 wait(.1) until mouse.Target:GetChildren()
if the user moved their mouse to be over nothing, the script would error, for Mouse.Target would be nil.
If you preemptively set a variable to equal the Mouse's target, then you can prevent this error.