Использование IGS (InGameShop) не ограничивается итемами из файла sh_additems.lua. IGS это не только менюшка с предметами, а целый кухонный комбайн с набором функций, которые можно применить для множества неочевидных задач.
Вот лишь несколько из вариантов применения IGS, о которых вы могли не догадываться:
Авторазбан
Забаненный игрок донатит через сайт, сервер узнает об этом и выполняет функцию разблокировки. Автразбан это не ITEM в sh_additems, это модуль, который списывает деньги у забаненного игрока и выполняет функцию разбана
Доступ к экзотическим функциям на сервере
Например, в свое время у меня был донатер, который единственный имел право использовать определенную модельку и даже продавать ее другим. Эта услуга называлась model_trader
и ее не было в additems. Основному покупателю я выдал ее вручную через панель, затем он мог выдавать такое право другим игрокам самостоятельно через специальную команду. Каждый, имеющий :HasAccess("model_trader")
мог использовать эту модельку, будучи условно частью какой-то организации
Полнофункциональные ачивки за вечер
Год назад для уже мертвого проекта написал мини-скрипт ачивок за вечер. Он действительно очень минималистичный, но в то же время мог бы выполнять главную задачу – усложнять уход игрока с проекта. Согласитесь, не каждый захочет терять зафиксированные достижения многих часов игры, а отдалить игроков от ухода можно всего за вечер разработки простейшего скрипта. В минимум кода я постарался вставить максимум пользы, в итоге весь аддон это 30 строк для красивого оповещения в чат, когда кто-то получает ачивки, 100 строк на само ядро ачивок и 50 строк на интеграцию с Telegram.
Как удалось засунуть всю суть модуля в 100 строк кода?
Проект, где работали эти ачивки, состоял из нескольких серверов. Значит нужно было бы использовать MySQL БД, чтобы ачивки были общими, а это еще целую БД тащить (если ее нет), .dll библиотеки, учить SQL (если не знаком), таблицы создавать, писать функции с базовыми запросами к таблице и тд. Я бы ни за что не поместил все в 100 строк, не сильно хотел возиться и решил все упростить.
Зачем тащить свою БД, возиться с таблицами и писать лишний код, когда можно просто хранить ачивки в БД GM-Donate?
В крайнем случае всегда же можно будет создать таблицу в MySQL и перенести туда.
В итоге вышло вот что. Функция createAchievement
создает IGS предмет (как в additems) с особыми свойствами: предмет не отображается в /donate меню, выдается навсегда и имеет метод :CanReceive
. Если :CanReceive(ply)
возвращает true, значит игроку нужно выдать ачивку. Проверка осуществляется для всех игроков каждые N минут
“Выдать ачивку” это просто добавить uid ачивки в качестве покупки игрока:
Можно даже через панель на сайте. Считайте, что это еще и админка для ваших ачивок
Сами ачивки выглядят вот так:
Послесловие
Надеюсь, эти идеи подтолкнут вас к созданию своих модулей и применению автодоната там, где другие даже не подумали бы. Если у вас есть идея и желание сделать что-то необычное - делитесь здесь в комментариях. Мы поможем с реализацией и будем рады, если вы поделитесь с другими своими наработками