zombiesurvival-evolved/gamemodes/zombiesurvival/gamemode/obj_weapon_extend.lua

282 lines
7.7 KiB
Lua
Raw Normal View History

2014-10-02 08:49:54 +08:00
local meta = FindMetaTable("Weapon")
if not meta then return end
meta.GetNextPrimaryAttack = meta.GetNextPrimaryFire
meta.GetNextSecondaryAttack = meta.GetNextSecondaryFire
meta.SetNextPrimaryAttack = meta.SetNextPrimaryFire
meta.SetNextSecondaryAttack = meta.SetNextSecondaryFire
function meta:EmptyAll()
if self.Primary and string.lower(self.Primary.Ammo or "") ~= "none" then
local owner = self:GetOwner()
if owner:IsValid() then
if self:Clip1() >= 1 then
owner:GiveAmmo(self:Clip1(), self.Primary.Ammo, true)
end
owner:RemoveAmmo(self.Primary.DefaultClip, self.Primary.Ammo)
end
self:SetClip1(0)
end
if self.Secondary and string.lower(self.Secondary.Ammo or "") ~= "none" then
local owner = self:GetOwner()
if owner:IsValid() then
if self:Clip2() >= 1 then
owner:GiveAmmo(self:Clip2(), self.Secondary.Ammo, true)
end
owner:RemoveAmmo(self.Secondary.DefaultClip, self.Secondary.Ammo)
end
self:SetClip2(0)
end
end
function meta:ValidPrimaryAmmo()
local ammotype = self:GetPrimaryAmmoTypeString()
if ammotype and ammotype ~= "none" then
return ammotype
end
end
function meta:ValidSecondaryAmmo()
local ammotype = self:GetSecondaryAmmoTypeString()
if ammotype and ammotype ~= "none" then
return ammotype
end
end
function meta:SetNextReload(fTime)
self.m_NextReload = fTime
end
function meta:GetNextReload()
return self.m_NextReload or 0
end
function meta:GetPrimaryAmmoCount()
return self.Owner:GetAmmoCount(self.Primary.Ammo) + self:Clip1()
end
function meta:GetSecondaryAmmoCount()
return self.Owner:GetAmmoCount(self.Secondary.Ammo) + self:Clip2()
end
function meta:HideViewAndWorldModel()
self:HideViewModel()
self:HideWorldModel()
end
meta.HideWorldAndViewModel = meta.HideViewAndWorldModel
if SERVER then
function meta:HideWorldModel()
self:DrawShadow(false)
end
function meta:HideViewModel()
end
end
function meta:TakeCombinedPrimaryAmmo(amount)
local ammotype = self.Primary.Ammo
local owner = self.Owner
local clip = self:Clip1()
local reserves = owner:GetAmmoCount(ammotype)
amount = math.min(reserves + clip, amount)
local fromreserves = math.min(reserves, amount)
if fromreserves > 0 then
amount = amount - fromreserves
self.Owner:RemoveAmmo(fromreserves, ammotype)
end
local fromclip = math.min(clip, amount)
if fromclip > 0 then
self:SetClip1(clip - fromclip)
end
end
function meta:TakeCombinedSecondaryAmmo(amount)
local ammotype = self.Secondary.Ammo
local owner = self.Owner
local clip = self:Clip2()
local reserves = owner:GetAmmoCount(ammotype)
amount = math.min(reserves + clip, amount)
local fromreserves = math.min(reserves, amount)
if fromreserves > 0 then
amount = amount - fromreserves
self.Owner:RemoveAmmo(fromreserves, ammotype)
end
local fromclip = math.min(clip, amount)
if fromclip > 0 then
self:SetClip2(clip - fromclip)
end
end
local TranslatedAmmo = {}
TranslatedAmmo[-1] = "none"
TranslatedAmmo[0] = "none"
TranslatedAmmo[1] = "ar2"
TranslatedAmmo[2] = "alyxgun"
TranslatedAmmo[3] = "pistol"
TranslatedAmmo[4] = "smg1"
TranslatedAmmo[5] = "357"
TranslatedAmmo[6] = "xbowbolt"
TranslatedAmmo[7] = "buckshot"
TranslatedAmmo[8] = "rpg_round"
TranslatedAmmo[9] = "smg1_grenade"
TranslatedAmmo[10] = "sniperround"
TranslatedAmmo[11] = "sniperpenetratedround"
TranslatedAmmo[12] = "grenade"
TranslatedAmmo[13] = "thumper"
TranslatedAmmo[14] = "gravity"
TranslatedAmmo[14] = "battery"
TranslatedAmmo[15] = "gaussenergy"
TranslatedAmmo[16] = "combinecannon"
TranslatedAmmo[17] = "airboatgun"
TranslatedAmmo[18] = "striderminigun"
TranslatedAmmo[19] = "helicoptergun"
TranslatedAmmo[20] = "ar2altfire"
TranslatedAmmo[21] = "slam"
function meta:GetPrimaryAmmoTypeString()
if self.Primary and self.Primary.Ammo then return string.lower(self.Primary.Ammo) end
return TranslatedAmmo[self:GetPrimaryAmmoType()] or "none"
end
function meta:GetSecondaryAmmoTypeString()
if self.Secondary and self.Secondary.Ammo then return string.lower(self.Secondary.Ammo) end
return TranslatedAmmo[self:GetSecondaryAmmoType()] or "none"
end
if not CLIENT then return end
function meta:DrawCrosshair()
if GetConVarNumber("crosshair") ~= 1 then return end
self:DrawCrosshairCross()
self:DrawCrosshairDot()
end
local ironsightscrosshair = CreateClientConVar("zs_ironsightscrosshair", "0", true, false):GetBool()
cvars.AddChangeCallback("zs_ironsightscrosshair", function(cvar, oldvalue, newvalue)
ironsightscrosshair = tonumber(newvalue) == 1
end)
local CrossHairScale = 1
local function DrawDot(x, y)
surface.SetDrawColor(GAMEMODE.CrosshairColor)
surface.DrawRect(x - 2, y - 2, 4, 4)
surface.SetDrawColor(0, 0, 0, 220)
surface.DrawOutlinedRect(x - 2, y - 2, 4, 4)
end
local matGrad = Material("VGUI/gradient-r")
local function DrawLine(x, y, rot)
rot = 270 - rot
surface.SetMaterial(matGrad)
surface.SetDrawColor(0, 0, 0, 220)
surface.DrawTexturedRectRotated(x, y, 14, 4, rot)
surface.SetDrawColor(GAMEMODE.CrosshairColor)
surface.DrawTexturedRectRotated(x, y, 12, 2, rot)
end
local baserot = 0
function meta:DrawCrosshairCross()
local x = ScrW() * 0.5
local y = ScrH() * 0.5
local ironsights = self.GetIronsights and self:GetIronsights()
local owner = self.Owner
local cone = self:GetCone()
if cone <= 0 or ironsights and not ironsightscrosshair then return end
cone = ScrH() / 76.8 * cone
CrossHairScale = math.Approach(CrossHairScale, cone, FrameTime() * math.max(5, math.abs(CrossHairScale - cone) * 0.02))
local midarea = 40 * CrossHairScale
local vel = LocalPlayer():GetVelocity()
local len = vel:Length()
if GAMEMODE.NoCrosshairRotate then
baserot = 0
else
baserot = math.NormalizeAngle(baserot + vel:GetNormalized():Dot(EyeAngles():Right()) * math.min(10, len / 200))
end
local ang = Angle(0, 0, baserot)
for i=0, 359, 360 / 4 do
ang.roll = baserot + i
local p = ang:Up() * midarea
DrawLine(math.Round(x + p.y), math.Round(y + p.z), ang.roll)
end
--[[local x = ScrW() * 0.5
local y = ScrH() * 0.5
local ironsights = self.GetIronsights and self:GetIronsights()
local owner = self.Owner
local cone = self:GetCone()
if cone <= 0 or ironsights and not ironsightscrosshair then return end
cone = ScrH() / 76.8 * cone
CrossHairScale = math.Approach(CrossHairScale, cone, FrameTime() * math.max(5, math.abs(CrossHairScale - cone) * 0.02))
local midarea = 40 * CrossHairScale
local vel = LocalPlayer():GetVelocity()
local len = vel:Length()
if GAMEMODE.NoCrosshairRotate then
baserot = 0
else
baserot = math.NormalizeAngle(baserot + vel:GetNormalized():Dot(EyeAngles():Right()) * math.min(10, len / 200))
end
local ang = Angle(0, 0, baserot)
for i=0, 359, 60 do
ang.roll = baserot + i
local p = ang:Up() * midarea
DrawDot(x + p.y, y + p.z)
end]]
end
function meta:DrawCrosshairDot()
local x = ScrW() * 0.5
local y = ScrH() * 0.5
surface.SetDrawColor(GAMEMODE.CrosshairColor2)
surface.DrawRect(x - 2, y - 2, 4, 4)
surface.SetDrawColor(0, 0, 0, 220)
surface.DrawOutlinedRect(x - 2, y - 2, 4, 4)
end
function meta:BaseDrawWeaponSelection(x, y, wide, tall, alpha)
--if killicon.Get(self:GetClass()) then
killicon.Draw(x + wide * 0.5, y + tall * 0.5, self:GetClass(), 255)
draw.SimpleTextBlur(self:GetPrintName(), "ZSHUDFontSmaller", x + wide * 0.5, y + tall * 0.25, COLOR_RED, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
--[[else
draw.SimpleTextBlur(self:GetPrintName(), "ZSHUDFontSmaller", x + wide * 0.5, y + tall * 0.5, COLOR_RED, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
end]]
end
local function empty() end
local function NULLViewModelPosition(self, pos, ang)
return pos + ang:Forward() * -256, ang
end
function meta:HideWorldModel()
self:DrawShadow(false)
self.DrawWorldModel = empty
self.DrawWorldModelTranslucent = empty
end
function meta:HideViewModel()
self.GetViewModelPosition = NULLViewModelPosition
end