add sborka
This commit is contained in:
21
garrysmod/gamemodes/militaryrp/plugins/sambans/sh_config.lua
Normal file
21
garrysmod/gamemodes/militaryrp/plugins/sambans/sh_config.lua
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
-- Конфигурация синхронизации банов
|
||||
PLUGIN.config = PLUGIN.config or {}
|
||||
|
||||
-- API настройки
|
||||
PLUGIN.config.apiKey = "2Pa7LFR_i9rpg_hFHlMCG_Ri1bDMdX"
|
||||
PLUGIN.config.apiHost = "https://front-team.ru" -- Замените на ваш домен
|
||||
PLUGIN.config.apiEndpoint = "/api/update_ban.php"
|
||||
|
||||
-- Тип банов для синхронизации
|
||||
PLUGIN.config.banType = "server" -- general, server, community
|
||||
|
||||
-- Логирование
|
||||
PLUGIN.config.enableLogging = true
|
||||
|
||||
-- Функция логирования
|
||||
function PLUGIN:Log(message)
|
||||
if (self.config.enableLogging) then
|
||||
print(string.format("[SAM Bans Sync] %s", message))
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,8 @@
|
||||
|
||||
PLUGIN.name = "SAM Bans Sync"
|
||||
PLUGIN.author = "RefoselDev"
|
||||
PLUGIN.description = "Синхронизация банов SAM с веб-сервером"
|
||||
|
||||
ix.util.Include("sh_config.lua")
|
||||
ix.util.Include("sv_plugin.lua")
|
||||
|
||||
131
garrysmod/gamemodes/militaryrp/plugins/sambans/sv_plugin.lua
Normal file
131
garrysmod/gamemodes/militaryrp/plugins/sambans/sv_plugin.lua
Normal file
@@ -0,0 +1,131 @@
|
||||
|
||||
-- Функция отправки данных на API
|
||||
function PLUGIN:SendBanToAPI(steamID, action, banData)
|
||||
local url = self.config.apiHost .. self.config.apiEndpoint
|
||||
|
||||
local params = {
|
||||
api_key = self.config.apiKey,
|
||||
action = action,
|
||||
user_steam_id = steamID
|
||||
}
|
||||
|
||||
if (action == "ban") then
|
||||
params.admin_steam_id = tostring(banData.adminSteamID or "")
|
||||
params.reason = tostring(banData.reason or "No reason provided")
|
||||
params.ban_type = tostring(self.config.banType or "server")
|
||||
params.duration = tostring(math.floor(banData.duration or 0))
|
||||
params.banned_at = tostring(math.floor(banData.bannedAt or os.time()))
|
||||
|
||||
if (banData.unbanTime) then
|
||||
params.unbanned_at = tostring(math.floor(banData.unbanTime))
|
||||
end
|
||||
elseif (action == "unban") then
|
||||
params.unbanned_at = tostring(os.time())
|
||||
end
|
||||
|
||||
http.Post(url, params,
|
||||
function(body)
|
||||
local response = util.JSONToTable(body)
|
||||
if (response and response.success) then
|
||||
self:Log(string.format("%s успешно синхронизирован для %s", action == "ban" and "Бан" or "Разбан", steamID))
|
||||
else
|
||||
self:Log(string.format("Ошибка синхронизации: %s", response and response.error or "Unknown error"))
|
||||
end
|
||||
end,
|
||||
function(error)
|
||||
self:Log(string.format("HTTP ошибка: %s", error))
|
||||
end
|
||||
)
|
||||
end
|
||||
|
||||
-- Хук на бан игрока (объект игрока)
|
||||
hook.Add("SAM.BannedPlayer", "ixSAMBansSyncPlayer", function(ply, unbanDate, reason, adminSteamID)
|
||||
local steamID = ply:SteamID64()
|
||||
local duration = 0
|
||||
local unbanTime = nil
|
||||
|
||||
-- Вычисляем длительность бана
|
||||
if (unbanDate and unbanDate > 0) then
|
||||
duration = unbanDate - os.time()
|
||||
unbanTime = unbanDate
|
||||
end
|
||||
|
||||
-- Обрабатываем админа
|
||||
local adminID = nil
|
||||
if (adminSteamID and adminSteamID != "Console") then
|
||||
if (tostring(adminSteamID):sub(1, 7) == "7656119") then
|
||||
adminID = adminSteamID
|
||||
else
|
||||
adminID = util.SteamIDTo64(adminSteamID)
|
||||
end
|
||||
end
|
||||
|
||||
local banData = {
|
||||
adminSteamID = adminID,
|
||||
reason = reason,
|
||||
duration = duration,
|
||||
bannedAt = os.time(),
|
||||
unbanTime = unbanTime
|
||||
}
|
||||
|
||||
ix.plugin.list["sambans"]:SendBanToAPI(steamID, "ban", banData)
|
||||
end)
|
||||
|
||||
-- Хук на бан по SteamID (оффлайн игрок)
|
||||
hook.Add("SAM.BannedSteamID", "ixSAMBansSyncSteamID", function(steamID, unbanDate, reason, adminSteamID)
|
||||
local steamID64 = util.SteamIDTo64(steamID)
|
||||
local duration = 0
|
||||
local unbanTime = nil
|
||||
|
||||
-- Вычисляем длительность бана
|
||||
if (unbanDate and unbanDate > 0) then
|
||||
duration = unbanDate - os.time()
|
||||
unbanTime = unbanDate
|
||||
end
|
||||
|
||||
-- Обрабатываем админа
|
||||
local adminID = nil
|
||||
if (adminSteamID and adminSteamID != "Console") then
|
||||
if (tostring(adminSteamID):sub(1, 7) == "7656119") then
|
||||
adminID = adminSteamID
|
||||
else
|
||||
adminID = util.SteamIDTo64(adminSteamID)
|
||||
end
|
||||
end
|
||||
|
||||
local banData = {
|
||||
adminSteamID = adminID,
|
||||
reason = reason,
|
||||
duration = duration,
|
||||
bannedAt = os.time(),
|
||||
unbanTime = unbanTime
|
||||
}
|
||||
|
||||
ix.plugin.list["sambans"]:SendBanToAPI(steamID64, "ban", banData)
|
||||
end)
|
||||
|
||||
-- Хук на разбан
|
||||
hook.Add("SAM.UnbannedSteamID", "ixSAMBansSyncUnban", function(steamID, admin)
|
||||
local steamID64 = util.SteamIDTo64(steamID)
|
||||
|
||||
ix.plugin.list["sambans"]:SendBanToAPI(steamID64, "unban", {})
|
||||
end)
|
||||
|
||||
-- Команда для теста API
|
||||
concommand.Add("ix_sambans_test", function(ply)
|
||||
if (IsValid(ply) and not ply:IsSuperAdmin()) then return end
|
||||
|
||||
local plugin = ix.plugin.list["sambans"]
|
||||
plugin:Log("Тестирование подключения к API...")
|
||||
|
||||
local testData = {
|
||||
adminSteamID = "76561198000000000",
|
||||
reason = "Test ban from Helix plugin",
|
||||
duration = 3600,
|
||||
bannedAt = os.time()
|
||||
}
|
||||
|
||||
plugin:SendBanToAPI("76561198000000001", "ban", testData)
|
||||
end)
|
||||
|
||||
PLUGIN:Log("Плагин загружен. Синхронизация банов SAM активна.")
|
||||
Reference in New Issue
Block a user