Patrones de addons de WoW Forever: Forever es un tercer cliente

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

Compartir

Guía de addons página 2 de 7

Forever comparte la interfaz de Mainline. En la compilación 70338, su ID de proyecto es 18 (WOW_PROJECT_CAMELOT); compara esa constante, comprueba la API de la función y vuelve a probar en tu cliente actual.

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

Valores secretos, detección de Camelot, contenedores de auras, paneles de ajustes 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.

Classic Era es permisivo y antiguo. Midnight es restrictivo y actual. Forever es el mundo original con la familia de interfaz de Midnight. Escribe para esa intersección o el addon no se cargará, o se cargará y informará de algo incorrecto.

API de addons
API moderna
Familia de API
Mainline 12.1.5
WOW_PROJECT_ID
18 (Camelot)
Salud del jugador
Número secreto

Tres clientes, un solo error

La trampa en la que más caen los modelos y los desarrolladores es tratar Forever como Classic Era con zonas nuevas, o como Midnight con el mundo antiguo. No es ninguna de las dos cosas.

AspectoClassic EraMidnightForever
MundoMundo originalExpansión actualMundo original, zonas nuevas, nivel máximo 60
Código de interfazAPI de ClassicMainline, 12.xFamilia Mainline, tipo de juego Camelot
Interfaz1150912010016001 en la beta
Registro de combateAbierto a addonsRegistrar CLEU da errorReportado como no disponible
Cálculos de saludNúmeros normalesSecretos bajo restriccionesNúmero secreto visto en la compilación 69913
WOW_PROJECT_ID2118 (WOW_PROJECT_CAMELOT) en la compilación 70338; se reportó 1 en 69913

Los números de interfaz proceden de la tabla de TOC de la Warcraft Wiki, y el cambio del registro de combate de Midnight, de las notas de API del parche 12.0.0 de la wiki. Las filas de la beta en la columna de Forever son pruebas de la comunidad.

Detecta Forever sin fiarte solo del ID de proyecto

El informe de la compilación anterior 69913 indicó que devolvía WOW_PROJECT_ID = 1, el valor de Mainline. La sonda conservada del 12 de octubre en la compilación 70338 registra en cambio 18, y las constantes del cliente de Blizzard lo llaman WOW_PROJECT_CAMELOT. Compara esa constante con nombre cuando exista y después comprueba la API que necesita tu función. Blizzard dijo que cambiaría el nombre interno Camelot antes del lanzamiento, así que vuelve a comprobarlo en tu compilación.Fuente: constantes de proyecto Camelot de Blizzard, extracto conservado de 70338 inspeccionado el 13 oct 2026; sonda de WFG capturada el 12 oct. El espejo puede mostrar una compilación posterior.

Detect.lua
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())

Comprueba esta sonda con las tablas de referencia de la API y las trampas de Doce trampas que evitar, y ejecútala en tu compilación antes de fiarte de ella.

El ejemplo conservado de la Warcraft Wiki combina WOW_PROJECT_MAINLINE con LE_EXPANSION_LEVEL_CURRENT == LE_EXPANSION_CLASSIC o lee una variable de tipo de juego del TOC. Su condición del ID de proyecto Mainline es falsa en el cliente 70338 capturado. La arquitectura de interfaz Mainline no implica un ID de proyecto Mainline. El ejemplo revisado se ha cotejado con las fuentes, pero no se ha probado en el juego.

La cadena de valores secretos

Midnight introdujo los valores secretos para limitar la automatización del combate, y Blizzard dijo que Forever también los tiene.

  1. Llama a la API.
    type() sigue informando de number, string o boolean.
  2. Preguntar issecretvalue
    antes de compararlo, ramificar según él o imprimirlo.
  3. Si es secreto, usa un widget.
    En otro caso, muestra una etiqueta fija.
  4. No confíes en pcall con acciones protegidas.

La llamada sigue devolviendo un valor, con su tipo real. StatusBar:SetValue es el ejemplo de la wiki de un widget que acepta secretos. No envuelvas una acción protegida en pcall y des el asunto por resuelto: los probadores reportan que el fallo puede ser silencioso y persistente.

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.

Notas de la versión v12.0.1+v1.0.3 de Questie en GitHub, con Added Forever client support primero en New Features y las correcciones de Forever debajo
Compartir imagen: Notas de la versión v12.0.1+v1.0.3 de Questie en GitHub, con Added Forever client support primero en New Features y las correcciones de Forever debajo

Las notas de la versión de Questie incluyen una corrección que añade salvaguardas contra la manipulación de valores secretos en Forever.Fuente: notas de la versión de Questie en GitHub, capturadas el 30 sept 2026.

Prueba que puedes pegar en el juego

Comando de chat
/run local h = UnitHealth("player"); print(type(h), pcall(function() return h + 1 end))

