Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- You are here: Home / general / How To Make a Gun on Roblox
- How To Make a Gun on Roblox
- September 16, 2017 By AlvinBLOX
- How to make a gun on Roblox – Gun Tutorial code download
- Download the full script for this gun tutorial below.
- Here’s what your game should look like:
- --[[ Side Notes:
- - Make sure that your game is set up like mine, with all objects added in
- - Make sure FilteringEnabled is turned on
- - Make sure that you make your own animations and set your animation IDs to your IDs as you cannot currently take
- someone else's animations!
- --Main Script which goes in Server Storage --]]
- local serverStorage = game:GetService("ServerStorage")
- local replicatedStorage = game:GetService("ReplicatedStorage")
- local KOValue = "Kills"
- local WOValue = "Wipeouts"
- local damage = 30
- replicatedStorage.ShootEvent.OnServerEvent:Connect(function(player,tool,position,part)
- if game.Workspace[player.Name].Humanoid.Health <= 0 then
- -- The player is dead, do not do anything
- else
- local distance = (tool.Handle.CFrame.p - position).magnitude
- if game.Workspace:FindFirstChild(player.Name.."'s Trajectory") then
- game.Workspace:FindFirstChild(player.Name.."'s Trajectory"):Destroy()
- end
- local trajectory = Instance.new("Part",game.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.Handle.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
- -- Boom headshot
- replicatedStorage.Headshot:FireClient(player)
- damage = 50
- 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
- game.Players[humanoid.Parent.Name].leaderstats[WOValue].Value = game.Players[humanoid.Parent.Name].leaderstats[WOValue].Value + 1
- end
- end
- wait(0.25)
- if trajectory then
- trajectory:Destroy()
- end
- end
- end
- end)
- replicatedStorage.EquipAnimation.OnServerEvent:Connect(function(player,animation)
- local newAnim = game.Workspace[player.Name].Humanoid:LoadAnimation(animation)
- newAnim:Play()
- replicatedStorage.UnequipAnimation.OnServerEvent:Connect(function(player,animation)
- newAnim:Stop()
- for i,v in pairs(game.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 = game.Workspace[player.Name].Humanoid:LoadAnimation(animation)
- reloadAnim:Play()
- end)
- end)
- function checkBodyType(player,tool)
- if game.Workspace[player.Name]:FindFirstChild("LowerTorso") then -- R15
- tool.shoot.AnimationId = "rbxassetid://936531673"
- tool.reload.AnimationId = "rbxassetid://937806099"
- return "R15"
- end
- if game.Workspace[player.Name]:FindFirstChild("Torso") then -- R6
- tool.shoot.AnimationId = "rbxassetid://1000874313"
- tool.reload.AnimationId = "rbxassetid://937933712"
- return "R6"
- end
- end
- replicatedStorage.CheckBodyType.OnServerInvoke = checkBodyType
- -- Local Script, which goes inside the tool
- 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") -- Allow 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 reload2 = 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
- reload2: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)
- gungui:Clone().Parent = player.PlayerGui -- We are cloning 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 remoteevent 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 = game.Workspace[player.Name].Head.CFrame.lookVector
- local mouse = CFrame.new(game.Workspace[player.Name].Head.Position,mouse.Hit.p).lookVector
- difference = (head-mouse)
- local ray = Ray.new(tool.Handle.CFrame.p,(player:GetMouse().Hit.p - tool.Handle.CFrame.p).unit*300)
- local part,position = game.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)
- — Leaderboard code which goes inside ServerScriptService, optional to include, you can add your own if you want but bear in mind the gun won’t work unless you have some sort of leaderboard with a Kills and Wipeouts stat
- game.Players.PlayerAdded:Connect(function(player)
- local leaderstats = Instance.new("IntValue",player)
- leaderstats.Name = "leaderstats"
- local kills = Instance.new("IntValue",leaderstats)
- kills.Name = "Kills"
- kills.Value = 0
- local wipeouts = Instance.new("IntValue",leaderstats)
- wipeouts.Name = "Wipeouts"
- wipeouts.Value = 0
- -- Data saving code goes here if you need it
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement