117 lines
3.1 KiB
Lua
117 lines
3.1 KiB
Lua
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
|