как сделать донат промокод условно /start на любые деньги, нужно чтоб игрок отыграл 1 час, после этого сможет ввести, после каждого /start будет писаться сколько время осталось
/start Промокод можно будет использовать только через 1 час.
/start Промокод можно будет использовать только через 20 минут и т.д
-- sv_promocodes.lua
local PromoSystem = {}
PromoSystem.Codes = {}
function PromoSystem:AddCode(command, money, igs, maxUses, minTime)
local cmdKey = "/" .. string.lower(command)
self.Codes[cmdKey] = {
money = money,
igs = igs,
maxUses = maxUses or 999999,
minTime = minTime or 0
}
end
-- PromoSystem:AddCode("название промо", игровая валюта, донат валюта, кл-во активаций(если вписать ноль то активировать смогут все), наигранное время в секундах)
PromoSystem:AddCode("bonus", 50000, 5000, 100, 3600)
hook.Add("Initialize", "PromoSystem_InitDB", function()
if not sql.TableExists("darkrp_promo_logs") then
sql.Query("CREATE TABLE darkrp_promo_logs (steamid TEXT, code TEXT)")
end
if not sql.TableExists("darkrp_promo_counts") then
sql.Query("CREATE TABLE darkrp_promo_counts (code TEXT PRIMARY KEY, uses INTEGER)")
end
end)
hook.Add("PlayerSay", "PromoSystem_Handler", function(ply, text)
local cleanText = string.lower(string.Trim(text))
local codeData = PromoSystem.Codes[cleanText]
if codeData then
local steamID = ply:SteamID()
local codeKey = cleanText
if codeData.minTime > 0 then
if ply.GetUTimeTotalTime then
local playedTime = ply:GetUTimeTotalTime()
if playedTime < codeData.minTime then
local timeLeft = math.ceil((codeData.minTime - playedTime) / 60)
DarkRP.notify(ply, 1, 4, "Нужно отыграть еще " .. timeLeft .. " мин. для активации!")
return ""
end
end
end
local usedCheck = sql.QueryValue("SELECT code FROM darkrp_promo_logs WHERE steamid = " .. sql.SQLStr(steamID) .. " AND code = " .. sql.SQLStr(codeKey))
if usedCheck then
DarkRP.notify(ply, 1, 4, "Вы уже активировали этот промокод!")
return ""
end
if codeData.maxUses > 0 then
local globalUses = tonumber(sql.QueryValue("SELECT uses FROM darkrp_promo_counts WHERE code = " .. sql.SQLStr(codeKey))) or 0
if globalUses >= codeData.maxUses then
DarkRP.notify(ply, 1, 4, "Этот промокод закончился!")
return ""
end
end
sql.Query("INSERT INTO darkrp_promo_logs (steamid, code) VALUES(" .. sql.SQLStr(steamID) .. ", " .. sql.SQLStr(codeKey) .. ")")
local exists = sql.QueryValue("SELECT uses FROM darkrp_promo_counts WHERE code = " .. sql.SQLStr(codeKey))
if exists then
sql.Query("UPDATE darkrp_promo_counts SET uses = uses + 1 WHERE code = " .. sql.SQLStr(codeKey))
else
sql.Query("INSERT INTO darkrp_promo_counts (code, uses) VALUES(" .. sql.SQLStr(codeKey) .. ", 1)")
end
ply:addMoney(codeData.money)
ply:AddIGSFunds(codeData.igs, 'С промокода: ' .. cleanText)
--print("игрок" .. ply:Name() .. "использовал промокод ".. cleanText)
DarkRP.notify(ply, 0, 5, "Вы активировали промокод и получили " .. DarkRP.formatMoney(codeData.money) .. " и ".. IGS.SignPrice(codeData.igs))
return ""
end
end)
создай в любом lua/autorun/server файл с названием sv_promo и закинь туда
я зашел, нажал /start, он дал мне деньги, но час не прошел, или он уже знает что я отыграл больше часа?
У тебя стоит Utime? Если да то попробуй его сбросить и проверить ещё раз
Что за утиме?
Он так же вшит в админку SAM, если у тебя стоит SAM то очисти в базе данных таблицу sam_players (либо удали sv.db, но если знаешь как открывать бд SQL то очисти просто)
Всё работает


понял спасибо