Grimgar Combat 1.10.26 — Яндекс Браузер

Установка / обновление
1. Распакуйте архив в постоянную папку.
2. Отключите старую версию расширения.
3. Включите режим разработчика и загрузите распакованную папку
   Grimgar-AutoBot-Yandex-v1.10.26, где лежит manifest.json.
4. Полностью обновите grimtrail.ru.
5. Не держите одновременно включёнными две версии.

Что изменено в 1.10.26
- Исправлен плавающий порог побега по количеству противников. Автоматически созданные сценарии мобов больше не хранят замороженную копию старого значения «Противников ≥ N»: они следуют текущей настройке «Общий».
- В сценарии конкретного противника у побега теперь явно видно источник: «Из общего» или «Свои для противника». Личный порог создаётся только осознанным редактированием/переключением; общий порог больше не перекрывается скрытой копией.
- Старые автоматически унаследованные сценарии v1.10.23+ переводятся на живое наследование общего побега без удаления сохранённых локальных данных. Явно отключённый локальный побег сохраняется.
- Старые скрытые флаги побега от босса/элитки больше не могут запускать побег поверх видимых настроек. Для босса и элитки используются только галочки в разделе «Побег»; список «Сбегать от имён» остаётся отдельным явным правилом.
- Изменение порога во время боя сразу пересчитывает уже поставленный в очередь побег: если новое условие не выполнено, автоклик отменяется.

Проверка 1.10.26
Локально проверяются сценарии 2/3/4 противника, миграция старой замороженной копии и создание собственного порога только после явного редактирования. Сайт игры не открывался, логин и пароль не использовались.

Что изменено в 1.10.24
- В пятой главе «Пламенный Рубеж» теперь все 11 локаций с известными названиями со скриншотов, в порядке игрового списка: Аванпост — «Пламенный Рубеж», Оплавленные тропы, Пепельный тракт, Разбойничий стан, Раскалённая развилка, Паучье логово, Огненная Крепость, Долина саркофагов, Чёрный карьер, Подножье вулкана, Вулкан — Огненное Сердце.
- Два неразведанных пункта «???» не добавлены, поскольку их названия неизвестны.
- Список дополняет сохранённый каталог автоматически, сбрасывать настройки не нужно.

Что изменено в 1.10.23
- Исправлен конфликт общего сценария с автоматически созданными копиями для противников: новые противники наследуют актуальные навыки из «Общего».
- В «Навыках» показан фактический сценарий боя. Для противника можно выбрать «Из общего» или «Свои для противника»; изменение унаследованной карточки создаёт свои настройки из показанных общих.
- Старые личные сценарии сохранены: по старым данным нельзя достоверно отличить автоматическую копию от настроенной вручную.
- Если четыре навыка настроены в «Общем», один раз нажми «Навыки» → «Общий» → «Применить общий ко всем». Кнопка появляется, если остались личные сценарии; их сохранённые правила можно вернуть выбором «Свои для противника».
- При применении общего сценария посреди боя подтверждённые шаги цепочки учитываются, поэтому уже использованный рассекатель разрешит готовую вставку Берсерка.
- Источник навыков переключается отдельно от настроек побега; приоритет помощи и защиты сохраняется.
- Инструкция в панели дополнена объяснением сценариев и настройкой примера.

Проверка 1.10.23
Два локальных интеграционных теста: добавление противника → изменение общего сценария → реальный выбор навыков; старый личный сценарий → общий → продолжение начатой цепочки, сохранение побега и настроек профиля. Также проверен синтаксис content.js. Сайт игры не открывался.
Локальный запуск: node --test tests/v11023-scenario-inheritance.test.js

Что изменено в 1.10.22
- Добавлен режим атакующего навыка «Вставка после навыка»: готовый навык применяется после выбранного предшественника, недоступный не задерживает основной цикл.
- Пропущенная вставка закрывается после следующего основного навыка и снова разрешается после нового применения предшественника. Помощь и защита сохраняют возможность вставки, побег остаётся первым.
- Старые режимы и настройки сохранены, новый режим нужно выбрать в карточке нужного навыка.
- Во вкладке «Инструкция», пункт 3.2, добавлен пример с Берсерком и перезарядкой пять ходов.

Настройка твоего примера во вкладке «Атака», в одном сценарии
Тяжёлый рассекатель: «Сразу, когда доступен», приоритет 3
Берсерк: «Вставка после навыка», после «Тяжёлый рассекатель», приоритет 1
Ломатель брони: «После навыка», после «Тяжёлый рассекатель», приоритет 3
Кровавый размах: «После навыка», после «Ломатель брони», приоритет 3
Берсерк готов: Рассекатель → Берсерк → Ломатель брони → Кровавый размах
Берсерк недоступен: Рассекатель → Ломатель брони → Кровавый размах
Не привязывай Ломатель брони к Берсерку, если не хочешь обязательного ожидания Берсерка.

Проверка 1.10.22
Три локальных сценария вставки, включая пятиходовую перезарядку, сохранение приоритета защиты и запрет запоздалой вставки. Проверки приоритетов предыдущей версии и синтаксиса изменённых JS-файлов. Сайт игры не открывался.
Локальный запуск: node --test tests/v11022-optional-insertion.test.js tests/v11021-skill-priority.test.js tests/combat-policy.test.js

Что изменено в 1.10.21
- У каждого включённого навыка появился приоритет 1–5, где 1 — самый высокий. По умолчанию 3, настройки и профили сохраняются.
- Побег остаётся первым, затем помощь, защита и атаки. Приоритет сравнивается внутри роли и не отменяет условия, перезарядку или расход ресурса.
- Отдельный атакующий навык с более высоким приоритетом может вклиниться в цепочку. После его подтверждённого применения бот продолжает ожидающий шаг.
- При одинаковом приоритете готовое продолжение цепочки идёт раньше обычной атаки навыком, остальные равные навыки выбираются в порядке карточек.
- Пока цепочка ждёт следующий шаг, её предшественники не запускаются заново. После последнего шага цикл может начаться снова.
- Подробная настройка и пример A → X → B → X → C добавлены во вкладку «Инструкция», пункты 3 и 3.1.

