Предметы и экономика
Комбинации
Старая комбинация и CombineEx у NPC
Обзор
Комбинации — обмен набора предметов у NPC на новый предмет. В игре две независимые системы.
| Старая комбинация | CombineEx («Hero combine») | |
|---|---|---|
| Рецепты на сервере | ItemCombine.dat, 103 строки | CombineTable.dat + CombineTable2.dat |
| В клиенте | Item.edf, группа 45 | ItemCombine.edf |
| Результат | один предмет сразу в инвентарь | список до 24 предметов, ждёт подтверждения (7/35) |
| На Sirin | родной код | заменён Lua ReloadableScripts\CombineEx |
Как работает
- Старая комбинация:
m_nCombineIdx— ключ кнопки NPC; клиент перебирает только первые 103 строки, результат лежит вm_strCode. - CombineEx: номер рецепта — сквозная позиция в двух серверных файлах, поэтому вставка строки сдвигает номера, и клиент собирается вместе с сервером. Рецепт выбирает клиент, первым совпавшим в порядке
ItemCombine.edf: порядок строк — это приоритет, поздний рецепт с тем же набором материалов недостижим. - Списки
LinkedStuff.dat(LL) иLinkedResult.dat(LR) — наборы кодов, связанные позиционно: материал из списка LL даёт результат той же позиции из LR. Вторые копии кодов в LR сервер не видит — берёт первую. - Розыгрыш: веса результатов из 10 000; сумма меньше 10 000 — остаток даёт неудачу, больше — последние результаты недостижимы.
FailOutItem— сколько материалов сохраняется при неудаче (0 — теряются все); список «неудачи» в клиенте только для показа. - Маска улучшения материала
m_dwUpt— точное значение или −1 «любая».
Что важно при правке
- Пустые слоты материалов начинаются с
-, количество ≤ 0, маска −1; заполненные идут подряд,MaterialCountклиента равен их числу. - Количество материала должно помещаться в одну ячейку окна: клиент требует точного равенства.
Файлы категории
7 в реестре| Файл | Сторона | Формат | Уровень | Корпуса | Запись | Свод | Примечание |
|---|---|---|---|---|---|---|---|
script\CombineTable.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 968, GU 968, Sirin 968 | combinations.md | CombineEx, режим по умолчанию; combinations.md §3.1 |
script\CombineTable2.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 968, GU 968, Sirin 968 | combinations.md | CombineEx, режим по умолчанию; combinations.md §3.1 |
script\ItemCombine.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 208, GU 208, Sirin 208 | combinations.md | старая комбинация, combinations.md §2 |
script\LinkedResult.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 6468, GU 6468, Sirin 6468 | combinations.md | combinations.md §3.2 |
script\LinkedStuff.dat | сервер | dat | готов к полному | AoP ✓, GU ✓, Sirin ✓ | AoP 6468, GU 6468, Sirin 6468 | combinations.md | combinations.md §3.2 |
sirin-lua\threads\main\ReloadableScripts\CombineEx\*.lua | сервер | lua | готов к полному | AoP –, GU –, Sirin 3 | combinations.md | режим Sirin редактора комбинаций; combine_example.lua, skins.lua, socket_extender.lua | |
DataTable\ItemCombine.edf | клиент | edf | производный | AoP ✓, GU ✓, Sirin ✓ | AoP 2 секц.: 124/1208, GU 2 секц.: 124/1208,… | combinations.md | Производный из: CombineTable*.dat + LinkedStuff.dat (без результатов). combinations.md §3.4; в STRS первая секция разбита на два потомка (60 375 + остаток) |
«готов к полному» — формат разобран и поля описаны; «производный» — файл собирается из другого; «непрозрачный» — формат известен не до конца; «отложен» и «вне рамок» — файл студией не редактируется.
Разделы категории
Файлы категории разбиты на группы; у каждой группы и подгруппы своя страница с полями только её файлов.
CombineEx
DataTable\ItemCombine.edf; script\CombineTable.dat, script\CombineTable2.dat; script\LinkedResult.dat; script\LinkedStuff.dat
Всего 45 Известно 23 Производное 18 Не используется 4Режим Sirin (Lua)
sirin-lua\threads\main\ReloadableScripts\CombineEx\*.lua
Всего 4 Известно 4 Производное 0 Не используется 0Неиспользуемые параметры
Поля, которые не читает ни сервер, ни клиент. Для каждого — почему так решено и где это установлено. Редактор сохраняет их байты как есть.
DataTable\ItemCombine.edf клиентский файл
Запись: CombineTable I, CombineTable II (CombineTable)
| Смещ. | Поле | Почему не используется | Данные |
|---|---|---|---|
+0x011 | (без имени) | выравнивание: материалы — структуры с выравниванием 4 combinations.md §3.4; не используется: байты выравнивания (после байтового поля до поля с кратного 4 смещения; у безымянных байтов нет чтений в коде MSVC, кроме копирования записи целиком; исходник 2004 citemdatamgr.h); в AoP везде 0 | 183 знач.; чаще `` (99%) |
+0x015 | (без имени) ×5 | выравнивание после байта группы материала combinations.md §3.4; не используется: байты выравнивания (после байтового поля до поля с кратного 4 смещения; у безымянных байтов нет чтений в коде MSVC, кроме копирования записи целиком; исходник 2004 citemdatamgr.h); в AoP везде 0 | 232 знач.; чаще / / / … (99%) |
Запись: LinkedStuff
| Смещ. | Поле | Почему не используется | Данные |
|---|---|---|---|
+0x00C | ?-- ×100 | во всех заполненных элементах AoP 0; клиент AoP не читает combinations.md §3.4: таблицу LinkedStuff (ItemCombine::Board+0x4714) берут только конструктор 00509B30, деструктор 00509C90, загрузчик 00509D30 и подбор материалов 0050AC50; последний читает у записи +0x04 (число) и у элемента только группу (+0x08) и код (+0x10); других обращений к +0x4714…+0x4720 нет (clines) | — |
script\CombineTable.dat, script\CombineTable2.dat серверный файл
| Смещ. | Поле | Почему не используется | Данные |
|---|---|---|---|
+0x08C | m_strCombineType | описание (корейский, cp949), сервер не читает combinations.md §3.1: свод — «+0x8C | m_strCombineType | описание (корейский, cp949), сервер не читает»; в клиентский файл не идёт (ItemCombine.edf сопоставлен, combinations.md §3.4) | 15267 знач.; чаще 1-3¹«Áö¾÷±×·¹ÀÌ´õ C±Þ¹«± (0%) |