add sborka

This commit is contained in:
2026-03-31 10:27:04 +03:00
commit f5e5f56c84
2345 changed files with 382127 additions and 0 deletions

View File

@@ -0,0 +1,666 @@
// spawnable
SWEP.Spawnable = false
SWEP.AdminOnly = false
// names and stuff
SWEP.PrintName = "Arctic's Tactical RP Base"
SWEP.Category = "[FT] Оружие"
SWEP.Description = ""
SWEP.Description_Quote = nil // Italics, always on last line. Make sure to save some space for it (may overlap)
SWEP.Trivia_Caliber = nil
SWEP.Trivia_Manufacturer = nil
SWEP.Trivia_Year = nil // Production Year
SWEP.Faction = TacRP.FACTION_NEUTRAL // Only used in trivia for now
// Valid values: TacRP.FACTION_NEUTRAL, TacRP.FACTION_COALITION, TacRP.FACTION_MILITIA
SWEP.Credits = nil // Multiline string like Description
SWEP.ViewModel = ""
SWEP.WorldModel = ""
SWEP.ViewModelFOV = 65
SWEP.NoRanger = false
SWEP.NoStatBox = false
SWEP.NPCUsable = true
SWEP.Slot = 1
SWEP.RenderGroup = RENDERGROUP_BOTH
SWEP.BalanceStats = {} // replacement stats for each TacRP.BALANCE_ enum
// What weapon this will replace in TTT if enabled. Use TacRP.TTTReplacePreset presets or define your own
SWEP.TTTReplace = nil // {["weapon_ttt_glock"] = 1} // key is weapon to replace, value is relative weight.
// "ballistics"
SWEP.Damage_Max = 30 // damage at minimum range
SWEP.Damage_Min = 20 // damage at maximum range
SWEP.Range_Min = 256 // distance for which to maintain maximum damage
SWEP.Range_Max = 1024 // distance at which we drop to minimum damage
SWEP.Penetration = 0 // units of metal this weapon can penetrate
SWEP.ArmorPenetration = 0.5 // How good the weapon can penetrate body armor.
SWEP.ArmorBonus = 1 // multiplier on armor damage
SWEP.DamageMultNPC = 1 // Damage multiplier against NPCs and Nextbots
SWEP.DamageType = nil // override damage type
SWEP.ShootEnt = false
SWEP.ShootEntForce = 10000
SWEP.Num = 1
SWEP.TracerNum = 1
SWEP.BodyDamageMultipliers = {
[HITGROUP_HEAD] = 1.25,
[HITGROUP_CHEST] = 1,
[HITGROUP_STOMACH] = 1,
[HITGROUP_LEFTARM] = 1,
[HITGROUP_RIGHTARM] = 1,
[HITGROUP_LEFTLEG] = 0.9,
[HITGROUP_RIGHTLEG] = 0.9,
[HITGROUP_GEAR] = 0.9
}
SWEP.MuzzleVelocity = 30000
SWEP.ExplosiveEffect = nil
SWEP.ExplosiveDamage = 0
SWEP.ExplosiveRadius = 0
// misc. shooting
// Firemode system works just like ArcCW
// 2 = full auto
// 1 = semi auto
// 0 = safe
// negative numbers = burst
SWEP.Firemode = 2
SWEP.Firemodes = nil // {1, 2, 0} ...
SWEP.RunawayBurst = false // continue firing until burst is completely expended
SWEP.PostBurstDelay = 0 // only applies to runaway burst guns
SWEP.AutoBurst = false // hold the trigger to keep firing burst after burst
SWEP.RPM = 600
SWEP.RPMMultBurst = 1 // modify RPM while in burst mode
SWEP.RPMMultSemi = 1 // modify RPM while in semi mode
SWEP.Spread = 0.01
SWEP.ShootTimeMult = 1
SWEP.Bipod = false // Weapon can deploy bipod
SWEP.BipodRecoil = 0.35 // Recoil Amount multiplier per shot
SWEP.BipodKick = 0.25 // Recoil Kick multiplier
SWEP.TriggerDelay = 0.0
// SWEP.ShootChance = 1
SWEP.JamWaitTime = 0.3
SWEP.JamFactor = 0 // higher = more frequent jams. no jams at 0
SWEP.JamTakesRound = false // consume ammo on jam
SWEP.JamSkipFix = false // only do dryfire and the initial delay. use on revolvers mostly
SWEP.JamBaseMSB = nil // use this number as the base value instead of being based on ammo.
// Spread penalties are in spread units and are additive
SWEP.MoveSpreadPenalty = 0.01 // spread penalty while travelling at max. 250 u/s
SWEP.MidAirSpreadPenalty = 0.1 // spread penalty for being in the air
SWEP.HipFireSpreadPenalty = 0.02 // spread penalty for not being scoped in
SWEP.ScopedSpreadPenalty = 0 // spread penalty for... being scoped in?
SWEP.BlindFireSpreadPenalty = 0 // spread penalty for blind firing
SWEP.CrouchSpreadPenalty = 0
SWEP.PeekPenaltyFraction = 0.3 // percentage of hipfire penalty to use while peeking in sights
// Technically does not affect recoil at all, but affects spread (now called "bloom")
SWEP.RecoilPerShot = 1
SWEP.RecoilMaximum = 10
SWEP.RecoilResetTime = 0 // time after you stop shooting for recoil to start dissipating
SWEP.RecoilDissipationRate = 2
SWEP.RecoilFirstShotMult = 1 // multiplier for the first shot's recoil amount
SWEP.RecoilSpreadPenalty = 0.001 // extra spread per one unit of recoil
SWEP.RecoilResetInstant = true // Set false to account for RPM.
SWEP.RecoilMultBurst = 0.9 // Affects both "bloom" and recoil kick while current firemode is burst
SWEP.RecoilMultSemi = 0.9 // Affects both "bloom" and recoil kick while current firemode is semi
SWEP.RecoilMultCrouch = 0.85 // Affects both "bloom" and recoil kick while crouched
// Controls alternate bloom behavior, defaults to convar
SWEP.AlwaysAltRecoil = nil
SWEP.NeverAltRecoil = nil
SWEP.RecoilVisualKick = 0.1
SWEP.RecoilKick = 0.25
SWEP.RecoilStability = 0 // Direction of recoil kick, 1 is completely vertical and 0 is 180deg cone
SWEP.RecoilAltMultiplier = 200 // Multiplier to RecoilSpreadPenalty when using alternative recoil mode.
SWEP.ShotgunPelletSpread = 0 // per-pellet spread for shotguns (if enabled). Otherwise just adds to spread
SWEP.NoRecoilPattern = false // set true to not use recoil patterns for this gun
SWEP.RecoilPatternSeed = nil // custom seed. Defaults to weapon class
SWEP.CanBlindFire = true
SWEP.CannotHipFire = false
// lockon
// We're using a new system for lockon now, which doesn't use this system.
// SWEP.LockOnAngle = math.cos(math.rad(5))
SWEP.LockOnTrackAngle = 5
SWEP.LockOnRange = 3500
SWEP.LockOnTime = 1.5
SWEP.ProvideTargetData = true
SWEP.LockOnOutOfSights = false
SWEP.LockOnInSights = false
SWEP.RequireLockOn = false // Cannot shoot without a lock
// handling
SWEP.MoveSpeedMult = 1
SWEP.ShootingSpeedMult = 0.5 // slow down applied while shooting
SWEP.SightedSpeedMult = 0.5
SWEP.MeleeSpeedMult = 0.75
SWEP.MeleeSpeedMultTime = 1 // seconds to apply slow down for
SWEP.ReloadSpeedMult = 1
SWEP.ReloadSpeedMultTime = 0.5 // duration for slowdown to fade out for AFTER RELOAD FINISHES
SWEP.ShootWhileSprint = false
SWEP.AimDownSightsTime = 0.25
SWEP.SprintToFireTime = 0.25 // how long it takes to go from sprinting to shooting
// hold types
SWEP.HoldType = "ar2"
SWEP.HoldTypeSprint = "passive"
SWEP.HoldTypeBlindFire = false
SWEP.HoldTypeCustomize = "slam"
SWEP.HoldTypeNPC = nil
SWEP.HoldTypeSuicide = "pistol"
SWEP.GestureShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.GestureReload = ACT_HL2MP_GESTURE_RELOAD_AR2
SWEP.GestureBash = ACT_GMOD_GESTURE_MELEE_SHOVE_1HAND
SWEP.PassiveAng = Angle(0, 0, 0)
SWEP.PassivePos = Vector(0, 0, 0)
SWEP.SprintAng = Angle(0, 45, 0)
SWEP.SprintPos = Vector(0, 0, 0)
SWEP.BlindFireAng = Angle(0, 15, 0)
SWEP.BlindFirePos = Vector(0, 0, -6)
SWEP.BlindFireLeftAng = Angle(75, 0, 0)
SWEP.BlindFireLeftPos = Vector(8, 14, -12)
SWEP.BlindFireRightAng = Angle(-75, 0, 0)
SWEP.BlindFireRightPos = Vector(-8, 14, -12)
SWEP.BlindFireSuicideAng = Angle(0, 145, 130)
SWEP.BlindFireSuicidePos = Vector(-6, 32, -26)
SWEP.CustomizeAng = Angle(30, 15, 0)
SWEP.CustomizePos = Vector(6, 0, -7)
SWEP.SightAng = Angle(0, 0, 0)
SWEP.SightPos = Vector(0, 1, 1)
SWEP.PeekAng = Angle(0, 0, -7)
SWEP.PeekPos = Vector(3, 2, -1.5)
SWEP.HolsterVisible = false
SWEP.HolsterSlot = TacRP.HOLSTER_SLOT_BACK
SWEP.HolsterPos = Vector(0, 0, 0)
SWEP.HolsterAng = Angle(0, 0, 0)
SWEP.HolsterModel = nil // string, model.
SWEP.SightMidPoint = {
Pos = Vector(-1, 15, -6),
Ang = Angle(0, 0, -45)
}
SWEP.SprintMidPoint = {
Pos = Vector(4, 10, 2),
Ang = Angle(0, -10, -45)
}
SWEP.NearWallPos = Vector(0, 6, 0)
SWEP.NearWallAng = Angle(-3, 5, -5)
// scope
SWEP.Scope = true
SWEP.ScopeOverlay = nil // Material("path/to/overlay")
SWEP.ScopeFOV = 90 / 1.1
SWEP.ScopeLevels = 1 // 2 = like CS:S
SWEP.ScopeHideWeapon = false
SWEP.QuickScopeSpreadPenalty = 0.05
SWEP.QuickScopeTime = 0.2 // amount of time over which to fade out the quickscope spread penalty
// sway
SWEP.Sway = 1
SWEP.ScopedSway = 0.1
SWEP.BlindFireSway = 2
SWEP.SwayCrouchMult = 0.75
SWEP.BreathRecovery = 1
SWEP.BreathDrain = 1
SWEP.FreeAim = true
SWEP.FreeAimMaxAngle = 3.5
SWEP.ShootOffset = Vector(0, 0, 0)
SWEP.ShootOffsetAngle = Angle(0, 0, 0)
// quicknade
SWEP.CanQuickNade = true
SWEP.QuickNadeTimeMult = 1
// melee
SWEP.CanMeleeAttack = true
SWEP.MeleeDamage = 25
SWEP.MeleeAttackTime = 0.8 // time between swings
SWEP.MeleeRange = 96
SWEP.MeleeDamageType = DMG_GENERIC
SWEP.MeleeDelay = 0.25 // delay between swing start and trace
// secondary attack, used on knives
SWEP.Melee2Damage = nil
SWEP.Melee2AttackTime = nil
SWEP.Melee2Range = nil
SWEP.Melee2AttackMissTime = nil
SWEP.Melee2Delay = nil
SWEP.MeleeThrowForce = 3000
// used on knife perks
SWEP.MeleePerkStr = 0.5
SWEP.MeleePerkAgi = 0.5
SWEP.MeleePerkInt = 0.5
// reload
SWEP.AmmoPerShot = 1
SWEP.ClipSize = 30
SWEP.Ammo = "pistol"
SWEP.InfiniteAmmo = false // do not consume reserve ammo
SWEP.SupplyAmmoAmount = false // overrides clipsize/ammo for ammo pickups
SWEP.SupplyLimit = 1 // Multiplier for supply ammo
SWEP.TryUnholster = false // if we have an "unholster" animation use it instead of "deploy"
SWEP.ShotgunReload = false
SWEP.ShotgunThreeload = true // use those stupid 3 shot reload animations
SWEP.ShotgunReloadCompleteStart = false // do not interrupt reload_start and instead wait for it to finish first. used on FP6 animations
SWEP.ShotgunFullCancel = false // Ignore tacrp_reload_sg_cancel and force cancel animation
SWEP.ShotgunNoReverseStart = true // don't reverse starting animation on a non-empty reload
SWEP.ShotgunUpInTime = 0.9 // time after which one round is finished loading
SWEP.ReloadUpInTime = nil // time to restore ammo, if unset restores at end of animation
SWEP.ReloadTimeMult = 1
SWEP.DeployTimeMult = 1
SWEP.HolsterTimeMult = 1
SWEP.UnholsterTimeMult = 1
SWEP.DropMagazineModel = false
SWEP.DropMagazineImpact = "pistol" // available: "pistol", "plastic", "metal", "bullet", "shotgun"
SWEP.DropMagazineAmount = 1
SWEP.DropMagazineTime = 0
SWEP.MidReload = false // allow guns with "midreload" animation to continue reload after holster
SWEP.DefaultBodygroups = "0000000"
SWEP.DefaultWMBodygroups = "0000000"
SWEP.DefaultSkin = 0
SWEP.BulletBodygroups = nil
SWEP.BulletBodygroupsSetAll = false // Set all applicable bullet groups, rather than just the last
/*
{
[1] = {5, 1}
}
*/
SWEP.LoadInTime = 0.25 // how long to replenish the visible "belt" of ammo
SWEP.ShotgunLoadInTime = 0.9 // visual update delay for shotguns
// sounds
SWEP.Sound_Shoot = "^"
SWEP.Sound_Shoot_Silenced = ""
SWEP.Vol_Shoot = 130
SWEP.Pitch_Shoot = 100
SWEP.Loudness_Shoot = 1
SWEP.ShootPitchVariance = 2.5 // amount to vary pitch by each shot
SWEP.Sound_ScopeIn = ""
SWEP.Sound_MeleeAttack = ""
SWEP.Sound_DryFire = "TacRP/weapons/dryfire_pistol-1.wav"
SWEP.Sound_Jam = "TacRP/malfunction.wav"
SWEP.Sound_BipodDown = "tacrp/bipod_down.wav"
SWEP.Sound_BipodUp = "tacrp/bipod_up.wav"
SWEP.Sound_MeleeSwing = ""
SWEP.Sound_ToggleTactical = "tacrp/firemode.wav"
SWEP.Sound_StartLockOn = "tacrp/check1.wav"
SWEP.Sound_FinishLockOn = "tacrp/locked1.wav"
// effects
SWEP.EffectsAlternate = false // Effects will alternate using L and R attachments.
SWEP.EffectsDoubled = false // Per shot, play effects a second time on the other attachment.
// .qc attachment for muzzle flash and eject when EffectsAlternate is NOT true.
SWEP.QCA_Muzzle = 1
SWEP.QCA_Eject = 2
// .qc attachments when EffectsAlternate is set to true.
SWEP.QCA_MuzzleL = 3
SWEP.QCA_MuzzleR = 4
SWEP.QCA_EjectL = 6
SWEP.QCA_EjectR = 7
// ditto but for worldmodel
SWEP.WM_QCA_Muzzle = 1
SWEP.WM_QCA_Eject = 2
SWEP.WM_QCA_MuzzleL = 1
SWEP.WM_QCA_MuzzleR = 2
SWEP.WM_QCA_EjectL = 3
SWEP.WM_QCA_EjectR = 4
SWEP.MuzzleEffect = "muzzleflash_pistol"
SWEP.EjectEffect = 0 // 1 = pistol, 2 = rifle, 3 = shotgun
SWEP.EjectDelay = 0
SWEP.EjectScale = 1
// anims
// VM:
// idle
// fire
// fire1, fire2...
// dryfire
// melee
// reload
// midreload
// prime_grenade
// throw_grenade
// throw_grenade_underhand
// deploy
// blind_idle
// blind_fire
// blind_fire1, blind_fire2...
// blind_dryfire
// WM:
// attack1
SWEP.AnimationTranslationTable = {
["melee"] = {"melee1", "melee2"},
["jam"] = "midreload"
} // translates ["fire"] = "shoot"; key = translates from, value = translates to
// e.g. you have a "shoot1" sequence and need "fire"
// so ["fire"] = "shoot1"
// can be ["fire"] = {"list", "of", "values"}
SWEP.ProceduralIronFire = nil // procedurally animate the viewmodel and bones when using ironsights
// {
// vm_pos = Vector(0, -0.5, -0.6),
// vm_ang = Angle(0, 2, 0),
// t = 0.2, // duration of vm pos/ang
// tmax = 0.2, // clean up after this time has passed
// bones = {
// {
// bone = "ValveBiped.slide",
// pos = Vector(0, 0, -3), // optional
// ang = Angle(0, 0, 0), // optional
// t0 = 0.05, // duration to reach full movement
// t1 = 0.2, // duration to reset
// },
// },
// }
SWEP.NoHolsterAnimation = false // Will play draw reversed instead
SWEP.LastShot = false
// Use special animation setup for akimbo pistols.
// Does not adjust effects - set AlternatingEffects separately.
SWEP.Akimbo = false
// attachments
SWEP.AttachmentElements = nil
/*
{
["bg_name"] = {
BGs_VM = {
{1, 1}
},
BGs_WM = {
{1, 1}
},
AttPosMods = {
[1] = {
Pos_VM = Vector(),
Pos_WM = Vector(),
Ang_VM = Angle(),
Ang_WM = Angle(),
},
},
SortOrder = 1, // defaults to 1, higher value means process later
}
}
*/
SWEP.Attachments = nil
// {
// [1] = {
// Installed = nil,
// Default = nil, // install this attachment by default
// InstalledElements = "", // single or list of elements to activate when something is installed here
// UnInstalledElements = "",
// Integral = false, // cannot be removed
// Category = "", // single or {"list", "of", "values"}
// Bone = "",
// WMBone = "",
// Pos_VM = Vector(0, 0, 0),
// Pos_WM = Vector(0, 0, 0),
// Ang_VM = Angle(0, 0, 0),
// Ang_WM = Angle(0, 0, 0),
// CapacityMult = 1, // multiply the amount of Capacity this attachment occupies
// }
// }
// boilerplate
SWEP.FreeAim = true
SWEP.ArcticTacRP = true
SWEP.DrawCrosshair = true
SWEP.AccurateCrosshair = true
SWEP.DrawWeaponInfoBox = false
SWEP.UseHands = true
SWEP.Shields = {}
SWEP.CurrentAnimation = ""
SWEP.Primary.Automatic = false
SWEP.Primary.ClipSize = 0
SWEP.Primary.Ammo = ""
SWEP.Primary.DefaultClip = 0
SWEP.Secondary.Automatic = true
SWEP.Secondary.ClipSize = -1
SWEP.Secondary.Ammo = ""
SWEP.Secondary.DefaultClip = 0
SWEP.GaveDefaultAmmo = false
SWEP.BounceWeaponIcon = false
SWEP.SwayScale = 1
SWEP.BobScale = 1
SWEP.LaserColor = Color(255, 0, 0)
SWEP.ActiveEffects = {}
SWEP.PCFs = {}
SWEP.MuzzPCFs = {}
AddCSLuaFile()
local searchdir = "weapons/tacrp_base"
local function autoinclude(dir)
local files, dirs = file.Find(searchdir .. "/*.lua", "LUA")
for _, filename in pairs(files) do
if filename == "shared.lua" then continue end
local luatype = string.sub(filename, 1, 2)
if luatype == "sv" then
if SERVER then
include(dir .. "/" .. filename)
end
elseif luatype == "cl" then
AddCSLuaFile(dir .. "/" .. filename)
if CLIENT then
include(dir .. "/" .. filename)
end
else
AddCSLuaFile(dir .. "/" .. filename)
include(dir .. "/" .. filename)
end
end
for _, path in pairs(dirs) do
autoinclude(dir .. "/" .. path)
end
end
autoinclude(searchdir)
function SWEP:SetupDataTables()
self:NetworkVar("Float", 0, "RecoilAmount")
self:NetworkVar("Float", 1, "AnimLockTime")
self:NetworkVar("Float", 2, "NextIdle")
self:NetworkVar("Float", 3, "LastRecoilTime")
self:NetworkVar("Float", 4, "RecoilDirection")
self:NetworkVar("Float", 5, "SprintAmount")
self:NetworkVar("Float", 6, "SprintLockTime")
self:NetworkVar("Float", 7, "LastScopeTime")
self:NetworkVar("Float", 8, "LastMeleeTime")
self:NetworkVar("Float", 9, "PrimedGrenadeTime")
self:NetworkVar("Float", 10, "StartPrimedGrenadeTime")
self:NetworkVar("Float", 11, "ReloadFinishTime")
self:NetworkVar("Float", 12, "NWSightAmount")
self:NetworkVar("Float", 13, "BlindFireFinishTime")
self:NetworkVar("Float", 14, "HolsterTime")
self:NetworkVar("Float", 15, "NWLastProceduralFireTime")
self:NetworkVar("Float", 16, "NWHoldBreathAmount")
self:NetworkVar("Float", 17, "Breath")
self:NetworkVar("Float", 18, "LockOnStartTime")
self:NetworkVar("Int", 0, "BurstCount")
self:NetworkVar("Int", 1, "ScopeLevel")
self:NetworkVar("Int", 2, "NthShot")
self:NetworkVar("Int", 3, "LoadedRounds")
self:NetworkVar("Int", 4, "Firemode")
self:NetworkVar("Int", 5, "PatternCount")
self:NetworkVar("Bool", 0, "Customize")
self:NetworkVar("Bool", 1, "Reloading")
self:NetworkVar("Bool", 2, "BlindFire")
self:NetworkVar("Bool", 3, "EndReload")
self:NetworkVar("Bool", 4, "PrimedGrenade")
self:NetworkVar("Bool", 5, "Safe")
self:NetworkVar("Bool", 6, "BlindFireLeft")
self:NetworkVar("Bool", 7, "Tactical")
self:NetworkVar("Bool", 8, "Charge")
self:NetworkVar("Bool", 9, "NWPeeking")
self:NetworkVar("Bool", 10, "BlindFireRight") // bleh, but actually less networking load than using an integer (32 bit)
self:NetworkVar("Bool", 11, "Jammed")
self:NetworkVar("Bool", 12, "Ready")
self:NetworkVar("Bool", 13, "InBipod")
self:NetworkVar("Bool", 14, "OutOfBreath")
self:NetworkVar("Bool", 15, "HoldingBreath")
self:NetworkVar("Bool", 16, "LastWasSprinting")
self:NetworkVar("Bool", 17, "EmptyReload")
self:NetworkVar("Angle", 0, "FreeAimAngle")
self:NetworkVar("Angle", 1, "LastAimAngle")
self:NetworkVar("Angle", 2, "BipodAngle")
self:NetworkVar("Vector", 0, "BipodPos")
self:NetworkVar("Entity", 0, "HolsterEntity")
self:NetworkVar("Entity", 1, "CornershotEntity")
self:NetworkVar("Entity", 2, "LockOnEntity")
self:SetFreeAimAngle(Angle())
self:SetLastAimAngle(Angle())
self:SetFiremode(1)
self:SetTactical(true)
self:SetReady(false)
self:SetBreath(1)
self:SetHoldBreathAmount(0)
self:SetLastWasSprinting(false)
self:SetHoldingBreath(false)
self:SetLockOnEntity(NULL)
self:SetLockOnStartTime(0)
end
function SWEP:OnDrop(owner)
if self.PreviousZoom and IsValid(owner) then
owner:SetCanZoom(true)
end
self:SetReady(false)
end
function SWEP:SecondaryAttack()
self:RunHook("Hook_SecondaryAttack")
return
end
local function clunpredictvar(tbl, name, varname, default)
local clvar = "CL_" .. name
tbl[clvar] = default
tbl["Set" .. name] = function(self, v)
if (!game.SinglePlayer() and CLIENT and self:GetOwner() == LocalPlayer()) then self[clvar] = v end
self["Set" .. varname](self, v)
end
tbl["Get" .. name] = function(self)
if (!game.SinglePlayer() and CLIENT and self:GetOwner() == LocalPlayer()) then return self[clvar] end
return self["Get" .. varname](self)
end
end
clunpredictvar(SWEP, "SightAmount", "NWSightAmount", 0)
-- clunpredictvar(SWEP, "SprintAmount", "NWSprintAmount", 0)
clunpredictvar(SWEP, "LastProceduralFireTime", "NWLastProceduralFireTime", 0)
clunpredictvar(SWEP, "HoldBreathAmount", "NWHoldBreathAmount", 0)