Guía de desarrollo de addons de WoW Forever: escribir addons con IA

Publicado Actualizado Informes de la beta de la compilación 1.60.1.69913

Compartir

Guía de addons página 1 de 7

Los addons de Forever usan la API moderna de Mainline, y la Warcraft Wiki indica la interfaz 16001 para la beta. Dale instrucciones a tu modelo de IA primero, o escribirá llamadas como GetSpellInfo que no existían en la compilación 69913.

Pregunta a nuestra IA sudorosa y degenerada sobre desarrollo de addons de Forever

Interfaz 16001, valores secretos, cambios de C_Spell, prompts de sistema y más

Cualquier cosa que cubran nuestras guías. Las respuestas salen de esta página y del resto de nuestras guías, con los valores reales en gráficos y las secciones de la guía enlazadas. Es IA, así que comprueba la fuente antes de citarla.

Antes de que un modelo de lenguaje escriba código para World of Warcraft: Forever, necesita restricciones que eviten los hábitos de Classic Era que ha memorizado: Forever combina el escenario original de Azeroth con la interfaz moderna de Mainline.

Interfaz TOC
16001
Lanzamiento
Nov 4, 2026
Familia de API
Mainline 12.1.5
Compilación de la beta probada
1.60.1.69913

El problema

Pide a un modelo un addon de WoW y escribirá código de la era Classic. En la compilación 1.60.1.69913 de la beta, los probadores de WoW Forever Builds encontraron que GetSpellInfo y GetItemInfo faltaban, WOW_PROJECT_ID devolvía el valor de Mainline y la salud del jugador se devolvía como un valor secreto al que los addons no pueden sumar ni comparar. Warcraft Forever informa de que CombatLogGetCurrentEventInfo no está disponible para addons. Han llegado compilaciones posteriores (1.60.1.70009 el 23 de septiembre). La sonda conservada del 12 de octubre en 1.60.1.70338 registra el ID de proyecto 18, así que vuelve a comprobar cada observación y conserva su número de compilación.

Kenneth Henseler muestra cómo una IA falla cuatro veces con el código de addons de WoW Forever, 25 de septiembre de 2026.

Cómo usar esta guía

Dale al modelo restricciones explícitas antes de que genere nada. Los patrones de arquitectura del cliente muestran en qué se diferencia Forever de Classic Era y Midnight. La hoja de referencia de migración de API incluye las firmas de C_Spell y C_Item. La lista de errores frecuentes de la IA recoge fallos habituales de los modelos. Parte de los archivos iniciales, copia de la biblioteca de prompts para addons o revisa el addon de pruebas Forever Beacon, un ejemplo de referencia sin verificar.

Para una tarea concreta, ve a la API de interfaz para las reglas actuales, funciones con varios comandos, comandos de mensaje, mensajes emergentes o la hoja de referencia de ID de sonidos. Cada ejemplo indica qué se comprobó y qué sigue necesitando una prueba en el juego.

La actualización del ID de proyecto del 13 de octubre cita el extracto conservado del cliente 70338 y la sonda de WFG del 12 de octubre. Los espejos de las fuentes enlazadas pueden mostrar una compilación posterior.

Las reglas de oro

Aplica estas diez reglas a cada borrador de IA que apunte a WoW Forever. Las guías de Midnight omiten las reglas 3, 6, 7 y 8, porque son específicas de la beta de Forever.

01. Interfaz: 16001

Un addon solo para Forever declara ## Interface: 16001, el valor de Forever Beta en la tabla de TOC de la Warcraft Wiki. Classic Era usa 11509 y Midnight usa 120100. Para publicar un único paquete para varios clientes, usa una línea de interfaz separada por comas, un archivo _Camelot.toc (el sufijo de Forever en la wiki) o un _Mainline.toc que compartan Midnight y Forever. Vuelve a probar cuando el número cambie en el lanzamiento.

02. Lua 5,1

WoW ejecuta un Lua 5,1 modificado. Sin goto, sin //, sin operadores bit a bit y sin _ENV. El trabajo bit a bit usa la biblioteca bit (bit.band, bit.bor, bit.lshift). La wiki dice que las bibliotecas del sistema operativo y de E/S de archivos no están presentes, y que su lista de funciones omite require, dofile y loadfile. El archivo .toc es tu cargador de módulos.

03. Familia Mainline, no Classic

Blizzard dijo al Discord de WoW UI que Forever comparte la arquitectura de interfaz de Mainline, "including the vast majority of APIs available in 12.1.5" («incluida la gran mayoría de las API disponibles en 12.1.5»), y que el desarme de addons de Midnight, secretos incluidos, está activo (citado por Wowhead). El tipo de juego de Forever se llamaba Camelot, y el nombre cambiará antes del lanzamiento. En la emisión de preguntas y respuestas del 17 de septiembre, los desarrolladores dijeron "we did opt for the modern API approach" («optamos por el enfoque de la API moderna»). Porta un addon de Midnight, no un addon de combate de Classic que esperas que funcione.

04. Espacios de nombres C_

