add sborka
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user