143 lines
7.1 KiB
Markdown
143 lines
7.1 KiB
Markdown
# MoonWell Client Sources
|
||
|
||
Исходники клиентских изменений MoonWell для World of Warcraft 3.3.5a (build 12340).
|
||
|
||
Клиент переведён на [WarcraftXL](https://github.com/WarcraftXL/wxl-core) **1.1.220**: `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 в копии `Wow.exe`; исходный
|
||
`Wow_Original.exe` остаётся неизменным и используется как проверенный шаблон.
|
||
|
||
## Структура
|
||
|
||
```text
|
||
modules/ отдельные MoonWell extensions для WarcraftXL 1.1
|
||
vendor/warcraftxl/ закреплённый upstream git submodule
|
||
vendor/modules/ закреплённые модули WarcraftXL
|
||
src/Data/ исходники MPQ-патчей
|
||
tool/ сборщик MPQ
|
||
build-warcraftxl.ps1 сборка Win32 runtime, proxy и extensions
|
||
run.ps1 полная сборка, установка и запуск клиента
|
||
Wow_Original.exe локальный оригинал build 12340 (не хранится в Git)
|
||
```
|
||
|
||
Подключены совместимые с 1.1 extensions: `wxl-db2`, `wxl-modern-adt`, `wxl-modern-m2`,
|
||
`wxl-modern-wmo`, `wxl-grasswind` и `wxl-unit-outline`. BLP-адаптер и MoonWell-изменения
|
||
собираются как отдельные DLL; исходники upstream core не изменяются.
|
||
Для обновления всех зависимостей WarcraftXL:
|
||
|
||
```powershell
|
||
git submodule update --remote vendor/warcraftxl vendor/modules/*
|
||
```
|
||
|
||
После обновления обязательно пересоберите и проверьте вход/создание персонажа: API WarcraftXL
|
||
пока развивается.
|
||
|
||
## Требования
|
||
|
||
- Visual Studio 2022 с C++ toolchain для Win32;
|
||
- CMake 3.20+;
|
||
- Rust/Cargo для существующего MPQ-сборщика;
|
||
- Python 3 и DVC с поддержкой S3 для содержимого внешних графических патчей
|
||
(`py -m pip install -r requirements-dvc.txt`);
|
||
- локальный оригинальный `Wow_Original.exe` с SHA-256
|
||
`AA63A5750D60EF16746C686B3D5E26876D98953EAB08B1C026CD0FAF78E88CB8`.
|
||
|
||
После клонирования инициализируйте submodule:
|
||
|
||
```powershell
|
||
git submodule update --init --recursive
|
||
```
|
||
|
||
## Сборка WarcraftXL
|
||
|
||
Быстрое полное развёртывание клиента одной командой:
|
||
|
||
```powershell
|
||
.\deploy.ps1
|
||
```
|
||
|
||
Скрипт инициализирует зависимости, собирает MPQ-патчи, Win32 runtime, native D3D9 proxy и extensions,
|
||
обновляет `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
|
||
|
||
```
|
||
|
||
Без установки в клиент:
|
||
|
||
```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`, native D3D9 proxy и DLL в `Extensions\`;
|
||
5. при `-PackagePath` кладёт полный runtime-комплект в `dist` для launcher/S3.
|
||
|
||
Резервная 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` внутри клиента.
|
||
|
||
## MPQ-пакеты
|
||
|
||
Распакованные изменяемые слои уже находятся в `src/Data/`; полный набор базовых MPQ для сборки
|
||
WarcraftXL не требуется и в объектное хранилище не загружается.
|
||
|
||
Основные пакеты:
|
||
|
||
- `patch-4` — ресурсы внутриигрового магазина;
|
||
- `patch-ruRU-4` — экран входа и GlueXML;
|
||
- `patch-ruRU-5` — русская локализация и интерфейс;
|
||
- `patch-Z` — Mythic+ ресурсы и клиентские данные.
|
||
|
||
Управляемые репозиторием MPQ и внешние графические патчи перечислены отдельно в
|
||
`patch-layout.json`. Сборка и deploy синхронизируют только `repositoryPatches` и
|
||
не изменяют `graphicsPatches`. При пересечении списков репозиторный патч имеет
|
||
приоритет.
|
||
|
||
Распакованное содержимое больших патчей кастомизации хранится через DVC в
|
||
`assets/graphics/`, а бинарные объекты — в настроенном S3. Инструкции по первичной
|
||
загрузке, изменению и импорту MPQ находятся в
|
||
[`assets/graphics/README.md`](assets/graphics/README.md).
|
||
|
||
## Лицензирование
|
||
|
||
WarcraftXL распространяется по GPL-3.0 и подключён как отдельный неизменённый upstream submodule.
|
||
MoonWell extensions распространяются с доступным соответствующим исходным кодом. Репозиторий не
|
||
должен публиковать Blizzard assets или `Wow.exe`.
|