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

106 lines
2.6 KiB
Lua
Raw Permalink Normal View History

SWEP.Base = "weapon_zs_gigagorechild"
SWEP.PrintName = "Giga Shadow Child"
SWEP.MeleeDamage = 24
SWEP.MeleeForceScale = 1
function SWEP:PrimaryAttack()
if self:IsThrowing() then return end
self.BaseClass.BaseClass.PrimaryAttack(self)
end
function SWEP:Deploy()
local vm = self:GetOwner():GetViewModel()
vm:SendViewModelMatchingSequence(vm:LookupSequence("fists_draw"))
return self.BaseClass.BaseClass.Deploy(self)
end
local anims = {"fists_uppercut", "fists_right", "fists_left"}
function SWEP:StartSwinging()
self.BaseClass.BaseClass.StartSwinging(self)
local vm = self:GetOwner():GetViewModel()
vm:SendViewModelMatchingSequence(vm:LookupSequence(anims[math.random(#anims)]))
vm:SetPlaybackRate(0.32)
end
function SWEP:ApplyMeleeDamage(ent, trace, damage)
if ent:IsValidPlayer() then
local vel = ent:GetPos() - self:GetOwner():GetPos()
vel.z = 0
vel:Normalize()
vel = vel * 300
vel.z = 150
if CurTime() >= (ent.NextKnockdown or 0) then
ent:KnockDown()
ent.NextKnockdown = CurTime() + 4
end
ent:SetGroundEntity(NULL)
ent:SetVelocity(vel)
if SERVER then
ent:GiveStatus("dimvision", 10)
end
end
self.BaseClass.BaseClass.ApplyMeleeDamage(self, ent, trace, damage)
end
function SWEP:CheckThrow()
if self:GetThrowing() and CurTime() >= self:GetThrowTime() then
self:SetThrowTime(0)
local owner = self:GetOwner()
owner.LastRangedAttack = CurTime()
owner:EmitSound("weapons/slam/throw.wav", 70, math.random(78, 82))
if SERVER then
local ent = ents.Create("prop_thrownshadowbaby")
if ent:IsValid() then
ent:SetPos(owner:GetShootPos())
ent:SetAngles(AngleRand())
ent:SetOwner(owner)
ent:Spawn()
local phys = ent:GetPhysicsObject()
if phys:IsValid() then
phys:Wake()
phys:SetVelocityInstantaneous(owner:GetAimVector() * 650)
phys:AddAngleVelocity(VectorRand() * math.Rand(200, 300))
ent:SetPhysicsAttacker(owner)
end
end
end
end
end
function SWEP:CheckCry()
if self:IsCrying() and CurTime() >= self:GetCryTime() then
self:SetCryTime(0)
local owner = self:GetOwner()
local worldspace = owner:WorldSpaceCenter()
util.ScreenShake(worldspace, 5, 5, 2, 400)
owner:EmitSound("physics/concrete/concrete_break2.wav", 77, 50)
for k, ent in pairs(ents.FindInSphere(worldspace, 150)) do
if ent:IsValid() and ent:IsValidLivingHuman() and WorldVisible(ent:GetPos(), worldspace) then
if CurTime() >= (ent.NextKnockdown or 0) then
ent:KnockDown()
ent.NextKnockdown = CurTime() + 4
if SERVER then
ent:GiveStatus("dimvision", 10)
end
end
end
end
end
end