Данный фикс решает проблему с ошибкой в функции COLOR:Lerp
мода plib_v2
после обновления Garry’s Mod. Последнее обновление изменило поведение функции Lerp
или обработку объектов Color
, что привело к тому, что COLOR:Lerp
получал числовые значения вместо объектов Color
. Это вызывало попытки обращения к свойствам числа (from.r
), что приводило к ошибкам.
/garrysmod/addons/plib_v2/lua/plib/extensions/color.lua
local tonumber = tonumber
local string_format = string.format
local string_match = string.match
local bit_band = bit.band
local bit_rshift = bit.rshift
local Lerp = Lerp
local COLOR = FindMetaTable('Color')
-- fix flizan_1
local function iscolor(var)
return type(var) == "table" and getmetatable(var) == FindMetaTable("Color")
end
function Color(r, g, b, a)
return setmetatable({
r = tonumber(r) or 255,
g = tonumber(g) or 255,
b = tonumber(b) or 255,
a = tonumber(a) or 255
}, COLOR)
end
function COLOR:Copy()
return Color(self.r, self.g, self.b, self.a)
end
function COLOR:Unpack()
return self.r, self.g, self.b, self.a
end
function COLOR:SetHex(hex)
local r, g, b = string_match(hex, '#(..)(..)(..)')
self.r, self.g, self.b = tonumber(r, 16), tonumber(g, 16), tonumber(b, 16)
end
function COLOR:ToHex()
return string_format('#%02X%02X%02X', self.r, self.g, self.b)
end
function COLOR:SetEncodedRGB(num)
self.r, self.g, self.b = bit_band(bit_rshift(num, 16), 0xFF), bit_band(bit_rshift(num, 8), 0xFF), bit_band(num, 0xFF)
end
function COLOR:ToEncodedRGB()
return (self.r * 0x100 + self.g) * 0x100 + self.b
end
function COLOR:SetEncodedRGBA(num)
self.r, self.g, self.b, self.a = bit_band(bit_rshift(num, 24), 0xFF), bit_band(bit_rshift(num, 16), 0xFF), bit_band(bit_rshift(num, 8), 0xFF), bit_band(num, 0xFF)
end
function COLOR:ToEncodedRGBA()
return ((self.a * 0x100 + self.r) * 0x100 + self.g) * 0x100 + self.b
end
function COLOR:Lerp(fraction, from, to)
if iscolor(from) and iscolor(to) then
self.r = Lerp(fraction, from.r, to.r)
self.g = Lerp(fraction, from.g, to.g)
self.b = Lerp(fraction, from.b, to.b)
self.a = Lerp(fraction, from.a, to.a)
elseif type(from) == "number" and type(to) == "number" then
local lerped = Lerp(fraction, from, to)
self.r = lerped
self.g = lerped
self.b = lerped
self.a = lerped
end
end