Forever Beacon: addon de referencia para WoW Forever

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

Compartir

Guía de addons página 7 de 7

Descarga Forever Beacon para ver código de la interfaz 16001 que protege los valores secretos en lugar de operar con ellos. Este sitio ha revisado su código, pero no lo ha ejecutado en un cliente de Forever.

Pregunta a nuestra IA sudorosa y degenerada sobre Forever Beacon

Configurar la barra de salud, instalar en la beta, resultados de la sonda, entrada del compartimento, notas guardadas 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.

Un pequeño addon de prueba para la beta de Forever. Guarda notas, dibuja tu barra de salud sin operar con ella e imprime lo que el cliente informa sobre sí mismo. No mide el daño, no lee el registro de combate ni lanza hechizos por ti.

Interfaz TOC
16001
Health bar without math
Sin operaciones con la salud
Prueba en el cliente
Aún sin ejecutar
Addon compartment
Sin probar aquí

Este addon de referencia forma parte de la guía para desarrolladores de addons de WoW Forever. Para entender por qué trata los valores de salud y el posicionamiento de marcos así, lee WoW Forever addon patterns y la Forever API cheat sheet. Para fragmentos más pequeños, consulta las plantillas de código.

Beacon llegó a este sitio con el paquete de código de la guía, que nombra como autor a "Forever Codex". El código de abajo es byte a byte lo que descargas, salvo los finales de línea.

Descarga

El zip contiene una carpeta ForeverBeacon con ambos archivos. Descomprímela en la carpeta AddOns de tu beta.

Qué hace el addon

CaracterísticaQué hace
Panel movibleArrastrar no hace nada mientras InCombatLockdown sea true. El panel recuerda dónde lo sueltas.
Nombres protegidosLa zona y el nombre del personaje solo se muestran cuando issecretvalue indica que son normales. Si no, eres "Adventurer".
Health bar without mathLa barra de estado recibe UnitHealth y UnitHealthMax directamente. La etiqueta indica sellada o abierta, y nunca calcula ni imprime un porcentaje.
Comandos de barra/fb note guarda una línea. /fb toggle muestra u oculta el panel. /fb probe informa de la compilación, la interfaz, el ID de proyecto, C_Spell y si la salud es secreta. /fb reset borra los datos guardados de Beacon y recarga la interfaz.
Entrada del compartimento de addonsRegistrada en el TOC, así que no necesitas ninguna biblioteca de botón del minimapa. Aún sin confirmar en un cliente de Forever.
Carga de datos de hechizoLa sonda busca Piedra de hogar con C_Spell.GetSpellInfo(8690) y solicita la carga si el registro no está en caché.

Instalar en la beta

  1. Crea la carpeta World of Warcraft\_classic_beta_\Interface\AddOns\ForeverBeacon\ o descomprime ahí.
  2. Guarda el TOC como ForeverBeacon.toc y el Lua como ForeverBeacon.lua.
  3. Inicia el cliente del juego.
  4. Escribe /fb help.
  5. Si las notas desaparecen entre sesiones, comprueba tu compilación.

Los nombres de la carpeta y del TOC deben coincidir. Si añades la carpeta con el juego en marcha y Beacon no aparece tras /reload, reinicia el cliente. Si falta el addon o aparece como desactualizado, comprueba el número de interfaz con /dump select(4, GetBuildInfo()) y actualiza el TOC. Algunos jugadores reportaron un error de carga de SavedVariables en la beta a mediados de septiembre, y un informe del 25 de septiembre dice que la compilación 70009 lo arregló. Consulta los errores habituales de los addons con IA.

Código fuente

