Files
VnUtest/garrysmod/addons/igsmodification/lua/autorun/playtimebonus.lua
2026-03-31 10:27:04 +03:00

69 lines
3.1 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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