Кастомный контент для сервера Lineage 2: как добавить свои предметы и не сломать клиент

Кастомный контент на серверах Lineage 2 чаще всего ломается в одном и том же месте: сервер о новом предмете знает, а клиент нет. Кастомное оружие или броня — это две задачи, а не одна. Сначала вы описываете предмет на сервере, потом учите клиент каждого игрока, как он выглядит. Пропустите вторую часть, и игроки увидят пустое название или предмет без иконки. В этом гайде разобраны обе части для Interlude-сервера на базе L2J, а заодно — как продавать предмет и раздавать патч.
Из чего на самом деле состоит кастомный предмет
Interlude (C6) вышел в NA/EU 12 апреля 2007 года и до сих пор остаётся хроникой, которую чаще всего кастомизируют на частных серверах. В классической структуре L2J того времени кастомный предмет раскидан по нескольким файлам. Известный гайд с MaxCheaters описывает это так: «sql-файл для базы данных, xml-файл для сервера и, наконец, dat-файл для клиента».
| Слой | Файл | Что в нём хранится |
|---|---|---|
| Сервер | XML предмета в датапаке | Характеристики и поведение предмета |
| База данных (старые сборки L2J) | Строка в таблице weapon, armor или etcitem | Описание предмета на сборках, где ещё используются SQL-таблицы |
| Клиент | system/itemname-e.dat | ID предмета, название, описание |
| Клиент | weapongrp.dat, armorgrp.dat или etcitemgrp.dat | Меш, текстура, иконка, звуки экипировки и выпадения |
В новых сборках от SQL-таблиц отказались, а названия папок в разных паках отличаются. Любой путь из форумной темы 15-летней давности воспринимайте как подсказку и сначала проверьте, где ваша сборка (Mobius, aCis или другой форк) хранит XML предметов, а уже потом что-то копируйте.

По шагам: добавляем одно кастомное оружие
Возьмите один предмет и доведите его до рабочего состояния от начала до конца, прежде чем делать целый сет. Порядок ниже повторяет гайд с MaxCheaters.
- Выберите свободный ID. В гайде используется 99999. Что бы вы ни выбрали, сначала поищите этот ID в датапаке и файлах клиента. Повторное использование существующего ID — один из классических способов всё сломать.
- Сделайте бэкап .dat-файлов клиента. Скопируйте
itemname-e.datи соответствующий grp-файл в надёжное место. Рано или поздно вы один из них сломаете. - Добавьте описание на сервере. Напишите XML предмета с нужными характеристиками. На старой сборке L2J также добавьте SQL-строку с тем же ID.
- Добавьте запись с названием. Расшифруйте
itemname-e.dat, добавьте строку с ID, названием и описанием и оставьте пустую строку после последней записи. - Добавьте визуальную запись. В
weapongrp.datдобавьте тот же ID и укажите меш, текстуру и иконку. Для первого предмета проще всего взять стандартные ассеты. - Зашифруйте обратно и протестируйте. Сохраните оба файла, перезапустите сервер, зайдите GM-персонажем и выполните
//create_item 99999.
ID должен совпадать во всех этих местах: XML сервера, SQL-строка (если она есть в вашей сборке), itemname-e.dat и grp-файл. Одна опечатка — и предмет существует на сервере, но в клиенте отображается неправильно или не отображается вовсе.
Как редактировать .dat-файлы и не повредить клиент
Файлы .dat клиента зашифрованы, поэтому нужен инструмент, чтобы расшифровать их, отредактировать и зашифровать обратно. В гайдах времён Interlude используют L2FileEdit или l2encdec и сохраняют файлы в версии 413. Опенсорсные варианты вроде open-l2encdec и L2crypt от acmi тоже работают с заголовками семейства 41x.
Версия шифрования должна соответствовать клиенту, который вы реально раздаёте. В одной теме пользователь Gracia Final получил ошибки, пройдя по инструкции для Interlude. 413 — обычный выбор для Interlude, но перед выпуском патча проверьте её на своём клиенте.
Большинство сломанных патчей — результат мелких ошибок:
- Колонки и пробелы. Эти файлы построены по колонкам. Лишний или пропущенный пробел сдвигает все значения после него, и клиент читает мусор.
- Нет пустой строки в конце. Гайды предупреждают об этом не просто так. Добавляйте её каждый раз.
- Версия инструмента. Администраторы Interlude-серверов на l2jbrasil и RaGEZONE сообщают, что новая сборка FileEdit превращала дуалы в одиночные мечи или не могла скомпилировать
weapongrp.dat. Поэтому многие остаются на старой сборке. Это отзывы сообщества, так что если добавляете дуалы, тестируйте их отдельно.
Держите чистую, неизменённую копию папки system клиента рядом с рабочей. Когда что-то отображается неправильно, сравнить со стандартными файлами быстрее, чем гадать.

