Панель на Tkinter запускает инструменты репозитория через формы с параметрами и показывает их вывод в общем журнале. Открытие окна не запускает утилиты. Английский язык используется по умолчанию. Для русского языка доступны переключатель RU / EN и параметр --language ru. Переключение сохраняет значения полей, выбранный инструмент и журнал. Переведены тексты панели, проверки ввода, сообщения состояния, заголовки и фильтры диалогов, справка командной строки. Исходный stdout/stderr утилит сохраняется без перевода. Язык стандартных кнопок системных диалогов определяется операционной системой.
Требуется Python 3.12 или новее с Tkinter. Из корня репозитория выполните одну команду: скрипт запуска для Windows, скрипт для POSIX-систем или команду Python.
tools\dev_tools.cmd
sh tools/dev_tools.sh
python tools/dev_tools/dev_tools.py
Оба скрипта запуска находятся непосредственно в tools/ и работают из любого текущего каталога. Если NEXTCLIENT_PYTHON содержит путь к исполняемому файлу Python, используется этот интерпретатор. Иначе скрипты проверяют наличие встроенного Python Codex, затем системного Python: py -3 или python в Windows, python3 или python в POSIX-скрипте. Аргументы и код завершения сохраняются. Скрипты не меняют системные настройки. Все Python-утилиты используют тот же интерпретатор, что и панель.
Конфигурацию сервера можно выбрать при запуске:
python tools/dev_tools/dev_tools.py --config build/test-server/config.local.json
Относительные пути в полях разрешаются от корня репозитория. Значения сохраняются на время работы окна. Длинные формы доступны через вертикальную полосу прокрутки. Во время выполнения операции переключение языка и элементы управления операциями заблокированы.
Кнопки в шапке открывают всю документацию, указатель проверок и это руководство панели. В каждой форме есть кнопка Руководство инструмента. На серверной вкладке также доступны руководство сервера и плагин проверки материалов.
Кнопки открывают локальные файлы Markdown в приложении, назначенном операционной системой. Документы открываются на текущем языке панели: английском или русском. Документация доступна во время выполнения утилиты. Если файл отсутствует или операционная система не может открыть его назначенным приложением, панель показывает диалог ошибки. Для открытия требуется назначенное приложение Markdown или системная утилита платформы.
На каждой вкладке, кроме сервера, есть выбор инструмента и форма с его параметрами. Кнопка Выполнить запускает выбранный инструмент с указанными в форме параметрами. Утилиты могут перезаписывать файлы результата с совпадающими именами.
| Вкладка | Подключенные инструменты | Параметры и результат |
|---|---|---|
| Изображения | flags/convert_flags.py, flags/make_country_column_icon.py |
Каталог исходных PNG, каталог для созданных файлов или выходной файл. Создаются флаги TGA 16×16 или значок столбца страны. |
| Изображения | material_masks/make_masks.py |
Каталог для созданных файлов, по умолчанию assets/cstrike/materials. Создается полная коллекция изображений 512×512. |
| Материалы matgen | matgen uv, matgen check, matgen bake edges |
Готовый исполняемый файл, модель или материал. Команды принимают каталог для созданных файлов, размер, семейство скинов либо каталог игры. |
| Studio | mdl_flags.py |
Исходный MDL, каталог для созданных файлов, необязательное изменение только первой текстуры. |
| Studio | make_labels.py |
Выходной WAD и ASCII-метки через пробел. Родительский каталог выходного файла должен существовать. |
| Studio | make_finish_sample.py |
MDL, имя текстуры модели, необязательный путь PNG узора. Создаются пять изображений и соседний MAT. |
| Studio | make_maps.py |
Каталог для созданных файлов, варианты MDL, каталог и имена моделей для нагрузочной проверки, их количество, модель с перекраской и ее файл, основной WAD и WAD подписей. |
| Studio | make_studio_tests_preset.py |
Файл MAT для образца пресета материалов. |
| Studio | build_maps.ps1 |
Каталог игры cstrike и одно имя карты за запуск. Компилирует и устанавливает BSP внешними компиляторами игры. |
| Сравнение изображений | imgdiff.py |
Эталонное и проверяемое изображения, необязательная область и тепловая карта, допуск RGB, допустимая доля различий и все пороги скоплений. |
Поле каталога игры на вкладке Studio и кнопка Заполнить пути из каталога игры задают связанные пути моделей, WAD, исходника карты и пресета. Выберите локальную установку перед заполнением путей или укажите каждый путь вручную. Поля, зависящие от установки, изначально пусты. Для компиляции карт нужно явно указать каталог игры. Требования к данным описаны в документации Studio, изображений материалов и сравнения изображений.
Выберите собранный исполняемый файл matgen явно или используйте поиск панели в результатах CMake этого рабочего дерева. Явный путь имеет приоритет. Предварительно соберите нужную конфигурацию: панель не собирает matgen. Выбранный файл определяет версию инструмента, которая обработает данные.
Если каталог для созданных файлов matgen не указан, файлы сохраняются рядом с моделью. Если размер не указан, используются размеры текстур модели. Семейство скинов по умолчанию: 0. Для check пустой каталог игры означает корень репозитория, который используется как рабочий каталог утилит. Правила размеров, проверок и результатов приведены в документации matgen.
Компиляция карт в Windows вызывает powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -File ... со списком аргументов. Политика выполнения применяется только к этому вспомогательному процессу. Четыре компилятора карт должны уже находиться в папке tools/ корня игры. Панель не загружает и не собирает их.
Доступны все публичные команды сервера:
| Команды | Используемые поля |
|---|---|
prepare |
Конфигурация, необязательные репозиторий и модуль API, необязательная переустановка базы Valve. Устанавливает все поддерживаемые плагины. |
init |
Конфигурация и необязательная переустановка базы Valve. Устанавливает базу и TestLab. |
doctor, build, compile-only, results, status, stop |
Конфигурация. compile-only компилирует TestLab без установки сервера. |
start |
Конфигурация и необязательные карта, IPv4-адрес и порт. |
smoke |
Конфигурация, набор проверок, необязательные карта, порт и вариант, от 1 до 5 повторений. Запускает и останавливает сервер. |
calibrate |
Конфигурация и необязательная карта cs_office или de_dust2. Запускает и останавливает сервер. |
report |
Конфигурация и обязательный идентификатор запуска. |
Глобальный параметр --config передается перед каждой подкомандой. prepare и init создают отсутствующую конфигурацию. compile-only также может работать со значениями по умолчанию без сохраненного файла. Остальные серверные операции панели требуют существующую конфигурацию. Пустые поля API используют сохраненные значения или автоматический поиск. Значение auto явно запрашивает поиск. Поля API применяются при подготовке. Карта, порт и параметры smoke передаются только тем командам, которые поддерживают их в CLI.
Подготовка загружает необходимые файлы Steam и зависимости, но сервер запускается только после нажатия соответствующей кнопки. Перед остановкой утилита проверяет, что процесс относится к выбранному серверу. Пока выполняется операция, окно нельзя закрыть. Если сервер работает или результат запуска либо остановки еще не подтвержден, при закрытии нужно явно согласиться оставить его работать. Чтобы остановить сервер, отмените закрытие, выберите конфигурацию и нажмите Остановить. Кнопка Статус запрашивает текущее состояние; сама панель не опрашивает сервер автоматически.
Панель использует Tkinter и стандартную библиотеку Python. Для флагов, подписей и образца покрытия требуется Pillow. Для коллекции материалов и сравнения изображений требуются Pillow и NumPy. Если пакет отсутствует, панель показывает команду установки для используемого интерпретатора Python. Установка выполняется отдельно, например:
python -m pip install Pillow numpy
Одна операция выполняется за раз в фоновом потоке. Журнал показывает список аргументов, общий stdout/stderr и результат завершения. Вспомогательные консольные окна Windows скрыты. Перед закрытием дождитесь завершения операции. Принудительная отмена процесса не предусмотрена. Серверные ограничения времени задаются в конфигурации сервера. Журнал хранит последние 200 000 символов. Кнопка Сохранить журнал... экспортирует отображаемую часть в UTF-8. Если утилита сравнения возвращает код 1, панель сообщает, что изображения не прошли проверку, и сохраняет показатели в журнале.
python -X utf8 -m unittest discover -s tools/dev_tools/tests -v
python -X utf8 tools/dev_tools/dev_tools.py --language en --self-check
python -X utf8 tools/dev_tools/dev_tools.py --language ru --self-check
Тесты проверяют команды, процессы, работу окна, параметры утилит, полноту перевода, переключение языка, коды завершения скриптов запуска и файлы, создаваемые генераторами в тестовых сценариях во временных каталогах. Для оконных тестов требуются рабочий стол и доступ Tcl/Tk к своим файлам. Самопроверка создает и закрывает скрытое окно без запуска утилит. Тесты не запускают игру или реальный сервер, не обращаются к Steam, не устанавливают зависимости, не компилируют карты, не запускают генерацию matgen и не пересоздают полную коллекцию изображений.