Пример настройки
A: «Сразу, когда доступен», приоритет 3
B: «После навыка A», приоритет 3
C: «После навыка B», приоритет 3
X: «Сразу, когда доступен», приоритет 1
Если X восстановился после A, он вставится перед B. Если X уже готов в начале боя, он будет выбран первым. Постоянно доступный X с высоким приоритетом может удерживать цепочку в ожидании — настрой его условия.

Проверка 1.10.21
Локально проверены выбор по приоритету, условия и готовность, повторные вставки с сохранением цепочки, приоритет помощи/защиты, циклы и сохранение значений в профилях. Проверен синтаксис изменённых JS-файлов. Сайт игры не открывался.
Локальный запуск: node --test tests/v11021-skill-priority.test.js tests/combat-policy.test.js

Что изменено в 1.10.20
- Исправлен поиск строки локации: название читается отдельно от подписи «Путь доступен», в том числе при переносе строки внутри одной подписи.
- Выбор проверяется внутри карточки назначения. Названия в открытом списке больше не считаются уже выбранной локацией и не пропускают нужный клик.
- Одинаковое примерное время пути не перезапускает отсчёт на каждом шаге. Когда игра меняет оставшееся время, отсчёт синхронизируется с новым значением.
- После подтверждения прибытия время пути и статус перехода очищаются сразу. Загрузка кнопок торговцев больше не продлевает таймер, скрытая панель старого перехода игнорируется.
- Профили и настройки сохранены, исправления маршрута применяются в обе стороны.

Проверка 1.10.20
Две узкие локальные проверки выбора строки и таймера, проверка синтаксиса content.js. Сайт игры не открывался, работа в авторизованной игре не проверялась.
Локальный запуск: node --test tests/v11020-route-timer.test.js

Что изменено в 1.10.8
- Возвращён выбор действия для предметов после победы в бою с несколькими игроками: «Нужно», «Не откажусь» или «Отказ». Вариант выбирается в разделе «Бой» → «Автоматизация» и применяется последовательно ко всем выпавшим предметам с такими кнопками.
- Выбор ролла теперь определяется по самому экрану победы, поэтому работает и если групповая выдача награды появилась неожиданно, независимо от выбранного режима боя.
- Добавлено стартовое полноэкранное превью из приложенного видео со звуком и исходной длительностью. Оно закрывается автоматически после окончания ролика.
- Во время превью справа сверху есть кнопка «Пропустить»: она сразу убирает и ролик, и саму кнопку.
- Самая первая плашка раздела «Бой» теперь содержит заметную кнопку «Отключить превью». После нажатия настройка сохраняется, текущее превью закрывается и при следующих запусках страницы больше не показывается.
- Если браузер запрещает автоматический запуск звука до первого пользовательского действия, на превью появляется отдельная кнопка запуска со звуком вместо бесшумного зависания.
- Версия расширения поднята до 1.10.8; существующие профили и настройки мигрируют без сброса.

Проверка v1.10.8
Проверены синтаксис всех JS-файлов, варианты распознавания «Нужно / Не откажусь / Отказ», наличие видео в сборке, версия manifest и локальные регрессии новой логики. Авторизованный сайт не открывался.

Что изменено в 1.10.7
- Исправлено подтверждение выбранной локации перед «Перейти»: кликабельная оболочка карточки больше не исключает вложенный заголовок «Рыночная площадь». Название проверяется отдельно от строки маршрута и кнопок других точек карты.
- Поиск кнопки учитывает слитную подпись «Перейти49,4 км», вложенные подписи и декоративные символы. Временная неактивность кнопки больше не означает, что выбранная локация потеряна; сама неактивная кнопка не нажимается.
- Ожидание начала пути и прибытия из v1.10.6 сохранено: длительность маршрута учитывается один раз, повторного нажатия после начала движения нет.
- Счётчик проверок экипировки теперь учитывает победы, поражения и побеги. Побег засчитывается один раз после выхода из боя, включая возврат без окна результата. Само срабатывание условия или отменённый клик не увеличивают счётчик. Интервал остаётся 1–20; сброс — после плановой проверки.
- Исправлена причина неработающей галочки побега: чтение состояния боя больше не заменяет объект настроек, на который ссылался интерфейс. Обработчики галочек обновляют текущие настройки.
- «Разрешить побег» обязательно и для правил босса, элитного и указанного по имени врага. При выключении побега или снятии сработавшего условия отменяется ожидающий автоматический клик, включая задержку перед нажатием.
- Явно выключенный побег в индивидуальном сценарии больше не подхватывает общий побег. При наследовании общих условий интерфейс показывает фактическое значение галочек.
- Текст текущего действия в разделе обслуживания обновляется вместе с основным статусом, вместо застывшего названия этапа.
- Профили и остальные настройки сохранены.

Проверка v1.10.7
Локальные проверки структуры карточки/подписи кнопки, перехода от выбора локации до клика, счётчика с побегами, живого объекта настроек и отмены задержанного побега. Сайт и авторизованный игровой интерфейс не использовались; работа в игре требует проверки после обновления.

Что изменено в 1.10.6
- «Перейти» ищется как настоящая кнопка внутри travel-book-hidden-scroll из присланного снимка DOM. Подпись, общий контейнер карточки и кнопки страницы под книгой больше не подменяют её.
- Для перехода используется один обычный click по кнопке, без предварительных искусственных pointerdown/mousedown, которые могут задействовать перетаскивание книги.
- Отправка клика и начало пути разделены. Пока книга остаётся открытой и переход не начался, бот ждёт короткое подтверждение и при необходимости повторяет нажатие доступной кнопки, максимум три раза. После начала движения повторных кликов нет.
- Время пути берётся из подписи кнопки, затем при необходимости из отдельной строки «Маршрут». Одинаковые 100 сек. в двух местах не складываются в 200 сек.
- Для пути 100 сек. выделяется 100 сек. плюс 20 сек. на загрузку, начиная с подтверждения начала перехода. Обычный таймер этапов обслуживания больше не обрывает поездку.
- Пока игра показывает продолжающееся движение, бот ждёт его окончания. В панели отображается примерное оставшееся время; к ремонту или следующему действию бот переходит после подтверждения прибытия.
- Эти изменения действуют и при возврате в исходную локацию. Настройки и предыдущие исправления локации/счётчика сохранены.

