zombiesurvival-evolved/gamemodes/zombiesurvival/entities/weapons/weapon_zs_stabber/shared.lua

170 lines
4.3 KiB
Lua
Raw Normal View History

DEFINE_BASECLASS("weapon_zs_base")
local BaseClassMelee = baseclass.Get("weapon_zs_basemelee")
SWEP.PrintName = "'Stabber' M1 Garand"
SWEP.Slot = 3
SWEP.SlotPos = 0
SWEP.Base = "weapon_zs_base"
SWEP.HoldType = "ar2"
SWEP.ViewModel = "models/weapons/cstrike/c_snip_g3sg1.mdl"
SWEP.WorldModel = "models/weapons/w_snip_scout.mdl"
SWEP.UseHands = true
SWEP.Primary.Damage = 65
SWEP.Primary.NumShots = 1
SWEP.Primary.Delay = 0.36
SWEP.Primary.ClipSize = 8
SWEP.Primary.Automatic = false
SWEP.Primary.Ammo = "357"
SWEP.Primary.DefaultClip = 25
SWEP.MeleeDamage = 45
SWEP.MeleeRange = 72
SWEP.MeleeSize = 0.95
SWEP.MeleeKnockBack = 0
SWEP.DamageType = DMG_SLASH
SWEP.BloodDecal = "Blood"
SWEP.SwingTime = 0.35
SWEP.SwingRotation = Angle(-8, -20, 0)
SWEP.SwingOffset = Vector(0, -30, 0)
SWEP.Secondary.Automatic = true
SWEP.Secondary.Delay = 1.3
SWEP.ConeMax = 2.75
SWEP.ConeMin = 1.25
SWEP.WalkSpeed = SPEED_SLOW
GAMEMODE:AttachWeaponModifier(SWEP, WEAPON_MODIFIER_FIRE_DELAY, -0.03, 1)
GAMEMODE:AttachWeaponModifier(SWEP, WEAPON_MODIFIER_MAX_SPREAD, -0.5, 1)
GAMEMODE:AddNewRemantleBranch(SWEP, 1, "'Puncturer' M1 Garand", "Additional damage to targets stabbed with the bayonet recently, reduced bullet damage", function(wept)
wept.Primary.Damage = wept.Primary.Damage * 0.85
wept.BulletCallback = function(attacker, tr, dmginfo)
local ent = tr.Entity
if SERVER and ent:IsValidLivingZombie() and ent.PuncStabbed and ent.PuncStabbed > CurTime() then
dmginfo:SetDamage(dmginfo:GetDamage() * 1.7)
end
end
wept.MeleeHitEntity = function(self, tr, hitent, damagemultiplier)
hitent.PuncStabbed = CurTime() + 3
BaseClassMelee.MeleeHitEntity(self, tr, hitent, damagemultiplier)
end
end)
SWEP.ReloadSpeed = 1.3
SWEP.MeleeFlagged = true
SWEP.Tier = 2
function SWEP:EmitFireSound()
self:EmitSound("weapons/ak47/ak47-1.wav", 75, 76, 0.53)
self:EmitSound("weapons/scout/scout_fire-1.wav", 75, 86, 0.67, CHAN_AUTO+20)
end
function SWEP:PlaySwingSound()
self:EmitSound("weapons/iceaxe/iceaxe_swing1.wav")
end
function SWEP:PlayStartSwingSound()
end
function SWEP:PlayHitSound()
self:EmitSound("weapons/melee/golf club/golf_hit-0"..math.random(4)..".ogg")
end
function SWEP:PlayHitFleshSound()
self:EmitSound("weapons/knife/knife_stab.wav", 70, math.random(95, 105), 1, CHAN_AUTO+20)
end
function SWEP:ShootBullets(dmg, numbul, cone)
if self:Clip1() == 0 then
self:EmitSound("npc/roller/blade_out.wav", 70, math.random(80, 84), 0.5, CHAN_AUTO+21)
self:EmitSound("physics/metal/metal_solid_impact_bullet4.wav", 70, 100, 0.5, CHAN_AUTO+22)
end
BaseClass.ShootBullets(self, dmg, numbul, cone)
end
function SWEP:Think()
if self:IsSwinging() and self:GetSwingEnd() <= CurTime() then
self:StopSwinging()
BaseClassMelee.MeleeSwing(self)
end
BaseClass.Think(self)
end
function SWEP:CanSecondaryAttack()
if self:GetOwner():IsHolding() or self:GetOwner():GetBarricadeGhosting() or self:GetReloadFinish() > 0 then return false end
return self:GetNextSecondaryFire() <= CurTime() and not self:IsSwinging()
end
function SWEP:SecondaryAttack()
if not self:CanSecondaryAttack() then return end
self:SetNextAttack()
if self.SwingTime == 0 then
BaseClassMelee.MeleeSwing(self)
else
BaseClassMelee.StartSwinging(self)
end
end
function SWEP:DoMeleeAttackAnim()
self:GetOwner():DoAnimationEvent(ACT_HL2MP_GESTURE_RANGE_ATTACK_SLAM)
end
function SWEP:SetNextAttack()
local owner = self:GetOwner()
local armdelay = owner:GetMeleeSpeedMul()
self:SetNextPrimaryFire(CurTime() + self.Primary.Delay + self.SwingTime * armdelay)
self:SetNextSecondaryFire(CurTime() + self.Secondary.Delay * armdelay)
end
function SWEP:Holster()
return BaseClassMelee.Holster(self)
end
function SWEP:MeleeHitEntity(tr, hitent, damagemultiplier)
BaseClassMelee.MeleeHitEntity(self, tr, hitent, damagemultiplier)
end
function SWEP:PlayerHitUtil(owner, damage, hitent, dmginfo)
BaseClassMelee.PlayerHitUtil(self, owner, damage, hitent, dmginfo)
end
function SWEP:PostHitUtil(owner, hitent, dmginfo, tr, vel)
BaseClassMelee.PostHitUtil(self, owner, hitent, dmginfo, tr, vel)
end
function SWEP:SetupDataTables()
BaseClassMelee.SetupDataTables(self)
end
function SWEP:StopSwinging()
BaseClassMelee.StopSwinging(self)
end
function SWEP:IsSwinging()
return BaseClassMelee.IsSwinging(self)
end
function SWEP:SetSwingEnd(swingend)
self:SetDTFloat(3, swingend)
end
function SWEP:GetSwingEnd()
return self:GetDTFloat(3)
end