Forever Beacon : addon de référence pour WoW Forever
Téléchargez Forever Beacon pour voir du code d’interface 16001 qui protège les valeurs secrètes au lieu de faire des calculs dessus. Ce site a relu son code, mais ne l’a pas exécuté dans un client Forever.
Demandez tout sur Forever Beacon à notre IA accro
Configuration de la barre de vie, installation bêta, résultats de sonde, entrée du compartiment, notes sauvegardées et plus
Tout ce que couvrent nos guides. Les réponses proviennent de cette page et du reste de nos guides, avec les vraies valeurs en graphique et les sections de guide liées. C’est une IA : vérifiez la source avant de la citer.
Un petit addon de test pour la bêta de Forever. Il garde des notes, dessine votre barre de vie sans calcul dessus et affiche ce que le client rapporte de lui-même. Il ne mesure pas les dégâts, ne lit pas le journal de combat et ne lance aucun sort à votre place.
- Interface TOC
- 16001
- Health bar without math
- Aucun calcul sur la vie
- Test en client
- Pas encore exécuté
- Addon compartment
- Non testé ici
Cet addon de référence fait partie du guide du développeur d’addons WoW Forever. Pour comprendre pourquoi il gère ainsi les valeurs de vie et le positionnement des cadres, lisez WoW Forever addon patterns et la Forever API cheat sheet. Pour des extraits plus courts, consultez les modèles de code.
Beacon est arrivé sur ce site avec le pack source du guide, qui en nomme l’auteur « Forever Codex ». Le code ci-dessous est identique octet pour octet à ce que vous téléchargez, hors fins de ligne.
Téléchargement
Le zip contient un dossier ForeverBeacon avec les deux fichiers. Décompressez-le dans votre dossier AddOns de la bêta.
Ce que fait l’addon
| Fonctionnalité | Effet |
|---|---|
| Panneau déplaçable | Le glisser-déposer ne fait rien tant que InCombatLockdown est vrai. Le panneau retient l’endroit où vous le déposez. |
| Noms protégés | La zone et le nom du personnage ne s’affichent que si issecretvalue indique qu’ils sont lisibles. Sinon, vous êtes « Adventurer ». |
| Health bar without math | La barre d’état reçoit directement UnitHealth et UnitHealthMax. Le libellé indique scellé ou ouvert, et ne calcule ni n’affiche jamais de pourcentage. |
| Commandes slash | /fb note enregistre une ligne. /fb toggle affiche ou masque le panneau. /fb probe rapporte la build, l’interface, l’ID de projet, C_Spell et si la vie est secrète. /fb reset efface les données enregistrées de Beacon et recharge l’interface. |
| Entrée du compartiment d’addons | Enregistrée dans le TOC, donc aucune bibliothèque de bouton de minicarte n’est nécessaire. Pas encore confirmée sur un client Forever. |
| Chargement des données de sort | La sonde cherche la Pierre de foyer avec C_Spell.GetSpellInfo(8690) et demande un chargement si l’enregistrement n’est pas en cache. |
Installer sur la bêta
- Créez le dossier
World of Warcraft\_classic_beta_\Interface\AddOns\ForeverBeacon\, ou décompressez-y l’archive. - Enregistrez le TOC sous
ForeverBeacon.tocet le Lua sousForeverBeacon.lua. - Lancez le client du jeu.
- Tapez
/fb help. - Si les notes disparaissent entre deux sessions, vérifiez votre build.
Le nom du dossier et celui du TOC doivent correspondre. Si vous ajoutez le dossier pendant que le jeu tourne et que Beacon n’apparaît pas après /reload, redémarrez le client. Si l’addon est absent ou marqué comme périmé, vérifiez le numéro d’interface avec /dump select(4, GetBuildInfo()) et mettez le TOC à jour. Des joueurs ont signalé un bug de chargement de SavedVariables dans la bêta à la mi-septembre, et un signalement du 25 septembre indique que la build 70009 l’a corrigé. Voir les pièges courants des addons écrits par IA.
Code source
## 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-- 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")
endCe que cela ne prouve pas
Ce site n’a pas exécuté Beacon dans un client Forever, ni sur la build 69913 ni sur une build ultérieure. Il est écrit pour suivre les règles publiées et les échecs rapportés de la bêta, afin que vous puissiez tester ces règles sur votre propre client. Si la sonde indique que GetSpellInfo existe, ou que la vie est lisible, croyez la sonde plutôt que cette page. C’est le but d’un addon de référence.
Ce que les valeurs secrètes changent pour Beacon
Le Warcraft Wiki dit seulement qu’« a limited set of native APIs » accepte des valeurs secrètes venant d’un code tainted, et cite StatusBar:SetValue comme exemple.Source : Secret Values, vérifié le 28 sept. 2026. C’est pourquoi PaintHealth transmet le résultat brut de UnitHealth directement à bar:SetValue(cur), sans soustraction, pourcentage ni comparaison.
The health example is untested in a Forever client. No source we found verifies that SetMinMaxValues accepts a secret UnitHealthMax value.
Les restrictions sont précises. Un code tainted peut stocker un secret, le passer à une fonction Lua ou le concaténer dans une chaîne. Il ne peut ni faire d’arithmétique dessus, ni le comparer, ni en prendre la longueur, ni l’utiliser comme clé de table. Une opération bloquée déclenche immédiatement une erreur Lua.
Pourquoi le libellé affiche « sealed » au lieu d’un nombre
issecretvalue est le seul test que Beacon exécute avant de choisir le libellé de vie. Si UnitHealth ou UnitHealthMax renvoie une valeur secrète, le libellé affiche « Vitals sealed », car un pourcentage exige la division que le client refuse.
SafeString protège de la même façon la zone et le nom du personnage. Quand une valeur est secrète, il la remplace par « Unknown wilds » ou « Adventurer », afin que le panneau continue de s’afficher au lieu de lever une erreur.
Lire ce que rapporte /fb Probe
/fb probe affiche la build, l’interface et WOW_PROJECT_ID sur une seule ligne, puis ajoute « Forever reports retail » lorsque l’ID vaut 1. WoW Forever Builds a enregistré cette même valeur sur la build bêta 69913.
La sonde WFG conservée du 12 octobre sur la build 70338 relève plutôt l’ID de projet 18, et les constantes du client de Blizzard définissent WOW_PROJECT_CAMELOT = 18. Le message conditionnel "Forever reports retail" de Beacon ne s’affichera pas pour cette valeur ; la condition ne fait qu’annoter les résultats de diagnostic et n’empêche pas le chargement de l’addon. Beacon consigne toujours l’ID brut.Source : constantes de projet Camelot de Blizzard, extrait conservé 70338 inspecté le 13 oct. 2026 ; sonde WFG distincte capturée le 12 oct.. Le miroir peut afficher une build plus récente.
Pour détecter le client dans un addon commun à plusieurs clients, comparez WOW_PROJECT_ID à WOW_PROJECT_CAMELOT lorsque cette constante existe, puis vérifiez l’API de la fonctionnalité. Le guide des patterns d’addon présente l’exemple vérifié dans les sources. L’exemple conservé du wiki avec WOW_PROJECT_MAINLINE et LE_EXPANSION_LEVEL_CURRENT == LE_EXPANSION_CLASSIC est historique et ne correspond pas au client 70338 capturé ; son option de métadonnées TOC X-Game est une approche distincte. L’exemple Beacon téléchargé reste un addon de référence non testé, distinct de la sonde en direct.
L’étape de recherche du sort
La sonde appelle C_Spell.GetSpellInfo(8690), où 8690 est l’ID du sort de la Pierre de foyer. Cet appel à espace de noms renvoie une seule table spellInfo. L’ancienne fonction globale GetSpellInfo renvoie des valeurs séparées, ce qui est la façon dont le code Classic la lit.Source : C_Spell.GetSpellInfo, vérifié le 28 sept. 2026.
Le wiki documente un retour nil pour un sort introuvable. Beacon interprète nil comme « pas encore en cache », appelle C_Spell.RequestLoadSpellData et rapporte la réponse sur SPELL_DATA_LOAD_RESULT. Le wiki prévient que cet événement peut signaler un échec quand seules des données partielles arrivent, donc une ligne « load failed » ne signifie pas toujours que le sort est introuvable.
Comment les SavedVariables se chargent, et pourquoi des notes peuvent disparaître
Le client charge FrameXML, puis le code des addons, puis les variables sauvegardées de chaque addon, et déclenche ADDON_LOADED pour cet addon dès que ses variables sont revenues.Source : Saving variables between game sessions, vérifié le 28 sept. 2026. PLAYER_LOGIN se déclenche une fois tous les addons chargés.
Une valeur par défaut définie au niveau du fichier est écrasée à l’arrivée de la valeur sauvegardée. Beacon l’évite : il ne touche pas à ForeverBeaconDB avant ADDON_LOADED, puis ne remplit que les clés absentes de la table sauvegardée.
À quoi ressemblait le bug de la bêta
Un fil des forums Blizzard ouvert le 21 sept. 2026 signalait que les données sauvegardées étaient bien écrites sur le disque mais revenaient vides à la connexion suivante. D’autres auteurs d’addons l’ont confirmé la même semaine.Source : WOWF Beta: Addon SavedVariables appear to write correctly to disk but are not restored at startup, vérifié le 28 sept. 2026.
Une réponse du 25 sept. 2026 indique que la build 70009, datée du 23 sept., recharge de nouveau correctement les variables sauvegardées. Il s’agit de la confirmation d’un seul joueur, pas d’une note de patch de Blizzard, et le code de Beacon n’a pas changé pour autant.
Pourquoi le panneau attend pour se déplacer ou se masquer
InCombatLockdownest vrai de PLAYER_REGEN_DISABLED jusqu’à juste avant PLAYER_REGEN_ENABLED.Source : InCombatLockdown, vérifié le 28 sept. 2026. Pendant cette fenêtre, le wiki indique que le verrouillage empêche de déplacer un cadre protégé en réinitialisant ses ancres, mais les déplacements lancés par le joueur restent autorisés.
Le panneau de Beacon n’est pas un cadre protégé : ces vérifications sont donc une précaution, pas une obligation. /fb toggle et le clic dans le compartiment passent tous deux par Queue, qui retient l’action jusqu’à PLAYER_REGEN_ENABLED puis l’exécute.
Le glisser est refusé, pas mis en file
OnDragStart ne met rien en file. Il vérifie InCombatLockdown et ignore simplement le glissement, même si le wiki autorise les déplacements initiés par le joueur. Faites glisser de nouveau après le combat, et OnDragStop enregistre la nouvelle position.
L’entrée du compartiment d’addons, toujours non confirmée
Beacon s’enregistre via trois champs TOC, AddonCompartmentFunc, AddonCompartmentFuncOnEnter et AddonCompartmentFuncOnLeave. Le wiki parle d’enregistrement automatique : le client appelle lui-même les fonctions globales nommées, sans aucun RegisterAddon appel.Source : Addon compartment, vérifié le 28 sept. 2026. Le guide des modèles de code propose le même stub seul.
Le gestionnaire de clic bascule ns.db.enabled et affiche ou masque le panneau via Queue. Les gestionnaires de survol ne font qu’afficher une infobulle. Rien de tout cela n’a été confirmé sur un client Forever.
Ce que cet addon ne tente pas
Beacon n’appelle jamais CombatLogGetCurrentEventInfo. Les notes d’addon de Warcraft Forever indiquent qu’elle est indisponible sur ce client, et que UnitHealth pour une cible amicale arrive sous forme de nombre secret.Source : Addons, vérifié le 28 sept. 2026.
Il n’écrit pas non plus d’attributs sécurisés et n’appelle aucune fonction protégée comme ChatFrame_OpenChat. Les mêmes notes précisent qu’un appel protégé bloqué ne lève aucune erreur Lua, même dans pcall. Les seuls signes sont « Interface action failed because of an AddOn » et un compteur du panneau AddOns qui ne se réinitialise qu’avec un redémarrage complet du client. Le guide des pièges des addons traite de ces écueils.
Où en sont les addons complets
Beacon reste volontairement petit. L’addon de guides gratuit RestedXP est un addon plus volumineux qui livre déjà du contenu Forever : sa version v4.11.10 du 25 sept. 2026 répertorie des mises à jour d’itinéraires Forever pour Mulgore, Durotar et Redridge. Ses notes de la v4.11.8, du 22 sept., indiquent qu’il a converti ses guides Forever vers une balise #forever, une façon pour une base de code partagée de garder le contenu Forever à part.Source : RXPGuides releases on GitHub, vérifié le 28 sept. 2026.