Проверка v1.10.6
Только локальная проверка выбора и обычного клика кнопки, повторного клика без начала пути, длительности 100 сек., ожидания движения и обратного маршрута; проверка синтаксиса. Сайт и браузер не открывались.

Что изменено в 1.10.5
- Исправлена ложная остановка «Персонаж перемещён в другую локацию» при входе в бой и смене противника: заголовок боя и кнопка «Атаковать» больше не считаются названием и признаком локации.
- «Перейти» определяется и во вложенном элементе React, и внутри контейнера навигации. Кнопка выбранного маршрута имеет приоритет перед «В путь» на странице под Книгой путешествий. Неактивные кнопки не нажимаются.
- Подтверждённый результат боя записывается в счётчик до закрытия награды, в том числе без найденного имени монстра, после остановки бота и в ручном бою. Один результат учитывается один раз, включая повторное чтение окна и обновление страницы с тем же результатом.
- Если сначала появляется «Бой окончен», а результат загружается позднее, бот ждёт подтверждения результата, сохраняя текущий бой.
- Интервал проверки остаётся 1–20 завершённых боёв: победы и поражения, как в исходной версии; побег и неизвестный исход не учитываются. Проверка запускается при достижении N только у включённого бота. Счётчик обнуляется после завершения плановой проверки; ручная проверка его не сбрасывает.
- Ключи сохранения профилей, сценариев и настроек не изменены.

Проверка v1.10.5
Локальные проверки трёх исправленных участков и синтаксиса JavaScript. Браузер и сайт не открывались; проверка в авторизованной игре не выполнялась.

Что изменено в 1.10.4
- Исправлен застревающий этап «Перейти» в Книге путешествий: выбранная локация теперь подтверждается по локальному заголовку карточки назначения до отсечения общего контейнера карты с data-map-node-id. Это соответствует экрану, где «Рыночная площадь» уже выбрана, а красная кнопка «Перейти …» видна.
- После ремонта результат подтверждается повторной проверкой прочности тех же предметов, которые были повреждены до ремонта. Диалог оплаты больше не является единственным признаком завершения.
- Если ремонт уже применён, но диалог оплаты ещё кратко остаётся в DOM, подтверждённая прочность имеет приоритет; бот не отправляет повторную оплату и при необходимости закрывает оставшееся окно через «Отмена».
- Счётчик «Повреждено надетых предметов» читается прямо из окна Кузнеца даже когда поверх него ещё находится диалог подтверждения.
- В бою добавлено короткое ожидание стабилизации цели после входа в бой и после смены цели. Побег остаётся выше этой блокировки. Это не даёт нажимать атаку в момент, когда игра ещё перемонтирует селектор цели и выдаёт «селектор цели не найден».
- Остальная логика циклов проверки 1–20, скуп → ремонт → возврат, фильтры экипировки и сценарии навыков не менялись.

Проверка v1.10.4
Проверялись только локальные офлайн-регрессии изменённых участков и синтаксис JavaScript; сайт и аккаунт не открывались.

Что изменено в 1.10.3
- Исправлена конкретная причина пропуска «Перейти»: нормализация названий теперь действительно сопоставляет «Рынок» и «Рыночная площадь», а также «Гильдейский дом» и «Зал гильдий». Проверяется карточка выбранной точки, после чего выполняется переход и ожидание прибытия.
- Добавлен отдельный этап подтверждения ремонта. В диалоге «Оплатить ремонт из казны?» нажимается именно «Оплатить из казны».
- Если ремонт за счёт гильдии неактивен, выбирается доступный обычный ремонт. Неактивная кнопка и её вложенная подпись больше не считаются разными доступными действиями.
- Если оплата из казны стала неактивной уже в диалоге, бот закрывает это подтверждение через «Отмена» и переходит на обычный ремонт.
- Поддержаны подтверждения обычного и выбранного по предметам ремонта. После оплаты бот ждёт закрытия диалога и фактического результата, повторная оплата в ожидании ответа не отправляется.
- Новый поиск/нападение блокируется на время проверки экипировки, решения об обслуживании, самого обслуживания и возврата из инвентаря. Блокировка повторно проверяется после задержки перед кликом.
- Цикл сохранён: каждые выбранные N побед/поражений → проверка → оценка прочности/сумки → скуп, ремонт или оба действия → возврат в исходную главу и локацию → продолжение боёв. При совместном обслуживании сначала скуп, затем ремонт.
- N задаётся от 1 до 20. Автоматический счётчик сбрасывается после завершённой плановой проверки. Ручная проверка не сбрасывает счётчик.
- Изменение N и повторное нажатие ручной проверки больше не обнуляют уже начатое чтение карточек. Ручное обслуживание не прерывает незавершённую проверку инвентаря.
- Включение обслуживания и условия ремонта/скупа задаются существующими настройками. Порог прочности оценивается при очередной проверке по выбранному N, дополнительное открытие инвентаря после каждого боя не добавлено.

Проверка v1.10.3
Проверен синтаксис изменённых JavaScript-файлов и выполнены шесть узких локальных проверок в tests/maintenance-v1103.test.js: выбранная точка маршрута, неактивная кнопка, подписи подтверждения ремонта, блокировка нового боя, все интервалы 1–20 и условия очереди обслуживания. Эти проверки прошли. Сайт не открывался, игровые/браузерные прогоны и полный набор старых тестов не запускались. Работа этой сборки на живом интерфейсе пока не подтверждена.