En la compilación 69913 faltaban GetSpellInfo, GetItemInfo, GetSpellBookItemName, GetNumTalentTabs, GetTalentInfo y GetNumSkillLines. C_Spell.GetSpellInfo devuelve una sola tabla; C_Item.GetItemInfo devuelve la misma lista de valores que la antigua global. Ambas devuelven nil hasta que el registro está en caché. Comprueba nil, solicita la carga (C_Spell.RequestLoadSpellData, C_Item.RequestLoadItemDataByID) y escucha el evento de resultado.

05. Todo dentro de un espacio de nombres

Cada archivo empieza con local addonName, ns = .... El estado compartido cuelga de ns. Las únicas globales que deberías declarar son SavedVariables, las entradas de comandos de barra y las devoluciones de llamada del Addon Compartment indicadas en el TOC. Un marco llamado MainFrame se convierte en global; ponle un nombre basado en tu addon o pasa nil.

06. Eventos, no el registro de combate

Usa un marco, un script OnEvent y una tabla de manejadores. Usa RegisterUnitEvent cuando solo vigiles al jugador. En Midnight, registrar COMBAT_LOG_EVENT_UNFILTERED lanza un error, y Warcraft Forever reporta que el lector del registro de combate no está disponible en Forever. Blizzard dijo en la emisión que Forever incluye un medidor de daño y un gestor de tiempos de reutilización. Blizzard también dijo en la emisión que un temporizador de golpes es «quizá pronto» ("perhaps coming soon").

07. Los secretos se dibujan, no se resuelven

Los probadores vieron que UnitHealth del jugador llegaba como un número secreto: type() dice number, y sumarle algo falla. Warcraft Forever reporta que los nombres de unidad pueden ser cadenas secretas y que UnitCanAttack y UnitExists pueden ser booleanos secretos. Protege los valores con issecretvalue antes de compararlos, ramificar o imprimirlos. Pasa la salud directamente a una StatusBar con SetMinMaxValues y SetValue. Una llamada protegida bloqueada puede fallar sin error de Lua, y pcall no lo solucionará.

08. No te fíes solo de WOW_PROJECT_ID

Se reportó que la compilación 69913 devolvía 1, el valor de Mainline. La sonda en vivo conservada de la compilación 70338 registra en cambio 18, y el código fuente del cliente de Blizzard llama a esa constante WOW_PROJECT_CAMELOT. Una biblioteca que interprete 1 como solo Midnight, o cualquier otro valor como Classic, toma la rama equivocada. Compara las constantes con nombre cuando estén disponibles y añade una sonda de capacidad. El ejemplo anterior de la Warcraft Wiki usaba LE_EXPANSION_LEVEL_CURRENT o una variable del TOC para el tipo de juego; su condición del ID de proyecto Mainline no coincide con 70338. Cuenta con que la comprobación cambie antes del lanzamiento.Fuente: constantes de proyecto Camelot de Blizzard, código fuente conservado de la compilación 70338 inspeccionado el 13 oct 2026; sonda en vivo capturada el 12 oct.

09. Sin depender de secure snippets

En la compilación 69913, los secure snippets no se compilaban porque el cliente no tenía loadstring_untainted. El lanzamiento de hechizos con clic y la paginación de barras de acción que usan snippets también fallaban. WoW Forever Builds cree que probablemente es un error. No publiques marcos de sanador que necesiten secure snippets hasta que una compilación lo arregle. Tus propios botones son la vía de clic segura. No escribas atributos seguros en los marcos de unidad de Blizzard.

10. Archivos completos, orden de carga correcto

Genera siempre el .toc y cada archivo .lua completos. Los addons de la beta van en World of Warcraft\_classic_beta_\Interface\AddOns\. Las SavedVariables se cargan después de que se ejecuten tus archivos y están listas cuando ADDON_LOADED se dispara para tu addon. Un reporte del foro del 21 de septiembre mostró datos guardados en disco pero ausentes en el siguiente inicio de sesión; una respuesta posterior del 25 de septiembre dice que la compilación 70009 los vuelve a cargar.

Inicio rápido

El addon de WoW Forever más pequeño que sirve son dos archivos. El nombre de la carpeta debe coincidir con el del archivo TOC. Ponlos en World of Warcraft\_classic_beta_\Interface\AddOns\FirstLight\ e inicia el cliente. El nombre del personaje se protege porque los nombres pueden ser secretos.

FirstLight.toc
## Interface: 16001
## Title: First Light
## Notes: Smallest correct WoW Forever addon.
## Author: YourName
## Version: 0.1.0
## SavedVariables: FirstLightDB

FirstLight.lua
FirstLight.lua
local 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")

Qué está confirmado y qué solo se ha observado

