Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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)
- 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