Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
-1

Can someone help me with my gun script?[solved]

Asked by
AZDev 590 Moderation Voter
8 years ago

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.

Answer this question