Skip to content

foblako/RandomizerSpoilerLogChecker

Repository files navigation

Elden Ring Randomizer Spoiler Log Viewer

Утилита для просмотра и фильтрации спойлер-логов Elden Ring Item & Enemy Randomizer. Открывает большой .txt-лог рандомайзера, парсит его по категориям и даёт удобный GUI с пресетами, поиском, копированием в буфер обмена и экспортом.

Возможности

  • Парсинг всех секций реального лога рандомайзера: Великие Руны, Воспоминания, подсказки ключевых предметов / колокольчиков / основных механик / квестовых предметов, размещения боссов / мини-боссов / обычных врагов, размещения жестов и BGM, полный список item-спойлеров с ценами.
  • Подсказки и Великие Руны автоматически обогащаются полной информацией из секции -- Spoilers: лога: видно не только регион, но и где именно лежит предмет, как его получить и что он заменяет.
  • Структурированный вывод в GUI: имя предмета — отдельной строкой, под ним с отступом — Где / Как / Заменяет. Никакой каши из сырых строк лога.
  • 9 готовых пресетов (Великие Руны, Боссы + Мини-боссы, Все Подсказки, Полная Информация, Спидран Пресет и т. д.).
  • Свои пресеты — список конкретных предметов. У каждой строки в результатах есть чекбокс ☐ / ☑. Кликни — добавил/убрал из «сборки». Работаешь как обычно через серию поисков (great runescorpionacademy key), сборка копится между запросами. Когда готово — кнопка «Сохранить как пресет…» под результатами, ввёл имя — пресет появится в выпадающем списке сверху с пометкой . «Применить» показывает только выбранные предметы. Хранится в ~/.er_randomizer.json.
  • Поиск по результатам (по подстроке, регистронезависимо), с дебаунсом и «soft cap» в 2000 строк, чтобы поиск оставался отзывчивым даже на полном пресете (~26 000 записей).
  • Копирование результата в буфер обмена и сохранение в .txt.
  • Светлая и тёмная тема, переключение из тулбара (☀/🌙). Выбор сохраняется в ~/.er_randomizer.json между запусками.
  • Парсер можно использовать без GUI как библиотеку (er_randomizer.SpoilerParser).

Готовые сборки (без Python)

На странице Releases лежат self-contained бинари для Windows / macOS / Linux. Качаете нужный файл, запускаете — никакого pip install, Python и python3-tk ставить не нужно.

OS Файл
Windows er-randomizer-spoiler-viewer-windows.exe
macOS er-randomizer-spoiler-viewer-macos
Linux er-randomizer-spoiler-viewer-linux

Сборки публикуются автоматически из GitHub Actions на любой v* тег (см. .github/workflows/release.yml). Чтобы выпустить новую версию:

git tag v0.3.0
git push origin v0.3.0

— workflow прогонит PyInstaller на трёх ОС-раннерах, прикрепит бинари к GitHub Release и сгенерирует release notes.

Запуск из исходников

Требования: Python 3.10+, tkinter (на Linux: sudo apt install python3-tk).

git clone https://github.com/foblako/RandomizerSpoilerLogChecker.git
cd RandomizerSpoilerLogChecker

Дополнительные зависимости нужны только для тестов и линтера:

pip install -e ".[dev]"

Запуск

python -m er_randomizer
# или, для обратной совместимости:
python er_randomizer_viewer.py

Дальше: Открыть файл… → выбираете лог рандомайзера, отмечаете категории (или применяете пресет), при необходимости вводите запрос в поле поиска, копируете или сохраняете результат.

Пример вывода для пресета Великие Руны (фрагмент):

 Великие Руны (7)
•  Godrick's Great Rune
      Где: Limgrave - Groveside Cave
      Как: Dropped by Beastman of Farum Azula
      Заменяет: Flamedrake Talisman
•  Rykard's Great Rune
      Где: Volcano Manor
      Как: Given by Tanith upon joining Volcano Manor, or in her chair after defeating Rykard
      Заменяет: Drawing-Room Key

Пример размещений боссов — формулировка явная, без двусмысленности «кто кого»: имя в bullet — кого вы реально встретите в этой точке.

 Размещения боссов (218)
•  Misbegotten Crusader
      Где найти: Limgrave - Groveside Cave
      Кого заменяет: Beastman of Farum Azula
      Откуда взят: Castle Sol

Использование как библиотеки

from er_randomizer import SpoilerParser, PRESETS

log = SpoilerParser().parse_file("samples/2026-04-28_18.15.20_log_92835768_84233.txt")

print(log.counts())
# {'great_runes': 7, 'remembrances': 25, 'boss_placements': 218, ...}

for entry in log.great_runes:
    # все hint-категории (great_runes, key_item_hints, bell_bearing_hints и т.д.)
    # возвращают SpoilerEntry с полями item / location / description / replaces.
    print(f"{entry.item}{entry.location}")
    if entry.description:
        print("  Как:", entry.description)
    if entry.replaces:
        print("  Заменяет:", entry.replaces)

# Для вывода в том же формате, что в GUI:
from er_randomizer.formatting import entry_to_text
for entry in log.great_runes:
    print(entry_to_text(entry))

for key in PRESETS["Боссы + Мини-боссы"]:
    for entry in log.get(key):
        print(entry_to_text(entry))

Доступные категории (SpoilerLog.CATEGORY_KEYS):

Ключ Описание
great_runes Великие Руны
remembrances Воспоминания
key_item_hints Подсказки ключевых предметов
bell_bearing_hints Подсказки колокольчиков
core_mechanics_hints Подсказки основных механик
quest_item_hints Подсказки квестовых предметов
boss_placements Размещения боссов
miniboss_placements Размещения мини-боссов
basic_placements Размещения обычных врагов
gesture_placements Размещения жестов
level_bgm_placements Размещения BGM
spoilers Полный список item-спойлеров (с ценами)

Свои пресеты

Пресеты живут в er_randomizer/presets.py — это обычный словарь PRESETS: dict[str, list[str]]. Чтобы добавить свой:

PRESETS["Только лут торговцев"] = ["spoilers"]

Структура проекта

RandomizerSpoilerLogChecker/
├── er_randomizer/             # библиотека
│   ├── __init__.py
│   ├── parser.py              # SpoilerParser + dataclass-модели
│   ├── formatting.py          # красивый вывод записей (Где / Как / Заменяет)
│   ├── presets.py             # PRESETS, CATEGORY_LABELS
│   ├── gui.py                 # Tkinter-интерфейс
│   └── __main__.py            # `python -m er_randomizer`
├── er_randomizer_viewer.py    # обратно-совместимая точка входа
├── samples/                   # реальные спойлер-логи (тест-фикстуры)
├── tests/
│   └── test_parser.py
├── pyproject.toml
└── README.md

Тесты

pip install -e ".[dev]"
pytest
ruff check .

Тесты прогоняют парсер на всех samples/*.txt и проверяют, что в каждом из реальных логов нашлись Великие Руны, Воспоминания, размещения боссов, жесты, BGM и item-спойлеры в осмысленных количествах.

Лицензия

Свободное использование (Unlicense).

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages