Errores de addons en WoW Forever: 12 fallos de la IA y 4 trampas de la beta

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

Compartir

Guía de addons página 4 de 7

Los modelos copian la interfaz 120001 o 11503 cuando la wiki indica 16001, y hacen cálculos con UnitHealth, que devolvió un número secreto en la compilación 69913.

Pregunta a nuestra IA sudorosa y degenerada sobre errores de addons

Números de interfaz, cálculos con salud secreta, WOW_PROJECT_ID, carencias del registro de combate, trampas de sonido de la beta 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.

These are mistakes a model can make when a WoW addon prompt does not name the Forever client. Each pairs the line it may emit with the line to write instead. Porting from Retail or another client? Check each API against your target build before shipping.

Número de interfaz incorrecto
16001
Cálculos con salud secreta
h + 1 falla
WOW_PROJECT_ID
18 (Camelot)
Registro de combate
Reported unavailable

Este desglose forma parte de la guía para desarrolladores de addons de WoW Forever. Para entender por qué ocurren estos errores, lee los patrones de addons de WoW Forever y la hoja de referencia de la API de Forever. Puedes evitar la mayoría con los prompts de IA listos para usar.

Doce trampas

01. Publicar con la interfaz 120001 o 11503

Los modelos copian guías de Midnight o plantillas de Classic. La Warcraft Wiki indica 16001 para la beta de Forever. Un número distinto puede hacer que el cliente que estás probando marque el addon como desactualizado.

Lista de addons de WoW con Zygor Guide Viewer 8 marcado y la casilla «Load out of date AddOns» activada en la parte superior
Compartir imagen: lista de addons de WoW con Zygor Guide Viewer 8 marcado y la casilla «Load out of date AddOns» activada en la parte superior

La lista de addons del manual de Zygor, con la casilla «Load out of date AddOns» activada arriba a la derecha.Fuente: manual de Zygor: enabling content.zygorguides.com/support/manual/enabling.
Lo que escribe
## Interface: 120001
Lo que publicas
## Interface: 16001

02. Bifurcar según WOW_PROJECT_ID

En la compilación 1.60.1.69913, se reportó que WOW_PROJECT_ID devolvía 1, el valor de Mainline. La sonda conservada del 12 de octubre en la compilación 70338 registra en cambio 18, que coincide con la constante WOW_PROJECT_CAMELOT de Blizzard. Una rama solo para Classic no detecta Forever; una rama que engloba el resto puede confundirlo con otro cliente. Compara la constante con nombre y después comprueba la API de la funció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.

Lo que escribe
if WOW_PROJECT_ID ~= WOW_PROJECT_MAINLINE then
    -- Assumes every non-Mainline client is Classic; 70338 Forever enters here.
end
Lo que publicas
local isForever = WOW_PROJECT_CAMELOT ~= nil
    and WOW_PROJECT_ID == WOW_PROJECT_CAMELOT
if isForever then
    ns:UseForeverPath()
    -- Only a feature that reads the preset needs this capability.
    local canReadPreset = C_GameRules
        and type(C_GameRules.GetForeverExperiencePreset) == "function"
    if canReadPreset then
        local preset = C_GameRules.GetForeverExperiencePreset()
        -- Use preset for your optional preset-specific feature.
    end
end

El ejemplo anterior de la Warcraft Wiki combinaba WOW_PROJECT_MAINLINE con LE_EXPANSION_LEVEL_CURRENT == LE_EXPANSION_CLASSIC. Esa primera condición es falsa en el cliente 70338 capturado. El fragmento revisado se ha cotejado con las fuentes, pero no se ha probado en el juego; ns:UseForeverPath() representa el código de tu propio addon.

03. Sumar uno a UnitHealth

En una prueba en la compilación 69913, type(UnitHealth("player")) imprime number, pero h + 1 falla. WoW Forever Builds vio que Grid2 lanzaba «attempt to perform arithmetic on a secret number value».

Lo que escribe
local h = UnitHealth("player")
local pct = h / UnitHealthMax("player")
Lo que publicas
local bar = ns.healthBar
bar:SetMinMaxValues(0, UnitHealthMax("player"))
bar:SetValue(UnitHealth("player"))

This example is not tested in game; check that both setters accept the value on your build.

04. Imprimir un nombre que puede ser secreto

