# SP3 группа B — бэкпорт квестовых NPC классических городов > **⚠️ ОБНОВЛЕНИЕ (важно):** оказалось, uAthena УЖЕ содержала старые (на переменных, без quest-log) > версии всех 16 town-квестов и сама их регистрировала. По решению — **АПГРЕЙД**: старые регистрации > в `scripts_athena.conf` отключены, активны quest-log версии из `npc/backport/quests/`. То есть это > НЕ чисто аддитивно — существующие классические квесты ЗАМЕНЕНЫ на eathena-версии. **Тестировщикам:** > дополнительно проверить перекрёстные ссылки (другие NPC/варпы с `donpcevent`/`doevent` на эти квест-NPC > могут ссылаться на старые имена — boot это не ловит, только рантайм). Коммит апгрейда: `f2ff1b4`. Часть порта пре-реневала. SP1 = town-NPC (кафры/торговцы), SP2 = движок quest-log, **SP3 = квестовые NPC**. Группа B — классические города (эпоха ≤ ep10, гарантированно совместимы с клиентом 2007). Источник — `/tmp/eathena-ref/npc/quests/`. ## Что добавлено (контент) 16 файлов дословно скопированы в `npc/backport/quests/` и зарегистрированы в `npc/scripts_athena.conf` (блок «SP3 group B»): `alberta, aldebaran, amatsu, ayothaya, comodo, geffen, gonryun, izlude, louyang, lutie, morocc, niflheim, payon, prontera, umbala, yuno` - Существующие NPC/механики **не менялись** (проверено boot'ом: 0 коллизий имён, 0 «Invalid map»). - **alberta** (12 `setquest`) и **morocc** (82 `setquest`) — первый контент, наполняющий журнал квестов (SP2). Их видно через `@quests`. Остальные 14 — на переменных. - Все `quest_id` из `setquest/completequest/changequest/checkquest` покрыты `db/quest_db.txt` (1703). ## Изменения движка (аддитивные, ничего существующего не ломают) 1. **`strnpcinfo()`** (`src/map/script.c`) — команды не было (uAthena форкнут до неё). Чисто серверная (name / visible / #-часть / уник.exname / карта). Нужна backport-NPC (morocc и др.). 2. **Парсер `/* */`** (`src/map/npc.c`) — `npc_parsesrcfile` понимал только `//`. eAthena-скрипты отключают NPC блоками `/* */`. Без фикса разделители падали в «Could not parse», а «закомментированный» NPC грузился как живой. Построчный пропуск (разделители на отдельных строках). Чинит и старый шум в `backport/cities/manuk.txt`, и блок 671 строки в `quests_morocc.txt`. 3. **`input {,{,}}`** (`src/map/script.c`) — было `"v"` (только переменная), стало `"v??"`. Дефолты сохраняют прежний кап `[0, vending_max_value]` → существующие скрипты без изменений. Нужно `quests_umbala`. ## Адаптации (задокументировано) - **morocc / NPC «Ernst» (Prince#ern):** `checkquest(01024)` → `checkquest(10024)`. `01024` — восьмеричный литерал (= 532), опечатка автора eAthena; двумя строками выше тот же NPC использует `10024`. Была «мёртвая ветка», теперь работает как задумано. - **Кулинария:** в 3 файлах (amatsu/ayothaya/louyang) слово «cooking» — только в диалогах, buildin `cooking` им НЕ нужен. Сама кулинария реализуется отдельно через **`@cooking`** (см. отдельный doc) — это не часть группы B. ## Как валидировалось (dev-бокс с GRF из /root/uAthenaGRF) `./map-server_sql --run_once` с реальными картами: - сборка `make sql` — 0 ошибок; - **16036 NPC загружено**, 0 `script error`, 0 «Could not parse», 0 коллизий/«Invalid map» по backport; - покрытие `quest_id` — полное. > dev-бокс не заменяет проверку на клиенте: парсинг/компиляция/отсутствие коллизий — да, > но игровой процесс (диалоги, выдача наград, прогресс квестов) проверяют тестировщики. ## Что проверять тестировщикам (кластер + клиент 2007) 1. Зайти в каждый город из списка, найти добавленных квест-NPC, пройти диалоги — нет крашей/«молчания». 2. **alberta** и **morocc**: начать квест → `@quests` показывает его; пройти → статус/награда корректны. 3. Награды (предметы/зени/опыт) выдаются; требования по предметам/уровню работают. 4. NPC, требующие ввода числа (например, umbala — «Puchuchartan», ввод 0-9), принимают ввод и валидируют диапазон. 5. Существующие квесты/NPC городов работают как прежде (регрессий нет). 6. Зафиксировать любой NPC, ссылающийся на отсутствующую карту/предмет/моба (на dev-боксе не видно без полного клиента). ## Вне группы B (дальше по плану) Новый Мир (группа A); эпизоды 11-13 (C); маркетинговые линейки D/E; god-item/instance/BG (F — исключены). Кулинария `@cooking` — отдельная фича.