Gun turret ammo fix.

Gun turrets no longer store their ammo in a separate table. Instead, the
user gets 250 SMG ammo when they buy it. The turret then removed 250 (or
less) from the player when it is placed.
This commit is contained in:
JetBoom 2014-12-19 00:52:24 -05:00
parent 6ebf7ab049
commit c7ca128f3f
9 changed files with 116 additions and 35 deletions

View file

@ -114,7 +114,7 @@ function ENT:FireTurret(src, dir)
self:StartBulletKnockback()
self:FireBullets({Num = 1, Src = src, Dir = dir, Spread = Vector(0.05, 0.05, 0), Tracer = 1, Force = 1, Damage = 12, Callback = BulletCallback})
self:DoBulletKnockback(0.05)
self:DoBulletKnockback(0.04)
self:EndBulletKnockback()
else
self:SetNextFire(CurTime() + 2)
@ -202,7 +202,8 @@ function ENT:OnPackedUp(pl)
pl:GiveEmptyWeapon("weapon_zs_gunturret")
pl:GiveAmmo(1, "thumper")
pl:PushPackedItem(self:GetClass(), self:GetObjectHealth(), self:GetAmmo())
pl:PushPackedItem(self:GetClass(), self:GetObjectHealth())
pl:GiveAmmo(self:GetAmmo(), "smg1")
self:Remove()
end

View file

@ -3,7 +3,7 @@ ENT.RenderGroup = RENDERGROUP_BOTH
ENT.SearchDistance = 768
ENT.MinimumAimDot = 0.5
ENT.DefaultAmmo = 250
ENT.DefaultAmmo = 0 --250
ENT.MaxAmmo = 1000
ENT.NoReviveFromKills = true

View file

@ -68,9 +68,12 @@ function SWEP:PrimaryAttack()
local stored = owner:PopPackedItem(ent:GetClass())
if stored then
ent:SetObjectHealth(stored[1])
ent:SetAmmo(stored[2])
end
local ammo = math.min(owner:GetAmmoCount("smg1"), 250)
ent:SetAmmo(ammo)
owner:RemoveAmmo(ammo, "smg1")
if not owner:HasWeapon("weapon_zs_gunturretcontrol") then
owner:Give("weapon_zs_gunturretcontrol")
end

View file

@ -380,6 +380,8 @@ function GM:LocalPlayerFound()
self.GUIMousePressed = self._GUIMousePressed
self.HUDWeaponPickedUp = self._HUDWeaponPickedUp
LocalPlayer().LegDamage = 0
if render.GetDXLevel() >= 80 then
self.RenderScreenspaceEffects = self._RenderScreenspaceEffects
end
@ -1245,7 +1247,7 @@ function GM:_CreateMove(cmd)
return
end
if MySelf:GetLegDamage() >= 0.5 then
if MySelf:GetAntiBunnyHopTime() >= 2 or MySelf:GetLegDamage() >= 0.5 then
local buttons = cmd:GetButtons()
if bit.band(buttons, IN_JUMP) ~= 0 then
cmd:SetButtons(buttons - IN_JUMP)

View file

@ -1600,6 +1600,8 @@ function GM:PlayerInitialSpawnRound(pl)
pl.BonusDamageCheck = 0
pl.LegDamage = 0
pl.DamageDealt = {}
pl.DamageDealt[TEAM_UNDEAD] = 0
pl.DamageDealt[TEAM_HUMAN] = 0
@ -3523,13 +3525,14 @@ function GM:PlayerSpawn(pl)
pl:SetNoTarget(false)
pl:SetMaxHealth(100)
pl:Give("weapon_zs_fists")
if self.ZombieEscape then
pl:Give("weapon_zs_zeknife")
pl:Give("weapon_zs_zegrenade")
pl:Give(table.Random(self.ZombieEscapeWeapons))
elseif self.StartingLoadout then
else
pl:Give("weapon_zs_fists")
if self.StartingLoadout then
self:GiveStartingLoadout(pl)
elseif pl.m_PreRedeem then
if self.RedeemLoadout then
@ -3541,6 +3544,7 @@ function GM:PlayerSpawn(pl)
pl:Give("weapon_zs_swissarmyknife")
end
end
end
local oldhands = pl:GetHands()
if IsValid(oldhands) then

View file

@ -141,10 +141,6 @@ function meta:SetZombieClassName(classname)
end
end
function meta:AddLegDamage(damage)
self:SetLegDamage(self:GetLegDamage() + damage)
end
function meta:SetPoints(points)
self:SetDTInt(1, points)
end
@ -183,6 +179,10 @@ function meta:GetUnlucky()
return self.m_Unlucky
end
function meta:AddLegDamage(damage)
self:SetLegDamage(self:GetLegDamage() + damage)
end
function meta:SetLegDamage(damage)
self.LegDamage = CurTime() + math.min(GAMEMODE.MaxLegDamage, damage * 0.125)
if SERVER then
@ -202,8 +202,22 @@ function meta:RawCapLegDamage(time)
end
function meta:GetLegDamage()
local base = self.LegDamage or 0
return math.max(0, base - CurTime())
return math.max(0, self.LegDamage - CurTime())
end
function meta:AddAntiBunnyHopTime(time)
self:SetAntiBunnyHopTime(math.max(CurTime(), self.ABHT) + time)
end
function meta:SetAntiBunnyHopTime(time)
self.ABHT = math.min(CurTime() + 4.5, time)
--[[if SERVER then
self:UpdateAntiBunnyHopTime()
end]]
end
function meta:GetAntiBunnyHopTime()
return math.max(0, self.ABHT - CurTime())
end
function meta:WouldDieFrom(damage, hitpos)

View file

