Skip to content

Commit 2cb5343

Browse files
committed
Новая либа веб картинок, фиксы sam, badmin, микроулучшения
1 parent 67ad529 commit 2cb5343

File tree

21 files changed

+149
-139
lines changed

21 files changed

+149
-139
lines changed

addons/igs-core/lua/autorun/l_ingameshop.lua

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ concommand.Add("igs_verbose", function(pl)
1515
if SERVER and IsValid(pl) then return end
1616

1717
local enable = cookie.GetNumber("igs_verbose", 0) == 0
18-
cookie.Set("igs_verbose", enable and 1 or 0)
18+
cookie.Set("igs_verbose", enable and "1" or "0")
1919
IGS.prints("IGS Logging " .. (enable and "enabled" or "disabled"))
2020
end)
2121

@@ -136,14 +136,15 @@ function IGS.load_entities()
136136
scripted_ents.Register(ENT, ent_class)
137137

138138
iam_inside = nil
139+
139140
ENT = nil
140141
end
141142
end
142143

143144

144145
concommand.Add("igs_flushversion", function(pl)
145146
if IsValid(pl) then IGS.prints("console only") return end
146-
cookie.Set("igs_version", nil)
147+
cookie.Delete("igs_version")
147148
IGS.prints("OK. После перезагрузки сервер скачает новую версию")
148149
end)
149150

addons/igs-core/lua/igs/core_sv.lua

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -93,22 +93,39 @@ function IGS.PlayerActivateItem(pl, sItemUID, fCallback)
9393
end
9494
IGS.PlayerActivatedItem = IGS.PlayerActivateItem -- #todo обратка 2020.07.16
9595

96-
-- После :CanBuy() проверок и списания средств
97-
function IGS.PlayerPurchasedItem(pl, ITEM, cb)
96+
-- Выполнять после :CanBuy() проверок и списания средств.
97+
-- Дергает SetOnBuy, вызывает хук покупки, ложит в инвентарь
98+
-- added 2024.12.04. На замену IGS.PlayerPurchasedItem
99+
-- cb всегда первым аргументом возвращает true, но в будущем может false (ошибка сохранения в БД например)
100+
function IGS.PlayerPurchasedItemByUID(pl, item_uid, cb)
98101
local afterBuy = function(invDbID_or_iPurchID)
99102
local id = invDbID_or_iPurchID
100-
ITEM:Buy(pl) -- внутри хук
101-
hook.Run("IGS.PlayerPurchasedItem", pl, ITEM, id)
102-
if cb then cb(id) end
103+
104+
local ITEM = IGS.GetItem(item_uid)
105+
if ITEM then
106+
ITEM:Buy(pl)
107+
hook.Run("IGS.PlayerPurchasedItem", pl, ITEM, id)
108+
end
109+
110+
hook.Run("IGS.PlayerPurchasedItemUID", pl, item_uid, id) -- PlayerReceivedItem?
111+
if cb then cb(true, id) end
103112
end
104113

105114
if IGS.C.Inv_Enabled then
106-
IGS.AddToInventory(pl, ITEM:UID(), afterBuy)
115+
IGS.AddToInventory(pl, item_uid, afterBuy) -- inv_id
107116
else
108-
IGS.PlayerActivateItem(pl, ITEM:UID(), afterBuy)
117+
IGS.PlayerActivateItem(pl, item_uid, afterBuy) -- purch_id
109118
end
110119
end
111120

121+
-- #deprecated 2024.12.04, так как появилась IGS.PlayerPurchasedItemByUID (выше)
122+
-- по UID можно оперировать несуществующими generic итемами, например ачивками или оформлениями чата
123+
function IGS.PlayerPurchasedItem(pl, ITEM, cb)
124+
IGS.PlayerPurchasedItemByUID(pl, ITEM:UID(), function(_, err_or_id) -- ok не используется (первый в cb)
125+
if cb then cb(err_or_id) end
126+
end)
127+
end
128+
112129

113130
--[[-------------------------------------------------------------------------
114131
КУПОНЫ
Lines changed: 55 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,80 @@
11
-- TRIGON.IM 12 dec 2021
22
-- Упрощенная версия texture либы от dash
3+
-- 2024.12.27 dec 2024 добавлена проверка is_normal_image, чтобы всякие 429 и 403 от imgur не кешировали говно
34

45
matex = matex or {}
56

67
file.CreateDir("matex")
78

8-
function matex.url(url, useproxy)
9+
local PNG_START = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A}
10+
local PNG_TRAIL = {0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82}
11+
local is_png = function(raw)
12+
for i = 1, 8 do
13+
if PNG_START[i] ~= string.byte(raw, i) then return false end
14+
if PNG_TRAIL[i] ~= string.byte(raw, -(9 - i)) then return false end
15+
end
16+
return true
17+
end
18+
19+
20+
local JPG_START = {0xFF, 0xD8, 0xFF}
21+
local JPG_TRAIL = {0xFF, 0xD9}
22+
local is_jpg = function(raw)
23+
for i = 1, 3 do
24+
if JPG_START[i] ~= string.byte(raw, i) then return false end
25+
if i == 3 then break end
26+
if JPG_TRAIL[i] ~= string.byte(raw, -(3 - i)) then return false end
27+
end
28+
return true
29+
end
30+
31+
32+
-- https://mimesniff.spec.whatwg.org/#matching-an-image-type-pattern
33+
-- https://www.garykessler.net/library/file_sigs.html
34+
local function is_normal_image(raw)
35+
local png, jpg = is_png(raw), is_jpg(raw)
36+
return png or jpg
37+
end
38+
39+
function matex.download(url, callback, useproxy)
940
local id = util.CRC(url)
1041

1142
local filepath = "matex/" .. id .. ".png"
1243
local matpath = "../data/matex/" .. id .. ".png"
1344

14-
local def = {material = nil}
15-
1645
if file.Exists(filepath, "DATA") then
17-
def.material = Material(matpath, "noclamp smooth")
18-
return def
46+
callback( Material(matpath, "noclamp smooth") )
47+
return
1948
end
2049

2150
local baseurl = useproxy and "https://proxy.duckduckgo.com/iu/?u=" .. url or url
22-
2351
http.Fetch(baseurl, function(body)
24-
file.Write(filepath, body)
25-
def.material = Material(matpath, "noclamp smooth")
26-
return def.material
27-
end, function(error)
28-
if useproxy then def.material = Material("nil") return def end
29-
return matex.url(url, true)
52+
if is_normal_image(body) then file.Write(filepath, body) end
53+
callback( Material(matpath, "noclamp smooth") )
54+
end, function()
55+
if useproxy then callback( Material("nil") ) return end
56+
matex.download(url, callback, true)
3057
end)
31-
32-
return def
3358
end
3459

35-
-- function matex.imgur(id)
36-
-- return matex.url("https://i.imgur.com/" .. id .. ".png")
37-
-- end
38-
39-
-- local furl = fl.memoize(matex.url)
40-
-- function matex.url_async(url)
41-
-- return furl(url).material
42-
-- end
43-
44-
-- function matex.imgur_async(id)
45-
-- return furl("https://i.imgur.com/" .. id .. ".png").material
46-
-- end
47-
48-
60+
local cache = {}
61+
function matex.now(url)
62+
if cache[url] then return cache[url].material end
63+
cache[url] = {material = nil}
64+
matex.download(url, function(material) cache[url].material = material end)
65+
return cache[url].material
66+
end
4967

50-
/* example
51-
local mater = matex.imgur("TZcJ1CK")
5268

69+
--[[
70+
-- example:
5371
hook.Add("HUDPaint", "mater", function()
54-
if not mater.material then return end
55-
56-
surface.SetDrawColor(color_white)
57-
surface.SetMaterial(mater.material)
58-
surface.DrawTexturedRect(35, 35, 570, 460)
72+
local mater = matex.now("https://i.imgur.com/TZcJ1CK.png")
73+
if mater then
74+
surface.SetDrawColor(color_white)
75+
surface.SetMaterial(mater)
76+
surface.DrawTexturedRect(35, 35, 570, 460)
77+
end
5978
end)
6079
-- hook.Remove("HUDPaint", "mater")
61-
*/
80+
--]]

addons/igs-core/lua/igs/extensions/badmin.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,5 @@ function STORE_ITEM:SetBAdminGroup(rank)
2121
self:Setup(pl)
2222

2323
end
24-
end):SetMeta("bagroup", sUserGroup)
24+
end):SetMeta("bagroup", rank)
2525
end

addons/igs-core/lua/igs/extensions/sam.lua

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,11 @@ hook.Add("IGS.PlayerPurchasesLoaded", "IGS_SAM", function(pl, purchases_)
3737
-- Но его ранг не дефолтный и продается
3838
-- Значит снимаем
3939
if not purchased_groups[1] then
40-
local current_pl_rank = pl:sam_getrank()
40+
local current_pl_rank =
41+
(pl.sam_getrank and pl:sam_getrank()) or -- до версии SAM 143 была такая функция. Потом пропала
42+
(pl.sam_get_nwvar and pl:sam_get_nwvar("rank", "user")) -- обратная совместимость: https://forum.gm-donate.net/t/7730/9
43+
or pl:GetUserGroup()
44+
4145
if current_pl_rank ~= "user" and IGS.SAM_GROUPS[current_pl_rank] then
4246
pl:sam_set_rank("user") -- используется sam.player.set_rank(ply, rank, length), не путать с PLAYER:sam_setrank(name)
4347
end

addons/igs-core/lua/igs/interface/activities/profile.lua

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,9 +134,9 @@ hook.Add("IGS.CatchActivities","profile",function(activity,sidebar)
134134

135135
-- Если покупка, то пишем ее название или пишем с чем связана транзакция
136136
local note =
137-
v.note:StartWith("P: ") and name_or_uid(v.note:sub(4)) or
138-
v.note:StartWith("A: ") and ("Пополнение счета (" .. v.note:sub(4) .. ")") or
139-
v.note:StartWith("C: ") and ("Купон " .. v.note:sub(4,13) .. "...") or
137+
v.note:StartsWith("P: ") and name_or_uid(v.note:sub(4)) or
138+
v.note:StartsWith("A: ") and ("Пополнение счета (" .. v.note:sub(4) .. ")") or
139+
v.note:StartsWith("C: ") and ("Купон " .. v.note:sub(4,13) .. "...") or
140140
v.note
141141

142142
pnl:AddLine(

addons/igs-core/lua/igs/interface/vgui/igs_item.lua

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,6 @@ end
199199
--[[-------------------------------------------------------------------------
200200
Жто все нужно было для отрисовки лейбла с размером скидки
201201
Проблема оказалась на этапе рисования повернутого текста
202-
Набросы: https://gist.github.com/AMD-NICK/7f2aeb674763fe91c2d0668f84357f2e
203202
Карточка: https://trello.com/c/Zx6qTzBn/303
204203
205204
Color(220,30,70) -- Штуки за биркой

addons/igs-core/lua/igs/interface/vgui/igs_scroll.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ function SCROLLABLE:Init()
102102
end
103103

104104
function SCROLLABLE:Reset()
105-
self:GetCanvas():Clear(true)
105+
self:GetCanvas():Clear()
106106
self.yOffset = 0
107107
self.ySpeed = 0
108108
self.scrollSize = 1

addons/igs-core/lua/igs/interface/vgui/igs_wmat.lua

Lines changed: 7 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,22 @@
1-
--[[
2-
Если ссылку обновить, то картинка обновится
3-
Если размер панели изменится, то картинка адаптируется
4-
]]
1+
-- 2025.01.03 сделан невероятный рефакторинг, который упростил код до размера мухи
52

63
local PANEL = {}
74

8-
local default_matex
9-
function PANEL:Init()
10-
if not default_matex then
11-
-- print("Loading default matex")
12-
default_matex = matex.url(IGS.C.DefaultIcon)
13-
end
14-
end
15-
16-
function PANEL:Think() -- ожидание загрузки matex материала. Для SetURL
17-
if self.matex and self.matex.material then
18-
self.material = self.matex.material
19-
self.matex = nil
20-
end
21-
end
22-
5+
local default_mater = Material("models/effects/portalrift_sheet")
236
function PANEL:Paint(w, h)
24-
local mater = self.material or (default_matex and default_matex.material)
25-
if mater then
26-
surface.SetDrawColor( IGS.col.ICON )
27-
surface.SetMaterial( mater )
28-
surface.DrawTexturedRect(0, 0, w, h)
29-
end
7+
surface.SetDrawColor( IGS.col.ICON )
8+
surface.SetMaterial( self.material or (self.url and matex.now(self.url)) or matex.now(IGS.C.DefaultIcon) or default_mater )
9+
surface.DrawTexturedRect(0, 0, w, h)
3010
end
3111

12+
-- Для SetIcon mode == "material", например
3213
function PANEL:SetMaterial(sMaterial) -- "models/debug/debugwhite"
3314
self.material = sMaterial and Material(sMaterial, "noclamp smooth") or nil
3415
end
3516

17+
-- Укажите nil/false для сброса
3618
function PANEL:SetURL(sUrl)
37-
if not sUrl then
38-
self.matex = nil -- fallback to default
39-
return
40-
end
41-
42-
-- print("igs_wmat:SetURL('" .. sUrl .. "') size: ", self:GetWide())
43-
44-
local url_resized = string.format(IGS.C.ImgProxyPattern or "https://imgkit.gmod.app/?image=%s&size=%d", sUrl:URLEncode(), self:GetWide())
45-
self.matex = matex.url( url_resized )
4619
self.url = sUrl
47-
self.size = self:GetWide()
48-
end
49-
50-
function PANEL:PerformLayout(new_w) -- size changed
51-
-- print("igs_wmat:PerformLayout()")
52-
53-
-- Если есть что обновлять и есть смысл обновлять (иконка расширилась)
54-
if self.url and new_w > (self.size or 0) then
55-
self:SetURL(self.url)
56-
end
5720
end
5821

5922
vgui.Register("igs_wmat", PANEL, "Panel")

addons/igs-core/lua/igs/interface/windows/deposit_funds.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ function IGS.WIN.Deposit(iRealSum)
7070
self.log:AddRecord("Запрос цифровой подписи запроса от сервера...")
7171

7272
IGS.GetPaymentURL(want_money,function(url)
73-
IGS.OpenURL(url,"Процедура пополнения счета")
73+
IGS.OpenURL(url)
7474
if not IsValid(self) then return end
7575
self.log:AddRecord("Подпись получена. начинаем процесс оплаты")
7676

0 commit comments

Comments
 (0)