Что изменено в 1.10.2
- После завершения проверки экипировки бот явно возвращается на текущую локацию кнопкой «Карта» в основном меню, включая проверку уже открытого инвентаря.
- Открытие путешествий отделено от возврата из инвентаря: обычные локации используют «В путь», гильдейский дом и рынок — местную «Карта». Поддерживаются текст, title и aria-label настоящих кнопок.
- Исправлена блокировка всех действий внутри контейнера has-compact-location-chat. Настоящий чат остаётся исключён из целей клика.
- Клик по NPC не блокируется из-за текста соседнего алхимика и не перенаправляется на плавающую панель бота, если она перекрывает цель.
- Убрано безусловное восстановление стадии по экрану. Выбор главы, выбор локации, нажатие «Перейти», подтверждение продажи и подтверждение ремонта сохраняют свою последовательность.
- Карта определяется по реально показанному экрану. Наличие скрытого DOM-элемента книги и описание «Рыночная площадь» в книге не означают прибытие на рынок.
- После «Перейти» бот ждёт загрузки нужной локации. В ожидании рынка дополнительно требуется появление кнопки нужного NPC. Старое сетевое название локации не завершает переход.
- Исходная локация и глава сохраняются до Камня. Если глава неизвестна, сначала считывается отметка «здесь» на карте. После телепорта исходная глава не перезаписывается.
- Полное название «Сумрачный лес — Опушка» сопоставляется с узлом «Опушка», «Гильдейский дом» — с «Зал гильдий», «Рынок» — с «Рыночная площадь».
- Выбранная локация подтверждается по её карточке у кнопки перехода, а не по любому упоминанию на карте, включая название точки отправления.
- Повторные клики ограничены тремя попытками. Срок ожидания этапа сохраняется при повторах; для перехода учитывается указанное игрой время пути. Если результат не подтверждён, бот останавливается с указанием этапа.
- После продажи подтверждается возврат к скупщику, затем выполняется выход на площадь. После ремонта подтверждается результат, затем выполняется возврат в исходную главу и локацию.
- Ремонт больше не считается выполненным только из-за исчезновения кнопок. Подтверждённая прочность обновляется в сохранённом снимке. Ручной запуск ремонта при отсутствии сработавшего порога проверяет и чинит надетый комплект.
- Подтверждение «Продать всё» ограничено диалогом, открытым действием «Продать хлам». Ремонт всего комплекта не подменяется кнопкой ремонта отдельной вещи.
- Алгоритм чтения слотов, карточек, прочности и счётчик проверок не перерабатывались. Настройки версии 1.10.1 сохраняются.

Проверка v1.10.2
Статический разбор исходного кода и присланных снимков, проверка синтаксиса JavaScript и manifest.json. Сайт не открывался, вход в аккаунт не выполнялся, игровые/браузерные и автоматические тесты не запускались. Работа с живым интерфейсом этой сборки пока не подтверждена. Файлы tests из исходного архива сохранены без запуска и без изменения.

Что исправлено в 1.10.1
- Исправлено зависание полного аудита на открытой карточке: точный крестик inventory-v191__sheet-close нажимается с подтверждением исчезновения карточки и повтором.
- Один визуальный элемент экипировки больше не может быть назначен двум слотам; это устраняет пропуски второго кольца и дубли.
- В полном режиме панель/ремонт используют только подтверждённый audit snapshot, сырые сетевые записи без ассета/прочности больше не возвращаются.
- Рыночная площадь, Скупщик и Кузнец теперь различаются по живому DOM; старое сетевое имя локации не может ложно включить режим «уже на Рынке».
- State-machine обслуживания восстанавливает стадию по реально открытому экрану; исправлены вход к NPC, возврат на площадь, открытие Карты и продолжение маршрута.
- Подтверждение ремонта понимает живую строку «Повреждено надетых предметов: 0».
- Один общий цикл автоматических проверок экипировки: пользователь задаёт 1–20 завершённых боёв; считаются победы и поражения, а журнал/панель показывают текущий прогресс X / N.
- Ручная проверка экипировки не сбрасывает и не изменяет счётчик боёв.
- Добавлен список ожидаемых надетых слотов. Отмеченный слот обязан быть занят; пустой обязательный слот вызывает критическую остановку. Неотмеченный пустой слот считается нормальным.
- Вторая рука считается заполненной отдельным предметом/щитом либо подтверждённым двуручным оружием в основной руке. Добавлена отдельная поддержка слота «Перчатки».
- Полный аудит стал детерминированным: открыть слот → дождаться карточки → прочитать название/ассет/тип/прочность → закрыть точной кнопкой inventory-v191__sheet-close → подтвердить закрытие → перейти к следующему слоту.
- Неуспешно открытая карточка, null-прочность и временный снимок больше не создают дубликат предмета без ассета; слот повторно читается или помечается как пустой/непрочитанный по правилам обязательности.
- Автоскуп нажимает только «Продать хлам», затем подтверждает именно появившийся диалог кнопкой «Продать всё» и ждёт закрытия диалога. Отдельную опасную операцию «Продать весь список» бот не использует.
- Кузнец: бот выбирает вкладку «Ремонт», для ремонта всего комплекта предпочитает доступный «За счёт гильдии», иначе «Починить надетое»; при выборочном ремонте нажимает только кнопки нужных вещей «Починить за …».
- Маршрут использует реальные элементы Рыночной площади: Скупщик/Кузнец через data-world-point, возврат на площадь через market-square-back-v412, Книгу путешествий через market-square-map-button-v412.
- В Книге путешествий глава и локация выбираются из реальных кнопок; локации читаются по data-map-node-id, переход поддерживает «Идти», «В путь», «Перейти» и «Отправиться».
- Настройки маршрута больше не требуют вручную вписывать название главы/локации: используются выпадающие списки с известными и автоматически найденными точками.
- Если персонаж уже на Рынке/Рыночной площади, Камень и дальний маршрут пропускаются; обслуживание начинается сразу с нужного NPC.
- «Глобальный порог» переименован в «Минимальная прочность для ремонта», а условие ремонта формулируется как «Чинить, если хотя бы один предмет достиг минимальной прочности».
- Общий диапазон задержек применяется ко всем реальным кликам; ожидание появления/закрытия окна, загрузки карты и телепорта остаётся отдельной проверкой результата.

Что исправлено в 1.9.6
- Общий диапазон задержки теперь применяется ко всем реальным кликам бота; новый базовый диапазон 100–500 мс, старые стандартные 850–1450 автоматически мигрируют один раз.
- Полная проверка не переходит к следующему слоту, пока карточка текущего предмета реально не закрылась; крестик повторно нажимается, а пустые слоты не считаются снятой экипировкой.
- Сравнение «экипировка была снята» отключено на время намеренной полной проверки и снова включается после формирования нового подтвержденного baseline.
- Гильдейский Камень: «Использовать» повторяется до подтверждения телепорта, окно камня закрывается после перехода, затем открывается маршрут.
- Книга путешествий открывается реальной кнопкой «В путь» на странице локации; при неудачном клике открытие повторяется.
- Если персонаж уже находится на Рынке/Рыночной площади, Камень и переход через карту пропускаются; бот сразу идет к Скупщику/Кузнецу и после обслуживания локально возвращается на площадь.