Warcraft Forever informa de que los nombres de unidades y criaturas pueden ser cadenas secretas. También dice que imprimir uno lanza un error y puede dejar tu marco en blanco. Comprueba primero y recurre después a un valor que hayas elegido.

Lo que escribe
print("Hello " .. UnitName("player"))
Lo que publicas
local name = UnitName("player")
if type(issecretvalue) == "function" and issecretvalue(name) then
    name = "adventurer"
end
print("Hello " .. name)

05. GetSpellInfo y GetItemInfo

Ambas faltaban en la compilación 69913, junto con GetSpellBookItemName y los antiguos globales de talentos. C_Spell.GetSpellInfo devuelve una sola tabla. C_Item.GetItemInfo devuelve la misma lista de valores que el antiguo global.

Lo que escribe
local name, _, icon = GetSpellInfo(8690)
Lo que publicas
local info = C_Spell.GetSpellInfo(8690)
if not info then
    C_Spell.RequestLoadSpellData(8690)
    return
end
local name, icon = info.name, info.iconID

06. Un medidor de daño con disfraz educado

En Midnight, registrar el evento del registro de combate lanza un error. Los probadores reportan que no está disponible en Forever. Blizzard dijo que Forever incluye un medidor de daño y un gestor de tiempos de reutilización integrados.

Lo que escribe
frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
Lo que publicas
-- Presentation only. Let the built-in meter count.
frame:RegisterUnitEvent("UNIT_HEALTH", "player")

07. Click-cast mediante un fragmento seguro

Los fragmentos seguros no se compilaban en la compilación 69913. Aunque una compilación posterior lo arregle, Warcraft Forever indica que los atributos seguros de los marcos de unidad de Blizzard están protegidos, y pcall no hace que el fallo desaparezca.

Lo que escribe
SecureHandlerWrapScript(button, "OnClick", button, [[
    self:SetAttribute("type", "spell")
]])
Lo que publicas
-- Own button, plain script, no secure attribute
-- on a Blizzard unit frame.
button:SetScript("OnClick", function()
    -- open your panel, do not cast for the player
end)

08. SavedVariables en el ámbito del archivo

SavedVariables es nil mientras se carga tu archivo. El cliente carga los datos guardados después de ejecutar tus archivos y sustituye lo que haya definido tu archivo. Un valor por defecto asignado al principio se sobrescribe o se lee demasiado pronto. Los jugadores también reportaron que la beta perdía datos guardados entre sesiones hasta la compilación 70009.

Lo que escribe
MyAddonDB = MyAddonDB or { enabled = true }
Lo que publicas
function events:ADDON_LOADED(loaded)
    if loaded ~= addonName then return end
    MyAddonDB = MyAddonDB or {}
    if MyAddonDB.enabled == nil then
        MyAddonDB.enabled = true
    end
    ns.db = MyAddonDB
end

Consulta el ciclo de vida completo en la plantilla de SavedVariables.

09. Cancelar C_Timer.After

After no devuelve nada. El objeto temporizador procede de NewTimer o NewTicker.

Lo que escribe
local t = C_Timer.After(5, func)
t:Cancel()
Lo que publicas
local t = C_Timer.NewTimer(5, func)
t:Cancel()

10. Llamadas protegidas ocultas en pcall

Warcraft Forever informa de que ChatFrame_OpenChat, C_SuperTrack.SetSuperTrackedUserWaypoint y los atributos seguros de los marcos de Blizzard fallan sin un error de Lua. El único síntoma es un contador de acciones de interfaz que /reload no reinicia.

Lo que escribe
pcall(C_SuperTrack.SetSuperTrackedUserWaypoint, true)
Lo que publicas
local point = UiMapPoint.CreateFromCoordinates(uiMapID, x, y)
C_Map.SetUserWaypoint(point)

C_Map.SetUserWaypoint places the pin; the wiki documents C_SuperTrack.SetSuperTrackedUserWaypoint as the separate call that tracks it. Warcraft Forever's page, captured September 28, lists that call as protected but names no client build, so retest on yours.

11. Comprobaciones de facción que mienten

Warcraft Forever reports that UnitIsEnemy and UnitCanAttack mean "attackable right now" on this client, not "other faction": both answer false for an unflagged enemy, in a sanctuary or on another shard. Its secret-value list names UnitCanAttack, not UnitIsEnemy, as a secret boolean. The report names no build, so retest on yours.

