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

131 lines
3.1 KiB
Lua
Raw Permalink Normal View History

SWEP.PrintName = "'Rejuvenator' Healing Ray"
SWEP.Description = "Locks on to humans and heals them to full, discharging medical ammo along a ray."
SWEP.Base = "weapon_zs_base"
SWEP.HoldType = "physgun"
SWEP.ViewModel = "models/weapons/c_physcannon.mdl"
SWEP.WorldModel = "models/weapons/w_physics.mdl"
SWEP.ShowViewModel = false
SWEP.ShowWorldModel = false
SWEP.UseHands = true
SWEP.Primary.Delay = 0.1
SWEP.Primary.ClipSize = 30
SWEP.Primary.Automatic = true
SWEP.Primary.Ammo = "Battery"
GAMEMODE:SetupDefaultClip(SWEP.Primary)
SWEP.ConeMax = 0
SWEP.ConeMin = 0
SWEP.Tier = 4
SWEP.MaxStock = 3
SWEP.HealRange = 300
SWEP.Heal = 3
SWEP.WalkSpeed = SPEED_SLOWER
SWEP.FireAnimSpeed = 0.24
GAMEMODE:SetPrimaryWeaponModifier(SWEP, WEAPON_MODIFIER_HEALRANGE, 100, 1)
GAMEMODE:AttachWeaponModifier(SWEP, WEAPON_MODIFIER_HEALING, 0.3)
function SWEP:Initialize()
self.BaseClass.Initialize(self)
self.ChargeSound = CreateSound(self, "items/medcharge4.wav")
end
function SWEP:Holster()
self.ChargeSound:Stop()
return self.BaseClass.Holster(self)
end
function SWEP:OnRemove()
self.ChargeSound:Stop()
end
function SWEP:PrimaryAttack()
if not self:CanPrimaryAttack() then return end
local owner = self:GetOwner()
local trtbl = owner:CompensatedPenetratingMeleeTrace(self.HealRange, 2, nil, nil, true)
local ent
for _, tr in pairs(trtbl) do
local test = tr.Entity
if test and test:IsValidLivingHuman() and gamemode.Call("PlayerCanBeHealed", test) then
ent = test
break
end
end
if not ent or self:GetDTEntity(10):IsValid() then return end
self:SetDTEntity(10, ent)
self:SetNextPrimaryFire(CurTime() + 1)
self:EmitSound("items/medshot4.wav", 75, 80)
end
function SWEP:CanPrimaryAttack()
if self:GetPrimaryAmmoCount() <= 0 then
return false
end
if self:GetOwner():IsHolding() or self:GetOwner():GetBarricadeGhosting() or self:GetDTEntity(10):IsValid() then return false end
return self:GetNextPrimaryFire() <= CurTime()
end
function SWEP:Reload()
end
function SWEP:Think()
self.BaseClass.Think(self)
self:CheckHealRay()
end
function SWEP:StopHealing()
self:SetDTEntity(10, NULL)
self:SetNextPrimaryFire(CurTime() + 0.75)
self:EmitSound("items/medshotno1.wav", 75, 60)
self.ChargeSound:Stop()
end
function SWEP:TakeAmmo()
self:TakeCombinedPrimaryAmmo(2)
end
function SWEP:CheckHealRay()
local ent = self:GetDTEntity(10)
local owner = self:GetOwner()
if ent:IsValidLivingHuman() and gamemode.Call("PlayerCanBeHealed", ent) and owner:KeyDown(IN_ATTACK) and
ent:WorldSpaceCenter():DistToSqr(owner:WorldSpaceCenter()) <= self.HealRange * self.HealRange and self:GetCombinedPrimaryAmmo() > 0 then
if CurTime() > self:GetDTFloat(10) then
owner:HealPlayer(ent, math.min(self:GetCombinedPrimaryAmmo(), self.Heal))
self:TakeAmmo()
self:SetDTFloat(10, CurTime() + 0.36)
self:SendWeaponAnim(ACT_VM_PRIMARYATTACK)
local effectdata = EffectData()
effectdata:SetOrigin(ent:WorldSpaceCenter())
effectdata:SetFlags(3)
effectdata:SetEntity(self)
effectdata:SetAttachment(1)
util.Effect("tracer_healray", effectdata)
end
self.ChargeSound:PlayEx(1, 70)
elseif ent:IsValid() then
self:StopHealing()
end
end