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

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

Asked by 3 years ago
Edited 3 years ago

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

Log in to vote
0
Answered by 3 years ago

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.

Ad

Answer this question