The script is suppose to allow the player to simulate "shooting" and when there cursor goes over a player, they will take damage. the issue is, after a while of "shooting" i get this error attempt to index local 'raw' (a nil value)
Any solutions?
01 | player = game.Players.LocalPlayer |
02 | character = player.Character |
03 | gun = character:FindFirstChild( "Rifle" ) |
04 | mouse = player:GetMouse() |
05 | auto = false |
06 | function getModel(raw) |
07 | for _, child in pairs (workspace:GetChildren()) do |
08 | --calling pairs is barely any slower than using next directly, plus it's easier to read. |
09 | if raw:IsDescendantOf(child) then |
10 | return child; |
11 | end ; |
12 | end ; |
13 | return nil ; --this allows us to not use pcall |
14 | end ; |
15 |
Your problem is that when mouse.Target
is the skybox, it returns nil
. The simple fix is checking to make sure it isn't nil before carrying out with the code
Check line 9 to see what I've changed
01 | player = game.Players.LocalPlayer |
02 | character = player.Character |
03 | gun = character:FindFirstChild( "Rifle" ) |
04 | mouse = player:GetMouse() |
05 | auto = false |
06 | function getModel(raw) |
07 | for _, child in pairs (workspace:GetChildren()) do |
08 | --calling pairs is barely any slower than using next directly, plus it's easier to read. |
09 | if raw ~ = nil and raw:IsDescendantOf(child) then |
10 | return child; |
11 | end ; |
12 | end ; |
13 | return nil ; --this allows us to not use pcall |
14 | end ; |
15 |
Well, as seen in your question, you're indexing a nil value. The only thing I can think of making game.Players.LocalPlayer:GetMouse().Target
return nil is this script's implementation.
This script should be ran from a LocalScript, since LocalScripts are the only class that can invoke game.Players.LocalPlayer
and have it work correctly throughout servers.
Hope this helps! Comment if you need more assistance or a further explanation!