zombiesurvival-evolved/gamemodes/zombiesurvival/entities/weapons/weapon_zs_baseshotgun.lua

155 lines
3.6 KiB
Lua
Raw Permalink Normal View History

AddCSLuaFile()
SWEP.Slot = 3
SWEP.SlotPos = 0
if CLIENT then
SWEP.ViewModelFlip = false
end
SWEP.Base = "weapon_zs_base"
SWEP.HoldType = "shotgun"
SWEP.ViewModel = "models/weapons/c_shotgun.mdl"
SWEP.WorldModel = "models/weapons/w_shotgun.mdl"
SWEP.UseHands = true
SWEP.ReloadDelay = 0.45
SWEP.Primary.Sound = Sound("Weapon_M3.Single")
SWEP.Primary.Damage = 8
SWEP.Primary.NumShots = 6
SWEP.Primary.Delay = 1
SWEP.Primary.ClipSize = 6
SWEP.Primary.Automatic = false
SWEP.Primary.Ammo = "buckshot"
GAMEMODE:SetupDefaultClip(SWEP.Primary)
SWEP.ConeMax = 7
SWEP.ConeMin = 5.25
SWEP.WalkSpeed = SPEED_SLOW
SWEP.ReloadActivity = ACT_VM_RELOAD
SWEP.PumpActivity = ACT_SHOTGUN_RELOAD_FINISH
SWEP.ReloadStartActivity = ACT_SHOTGUN_RELOAD_START
SWEP.ReloadStartGesture = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN
function SWEP:SecondaryAttack()
end
function SWEP:Reload()
if not self:IsReloading() and self:CanReload() then
self:StartReloading()
end
end
function SWEP:Think()
if self:ShouldDoReload() then
self:DoReload()
end
self:NextThink(CurTime())
return true
end
function SWEP:StartReloading()
local delay = self:GetReloadDelay()
self:SetDTFloat(3, CurTime() + delay)
self:SetDTBool(2, true) -- force one shell load
self:SetNextPrimaryFire(CurTime() + math.max(self.Primary.Delay, delay))
self:GetOwner():DoReloadEvent()
if self.ReloadStartActivity then
self:SendWeaponAnim(self.ReloadStartActivity)
self:ProcessReloadAnim()
end
end
function SWEP:StopReloading()
self:SetDTFloat(3, 0)
self:SetDTBool(2, false)
self:SetNextPrimaryFire(CurTime() + self.Primary.Delay * 0.75)
-- do the pump stuff if we need to
if self:Clip1() > 0 then
if self.PumpSound then
self:EmitSound(self.PumpSound)
end
if self.PumpActivity then
self:SendWeaponAnim(self.PumpActivity)
self:ProcessReloadAnim()
end
end
end
function SWEP:DoReload()
if not self:CanReload() or self:GetOwner():KeyDown(IN_ATTACK) or not self:GetDTBool(2) and not self:GetOwner():KeyDown(IN_RELOAD) then
self:StopReloading()
return
end
local delay = self:GetReloadDelay()
if self.ReloadActivity then
self:SendWeaponAnim(self.ReloadActivity)
self:ProcessReloadAnim()
end
if self.ReloadSound then
self:EmitSound(self.ReloadSound)
end
self:GetOwner():RemoveAmmo(1, self.Primary.Ammo, false)
self:SetClip1(self:Clip1() + 1)
self:SetDTBool(2, false)
-- We always wanna call the reload function one more time. Forces a pump to take place.
self:SetDTFloat(3, CurTime() + delay)
self:SetNextPrimaryFire(CurTime() + math.max(self.Primary.Delay, delay))
end
function SWEP:ProcessReloadAnim()
local reloadspeed = self.ReloadSpeed * self:GetReloadSpeedMultiplier()
if not self.DontScaleReloadSpeed then
self:GetOwner():GetViewModel():SetPlaybackRate(reloadspeed)
end
end
function SWEP:GetReloadDelay()
local reloadspeed = self.ReloadSpeed * self:GetReloadSpeedMultiplier()
return self.ReloadDelay / reloadspeed
end
function SWEP:ShouldDoReload()
return self:GetDTFloat(3) > 0 and CurTime() >= self:GetDTFloat(3)
end
function SWEP:IsReloading()
return self:GetDTFloat(3) > 0
end
function SWEP:CanReload()
return self:Clip1() < self.Primary.ClipSize and 0 < self:GetOwner():GetAmmoCount(self.Primary.Ammo)
end
function SWEP:CanPrimaryAttack()
if self:GetOwner():IsHolding() or self:GetOwner():GetBarricadeGhosting() then return false end
if self:Clip1() < self.RequiredClip then
self:EmitSound("Weapon_Shotgun.Empty")
self:SetNextPrimaryFire(CurTime() + 0.25)
return false
end
if self:IsReloading() then
self:StopReloading()
return false
end
return self:GetNextPrimaryFire() <= CurTime()
end