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

Why does my gun script not work and not show any errors towards the problem?

My gun script is not working and I don't understand why. So here are the scripts.

Local Script of the gun:

local tool = script.Parent -- Getting the tool
local player = game:GetService("Players").LocalPlayer -- Getting the player
local mouse = player:GetMouse() -- Getting the mouse
local sound = tool:WaitForChild("Gunfire") 
local torso = "" -- Nothing for now.
local reloading = false -- Variable to check if we are currently reloading
local contextActionService = game:GetService("ContextActionService") -- Allows us to cater for Mobile players
local bodytype = nil -- Nil for now but will check whether player is R6 or R15
local difference = 0 -- Difference between position of head and mouse
local replicatedstorage = game:GetService("ReplicatedStorage")
local gungui = tool:WaitForChild("GunGUI")
local bullets = tool:WaitForChild("Bullets")
local reloadtime = 3

-- Remote Events
local equipAnimation = replicatedstorage:WaitForChild("EquipAnimation")
local headshot = replicatedstorage:WaitForChild("Headshot")
local reload = replicatedstorage:WaitForChild("Reload")
local shootevent = replicatedstorage:WaitForChild("ShootEvent")
local unequipanimation = replicatedstorage:WaitForChild("UnequipAnimation")

-- Remote Functions
local checkBodyType = replicatedstorage:WaitForChild("CheckBodyType")
local fetchBulletsLeft = replicatedstorage:WaitForChild("FetchBulletsLeft")

-- Find Body Type
function findBodyType() -- Used to determine whether a player is R6 or R15
	bodytype = checkBodyType:InvokeServer(tool) -- Invoking the Remotefunction to do a check on the server
	print(bodytype)
end

-- Reloading function
function reload()
	reloading = true
	reload:FireServer(tool.reload)
	mouse.Icon = "http:www.roblox.com/asset?id=936489163"
	player.PlayerGui:WaitForChild("GunGUI").Bullets.Text = "Reloading!"
	wait(reloadtime)
	bullets.Value = 6
	player.PlayerGui:WaitForChild("GunGUI").Bullets.Text = "Bullets: "..bullets.Value
	mouse.Icon = "http://www.roblox.com/asset?id=936803874"
	equipAnimation:FireServer(tool.shoot)
	reloading = false
end

-- When the tool is equipped, the following event will run
tool.Equipped:Connect(function(mouse) -- We are cloning the Gun GUI into the player's PlayerGUI
	gungui:Clone().Parent = player.PlayerGui -- We are cdloning the Gun GUI into the player's PlayerGUI
	findBodyType() -- Calling the function above to check the body type.
	equipAnimation:FireServer(tool.shoot) -- Calling the equip animation remote event so that the server can play the animation
	mouse.Icon = "http://www.roblox.com/asset?id=936803874"
	mouse.Button1Down:Connect(function()
		if bullets.Value <= 0 or reloading == true then
			-- Don't do anything
		else
			local head = workspace[player.Name].Head.CFrame.lookVector
			local mouse = CFrame.new(workspace[player.Name].Head.Position,mouse.Hit.p).lookVector
			difference = (head-mouse)
			local ray = Ray.new(tool.Tip.CFrame.p, (player:GetMouse().Hit.p - tool.Tip.CFrame.p).unit*300)
			local part,position = workspace:FindPartOnRay(ray,player.Character,false,true)
			sound:Play()
			if difference.magnitude <1.33 then
				shootevent:FireServer(tool,position,part)
				bullets.Value = bullets.Value - 1
			end
		end
	end)
	local reloadMobileButton = contextActionService:BindAction("ReloadBtn",reload,true,"r")
	contextActionService:SetPosition("ReloadBtn",UDim2.new(0.72,-25,0.20,-25))
	contextActionService:SetImage("ReloadBtn","http://www.roblox.com/asset/?id=10952419")
end)
tool.Unequipped:Connect(function()
	mouse.Icon = ""
	unequipanimation:FireServer(tool.shoot)
	player.PlayerGui.GunGUI:Destroy()
	contextActionService:UnbindAction("ReloadBtn")
end)
headshot.OnClientEvent:Connect(function()
	player.PlayerGui.GunGUI.Headshot:TweenPosition(UDim2.new(0.5,-100,0.5,-25), "Out","Quint",0.3)
	wait(1.5)
	player.PlayerGui.GunGUI.Headshot:TweenPosition(UDim2.new(-1,0,0.5,-25), "In","Quint",0.4)
	wait(0.5)
	player.PlayerGui.GunGUI.Headshot.Position = UDim2.new(1.5,0,0.5,-25)
end)

And here is the Main Script:

local serverStorage = game:GetService("ServerStorage")
local replicatedStorage = game:GetService("ReplicatedStorage")
local KOValue = "Kills"
local damage = 15

replicatedStorage.ShootEvent.OnServerEvent:Connect(function(player,tool,position,part)
	if workspace[player.Name].Humanoid.Health <= 0 then
		-- The player is dead, do not do anything
	else
		local distance = (tool.tip.CFrame.p - position).magnitude
		if workspace:FindFirstChild(player.Name.."'s Trajectory") then
			workspace:FindFirstChild(player.Name.."'s Trajectory"):Destroy()
		end
		local trajectory = Instance.new("Part",workspace)
		local smoke = serverStorage.SmokeParticle:Clone()
		smoke.Parent = tool.Handle
		trajectory.BrickColor = BrickColor.new("Institutional white")
		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.Tip.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
				replicatedStorage.Headshot:FireClient(player)
				damage=30
			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[KOValue].Value = player.leaderstats[KOValue].Value + 1
				end
			end
			wait(0.5)
			if trajectory then
				trajectory:Destroy()
			end
		end
	end
end)

replicatedStorage.EquipAnimation.OnServerEvent:Connect(function(player,animation)
	local newAnim = workspace[player.Name].Humanoid:LoadAnimation(animation)
	newAnim:Play()
	replicatedStorage.UnequipAnimation.OnServerEvent:Connect(function(player,animation)
		newAnim:Stop()
		for i,v in pairs(workspace:GetChildren()) do
			if v.Name == player.Name.."'s Trajectory" then
				v:Destroy()
			end
		end
	end)
	replicatedStorage.Reload.OnServerEvent:Connect(function(player,animation)
		newAnim:Stop()
		local reloadAnim = workspace[player.Name].Humanoid:LoadAnimation(animation)
		reloadAnim:Play()
	end)
end)

function checkBodyType(player,tool)
	if workspace[player.Name]:FindFirstChild("LowerTorso") then -- R15
		tool.shoot.AnimationId = "rbxassetid://5320645770"
		tool.reload.AnimationId = "rbxassetid://5320715605"
		return "R15"
	end
	if workspace[player.Name]:FindFirstChild("Torso") then -- R16
		tool.shoot.AnimationId = "rbxassetid://5320789224"
		tool.reload.AnimationId = "rbxassetid://5320798913"
		return "R6"
	end
end
replicatedStorage.CheckBodyType.OnServerInvoke = checkBodyType

Remote Functions: CheckBodyType FetchBulletsLeft

Remote Events: EquipAnimation Headshot Reload ShootEvent UnequipAnimation

Please help!

1 answer

You see the I don't know how to make a gun in roblox but your error might be in the spelling. You have misspelled a word. Sometimes the output may not show the spelling error as there is a lot of words in one line.

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