add sborka
This commit is contained in:
116
garrysmod/addons/tacrp/lua/weapons/tacrp_base/sh_firemodes.lua
Normal file
116
garrysmod/addons/tacrp/lua/weapons/tacrp_base/sh_firemodes.lua
Normal file
@@ -0,0 +1,116 @@
|
||||
function SWEP:SwitchFiremode()
|
||||
local fm = self:GetFiremode()
|
||||
|
||||
fm = fm + 1
|
||||
|
||||
if fm > #self:GetValue("Firemodes") then
|
||||
fm = 1
|
||||
end
|
||||
|
||||
-- Since pattern is firemode dependent, it has to be reset when firemode switchs
|
||||
self.RecoilPatternCache = {}
|
||||
|
||||
self:SetFiremode(fm)
|
||||
end
|
||||
|
||||
function SWEP:GetFiremodeAmount()
|
||||
if istable(self:GetValue("Firemodes")) then
|
||||
return #self:GetValue("Firemodes")
|
||||
elseif self:GetValue("Firemode") == 0 then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
end
|
||||
end
|
||||
|
||||
function SWEP:GetNextFiremode()
|
||||
if self:GetFiremodeAmount() == 0 then return 1 end
|
||||
if self:GetValue("Firemodes") then
|
||||
local fm = self:GetFiremode()
|
||||
|
||||
fm = fm + 1
|
||||
|
||||
if fm > #self:GetValue("Firemodes") then
|
||||
fm = 1
|
||||
end
|
||||
|
||||
return self:GetValue("Firemodes")[fm]
|
||||
else
|
||||
return self:GetValue("Firemode")
|
||||
end
|
||||
end
|
||||
|
||||
function SWEP:GetCurrentFiremode()
|
||||
if self:GetValue("Firemodes") then
|
||||
return self:GetValue("Firemodes")[self:GetFiremode()] or self:GetValue("Firemode") or 0
|
||||
else
|
||||
return self:GetValue("Firemode")
|
||||
end
|
||||
end
|
||||
|
||||
function SWEP:ToggleSafety(onoff)
|
||||
if self:GetValue("Firemode") == 0 then return end
|
||||
onoff = onoff or !self:GetSafe()
|
||||
|
||||
if onoff and self:DoForceSightsBehavior() then return end
|
||||
if DarkRP and self:GetNWBool("TacRP_PoliceBiocode") and !self:GetOwner():isCP() then onoff = true end
|
||||
|
||||
self:SetSafe(onoff)
|
||||
|
||||
if onoff == true then
|
||||
self:ToggleBlindFire(TacRP.BLINDFIRE_NONE)
|
||||
self:ScopeToggle(0)
|
||||
end
|
||||
|
||||
if CLIENT then self.LastHintLife = CurTime() end
|
||||
end
|
||||
|
||||
local mat_1 = Material("tacrp/hud/firemode_1.png", "mips smooth")
|
||||
local mat_2 = Material("tacrp/hud/firemode_2.png", "mips smooth")
|
||||
local mat_3 = Material("tacrp/hud/firemode_3.png", "mips smooth")
|
||||
local mat_4 = Material("tacrp/hud/firemode_4.png", "mips smooth")
|
||||
local mat_a = Material("tacrp/hud/firemode_a.png", "mips smooth")
|
||||
local mat_s = Material("tacrp/hud/firemode_s.png", "mips smooth")
|
||||
|
||||
function SWEP:GetFiremodeMat(mode)
|
||||
if mode == 0 then
|
||||
return mat_s
|
||||
elseif mode == 1 then
|
||||
return mat_1
|
||||
elseif mode == 2 then
|
||||
return mat_a
|
||||
elseif mode == -2 then
|
||||
return mat_2
|
||||
elseif mode == -3 then
|
||||
return mat_3
|
||||
elseif mode == -4 then
|
||||
return mat_4
|
||||
else
|
||||
return mat_1 // epic fail
|
||||
end
|
||||
end
|
||||
|
||||
function SWEP:HasFiremode(mode, base)
|
||||
local valfunc = base and self.GetBaseValue or self.GetValue
|
||||
|
||||
if valfunc(self, "Firemodes") then
|
||||
for _, v in pairs(valfunc(self, "Firemodes")) do
|
||||
if v == mode or (mode < 0 and v < 0) then return true end
|
||||
end
|
||||
return false
|
||||
else
|
||||
return valfunc(self, "Firemode") == mode or (mode < 0 and valfunc(self, "Firemode") < 0)
|
||||
end
|
||||
end
|
||||
|
||||
function SWEP:GetFiremodeBurstLength(base)
|
||||
local valfunc = base and self.GetBaseValue or self.GetValue
|
||||
if valfunc(self, "Firemodes") then
|
||||
for _, v in pairs(valfunc(self, "Firemodes")) do
|
||||
if v < 0 then return -v end
|
||||
end
|
||||
return false
|
||||
else
|
||||
return valfunc(self, "Firemode") < 0 and -valfunc(self, "Firemode") or false
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user