ForeverBeacon.toc
## Interface: 16001
## Title: Forever Beacon
## Notes: Secret-safe session journal and API probe for WoW: Forever. A Forever Codex proof of concept.
## Author: Forever Codex
## Version: 0.1.0
## SavedVariables: ForeverBeaconDB
## IconTexture: Interface\Icons\INV_Misc_Note_01
## Category: Miscellaneous
## AddonCompartmentFunc: ForeverBeacon_OnCompartmentClick
## AddonCompartmentFuncOnEnter: ForeverBeacon_OnCompartmentEnter
## AddonCompartmentFuncOnLeave: ForeverBeacon_OnCompartmentLeave

ForeverBeacon.lua
ForeverBeacon.lua
-- Forever Beacon 0.1.0
-- Proof of concept for World of Warcraft: Forever (beta interface 16001).
-- Secret-safe. No combat log. No secure snippets. No Classic API.
-- Install: World of Warcraft\_classic_beta_\Interface\AddOns\ForeverBeacon\
-- Then fully restart the client. /fb help

local addonName, ns = ...

local PREFIX = "|cffd4a85a[Beacon]|r "

local defaults = {
    enabled = true,
    welcomeShown = false,
    point = { point = "CENTER", rel = "CENTER", x = 0, y = 80 },
    notes = {},
}

ns.db = nil

local frame = CreateFrame("Frame")
local events = {}
local pending = {}

