|
67 | 67 | - Блоки с контентом — задержка 10мс вместо 50мс при догонке. |
68 | 68 | - **Коммит:** (текущий) |
69 | 69 |
|
| 70 | +## Сессия 2026-04-10 |
| 71 | + |
| 72 | +### Контекст |
| 73 | +Баги из чата с тестировщиками (Кочевник и PAPA MEDBEDb): |
| 74 | +- Хроника пустая, невозможно выполнить квест "благословить магов" |
| 75 | +- Нет выбора стоимости энергии при путешествии и благословении (как в охоте) |
| 76 | +- Гильдии не видны другому аккаунту, приглашения не приходят |
| 77 | +- На арене нет списка игроков для вызова на дуэль |
| 78 | +- Босс: HP сбрасывается, атаки не видны другим |
| 79 | + |
| 80 | +### Баги и что сделано |
| 81 | + |
| 82 | +#### 1. Хроника пустая — квест "благословить магов" невыполним |
| 83 | +- **Причина:** `_actionToPostText()` возвращал `null` для всех типов кроме `chronicle_post`. Если никто не писал в хронику с тегом `#viz_magic`, лента была пустой — нельзя никого благословить. |
| 84 | +- **Фикс (chronicle.js):** `_actionToPostText()` теперь генерирует нарративные тексты для всех игровых действий: hunt, char.attune, craft, rest, guild.create, guild.accept, boss.attack, blessing_sent. Нарративные строки уже были в i18n (chronicle_narrative_*). |
| 85 | +- **Дополнительно:** `recentActions` лимит увеличен со 100 до 200 (state-engine.js), чтобы больше активности было видно в ленте. Обновлены подсказки в i18n (ru.js, en.js) — убрано упоминание "только через посты в Хронике". |
| 86 | + |
| 87 | +#### 2. Выбор стоимости энергии при путешествии и благословении |
| 88 | +- **Было:** Путешествие — фикс. 100bp (1%), Благословение — фикс. 100bp (1%). |
| 89 | +- **Фикс (map.js, chronicle.js):** Добавлены две кнопки: 0.1% (10bp) и 1% (100bp). Благословение: `data-energy` атрибут на кнопке, `_onBless()` читает стоимость из атрибута. Путешествие: `data-cost` атрибут, `_travelTo()` принимает параметр cost. |
| 90 | +- **CSS (main.css):** `.region-travel-options` — flex-контейнер для двух кнопок путешествия. |
| 91 | + |
| 92 | +#### 3. Список игроков на арене для вызова на дуэль |
| 93 | +- **Было:** Только ручной ввод имени + leaderboard (пустой без дуэлей). |
| 94 | +- **Фикс (arena.js):** Добавлена секция "Известные маги" (`_renderKnownPlayers()`) — список всех `state.characters` с кнопками "Вызвать". Показывает имя, уровень, класс. Сортировка по уровню. Не дублирует leaderboard. |
| 95 | +- **i18n:** `arena_known_players` в ru.js и en.js. |
| 96 | +- **CSS (main.css):** `.arena-players-list`, `.arena-player-card` стили. |
| 97 | + |
| 98 | +#### 4. Гильдии не видны — улучшение обнаружения |
| 99 | +- **Причина:** Окно синхронизации 28800 блоков (~24ч). Гильдия, созданная ранее, не попадала в state.guilds. Листинг требовал ручного "Продвинуть гильдию". |
| 100 | +- **Фикс (state-engine.js):** `_handleGuildCreate()` теперь автоматически добавляет листинг в `worldState.guildListings` при создании гильдии, без необходимости ручного продвижения. |
| 101 | +- **Фикс (guild.js):** Добавлена подсказка `guild_sync_hint` на экране гильдий, когда список гильдий и приглашений пуст — объясняет, что идёт синхронизация. |
| 102 | +- **i18n:** `guild_sync_hint` в ru.js и en.js. |
| 103 | + |
| 104 | +#### 5. Босс: HP сбрасывается, атаки не видны другим |
| 105 | +- **Причина 1:** Если boss spawn-блок был до окна синхронизации, `worldState.worldBoss` оставался `null` → все `boss.attack` действия игнорировались. |
| 106 | +- **Причина 2:** UI делал дублирующий вызов `WorldBoss.attackBoss()` (оптимистичное обновление) + state-engine делал тот же вызов при обработке блока → двойной урон. После перезагрузки оптимистичные данные терялись → HP "восстанавливался". |
| 107 | +- **Фикс (state-engine.js):** `_handleBossAttack()` теперь автоматически создаёт босса (`WorldBoss.spawnBoss()`), если `worldState.worldBoss` отсутствует, но приходят атаки. |
| 108 | +- **Фикс (world-boss.js UI):** Убран дублирующий `WorldBoss.attackBoss()` из UI. Теперь UI показывает только оценку урона. Реальный урон применяется state-engine из блокчейна. |
| 109 | +- **Фикс (world-boss.js UI):** Добавлен auto-refresh через EventBus при событиях `boss_attacked`, `boss_defeated`, `world_boss_spawn`. |
| 110 | + |
70 | 111 | ### Известные нерешённые вопросы |
71 | 112 |
|
72 | 113 | 1. **Передача лидерства гильдии** — основатель не может уйти, но нет action type для передачи роли founder другому участнику. |
73 | 114 | 2. **Раздача готовых checkpoint-файлов** — для совсем новых клиентов можно генерировать и хостить готовый checkpoint JSON, чтобы пропустить синхронизацию целиком. |
| 115 | +3. **Скорость синхронизации** — при 28800 блоков (~24ч) синхронизация занимает ~7 мин. Можно ускорить параллельными запросами блоков. |
| 116 | +4. **Сумка отображается по-разному на десктопе и мобильном** — стили inventory для мобильных нуждаются в доработке. |
| 117 | +5. **Пропадание предметов из сумки** — вероятно связано с ресинхронизацией: если предметы были получены до окна синхронизации, они не восстанавливаются из блокчейна (нужен checkpoint). |
74 | 118 |
|
75 | 119 | ### Архитектурные заметки |
76 | 120 | - ES5 strict, IIFE модули, без фреймворков и сборки |
|
0 commit comments