Hello, another question to ask about the game I am making, whenever I shoot the gun goes off, it is effective, and it plays the reloading sound clip, but it reloads I have to unequip and re- the gun to shoot again. It doesn't fully reload. Help, please.
-- Basic settings
local REVOLVER_SHOOT_COOLDOWN = 3
local XP_PER_KILL = script.Parent.KillXP.Value
local tool = script.Parent
local debounce = false
local shootCooldown = false
local toolPlr
local animShoot
local touchEvent
script.ClientLeftDown.OnServerEvent:connect(function(plr, mouseHitPos, hitPart)
-- Make sure correct player
if plr ~= toolPlr then
return
end
-- See if should
if not debounce and not shootCooldown and tool.Parent ~= nil and tool.Parent.ClassName ~= "Backpack" and tool.Parent:FindFirstChild("Head") then
debounce = true
-- Check to make sure there is actually a hitpart
if hitPart ~= nil then
-- Ray cast to check if the hit part is valid
local ray = Ray.new(tool.Parent.Head.Position, (hitPart.Position - tool.Parent.Head.Position).Unit * 2500)
local ignore = game.ServerScriptService.Functions.GetRayIgnoreList:Invoke()
table.insert(ignore, tool.Parent)
local hit, hitPos, normal = workspace:FindPartOnRayWithIgnoreList(ray, ignore, false, true)
-- Activate cooldown
shootCooldown = true
spawn(function()
wait(REVOLVER_SHOOT_COOLDOWN)
shootCooldown = false
end)
-- Check if player
if hit ~= nil and hit.Parent ~= nil then
if hit.Parent:FindFirstChild("Humanoid") then
local chr = hit.Parent
-- Check if not on same team
local okay = true
local otherPlr = game.Players:GetPlayerFromCharacter(chr)
if chr:FindFirstChild("Knife") then
if chr.Knife.TeamColor.Value == tool.TeamColor.Value then
okay = false
end
end
if chr:FindFirstChild("Revolver") then
if chr.Revolver.TeamColor.Value == tool.TeamColor.Value then
okay = false
end
end
if otherPlr.Backpack:FindFirstChild("Knife") then
if otherPlr.Backpack.Knife.TeamColor.Value == tool.TeamColor.Value then
okay = false
end
end
if otherPlr.Backpack:FindFirstChild("Revolver") then
if otherPlr.Backpack.Revolver.TeamColor.Value == tool.TeamColor.Value then
okay = false
end
end
-- Kill if not
if okay and chr:FindFirstChild("IsThick") == nil then
-- Find if the other is a murderer
local isMurderer = true
if chr:FindFirstChild("Knife") == nil and game.Players:GetPlayerFromCharacter(chr).Backpack:FindFirstChild("Knife") == nil then
isMurderer = false
end
-- Damage the person who was shot
chr.Humanoid.Health = chr.Humanoid.Health - 100.0001
-- Check if dead
if chr.Humanoid.Health <= 0 then
-- Kill and make ragdoll
local otherChrTorsoPos = chr.Torso.Position
game.ServerScriptService.Functions.GameDeath:Fire(chr, (otherChrTorsoPos - tool.Parent.Torso.Position).Unit)
-- Give player one kill
local plr = game.Players:GetPlayerFromCharacter(tool.Parent)
plr.Achievements.RevolverKills.Value = plr.Achievements.RevolverKills.Value + 1
-- Kill self if not murderer
if not isMurderer and tool.OnlyKillMurderer.Value then
tool.Parent.Humanoid.Health = 0
game.ServerScriptService.Functions.GameDeath:Fire(tool.Parent, (tool.Parent.Torso.Position - otherChrTorsoPos).Unit)
elseif XP_PER_KILL > 0 then
game.ServerScriptService.Functions.GiveXP:Fire(plr, XP_PER_KILL, 0)
game.ReplicatedStorage.Interactions.Client.RunKillFlash:FireClient(toolPlr)
else
game.ReplicatedStorage.Interactions.Client.RunKillFlash:FireClient(toolPlr)
end
end
elseif chr:FindFirstChild("IsThick") ~= nil then
-- Remove shield
chr.IsThick:destroy()
end
else
-- Redo ray cast
local ray = Ray.new(tool.Parent.Head.Position, (mouseHitPos - tool.Parent.Head.Position).Unit * 2500)
local hit, hitPos, normal = workspace:FindPartOnRayWithIgnoreList(ray, ignore, false, true)
-- Check if valid
if hit ~= nil and hit.Parent ~= nil and hit.CanCollide == true and hit.Transparency ~= 1 and hit.Parent.Name ~= "Ragdoll" then
-- Make bullet hole
local part = Instance.new("Part")
part.Name = "BulletHole"
part.Transparency = 1
part.CFrame = CFrame.new(hitPos, hitPos + normal)
part.Anchored = true
part.CanCollide = false
part.Size = Vector3.new(0.1, 0.1, 0.1)
part.TopSurface = Enum.SurfaceType.Smooth
part.BottomSurface = Enum.SurfaceType.Smooth
local decal = Instance.new("Decal", part)
decal.Texture = "rbxassetid://46648463"
decal.Face = Enum.NormalId.Front
local smoke = script.BulletSmoke:clone()
smoke.Color = ColorSequence.new(hit.Color)
smoke.Parent = part
part.Parent = workspace
smoke:Emit(50)
end
end
end
end
-- Play the shoot animation
if tool:FindFirstChild("Handle") ~= nil and tool.Parent ~= nil and tool.Parent.ClassName ~= "Backpack" then
animShoot:Play()
game.ReplicatedStorage.Interactions.Client.PlaySound:FireAllClients(tool.Handle.Shoot)
tool.EmitterPart.ShootFire:Emit(10)
tool.EmitterPart.ShootSmoke:Emit(25)
wait(0.5)
game.ReplicatedStorage.Interactions.Client.PlaySound:FireAllClients(tool.Handle.Reload)
end
end
end)
tool.Equipped:connect(function()
-- Weld the emitter part
if tool.Handle:FindFirstChild("EmitterWeld") then
tool.Handle.EmitterWeld:destroy()
end
local weld = Instance.new("Weld")
weld.Name = "EmitterWeld"
weld.Part0 = tool.Handle
weld.Part1 = tool.EmitterPart
weld.C0 = script.Parent.Grip - script.Parent.GripPos
weld.C1 = CFrame.new(tool.EmitterOffset.Value)
weld.Parent = tool.Handle
-- Set player
toolPlr = game.Players:GetPlayerFromCharacter(tool.Parent)
-- Load anim stab
animShoot = tool.Parent.Humanoid:LoadAnimation(script.RevolverShoot)
animShoot.Stopped:connect(function()
debounce = false
end)
-- Play draw sound
game.ReplicatedStorage.Interactions.Client.PlaySound:FireAllClients(tool.Handle.Draw)
-- Make display revolver invisible
if tool.Parent:FindFirstChild("DisplayRevolver") then
tool.Parent.DisplayRevolver.Transparency = 1
for _, i in pairs(tool.Parent.DisplayRevolver:GetChildren()) do
if i.ClassName ~= "SpecialMesh" and i.ClassName ~= "Weld" then
i.Enabled = false
end
end
end
-- Disable for a 'lil bit the revolver
debounce = true
wait(0.25)
debounce = false
end)
tool.Unequipped:connect(function()
-- Destroy animation tracks
animShoot:Stop()
animShoot:destroy()
-- Make display revolver visible
local chr = tool.Parent
if tool.Parent ~= nil and tool.Parent.ClassName == "Backpack" then
chr = tool.Parent.Parent.Character
end
if chr ~= nil then
if chr:FindFirstChild("DisplayRevolver") then
chr.DisplayRevolver.Transparency = 0
for _, i in pairs(chr.DisplayRevolver:GetChildren()) do
if i.ClassName ~= "SpecialMesh" and i.ClassName ~= "Weld" then
i.Enabled = true
end
end
end
end
end)