@ -149,8 +149,12 @@ GM:AddStartingItem("medgun", "Medic Gun", nil, ITEMCAT_TOOLS, 45, "weapon_zs_med
GM:AddStartingItem("150mkit", "150 Medical Kit power", "150 extra power for the Medical Kit.", ITEMCAT_TOOLS, 30, nil, function(pl) pl:GiveAmmo(150, "Battery", true) end, "models/healthvial.mdl")
GM:AddStartingItem("arscrate", "Arsenal Crate", nil, ITEMCAT_TOOLS, 50, "weapon_zs_arsenalcrate").Countables = "prop_arsenalcrate"
GM:AddStartingItem("resupplybox", "Resupply Box", nil, ITEMCAT_TOOLS, 70, "weapon_zs_resupplybox").Countables = "prop_resupplybox"
local item = GM:AddStartingItem("infturret", "Infrared Gun Turret", nil, ITEMCAT_TOOLS, 75, "weapon_zs_gunturret")
item.Countables = "prop_gunturret"
local item = GM:AddStartingItem("infturret", "Infrared Gun Turret", nil, ITEMCAT_TOOLS, 75, nil, function(pl)
pl:GiveEmptyWeapon("weapon_zs_gunturret")
pl:GiveAmmo(1, "thumper")
pl:GiveAmmo(250, "smg1")
end)
item.Countables = {"weapon_zs_gunturret", "prop_gunturret"}
item.NoClassicMode = true
local item = GM:AddStartingItem("manhack", "Manhack", nil, ITEMCAT_TOOLS, 60, "weapon_zs_manhack")
item.Countables = "prop_manhack"
@ -239,7 +243,12 @@ GM:AddPointShopItem("crphmr", "Carpenter's Hammer", nil, ITEMCAT_TOOLS, 50, "wea
GM:AddPointShopItem("wrench", "Mechanic's Wrench", nil, ITEMCAT_TOOLS, 25, "weapon_zs_wrench").NoClassicMode = true
GM:AddPointShopItem("arsenalcrate", "Arsenal Crate", nil, ITEMCAT_TOOLS, 50, "weapon_zs_arsenalcrate")
GM:AddPointShopItem("resupplybox", "Resupply Box", nil, ITEMCAT_TOOLS, 200, "weapon_zs_resupplybox")
GM:AddPointShopItem("infturret", "Infrared Gun Turret", nil, ITEMCAT_TOOLS, 50, "weapon_zs_gunturret").NoClassicMode = true
local item = GM:AddPointShopItem("infturret", "Infrared Gun Turret", nil, ITEMCAT_TOOLS, 50, nil, function(pl)
pl:GiveEmptyWeapon("weapon_zs_gunturret")
pl:GiveAmmo(1, "thumper")
pl:GiveAmmo(250, "smg1")
end)
item.NoClassicMode = true
GM:AddPointShopItem("manhack", "Manhack", nil, ITEMCAT_TOOLS, 45, "weapon_zs_manhack")
GM:AddPointShopItem("barricadekit", "'Aegis' Barricade Kit", nil, ITEMCAT_TOOLS, 125, "weapon_zs_barricadekit")
GM:AddPointShopItem("nail", "Nail", "It's just one nail.", ITEMCAT_TOOLS, 5, nil, function(pl) pl:GiveAmmo(1, "GaussEnergy", true) end, "models/crossbow_bolt.mdl").NoClassicMode = true

View file

@ -395,11 +395,10 @@ function GM:OnPlayerHitGround(pl, inwater, hitfloater, speed)
pl:PreventSkyCade()
end
if not isundead or not pl:GetZombieClassTable().NoFallSlowdown then
pl:RawCapLegDamage(CurTime() + math.min(2, speed * 0.0035))
if speed > 100 then
pl:AddAntiBunnyHopTime(1)
end
if SERVER then
if isundead then
speed = math.max(0, speed - 200)
end
@ -408,7 +407,12 @@ function GM:OnPlayerHitGround(pl, inwater, hitfloater, speed)
if hitfloater then damage = damage / 2 end
if math.floor(damage) > 0 then
if 20 <= damage and damage < pl:Health() then
if damage >= 5 and (not isundead or not pl:GetZombieClassTable().NoFallSlowdown) then
pl:RawCapLegDamage(CurTime() + math.min(2, damage * 0.038))
end
if SERVER then
if damage >= 30 and damage < pl:Health() then
pl:KnockDown(damage * 0.05)
end
pl:TakeSpecialDamage(damage, DMG_FALL, game.GetWorld(), game.GetWorld(), pl:GetPos())

View file

@ -0,0 +1,44 @@
local PANEL = {}
function PANEL:SetModel(strModelName)
self.BaseClass.SetModel(self, strModelName)
self:AutoCam()
end
local matWhite = Material("models/debug/debugwhite")
function PANEL:Paint(w, h)
if !IsValid( self.Entity ) then return end
self:LayoutEntity( self.Entity )
local ang = self.aLookAngle
local x, y = self:LocalToScreen( 0, 0 )
local col = self.colColor
if not ang then
ang = (self.vLookatPos - self.vCamPos):Angle()
end
cam.Start3D(self.vCamPos, ang, self.fFOV, x, y, w, h, 5, self.FarZ)
cam.IgnoreZ(true)
render.SuppressEngineLighting(true)
render.SetColorModulation(col.r / 255, col.g / 255, col.b / 255)
render.SetBlend(col.a / 255)
render.ModelMaterialOverride(matWhite)
self:DrawModel()
render.ModelMaterialOverride()
render.SetBlend(1)
render.SetColorModulation(1, 1, 1)
render.SuppressEngineLighting(false)
cam.IgnoreZ(false)
cam.End3D()
self.LastPaint = RealTime()
end
vgui.Register("DModelKillIcon", PANEL, "DModelPanelEx")