e9da54c2f9
Too many changes to list.
185 lines
4.3 KiB
Lua
185 lines
4.3 KiB
Lua
SWEP.Base = "weapon_zs_zombie"
|
|
|
|
SWEP.PrintName = "Flesh Creeper"
|
|
|
|
SWEP.MeleeDelay = 0.5
|
|
SWEP.MeleeReach = 52
|
|
SWEP.MeleeDamage = 15
|
|
SWEP.MeleeForceScale = 1.25
|
|
SWEP.MeleeSize = 4.5 --3
|
|
SWEP.MeleeDamageType = DMG_SLASH
|
|
SWEP.Primary.Delay = 0.75
|
|
|
|
SWEP.Secondary.Automatic = false
|
|
|
|
AccessorFuncDT(SWEP, "RightClickStart", "Float", 2)
|
|
AccessorFuncDT(SWEP, "AttackAnimTime", "Float", 3)
|
|
AccessorFuncDT(SWEP, "Pouncing", "Boolean", 1)
|
|
|
|
function SWEP:Think()
|
|
self.BaseClass.Think(self)
|
|
|
|
if self:GetHoldingRightClick() and not self:GetOwner():KeyDown(IN_ATTACK2) then
|
|
self:SetRightClickStart(0)
|
|
|
|
if self.BuildSoundPlaying then
|
|
self.BuildSoundPlaying = false
|
|
self.BuildSound:ChangeVolume(0, 0.5)
|
|
end
|
|
elseif self:IsBuilding() then
|
|
if not self.BuildSoundPlaying then
|
|
self.BuildSoundPlaying = true
|
|
self.BuildSound:ChangeVolume(0.45, 0.5)
|
|
end
|
|
|
|
if SERVER then
|
|
self:BuildingThink()
|
|
end
|
|
end
|
|
|
|
if self:IsPouncing() then
|
|
self.FlySound:PlayEx(0.5, 60)
|
|
|
|
local owner = self:GetOwner()
|
|
local delay = owner:GetMeleeSpeedMul()
|
|
local time = CurTime()
|
|
|
|
if owner:WaterLevel() >= 2 then
|
|
self:SetPouncing(false)
|
|
self:SetNextPrimaryFire(time + 0.8 * delay)
|
|
elseif owner:OnGround() and owner:IsOnGround() then
|
|
self:SetPouncing(false)
|
|
self:SetNextPrimaryFire(time + 0.9 * delay)
|
|
|
|
if IsFirstTimePredicted() then
|
|
owner:EmitSound("npc/antlion/land1.wav", 65, 140, 0.65)
|
|
end
|
|
end
|
|
else
|
|
self.FlySound:Stop()
|
|
end
|
|
|
|
self:NextThink(CurTime())
|
|
return true
|
|
end
|
|
|
|
function SWEP:Move(mv)
|
|
if self:IsPouncing() then
|
|
if CurTime() < self.PoundAttackStart + 0.1 then
|
|
local vel = mv:GetVelocity()
|
|
vel.z = 350
|
|
self:GetOwner():SetGroundEntity(NULL)
|
|
mv:SetVelocity(vel)
|
|
end
|
|
|
|
mv:SetMaxSpeed(mv:GetMaxSpeed() * 5)
|
|
mv:SetMaxClientSpeed(mv:GetMaxClientSpeed() * 5)
|
|
return true
|
|
end
|
|
end
|
|
|
|
function SWEP:ApplyMeleeDamage(ent, trace, damage)
|
|
if ent.ZombieConstruction then
|
|
damage = damage * 3
|
|
end
|
|
|
|
self.BaseClass.ApplyMeleeDamage(self, ent, trace, damage)
|
|
end
|
|
|
|
function SWEP:Initialize()
|
|
self.BaseClass.Initialize(self)
|
|
|
|
self.BuildSound = CreateSound(self, "npc/antlion/charge_loop1.wav")
|
|
self.BuildSound:PlayEx(0, 100)
|
|
|
|
self.FlySound = CreateSound(self, "npc/antlion/fly1.wav")
|
|
end
|
|
|
|
function SWEP:OnRemove()
|
|
self.BaseClass.OnRemove(self)
|
|
|
|
self.BuildSound:Stop()
|
|
self.FlySound:Stop()
|
|
end
|
|
|
|
function SWEP:PrimaryAttack()
|
|
if self:GetHoldingRightClick() or not self:GetOwner():OnGround() then return end
|
|
|
|
self.BaseClass.PrimaryAttack(self)
|
|
|
|
if self:IsSwinging() then
|
|
self:SetAttackAnimTime(CurTime() + self.Primary.Delay)
|
|
end
|
|
end
|
|
|
|
function SWEP:SecondaryAttack()
|
|
if self:IsSwinging() or self:IsInAttackAnim() or not self:GetOwner():OnGround() then return end
|
|
|
|
self:SetRightClickStart(CurTime())
|
|
end
|
|
|
|
function SWEP:GetHoldingRightClick()
|
|
return self:GetRightClickStart() > 0
|
|
end
|
|
|
|
function SWEP:IsBuilding()
|
|
return self:GetHoldingRightClick() and (CurTime() - self:GetRightClickStart()) >= 1
|
|
end
|
|
|
|
function SWEP:Reload()
|
|
local owner = self:GetOwner()
|
|
if self:IsPouncing() or CurTime() < self:GetNextPrimaryFire() or not owner:IsOnGround() or self:IsSwinging() or self:GetHoldingRightClick() then return end
|
|
|
|
self.PoundAttackStart = CurTime()
|
|
|
|
local vel = owner:GetAimVector()
|
|
vel.z = math.max(0.55, vel.z)
|
|
vel:Normalize()
|
|
|
|
owner:SetGroundEntity(NULL)
|
|
owner:SetVelocity(vel * 350)
|
|
|
|
self.m_ViewAngles = owner:EyeAngles()
|
|
|
|
self:SetPouncing(true)
|
|
end
|
|
|
|
function SWEP:IsMoaning()
|
|
return false
|
|
end
|
|
|
|
function SWEP:PlayAlertSound()
|
|
self:GetOwner():EmitSound("npc/barnacle/barnacle_pull"..math.random(4)..".wav", 70)
|
|
end
|
|
|
|
function SWEP:PlayIdleSound()
|
|
self:GetOwner():EmitSound("npc/barnacle/barnacle_pull"..math.random(4)..".wav", 70, 85)
|
|
end
|
|
|
|
function SWEP:PlayAttackSound()
|
|
end
|
|
|
|
function SWEP:PlayHitSound()
|
|
self:EmitSound("physics/body/body_medium_impact_hard"..math.random(6)..".wav", 70, math.random(110, 120), nil, CHAN_AUTO)
|
|
end
|
|
|
|
function SWEP:PlayMissSound()
|
|
self:EmitSound("npc/zombie/claw_miss"..math.random(2)..".wav", 70, math.random(90, 100), nil, CHAN_AUTO)
|
|
end
|
|
|
|
function SWEP:IsInAttackAnim()
|
|
return self:GetAttackAnimTime() > 0 and CurTime() < self:GetAttackAnimTime()
|
|
end
|
|
|
|
function SWEP:SetPouncing(pouncing)
|
|
if not pouncing then
|
|
self.m_ViewAngles = nil
|
|
end
|
|
|
|
self:SetDTBool(1, pouncing)
|
|
end
|
|
|
|
function SWEP:IsPouncing()
|
|
return self:GetDTBool(1)
|
|
end
|
|
SWEP.GetPouncing = SWEP.IsPouncing
|