En la compilación 69913 esto imprimió number false. Un false de pcall significa que el motor rechazó la suma. Para ejemplos de barras de estado, consulta las plantillas de código y el ejemplo descargable de Beacon, y compruébalos en tu compilación.

Las auras son contenedores, no tablas que te pertenezcan

Blizzard dijo que los cambios de AuraContainer y AuraButton de 12.1.0 están disponibles en Forever, y que los cambios posteriores de interfaz deberían llegar tanto a Standard como a Forever. Las notas de Midnight de la wiki marcan los datos de auras como secretos mientras las restricciones de combate están activas. Lo que funciona es dejar que los marcos de auras de Blizzard decidan qué mostrar, aplicar tu aspecto a lo que te dan y no leer nunca los datos de las auras para decidir una jugada.

Qué merece la pena desarrollar ahora

Conoce qué permite el cliente antes de pedirle algo a un modelo o adaptar código antiguo:

AspectoVeredictoMotivo
Bolsas, banco, vendedor, descripciones emergentesDesarrollarPresenta datos que la interfaz ya muestra
Registro de misiones, marcas del mapa, notas de rutaDesarrollarC_Map.SetUserWaypoint es la marca segura, no la llamada de super-seguimiento
Placas de nombre y arte de unidadesDesarrollar con cuidadoWarcraft Forever: NAME_PLATE_UNIT_ADDED puede dispararse antes de que la unidad esté rellenada. Vuelve a comprobar un momento después
Franja personal a prueba de secretosDesarrollarEl ejemplo Forever Beacon es la referencia
Medidor de daño o sanaciónNo hacerloBuilt-in meter; do not assume addon access to its restricted data
Paquetes de WeakAuras de ClassicNo adaptarWowhead: WeakAuras dejó de desarrollarse antes de Midnight
Marcos de sanador con clic para lanzarEsperarLos fragmentos seguros no se compilaron en 69913; puede ser un fallo
Paginación de barras de acción mediante fragmentosEsperarEl mismo fallo de compilación

Orden de adaptación

Desde Midnight

Añade 16001 a la línea de interfaz, o incluye un _Camelot.toc. Elimina cualquier rama que lea el ID de proyecto 1 como «esto es Midnight» y active funciones exclusivas de Midnight. Vuelve a probar todas las rutas con valores secretos en el cliente de Forever antes de publicar.

Desde 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.

Fallos de la beta frente a diseño

Indícalos en las notas de tu parche para que los jugadores no culpen a tu addon:

  • Fallo de compilación de fragmentos seguros: WoW Forever Builds sospecha que es un fallo.
  • SavedVariables no se cargan: reportado tras un reinicio a mediados de septiembre
  • WOW_PROJECT_ID de 1: informe histórico de la compilación 69913.

Vuelve a probar los fragmentos antes de sustituir para siempre un sistema funcional de lanzamiento con clic por otro menos capaz. Los jugadores reportaron datos guardados ausentes, y una respuesta del foro del 25 de septiembre dice que la compilación 70009 vuelve a cargarlos; compruébalo antes de añadir soluciones alternativas. WoW Forever Builds dejó sin aclarar el ID de proyecto en la compilación 69913. La sonda conservada de 70338 registra 18, llamado WOW_PROJECT_CAMELOT, aunque Forever sigue en la familia Mainline. Vuelve a probar cada compilación; compara la constante con nombre y comprueba las API de las funciones.

El compartimento de addons sustituye al botón del minimapa

Si le pides a un modelo un botón de activación, recurrirá a una biblioteca de iconos de minimapa de un tutorial de Classic Era. Mainline tiene una opción más ligera: el compartimento de addons, un menú desplegable del minimapa que muestra una entrada por cada addon registrado.Fuente: compartimento de addons, consultado el 28 sept 2026.

El cliente de la beta lo incluye. En la compilación 1.60.1.70009, el TOC de Blizzard_Minimap carga AddonCompartment.lua para el tipo de juego mainline, y una línea contigua que excluye camelot muestra que camelot cuenta como mainline.Reportado, archivo del cliente leído Una entrada en una pantalla real de Forever sigue sin confirmar, como señalan las notas de compartimento de Beacon.

Registrar con el TOC o con Lua

Tres campos del TOC registran una entrada sin ninguna llamada de Lua: AddonCompartmentFunc para el clic, más los opcionales AddonCompartmentFuncOnEnter y AddonCompartmentFuncOnLeave para la descripción emergente. El cliente llama a las funciones globales que indiques y, si hace falta, carga antes un addon de carga bajo demanda.

Un addon que cambia su etiqueta o icono en tiempo de ejecución usa AddonCompartmentFrame:RegisterAddon en su lugar, pasando una tabla con text, icon y func. La wiki dice que esa tabla se parece a la configuración de botón UIDropDownMenu antigua, así que los ejemplos de Retail sirven.

