Здравствуйте, хочу сделать так что при покупке в донат инвентаре появлялся предмет, после использования на него накладывался кулдаун, а сам он оставался в инвентаре. Возможно ли такое сделать?
Можно сделать вот как. У нас есть метод ITEM:SetItems(tItems)
, который наделяет предмет одним свойством – при активации предмета с таким методом, активировавший игрок получит в инвентарь перечисленные в tItems
предметы
Теория
Задумывался этот метод для упаковки в один предмет нескольких других. Например, создавался предмет “3 аптечки” с :SetItems({HEAL, HEAL, HEAL})
. HEAL это другой предмет, который устанавливает игроку условные 100 ХП. При активации базового предмета, игрок получал 3 предмета-аптечки в инвентарь
Что касается кулдауна, то можно реализовать через ITEM:SetCanActivate()
. Ниже привожу пример предмета, который выдаст 3 аптечки и которые можно будет активировать раз в 60 секунд
Пример
local HEAL = IGS("Аптечка", "heal", 0)
:SetStackable() -- разрешаем многоразовую активацию
:SetHidden() -- скрываем отображение в /donate меню, чтобы нельзя было купить просто так
:SetOnActivate(function(pl)
pl:SetHealth(100)
pl.igs_last_heal = os.time()
pl:ChatPrint("Вы исцелились!")
end)
:SetCanActivate(function(pl)
local since_prev_activation = os.time() - (pl.igs_last_heal or 0)
local need_wait = 60 - since_prev_activation
if need_wait > 0 then
return "Можно будет активировать через " .. need_wait .. " сек"
end
end)
IGS("3 аптечки", "heal_x3", 50) -- 50 rub
:SetStackable()
:SetItems({HEAL, HEAL, HEAL}) -- упаковываем в этот предмет 3 аптечки, которые игрок получит после активации этого предмета
:SetDescription("Купите и получите 3 аптечки в донат инвентарь. Хиляться можно раз в минуту")
Позже проверю, заранее спасибо.
Всё хорошо, правда кд слетает после перезахода, как-то можно исправить? Заранее спасибо.
Да, можно. Вот новый пример с некоторыми правками:
local HEAL = IGS("Аптечка", "heal", 0)
:SetStackable() -- разрешаем многоразовую активацию
:SetHidden() -- скрываем отображение в /donate меню, чтобы нельзя было купить просто так
:SetOnActivate(function(pl)
pl:SetHealth(100)
pl:ChatPrint("Вы исцелились!")
cookie.Set("igs_last_heal:" .. pl:AccountID(), os.time())
end)
:SetCanActivate(function(pl)
local last_heal = cookie.GetNumber("igs_last_heal:" .. pl:AccountID(), 0)
local since_prev_activation = os.time() - last_heal
local need_wait = 60 - since_prev_activation
if need_wait > 0 then
return "Можно будет активировать через " .. need_wait .. " сек"
end
end)
IGS("3 аптечки", "heal_x3", 50) -- 50 rub
:SetStackable()
:SetItems({HEAL, HEAL, HEAL}) -- упаковываем в этот предмет 3 аптечки, которые игрок получит после активации этого предмета
:SetDescription("Купите и получите 3 аптечки в донат инвентарь. Хиляться можно раз в минуту")