Услуги 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()
(пример) - у игрока будут постоянно восстанавливаться патроны
Список может быть устаревшим. Напишите в этой теме, если вам кажется, что какого-то метода нет