69 lines
3.1 KiB
Lua
69 lines
3.1 KiB
Lua
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
|