Что исправлено в 1.9.5
— Полная проверка быстрее проходит надетые слоты: пустой слот считается нормальным результатом, записывается в журнал и сразу пропускается.
— Карточка предмета закрывается не только по тексту «×/Закрыть», но и по реальной кнопке в правом верхнем углу модального окна.
— Пока полная проверка не закончена, раздел «Экипировка» показывает только уже подтверждённые предметы, а не сырые сетевые записи без ассетов.
— Гильдейский Камень возвращения теперь проходит отдельную цепочку: открыть инвентарь → найти сам предмет → открыть карточку → нажать «Использовать» → подтвердить выход из инвентаря/телепорт.
— Маршрут на Рынок теперь подтверждает каждый экран: открыть Карту → дождаться «Книги путешествий» → выбрать главу → подтвердить главу → выбрать локацию → подтвердить карточку локации → нажать «В путь/Перейти» → подтвердить прибытие.
— Возврат после обслуживания использует такой же подтверждаемый маршрут, вместо перехода к следующему шагу сразу после клика.

Что нового в 1.9.0
— Ручные профили настроек: активный профиль выбирается только пользователем; каждый блок может наследовать глобальные параметры или иметь собственные.
— В профиль входят режим боя, ротации и сценарии мобов, побег, boss/elite-правила, проверка экипировки, обслуживание, маршрут и задержки.
— Профили и все настройки можно экспортировать и импортировать одним JSON.
— Новый раздел «Экипировка»: реальный ассет предмета из игры, название, слот/тип, текущая/максимальная прочность, индивидуальная галочка ремонта и абсолютный порог.
— Авторемонт: чинить весь комплект при сломанном предмете; чинить весь комплект при прочности любого предмета ≤ глобального X; либо чинить только отмеченные предметы по их собственным абсолютным порогам.
— Автоскуп начинает продажу только безопасной кнопкой «Продать хлам». В появившемся диалоге подтверждения бот может нажать «Продать всё»; отдельную операцию «Продать весь список» не использует.
— Фильтр автоскупа по сумке: игра определяет занято/максимум, пользователь задаёт абсолютный порог занятых слотов.
— Отдельная галочка «Если иду чиниться — зайти к скупщику». При совместном обслуживании порядок всегда: Скупщик → «Продать хлам» → Кузнец → ремонт.
— Перед походом бот запоминает исходную главу и локацию, после обслуживания возвращается туда через карту и только затем продолжает боевой цикл.
— Опционально используется «Гильдейский Камень возвращения»: в инвентаре бот ищет камень и нажимает «Использовать», если действие доступно; иначе идёт обычным маршрутом.
— Рынок по умолчанию: глава/регион «Южные земли», локация «Рынок». Параметры маршрута можно изменить.
— У Кузнеца бот сначала открывает «Ремонт», предпочитает активный «За счёт гильдии», иначе использует обычный ремонт.
— Если выбранная глава/локация закрыта или недоступна по уровню/прогрессу, автоматизация останавливается, причина записывается в журнал и показывается просьба изменить настройки.
— Игра сама определяет обычного/элитного/босса; отдельно настраиваются «не нападать» на элит/боссов и условия побега при их появлении. Сам тип моба не включает побег без выбранной галочки.
— Новые графические ассеты не добавлялись и не генерировались.

Перенос настроек
— Настройки, противники и сценарии навыков из 1.8.0 переносятся автоматически.
— Схема навыков остаётся revision 6, поэтому настроенные правила не очищаются.
— Автоматические действия после загрузки выключены и запускаются вручную.

Приоритет действий в бою
1. Аварийная остановка безопасности.
2. Побег — если условие сработало, он блокирует все боевые действия до фактического выхода из боя.
3. Помощь / аварийные защитные навыки.
4. Защитные навыки.
5. Ожидающее продолжение цепочки «После навыка».
6. Остальные атакующие навыки по стабильному порядку карточек.
7. Обычная атака.

Цепочки «После навыка»
— Каждое правило теперь получает собственный ожидающий триггер.
— Глобальный lastSkill больше не решает, какому навыку принадлежит условие.
— Если после навыка A должен быть B, но в этот момент срабатывает защита C,
  цепочка не теряется: A → C → B.
— Ожидание B снимается только когда B действительно использован или бой закончился.
— Автоматический клик навыка подтверждается по КД/расходу ресурса, а также по фактическому изменению HP персонажа или цели; проигнорированный игрой клик не двигает цепочку и повторяется.
— Пока B ожидается, навык A не нажимается повторно; если B временно недоступен, выбирается другой допустимый ход.
— Сценарий боя фиксируется на первом реально использованном навыке, поэтому позднее уточнение цели не разрывает цепочку между разными сценариями.
— Ручное использование игрового навыка тоже может запустить настроенную цепочку.

Побег
— Условия «любое / все» сохранены.
— После активации побег становится защёлкнутым состоянием.
— Пока бой не закончился выходом, бот не применяет навыки и не делает обычную атаку.
— Если кнопка побега временно отсутствует или недоступна, бот ждёт её и повторяет попытку на следующих доступных ходах.
— Сам клик по кнопке больше не считается доказательством успешного побега; нужен фактический выход из боя.

Диапазон нападения
— HP задаётся диапазоном «от — до» в процентах.
— Мана / классовый ресурс задаётся отдельным диапазоном «от — до».
— Оба условия включаются независимо и при совместном включении должны выполняться одновременно.
— Диапазон включительный: например HP 55–100% разрешает 55%, 80% и 100%.
— Для ресурса используется реально найденный тип: мана, ярость, энергия, натиск и т.п.
— Если включённый показатель не распознан или устарел, новое нападение не начинается.
— В бою шкала HP закрепляется за одним DOM-источником персонажа; соседняя шкала больше не может внезапно заменить её значением 100%.
— Сетевой HP до явной идентификации своего персонажа принимается только при признаке self/current от самой игры.
— HP-привязка больше не сбрасывается при каждом обновлении страницы.
— Во время ожидания порога одна живая DOM-шкала закрепляется, но скрытая старая шкала больше не удерживает привязку и не мешает перейти на актуальную; резкий большой скачок с нового сетевого пути требует дополнительного подтверждения.

Безопасность
— При сильном признаке сломанной экипировки или прочности 0 бот полностью останавливается.
— Экипировка контролируется не только по открытому инвентарю: бот читает уже полученные игрой сетевые снимки и события, не создавая отдельного сетевого запроса для проверки.
— После каждого завершённого боя перед новым нападением требуется свежая проверка экипировки: сначала используется сетевой снимок, а если его нет — бот открывает штатный раздел «Инвентарь / Экипировка» и считывает слоты.
— Если подтвердить экипировку не удалось, новый бой не начинается.
— В полном сетевом снимке исчезновение ранее занятого слота считается снятием предмета; слоты, пустые на исходном снимке, ошибкой не считаются.
— При подтверждённой смене текущей локации относительно места запуска бот полностью останавливается.
— Текущая локация определяется и по DOM, и по явным current-location полям уже полученных игрой сетевых данных; списки/каталоги локаций игнорируются.
— Смена локации проверяется только по надёжно размеченному названию; отсутствие названия само по себе не считается сменой.
— После аварийной остановки показывается полноэкранное уведомление с причиной.
— В разделе «Безопасность» есть две кнопки предпросмотра полноэкранного уведомления:
  «Проверить · экипировка» и «Проверить · локация». Предпросмотр не останавливает бот.

Цели и ассеты
— Сохраняются исправления ветки 1.7.x: выбранная цель фиксируется до перехода в бой,
  React div/span действия распознаются как «Атаковать», АТК/ATK и служебные строки не считаются именем,
  а найденный реальный портрет сохраняется в карточке противника.

Проверки сборки
— Автоматические регрессионные тесты проверяют порядок навыков, независимые цепочки,
  приоритет защиты, диапазоны HP/ресурса, определение сломанной экипировки и смены локации.
— Все JavaScript-файлы проверяются через node --check.
— manifest.json проверяется парсером JSON, ZIP — через unzip -t.
— Реальные бои на аккаунте не запускаются.




1.8.16:
- В режимах «Отряд» и «Чужой бой» после проверок бот сразу открывает «Бои рядом», даже если счётчик сейчас 0 или ещё не отрисован. Внутри плашки ждёт только действие своего режима.

1.8.14:
- «Бои рядом» теперь открывается только когда живой счётчик на строке стал 1 или больше; «Бои рядом 0» бот не кликает;
- React-строка «Бои рядом N» определяется по объединённому тексту строки, даже если подпись и числовой badge находятся в разных span/div и у элемента нет button/role;
- для открытия «Бои рядом» отправляется полноценная pointer/mouse последовательность в фактический элемент под курсором, поэтому делегированный React-обработчик получает клик;
- сетевой счётчик противников больше не принимает корневой monsters-каталог ответа за live roster только из-за технического префикса battleResponse;
- live roster принимается только из конкретного battle/combat/fight/encounter-поддерева или из явного current/active target, а старое ошибочное scalar-значение больше не «залипает» на весь бой;
- регрессия: 7 элементов каталога + один currentEnemy теперь дают «врагов: 1».

1.8.12:
- режим «Отряд» теперь использует тот же штатный вход через «Бои рядом», что и режим «Чужой бой»: сначала открывает «Бои рядом», затем работает только внутри открытой плашки;
- внутри «Бои рядом» режим «Отряд» нажимает только «В бой отряда», а режим «Чужой бой» — только «Присоединиться»; маршруты больше не смешиваются;
- «В бой отряда» больше не ищется глобально на странице локации, поэтому бот не зависает в ожидании кнопки, которая существует только внутри плашки «Бои рядом»;
- готовность локации для режима «Отряд» теперь также подтверждается наличием «Бои рядом», что предотвращает лишние циклы возврата после проверки инвентаря.


1.8.11:
- исправлено открытие режима «Чужой бой»: строка «Бои рядом N» распознаётся и как React-плашка без обычного button/role, клик по подписи всплывает до штатного обработчика игры;
- открывшееся окно распознаётся по реальным заголовкам «Бой на локации» / «События поблизости», после чего бот нажимает «Присоединиться»;
- режим «Чужой бой» теперь обрабатывает общую награду как «Отряд»: до закрытия результата последовательно нажимает только «Не откажусь», не выбирая «Нужно» и «Отказ»;
- список обитателей локации внутри сетевого ответа больше не считается составом текущего боя;
- сетевой roster привязан к battle/fight/combat id, поэтому новый бой не наследует врагов предыдущего боя даже при быстром переходе;
- при смене battle id локальный сетевой roster и сетевой target сбрасываются до применения нового состава, что убирает ложные 8+ врагов на старте.

1.8.10:
- добавлен третий режим «Чужой бой» между «Соло» и «Отрядом»;
- в режиме «Чужой бой» бот на локации открывает штатную кнопку «Бои рядом», ждёт плашку со списком доступных чужих боёв и автоматически присоединяется к доступному бою;
- «Чужой бой» не использует текущую цель и персональные сценарии монстров, внутри боя всегда применяется общий сценарий навыков;
- режим «Отряд» по-прежнему не проверяет цель и использует общий сценарий, вход выполняется только через «В бой отряда»;
- исправлено зацикливание «Возвращаюсь на локацию»: после автоматической проверки инвентаря бот ждёт фактического ухода с экрана инвентаря и сразу освобождает навигацию;
- возврат из инвентаря запускается без лишней стартовой паузы, а ожидание «В бой отряда»/«Бои рядом» отделено от самого возврата на локацию;
- поиск кнопок «Бои рядом» и присоединения поддерживает обычные кнопки, ссылки и React div/span-контролы;
- сохраняются условия навыков HP ≤ X%, мана/ресурс ≤ X%, противников ≥ N, а также приоритетный побег и проверки экипировки/локации.

