Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

when i shoot in nil i get error line 61 pls help me i cant fix this one week how to fix?

I made a pistol but when i shoot in nil i have error that parent are nil line 61

local gun = script.Parent
local runService = game:GetService('RunService')
local replicatedStorage = game:GetService('ReplicatedStorage')
local player = game:GetService('Players')

local viewModel = replicatedStorage:WaitForChild('MainGame'):WaitForChild('Guns'):WaitForChild('Pistol'):Clone()
local camera = workspace.CurrentCamera
local player = player.LocalPlayer
local mouse = player:GetMouse()
local character = player.Character or player.CharacterAdded:Wait()
local h = character:WaitForChild('Humanoid') or character:FindFirstChild('Humanoid') or nil
viewModel.Parent = replicatedStorage.UnequippedGuns

local config = require(viewModel:WaitForChild('Config'))

local cf = CFrame.new()

local sinSpeed = 2.5
local sinSize = 3
local cosSpeed = 4
local cosSize = 4
local recoilSpeed = 8
local recoilSize = .5


local equipConnection

local shoot_Cooldown = false

local animations = {
	['Hold'] = viewModel.AnimationController.Animator:LoadAnimation(viewModel.Animations.Hold);
}

if h ~= nil then
	animations['CharacterHold'] = h:LoadAnimation(viewModel.CharacterAnimations.Hold);
end

cf = config.Offset_From_Camera

function positionModel()
	if player.character then
		viewModel:SetPrimaryPartCFrame(camera.CFrame*cf)
		local sin = math.sin(time() * sinSpeed)/sinSize
		local cos = math.cos(time() * cosSpeed)/cosSize	
		if player.character.Humanoid.MoveDirection.Magnitude > 0 then
			cf = cf:Lerp(CFrame.new(config.Offset_From_Camera.X+sin, config.Offset_From_Camera.Y+cos,config.Offset_From_Camera.Z),.2)	
		else
			cf = cf:Lerp(config.Offset_From_Camera,0.2)
		end
	end
end

function shoot(target)
	if not shoot_Cooldown then       
		shoot_Cooldown = true
		if player.Character:FindFirstChild(script.Parent.Name) then
			local sin = math.sin(time() * recoilSpeed)/recoilSize
			cf = cf:Lerp(CFrame.new(config.Offset_From_Camera.X, config.Offset_From_Camera.Y,config.Offset_From_Camera.Z+sin),.2)
			viewModel.Shoot:Play()
		end
		if target.Parent:FindFirstChild('Humanoid') then
			replicatedStorage['MainGame']['Remotes']['Shoot']:FireServer(mouse.Target, gun.Name)
		end
		wait(config.CoolDown_Between_Each_Click)
		shoot_Cooldown = false
	end
end

gun.Activated:Connect(function()
	shoot(mouse.Target)
end) 
local function equip()
	if not gun and viewModel then return end
	for _, part in pairs(gun:GetChildren()) do
		if part:IsA('BasePart') or part:IsA('UnionOperation') then
			part.Transparency = 1
		end
	end
	viewModel.Parent = camera
	animations['Hold']:Play()
	if h ~= nil then
		animations['CharacterHold']:Play()
	end
	equipConnection = runService.RenderStepped:Connect(function()
		if player.Character.Humanoid.Health > 0 then
			positionModel()
		end
	end)
end

local function unequip()
	if not gun then return end
	equipConnection:Disconnect()
	viewModel.Parent = replicatedStorage.UnequippedGuns
	if h ~= nil then
		animations['CharacterHold']:Stop()
	end
end

gun.Equipped:Connect(function()
	mouse.Icon = "http://www.roblox.com/asset?id=7269154410"
	equip()
end)

gun.Unequipped:Connect(function()
	unequip()
end)

1 answer

It basically means that if you shoot something that doesn't have a parent (the sky for instance), it will return nil, since thin air does not have a parent.

You could try making an If Statement to check if you actually hit something.

If target.Parent ~= nil then
	if target.Parent:FindFirstChildWhichIsA("Humanoid") then
		--code here
	end
end

1 comment

0

You should also check if target is nil. If target is nil and you attempt to index it with Parent, an error will be thrown.

This discussion is preserved as it was. New answers, comments, and votes are closed.