the shooting part, instead of bullets flying there is just a bunch of parts that spawn whenever you click to shoot? Local script in 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 = 30
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)
Script in serverscriptservice
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
