# MoonWell Client Sources Исходники клиентских изменений MoonWell для World of Warcraft 3.3.5a (build 12340). Клиент переведён на [WarcraftXL](https://github.com/WarcraftXL): `Wow.exe` больше не содержит MoonWell-патчей. Неподписанный оригинальный executable загружается как обычно, локальный `d3d9.dll` proxy подхватывает `WarcraftXL.dll`, а модуль MoonWell применяет проверенные изменения только к памяти запущенного процесса. ## Что перенесено из модифицированного Wow.exe - разблокировка пользовательского `GlueXML`; - `CreateCharacter(name, modeId)` и поле режима в `CMSG_CHAR_CREATE`; - одиннадцатое значение `GetCharacterInfo` — `charFlags`, включая флаг предателя `0x40000000`; - загрузка WarcraftXL без import-table patch и без отдельного injector. Large Address Aware намеренно не включён: Windows читает этот PE-флаг до загрузки DLL, поэтому сохранить его и одновременно оставить файл байт-в-байт оригинальным невозможно. Это означает стандартный 2-ГБ лимит адресного пространства для 32-битного клиента. ## Структура ```text modules/moonwell/ MoonWell runtime-модуль WarcraftXL vendor/warcraftxl/ закреплённый upstream git submodule vendor/modules/ закреплённые модули WarcraftXL src/Data/ исходники MPQ-патчей tool/ сборщик MPQ build-warcraftxl.ps1 сборка Win32 runtime/proxy и x64 asset host run.ps1 полная сборка, установка и запуск клиента Wow_Original.exe локальный оригинал build 12340 (не хранится в Git) ``` Подключены модули `wxl-modern-assets`, `wxl-modern-render`, `wxl-unit-outline` и `wxl-modern-adt`. Их точные ревизии вместе с ревизией ядра закреплены git submodule. Для обновления всех зависимостей WarcraftXL: ```powershell git submodule update --remote vendor/warcraftxl vendor/modules/* ``` После обновления обязательно пересоберите и проверьте вход/создание персонажа: API WarcraftXL пока развивается. ## Требования - Visual Studio 2022 с C++ toolchain для Win32 и x64; - CMake 3.20+; - Rust/Cargo для существующего MPQ-сборщика; - локальный оригинальный `Wow_Original.exe` с SHA-256 `AA63A5750D60EF16746C686B3D5E26876D98953EAB08B1C026CD0FAF78E88CB8`. После клонирования инициализируйте submodule: ```powershell git submodule update --init --recursive ``` ## Сборка WarcraftXL Быстрое полное развёртывание клиента одной командой: ```powershell .\deploy.ps1 ``` Скрипт инициализирует зависимости, собирает MPQ-патчи, Win32 runtime, D3D9 proxy и x64 Host, обновляет `dist`, устанавливает комплект в клиент и формирует `manifest.json`. Путь берётся из `WOW_HOME`/`.env`, а при их отсутствии используется `C:\Program Files (x86)\World of Warcraft`. Полезные варианты: ```powershell # Явный путь и запуск клиента после установки .\deploy.ps1 -ClientPath 'D:\Games\World of Warcraft' -StopClient -Launch # Быстро обновить только WarcraftXL без пересборки MPQ .\deploy.ps1 -SkipDataBuild # Аварийный native D3D9 вместо D3D9On12 .\deploy.ps1 -NativeRenderer ``` Без установки в клиент: ```powershell .\build-warcraftxl.ps1 -Configuration Release ``` С установкой: ```powershell .\build-warcraftxl.ps1 -Configuration Release ` -ClientPath 'C:\Program Files (x86)\World of Warcraft' -Deploy ``` При `-Deploy` скрипт: 1. проверяет хеш `Wow_Original.exe`; 2. сохраняет прежний модифицированный клиент как `Wow.moonwell-patched.backup.exe`; 3. восстанавливает оригинальный `Wow.exe`; 4. устанавливает `WarcraftXL.dll`, D3D9On12 proxy и `Utils\WarcraftXLHost.exe`; 5. монтирует шейдеры modern ADT как loose patch `Data\Patch-WXL.MPQ`; 6. при `-PackagePath` кладёт полный runtime-комплект в `dist` для launcher/S3. Основной proxy использует D3D9On12, необходимый `wxl-modern-render`. Эффекты постобработки в самом модуле по умолчанию выключены. Для диагностики или несовместимой видеосистемы можно собрать и установить native-переходник без modern-render: ```powershell .\build-warcraftxl.ps1 -Configuration Release -NativeRenderer ` -ClientPath 'C:\Program Files (x86)\World of Warcraft' -Deploy ``` Резервная DLL всегда также сохраняется как `Utils\d3d9-native.dll`. Полная сборка MPQ, установка WarcraftXL и запуск: ```powershell $env:WOW_HOME = 'C:\Program Files (x86)\World of Warcraft' .\run.ps1 ``` Диагностика запуска находится в `Logs\wxl-core.log`, `Logs\d3d9proxy.log` и `Utils\WarcraftXLHost.log` внутри клиента. ## MPQ-пакеты Распакованные изменяемые слои уже находятся в `src/Data/`; полный набор базовых MPQ для сборки WarcraftXL не требуется и в объектное хранилище не загружается. Основные пакеты: - `patch-4` — ресурсы внутриигрового магазина; - `patch-ruRU-4` — экран входа и GlueXML; - `patch-ruRU-5` — русская локализация и интерфейс; - `patch-Z` — Mythic+ ресурсы и клиентские данные. ## Лицензирование WarcraftXL распространяется по GPL-3.0 и подключён как отдельный upstream submodule. MoonWell-модуль, скомпонованный в `WarcraftXL.dll`, должен распространяться с соблюдением GPL-3.0 и доступным соответствующим исходным кодом. Репозиторий не должен публиковать Blizzard assets или `Wow.exe`.