1.8.8:
- исправлен живой состав боя: одинаковые монстры больше не склеиваются по monsterId/имени, каждый боевой экземпляр считается отдельно;
- полный enemies/monsters/combatants roster из ответа игры считается авторитетным, поэтому число врагов обновляется и вверх при присоединении, и вниз после смерти;
- добавлена обработка join/spawn-событий, когда сервер присылает только нового врага, а не весь список боя; повтор одного и того же события не увеличивает счётчик дважды;
- текущая цель отделена от списка врагов: случайная перестановка React-карточек больше не меняет цель, переключение допускается только по явному current/active target или после исчезновения старой цели из живого roster;
- сценарий конкретного моба продолжает использовать стабильный ID типа монстра, а не временный ID его экземпляра в текущем бою;
- добавлены два режима боя: «Соло» сохраняет прежний алгоритм, «Отряд» запускает бой только через «В бой отряда» и не использует эту кнопку в соло-режиме;
- в отрядной победе перед закрытием результата бот последовательно нажимает «Не откажусь» у всех доступных предметов, не выбирая «Нужно» и «Отказ»;
- после автоматической проверки экипировки через инвентарь бот сам быстро возвращается на локацию и не начинает новый бой, пока возврат не подтверждён;
- сетевой мост передаёт живой список противников, поэтому присоединившиеся в середине боя враги сразу увеличивают счётчик и участвуют в условиях навыков/побега;
- общий сценарий побега теперь наследуется персональным сценарием моба, если в нём не включён собственный побег, поэтому HP/число врагов/«после навыка» не теряются из-за сценария навыков;
- после срабатывания побега обычные навыки и атака остаются заблокированы, а кнопка выхода нажимается через ускоренный аварийный путь и перепроверяется до фактического окончания боя;
- распознавание «В бой отряда», «Не откажусь» и возврата на «Локацию» поддерживает как обычные button/a, так и React div/span-контролы.

1.8.6:
- побег теперь обрабатывается раньше тестового режима, навыков и обычной атаки; после защёлкивания ни одно другое боевое действие не выполняется до фактического окончания боя;
- подтверждение нажатого навыка дополнено фактическим изменением HP персонажа или цели, поэтому навыки без видимого КД/расхода ресурса не должны бесконечно считаться «не сработавшими»;
- после боя скрытая старая DOM-шкала HP больше не блокирует перепривязку к актуальной шкале, что убирает зависание на регенерации при React-перерисовке;
- явный контейнер equipment внутри ответа inventory теперь считается экипировкой, тогда как обычные предметы сумки по-прежнему игнорируются;
- после каждого боя включается обязательная проверка экипировки перед следующим нападением: при свежем сетевом снимке используется он, иначе открывается штатный интерфейс инвентаря; если состояние не подтверждено, новый бой блокируется;
- добавлена пассивная проверка текущей локации из явных currentLocation/locationName полей сетевых ответов с игнорированием каталогов локаций.


1.8.5:
- исправлен сброс доверенной HP-привязки при каждом запуске страницы; повторная очистка выполняется только при смене ревизии схемы;
- после боя бот удерживает одну и ту же живую DOM-шкалу HP, а большой скачок с нового сетевого player/character-пути требует дополнительного повторного подтверждения;
- автоматический клик навыка больше не считается использованием сам по себе: цепочка «После навыка» продвигается только после фактического КД/недоступности навыка или подтверждённого расхода ресурса;
- если игра проигнорировала клик навыка, правило не расходуется и навык можно повторить вместо зацикливания на неверном состоянии;
- побег проверяется как отдельная приоритетная защитная логика при включённой автоматизации, независимо от переключателя обычного autoFight;
- добавлен пассивный контроль экипировки из сетевых данных, которые игра уже получает сама: поломка/нулевая прочность обнаруживаются даже при закрытом инвентаре;
- полный сетевой снимок экипировки считается авторитетным: исчезновение ранее надетого предмета блокирует действия и после повторного подтверждения останавливает автобот;
- изначально пустые слоты не считаются снятой экипировкой.


1.8.4:
- побег вынесен в отдельный проверяемый policy: HP / число противников / «после навыка» / режим «любое-все» рассчитываются одинаково для UI и цикла боя;
- после срабатывания побег остаётся абсолютным приоритетом даже при временном исчезновении battle-root и ищется также во внешней React action-bar;
- поддержан React div/span-контрол побега, если он визуально и геометрически относится к боевой панели;
- пока побег защёлкнут, навыки и обычная атака не выполняются до фактического выхода из боя;
- при запуске автобота фиксируется снимок занятых слотов экипировки, изначально пустые слоты не считаются ошибкой;
- если ранее занятый слот внезапно опустел или предмет в нём изменился, первая проверка блокирует любые новые действия, повторное подтверждение полностью останавливает автобот;
- сообщения о поломке, прочности 0 и внезапном снятии экипировки также вызывают аварийную остановку;
- проверка безопасности выполняется до регена, награды и выбора следующего противника, поэтому после поражения новый бой не начинается, пока состояние экипировки подозрительно или подтверждённо нарушено.


1.8.3:
- исправлен повторный случай зависания на регенерации после боя, когда карта Grimgar меняет DOM/сетевой путь текущего персонажа;
- во время ожидания порога HP бот может безопасно пере-привязать сетевой источник к новому player/character-пути только после повторного подтверждения, при том же максимальном HP и неубывающем текущем HP;
- вражеские enemy/monster/mob-пути для такой пере-привязки запрещены;
- добавлен резервный поиск компактного значения «текущее / максимум» вне боя, даже если интерфейс игры не использует классы hp/health;
- резервный DOM-поиск принимает только уже известный максимальный HP персонажа и исключает вражеские/служебные блоки.


1.8.2:
- исправлено зависание на регенерации после боя: HP снова читается вне боя после закрепления максимального HP персонажа;
- вне боя DOM-сканер HP не принимает шкалы с другим максимальным HP;
- до первого боя скан HP по общей странице по-прежнему запрещён.

- Обслуживание больше не блокирует уже начатый бой: бой и экран результата завершаются первыми.
- Полная проверка действительно проходит по надетым слотам: открывает каждый предмет, читает ассет/название/слот/прочность и только потом принимает решение о ремонте.
- Предметы с прочностью 0/0 не считаются сломанными и не запускают ремонт.
- Вместимость сумки читается из живого счетчика «Использовано X/Y».
- Текущая локация определяется по live-структуре location-hero + location-inhabitants для корректного возврата после обслуживания.


