Шаблоны аддонов WoW Forever: Forever — третий клиент
Forever использует интерфейс Mainline. В сборке 70338 ее ID проекта — 18 (WOW_PROJECT_CAMELOT); сравните эту константу, проверьте API нужной функции и повторите проверку на своем текущем клиенте.
Спросите нашего потного ИИ-задрота о шаблонах аддонов Forever
Секретные значения, определение Camelot, контейнеры аур, панели настроек и другое
Всё, что охватывают наши гайды. Ответы берутся с этой страницы и из остальных гайдов, с реальными значениями на графиках и ссылками на разделы гайдов. Это ИИ, поэтому проверяйте источник, прежде чем цитировать.
Classic Era — старый клиент с мягкими ограничениями. Midnight — современный клиент со строгими ограничениями. В Forever исходный мир работает на семействе интерфейсов Midnight. Пишите код с учетом этого сочетания, иначе аддон не загрузится или загрузится и сообщит неверные данные.
- API аддонов
- Современный API
- Семейство API
- Mainline 12.1.5
- WOW_PROJECT_ID
- 18 (Camelot)
- Здоровье игрока
- Секретное число
Этот принцип — часть гайда разработчика аддонов WoW Forever, наряду с шпаргалкой по API Forever, частыми ошибками при создании аддонов с ИИ и эталонным аддоном Forever Beacon.
Три клиента, одна ошибка
Чаще всего модели и разработчики ошибочно считают Forever либо Classic Era с новыми зонами, либо Midnight со старым миром. Это не так.
| Составляющая | Classic Era | Midnight | Forever |
|---|---|---|---|
| Мир | Исходный мир | Текущее дополнение | Исходный мир, новые зоны, максимальный уровень 60 |
| Код интерфейса | API Classic | Mainline, версия 12.x | Семейство Mainline, тип игры Camelot |
| Интерфейс | 11509 | 120100 | 16001 в бете |
| Боевой журнал | Открыто для аддонов | Регистрация CLEU вызывает ошибки | Сообщается, что недоступно |
| Расчет здоровья | Обычные числа | Секретное значение с ограничениями | Секретное число в сборке 69913 |
WOW_PROJECT_ID | 2 | 1 | 18 (WOW_PROJECT_CAMELOT) в сборке 70338; сообщалось о 1 в сборке 69913 |
Номера интерфейса взяты из таблицы TOC Warcraft Wiki, а изменение журнала боя в Midnight — из заметок к API патча 12.0.0 в вики. Строки беты в колонке Forever основаны на тестах сообщества.
Определяйте Forever, не полагаясь только на Project ID
Прежнее сообщение о сборке 69913 указывало возврат WOW_PROJECT_ID = 1, значения Mainline. Сохраненная проверка от 12 октября на сборке 70338, напротив, записала 18, а константы клиента Blizzard называют его WOW_PROJECT_CAMELOT. Сравните эту именованную константу, если она существует, затем проверьте API нужной функции. Blizzard сообщила, что переименует внутреннее название Camelot до запуска, поэтому повторите проверку на своей сборке.Источник: константы проекта Camelot от Blizzard, сохраненное извлечение 70338 изучено 13 окт. 2026; проверка WFG записана 12 окт.. Зеркало может показывать более позднюю сборку.
local function IsForever()
return WOW_PROJECT_CAMELOT ~= nil
and WOW_PROJECT_ID == WOW_PROJECT_CAMELOT
end
-- Example capability: check the API your feature actually uses.
local canReadPreset = C_GameRules
and type(C_GameRules.GetForeverExperiencePreset) == "function"
local function HasSecrets()
return type(issecretvalue) == "function"
end
-- For logs only: 16001 on the beta. Do not hardcode it as the test.
local iface = select(4, GetBuildInfo())Сверьте этот тест с таблицами API и ловушками из двенадцати ошибок, которых следует избегать, а затем запустите его в своей сборке, прежде чем полагаться на результат.
Сохраненный пример Warcraft Wiki сочетает WOW_PROJECT_MAINLINE с LE_EXPANSION_LEVEL_CURRENT == LE_EXPANSION_CLASSIC или читает переменную типа игры из TOC. Его условие ID проекта Mainline ложно в записанном клиенте 70338. Архитектура интерфейса Mainline не подразумевает ID проекта Mainline. Переработанный пример сверен с источниками, но не проверен в игре.
Обработка секретных значений
В Midnight появились секретные значения, ограничивающие боевую автоматизацию, и Blizzard сказала, что они есть и в Forever.
- Вызовите API.
type()все еще сообщает тип: number, string или boolean. - Ask
issecretvalueпрежде чем сравнивать, проверять или выводить его. - Если значение секретное, используйте виджет.В противном случае показывайте фиксированную метку.
- Не полагайтесь на
pcallпри выполнении защищенных действий.
Вызов по-прежнему возвращает значение настоящего типа. StatusBar:SetValue — пример виджета из вики, который принимает секретные значения. Не оборачивайте защищенное действие в pcall, считая проблему решенной: тестировщики сообщают, что сбой может быть незаметным и сохраняться.
Under the Warcraft Wiki's Midnight rules, addon code can store secrets, pass them to functions, and concatenate or string.format them. It cannot do math on them, compare them, test them as booleans, index them or use them as table keys. The rules block those operations; an attempt throws a Lua error right away. Warcraft Forever reports that printing a secret throws on Forever, so guard before you print.

