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