e9da54c2f9
Too many changes to list.
132 lines
3.7 KiB
Lua
132 lines
3.7 KiB
Lua
SWEP.PrintName = "'Convalescence' Medical Rifle"
|
|
SWEP.Description = "Fires fast-moving medical darts which can heal at a range. Darts can also inflict damage to zombies as well as reduce their damage output."
|
|
SWEP.Slot = 4
|
|
SWEP.SlotPos = 0
|
|
|
|
SWEP.Base = "weapon_zs_baseproj"
|
|
DEFINE_BASECLASS("weapon_zs_baseproj")
|
|
|
|
SWEP.HoldType = "ar2"
|
|
|
|
SWEP.ViewModel = "models/weapons/cstrike/c_snip_scout.mdl"
|
|
SWEP.WorldModel = "models/weapons/w_snip_scout.mdl"
|
|
SWEP.UseHands = true
|
|
|
|
SWEP.CSMuzzleFlashes = false
|
|
|
|
SWEP.ReloadSound = Sound("Weapon_Pistol.Reload")
|
|
|
|
SWEP.Primary.Delay = 0.85
|
|
SWEP.Primary.ClipSize = 64
|
|
SWEP.Primary.DefaultClip = 120
|
|
SWEP.Primary.Ammo = "Battery"
|
|
|
|
SWEP.RequiredClip = 8
|
|
SWEP.Primary.Damage = 75
|
|
SWEP.ReloadSpeed = 1
|
|
|
|
SWEP.WalkSpeed = SPEED_SLOW
|
|
|
|
SWEP.ConeMax = 0
|
|
SWEP.ConeMin = 0
|
|
|
|
SWEP.FireAnimSpeed = 1.4
|
|
|
|
SWEP.BuffDuration = 10
|
|
|
|
SWEP.Tier = 2
|
|
|
|
SWEP.AllowQualityWeapons = true
|
|
|
|
SWEP.Heal = 10
|
|
|
|
GAMEMODE:AttachWeaponModifier(SWEP, WEAPON_MODIFIER_BUFF_DURATION, 3)
|
|
GAMEMODE:AttachWeaponModifier(SWEP, WEAPON_MODIFIER_HEALING, 1.1)
|
|
GAMEMODE:AddNewRemantleBranch(SWEP, 1, "'Invigorator' Strength Rifle", "Strength boost instead of defence, and makes zombies more vulnerable to damage instead", function(wept)
|
|
if SERVER then
|
|
wept.EntModify = function(self, ent)
|
|
local owner = self:GetOwner()
|
|
|
|
ent:SetDTBool(0, true)
|
|
ent:SetSeeked(self:GetSeekedPlayer() or nil)
|
|
ent.Heal = wept.Heal * (owner.MedDartEffMul or 1)
|
|
ent.BuffDuration = wept.BuffDuration
|
|
end
|
|
else
|
|
for k,v in pairs(wept.VElements) do
|
|
v.color = Color(215, 100, 75, 255)
|
|
end
|
|
end
|
|
end)
|
|
|
|
function SWEP:EmitFireSound()
|
|
self:EmitSound("weapons/ar2/npc_ar2_altfire.wav", 70, math.random(137, 143), 0.85)
|
|
self:EmitSound("weapons/ar2/fire1.wav", 70, math.random(105, 115), 0.85, CHAN_WEAPON + 20)
|
|
self:EmitSound("items/smallmedkit1.wav", 70, math.random(165, 170), 0.65, CHAN_WEAPON + 21)
|
|
end
|
|
|
|
function SWEP:GetFireDelay()
|
|
local owner = self:GetOwner()
|
|
return (self.Primary.Delay * (owner.MedgunFireDelayMul or 1)) / (owner:GetStatus("frost") and 0.7 or 1)
|
|
end
|
|
|
|
function SWEP:GetReloadSpeedMultiplier()
|
|
local owner = self:GetOwner()
|
|
return BaseClass.GetReloadSpeedMultiplier(self) * (owner.MedgunReloadSpeedMul or 1) -- Convention is now BaseClass instead of self.BaseClass
|
|
end
|
|
|
|
function SWEP:CanSecondaryAttack()
|
|
if self:GetOwner():IsHolding() or self:GetOwner():GetBarricadeGhosting() or self:GetReloadFinish() > 0 then return false end
|
|
|
|
return self:GetNextSecondaryFire() <= CurTime()
|
|
end
|
|
|
|
function SWEP:SecondaryAttack()
|
|
if not self:CanSecondaryAttack() then return end
|
|
|
|
self:SetNextSecondaryFire(CurTime() + 0.1)
|
|
|
|
local owner = self:GetOwner()
|
|
if not owner:IsSkillActive(SKILL_SMARTTARGETING) then return end
|
|
|
|
local targetent = owner:CompensatedMeleeTrace(2048, 2, nil, nil, true).Entity
|
|
local locked = targetent and targetent:IsValidLivingHuman() and gamemode.Call("PlayerCanBeHealed", targetent)
|
|
|
|
if CLIENT then
|
|
self:EmitSound(locked and "npc/scanner/combat_scan4.wav" or "npc/scanner/scanner_scan5.wav", 65, locked and 75 or 200)
|
|
end
|
|
self:SetSeekedPlayer(locked and targetent)
|
|
end
|
|
|
|
function SWEP:SetSeekedPlayer(ent)
|
|
self:SetDTEntity(6, ent)
|
|
end
|
|
|
|
function SWEP:GetSeekedPlayer()
|
|
return self:GetDTEntity(6)
|
|
end
|
|
|
|
function SWEP:Deploy()
|
|
if CLIENT then
|
|
hook.Add("PostPlayerDraw", "PostPlayerDrawMedical", GAMEMODE.PostPlayerDrawMedical)
|
|
GAMEMODE.MedicalAura = true
|
|
end
|
|
|
|
return BaseClass.Deploy(self)
|
|
end
|
|
|
|
function SWEP:Holster()
|
|
if CLIENT and self:GetOwner() == MySelf then
|
|
hook.Remove("PostPlayerDraw", "PostPlayerDrawMedical")
|
|
GAMEMODE.MedicalAura = false
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
function SWEP:OnRemove()
|
|
if CLIENT and self:GetOwner() == MySelf then
|
|
hook.Remove("PostPlayerDraw", "PostPlayerDrawMedical")
|
|
GAMEMODE.MedicalAura = false
|
|
end
|
|
end
|