Гайд по разработке аддонов WoW Forever: пишем аддоны с помощью ИИ
В аддонах Forever используется современный API Mainline, а Warcraft Wiki указывает для беты интерфейс 16001. Сначала задайте ограничения для модели ИИ, иначе она напишет вызовы вроде GetSpellInfo, которого не было в сборке 69913.
Спросите нашего потного ИИ-задрота о разработке аддонов Forever
Interface 16001, секретные значения, изменения C_Spell, системные промпты и другое
Всё, что охватывают наши гайды. Ответы берутся с этой страницы и из остальных гайдов, с реальными значениями на графиках и ссылками на разделы гайдов. Это ИИ, поэтому проверяйте источник, прежде чем цитировать.
Прежде чем языковая модель напишет код для World of Warcraft: Forever, ей нужны ограничения, которые не дадут использовать заученные привычки Classic Era: Forever сочетает исходный сеттинг Азерота с современным интерфейсом Mainline.
- Интерфейс TOC
- 16001
- Запуск
- Nov 4, 2026
- Семейство API
- Mainline 12.1.5
- Проверенная сборка беты
- 1.60.1.69913
Проблема
Попросите модель написать аддон WoW, и она напишет код эпохи Classic. В сборке беты 1.60.1.69913 тестировщики WoW Forever Builds обнаружили отсутствие GetSpellInfo и GetItemInfo, возврат значения Mainline через WOW_PROJECT_ID и возврат здоровья игрока как секретного значения, которое аддоны не могут складывать или сравнивать. Warcraft Forever сообщает, что CombatLogGetCurrentEventInfo недоступен аддонам. Позже вышли новые сборки (1.60.1.70009 от 23 сентября). Сохраненная проверка от 12 октября на 1.60.1.70338 записала ID проекта 18, поэтому проверяйте каждое наблюдение заново и сохраняйте номер его сборки.
Как пользоваться этим гайдом
Задайте модели четкие ограничения до генерации кода. В описании архитектуры клиента показаны отличия Forever от Classic Era и Midnight. В шпаргалке по миграции API приведены сигнатуры C_Spell и C_Item. В списке распространенных ошибок ИИ перечислены типичные промахи моделей. Начните с стартовых файлов, вставьте промпт из библиотеки промптов для аддонов или изучите тестовый аддон Forever Beacon — неподтвержденный пример для справки.
Для конкретной задачи переходите к API интерфейса текущих игровых правил, функциям с несколькими командами, командам сообщений, всплывающим сообщениям или шпаргалке по ID звуков. Каждый пример указывает, что проверено и что еще нужно проверить в игре.
Обновление ID проекта от 13 октября ссылается на сохраненное извлечение клиента 70338 и проверку WFG от 12 октября. Зеркала исходного кода по ссылкам могут показывать более позднюю сборку.
Основные правила
Применяйте все десять правил к каждому черновику, созданному ИИ для WoW Forever. В гайдах Midnight пропущены правила 3, 6, 7 и 8, поскольку они относятся только к бете Forever.
01. Интерфейс: 16001
В аддоне только для Forever укажите ## Interface: 16001 — значение Forever Beta из таблицы TOC в Warcraft Wiki. Для Classic Era используется 11509, для Midnight — 120100. Чтобы выпустить один пакет для нескольких клиентов, используйте строку интерфейсов со значениями через запятую, файл _Camelot.toc (суффикс Forever из вики) или _Mainline.toc, общий для Midnight и Forever. При выходе игры перепроверьте номер.
02. Lua 5,1
В WoW используется модифицированная версия Lua 5,1. Нет goto, //, побитовых операторов и _ENV. Для побитовых операций используется библиотека bit (bit.band, bit.bor, bit.lshift). Вики сообщает, что библиотеки операционной системы и файлового ввода-вывода недоступны; в ее списке функций также нет require, dofile и loadfile. Файл .toc загружает модули.
03. Семейство Mainline, а не Classic
Blizzard сообщила в Discord-сообществе WoW UI, что Forever использует архитектуру интерфейса Mainline, "including the vast majority of APIs available in 12.1.5" (включая подавляющее большинство API, доступных в этой версии), и что ограничения возможностей аддонов из Midnight, включая секретные значения, действуют и в Forever (цитату приводит Wowhead). Тип игры Forever назывался Camelot, но до выхода название должны изменить. На трансляции вопросов и ответов 17 сентября разработчики сказали: "we did opt for the modern API approach." («мы выбрали современный подход к API»). Переносите аддон для Midnight, а не боевой аддон для Classic, который, как вы надеетесь, заработает.
04. Пространства имен C_
В сборке 69913 отсутствовали GetSpellInfo, GetItemInfo, GetSpellBookItemName, GetNumTalentTabs, GetTalentInfo и GetNumSkillLines. C_Spell.GetSpellInfo возвращает одну таблицу, а C_Item.GetItemInfo — тот же список значений, что и старая глобальная функция. Оба вызова возвращают nil, пока запись не закэширована. Проверьте nil, запросите загрузку (C_Spell.RequestLoadSpellData, C_Item.RequestLoadItemDataByID) и дождитесь события результата.
05. Используйте пространство имен для всего
Каждый файл начинайте с local addonName, ns = .... Общее состояние храните в ns. Объявлять глобально следует только SavedVariables, записи для слэш-команд и функции обратного вызова раздела аддонов, указанные в TOC. Фрейм с именем MainFrame станет глобальной переменной; назовите его в честь аддона или передайте nil.
06. События вместо журнала боя
Используйте один фрейм, один скрипт OnEvent и таблицу обработчиков. Если следите только за игроком, используйте RegisterUnitEvent. В Midnight регистрация COMBAT_LOG_EVENT_UNFILTERED выдает ошибку, а по сообщениям Warcraft Forever, на Forever недоступно чтение журнала боя. Во время трансляции Blizzard сообщила, что в Forever есть счетчик урона и Cooldown Manager. Также Blizzard сказала в эфире, что таймер взмахов оружия "perhaps coming soon" («возможно, скоро появится»).
07. Секретные значения нужно отображать, а не вычислять
Тестировщики обнаружили, что UnitHealth игрока возвращает секретное число: type() сообщает, что это число, но сложение с ним не работает. По сообщениям Warcraft Forever, имена юнитов могут быть секретными строками, а UnitCanAttack и UnitExists — секретными логическими значениями. Проверяйте значения с помощью issecretvalue до сравнения, выбора ветки или вывода. Передавайте здоровье напрямую в StatusBar через SetMinMaxValues и SetValue. Заблокированный защищенный вызов может завершиться неудачно без ошибки Lua, а pcall не сбросит возникшую ошибку.
08. Не полагайтесь только на WOW_PROJECT_ID
Сообщалось, что сборка 69913 возвращала 1, значение Mainline. Сохраненная проверка в игре на сборке 70338, напротив, записала 18, а исходный код клиента Blizzard называет эту константу WOW_PROJECT_CAMELOT. Библиотека, которая считает 1 только Midnight, а все остальное Classic, выбирает неверную ветку. Сравнивайте именованные константы, когда они доступны, и добавляйте проверку возможностей. Прежний пример Warcraft Wiki использовал LE_EXPANSION_LEVEL_CURRENT или переменную TOC для типа игры; его условие ID проекта Mainline не соответствует 70338. Ожидайте изменения проверки до запуска.Источник: константы проекта Camelot от Blizzard, сохраненный исходный код сборки 70338 изучен 13 окт. 2026; проверка в игре записана 12 окт..
09. Не полагайтесь на защищенные фрагменты
В сборке 69913 защищенные фрагменты не скомпилировались, потому что в клиенте отсутствовал loadstring_untainted. Не сработали также каст по клику и переключение страниц панели команд, если для них использовались фрагменты. WoW Forever Builds считает, что это, вероятно, ошибка. Не выпускайте рамки лекаря, которым нужны защищенные фрагменты, пока проблема не будет исправлена в новой сборке. Для безопасной обработки кликов используйте собственные кнопки. Не записывайте защищенные атрибуты в рамки юнитов Blizzard.
10. Выводите файлы целиком и соблюдайте порядок загрузки
Всегда выводите целиком .toc и каждый файл .lua. Аддоны для беты находятся в World of Warcraft\_classic_beta_\Interface\AddOns\. SavedVariables загружаются после выполнения ваших файлов и готовы к использованию, когда для аддона срабатывает ADDON_LOADED. В сообщении на форуме от 21 сентября говорилось, что сохраненные данные записались на диск, но пропали при следующем входе. В ответе от 25 сентября сказано, что сборка 70009 снова их загружает.
Быстрый старт
Для простого рабочего аддона WoW Forever нужны два файла. Имя папки должно совпадать с именем TOC-файла. Поместите их в World of Warcraft\_classic_beta_\Interface\AddOns\FirstLight\ и запустите клиент. Имя персонажа проверяется на случай, если оно окажется секретным.
## Interface: 16001
## Title: First Light
## Notes: Smallest correct WoW Forever addon.
## Author: YourName
## Version: 0.1.0
## SavedVariables: FirstLightDB
FirstLight.lualocal addonName, ns = ...
local function SafeName()
local name = UnitName("player")
if type(issecretvalue) == "function" and issecretvalue(name) then
return "adventurer"
end
return name or "adventurer"
end
local frame = CreateFrame("Frame")
function frame:ADDON_LOADED(loaded)
if loaded ~= addonName then return end
FirstLightDB = FirstLightDB or { seen = 0 }
ns.db = FirstLightDB
self:UnregisterEvent("ADDON_LOADED")
end
function frame:PLAYER_LOGIN()
ns.db.seen = ns.db.seen + 1
print("|cffd4a85a[" .. addonName .. "]|r online, " .. SafeName() .. ". Session " .. ns.db.seen .. ".")
end
frame:SetScript("OnEvent", function(self, event, ...)
if self[event] then
self[event](self, ...)
end
end)
frame:RegisterEvent("ADDON_LOADED")
frame:RegisterEvent("PLAYER_LOGIN")Что подтверждено, а что только наблюдали
| Утверждение | Источник и статус |
|---|---|
| В Forever используется современный API аддонов | Подтверждено. Вопросы и ответы разработчиков Blizzard, трансляция 17 сентября, 01:20:52 |
| Встроенный счетчик урона и Cooldown Manager | Подтверждено. Та же трансляция, 01:21:51 |
| Таймер взмахов оружия | На той же трансляции сказали "Perhaps coming soon" («Возможно, скоро появится»). Это не обещание |
| Используется большинство API 12.1.5; действуют ограничения возможностей аддонов и секретные значения из Midnight | Сообщается. Заявление Blizzard в Discord-сообществе WoW UI, цитату приводит Wowhead |
| Интерфейс 16001 | Сообщается. Строка Forever Beta в таблице TOC Warcraft Wiki |
| UnitHealth возвращает секретное число; защищенные фрагменты не компилируются | Сообщается. WoW Forever Builds, сборка 69913. Перепроверьте |
WOW_PROJECT_ID равен 1 | Сообщается. WoW Forever Builds, сборка 69913. Перепроверьте |
WOW_PROJECT_ID имеет значение 18 (WOW_PROJECT_CAMELOT) | Сообщается о наблюдении в клиенте. Сохраненная проверка в игре, сборка 70338, 12 октября |
| SavedVariables записаны, но не загружены | Не подтверждено. Сообщения на форуме за 18–21 сентября; в ответе от 25 сентября сказано, что сборка 70009 исправила проблему |
Доступ к бете открыт с 17 сентября по 21 октября 2026 года. Blizzard назначила выход на 4 ноября 2026 года в 15:00 PST; максимальный уровень — 60. API может измениться в любой сборке до выхода игры. Правила игры, связанные с этим, описаны в гайде по бете и обзоре игровых систем.
Системный промпт для моделей ИИ
Вставьте этот блок в сессию с ИИ до запроса кода аддона. В библиотеке промптов для ИИ есть промпты для задач, переноса аддонов и проверки кода.
You write World of Warcraft: Forever addons. The client is not Classic Era and it is not a private server.
Facts you must obey. The original September 28, 2026 checks used Blizzard's statements, the Warcraft Wiki, and community tests on beta build 1.60.1.69913 (followed by 1.60.1.70009). The project-ID note was refreshed from retained build 1.60.1.70338 client source and the October 12 live probe, inspected October 13. Launch is November 4, 2026. Retest every claim on the build in front of you before you tell the user it is final.
- The Forever beta TOC interface is 16001. A Forever-only addon uses exactly: ## Interface: 16001
- Lua is 5.1. No goto, no //, no bitwise operators, no _ENV. Bitwise work uses the bit library (bit.band, bit.bor, bit.lshift).
- There is no require, dofile, loadfile, io library or os library. Load order is the .toc file. Shared state lives on the addon namespace.
- Blizzard said Forever shares Mainline's UI architecture, including the vast majority of APIs available in 12.1.5, and that Midnight's addon disarmament (including secret values) is active. Forever and modern WoW are two game types in the Mainline family. The Forever type was called Camelot and was expected to be renamed before launch. Do not target Classic Era interface numbers (11500s).
- WOW_PROJECT_ID was 18 (WOW_PROJECT_CAMELOT) in the retained live probe on build 70338. WOW_PROJECT_MAINLINE was 1 and WOW_PROJECT_CLASSIC was 2. The older community report of 1 belongs to build 69913. Never choose a Classic code path from that number alone. Compare named constants when available; probe select(4, GetBuildInfo()) and the presence of the API you need. Do not reuse the older LE_EXPANSION_LEVEL_CURRENT example inside a WOW_PROJECT_MAINLINE branch for 70338.
- These globals were absent on build 69913: GetSpellInfo, GetItemInfo, GetSpellBookItemName, GetNumTalentTabs, GetTalentInfo, GetNumSkillLines. Use C_Spell and C_Item. C_Spell.GetSpellInfo returns a table. C_Item.GetItemInfo returns multiple values, like the old global. Both return nil until the data is cached. Request the load and listen for SPELL_DATA_LOAD_RESULT or ITEM_DATA_LOAD_RESULT.
- On Midnight, registering COMBAT_LOG_EVENT_UNFILTERED throws an error, and testers report CombatLogGetCurrentEventInfo unavailable on Forever. Do not build a damage meter, healing meter, or combat-log boss mod. Blizzard ships a damage meter and a cooldown manager. A swing timer was described as perhaps coming soon, not as a promise.
- Player UnitHealth has been observed as a secret number: type() reports "number", and arithmetic or comparison throws. Unit names can be secret strings. UnitCanAttack and UnitExists can be secret booleans. Before any comparison, branch, or print, guard with issecretvalue when that function exists. Pass health and max health straight into StatusBar:SetMinMaxValues and StatusBar:SetValue.
- pcall does not make a protected call safe. Testers report that the client records "Interface action failed because of an AddOn" without a Lua error, and that the counter clears on a full client restart, not on /reload. Do not call ChatFrame_OpenChat, ChatEdit_ActivateChat, or C_SuperTrack.SetSuperTrackedUserWaypoint. Do not write secure attributes onto Blizzard unit frames. Shift-click links go through HandleModifiedItemClick. Map pins go through C_Map.SetUserWaypoint with a UiMapPoint.
- Secure snippet compilation failed on build 69913, which breaks click-casting and action-bar paging that depend on it. Treat that as a beta defect to retest, not as a design you should depend on. Use your own buttons.
- SavedVariables load after the addon's files run. Read and create them inside ADDON_LOADED for this addon, never at file scope. The beta was reported losing saved data between sessions until build 70009; if persistence fails, tell the user it may be the client.
- Every Lua file starts with: local addonName, ns = ...
- Handle events with one frame and a handler table keyed by event name. Do not grow an if/elseif chain. Do not poll with OnUpdate when an event exists.
- Check InCombatLockdown() before you show, hide, or move a protected frame. Queue the closure and run it on PLAYER_REGEN_ENABLED.
- Skin and inform. Do not automate combat decisions, and do not replace Blizzard unit frames, the damage meter, or the cooldown manager.
- When asked for an addon, emit a complete .toc and every .lua file. No fragments. State the beta install path: World of Warcraft\_classic_beta_\Interface\AddOns\<Name>\ and tell the user to restart the client if a new addon folder does not appear.
- If you are not sure an API exists on Forever, say so and show a capability probe. Do not invent C_ functions.Список проверок
Перед проверкой в игре пройдите по этому списку для каждого файла, созданного моделью ИИ:
0 из 10 отмечено в этом браузере
Остальная часть гайда
На каждой странице рассматривается отдельная задача:
- Страница 2Шаблоны ForeverЧем Forever отличается от Classic Era и Midnight.
- Стр. 3 API-шпаргалка Замены отсутствующих глобалов, асинхронная загрузка, запросы юнитов, учитывающие секреты.
- Страница 4Подводные камниДвенадцать ошибок моделей ИИ и что написать вместо этого.
- Страница 5Шаблоны кодаHello World, SavedVariables, защищенная полоска состояния, очередь действий в бою.
- Страница 6Промпты для ИИСистемный промпт, промпты переноса и проверки, диагностика ошибок.
- Страница 7Forever BeaconПример для изучения: загрузки
.toc,.luaи.zip.
FAQ: вопросы авторов аддонов
Какую версию интерфейса используют аддоны WoW Forever?
Для беты Forever в Warcraft Wiki указано значение 16001. Проверьте его в своем клиенте, введя /dump select(4, GetBuildInfo()) в окне чата.
Может ли ИИ написать аддон для WoW Forever?
Да, если сначала задать модели четкие ограничения. Без них она часто пишет старые глобальные функции, например GetSpellInfo, использует номер интерфейса из Retail, например 110207, и COMBAT_LOG_EVENT_UNFILTERED. Системный промпт и список проверок выше помогают выявить большинство таких ошибок до проверки в игре.
Что такое Camelot в клиенте беты?
Согласно заявлению Blizzard в Discord-сообществе WoW UI, Camelot — внутреннее название типа игры Forever в семействе кода Mainline. Blizzard сообщила, что до выхода игры его переименуют. В Warcraft Wiki уже указан _Camelot.toc как суффикс TOC для Forever, поэтому после выхода игры проверьте его еще раз.
Ключевые факты
- Интерфейс TOC Изменено16001 в строке Forever Beta таблицы TOC на Warcraft Wiki; проверьте командой /dump select(4, GetBuildInfo())Classic: в той же таблице у Classic Era указано 11509.
- API аддонов ИзмененоForever использует современный API аддонов с ограничениями Midnight в боюClassic: в Classic Era сохранен старый API, боевой журнал открыт для аддонов.
- Выход Новое в Forever4 ноября 2026 года в 15:00 PST, максимальный уровень — 60
- Семейство API ИзмененоИспользует архитектуру интерфейса Mainline и "the vast majority of APIs available in 12.1.5" («подавляющее большинство API, доступных в 12.1.5»)
- Проверенная сборка беты Новое в Forever1.60.1.69913; в более поздних сборках (70009, 23 сентября) возможны отличия
- Встроенные инструменты Новое в ForeverВключены счетчик урона и Cooldown Manager; таймер взмахов оружия
"perhaps coming soon"
(«возможно, скоро появится») - Записанный ID проекта Изменен18 (WOW_PROJECT_CAMELOT) в проверке от 12 октября в игре на сборке 70338; прежние сообщения о 69913 указывали 1
Источники
- 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
- Addons in WoW Forever? Blizzard Devs Just Addressed the Big QuestionIcy Veins
- TOC formatWarcraft Wiki
- What the WoW Forever beta breaks for addons: secret health values, dead secure snippets, new APIsWoW Forever Builds
- AddonsWarcraft Forever
- WOWF Beta: Addon SavedVariables appear to write correctly to disk but are not restored at startupWorld of Warcraft Forums (player bug report)
- World of Warcraft: Forever What's Next Panel RecapBlizzard Entertainment
- Secret ValuesWarcraft Wiki
- Patch 12.0.0/API changesWarcraft Wiki
- WOW_PROJECT_IDWarcraft Wiki
- Lua functionsWarcraft Wiki
- Saving variables between game sessionsWarcraft Wiki
- Blizzard client source: ProjectConstants.lua (retained build 70338; mirror may change)Blizzard Entertainment (source mirrored by Gethe)
- Blizzard · Developer Q&A, 01:21:51
