Услуги aka итемы в IGS это объекты, наделенные определенными свойствами: выдача денег после активации, установка донат группы, проигрывание какой-то музыки и тд. Примеры таких предметов есть в файле additems_sh.lua. Пример сложной конфигурации здесь
Итемы имеют неограниченные возможности применения: все, что можно прописать в коде - можно сделать при помощи итемов. Когда-то у меня даже была идея транслировать в Twitch 24/7 табло с текстом и через донат можно было указать текст на нем, который видели бы все, кто зашел на трансляцию. И это реально, несмотря на то, что твитч и табло в жизни вообще никак не связаны с гмодом.
В стандартном sh_additems.lua файле показаны самые основные методы. Дополнительные идеи применения IGS я планирую выкладывать в группе GMD в VK и в TLG, поэтому подписывайтесь, чтобы не пропустить ничего интересного.
Обязательные
:SetPrice(iPrice)
Устанавливает цену предмета в рублях. Также ее можно устанавливать, указав третьим аргументом в IGS("Название", "uid", цена)
:SetDescription(sDescr)
Описание предмета
Популярное
:SetTerm(iDays) (пример)
Срок действия предмета в днях. По умолчанию 0 и это значит, что после перезахода права на предмет исчезнут. Обычно срок не указывают для предметов с одноразовой активацией, например, выдачу денег. Чтобы выдать предмет навсегда, используйте :SetPerma()
:SetStackable(b) (пример)
Можно ли купить такой же предмет, пока не истек срок действия предыдущего. Если у предмета :SetTerm(0), то этот метод часто применяется, чтобы игроку не приходилось перезаходить для повторной покупки. Часто применяется для накопительных предметов, например, лимита пропов
:SetIcon(sIcon, bIsModel)
Картинка-иконка, которая отобразится рядом с названием на главной странице. Формат 1:1, желательно минимум 100 px. Вместо картинки можно указать путь к игровой модельке, только тогда вторым аргументов укажите true
:SetCategory(sCat)
Позволяет собрать несколько предметов рядом. Например, випы, премиумы, платины в категорию “Донат группы”
:SetDiscountedFrom(i) (пример)
Показывает над ценой предмета зачеркнутую указанную, а-ля скидка. По праздникам хорошо увеличивает прибыль
:SetCanActivate(fCheck) (пример)
Определяет, может ли игрок активировать предмет. Есть аналогичная для покупки вместо активации: :SetCanBuy(fCheck)
:SetOnActivate(fCallback) (пример)
Указывает функцию, которая выполнится, когда игрок активирует предмет. Первым аргументом функции будет сам игрок
:SetMaxGlobalPurchases(iMax)
Делает лимитированный предмет. После максимального числа покупок он скроется с /donate меню
:SetMaxPlayerPurchases(num) (пример)
Устанавливает максимальное количество покупок услуги для игрока. При SetMaxPlayerPurchases(1) игрок сможет купить эту услугу только один раз, что полезно для тестовых випок
:SetRandom(tItems)
Примитивный аналог рулетки. Выдаст один из указанных предметов. Принимает таблицу с предметами, а не их UID
:SetItems(tItems) (пример)
Помещает в инвентарь пак предметов. Например, вы не хотите продавать по 1 аптечке, а минимум 5. Создайте :SetCanSee(false) предмет “Аптечка” и 5 раз засуньте его в этот метод. В итоге 1 аптечку в магазине никто не будет видеть, но при покупке 5 они появятся в инвентаре
:SetGlobal(b)
При покупке такого предмета он будет выдан на всех активных серверах проекта сразу. Идея: у проекта 3 сервера. Вип на 1 сервере 150 руб, на 3 — 300. Игроку выгодно и он платит больше
:AddHook(sName, fCallback) (пример)
Внутри делает hook.Add с проверкой pl:HasPurchase(ITEM.uid). Если у игрока куплен ITEM, то указанный хук будет выполнен.
:SetGetPrice(func) (пример)
Позволяет изменять цену предмета в зависимости от игрока
Базовые методы
:SetNetworked(b) (пример)
Нужна ли информация о покупке на клиентсайде? Будет в IGS.PlayerPurchases(pl) и pl:HasPurchase("uid") на клиенте
:SetImage(sUrl)
Ссылка на картинку-баннер товара. Будет отображен под информацией о товаре. Рекомендуемый размер 1000х400
:SetCanSee(func_or_bool) (пример)
Скрывает предмет из магазина. Такой предмет нельзя купить, но можно активировать с инвентаря. Полезно, чтобы скрывать из магазина неактуальные, но еще активные у людей услуги
:SetCanBuy(fCheck) (пример)
fCheck должен вернуть причину (строку), чтобы запретить игроку купить предмет или nil, если все ок
:SetInstaller(fCallback) (пример)
“Установщик” услуги. Выполняется при активации предмета игроком. От :SetOnActivate отличается тем, что это выполняется и при восстановлении услуги, т.е. если :SetValidator вернул false
:SetValidator(fChecker) (пример)
Если fChecker вернет false, то выполнится :SetInstaller. Обычно применяется для обязательной переустановки услуг после входа игрока. Также используется в донат группах, чтобы проверить, не слетела ли она и если да, то перевыдать
:SetHighlightColor(color)
Выделяет заголовок предмета указанным цветом, например Color(255,0,0) сделает красным. Используется RGB палитра. Подобрать цвет можно тут.
Расширения
Поддержка сторонних скриптов
ULX
-
:SetULXGroup(sUserGroup)- Устанавливает ULX группу -
:SetULXCommandAccess(cmd, tag) - Выдача доступа к ulx команде, например “ulx model”. “^” в качестве тега ограничивает игрока, чтобы он не мог применять команду на других
Другие админки
-
:SetBAdminGroup(usergroup)- Выдача групп bAdmin (пример) -
:SetXAdminGroup(sUserGroup)- Выдача групп xAdmin -
:SetXAdmin2Group(sUserGroup)- xAdmin 2 -
:SetEvolveRank(rank)- Ранг evolve -
:SetFAdminGroup(sGroup)- Ранг FAdmin (админка DarkRP) (пример) -
:SetSGGroup(group)- Ранг ServerGuard (пример) -
:SetSAMGroup(group)- SAM Admin Mod (пример)
DarkRP
-
:SetDarkRPMoney(iSum) - Выдает игровую валюту в режиме DarkRP. Рекомендуется использовать с
:SetStackable() -
:SetDarkRPItem(sEntClass)- Разрешает покупать энтити с F4 меню только тому, у кого есть эта покупка -
:SetDarkRPTeams(…) - Разрешает брать указанные работы только тому, у кого есть эта покупка. Тимы указываются через запятую в виде “medic”, “hobo” и тд.
-
:DisablePlayerHunger()- Отключает голод у игрока
Другие скрипты
-
:SetLevels(iAmount)- Уровни для Leveling System.:SetEXP()по аналогии выдает опыт -
:SetPoints(iAmount)- Поинты для 2 поинтшопа. Премиум поинты выдаются через:SetPremiumPoints(iAmount) -
:SetBWhitelist(team_cmd)- Поддержка bWhitelist (код) -
:SetSHWhitelist(team_cmd)- Поддержка SH Whitelist (пример)
Любой гейммод
- :SetWeapon(sWepClass,tAmmo) (пример) - Спавн игрока с оружием.
К примеру :SetWeapon("weapon_frag", {Grenade = 5}) при каждом респавне будет выдавать 5 стандартных гранат. Игрок может отключить выдачу оружия при спавне, сняв галочку “Выдавать при спавне” на странице предмета и сможет брать это оружие прямо со спавнменю при необходимости
-
:SetTool(sToolName)- Разрешает использование инструмента тулгана. Например “rope” разрешит использовать веревку -
:SetEntity(sEntClass)- Спавн энтити через спавнменю -
:SetVehicle(sVehClass)- Спавн машины через спавнменю. Simfphys также поддерживаются -
:IncreasePlayerPropLimit(iAmount)- увеличивает доступное количество пропов для спавна -
:SetPlayerModel(mdl)(пример) - игрок будет спавниться с указанной моделькой -
:SetInfAmmo()(пример) - у игрока будут постоянно восстанавливаться патроны
Список может быть устаревшим. Напишите в этой теме, если вам кажется, что какого-то метода нет