Как выдать кастомные предметы игрокам через multisell
Предмет, который игроки не могут получить, — это просто тестовый объект. В датапаках L2J предметы обычно выдают через multisell-магазин, который чаще всего открывается у NPC GM-шопа. Каждый multisell — это XML-файл, названный по числовому ID, то есть магазин 9000 лежит в 9000.xml.
Каждая запись состоит из двух частей. Ingredients — то, чем платит игрок: адена, другой предмет или стопка материалов. Products — то, что он получает. Поэтому multisell отлично подходит для цепочек улучшения: обменять стандартное оружие плюс материалы на вашу кастомную версию.
Для кастомного снаряжения важны два флага:
applyTaxesпо умолчанию false. Если включить, цены в адене облагаются налогом, а доход идёт замку, которому принадлежит территория. Стоит подумать, если на сервере активные осады.maintainEnchantmentпо умолчанию false. Если включён, уровень заточки переносится на результат обмена, но только в режиме работы с инвентарём (exc_multisell). Если игроки меняют оружие +10, а на выходе получают +0, первым делом проверьте этот флаг и режим магазина.
Цены на кастомные предметы считайте исходя из реальной экономики сервера, а не в вакууме. Магазин, который на второй день продаёт топовую экипировку за адену, обесценивает всю остальную прокачку.
Как раздать патч клиента игрокам
Отредактированные .dat-файлы лежат в папке system клиента, поэтому каждому игроку нужны ваши пропатченные файлы, чтобы кастомные предметы отображались правильно. Обойти это нельзя. Планируйте это с самого начала:
- Раздавайте папку system или понятный архив с патчем и инструкцией по установке, написанной для человека, который ни разу не трогал .dat-файлы.
- Версионируйте патчи. Когда позже добавите новые предметы, игроки должны узнать, что их патч устарел, раньше, чем начнут жаловаться в Discord на «невидимое оружие».
- Распространяйте только файлы, которые собрали сами из чистой базы, и публикуйте контрольные суммы. Игроки небезосновательно опасаются запускать случайные папки system из интернета.
- Делайте изменения клиента минимальными. Каждый кастомный предмет увеличивает патч, а каждое обновление патча — это шанс, что часть игроков отвалится.
И трезво оценивайте масштаб. Кастомные предметы дают серверу индивидуальность, но не заменяют стабильные рейты и работающую экономику. Немало серверов с длинными списками кастомных предметов закрылось, потому что не было базы. К тому же всё это построено на интеллектуальной собственности NCsoft — юридический риск, который несёт каждый владелец частного сервера.
Добавьте сервер в листинг, когда контент готов
Когда кастомные предметы протестированы, патч упакован, а цены в магазинах выставлены, следующая задача — игроки. Добавьте свой сервер на L2Calendar бесплатно, чтобы его находили те, кто ищет вашу хронику. Упомяните в описании кастомный контент и патч, чтобы игроки заранее знали, что нужно скачать. Если хотите больше заметности на старте, VIP-размещение поднимет ваш сервер выше на странице.