Тест, который можно вставить в игру
/run local h = UnitHealth("player"); print(type(h), pcall(function() return h + 1 end))В сборке 69913 эта команда вывела number false. false от pcall означает, что движок отклонил сложение. Примеры полосы состояния смотрите в шаблонах кода и скачиваемом образце Beacon, а затем проверьте их в своей сборке.
Ауры — это контейнеры, а не таблицы, принадлежащие вам
Blizzard сообщила, что изменения AuraContainer и AuraButton из версии 12.1.0 доступны в Forever, а последующие изменения интерфейса должны появляться и в Standard, и в Forever. В заметках вики о Midnight сказано, что данные аур становятся секретными при действующих боевых ограничениях. Надежнее позволить рамкам аур Blizzard решать, что показывать, оформлять созданные ими элементы и никогда не читать содержимое ауры, чтобы принимать игровые решения.
Что стоит создавать сейчас
Прежде чем просить модель написать код или переносить старый код, выясните, что разрешает клиент:
| Составляющая | Рекомендация | Почему |
|---|---|---|
| Сумки, банк, торговец, подсказки | Создавать | Показывает данные, которые уже отображает интерфейс |
| Журнал заданий, метки на карте, заметки о маршруте | Создавать | C_Map.SetUserWaypoint Безопасно ставит метку, но не вызывает суперотслеживание |
| Индикаторы и изображения юнитов | Создавать осторожно | В Warcraft Forever: NAME_PLATE_UNIT_ADDED может сработать до того, как данные юнита заполнены. Проверьте еще раз чуть позже |
| Личная панель, безопасная для секретных значений | Создавать | Эталон — образец Forever Beacon |
| Измеритель урона или исцеления | Не создавать | Built-in meter; do not assume addon access to its restricted data |
| Наборы WeakAuras для Classic | Не переносить | Wowhead: WeakAuras прекратила разработку до Midnight |
| Рамки лекаря с кастом по клику | Подождать | Сборка 69913: ошибка компиляции защищенных фрагментов, возможно, это ошибка |
| Переключение страниц панели действий через фрагменты | Подождать | Та же ошибка компиляции |
Порядок переноса
С Midnight
Добавьте 16001 в строку интерфейса или поставляйте _Camelot.toc. Удалите все ветки, которые считают, что ID проекта 1 означает «это Midnight», и включают функции только для Midnight. Перед выпуском повторно проверьте все пути работы с секретными значениями в клиенте Forever.
С Classic Era
Treat it as a new addon that may keep your SavedVariables schema. Replace global item and spell calls with C_Item and C_Spell and their load events. The retained community notes report combat-log access unavailable. Test listener registration and reader results on your target build before you rely on the feature or delete it. Replace PlaySoundFile on interface .ogg paths with PlaySound and a SOUNDKIT ID. Replace faction checks that use UnitIsEnemy. Then read the file again for any math on health. For starter code, see the copy-paste code templates.
Ошибки беты и особенности дизайна
Отметьте это в заметках к патчу, чтобы игроки не винили ваш аддон:
- Ошибка компиляции защищенных фрагментов: WoW Forever Builds подозревает ошибку.
- SavedVariables не загружаются: сообщалось после перезапуска в середине сентября
WOW_PROJECT_IDсо значением 1: прежнее сообщение о сборке 69913.
Повторно проверьте фрагменты кода, прежде чем навсегда заменить работающий каст по клику менее функциональным. Игроки сообщали об исчезновении сохраненных данных, а ответ на форуме от 25 сентября говорит, что сборка 70009 снова их загружает; проверьте это перед добавлением обходных решений. WoW Forever Builds оставил ID проекта неясным на сборке 69913. Сохраненная проверка 70338 записала 18, именуемое WOW_PROJECT_CAMELOT, хотя Forever остается в семействе Mainline. Проверяйте каждую сборку заново; сравнивайте именованную константу и проверяйте API нужных функций.
Меню аддонов заменяет кнопку у мини-карты
Попросите модель добавить кнопку переключения, и она возьмет библиотеку значков мини-карты из руководства по Classic Era. В Mainline есть более простой вариант: меню аддонов — раскрывающийся список у мини-карты с одной записью для каждого зарегистрированного аддона.Источник: Addon compartment, проверено 28 сент. 2026.
В бета-клиенте это есть. В сборке 1.60.1.70009 TOC файла Blizzard_Minimap загружает AddonCompartment.lua для типа игры mainline, а соседняя строка, исключающая camelot, показывает, что camelot считается mainline.Сообщается, чтение файла клиента Запись в меню на действующем экране Forever пока не подтверждена, как отмечают заметки Beacon о меню аддонов.
Регистрация через TOC или Lua
Три поля TOC регистрируют запись без вызова Lua: AddonCompartmentFunc для щелчка и необязательные AddonCompartmentFuncOnEnter и AddonCompartmentFuncOnLeave для подсказки. Клиент вызывает указанные вами глобальные функции и сначала загружает аддон с загрузкой по требованию, если это необходимо.
Аддон, который меняет метку или значок во время работы, использует вместо этого AddonCompartmentFrame:RegisterAddon, передавая таблицу с text, icon и func. Вики говорит, что эта таблица похожа на старую настройку кнопки UIDropDownMenu, поэтому примеры для Retail подойдут.
Когда кнопка у мини-карты все же нужна
Для собственной кнопки у мини-карты нужны сохранение позиции и код перетаскивания, обычно через библиотеку. Запись в меню этого не требует, потому что меню контролирует клиент. Начните с меню аддонов. Тот же TOC загружает MinimapButtonTemplate для camelot, поэтому настоящая кнопка со значком на мини-карте все еще возможна, если игроки попросят.
Панели настроек меняются по тому же принципу
Для настроек действует то же правило: пишите код Mainline, а не шаблон Classic. Вики сообщает, что Settings API был переработан в патче 10.0.0, а дополнительные изменения, нарушающие совместимость, появились в 11.0.2.Источник: Settings API, проверено 28 сент. 2026. В бете в Blizzard_Settings.lua определены Settings.RegisterAddOnCategory, Settings.RegisterAddOnSetting и Settings.OpenToCategory.Сообщается, чтение файла клиента
RegisterAddOnCategory добавляет вашу категорию в окно настроек игры. RegisterAddOnSetting привязывает флажок или ползунок к ключу в таблице сохраненных переменных, поэтому при нажатии значение записывается без отдельного обработчика для синхронизации. В шаблоне панели настроек есть рабочий флажок с функцией обратного вызова.