local function Queue(action)
    if InCombatLockdown() then
        pending[#pending + 1] = action
    else
        action()
    end
end

local function IsSecret(value)
    if type(issecretvalue) ~= "function" then
        return false
    end
    return issecretvalue(value) and true or false
end

local function SafeString(value, fallback)
    if value == nil or IsSecret(value) then
        return fallback
    end
    return tostring(value)
end

local function Say(text)
    DEFAULT_CHAT_FRAME:AddMessage(PREFIX .. text, 0.95, 0.92, 0.86)
end

local function MergeDefaults(db)
    for key, value in pairs(defaults) do
        if db[key] == nil then
            if type(value) == "table" then
                local copy = {}
                for innerKey, innerValue in pairs(value) do
                    copy[innerKey] = innerValue
                end
                db[key] = copy
            else
                db[key] = value
            end
        end
    end
end

function events:ADDON_LOADED(loaded)
    if loaded ~= addonName then
        return
    end
    -- Beta note: Forever has been observed writing SavedVariables and then
    -- failing to restore them. Code the correct pattern anyway.
    ForeverBeaconDB = ForeverBeaconDB or {}
    MergeDefaults(ForeverBeaconDB)
    ns.db = ForeverBeaconDB
    ns:BuildPanel()
    self:UnregisterEvent("ADDON_LOADED")
end

function events:PLAYER_LOGIN()
    if not ns.db then
        return
    end
    if not ns.db.welcomeShown then
        ns.db.welcomeShown = true
        Say("online. /fb help. This panel draws health. It never does maths on it.")
    end
    ns:Refresh()
end

function events:PLAYER_ENTERING_WORLD()
    ns:Refresh()
end

function events:ZONE_CHANGED_NEW_AREA()
    ns:Refresh()
end

function events:PLAYER_REGEN_ENABLED()
    for i = 1, #pending do
        pending[i]()
    end
    wipe(pending)
end

function events:UNIT_HEALTH(unit)
    if unit == "player" then
        ns:PaintHealth()
    end
end

function events:UNIT_MAXHEALTH(unit)
    if unit == "player" then
        ns:PaintHealth()
    end
end

function ns:PaintHealth()
    local bar = ns.healthBar
    if not bar then
        return
    end
    local cur = UnitHealth("player")
    local maxv = UnitHealthMax("player")
    -- Status bars accept secrets. Arithmetic, comparison, and print do not.
    bar:SetMinMaxValues(0, maxv)
    bar:SetValue(cur)
    if ns.healthLabel then
        if IsSecret(cur) or IsSecret(maxv) then
            ns.healthLabel:SetText("Vitals sealed")
        else
            ns.healthLabel:SetText("Vitals open")
        end
    end
end

function ns:Refresh()
    if not ns.zoneText then
        return
    end
    local zone = SafeString(GetZoneText(), "Unknown wilds")
    local name = SafeString(UnitName("player"), "Adventurer")
    ns.zoneText:SetText(name .. "  ·  " .. zone)
    ns:PaintHealth()
    ns:PaintNotes()
end

function ns:PaintNotes()
    if not ns.noteText or not ns.db then
        return
    end
    local lines = ns.db.notes
    if #lines == 0 then
        ns.noteText:SetText("No field notes.  /fb note your text")
        return
    end
    local buf = ""
    local startAt = #lines - 4
    if startAt < 1 then
        startAt = 1
    end
    for i = startAt, #lines do
        if buf ~= "" then
            buf = buf .. "\n"
        end
        buf = buf .. lines[i]
    end
    ns.noteText:SetText(buf)
end

function ns:BuildPanel()
    local panel = CreateFrame("Frame", "ForeverBeaconPanel", UIParent, "BackdropTemplate")
    panel:SetSize(280, 168)
    panel:SetFrameStrata("MEDIUM")
    panel:SetClampedToScreen(true)
    panel:SetMovable(true)
    panel:EnableMouse(true)
    panel:RegisterForDrag("LeftButton")
    panel:SetScript("OnDragStart", function(self)
        if InCombatLockdown() then
            return
        end
        self:StartMoving()
    end)
    panel:SetScript("OnDragStop", function(self)
        self:StopMovingOrSizing()
        local point, _, rel, x, y = self:GetPoint(1)
        if ns.db and point and rel then
            ns.db.point = { point = point, rel = rel, x = x, y = y }
        end
    end)

    local p = ns.db and ns.db.point
    if p and p.point then
        panel:SetPoint(p.point, UIParent, p.rel or "CENTER", p.x or 0, p.y or 80)
    else
        panel:SetPoint("CENTER", UIParent, "CENTER", 0, 80)
    end

    panel:SetBackdrop({
        bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
        edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
        tile = true,
        tileSize = 16,
        edgeSize = 12,
        insets = { left = 3, right = 3, top = 3, bottom = 3 },
    })
    panel:SetBackdropColor(0.07, 0.06, 0.05, 0.92)
    panel:SetBackdropBorderColor(0.83, 0.66, 0.35, 0.9)

    local title = panel:CreateFontString(nil, "OVERLAY", "GameFontNormal")
    title:SetPoint("TOPLEFT", 12, -10)
    title:SetText("Forever Beacon")

    local zone = panel:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall")
    zone:SetPoint("TOPLEFT", 12, -28)
    zone:SetPoint("TOPRIGHT", -12, -28)
    zone:SetJustifyH("LEFT")
    ns.zoneText = zone

    local bar = CreateFrame("StatusBar", nil, panel)
    bar:SetPoint("TOPLEFT", 12, -48)
    bar:SetPoint("TOPRIGHT", -12, -48)
    bar:SetHeight(12)
    bar:SetStatusBarTexture("Interface\\TargetingFrame\\UI-StatusBar")
    bar:SetStatusBarColor(0.55, 0.12, 0.12, 1)
    bar:SetMinMaxValues(0, 1)
    bar:SetValue(0)
    ns.healthBar = bar

    local healthLabel = panel:CreateFontString(nil, "OVERLAY", "GameFontDisableSmall")
    healthLabel:SetPoint("TOPLEFT", 12, -64)
    healthLabel:SetText("Vitals")
    ns.healthLabel = healthLabel

    local note = panel:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall")
    note:SetPoint("TOPLEFT", 12, -82)
    note:SetPoint("BOTTOMRIGHT", -12, 12)
    note:SetJustifyH("LEFT")
    note:SetJustifyV("TOP")
    ns.noteText = note

    if ns.db and not ns.db.enabled then
        panel:Hide()
    end
    ns.panel = panel
end

local function Probe()
    local build = SafeString(select(2, GetBuildInfo()), "?")
    local iface = SafeString(select(4, GetBuildInfo()), "?")
    local project = SafeString(WOW_PROJECT_ID, "?")
    Say("build " .. build .. "  interface " .. iface .. "  WOW_PROJECT_ID " .. project)
    if not IsSecret(WOW_PROJECT_ID) and WOW_PROJECT_ID == 1 then
        Say("Project id is 1 (Mainline). Forever reports retail. Do not take a Classic branch.")
    end
    if type(C_Spell) == "table" and type(C_Spell.GetSpellInfo) == "function" then
        local info = C_Spell.GetSpellInfo(8690)
        if info and not IsSecret(info.name) then
            Say("C_Spell.GetSpellInfo(8690) -> " .. SafeString(info.name, "sealed"))
        elseif info == nil then
            if type(C_Spell.RequestLoadSpellData) == "function" then
                C_Spell.RequestLoadSpellData(8690)
            end
            Say("Hearthstone is not cached. Requested a load. Probe again after the result event.")
        else
            Say("Spell name is sealed. Leave it sealed.")
        end
    else
        Say("C_Spell.GetSpellInfo is missing on this build. Retest before you ship spell UI.")
    end
    if type(GetSpellInfo) == "function" then
        Say("GetSpellInfo still exists here. Prefer C_Spell anyway.")
    else
        Say("GetSpellInfo is absent. Classic snippets that call it will error.")
    end
    local h = UnitHealth("player")
    if IsSecret(h) then
        Say("UnitHealth(player) is secret. The bar can draw it. Lua must not add to it.")
    else
        Say("UnitHealth(player) is plain right now. Do not assume that stays true in combat.")
    end
end

function events:SPELL_DATA_LOAD_RESULT(spellID, success)
    if spellID ~= 8690 then
        return
    end
    if success and type(C_Spell) == "table" then
        local info = C_Spell.GetSpellInfo(8690)
        Say("Spell data arrived: " .. SafeString(info and info.name, "sealed"))
    else
        Say("Spell data load failed for 8690.")
    end
end

SLASH_FOREVERBEACON1 = "/fb"
SLASH_FOREVERBEACON2 = "/foreverbeacon"
SlashCmdList["FOREVERBEACON"] = function(msg)
    local text = msg or ""
    local cmd, rest = text:match("^(%S*)%s*(.*)$")
    cmd = (cmd or ""):lower()
    if cmd == "" or cmd == "help" then
        Say("/fb note <text>   /fb toggle   /fb probe   /fb reset")
    elseif cmd == "toggle" then
        if not ns.db or not ns.panel then
            return
        end
        Queue(function()
            ns.db.enabled = not ns.db.enabled
            if ns.db.enabled then
                ns.panel:Show()
                ns:Refresh()
            else
                ns.panel:Hide()
            end
        end)
    elseif cmd == "note" then
        if not ns.db then
            return
        end
        if not rest or rest == "" then
            Say("Usage: /fb note ferry timing on the west dock")
            return
        end
        ns.db.notes[#ns.db.notes + 1] = rest
        ns:PaintNotes()
        Say("noted.")
    elseif cmd == "probe" then
        Probe()
    elseif cmd == "reset" then
        ForeverBeaconDB = nil
        ReloadUI()
    else
        Say("Unknown command. /fb help")
    end
end

function ForeverBeacon_OnCompartmentClick()
    if not ns.db or not ns.panel then
        return
    end
    Queue(function()
        if ns.panel:IsShown() then
            ns.db.enabled = false
            ns.panel:Hide()
        else
            ns.db.enabled = true
            ns.panel:Show()
            ns:Refresh()
        end
    end)
end

function ForeverBeacon_OnCompartmentEnter(_, owner)
    GameTooltip:SetOwner(owner, "ANCHOR_LEFT")
    GameTooltip:SetText("Forever Beacon", 1, 0.82, 0.45)
    GameTooltip:AddLine("Toggle the field journal.", 0.9, 0.9, 0.9)
    GameTooltip:Show()
end

function ForeverBeacon_OnCompartmentLeave()
    GameTooltip:Hide()
end

frame:SetScript("OnEvent", function(self, event, ...)
    local handler = events[event]
    if handler then
        handler(self, ...)
    end
end)

frame:RegisterEvent("ADDON_LOADED")
frame:RegisterEvent("PLAYER_LOGIN")
frame:RegisterEvent("PLAYER_ENTERING_WORLD")
frame:RegisterEvent("ZONE_CHANGED_NEW_AREA")
frame:RegisterEvent("PLAYER_REGEN_ENABLED")
frame:RegisterEvent("SPELL_DATA_LOAD_RESULT")
if frame.RegisterUnitEvent then
    frame:RegisterUnitEvent("UNIT_HEALTH", "player")
    frame:RegisterUnitEvent("UNIT_MAXHEALTH", "player")
else
    frame:RegisterEvent("UNIT_HEALTH")
    frame:RegisterEvent("UNIT_MAXHEALTH")
end

Qué no demuestra esto

Este sitio no ha ejecutado Beacon en un cliente de Forever, ni en la compilación 69913 ni en ninguna posterior. Está escrito para seguir las reglas publicadas y los fallos reportados de la beta, de modo que puedas probar esas reglas en tu propio cliente. Si la sonda dice que GetSpellInfo existe, o que la salud es normal, fíate de la sonda y no de esta página. Ese es el objetivo de un addon de referencia.

Qué cambian los valores secretos para Beacon

Warcraft Wiki dice que solo "a limited set of native APIs" aceptan valores secretos de código contaminado, y cita StatusBar:SetValue como ejemplo.Fuente: Secret Values, consultada el 28 sept 2026. Por eso PaintHealth pasa el resultado bruto de UnitHealth directamente a bar:SetValue(cur), sin restas, porcentajes ni comparaciones.

The health example is untested in a Forever client. No source we found verifies that SetMinMaxValues accepts a secret UnitHealthMax value.

Las restricciones son concretas. El código contaminado puede almacenar un secreto, pasarlo a una función de Lua o concatenarlo en una cadena. No puede hacer aritmética con él, compararlo, obtener su longitud ni usarlo como clave de tabla. Una operación bloqueada lanza un error de Lua de inmediato.

Por qué la etiqueta dice "sealed" en lugar de un número

issecretvalue es la única comprobación que hace Beacon antes de elegir la etiqueta de salud. Si UnitHealth o UnitHealthMax devuelve un valor secreto, la etiqueta muestra "Vitals sealed", porque un porcentaje necesita la división que el cliente rechaza.

SafeString protege del mismo modo la zona y el nombre del personaje. Cuando un valor es secreto, sustituye por "Unknown wilds" o "Adventurer", así el panel sigue dibujándose en lugar de lanzar un error.

Cómo interpretar lo que informa /fb Probe

/fb probe imprime la compilación, la interfaz y WOW_PROJECT_ID en una sola línea, y luego añade «Forever reports retail» cuando el ID es 1. WoW Forever Builds registró ese mismo valor en la compilación 69913 de la beta.

La sonda de WFG conservada del 12 de octubre en la compilación 70338 registra en cambio el ID de proyecto 18, y las constantes del cliente de Blizzard definen WOW_PROJECT_CAMELOT = 18. El mensaje condicional "Forever reports retail" de Beacon no aparecerá para ese valor; la condición solo etiqueta los resultados del diagnóstico y no impide que se cargue el addon. Beacon sigue registrando el ID bruto.Fuente: constantes de proyecto Camelot de Blizzard, extracto conservado de 70338 inspeccionado el 13 oct 2026; sonda independiente de WFG capturada el 12 oct. El espejo puede mostrar una compilación posterior.

Para la detección en addons compartidos, compara WOW_PROJECT_ID con WOW_PROJECT_CAMELOT cuando esa constante exista y después comprueba la API de la función. La guía de patrones de addons muestra el ejemplo cotejado con las fuentes. El ejemplo de la wiki conservada con WOW_PROJECT_MAINLINE y LE_EXPANSION_LEVEL_CURRENT == LE_EXPANSION_CLASSIC es histórico y no coincide con el cliente 70338 capturado; su opción de metadatos X-Game del TOC es un enfoque aparte. La muestra descargable de Beacon sigue siendo un addon de referencia sin probar, distinto de la sonda independiente en vivo.

El paso de búsqueda de hechizo

La sonda llama a C_Spell.GetSpellInfo(8690), donde 8690 es el ID del hechizo de la Piedra de hogar. Esa llamada con espacio de nombres devuelve una única tabla spellInfo. El antiguo GetSpellInfo global devuelve valores separados, que es como lo lee el código de Classic.Fuente: C_Spell.GetSpellInfo, consultada el 28 sept 2026.

La wiki documenta un retorno nil para un hechizo que no encuentra. Beacon interpreta nil como «aún no está en caché», llama a C_Spell.RequestLoadSpellData e informa de la respuesta en SPELL_DATA_LOAD_RESULT. La wiki advierte de que este evento puede notificar un fallo cuando solo llegan datos parciales, así que una línea de "load failed" (fallo de carga) no siempre significa que falte el hechizo.

Cómo se cargan las SavedVariables y por qué las notas pueden desaparecer

El cliente carga FrameXML, luego el código de los addons y después las variables guardadas de cada addon, y lanza ADDON_LOADED para ese addon cuando sus variables vuelven.Fuente: Saving variables between game sessions, consultada el 28 sept 2026. PLAYER_LOGIN se lanza cuando todos los addons se han cargado.

Un valor por defecto definido en el ámbito del archivo se sobrescribe cuando llega el valor guardado. Beacon lo evita: no toca ForeverBeaconDB hasta ADDON_LOADED y entonces rellena solo las claves que le faltan a la tabla guardada.

Cómo se veía el error de la beta

Un hilo de los foros de Blizzard abierto el 21 sept 2026 informaba de que los datos guardados se escribían bien en el disco, pero volvían vacíos en el siguiente inicio de sesión. Otros autores de addons lo confirmaron esa misma semana.Fuente: WOWF Beta: Addon SavedVariables appear to write correctly to disk but are not restored at startup, consultada el 28 sept 2026.

Una respuesta del 25 sept 2026 dice que la compilación 70009, con fecha del 23 sept, vuelve a cargar bien las variables guardadas. Es la confirmación de un solo jugador, no una nota de parche de Blizzard, y el código de Beacon no cambió por ello.

Por qué el panel espera para moverse u ocultarse

InCombatLockdownes true desde PLAYER_REGEN_DISABLED hasta justo antes de PLAYER_REGEN_ENABLED.Fuente: InCombatLockdown, consultada el 28 sept 2026. Durante esa ventana, la wiki dice que el bloqueo impide mover un marco protegido restableciendo sus anclajes, aunque los movimientos que inicia el jugador siguen permitidos.

El panel de Beacon no es un marco protegido, así que las comprobaciones son una precaución, no un requisito. /fb toggle y el clic en el compartimento pasan por Queue, que retiene la acción hasta PLAYER_REGEN_ENABLED y entonces la ejecuta.

El arrastre se rechaza, no se pone en cola

OnDragStart no pone nada en cola. Comprueba InCombatLockdown y simplemente ignora el arrastre, aunque la wiki permite los movimientos iniciados por el jugador. Vuelve a arrastrar después del combate y OnDragStop guardará la nueva posición.

La entrada del compartimento de addons, aún sin confirmar

Beacon se registra mediante tres campos del TOC: AddonCompartmentFunc, AddonCompartmentFuncOnEnter y AddonCompartmentFuncOnLeave. La wiki lo llama registro automático: el cliente llama él mismo a las funciones globales indicadas, sin ninguna llamada a RegisterAddon call.Fuente: Addon compartment, consultada el 28 sept 2026. La guía de plantillas de código incluye ese mismo esqueleto por separado.

El controlador del clic alterna ns.db.enabled y muestra u oculta el panel mediante Queue. Los controladores al pasar el ratón solo dibujan una descripción emergente. Nada de esto se ha confirmado en un cliente de Forever.

Lo que este addon no intenta

Beacon nunca llama a CombatLogGetCurrentEventInfo. Las notas de addons de Warcraft Forever indican que no está disponible en este cliente y que UnitHealth amistoso llega como un número secreto.Fuente: Addons, consultada el 28 sept 2026.

Tampoco escribe atributos seguros ni llama a funciones protegidas como ChatFrame_OpenChat. Las mismas notas dicen que una llamada protegida bloqueada no genera ningún error de Lua, ni siquiera dentro de pcall. Las únicas señales son «Interface action failed because of an AddOn» y un contador en el panel de AddOns que solo se reinicia al reiniciar por completo el cliente. La guía de errores comunes de addons trata esas trampas.

Cómo están los addons completos

Beacon es pequeño a propósito. El addon gratis de guías RestedXP es un addon mayor que ya incluye contenido de Forever: su versión del 25 sept 2026, la v4.11.10, lista actualizaciones de rutas de Forever para Mulgore, Durotar y Redridge. Sus notas de la v4.11.8, del 22 sept, dicen que convirtió sus guías de Forever a una etiqueta #forever, una forma de que un código compartido mantenga el contenido de Forever aparte.Fuente: RXPGuides releases on GitHub, consultado el 28 sept 2026.

Versión v4.11.10 de RXPGuides de RestedXP en GitHub, del 25 de septiembre de 2026, con las actualizaciones de Montañas Crestagrana, Los Baldíos, Mulgore y Durotar para Forever
Compartir imagen: versión v4.11.10 de RXPGuides de RestedXP en GitHub, del 25 de septiembre de 2026, con las actualizaciones de Montañas Crestagrana, Los Baldíos, Mulgore y Durotar para Forever

Las notas de la versión v4.11.10 de RestedXP, con fecha 2026-09-25, listan actualizaciones de Forever para Redridge, Barrens, Mulgore y Durotar.Fuente: RXPGuides releases on GitHub, v4.11.10, capturado el 30 sept 2026.

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.
  • Health bar without math New in ForeverFeeds UnitHealth to a StatusBar without math; names pass through issecretvalue
  • Prueba en el clienteEste sitio no ha ejecutado Beacon en un cliente de Forever
  • Compartimento de addons Novedad en ForeverLos campos del TOC están documentados para Mainline; aún no se han probado aquí en un cliente de Forever

Fuentes

  1. TOC formatWarcraft Wiki
  2. Secret ValuesWarcraft Wiki
  3. Addon compartmentWarcraft Wiki
  4. What the WoW Forever beta breaks for addons: secret health values, dead secure snippets, new APIsWoW Forever Builds
  5. AddonsWarcraft Forever
  6. WoW: Forever Will Have Addon Changes from MidnightWowhead
  7. WOWF Beta: Addon SavedVariables appear to write correctly to disk but are not restored at startupWorld of Warcraft Forums (player bug report)
  8. Saving variables between game sessionsWarcraft Wiki
  9. WOW_PROJECT_IDWarcraft Wiki
  10. InCombatLockdownWarcraft Wiki
  11. C_Spell.GetSpellInfoWarcraft Wiki
  12. SPELL_DATA_LOAD_RESULTWarcraft Wiki
  13. RXPGuides releasesRestedXP (GitHub)
  14. Blizzard client source: ProjectConstants.lua (retained build 70338; mirror may change)Blizzard Entertainment (source mirrored by Gethe)
  15. WoW Forever Guides · code review only