Lo que escribe
if UnitIsEnemy("player", unit) then
Lo que publicas
local them = UnitFactionGroup(unit)
local mine = UnitFactionGroup("player")
if them and mine and them ~= mine then

12. Comandos de barra que nunca se registran

El global debe ser SLASH_NAME1 y la clave SlashCmdList debe ser la misma NAME, escrita igual. Una variable local, o una clave que no coincide, nunca se registra.

Lo que escribe
local SLASH_fb1 = "/fb"
SlashCmdList.fb = function() end
Lo que publicas
SLASH_FOREVERBEACON1 = "/fb"
SlashCmdList["FOREVERBEACON"] = function(msg)
end

Para barras seguras completas, colas de combate y compartimentos de addons, consulta las plantillas de código.

Cuatro trampas más de la beta

Las doce anteriores cubren los fallos más graves. Estas cuatro son menores. Las trampas 13 y 14 son reportes de la comunidad de la beta, sin confirmar, de Warcraft Forever. Las trampas 15 y 16 proceden de las páginas de la API Mainline de la Warcraft Wiki, la familia de interfaz que usa Forever. No se han vuelto a probar en una compilación de Forever.

13. Reproducir un archivo de sonido al estilo Classic

Warcraft Forever informa de que PlaySoundFile con una ruta Sound\Interface\*.ogg falla en silencio en este cliente. No hay errores ni se imprime nada; el sonido nunca suena.

Lo que escribe
PlaySoundFile("Sound\\Interface\\LevelUp.ogg")
Lo que publicas
-- Warcraft Wiki, PlaySound: play by SoundKitID, not a file path.
PlaySound(SOUNDKIT.READY_CHECK)

La página PlaySound de la wiki documenta la reproducción mediante SoundKitID o una clave SOUNDKIT. Warcraft Forever también dice que compruebes el volumen general antes de culpar al addon.

14. Fiarse de una placa de nombre en cuanto aparece

Warcraft Forever informa de que NAME_PLATE_UNIT_ADDED se dispara antes de que la unidad esté rellenada, y de que los marcos de placa no tienen namePlateUnitToken en este cliente. Leer la unidad en el mismo manejador no da nada útil.

Lo que escribe
frame:SetScript("OnEvent", function(self, event, unit)
    self.name:SetText(UnitName(unit))
end)
Lo que publicas
frame:SetScript("OnEvent", function(self, event, unit)
    C_Timer.After(0, function()
        self.name:SetText(UnitName(unit))
    end)
end)
-- Or sweep nameplate1..nameplate40 yourself a moment later.

15. Suponer que una consulta de metadatos falla en silencio

The wiki says C_AddOns.GetAddOnMetadata, unlike the old global, raises an "Invalid AddOn name" error when the addon does not exist. A model that ports the old call and keeps its nil check would stop the file on a missing optional dependency. Test the guarded pattern below on your Forever build.

Lo que escribe
local ver = C_AddOns.GetAddOnMetadata("SomeOtherAddon", "Version")
if not ver then return end
Lo que publicas
local ok, ver = pcall(C_AddOns.GetAddOnMetadata, "SomeOtherAddon", "Version")
if not ok or not ver then return end

16. Conectar el panel de ajustes con los antiguos globales

La wiki sitúa la reescritura de la API de Settings en el parche 10.0.0, con más cambios incompatibles en 11.0.2. Su patrón documentado registra una categoría y la abre mediante Settings, no con el antiguo InterfaceOptionsFrame_OpenToCategory que usan las plantillas de Classic Era.

Lo que escribe
InterfaceOptionsFrame_OpenToCategory(MyAddonOptionsPanel)
Lo que publicas
local category = Settings.RegisterVerticalLayoutCategory("My Addon")
Settings.RegisterAddOnCategory(category)
-- Later, from a slash command:
Settings.OpenToCategory(category:GetID())

Registra la categoría una sola vez al cargar y ábrela después desde un comando de barra o una entrada del compartimento de addons, como la del addon de ejemplo Forever Beacon.

Por qué los modelos recaen en estos errores

These examples show a risk, not a measured error rate. Without the target client named, a model asked for a health bar may reach for arithmetic, and one asked for options may call a panel API from an older interface.

Kenneth Henseler repasa cuatro errores en los que una IA dijo que una función no existía cuando sí existía, 25 de septiembre de 2026.

