This commit is contained in:
2026-03-31 23:24:49 +03:00
parent 3f0319016c
commit 09c209c99d
2 changed files with 270 additions and 3 deletions

View File

@@ -5,6 +5,10 @@ util.AddNetworkString("ixAdminShopBuy")
util.AddNetworkString("ixAdminShopRetrieve")
util.AddNetworkString("ixAdminShopAdminSync")
util.AddNetworkString("ixAdminShopAdminAction")
util.AddNetworkString("ixAdminShopPanelOpen")
util.AddNetworkString("ixAdminShopPanelData")
util.AddNetworkString("ixAdminShopPanelGivePoints")
util.AddNetworkString("ixAdminShopPanelTakePoints")
function PLUGIN:Initialize()
self.shopData = ix.data.Get("adminShop", {})
@@ -182,3 +186,106 @@ local function IsAdminRank(rank)
return false
end
PLUGIN.IsAdminRank = IsAdminRank
-- Сбор данных игроков с доступом к магазину
function PLUGIN:CollectPanelData()
local playersData = {}
for _, ply in ipairs(player.GetAll()) do
local rank = ply:GetUserGroup()
if IsAdminRank(rank) then
table.insert(playersData, {
name = ply:Nick(),
steamID = ply:SteamID(),
rank = rank,
points = ply:GetAdminPoints()
})
end
end
return playersData
end
-- Открытие панели (только superadmin)
net.Receive("ixAdminShopPanelOpen", function(len, client)
if not client:IsSuperAdmin() then
client:Notify("Доступ к панели только у суперадминистраторов!")
return
end
local data = PLUGIN:CollectPanelData()
net.Start("ixAdminShopPanelData")
net.WriteTable(data)
net.Send(client)
end)
-- Выдача очков (только superadmin)
net.Receive("ixAdminShopPanelGivePoints", function(len, client)
if not client:IsSuperAdmin() then
client:Notify("Доступ только у суперадминистраторов!")
return
end
local targetSID = net.ReadString()
local amount = net.ReadUInt(32)
local target = player.GetBySteamID(targetSID)
if not IsValid(target) then
client:Notify("Игрок не найден на сервере!")
return
end
if amount < 1 then
client:Notify("Некорректная сумма!")
return
end
target:GiveAdminPoints(amount)
client:Notify("Выдано " .. amount .. " очков игроку " .. target:Nick())
-- Обновить панель
local data = PLUGIN:CollectPanelData()
net.Start("ixAdminShopPanelData")
net.WriteTable(data)
net.Send(client)
end)
-- Забрать очки (только superadmin)
net.Receive("ixAdminShopPanelTakePoints", function(len, client)
if not client:IsSuperAdmin() then
client:Notify("Доступ только у суперадминистраторов!")
return
end
local targetSID = net.ReadString()
local amount = net.ReadUInt(32)
local target = player.GetBySteamID(targetSID)
if not IsValid(target) then
client:Notify("Игрок не найден на сервере!")
return
end
if amount < 1 then
client:Notify("Некорректная сумма!")
return
end
local current = target:GetAdminPoints()
if current < amount then
client:Notify("У игрока недостаточно очков! (Текущий баланс: " .. current .. ")")
return
end
target:TakeAdminPoints(amount)
client:Notify("Забрано " .. amount .. " очков у игрока " .. target:Nick())
-- Обновить панель
local data = PLUGIN:CollectPanelData()
net.Start("ixAdminShopPanelData")
net.WriteTable(data)
net.Send(client)
end)