e9da54c2f9
Too many changes to list.
130 lines
3.1 KiB
Lua
130 lines
3.1 KiB
Lua
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
|