FOnline
 Указатель Классы Функции Переменные Группы Страницы
Сумки

Термин Сумка - другое название инвентаря NPC.

Его можно выставлять двумя способами:

  1. Через маппер, помещая предметы вручную в инвентарь каждому NPC.
  2. Прописывая содержимое инвентаря в файле "Bags.cfg" (\server\data\Bags.cfg), а затем присваивая в маппере/скриптом NPC параметр ST_BAG_ID, который означает номер сумки из этого файла.

Суть использования Bags.cfg:

  • Оптимизация работы: проще создать один набор предметов и присваивать NPC только номер сумки с этим набором, чем выставлять каждому отдельно одни и те же предметы в маппере.
  • Наличие рандома: можно создать несколько наборов предметов для одного NPC, чтобы потом при генерации выбирался случайным образом один из них.
  • Простота редактирования: изменениями в одном файле можно вызывать глобальные изменения, нет необходимости лезть в карты, для вступления обновления в силу не нужна очистка БД (как в случае с картами).

Содержимое сумок постоянно обновляется. Период обновления сумок записан в переменной __BagRefreshTime (config.fos). По умолчанию сумки обновляются каждый час реального времени. Обновление происходит в том случае, если в инвентаре NPC не найдено какого-то предмета из его базового набора.

Для выставление инвентаря через маппер:

  1. Выделите NPC.
  2. Убедитесь, что ST_BAG_ID равен нулю (ST_BAG_ID=0 обозначает, что данные для инвентаря берутся из маппера).
  3. Поместите нужные предметы в инвентарь NPC (alt+click).
  4. При необходимости поместите нужное в слоты рук или брони (shift+click по предметам в инвентаре).

При старте сервера набор будет записан.

Важно учитывать то, что сохраняется только PID предметов, без каких-либо дополнительных параметров. Скажем, если вы хотите поместить в инвентарь ключ с определенным номером, то после первого обновления сумки он уже будет обнулен. Поэтому для респауна подобных предметов надо писать специальные скрипты.

Bags.cfg

Структура файла Bags.cfg простая: тут объявляются массивы двух типов, условно назовем их "наборы" и "сумки".

Наборы - хранят PID и количество предметов. У каждого набора свое уникальное название.

Сумки - составляются из наборов, названия нет, есть номер - тот самый, что надо присваивается NPC через параметр ST_BAG_ID.

Чтобы было понятнее, приведу пример:

###################################
BCapsSmall=PID_BOTTLE_CAPS:0-50
BCapsMedium=PID_BOTTLE_CAPS:100-200
BCapsLarge=PID_BOTTLE_CAPS:350-500
GuardWeapon=PID_ASSAULT_RIFLE^m:1
bag_101=BCapsSmall GuardWeapon
bag_102=BCapsMedium GuardWeapon
bag_103=BCapsLarge GuardWeapon
###################################

Первые 4 строки - это наборы. Последние 3 - сумки.

Комбинируя 4 набора, мы составили сумки для трех охранников - у каждого из них разное количество денег, но одинаковое вооружение. Потом надо запомнить эти три номера и прописать охранникам в маппере, выставляя понравившимся сумку получше. А добавив побольше наборов (скажем, медикаментов или выпивки), можно комбинировать из них разные сумки, не расписывая каждый раз отдельные предметы.

Формат записи

Наборы:

  1. Объявляются в любом месте файла
  2. Имеют уникальное название
  3. Не могут быть пустыми
  4. Перечисление предметов: через "+" (=AND) или пробел (=OR)

Формат:

ИмяНабора=PID_ПРЕДМЕТА^местоположение:количество(min-max)

Пример:

GuardGun=PID_ASSAULT_RIFLE^m:0-1

Количество и местоположение указывать необязательно.

Базовое местоположение - в инвентаре. Также можно указать:

  • ^m - главный слот
  • ^e - внешний слот
  • ^a - слот брони

Для количества можно указать как и точное число (PID_ASSAULT_RIFLE:1), так и диапазон (PID_BOTTLE_CAPS:0-30).

Пример набора, содержащего несколько групп предметов:

AllGuardMelee=PID_SLEDGEHAMMER^e PID_POWER_FIST^m+PID_SMALL_ENERGY_CELL^e:5-15

Из этого набора будет выбираться: ЛИБО кувалда, ЛИБО силовой кулак ПЛЮС батарейки (две группы перечислены через пробел, в одной стоит два предмета).

Магазины оружия заполняются автоматически.

Сумки:

  1. Идут по-порядку
  2. Название строго "bag_#"
  3. Могут быть пустыми
  4. Перечисление: через пробел (=AND), рандома нет

Формат:

bag_#=Набор1 Набор2 Набор3

bag_0 не используется.

bag_1 оставляется пустым и означает пустую сумку по умолчанию.

Для большего количества примеров просто откройте сам файл bags.cfg, он прост и интуитивно понятен.

Принцип оформления сумок FOnline: tLA описан в комментариях к файлу.