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

108 lines
2.8 KiB
Lua
Raw Permalink Normal View History

AddCSLuaFile()
SWEP.PrintName = "Frigid Ghoul"
SWEP.Base = "weapon_zs_zombie"
SWEP.MeleeDamage = 22
SWEP.MeleeForceScale = 0.5
SWEP.SlowDownScale = 0.1
function SWEP:ApplyMeleeDamage(ent, trace, damage)
if SERVER and ent:IsPlayer() then
local gt = ent:GiveStatus("frost", 8)
local owner = self:GetOwner()
if gt and gt:IsValid() then
gt.Applier = owner
end
ent:AddLegDamageExt(12, owner, self, SLOWTYPE_COLD)
end
self.BaseClass.ApplyMeleeDamage(self, ent, trace, damage)
end
function SWEP:Reload()
self.BaseClass.SecondaryAttack(self)
end
function SWEP:PlayAlertSound()
self:GetOwner():EmitSound("npc/fast_zombie/fz_frenzy1.wav", 75, math.Rand(70, 80))
end
SWEP.PlayIdleSound = SWEP.PlayAlertSound
function SWEP:PlayAttackSound()
self:EmitSound("npc/metropolice/pain"..math.random(4)..".wav", 74, math.Rand(110, 130))
end
local Spread = {
{0, 0},
{-0.5, 0},
{0.5, 0}
}
local function DoFleshThrow(pl, wep)
if pl:IsValid() and pl:Alive() and wep:IsValid() then
pl:ResetSpeed()
pl.LastRangedAttack = CurTime()
if SERVER then
local startpos = pl:GetShootPos()
local aimang = pl:EyeAngles()
local ang
for _, spr in pairs(Spread) do
ang = Angle(aimang.p, aimang.y, aimang.r)
ang:RotateAroundAxis(ang:Up(), spr[1] * 5)
ang:RotateAroundAxis(ang:Right(), spr[2] * 5)
local ent = ents.Create("projectile_ghoulfleshchilled")
if ent:IsValid() then
ent:SetPos(startpos)
ent:SetOwner(pl)
ent:Spawn()
local phys = ent:GetPhysicsObject()
if phys:IsValid() then
phys:SetVelocityInstantaneous(ang:Forward() * 750)
end
end
end
pl:EmitSound(string.format("physics/body/body_medium_break%d.wav", math.random(2, 4)), 72, math.Rand(85, 95))
end
--[[if CurTime() >= (pl.GhoulImmunity or 0) then
pl.GhoulImmunity = CurTime() + 2
pl:RawCapLegDamage(CurTime() + 0.5)
end]]
end
end
function SWEP:SecondaryAttack()
local owner = self:GetOwner()
if CurTime() < self:GetNextPrimaryFire() or CurTime() < self:GetNextSecondaryFire() or IsValid(owner.FeignDeath) then return end
self:SetNextSecondaryFire(CurTime() + 3)
self:SetNextPrimaryFire(CurTime() + self.Primary.Delay)
self:GetOwner():DoZombieEvent()
self:EmitSound("npc/fast_zombie/leap1.wav", 74, math.Rand(110, 130))
self:EmitSound(string.format("physics/body/body_medium_break%d.wav", math.random(2, 4)), 72, math.Rand(85, 95))
--self:GetOwner():RawCapLegDamage(CurTime() + 3)
self:SendWeaponAnim(ACT_VM_HITCENTER)
self.IdleAnimation = CurTime() + self:SequenceDuration()
timer.Simple(0.7, function() DoFleshThrow(owner, self) end)
end
if not CLIENT then return end
function SWEP:ViewModelDrawn()
render.ModelMaterialOverride(0)
end
local matSheet = Material("models/weapons/v_zombiearms/ghoulsheet")
function SWEP:PreDrawViewModel(vm)
render.ModelMaterialOverride(matSheet)
end