AfirmaciónFuente y estado
Forever usa la API de addons modernaConfirmado. Desarrolladores de Blizzard, emisión de preguntas y respuestas del 17 de septiembre, 01:20:52
Medidor de daño y gestor de tiempos de reutilización integradosConfirmado. Misma emisión, 01:21:51
Temporizador de golpe"Perhaps coming soon" («quizá pronto») en la misma emisión. No es un compromiso
Comparte la mayoría de las API de la 12.1.5; el desarme de Midnight y los secretos están activosReportado. Declaración de Blizzard en el Discord de WoW UI, citada por Wowhead
Interfaz 16001Reportado. Tabla de TOC de Warcraft Wiki, fila de la beta de Forever
UnitHealth es un número secreto; los secure snippets no compilanReportado. WoW Forever Builds, compilación 69913. Vuelve a probar
WOW_PROJECT_ID es 1Reportado. WoW Forever Builds, compilación 69913. Vuelve a probar
WOW_PROJECT_ID es 18 (WOW_PROJECT_CAMELOT)Observación del cliente reportada. Sonda en vivo conservada, compilación 70338, 12 de octubre
SavedVariables se escribe pero no se restauraSin confirmar. Mensajes del foro del 18 al 21 de septiembre; una respuesta del 25 de septiembre dice que la compilación 70009 lo arregló

El acceso a la beta va del 17 de septiembre al 21 de octubre de 2026. La fecha de lanzamiento de Blizzard es el 4 de noviembre de 2026 a las 15:00 PST, con nivel máximo 60. Cualquier compilación hasta entonces puede cambiar la API. La referencia de la beta y el resumen de sistemas cubren las reglas del juego que lo rodean.

Prompt de sistema para modelos de IA

Pega este bloque en tu sesión de IA antes de pedir código de addon. La biblioteca de prompts de IA incluye los prompts de tareas, los de portado y el de revisión.

Prompt de sistema
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.

Lista de verificación

Pasa esta lista de comprobación por cada archivo que genere un modelo de IA antes de probarlo en el juego:

El resto de la guía

Cada página cubre una tarea:

Preguntas frecuentes de los autores de addons

¿Qué versión de interfaz usan los addons de WoW Forever?

Warcraft Wiki indica 16001 para la beta de Forever. Compruébalo en tu cliente con /dump select(4, GetBuildInfo()) en el cuadro de chat.

¿Puede una IA escribir un addon de WoW Forever?

Solo si le das antes restricciones explícitas. Sin ellas, los modelos tienden a escribir globales antiguos como GetSpellInfo, un número de interfaz de Retail como 110207 y COMBAT_LOG_EVENT_UNFILTERED. El prompt de sistema y la lista de comprobación de arriba detectan la mayoría antes de que pruebes en el juego.

¿Qué es Camelot en el cliente de la beta?

Camelot es el nombre interno del tipo de juego de Forever en la familia de código Mainline, según la declaración de Blizzard en el Discord de WoW UI. Blizzard dijo que se renombraría antes del lanzamiento. Warcraft Wiki ya indica _Camelot.toc como sufijo de TOC de Forever, así que vuelve a comprobarlo tras el lanzamiento.

Datos clave

  • Interfaz TOC Cambiada16001 en la fila Forever Beta de la tabla TOC de Warcraft Wiki; confírmalo con /dump select(4, GetBuildInfo())Classic: Classic Era indica 11509 en la misma tabla.
  • API de addons CambiadaForever usa la API moderna de addons, con las restricciones de combate de MidnightClassic: Classic Era mantiene la API anterior, con el registro de combate abierto a los addons.
  • Lanzamiento Novedad en Forever4 de noviembre de 2026 a las 15:00 PST, nivel máximo 60
  • Familia de API CambiadaComparte la arquitectura de la interfaz de Mainline y «la gran mayoría de las API de esa versión» (“the vast majority of APIs available in 12.1.5”)
  • Compilación de la beta probada Novedad en Forever1.60.1.69913; las compilaciones posteriores (70009, del 23 de septiembre) pueden diferir
  • Herramientas integradas Novedad en ForeverIncluye medidor de daño y gestor de tiempos de reutilización; temporizador de golpe "perhaps coming soon" («quizá pronto»)
  • ID de proyecto capturado Cambiado18 (WOW_PROJECT_CAMELOT) en la sonda en vivo del 12 de octubre en la compilación 70338; los informes anteriores de 69913 indicaban 1

Fuentes

  1. World of Warcraft Developer Q&A (September 17 stream), add-on answer at 01:20:52Blizzard Entertainment (YouTube)
  2. WoW: Forever Will Have Addon Changes from MidnightWowhead
  3. Addons in WoW Forever? Blizzard Devs Just Addressed the Big QuestionIcy Veins
  4. TOC formatWarcraft Wiki
  5. What the WoW Forever beta breaks for addons: secret health values, dead secure snippets, new APIsWoW Forever Builds
  6. AddonsWarcraft Forever
  7. WOWF Beta: Addon SavedVariables appear to write correctly to disk but are not restored at startupWorld of Warcraft Forums (player bug report)
  8. World of Warcraft: Forever What's Next Panel RecapBlizzard Entertainment
  9. Secret ValuesWarcraft Wiki
  10. Patch 12.0.0/API changesWarcraft Wiki
  11. WOW_PROJECT_IDWarcraft Wiki
  12. Lua functionsWarcraft Wiki
  13. Saving variables between game sessionsWarcraft Wiki
  14. Blizzard client source: ProjectConstants.lua (retained build 70338; mirror may change)Blizzard Entertainment (source mirrored by Gethe)
  15. Blizzard · Developer Q&A, 01:21:51