Как сделать скидку на moder, если у игрока VIP

Как сделать скидку на следующую покупку если есть другая?
К примеру: Я вип, при покупке модера то у меня скидка размером випа.

Для этого нужен кое-какой новый функционал под видом “Функциональной цены”. Я до сих пор точно не знаю, как это правильно реализовать, чтобы никому ничего не сломать. Дело в том, что цена сейчас это просто число и оно статично, что позволяет сторонним интеграциям даже без объекта игрока посчитать цену на предмет. “Функциональная” цена уже будет требовать объект игрока для подсчета и некоторые скрипты, которые работают с ценами в текущем формате, например телеграм боты, могут сломаться.

Тем не менее, я все же планирую реализовать нечто подобное в виде. Возможно, на новой неделе займусь этим.

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

Второй вариант - делать отдельное “меню апгрейда прав”, что в целом более правильно с фундаментальной точки зрения. Условно доступ к этому меню будет только у тех, у кого pl:HasPurchase(“group_vip”) и в этой менюшке на права для апгрейда будут другие цены

я думал над вторым вариантом, но мне не зашло. Хорошо спасибо что-то придумаю мб в будущем если сделаю напишу как.

1 симпатия

Добавь дополнительный метод или хук который позволит манипулировать ценой предмета.

пробовал гм донат ложится

прайс не может норм определить

Изменить цену можно шаредно изменив ITEM.price, но цена таким образом изменится для всех сразу, а это не подходит.

учись пока я жив

[donate_igs-modification] addons/donate_igs-modification/lua/igs/mods/price_manipulator.lua:34: attempt to index local 'item' (a nil value)
  1. fn - addons/donate_igs-modification/lua/igs/mods/price_manipulator.lua:34
   2. Run - addons/admin_ulib/lua/ulib/shared/hook.lua:109
    3. Price - addons/donate_igs-modification/lua/igs/mods/price_manipulator.lua:8
     4. applyDiscounts - addons/donate_igs-modification/lua/igs/modules/randomdiscounts/_main.lua:8
      5. fn - addons/donate_igs-modification/lua/igs/modules/randomdiscounts/_main.lua:34
       6. Run - addons/admin_ulib/lua/ulib/shared/hook.lua:109
        7. fn - igs/launcher.lua:102
         8. Call - addons/admin_ulib/lua/ulib/shared/hook.lua:109
          9. _CallHook - igs/dependencies/dash/nw.lua:134
           10. func - igs/dependencies/dash/nw.lua:70
            11. unknown - lua/includes/extensions/net.lua:33
1 симпатия

@Beelzebub выходит таким образом можно реализовать идею или там подводные камни все такие есть?
image


[donate_igs-modification] addons/donate_igs-modification/lua/igs/mods/price_manipulator.lua:40: attempt to call method 'HasPurchase' (a nil value)
  1. fn - addons/donate_igs-modification/lua/igs/mods/price_manipulator.lua:40
   2. Run - addons/admin_ulib/lua/ulib/shared/hook.lua:109
    3. Price - addons/donate_igs-modification/lua/igs/mods/price_manipulator.lua:8
     4. applyDiscounts - addons/donate_igs-modification/lua/igs/modules/randomdiscounts/_main.lua:8
      5. fn - addons/donate_igs-modification/lua/igs/modules/randomdiscounts/_main.lua:34
       6. Run - addons/admin_ulib/lua/ulib/shared/hook.lua:109
        7. fn - igs/launcher.lua:102
         8. Call - addons/admin_ulib/lua/ulib/shared/hook.lua:109
          9. _CallHook - igs/dependencies/dash/nw.lua:134
           10. func - igs/dependencies/dash/nw.lua:70
            11. unknown - lua/includes/extensions/net.lua:33

да, вполне. (по крайней мере должно работать, ибо я не тестировал)
спасибо что указал, ща реализую.
кстати эту тему можно реализовать при помощи кэшбэка, думаю хорошая идея.

а ну да, чёт я тупанул - надо же где-то объект игрока брать -_-
над этим надо подумать…

готово (пришлось пропатчить серверсайд обработчик покупок, ибо igs не очень поддаётся моддингу)

я не тестировал, но по идеи должно работать :slight_smile:

Скидка на первую покупку работает так себе если на предмете уже есть скидка
image
Я предположу что если есть скидка и на предметах из списка sales такая же фигня
Кешбек перестает нормально работать за предмет который стоит 29 рублей он дает кешбек 11р хотя до давал 3р
Деньги снимает по цене указанной на кнопке "Купить за "

кэшбэк и многие места в коде igs не используют метод ITEM:Price()
думаю можно просто перезаписать метод __index
попробуй, должно сработать:

ulib отвалился и drp

скидуй серверсайд/клиентсайд ошибки.

В следующей версии будет возможность функционально изменять цену предмета и, возможно, заодно :SetDiscountedFrom без подобных костылей.

1 симпатия

Ошибка, которую было допущено еще на первой версии продукта до сих пор мешала полноценно реализовать этот функционал с функциональным ITEM:GetPrice(pl)

Еще в 2020 году я уже сталкивался с этой проблемой, но за 2 года забыл о ней и вчера столкнулся вновь.

Дабы не тянуть кота за яйца, все, что связано с “курсом” донат валюты наконец будет удалено в следующем обновлении.

ITEM:Price() тоже планируется удалить, но следующие несколько версий он еще побудет. Он заменяется на ITEM.price, ITEM:GetPrice(pl) уже будет подсчитывать цену отдельно для конкретного игрока

Функциональная цена, как по мне, недостаточно веская причина для мажорного обновления, которое нужно делать вручную, поэтому я реализую еще несколько плюшек с доски задач, которые могут сломать какой-то скрипт части пользователей

Кстати, вот возможные кейсы применения будущей функциональной цены (тоже с доски задач)

  • Если у чела есть покупка А, то Б будет со скидкой
  • Купоны на скидку. Сразу setPrice return real, discounted_from
  • В зависимости от дня недели или времени суток
  • Заранее заложенные скидки на праздники
  • Предмет, где цена растет с покупкой
  • Предмет, где цена растет по часам
  • Цена на основе Score
  • Например, первая покупка выдает игроку модельку при спавне, а вторая уже стоит 0 рублей и будет отключать старую модельку (как бы оверрайд)
1 симпатия

Предварительные изменения

19 файлов изменено

Добавлено:
- ITEM:SetGetPrice(func)
- ITEM:GetPrice(pl)
- Клиентский хук IGS.ServersLoaded (был только серверный)

Удалены:
- IGS.RealPrice(am)
- ITEM:PriceInCurrency()
- IGS.PriceInCurrency(am)
- IGS.IsCurrencyEnabled()
- IGS.GetCurrencyPrice()
- С конфига IGS.C.CURRENCY_NAME
- С конфига IGS.C.AboutCurrencyText
- хук IGS.OnSettingsUpdated (Заменить на IGS.Loaded)
- IGS.UpdateMoneySettings(iMinCharge,iCurrencyPrice)
- nw var igs_settings
- cl IGS.WIN.AboutCurrency(bHideClose)

Изменены:
- IGS.FormItemInfo. Вторым аргументом принимает игрока

Сделай пост об этом пожалуйста
И было бы классно если бы написал что на что менять по типу

PL_IGS => PL_MONEY