Дополнительно в 1.9.5:
- неизвестная вместимость сумки больше не превращается в 0/0;
- счётчик «Использовано X/Y» читается из живого интерфейса даже при вложенных span;
- полная проверка ищет и открывает экипированные слоты по подписи и геометрии иконки;
- сеть и DOM объединяются без потери ассета/точной прочности;
- после «Запустить» панель сразу показывает активное состояние и журналирует обязательную полную проверку.


=== Версия 1.10.9 ===
- Стартовое превью можно отключать и снова включать. При повторном включении ролик запускается сразу.
- Если браузер блокирует автозапуск звука, в центре ролика появляется обычная круглая кнопка воспроизведения.
- В момент надписи «ОФИЦЕР» в ролик встроен круглый аватар из предоставленного пользователем изображения.
- Авторемонт больше не ждёт обязательного подтверждения изменения прочности после нажатия оплаты: после доступного подтверждения бот считает ремонт успешным и продолжает маршрут.
- Если ремонт из казны недоступен, сохраняется переход на обычный ремонт.
- В панели добавлен отдельный раздел «Инструкция» с объяснением боя, навыков, цепочек, побега, экипировки, обслуживания, маршрутов и журнала простым языком.


=== Версия 1.10.10 ===
Исправлена полная проверка экипировки: каждый слот перед нажатием заново находится в текущем React-интерфейсе, поэтому перерисовка инвентаря после закрытия карточки больше не оставляет устаревшие ссылки на Перчатки, Поножи и следующие слоты. Также распознаются SVG/canvas-иконки и клик выполняется по центру конкретной ячейки.


=== Версия 1.10.11 ===
- Полная проверка экипировки теперь открывает только слоты с включённой галочкой.
- Выключенные слоты (например, Поножи или Обувь) полностью пропускаются.
- Изменение галочек во время проверки сразу сбрасывает кеш слотов и применяется к следующему шагу.


=== Версия 1.10.12 ===
- Исправлен подсчёт противников для условий побега: join/spawn-ответ больше не может посчитать старого противника повторно.
- Условие «Противников ≥ 3» не срабатывает при двух реальных противниках.


=== Версия 1.10.13 ===
- Исправлен фильтр групповой награды: выбранный в панели вариант теперь является источником истины перед каждым кликом.
- Добавлена жёсткая блокировка неправильных кнопок: при «Отказ» бот не может нажать «Не откажусь» или «Нужно».
- Поиск кнопки ограничен панелью результата боя; для React-интерфейса сохраняется точная точка текста выбранной кнопки.
- При переключении профиля селектор групповой награды синхронизируется с фактической настройкой.


=== Версия 1.10.14 ===
- Маршрут обслуживания адаптирован под новую полноэкранную «Карту мира».
- После открытия карты бот сначала выбирает нужную главу в списке регионов.
- Затем бот нажимает штатную кнопку «Список локаций», выбирает нужную локацию в открывшемся списке и только после этого нажимает «Отправиться».
- Активная глава определяется по новой строке региона is-active; текущая глава также читается из неё для корректного возврата.
- Выбранная локация подтверждается по новой панели live-destination, а переход выполняется точной кнопкой live-travel-button.
- Старый маршрут через прежнюю Книгу путешествий оставлен как совместимый резервный вариант.

=== Версия 1.10.15 ===
- Исправлен выбор локации в новом списке карты: строка локации нажимается нативным .click(), без синтетической React-цепочки pointer/mouse событий.
- Исправление действует и для поездки на Рынок, и для возврата в исходную локацию.
- Открытие списка, выбор главы и кнопка «Отправиться» оставлены без лишних изменений.


Версия 1.10.16
- После нажатия «Отправиться» время поездки снова читается из фактического состояния/таймера перехода игры, а не только из текста кнопки.
- Пока панель перехода показывает оставшееся время, аварийный дедлайн обслуживания продлевается по этому времени + запас 20 секунд.
- Это работает и при поездке на Рынок, и при возврате в исходную локацию; подтверждением завершения остаётся фактическое прибытие.

=== Версия 1.10.19 ===
- Исправлен клик по строке локации в новом списке карты: видимая строка больше не получает лишний scrollIntoView, который мог заставить React заменить кнопку перед нажатием.
- Если прокрутка всё же нужна, кнопка локации повторно находится уже после прокрутки и только затем нажимается.
- Повторная попытка выбора локации использует полный pointer/mouse цикл, если обычный button.click() не был принят интерфейсом.
- Та же логика применяется при переходе на Рынок и при возврате в исходную локацию.

=== Версия 1.10.18 ===
- Исправлен переход после выбора главы: карточка текущей точки «Рыночная площадь / Вы здесь» больше не отправляет маршрут на этап «Перейти», пока у выбранного назначения нет активной live-travel-button.
- В открытом списке бот сначала ищет точное имя строки «Рынок» и нажимает именно её; алиасы оставлены только резервом для старых названий/возврата.
- После клика строки бот ждёт активную кнопку «Отправиться/Перейти» и только тогда запускает переход, поэтому disabled «Вы здесь» не вызывает аварийную остановку.

=== Версия 1.10.17 ===
- Исправлена новая «Карта мира» при лагах React: открытый список локаций определяется уже по самой панели «Локации», даже если строки ещё не успели появиться.
- Бот ждёт именно нужную строку локации в списке и не подменяет её одноимённым маркером карты; выбор применяется и к маршруту на Рынок, и к возврату.
- Критические кнопки маршрута (Карта / В путь, глава, Список локаций, строка локации, Отправиться) заново находятся непосредственно перед кликом после задержки, чтобы не нажимать устаревший React-элемент.
- Таймер перехода больше не принимает плановую длительность маршрута или посторонние счётчики «Осталось» за фактическое состояние поездки; учитываются только признаки реального движения/прибытия.
- В Гильдии наёмников наличие штатной кнопки guild-house-map-v424 считается подтверждением прибытия и сразу используется для открытия карты, без бесконечного повторного определения названия локации.
