Промпты для ИИ по аддонам WoW Forever с учетом клиента
Указывайте интерфейс 16001, семейство API 12.1.5 и сборку беты в каждом промпте, иначе модель выберет 120001 или 11503. В этих промптах уже заданы эти параметры, а также проверка, которая помогает заметить пропущенные ошибки.
Спросите нашего потного ИИ-задрота о промптах для аддонов
Interface 16001, фреймы с защитой секретных данных, переносы из Midnight и Classic, проверка и другое
Всё, что охватывают наши гайды. Ответы берутся с этой страницы и из остальных гайдов, с реальными значениями на графиках и ссылками на разделы гайдов. Это ИИ, поэтому проверяйте источник, прежде чем цитировать.
Используйте системный промпт один раз за сеанс. Затем задайте один промпт для задачи. После этого проверьте результат промптом для проверки. Замените токены в фигурных скобках. Не позволяйте модели выбирать версию интерфейса.
- Параметры промпта
- Семейство 12.1.5
- Интерфейс в промптах
- 16001
- API аддонов
- Современный API
- Боевой журнал
- Запретить CLEU
Эта библиотека промптов входит в гайд для разработчиков аддонов WoW Forever. Чтобы понять назначение каждого ограничения, прочитайте принципы разработки аддонов WoW Forever и типичные ошибки ИИ при создании аддонов. Сравните результат с шаблонами кода и примером Forever Beacon, затем проверьте его в текущем клиенте.
Системный промпт
Вставьте этот текст в модель как системный промпт или как первое сообщение перед запросом кода.
You write World of Warcraft: Forever addons. The client is not Classic Era and it is not a private server.
Facts you must obey. Original checks were September 28, 2026 against Blizzard's statements, the Warcraft Wiki, and community tests on beta build 1.60.1.69913 (followed by 1.60.1.70009). Only the project-ID advice below was refreshed October 13 from retained 1.60.1.70338 client source and the October 12 WFG probe. 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's September 17 Q&A said Forever uses the "modern API approach." Wowhead quotes a Blizzard WoW UI Discord statement that 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, will also be active in Forever. 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 October 12 probe on build 70338; WOW_PROJECT_MAINLINE was 1 and WOW_PROJECT_CLASSIC was 2. The older report of 1 belongs to build 69913. Compare WOW_PROJECT_ID with WOW_PROJECT_CAMELOT when that constant exists, then check the presence of the API your feature needs. Log select(4, GetBuildInfo()) and retest on your build. Do not use the older WOW_PROJECT_MAINLINE plus LE_EXPANSION_LEVEL_CURRENT == LE_EXPANSION_CLASSIC check 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.Создание аддона для Forever
Используйте этот промпт для создания аддона с нуля:
Build a complete WoW: Forever addon named {NAME}.
Purpose: {ONE SENTENCE}. It must not read the combat log, must not compile secure snippets, and must not do arithmetic on health, power, or names.
Deliver:
- {NAME}.toc with ## Interface: 16001, Title, Notes, Author, Version, SavedVariables, Category, IconTexture, and AddonCompartmentFunc if a minimap entry is useful.
- Every .lua file, each starting with local addonName, ns = ...
- SavedVariables created only inside ADDON_LOADED for this addon, merged onto defaults.
- One event frame and a handler table.
- A slash command /{CMD} with help text.
- issecretvalue guards before any print or branch on unit data.
- InCombatLockdown queue if any protected frame is touched.
Also tell me the beta folder path and which lines I should retest when the interface number moves off 16001.Перенос аддона из Midnight
Используйте этот промпт, чтобы перенести аддон из Midnight (интерфейс 120100 и новее):
Port this Midnight addon to WoW: Forever. Do not rewrite it as Classic.
Keep the 12.1.5-era C_ APIs, secret-value handling, and AuraContainer usage. Change the TOC so Forever is accepted (## Interface: 16001, a multi-value line that includes 16001, or a separate _Camelot.toc). Review every client branch: Forever was reported returning WOW_PROJECT_ID 1 on build 69913, but the October 12 probe on build 70338 records 18 (WOW_PROJECT_CAMELOT). Compare WOW_PROJECT_ID with WOW_PROJECT_CAMELOT when available, then check each feature's API. Do not treat every non-Mainline ID as Classic or reuse the old MAINLINE plus LE_EXPANSION_CLASSIC check for 70338.
Call out anything that still depends on secure snippet compilation or on printing secret numbers. Those need a degradation path, not a silent error.
Paste the full updated files, then a short list of behavior I must retest on the current beta build.Обновления ID проекта в этих промптах используют константы проекта Camelot от Blizzard из сохраненного извлечения 70338 и проверки WFG от 12 октября, изученных 13 октября. По ссылке на зеркало может быть более поздняя сборка. Сами промпты в игре не проверяли.
Перенос аддона из Classic Era
Используйте этот промпт, чтобы адаптировать старый аддон Classic Era:
This addon targets Classic Era. Decide first if it can exist on WoW: Forever.
Refuse, and explain why, if it needs COMBAT_LOG_EVENT_UNFILTERED, combat-log damage totals, comparing UnitHealth, reading auras by index during combat, or secure click-casting snippets.
If it is a bag, map, quest, vendor, tooltip, or presentation addon, rewrite it:
- ## Interface: 16001
- Replace GetItemInfo / GetSpellInfo / GetAddOnMetadata with the C_ equivalents and nil checks.
- Guard every unit name with issecretvalue before concatenating.
- Replace PlaySoundFile on Sound\Interface paths with PlaySound and a SOUNDKIT id.
- Replace C_SuperTrack.SetSuperTrackedUserWaypoint with C_Map.SetUserWaypoint and a UiMapPoint.
- Do not branch on WOW_PROJECT_ID alone.
Give me the full files, or a clear "do not port" with the feature that cannot survive.Полоса юнитов с защитой секретных значений
Используйте этот промпт, чтобы ИИ создал фреймы игрока, питомца или цели:
Write a WoW: Forever player strip.
Show a StatusBar fed by UnitHealth and UnitHealthMax with no arithmetic. Show the unit name only when issecretvalue says the string is plain; otherwise show "Adventurer". Do not print percentages. Do not register COMBAT_LOG_EVENT_UNFILTERED. Do not create a secure header or click-cast snippet.
Use ## Interface: 16001, a namespace, ADDON_LOADED for position saving, and drag that refuses to start during InCombatLockdown. Include /strip toggle.Отладка ошибки беты
Используйте этот промпт, если клиент сообщает об ошибке или дает сбой без сообщения об ошибке:
Debug this WoW: Forever error. The client is beta-era Mainline (interface 16001 on the beta), not Classic.
Error:
{PASTE}
Code:
{PASTE}
Tell me the single line that faulted. Check, in order: a removed global (GetSpellInfo, GetItemInfo, talent APIs), arithmetic, comparison or printing of a secret, a Lua 5.2+ token, a SavedVariable touched before ADDON_LOADED, a protected call that pcall will not save, or a secure snippet that failed to compile.
Then give the corrected function only, plus one sentence on how to confirm the fix in game.Проверка перед выпуском
Запустите этот промпт для придирчивой проверки сгенерированного кода, прежде чем добавлять его в каталог аддона:
Review this WoW: Forever addon. Do not praise it. File issues under these headings only:
1. TOC interface is not 16001 and not a multi-interface line that includes 16001.
2. Lua 5.2+ syntax or a missing library (require, io, os).
3. Removed globals.
4. Any arithmetic, comparison, format, or print on a value that can be secret.
5. Combat log, damage meter logic, or boss timers derived from CLEU.
6. Secure snippet or click-cast attributes on Blizzard frames.
7. SavedVariables at file scope.
8. A WOW_PROJECT_ID Classic branch.
9. Fragments instead of loadable files.
Quote the line, say why it fails on Forever, and give the replacement. If a section is clean, write "clean".Как общаться с моделью
- Сначала укажите название клиента: «WoW Forever», а не «WoW» или «Classic».
- Запретите боевой журнал рядом с описанием функции.
- Запрашивайте полные файлы: целые файлы, а не фрагменты в тексте.
- Требуйте проверку наличия API: для API, которых нет в Warcraft Wiki.
- Запускайте промпт для проверки для каждого результата.
Никогда не называйте клиент приватным сервером. Модели понимают «combat tracker» как парсер боевого журнала. Если модель ссылается на API, которого вы не находите в Warcraft Wiki, попросите написать проверку во время выполнения. Одна проверка дешевле вечера ошибок «Interface action failed».
Промпт для панели настроек и записи в разделе аддонов
Одну только слеш-команду трудно найти. В Warcraft Wiki раздел аддонов описан как выпадающее меню у мини-карты с кнопками, которые регистрируют установленные аддоны, — альтернатива значку у мини-карты. Эта страница описывает Mainline в целом, и мы не нашли проверок на бете Forever, поэтому попросите модель проверить кнопку во время выполнения, прежде чем на нее полагаться.
Для самой простой регистрации достаточно метаданных TOC. AddonCompartmentFunc обязателен и задает имя глобальной функции, вызываемой при нажатии. AddonCompartmentFuncOnEnter, AddonCompartmentFuncOnLeave и IconTexture необязательны. В Wiki также описан ручной вызов AddonCompartmentFrame:RegisterAddon. Страница настроек создается отдельно: Settings.RegisterVerticalLayoutCategory создает страницу, а Settings.RegisterAddOnSetting связывает элемент управления с ключом в таблице сохраненных переменных.
Add a Blizzard-native options panel and an addon compartment entry to {NAME}.
Deliver:
- TOC fields AddonCompartmentFunc, AddonCompartmentFuncOnEnter, AddonCompartmentFuncOnLeave, IconTexture, each naming a real global function you also write.
- Settings.RegisterVerticalLayoutCategory for the panel, then Settings.RegisterAddOnCategory, opened by /{CMD} through Settings.OpenToCategory.
- One Settings.RegisterAddOnSetting per saved option, bound to {NAME}DB and a key on it, never a copied value.
- No code that touches {NAME}DB before ADDON_LOADED fires for this addon.
State plainly that the compartment button is documented for Mainline generally, not confirmed on the Forever beta.Проверьте точное совпадение имен функций
Поле раздела аддонов задает имя глобальной функции строкой. Если модель укажет MyAddOn_OnAddonCompartmentClick в .toc, а в файле Lua напишет MyAddon_OnAddonCompartmentClick — с отличием в регистре одной буквы, — кнопка не сработает. Сравните написание в обоих местах, прежде чем загружать аддон.
Связывайте настройки с сохраненной таблицей, а не с копией
Settings.RegisterAddOnSetting принимает таблицу сохраненных переменных и ключ в ней. В примере из Wiki значение MyAddOn_SavedVars.toggle читается и записывается напрямую. Если модель передаст скопированное значение вместо таблицы и ключа, состояние флажка не сохранится и вернется к значению по умолчанию после /reload. В примере Wiki таблица также создается на уровне файла, но SavedVariables загружаются после выполнения файлов и заменяют эту таблицу, поэтому регистрируйте настройку внутри ADDON_LOADED.
Промпт для таймера без цикла опроса
Шестое золотое правило из раздела для разработчиков — события вместо боевого журнала; тот же подход подходит и для обычных напоминаний. На странице C_Timer.After в Warcraft Wiki сказано, что таймеры «generally more efficient» («обычно эффективнее»), чем скрипты Animation или OnUpdate, которые тратят ресурсы на каждом кадре, когда выполняются. Таймер на 0 мс все равно ждет следующего кадра, а OnUpdate экономнее только для тикера, который срабатывает раз в несколько кадров.
Point the prompt at something Blizzard's tools leave out. Blizzard said Forever will include a damage meter and a cooldown manager. Check whether the manager covers the exact spell or item effect before deciding a reminder duplicates it. A vendor restock or quest reset reminder does not.
Build a WoW: Forever addon that reminds the player when a repeatable vendor or quest resets, not a spell or item cooldown.
Deliver:
- ## Interface: 16001, a namespace, and SavedVariables that store the tracked reset time.
- C_Timer.After or C_Timer.NewTicker to check the clock, never an OnUpdate script.
- A cancel path for any running timer, so a /reload or ADDON_LOADED reload cannot stack tickers.
- A print or UI update once the reset time passes, with no arithmetic on a value that can be secret.
Name the Blizzard system, if any, that already covers this before you write the addon.Однократный и повторяющийся таймер
C_Timer.After срабатывает один раз. C_Timer.NewTicker повторяется и возвращает дескриптор с методом :Cancel(). Мы не видели проверок на бете Forever, поэтому оставьте проверку возможностей. Если модель имитирует повтор, вызывая After из собственного обратного вызова, отменить таймер будет нечем, а повторная настройка может запустить второй экземпляр.
Не создавайте заново то, что уже есть у Blizzard
Попросите модель назвать встроенную систему, прежде чем она напишет код. Если пропустить этот шаг, часто получается трекер времени восстановления, дублирующий Cooldown Manager.
Проверка ответа модели перед тестированием
Результат промпта для проверки — еще одно утверждение модели, а не результат теста. Каждый раз проверяйте готовый код по одному и тому же списку, прежде чем загрузить его.
Попросите модель доказать, что API существует
Если модель использует функцию, которую вы не можете найти, попросите ее написать проверку, которую можно вставить в чат с помощью /run. GetBuildInfo() возвращает версию сборки, номер сборки, дату сборки и версию интерфейса именно в таком порядке, поэтому print(select(4, GetBuildInfo())) показывает номер интерфейса, указанный клиентом. Вторая строка, например print(C_Timer and C_Timer.NewTicker ~= nil), покажет, существует ли функция в пространстве имен в этой сборке.
Проверка требует одной перезагрузки. За несколько секунд она выяснит то, о чем модель иначе могла бы уверенно заявить по памяти. Запишите результат и номер сборки.
Короткая проверка перед загрузкой аддона
- Интерфейс 16001, не 120100 (Midnight) и не 11509 (Classic Era).
- Не выполняйте вычисления, сравнения или печать для потенциального секретного значения.
- В файле нигде не должно быть регистрации
COMBAT_LOG_EVENT_UNFILTERED. - Для каждого вызова
C_ItemилиC_Spellпредусмотрена проверка на nil. - SavedVariables используются только внутри
ADDON_LOADED. - Имя глобальной переменной слеш-команды должно совпадать в обоих местах.
Объяснение каждого пункта — в статье о двенадцати ловушках для аддонов и в описании различий архитектуры клиента, которые приводят к этим ошибкам.
Проверяйте утверждение, а не только файл
Тестировщики сообщают, что клиент может вывести «Interface action failed because of an AddOn» без ошибки Lua, и pcall это не остановит. Загрузите аддон в клиенте беты, вручную вызовите каждую функцию и следите за стандартным окном ошибок, а не только за тем, загрузился ли файл.
Обновляйте даты утверждений в промпте по мере развития беты
В системном промпте указаны дата проверки и номер сборки, потому что поведение меняется от сборки к сборке. Сообщается, что до сборки 70009 сохраненные данные терялись между сеансами. Обновляйте оба значения, прежде чем снова использовать старый промпт, и перепроверяйте любые утверждения о Forever, относящиеся к более ранней сборке.
Попросите модель назвать сборку, на которую она опирается
Добавьте одну строку в любой промпт для задачи: «укажите номер и дату сборки, на которых основаны ваши утверждения о Forever». Если модель не может ответить, вероятно, она опирается на данные обучения по Midnight или Classic Era, а не на ваши ограничения. Выясните это до того, как вставлять результат в стартовые файлы.
Удалите утверждение вместо того, чтобы расширять область его применимости
Если факт в системном промпте зависит от сборки — например, если отсутствующая глобальная переменная появляется в более поздней сборке, — удалите эту строку вместо того, чтобы добавлять к ней оговорку. Сверьте форму возвращаемого значения функции с шпаргалкой по API Forever и перечитайте золотые правила в разделе для разработчиков после любого патча беты, меняющего номер интерфейса.
Посмотрите, как устроен выпущенный аддон для Forever
В опубликованных аддонах можно посмотреть, как выглядит рабочий TOC для Forever. В TOC Questie для Forever указан ## Interface: 16001, а в CurseForge также перечислены файлы Forever для бесплатного движка аддонов RestedXP и TomTom. В обзоре RestedXP для Forever описано, что продает этот аддон с гайдами. Откройте файл .toc выпущенного аддона и сравните строку интерфейса с той, что написала модель.

Ключевые факты
- Параметры промпта ИзмененоУказывайте семейство API 12.1.5, секретные значения и сборку беты в каждом запросе
- Интерфейс в промптах ИзмененоУказывайте 16001, чтобы модель не выбрала 120001 или 11503
- API аддонов ИзмененоForever использует современный API аддонов с ограничениями Midnight в боюClassic: в Classic Era сохранен старый API, боевой журнал открыт для аддонов.
- Боевой журнал УдаленоЗапретите COMBAT_LOG_EVENT_UNFILTERED: в Midnight он вызывает ошибку, а на Forever, как сообщается, недоступен
Источники
- WoW: Forever Will Have Addon Changes from MidnightWowhead
- World of Warcraft Developer Q&A (September 17 stream), add-on answer at 01:20:52Blizzard Entertainment (YouTube)
- TOC formatWarcraft Wiki
- What the WoW Forever beta breaks for addons: secret health values, dead secure snippets, new APIsWoW Forever Builds
- AddonsWarcraft Forever
- Patch 12.0.0/API changesWarcraft Wiki
- Addon compartmentWarcraft Wiki
- Settings APIWarcraft Wiki
- API C_Timer.AfterWarcraft Wiki
- Secret ValuesWarcraft Wiki
- WOWF Beta: Addon SavedVariables appear to write correctly to disk but are not restored at startupWorld of Warcraft Forums (player bug report)
- API GetBuildInfoWarcraft Wiki
- Questie on CurseForgeCurseForge
- RestedXP Guide on CurseForgeCurseForge
- Blizzard client source: ProjectConstants.lua (retained build 70338; mirror may change)Blizzard Entertainment (source mirrored by Gethe)