Cuándo sigue teniendo sentido un botón de minimapa

Un botón de minimapa propio trae su propia posición guardada y su código de arrastre, normalmente mediante una biblioteca. Una entrada del compartimento no necesita ninguna de las dos cosas, porque el cliente es dueño del menú. Empieza por el compartimento. El mismo TOC sigue cargando MinimapButtonTemplate para camelot, así que un icono de minimapa real sigue siendo posible si los jugadores lo piden.

Los paneles de opciones siguen el mismo cambio

Los ajustes siguen la misma regla: escribe código de Mainline, no una plantilla de Classic. La wiki dice que la API de Settings se rehízo en el parche 10.0.0, con más cambios incompatibles en 11.0.2.Fuente: API de Settings, consultada el 28 sept 2026. El Blizzard_Settings.lua de la beta define Settings.RegisterAddOnCategory, Settings.RegisterAddOnSetting y Settings.OpenToCategory.Reportado, archivo del cliente leído

RegisterAddOnCategory añade tu categoría a la ventana de opciones del juego. RegisterAddOnSetting vincula una casilla o un control deslizante a una clave de tu tabla de variables guardadas, de modo que el clic escribe el valor sin un manejador aparte que mantener sincronizado. La plantilla de panel de ajustes tiene una casilla funcional con una función de retorno.

Ventana de opciones de WoW Forever en Idiomas y social, con el menú desplegable de idioma en línea preferido que muestra inglés, español de Latinoamérica y portugués de Brasil
Compartir imagen: ventana de opciones de WoW Forever en Idiomas y social, con el menú desplegable de idioma en línea preferido que muestra inglés, español de Latinoamérica y portugués de Brasil

La ventana de opciones de WoW Forever, tal como la mostró Blizzard en su captura de pantalla del idioma en línea preferido.Fuente: Blizzard, Deep Dive Panel Recap

Abrir las opciones desde el compartimento

Un clic en el compartimento puede llamar a Settings.OpenToCategory en lugar de mostrar un marco que hayas creado tú. En el archivo de la beta, delega en C_SettingsUtil.OpenSettingsPanel, una función del cliente. Ni la wiki ni ese archivo dicen si la llamada funciona en combate, así que pruébala en combate, o ponla en cola hasta PLAYER_REGEN_ENABLED como hace Beacon.

Los addons de rutas siguen el mismo cliente

Los addons de misiones y rutas son la fila «Build» más grande de la tabla anterior, y dos creadores de guías ya los venden para Forever. RestedXP abrió los pedidos de Forever el 14 de septiembre de 2026. Zygor Guides dice que los miembros Elite recibirán sus guías de Forever en el lanzamiento. Ambos se ejecutan dentro de este cliente, así que les aplican las mismas reglas de compartimento y ajustes.

Las plantillas de prompts para addons de Forever incorporan ambos patrones en el prompt del sistema, de modo que el modelo recurra al compartimento y a la API de Settings antes que a una biblioteca.

Datos clave

  • 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.
  • 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”)
  • WOW_PROJECT_ID Cambiado18 (WOW_PROJECT_CAMELOT) en la sonda de WFG del 12 de octubre en la compilación 70338; la compilación anterior 69913 reportó 1Classic: Classic Era devuelve 2 (WOW_PROJECT_CLASSIC).
  • Registro de combate EliminadoSe reporta que CombatLogGetCurrentEventInfo no está disponible para los addons en la betaClassic: los addons de Classic Era leen todos los eventos mediante COMBAT_LOG_EVENT_UNFILTERED.
  • Salud del jugador CambiadoUnitHealth devolvía un número secreto: type() dice number, pero sumar 1 fallaClassic: Classic Era devuelve un número normal con el que los addons pueden operar.

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. What the WoW Forever beta breaks for addons: secret health values, dead secure snippets, new APIsWoW Forever Builds
  4. AddonsWarcraft Forever
  5. TOC formatWarcraft Wiki
  6. WOW_PROJECT_IDWarcraft Wiki
  7. Secret ValuesWarcraft Wiki
  8. Patch 12.0.0/API changesWarcraft Wiki
  9. WOWF Beta: Addon SavedVariables appear to write correctly to disk but are not restored at startupWorld of Warcraft Forums (player bug report)
  10. Addon compartmentWarcraft Wiki
  11. Settings APIWarcraft Wiki
  12. World of Warcraft Forever guides are up for order nowRestedXP
  13. Zygor's World of Warcraft: Forever guides launching this NovemberZygor Guides
  14. Blizzard client source: ProjectConstants.lua (retained build 70338; mirror may change)Blizzard Entertainment (source mirrored by Gethe)