Доступные ITEM методы для настройки услуг

Услуги 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() (пример) - у игрока будут постоянно восстанавливаться патроны

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

1 лайк

Документация обновлена. Указаны ссылки на примеры, улучшена читаемость и добавлены несколько новых методов отсюда:

Добавлено информацию про:

  • :SetCanActivate(fCheck)
  • :AddHook(sName, fCallback)
  • :SetGetPrice(func)
  • :SetXAdmin2Group(sUserGroup)
  • :SetBWhitelist(team_cmd)
  • :IncreasePlayerPropLimit(iAmount)
  • :SetPlayerModel(mdl)
  • :SetInfAmmo()

Методы, выделенные курсивом станут доступны в течении пары дней

Также есть такие методы, которые не попали в документацию:

OnActivate
Category
SetOnBuy
Buy
Setup
UID
GetPrice
Name
Group
ID
IsValid
CanBuy
IsStackable
IMG
GetMeta
Term
Insert
SetMeta
ICON
Description
CanActivate
IsHidden
GetHighlightColor

Они больше предназначены для внутреннего использования


lua_run PrintTable( FindMetaTable("IGSItem") ) - вывести список всех методов

Обновлена информация про SetHidden. Метод устарел и заменен на SetCanSee. Подробнее тут: [IGS] Как отображать предмет при определенном условии? - #6 от пользователя GMD