Открытие настроек из меню аддонов
При щелчке по записи в меню можно вызвать Settings.OpenToCategory, а не показывать созданное вами окно. В файле беты это передает управление клиентской функции C_SettingsUtil.OpenSettingsPanel. Ни вики, ни файл не уточняют, работает ли вызов в бою: проверьте это или поставьте вызов в очередь до PLAYER_REGEN_ENABLED, как делает Beacon.
Аддоны маршрутов работают в том же клиенте
Аддоны заданий и маршрутов — самая крупная категория с рекомендацией «Создавать» в таблице выше, и два создателя гайдов уже продают их для Forever. RestedXP открыла прием заказов для Forever 14 сентября 2026. Zygor Guides сообщает, что подписчики Elite получат гайды для Forever на старте. Оба аддона работают в этом клиенте, поэтому к ним применимы те же правила меню аддонов и настроек.
Шаблоны промптов для аддонов Forever включают оба этих шаблона в системный промпт, поэтому модель сначала обращается к меню аддонов и Settings API, а не к библиотеке.
Ключевые факты
- API аддонов ИзмененоForever использует современный API аддонов с ограничениями Midnight в боюClassic: в Classic Era сохранен старый API, боевой журнал открыт для аддонов.
- Семейство API ИзмененоИспользует архитектуру интерфейса Mainline и "the vast majority of APIs available in 12.1.5" («подавляющее большинство API, доступных в 12.1.5»)
- WOW_PROJECT_ID Изменен18 (WOW_PROJECT_CAMELOT) в проверке WFG от 12 октября на сборке 70338; прежняя сборка 69913, по сообщениям, возвращала 1Classic: Classic Era возвращает 2 (WOW_PROJECT_CLASSIC).
- Журнал боя УдаленСообщается, что в бете CombatLogGetCurrentEventInfo недоступен для аддоновClassic: аддоны Classic Era считывают каждое событие через COMBAT_LOG_EVENT_UNFILTERED.
- Здоровье игрока ИзменилосьUnitHealth вернуло секретное число: type() сообщает number, сложение с 1 не срабатываетClassic: Classic Era возвращает обычное число, с которым аддоны могут выполнять арифметические действия.
Источники
- World of Warcraft Developer Q&A (September 17 stream), add-on answer at 01:20:52Blizzard Entertainment (YouTube)
- WoW: Forever Will Have Addon Changes from MidnightWowhead
- What the WoW Forever beta breaks for addons: secret health values, dead secure snippets, new APIsWoW Forever Builds
- AddonsWarcraft Forever
- TOC formatWarcraft Wiki
- WOW_PROJECT_IDWarcraft Wiki
- Secret ValuesWarcraft Wiki
- Patch 12.0.0/API changesWarcraft Wiki
- WOWF Beta: Addon SavedVariables appear to write correctly to disk but are not restored at startupWorld of Warcraft Forums (player bug report)
- Addon compartmentWarcraft Wiki
- Settings APIWarcraft Wiki
- World of Warcraft Forever guides are up for order nowRestedXP
- Zygor's World of Warcraft: Forever guides launching this NovemberZygor Guides
- Blizzard client source: ProjectConstants.lua (retained build 70338; mirror may change)Blizzard Entertainment (source mirrored by Gethe)