This gun script works perfectly in studio but only half works in testing or in a server.
--[[ This gun scripted by: TheDoubleJ0Jake0Jam Thanks for using my gun script. Ammo and reloading are the final update plans for this script, then I will move on to bigger projects. I created this gun as a way for me to learn how to script tools. It was suprisingly easy. --]] --player variables local player = game.Players.LocalPlayer local char = player.Character local mouse = player:GetMouse() --gun variables local gun = script.Parent local ammo = 10 local reloading = false local auto = false -- set to false if you do not want the gun to be automatic local firing = false if not game.workspace:FindFirstChild("Bullet") then local bullet_storage = Instance.new("Folder", workspace) bullet_storage.Name = "Bullet" else --nothing end function getBullet() gun.Handle.Fire:Play() --when in a test server it errors here local mh = mouse.Hit local B = Instance.new("Part", workspace.Bullet) B.CFrame = gun.Main.CFrame + (char.Torso.CFrame.lookVector * 2) B.CFrame = CFrame.new(B.Position, mh.p) B.FormFactor = "Custom" B.Size = Vector3.new(0.2, 0.2, 0.2) B.BrickColor = BrickColor.Black() B.CanCollide = true local velo = Instance.new("BodyVelocity", B) velo.velocity = B.CFrame.lookVector * 120 velo.maxForce = Vector3.new(math.huge, math.huge, math.huge) B.Touched:connect(function(hit) local humanoid = hit.Parent:FindFirstChild("Humanoid") if humanoid then humanoid:TakeDamage(10, 25) end end) end function autofire() while firing == true do wait(0) gun.Handle.Fire:Play() local mh = mouse.Hit local B = Instance.new("Part", workspace.Bullet) B.CFrame = gun.Main.CFrame + (char.Torso.CFrame.lookVector * 2) B.CFrame = CFrame.new(B.Position, mh.p) B.FormFactor = "Custom" B.Size = Vector3.new(0.2, 0.2, 0.2) B.BrickColor = BrickColor.Black() B.CanCollide = true local velo = Instance.new("BodyVelocity", B) velo.velocity = B.CFrame.lookVector * 120 velo.maxForce = Vector3.new(math.huge, math.huge, math.huge) B.Touched:connect(function(hit) local humanoid = hit.Parent:FindFirstChild("Humanoid") if humanoid then humanoid:TakeDamage(10, 25) end end) wait(0.005) end end mouse.Button1Down:connect(function() if auto == true then firing = true autofire() else getBullet()-- and it errors here end end) mouse.Button1Up:connect(function() if firing == true then firing = false print(auto) end end) local uis = game:GetService("UserInputService") -- allows firemode change uis.InputBegan:connect(function(inputObject, gameProcessedEvent) if inputObject.KeyCode == Enum.KeyCode.V then if auto == true then auto = false else auto = true end end end)
error is " attempt to index upvalue char a nil value"
Those are the only 2 lines showing an error in output.
When in test server it places a part in the center of the baseplate. It doesn't add velocity, and the hit function is not called. The size of the bullet should be, "0.2, 0.2, 0.2". The size created in test mode is 2x4 studs. Any help would be appreciated.
Edit: Removed variable "char" gun script now works.