Как сделать единоразовую покупку? Тестовая випка на 1 день

Всем ку, хочу сделать чтобы определённый предмет можно было покупать лишь один раз, а потом он исчезал из донат меню для того, кто его купил. Раньше уже делал так, в офф документации на гитхабе увидел способ, но сейчас уже забыл, да и документацию не знаю где найти, помогите пожалуйста!

Подобным образом делают тестовые випки, но они не исчезают после покупки, а просто становятся недоступными для повторного использования

Пример:

IGS("Тестовая VIP", "vip_test", 0)
	:SetDescription("Тестовая випка на 7 дней")
	:SetMaxPlayerPurchases(1)
	:SetTerm(7)

Немного объяснения от @W1skarik:

:SetTerm(1) -- донат на один день
:SetMaxGlobalPurchases(iMax) --[[Делает лимитированный предмет.
 После максимального числа покупок он скроется с /donate меню ]]
:SetMaxPlayerPurchases(num) (пример 6)
--[[
Устанавливает максимальное количество покупок услуги для игрока.
 При SetMaxPlayerPurchases(1) игрок сможет купить эту услугу только один раз,
 что полезно для тестовых випок
]]
1 лайк

Спасибо, мне как раз для тестовой випки нужно было)))

Подскажите, как сделать бесплатный вип на месяц по команде !vip на 30 дней. Буду очень благодарен :3

1 лайк

Нужно создать VIP на месяц, примерно как описано ниже.

IGS("VIP месяц","vip_na_mesyac"):SetULXGroup("vip")
	:SetPrice(70)
	:SetTerm(30) -- 30 дней
	:SetCategory("Группы")
	:SetDescription("Описание")
	:SetMaxPlayerPurchases(1) -- это делает, чтобы игрок мог купить эту услугу только 1 раз за все время

Дальше в файле addons/igs-modification/lua/autorun/server/test_vip.lua

hook.Add("PlayerSay", "test_vip", function(pl, str)
	if str == "!vip" and not pl.test_vip and not pl:IsUserGroup("vip") then
		pl.test_vip = true
		IGS.PlayerActivateItem(pl, "vip_na_mesyac") -- тут важно указать тот же UID, что у випки на 30 дней
		IGS.Notify(pl, "Вы активировали VIP на 30 дней")
		return ""
	end
end)

У кода команды !vip выше есть изъян. Игрок в теории через 30 дней сможет снова активировать випку, так как в самой команде нет проверки, активировалась ли услуга ранее. Если нужно будет исправление – напишите

Возможно это работает лучше

if SERVER then
    hook.Add("PlayerSay", "VidachaPlatinum", function(ply, text)
        if text == "!vip" then
            if ply:GetUserGroup() == "user" then
                if file.Exists("free_vips/" .. ply:SteamID64() .. ".txt", "DATA") == true then return "" end
                file.CreateDir("free_vips")
                local date = os.time() + 172800
                file.Write("free_vips/" .. ply:SteamID64() .. ".txt", date)
                RunConsoleCommand("sam", "setrank", ply:Name(), "vip", "1440", "user")
                ply:ChatPrint("Вы получили VIP на 24 часа!")

                return ""
            else
                ply:ChatPrint("У вас уже есть привилегия!")

                return ""
            end
        end
    end)
end