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:
parent
6ebf7ab049
commit
c7ca128f3f
9 changed files with 116 additions and 35 deletions
|
@ -114,7 +114,7 @@ function ENT:FireTurret(src, dir)
|
||||||
|
|
||||||
self:StartBulletKnockback()
|
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: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()
|
self:EndBulletKnockback()
|
||||||
else
|
else
|
||||||
self:SetNextFire(CurTime() + 2)
|
self:SetNextFire(CurTime() + 2)
|
||||||
|
@ -202,7 +202,8 @@ function ENT:OnPackedUp(pl)
|
||||||
pl:GiveEmptyWeapon("weapon_zs_gunturret")
|
pl:GiveEmptyWeapon("weapon_zs_gunturret")
|
||||||
pl:GiveAmmo(1, "thumper")
|
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()
|
self:Remove()
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,7 +3,7 @@ ENT.RenderGroup = RENDERGROUP_BOTH
|
||||||
|
|
||||||
ENT.SearchDistance = 768
|
ENT.SearchDistance = 768
|
||||||
ENT.MinimumAimDot = 0.5
|
ENT.MinimumAimDot = 0.5
|
||||||
ENT.DefaultAmmo = 250
|
ENT.DefaultAmmo = 0 --250
|
||||||
ENT.MaxAmmo = 1000
|
ENT.MaxAmmo = 1000
|
||||||
|
|
||||||
ENT.NoReviveFromKills = true
|
ENT.NoReviveFromKills = true
|
||||||
|
|
|
@ -68,9 +68,12 @@ function SWEP:PrimaryAttack()
|
||||||
local stored = owner:PopPackedItem(ent:GetClass())
|
local stored = owner:PopPackedItem(ent:GetClass())
|
||||||
if stored then
|
if stored then
|
||||||
ent:SetObjectHealth(stored[1])
|
ent:SetObjectHealth(stored[1])
|
||||||
ent:SetAmmo(stored[2])
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local ammo = math.min(owner:GetAmmoCount("smg1"), 250)
|
||||||
|
ent:SetAmmo(ammo)
|
||||||
|
owner:RemoveAmmo(ammo, "smg1")
|
||||||
|
|
||||||
if not owner:HasWeapon("weapon_zs_gunturretcontrol") then
|
if not owner:HasWeapon("weapon_zs_gunturretcontrol") then
|
||||||
owner:Give("weapon_zs_gunturretcontrol")
|
owner:Give("weapon_zs_gunturretcontrol")
|
||||||
end
|
end
|
||||||
|
|
|
@ -380,6 +380,8 @@ function GM:LocalPlayerFound()
|
||||||
self.GUIMousePressed = self._GUIMousePressed
|
self.GUIMousePressed = self._GUIMousePressed
|
||||||
self.HUDWeaponPickedUp = self._HUDWeaponPickedUp
|
self.HUDWeaponPickedUp = self._HUDWeaponPickedUp
|
||||||
|
|
||||||
|
LocalPlayer().LegDamage = 0
|
||||||
|
|
||||||
if render.GetDXLevel() >= 80 then
|
if render.GetDXLevel() >= 80 then
|
||||||
self.RenderScreenspaceEffects = self._RenderScreenspaceEffects
|
self.RenderScreenspaceEffects = self._RenderScreenspaceEffects
|
||||||
end
|
end
|
||||||
|
@ -1245,7 +1247,7 @@ function GM:_CreateMove(cmd)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if MySelf:GetLegDamage() >= 0.5 then
|
if MySelf:GetAntiBunnyHopTime() >= 2 or MySelf:GetLegDamage() >= 0.5 then
|
||||||
local buttons = cmd:GetButtons()
|
local buttons = cmd:GetButtons()
|
||||||
if bit.band(buttons, IN_JUMP) ~= 0 then
|
if bit.band(buttons, IN_JUMP) ~= 0 then
|
||||||
cmd:SetButtons(buttons - IN_JUMP)
|
cmd:SetButtons(buttons - IN_JUMP)
|
||||||
|
|
|
@ -1600,6 +1600,8 @@ function GM:PlayerInitialSpawnRound(pl)
|
||||||
|
|
||||||
pl.BonusDamageCheck = 0
|
pl.BonusDamageCheck = 0
|
||||||
|
|
||||||
|
pl.LegDamage = 0
|
||||||
|
|
||||||
pl.DamageDealt = {}
|
pl.DamageDealt = {}
|
||||||
pl.DamageDealt[TEAM_UNDEAD] = 0
|
pl.DamageDealt[TEAM_UNDEAD] = 0
|
||||||
pl.DamageDealt[TEAM_HUMAN] = 0
|
pl.DamageDealt[TEAM_HUMAN] = 0
|
||||||
|
@ -3523,22 +3525,24 @@ function GM:PlayerSpawn(pl)
|
||||||
pl:SetNoTarget(false)
|
pl:SetNoTarget(false)
|
||||||
pl:SetMaxHealth(100)
|
pl:SetMaxHealth(100)
|
||||||
|
|
||||||
pl:Give("weapon_zs_fists")
|
|
||||||
|
|
||||||
if self.ZombieEscape then
|
if self.ZombieEscape then
|
||||||
pl:Give("weapon_zs_zeknife")
|
pl:Give("weapon_zs_zeknife")
|
||||||
pl:Give("weapon_zs_zegrenade")
|
pl:Give("weapon_zs_zegrenade")
|
||||||
pl:Give(table.Random(self.ZombieEscapeWeapons))
|
pl:Give(table.Random(self.ZombieEscapeWeapons))
|
||||||
elseif self.StartingLoadout then
|
else
|
||||||
self:GiveStartingLoadout(pl)
|
pl:Give("weapon_zs_fists")
|
||||||
elseif pl.m_PreRedeem then
|
|
||||||
if self.RedeemLoadout then
|
if self.StartingLoadout then
|
||||||
for _, class in pairs(self.RedeemLoadout) do
|
self:GiveStartingLoadout(pl)
|
||||||
pl:Give(class)
|
elseif pl.m_PreRedeem then
|
||||||
|
if self.RedeemLoadout then
|
||||||
|
for _, class in pairs(self.RedeemLoadout) do
|
||||||
|
pl:Give(class)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
pl:Give("weapon_zs_redeemers")
|
||||||
|
pl:Give("weapon_zs_swissarmyknife")
|
||||||
end
|
end
|
||||||
else
|
|
||||||
pl:Give("weapon_zs_redeemers")
|
|
||||||
pl:Give("weapon_zs_swissarmyknife")
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -141,10 +141,6 @@ function meta:SetZombieClassName(classname)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function meta:AddLegDamage(damage)
|
|
||||||
self:SetLegDamage(self:GetLegDamage() + damage)
|
|
||||||
end
|
|
||||||
|
|
||||||
function meta:SetPoints(points)
|
function meta:SetPoints(points)
|
||||||
self:SetDTInt(1, points)
|
self:SetDTInt(1, points)
|
||||||
end
|
end
|
||||||
|
@ -183,6 +179,10 @@ function meta:GetUnlucky()
|
||||||
return self.m_Unlucky
|
return self.m_Unlucky
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function meta:AddLegDamage(damage)
|
||||||
|
self:SetLegDamage(self:GetLegDamage() + damage)
|
||||||
|
end
|
||||||
|
|
||||||
function meta:SetLegDamage(damage)
|
function meta:SetLegDamage(damage)
|
||||||
self.LegDamage = CurTime() + math.min(GAMEMODE.MaxLegDamage, damage * 0.125)
|
self.LegDamage = CurTime() + math.min(GAMEMODE.MaxLegDamage, damage * 0.125)
|
||||||
if SERVER then
|
if SERVER then
|
||||||
|
@ -202,8 +202,22 @@ function meta:RawCapLegDamage(time)
|
||||||
end
|
end
|
||||||
|
|
||||||
function meta:GetLegDamage()
|
function meta:GetLegDamage()
|
||||||
local base = self.LegDamage or 0
|
return math.max(0, self.LegDamage - CurTime())
|
||||||
return math.max(0, base - 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
|
end
|
||||||
|
|
||||||
function meta:WouldDieFrom(damage, hitpos)
|
function meta:WouldDieFrom(damage, hitpos)
|
||||||
|
|
|
@ -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("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("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"
|
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")
|
local item = GM:AddStartingItem("infturret", "Infrared Gun Turret", nil, ITEMCAT_TOOLS, 75, nil, function(pl)
|
||||||
item.Countables = "prop_gunturret"
|
pl:GiveEmptyWeapon("weapon_zs_gunturret")
|
||||||
|
pl:GiveAmmo(1, "thumper")
|
||||||
|
pl:GiveAmmo(250, "smg1")
|
||||||
|
end)
|
||||||
|
item.Countables = {"weapon_zs_gunturret", "prop_gunturret"}
|
||||||
item.NoClassicMode = true
|
item.NoClassicMode = true
|
||||||
local item = GM:AddStartingItem("manhack", "Manhack", nil, ITEMCAT_TOOLS, 60, "weapon_zs_manhack")
|
local item = GM:AddStartingItem("manhack", "Manhack", nil, ITEMCAT_TOOLS, 60, "weapon_zs_manhack")
|
||||||
item.Countables = "prop_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("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("arsenalcrate", "Arsenal Crate", nil, ITEMCAT_TOOLS, 50, "weapon_zs_arsenalcrate")
|
||||||
GM:AddPointShopItem("resupplybox", "Resupply Box", nil, ITEMCAT_TOOLS, 200, "weapon_zs_resupplybox")
|
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("manhack", "Manhack", nil, ITEMCAT_TOOLS, 45, "weapon_zs_manhack")
|
||||||
GM:AddPointShopItem("barricadekit", "'Aegis' Barricade Kit", nil, ITEMCAT_TOOLS, 125, "weapon_zs_barricadekit")
|
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
|
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
|
||||||
|
|
|
@ -395,20 +395,24 @@ function GM:OnPlayerHitGround(pl, inwater, hitfloater, speed)
|
||||||
pl:PreventSkyCade()
|
pl:PreventSkyCade()
|
||||||
end
|
end
|
||||||
|
|
||||||
if not isundead or not pl:GetZombieClassTable().NoFallSlowdown then
|
if speed > 100 then
|
||||||
pl:RawCapLegDamage(CurTime() + math.min(2, speed * 0.0035))
|
pl:AddAntiBunnyHopTime(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
if SERVER then
|
if isundead then
|
||||||
if isundead then
|
speed = math.max(0, speed - 200)
|
||||||
speed = math.max(0, speed - 200)
|
end
|
||||||
|
|
||||||
|
local damage = (0.1 * (speed - 525)) ^ 1.45
|
||||||
|
if hitfloater then damage = damage / 2 end
|
||||||
|
|
||||||
|
if math.floor(damage) > 0 then
|
||||||
|
if damage >= 5 and (not isundead or not pl:GetZombieClassTable().NoFallSlowdown) then
|
||||||
|
pl:RawCapLegDamage(CurTime() + math.min(2, damage * 0.038))
|
||||||
end
|
end
|
||||||
|
|
||||||
local damage = (0.1 * (speed - 525)) ^ 1.45
|
if SERVER then
|
||||||
if hitfloater then damage = damage / 2 end
|
if damage >= 30 and damage < pl:Health() then
|
||||||
|
|
||||||
if math.floor(damage) > 0 then
|
|
||||||
if 20 <= damage and damage < pl:Health() then
|
|
||||||
pl:KnockDown(damage * 0.05)
|
pl:KnockDown(damage * 0.05)
|
||||||
end
|
end
|
||||||
pl:TakeSpecialDamage(damage, DMG_FALL, game.GetWorld(), game.GetWorld(), pl:GetPos())
|
pl:TakeSpecialDamage(damage, DMG_FALL, game.GetWorld(), game.GetWorld(), pl:GetPos())
|
||||||
|
|
44
gamemodes/zombiesurvival/gamemode/vgui/dmodelkillicon.lua
Normal file
44
gamemodes/zombiesurvival/gamemode/vgui/dmodelkillicon.lua
Normal 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")
|
Loading…
Reference in a new issue