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

144 lines
3.3 KiB
Lua
Raw Permalink Normal View History

SWEP.Base = "weapon_zs_basemelee"
SWEP.PrintName = "Food"
SWEP.Slot = 4
SWEP.SlotPos = 0
SWEP.ViewModel = "models/weapons/c_grenade.mdl"
SWEP.WorldModel = "models/weapons/w_crowbar.mdl"
SWEP.UseHands = true
SWEP.HoldType = "slam"
SWEP.SwingHoldType = "camera"
SWEP.Primary.ClipSize = 1
SWEP.Primary.Automatic = false
SWEP.Primary.Ammo = "watermelon"
SWEP.Primary.Delay = 1
SWEP.Primary.DefaultClip = 1
SWEP.FoodHealth = 15
SWEP.FoodEatTime = 4
SWEP.EatViewAngles = Angle(80, 0, 15)
SWEP.EatViewOffset = Vector(-8, -40, 0)
SWEP.AmmoIfHas = true
SWEP.NoPickupIfHas = true
SWEP.NoMagazine = true
SWEP.DroppedColorModulation = Color(1, 0, 1)
SWEP.NeedToPlayEatSound = true
SWEP.SugarRushFood = false
SWEP.WalkSpeed = SPEED_NORMAL
AccessorFuncDT(SWEP, "EatEndTime", "Float", 0)
AccessorFuncDT(SWEP, "EatStartTime", "Float", 1)
SWEP.Weight = 1
function SWEP:CanEat()
local owner = self:GetOwner()
if owner:GetStatus("sickness") then return false end
if owner:IsSkillActive(SKILL_SUGARRUSH) then
return true
end
if owner:IsSkillActive(SKILL_GLUTTON) then
return owner:GetBloodArmor() < owner.MaxBloodArmor + (40 * owner.MaxBloodArmorMul)
end
local max = owner:IsSkillActive(SKILL_D_FRAIL) and math.floor(owner:GetMaxHealth() * 0.25) or owner:GetMaxHealth()
return owner:Health() < max
end
function SWEP:PrimaryAttack()
if self:GetEatEndTime() == 0 and self:CanEat() then
self:SetEatStartTime(CurTime())
self:SetEatEndTime(CurTime() + self:GetFoodEatTime())
end
end
function SWEP:SecondaryAttack()
if not self:CanPrimaryAttack() then return end
self:SetNextPrimaryFire(CurTime() + self.Primary.Delay)
local owner = self:GetOwner()
if owner:HasTrinket("processor") then
owner:EmitSound("weapons/bugbait/bugbait_squeeze1.wav", 65, 150)
if SERVER then
owner:GiveAmmo(self.FoodHealth * 2, "Battery")
owner:StripWeapon(self:GetClass())
end
end
end
function SWEP:Reload()
end
function SWEP:Think()
if self:GetEatEndTime() > 0 then
local time = CurTime()
if math.cos(12 * math.pi * (time - self:GetEatStartTime()) / self:GetFoodEatTime()) < 0 then -- Derivitive of sin(x) = cos(x/2)
if self.NeedToPlayEatSound then
self.NeedToPlayEatSound = false
local snd
if self.FoodIsLiquid then
snd = "zombiesurvival/drink"..math.random(3)..".ogg"
else
snd = "zombiesurvival/eat1.ogg"
end
self:EmitSound(snd, 60, math.random(90, 110))
end
else
self.NeedToPlayEatSound = true
end
if time >= self:GetEatEndTime() then
self:SetEatEndTime(0)
if SERVER then
self:Eat()
return
end
end
local owner = self:GetOwner()
if not owner:IsValid() then return end
if owner:GetStatus("sickness") then
self:SetEatEndTime(0)
end
if owner:IsSkillActive(SKILL_GLUTTON) or owner:IsSkillActive(SKILL_SUGARRUSH) then return end
local max = owner:IsSkillActive(SKILL_D_FRAIL) and math.floor(owner:GetMaxHealth() * 0.25) or owner:GetMaxHealth()
if owner:Health() >= max then
self:SetEatEndTime(0)
end
end
end
function SWEP:Holster()
self:SetEatStartTime(0)
self:SetEatEndTime(0)
return true
end
function SWEP:Deploy()
gamemode.Call("WeaponDeployed", self:GetOwner(), self)
return true
end
function SWEP:GetFoodEatTime()
return self.FoodEatTime * (self:GetOwner():IsValid() and self:GetOwner().FoodEatTimeMul or 1)
end