Hello so me and 2 of my friends are making a shooter game we have animations and multiple guns and ray casting for the bullets
I have been assigned to making a ammo counter GUI and reload script the problem is i have never made one before and need it made by the end of today. below is my friends script
local RayModule = require(game:GetService("ReplicatedStorage").ModuleScripts:WaitForChild("RayModule") )
local HurtEvent = game:GetService("ReplicatedStorage"):WaitForChild("HurtHumanoid")
local RunService = game:GetService('RunService')
local KeyframeSequenceProvider = game:GetService("KeyframeSequenceProvider")
local UserInputService = game:GetService("UserInputService")
local tool = script.Parent
local CoolDown = false
local function createPreviewAnimation(keyframeSequence)
local hashId = KeyframeSequenceProvider:RegisterKeyframeSequence(keyframeSequence)
if hashId then
local Animation = Instance.new("Animation")
Animation.AnimationId = hashId
return Animation
end
end
local spaceHeld = UserInputService:IsKeyDown(Enum.KeyCode.Space)
-- Sounds
local sound1 = script.Parent:WaitForChild("Sounds"):WaitForChild("shoot1")
local headSound = script.Parent:WaitForChild("Sounds"):WaitForChild("head")
local bodySound = script.Parent:WaitForChild("Sounds"):WaitForChild("body")
-- Animations
local idle = script.Parent.Animations:WaitForChild("idle_1")
local shoot = script.Parent.Animations:WaitForChild("shoot_1")
local reload = script.Parent.Animations:WaitForChild("reload_1")
local Cam = game.Workspace.CurrentCamera
local GunModel = script.Parent.gunModel
local AniControler = GunModel.AnimationController
local idle = AniControler:LoadAnimation(createPreviewAnimation(idle))
local shoot = AniControler:LoadAnimation(createPreviewAnimation(shoot))
local reload = AniControler:LoadAnimation(createPreviewAnimation(reload))
idle:Play()
RunService.RenderStepped:Connect(function()
GunModel:SetPrimaryPartCFrame(Cam.CFrame * CFrame.new(0,-0.3,-1.2))
end)
function ToolActivated()
local finalRay = RayModule.fireRay(game.Players.LocalPlayer, 500, GunModel)-- Raycast from the current player, 500 studs out
local Humanoid = nil
if finalRay ~= nil then
Humanoid = finalRay.Parent:FindFirstChild("Humanoid") -- Find humanoid object from player/bot
end
if (CoolDown == false) then -- Check if we are on cooldown
CoolDown = true -- Set it to true, so once the function is finshed, we can start the timer
sound1.TimePosition = 0
sound1:Play()
shoot:Play()
if (Humanoid ~= nil) then
if (finalRay.Name == "Head") then
HurtEvent:FireServer(Humanoid,85)
local NewHead = headSound:Clone()
NewHead.Parent = finalRay
NewHead:Destroy()
else
HurtEvent:FireServer(Humanoid,15) -- Damage Player, or bot
local NewBody = bodySound:Clone()
NewBody.Parent = finalRay
NewBody:Destroy()
end
end
else
return -- If we are, Throw out click, and wait for timer
end
spawn(function() -- Spawn Timer on seperate thread, then set cooldown to false
wait(0.35)
CoolDown = false -- Set Cooldown to false
end)
end
function ReloadAni()
if UserInputService:IsKeyDown(Enum.KeyCode.R) then
reload:Play()
end
end
UserInputService.InputBegan:Connect(ReloadAni)
tool.Activated:Connect(ToolActivated)
Now i have tried a couple of things 1 of which was to use function ToolActivated() and it does not seem to work I have it set up so that i can do ammo - 1 every time the gun is fired i just need to find a way to detect that below is my code for that
local UserInputService = game:GetService("UserInputService")
local status = game.ReplicatedStorage:WaitForChild("Status")
local tool = game.StarterPack.DevGun
local Ammo = 15
status.Value = Ammo - 1
any help is much appreciated thanks -proplayer700

1 comment
Everytime you shoot, use an if condition to check if it is zero or less than that. Reload if it is.