For my gun, I put in a trajectory block with hit.Parent but there is an error around line 35.
FYI the script is in ServerScriptService.
Error: ServerScriptService.MainScript:35: attempt to index field 'Parent' (a nil value)
The part being referred is the object being hit by the gun.
Also, I got the suggestion that :FindPartOnRay() can return nil parts but idk how to recode anything
Part of the Code:
local serverStorage = game:GetService("ServerStorage")
local replicatedStorage = game:GetService("ReplicatedStorage")
local kills = "Kills"
local damage = 10
replicatedStorage.ShootEvent.OnServerEvent:Connect(function(player,tool,position,part)
if game.Workspace[player.Name].Humanoid.Health <= 0 then
-- Nothing Happens
else
local distance = (tool.Handle.CFrame.p - position).magnitude
if game.Workspace:FindFirstChild(player.Name.."'s Trajectory") then
game.Workspace:FindFirstChild(player.Name.."'s Trajectory"):Destroy()
end
local trajectory = Instance.new("Part",game.Workspace)
local smoke = serverStorage.SmokeParticle:Clone()
smoke.Parent = tool.Handle
trajectory.BrickColor = BrickColor.new("Dark blue")
trajectory.Material = "SmoothPlastic"
trajectory.Name = player.Name.."'s Trajectory"
trajectory.Transparency = 0.5
trajectory.Anchored = true
trajectory.Locked = true
trajectory.CanCollide = false
trajectory.Size = Vector3.new(0.3,0.3,distance)
for i = 0, distance,6 do
trajectory.CFrame = CFrame.new(tool.Handle.CFrame.p,position) * CFrame.new(0,0,-distance / 2)
wait(0.0001)
end
smoke:Destroy()
if part then
if part.Name == "Head" or part:IsA("Hat") and part.Parent:FindFirstChild("Humanoid").Health > 0 then
-- Headshot
replicatedStorage.Headshot:FireClient(player)
damage= 20
end
local humanoid = part.Parent:FindFirstChild("Humanoid")
if not humanoid then
humanoid = part.Parent.Parent:FindFirstChild("Humanoid")
else
humanoid:TakeDamage(damage)
--if humanoid.Health == 0 then
--player.leaderstats[kills].Value = player.leaderstats[kills].Value + 1
--end
end
wait(0.25)
if trajectory then
trajectory:Destroy()
end
end
end
end)
Also my local script inside gun in workspace (with fireEvent)
tool.Equipped:Connect(function(mouse)
gungui:Clone().Parent = player.PlayerGui
findBodyType()
equipAnimation:FireServer(tool.shoot)
mouse.Icon = "http://www.roblox.com/asset?id=42445293"
mouse.Button1Down:Connect(function()
if bullets.Value <=0 or reloading == true then
-- Don't Do Anything
else
local head = game.Workspace[player.Name].Head.CFrame.lookVector
local mouse = CFrame.new(game.Workspace[player.Name].Head.Position,mouse.Hit.p).lookVector
difference = (head-mouse)
local ray = Ray.new(tool.Handle.CFrame.p,(player:GetMouse().Hit.p - tool.Handle.CFrame.p).unit*300)
local part,position = game.Workspace:FindPartOnRay(ray,player.Character,false,true)
if difference.magnitude < 1.33 then
sound:Play()
shootevent:FireServer(tool,position,part)
bullets.Value = bullets.Value - 1
end
end
end)

1 comment
Please use the Lua Code block. It's very hard to read this. https://scriptinghelpers.org/help/how-post-good-questions-answers [Scroll To The Bottom]