170 lines
4.3 KiB
Lua
170 lines
4.3 KiB
Lua
|
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
|