Faits clés
- Interface TOC Modifiée16001 dans la ligne Forever Beta du tableau TOC du Warcraft Wiki ; vérifiez avec /dump select(4, GetBuildInfo())Classic : Classic Era indique 11509 dans le même tableau.
- Health bar without math New in ForeverFeeds UnitHealth to a StatusBar without math; names pass through issecretvalue
- Test en clientCe site n’a pas exécuté Beacon dans un client Forever
- Addon compartment Nouveau dans ForeverLes champs TOC sont documentés pour Mainline ; pas encore testés ici sur un client Forever
Sources
- TOC formatWarcraft Wiki
- Secret ValuesWarcraft Wiki
- Addon compartmentWarcraft Wiki
- What the WoW Forever beta breaks for addons: secret health values, dead secure snippets, new APIsWoW Forever Builds
- AddonsWarcraft Forever
- WoW: Forever Will Have Addon Changes from MidnightWowhead
- WOWF Beta: Addon SavedVariables appear to write correctly to disk but are not restored at startupWorld of Warcraft Forums (player bug report)
- Saving variables between game sessionsWarcraft Wiki
- WOW_PROJECT_IDWarcraft Wiki
- InCombatLockdownWarcraft Wiki
- C_Spell.GetSpellInfoWarcraft Wiki
- SPELL_DATA_LOAD_RESULTWarcraft Wiki
- RXPGuides releasesRestedXP (GitHub)
- Blizzard client source: ProjectConstants.lua (retained build 70338; mirror may change)Blizzard Entertainment (source mirrored by Gethe)
- WoW Forever Guides · code review only