add sborka

This commit is contained in:
2026-03-31 10:27:04 +03:00
commit f5e5f56c84
2345 changed files with 382127 additions and 0 deletions

View File

@@ -0,0 +1,68 @@
if SERVER then
util.AddNetworkString("igs_session_start")
util.AddNetworkString("igs_session_reward_given")
local HOUR = 60 * 60
local REWARD_AFTER = HOUR * 2 -- 2 часа
local REWARD_SIZE = 150 -- 150 рублей (изменено по просьбе пользователя)
-- Таблица для отслеживания времени начала сессии игроков
local playerSessionStart = {}
local playerRewardGiven = {}
-- Отправка времени начала сессии при спавне
hook.Add("PlayerInitialSpawn", "igs.session_reward_ui", function(pl)
playerSessionStart[pl:SteamID()] = os.time()
local lastRewardDate = pl:GetPData("igs_playtime_bonus_date", "")
local currentDate = os.date("%d-%m-%Y")
playerRewardGiven[pl:SteamID()] = (lastRewardDate == currentDate)
net.Start("igs_session_start")
net.WriteInt(os.time(), 32)
net.Send(pl)
end)
-- Очистка данных при отключении игрока
hook.Add("PlayerDisconnected", "igs.session_cleanup", function(pl)
playerSessionStart[pl:SteamID()] = nil
playerRewardGiven[pl:SteamID()] = nil
end)
-- Проверка и выдача награды каждые 60 секунд
timer.Create("igs.check_session_rewards", 60, 0, function()
for _, pl in pairs(player.GetAll()) do
local steamID = pl:SteamID()
local startTime = playerSessionStart[steamID]
local rewardGiven = playerRewardGiven[steamID]
if startTime and not rewardGiven then
local elapsed = os.time() - startTime
-- Если прошло 2 часа - выдаем награду
if elapsed >= REWARD_AFTER then
-- Проверяем, что игрок не AFK (опционально)
if IsValid(pl) and pl:Alive() then
-- Выдаем рубли на баланс IGS
pl:AddIGSFunds(REWARD_SIZE, "Бонус за 2 часа игры")
-- Уведомление игроку
IGS.Notify(pl, "Вы получили " .. REWARD_SIZE .. " руб за 2 часа игры!")
-- Помечаем, что награда выдана
playerRewardGiven[steamID] = true
pl:SetPData("igs_playtime_bonus_date", os.date("%d-%m-%Y"))
-- Логирование
print("[IGS Session Reward] " .. pl:Nick() .. " (" .. steamID .. ") получил " .. REWARD_SIZE .. " руб за 2 часа игры")
-- Отправляем клиенту сигнал об успешной выдаче
net.Start("igs_session_reward_given")
net.Send(pl)
end
end
end
end
end)
end