Залив
This commit is contained in:
130
lua/weapons/mg_base/modules/shared/sh_datatables.lua
Normal file
130
lua/weapons/mg_base/modules/shared/sh_datatables.lua
Normal file
@@ -0,0 +1,130 @@
|
||||
AddCSLuaFile()
|
||||
require("mw_utils")
|
||||
|
||||
--name, int
|
||||
SWEP.NetworkedFlags = {}
|
||||
SWEP.NetworkedFlagIndices = {}
|
||||
|
||||
local function getFlagIndex(networkedFlag)
|
||||
return math.floor(networkedFlag / 31)
|
||||
end
|
||||
|
||||
local function getFlagValue(networkedFlag)
|
||||
return 2 ^ (networkedFlag % 31)
|
||||
end
|
||||
|
||||
--flag networking. using string literals as it's easier to add flags for custom functionality
|
||||
--and lua takes care of them for us anyways
|
||||
local function networkFlag(weapon, name)
|
||||
local highestFlagValue = table.Count(weapon.NetworkedFlags)
|
||||
local currentFlagIndex = getFlagIndex(highestFlagValue)
|
||||
|
||||
--have to do 31 because it's signed int
|
||||
if (highestFlagValue % 31 == 0) then
|
||||
weapon:CustomNetworkVar("Int", "Flags"..currentFlagIndex)
|
||||
weapon.NetworkedFlagIndices[currentFlagIndex] = "Flags"..currentFlagIndex
|
||||
mw_utils.DevPrint("networkFlag: Registered new set of flags (Flags"..currentFlagIndex..").")
|
||||
end
|
||||
|
||||
weapon.NetworkedFlags[name] = highestFlagValue
|
||||
end
|
||||
|
||||
SWEP.VarCount = {}
|
||||
|
||||
function SWEP:CustomNetworkVar(typ, name)
|
||||
if (typ == "Flag") then
|
||||
networkFlag(self, name)
|
||||
return
|
||||
end
|
||||
|
||||
local count = self.VarCount[typ] || -1
|
||||
count = count + 1
|
||||
|
||||
self:NetworkVar(typ, count, name)
|
||||
|
||||
self.VarCount[typ] = count
|
||||
end
|
||||
|
||||
--i've decided to not check if a flag name exists. if you're looking for a flag
|
||||
--that doesn't exist i'd prefer if you checked your code when it errors
|
||||
function SWEP:HasFlag(name)
|
||||
local networkedFlag = self.NetworkedFlags[name]
|
||||
local flagIndex, flagValue = getFlagIndex(networkedFlag), getFlagValue(networkedFlag)
|
||||
return bit.band(self.dt[self.NetworkedFlagIndices[flagIndex]], flagValue) == flagValue
|
||||
end
|
||||
|
||||
function SWEP:AddFlag(name)
|
||||
local networkedFlag = self.NetworkedFlags[name]
|
||||
local flagIndex, flagValue = getFlagIndex(networkedFlag), getFlagValue(networkedFlag)
|
||||
local flagDt = self.NetworkedFlagIndices[flagIndex]
|
||||
self.dt[flagDt] = bit.bor(self.dt[flagDt], flagValue)
|
||||
end
|
||||
|
||||
function SWEP:RemoveFlag(name)
|
||||
local networkedFlag = self.NetworkedFlags[name]
|
||||
local flagIndex, flagValue = getFlagIndex(networkedFlag), getFlagValue(networkedFlag)
|
||||
local flagDt = self.NetworkedFlagIndices[flagIndex]
|
||||
self.dt[flagDt] = bit.band(self.dt[flagDt], bit.bnot(flagValue))
|
||||
end
|
||||
|
||||
function SWEP:ToggleFlag(name)
|
||||
if (self:HasFlag(name)) then
|
||||
self:RemoveFlag(name)
|
||||
else
|
||||
self:AddFlag(name)
|
||||
end
|
||||
end
|
||||
|
||||
--TODO: reconsider a lot of these vars, some probably dont need to be
|
||||
function SWEP:SetupDataTables()
|
||||
--idea: most of the gun's actions can be simplified with one timer. this game does not allow for overlayed animations,
|
||||
--we can't have more than one action playing on the gun at the same time.
|
||||
--get rid of all these "time" dtvars, just use one
|
||||
self:CustomNetworkVar("Float", "NextActionTime")
|
||||
|
||||
self:CustomNetworkVar("Float", "NextReloadTime")
|
||||
self:CustomNetworkVar("Float", "NextMagTime")
|
||||
self:CustomNetworkVar("Float", "NextHolsterTime")
|
||||
self:CustomNetworkVar("Float", "AimDelta")
|
||||
self:CustomNetworkVar("Float", "Cone")
|
||||
self:CustomNetworkVar("Float", "NextSprintTime")
|
||||
self:CustomNetworkVar("Float", "NextInspectTime")
|
||||
self:CustomNetworkVar("Float", "NextFiremodeTime")
|
||||
self:CustomNetworkVar("Float", "NextMeleeTime")
|
||||
self:CustomNetworkVar("Float", "TriggerDelta")
|
||||
self:CustomNetworkVar("Float", "NextAimModeTime")
|
||||
self:CustomNetworkVar("Float", "AimModeDelta")
|
||||
self:CustomNetworkVar("Float", "BreathingDelta")
|
||||
|
||||
self:CustomNetworkVar("Flag", "MagInserted")
|
||||
self:CustomNetworkVar("Flag", "PlayFirstDraw")
|
||||
self:CustomNetworkVar("Flag", "Reloading")
|
||||
self:CustomNetworkVar("Flag", "Drawing")
|
||||
self:CustomNetworkVar("Flag", "Holstering")
|
||||
self:CustomNetworkVar("Flag", "Aiming")
|
||||
self:CustomNetworkVar("Flag", "Sprinting")
|
||||
self:CustomNetworkVar("Flag", "Rechambered")
|
||||
self:CustomNetworkVar("Flag", "HoldingTrigger")
|
||||
self:CustomNetworkVar("Flag", "Customizing")
|
||||
self:CustomNetworkVar("Flag", "Lowered")
|
||||
self:CustomNetworkVar("Flag", "FlashlightOn")
|
||||
self:CustomNetworkVar("Flag", "BipodDeployed")
|
||||
self:CustomNetworkVar("Flag", "Inspecting")
|
||||
self:CustomNetworkVar("Flag", "StoppedInspectAnimation")
|
||||
|
||||
self:CustomNetworkVar("Bool", "ToggleAim")
|
||||
self:CustomNetworkVar("Bool", "HasRunOutOfBreath")
|
||||
|
||||
self:CustomNetworkVar("Entity", "NextWeapon")
|
||||
self:CustomNetworkVar("Entity", "ViewModel")
|
||||
|
||||
self:CustomNetworkVar("Int", "SprayRounds")
|
||||
self:CustomNetworkVar("Int", "Firemode")
|
||||
self:CustomNetworkVar("Int", "BurstRounds")
|
||||
self:CustomNetworkVar("Int", "PenetrationCount")
|
||||
self:CustomNetworkVar("Int", "AimMode")
|
||||
|
||||
--self:CustomNetworkVar("String", "0", "Camo")
|
||||
|
||||
self:CustomNetworkVar("Angle", "BreathingAngle")
|
||||
end
|
||||
Reference in New Issue
Block a user