Permalink
Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
125 lines (100 sloc) 12 KB

Итемы

Итемы -- основа этого скрипта. Каждый итем является отдельной донат услугой и имеет свой уникальный идентификатор (UID)

IGS("Имя","unique_id") -- добавляет услугу (итем) под названием "Имя" и с УНИКАЛЬНЫМ id "unique_id". К этому итему применяются методы, которые описаны ниже

Основные методы

Метод Описание
:SetDescription("Блабла") Устанавливает текст, который будет виден при открытии подробной информации об услуге
:SetPrice(19.95) Устанавливает стоимось услуги в рублях
:SetTerm(0) Устанавливает срок действия услуги в днях. Если указать 0 - услуга единоразовая. Если не указать - бесконечная
:SetCategory("Категория") Устанавливает в какой категории будет отоброжатья услуга в главном меню. Если не указать услуга будет отображаться в категории "разное"

Дополнительные методы

Метод Описание
:SetImage("http://site/img.png") Устаналивает ссылку на "баннер" услуги. Рекомендуемый размер 1000х400 или в этом соотношении. Отобразиться в инфе о товаре
:SetIcon("http://site/img.png") Устанавливает Иконку в соотношении 1:1. Рекомендуемый размер 100 px
:SetHighlightColor(col) Устанавливает цвет текста названию услуги
:SetStackable(true) Разрешает покупку нескольких штук (например, накопительные услуги, типа лимита пропов). Использовать с SetTerm() ~= 0
:SetNetworked(true) Если игрок купил итем с этим методом, то он будет виден в IGS.PlayerPurchases(LocalPlayer()) для этого игрока (другие итем не увидят. Для этого другое средство)
:SetCanBuy(function(pl, bGlobal) end) Позволяет установить условие при котором игроки не смогут покупать товар.

Пример:

:SetCanBuy(function(pl, bGlobal)
      if not pl:isPremium() then
            return "Чтобы купить это нужен премиум!"
      end
end)
:SetOnBuy(function(pl, bGlobal, iInvID) end) Выполняется на сервере после покупки итема в инвентарь
:SetCanActivate(function(pl, global, invDbID) end) Позволяет установить условие при котором игроки не смогут активировать товар из инвентаря.
:SetOnActivate(function(pl) end) Выполняется на сервере перед активацией итема из инвентаря
:SetValidator(function(pl) end) Выполняется при входе игрока на сервер.

Если условие возращает false выполняется :SetOnActivate

Методы связанные с ULX

Метод Описание
:SetULXGroup(group) Нужно указать, если итем является донат группой в ULX.
:SetULXCommandAccess(cmd) Дает доступ к ULX команде на определенный срок.

Пример:
:SetULXCommandAccess("ulx model")

Методы связанные с FAdmin

Метод Описание
:SetFAdminGroup(group) Нужно указать, если итем является донат группой в FAdmin.

Методы связанные с Evolve

Метод Описание
:SetEvolveRank(group) Нужно указать, если итем является донат группой в Evolve.

Методы связанные с DarkRP

Метод Описание
:SetDarkRPItem(sEntClass) Если указать класс шипмента или энтити, итем станет доступным только за донат
:SetDarkRPTeam(iTeamID) Если указать ID профы (пример: TEAM_MAYOR, TEAM_CP), профа станет доступна только тем, кто купил её за донат.
:SetDarkRPMoney(iSum) При активации игроку будет выдана указанная сумма денег.

Методы связанные с PointShop 2

Метод Описание
:SetPoints(iAmount) Выдает обычные поинты
:SetPremiumPoints(iAmount) Выдает премиум поинты

Методы связанные с Leveling System

Метод Описание
:SetLevels(iAmount) Добавляет указанное количество уровней
:SetEXP(iAmount) Выдает опыт

Методы которые работают на всех гейммодах

Метод Описание
:SetTool(sToolName) Разрешает юзать определенный tool (rope, winch, advdupe2) только донатерам и админам
:SetEntity(sEntClass) Позволяет спавнить указанную энтити через спавн меню (Q)
:SetWeapon(sWepClass) То же, но для пушек
:SetVehicle(sVehClass) А это для машин