La solución es el contexto, no un prompt más ingenioso. Dile al modelo el número de interfaz, el ID de proyecto y las API que reporta la beta, y empieza con las plantillas de prompts para addons de Forever.

Los addons consolidados se están adaptando del mismo modo, probando en la beta. El addon gratis de guías de RestedXP ha publicado correcciones de rutas de Forever en sus versiones de GitHub hasta septiembre de 2026, y Zygor Guides dice que sus guías de Forever llegarán a los suscriptores Elite en el lanzamiento.

Versión v4.11.12 de RXPGuides de RestedXP en GitHub, del 30 de septiembre de 2026, con cambios en las guías de Los Baldíos, Mulgore, Teldrassil y mazmorras para Forever
Compartir imagen: versión v4.11.12 de RXPGuides de RestedXP en GitHub, del 30 de septiembre de 2026, con cambios en las guías de Los Baldíos, Mulgore, Teldrassil y mazmorras para Forever

Las notas de la versión v4.11.12 de RestedXP enumeran cambios de Forever para Barrens, Mulgore, Teldrassil y sus guías de mazmorras.Fuente: RXPGuides releases on GitHub, capturado el 30 sept 2026.

Verificar una corrección antes de publicarla

Ninguna de estas dieciséis correcciones tiene garantizado sobrevivir a la próxima compilación de la beta. Vuelve a probar cada una en la compilación que estés usando.

Start with /run print(select(2, GetBuildInfo()), select(4, GetBuildInfo())), which prints the build and the interface number. Then run WoW Forever Builds' health test from trap 03: /run local h = UnitHealth("player"); print(type(h), pcall(function() return h + 1 end)). On build 69913 it printed number false: pcall caught an error, so the addition was refused. If it prints true, that read is no longer secret on your build. That result covers only this test; test the status bar example separately.

Para la trampa 08, cierra sesión del todo y vuelve a entrar, no solo /reload, y comprueba que tu tabla guardada ha sobrevivido. Los jugadores reportaron un error de restauración de SavedVariables desde el 21 sept 2026, y un jugador dijo que la compilación 70009 lo arregló el 25 sept. Blizzard no ha confirmado una corrección.

Prueba la trampa 11 contra un jugador enemigo sin marcar, en un santuario o en otro shard. Warcraft Forever informa de que UnitIsEnemy y UnitCanAttack devuelven false ahí.

Para las llamadas protegidas de las trampas 07 y 10, fíjate en el contador de acciones de interfaz del panel de AddOns en lugar de en el valor devuelto por pcall. /reload no reinicia ese contador, así que reinicia el cliente antes de volver a probar, o un recuento antiguo hará que una corrección que funciona parezca rota.

Anota el número de compilación junto a cualquier corrección en la que confíes, como hace la hoja de referencia de la API con las filas observadas en la compilación 69913. Una trampa corregida en una compilación puede reabrirse en la siguiente.

Datos clave

  • Número de interfaz incorrecto CambiadoLos modelos copian 120001 o 11503; la wiki indica 16001 para la beta de Forever
  • Cálculos con salud secreta Cambiadotype() dice number, pero h + 1 falla; pcall devuelve false en lugar de una suma
  • 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 EliminadoRegistrar COMBAT_LOG_EVENT_UNFILTERED da error en Midnight; se reporta como no disponible en Forever

Fuentes

  1. What the WoW Forever beta breaks for addons: secret health values, dead secure snippets, new APIsWoW Forever Builds
  2. AddonsWarcraft Forever
  3. TOC formatWarcraft Wiki
  4. Secret ValuesWarcraft Wiki
  5. Patch 12.0.0/API changesWarcraft Wiki
  6. C_Item.GetItemInfoWarcraft Wiki
  7. Saving variables between game sessionsWarcraft Wiki
  8. WOWF Beta: Addon SavedVariables appear to write correctly to disk but are not restored at startupWorld of Warcraft Forums (player bug report)
  9. C_Map.SetUserWaypointWarcraft Wiki
  10. C_AddOns.GetAddOnMetadataWarcraft Wiki
  11. Settings APIWarcraft Wiki
  12. PlaySoundWarcraft Wiki
  13. RXPGuides releasesRestedXP (GitHub)
  14. Zygor's World of Warcraft Forever guides launching this NovemberZygor Guides
  15. Blizzard client source: ProjectConstants.lua (retained build 70338; mirror may change)Blizzard Entertainment (source mirrored by Gethe)