Пример сложной конфигурации

Пример простой можно увидеть в базовом настройщике скрипта

Группы

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

IGS.NewGroup("Имя группы") -- Создает объект группы или возвращает существующую

Метод Описание
:SetIcon("http://site/img.png") Устанавливает ссылку на иконку в соотношении 1:1. Будет отображена на главном фрейме на кнопке группы
:AddItem(ITEM_OBJECT,"Имя в группе") Добавляет предмет в группу под определённым именем. Если не указать имя в группе, то будет использовано стандартное название предмета.
:SetHighlightColor(col) Устанавливает цвет текста названию группы

Хуки

Shared

Хук Аргументы Описание
IGS.OnServersLoaded Без аргументов Вызывается после получения информации о серверах вашего проекта, где еще работает автодонат. Если хук не вызовется, скрипт не загрузится
IGS.Initialized Без аргументов Вызывается после полной загрузки скрипта
IGS.OnSuccessPurchase player client
table ITEM
boolean isGlobal
int itemID
Вызывается после успешной покупки предмета в магазине
IGS.OnFailedPurchase player client
table ITEM
boolean isGlobal
string error
Вызывается после неудачной покупки предмета в магазине. Например, недостаточно денег или не прошла проверка :CanBuy
IGS.PaymentStatusUpdated (player client
table status
Вызывается после обновления статуса пополнения счета.
На клиенте первый аргумент (игрок) не передается.

Вид данных: https://img.qweqwe.ovh/1494089756498.png

pay - Деньги переведены.
error - Какая-то ошибка.
check - Игрок перешел к оплате
IGS.PlayerPurchasesLoaded player client
table purchases
После входа игрока на сервер с нашей системы начинают загружаться его покупки.
После завершения вызывается этот хук.
На клиенте первый аргумент (игрок) не передается.
IGS.OnSettingsUpdated Без аргументов Вызывается после получения или обновления данных для корректной работы функций IGS.GetMinCharge() и IGS.GetCurrencyPrice()

Server

Хук Аргументы Описание
IGS.OnActivate player client
table ITEM
Вызывается после успешной активации итема с инвентаря. Можно использовать для выдачи дополнительных бонусов
IGS.OnError. + method string error
table parameters
Для опытных.
Вызывается в fetch.lua.
Предназначен для перехвата ошибок с определенных методов.

Пример перехвата:

hook.Add("IGS.OnError.servers.get", "servers.get.catchError", function(error, parameters)
      print("Ошибка: " .. error .. "\n Переданные параметры: " .. parameters .. "\n");
end)

CLIENT:

Хук Аргументы Описание
IGS.OnDepositWinOpen int depositAmount Вызывается при открытии окошка пополнения счета (Вот этого: https://img.qweqwe.ovh/1493842563826.png).
depositAmount - сумма для пополнения на которую открылась менюшка
IGS.OnItemInfoOpen table ITEM Вызывается при открытии этого окошка: https://img.qweqwe.ovh/1493843276142.png
IGS.CatchActivities panel activity
panel sidebar
В хуке должен вызываться метод activity:AddTab("Название вкладки",Панель вкладки,"Путь к материалу иконки 32*32")

Если не хватает какого-то хука -- скажите нам. Не добавляйте его сами

Остальное

  • В транзакциях покупки начинаются с "P: " (purchase)
  • Активации купонов с "C: " (coupon)
  • Пополнения счета с "A: " (add funds)
  • Все операции с игроками проводятся по SteamID64 идентификатору (Никаких pl:SteamID())
  • Избегай InitPostEntity и других хуков вроде loadCustomDarkRPItems при добавлении итемов в additems.lua, так как эти хуки могут проскочить из-за особенности загрузки скрипта.

Вся остальная информация находится в комментариях к методам и функциям в коде, но я постараюсь вскоре перенести сюда.