Pièges des addons WoW Forever : 12 erreurs d’IA et 4 pièges de la bêta
Les modèles copient l’interface 120001 ou 11503 là où le wiki indique 16001, et font des calculs sur UnitHealth, devenu un nombre secret sur la build 69913.
Demandez tout sur les pièges des addons à notre IA accro
Numéros d’interface, calculs sur les valeurs secrètes de vie, WOW_PROJECT_ID, limites du journal de combat, pièges sonores de la bêta 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.
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.
- Mauvais numéro d’interface
- 16001
- Calcul sur la vie secrète
- h + 1 échoue
- WOW_PROJECT_ID
- 18 (Camelot)
- Journal de combat
- Reported unavailable
Cette analyse fait partie du guide du développeur d’addons WoW Forever. Pour comprendre pourquoi ces erreurs se produisent, lisez les patterns d’addons WoW Forever et l’aide-mémoire de l’API Forever. Vous pouvez éviter la plupart d’entre elles avec les prompts d’IA prêts à l’emploi.
Douze pièges
01. Publier l’interface 120001 ou 11503
Les modèles copient des guides Midnight ou des modèles Classic. Le Warcraft Wiki indique 16001 pour la bêta de Forever. Un autre numéro peut amener le client que vous testez à signaler l’addon comme obsolète.

content.zygorguides.com/support/manual/enabling.## Interface: 120001## Interface: 1600102. Se brancher sur WOW_PROJECT_ID
Sur la build 1.60.1.69913, WOW_PROJECT_ID renvoyait 1, la valeur Mainline, selon les rapports. La sonde conservée du 12 octobre sur la build 70338 relève plutôt 18, ce qui correspond à la constante WOW_PROJECT_CAMELOT de Blizzard. Une branche réservée à Classic ignore Forever ; une branche fourre-tout peut le confondre avec un autre client. Comparez la constante nommée, puis vérifiez l’API de la fonctionnalité.Source : constantes de projet Camelot de Blizzard, extrait conservé 70338 inspecté le 13 oct. 2026 ; sonde WFG capturée le 12 oct.. Le miroir peut afficher une build plus récente.
if WOW_PROJECT_ID ~= WOW_PROJECT_MAINLINE then
-- Assumes every non-Mainline client is Classic; 70338 Forever enters here.
endlocal 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
endL’ancien exemple du Warcraft Wiki combinait WOW_PROJECT_MAINLINE avec LE_EXPANSION_LEVEL_CURRENT == LE_EXPANSION_CLASSIC. Cette première condition est fausse sur le client 70338 capturé. Le snippet révisé a été vérifié dans les sources, pas testé en jeu ; ns:UseForeverPath() représente le code de votre propre addon.
03. Ajouter un à UnitHealth
Lors d’un test sur la build 69913, type(UnitHealth("player")) affiche number, mais h + 1 échoue. WoW Forever Builds a vu Grid2 lever « attempt to perform arithmetic on a secret number value ».
local h = UnitHealth("player")
local pct = h / UnitHealthMax("player")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. Afficher un nom qui peut être secret
Warcraft Forever indique que les noms d’unités et de créatures peuvent être des chaînes secrètes. Il précise aussi qu’en afficher une provoque une erreur et peut vider votre cadre. Vérifiez d’abord, puis utilisez une valeur de repli de votre choix.
print("Hello " .. UnitName("player"))local name = UnitName("player")
if type(issecretvalue) == "function" and issecretvalue(name) then
name = "adventurer"
end
print("Hello " .. name)05. GetSpellInfo et GetItemInfo
Les deux étaient absentes sur la build 69913, ainsi que GetSpellBookItemName et les anciens globaux de talents. C_Spell.GetSpellInfo renvoie une seule table. C_Item.GetItemInfo renvoie la même liste de valeurs que l’ancien global.
local name, _, icon = GetSpellInfo(8690)local info = C_Spell.GetSpellInfo(8690)
if not info then
C_Spell.RequestLoadSpellData(8690)
return
end
local name, icon = info.name, info.iconID06. Un compteur de dégâts, poliment déguisé
Sur Midnight, l’enregistrement de l’événement du journal de combat provoque une erreur. Les testeurs le disent indisponible sur Forever. Blizzard a indiqué que Forever inclut un compteur de dégâts et un Cooldown Manager intégrés.
frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")-- Presentation only. Let the built-in meter count.
frame:RegisterUnitEvent("UNIT_HEALTH", "player")07. Click-cast via un snippet sécurisé
Les snippets sécurisés ne compilaient pas sur la build 69913. Même si une build ultérieure corrige cela, Warcraft Forever indique que les attributs sécurisés des cadres d’unité de Blizzard sont protégés, et pcall ne fait pas disparaître l’échec.
SecureHandlerWrapScript(button, "OnClick", button, [[
self:SetAttribute("type", "spell")
]])-- 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 au niveau du fichier
Les SavedVariables sont nil pendant le chargement de votre fichier. Le client charge les données sauvegardées après l’exécution de vos fichiers et remplace tout ce que votre fichier a défini. Une valeur par défaut assignée en haut est soit écrasée, soit lue trop tôt. Des joueurs ont aussi signalé que la bêta perdait des données sauvegardées entre les sessions jusqu’à la build 70009.
MyAddonDB = MyAddonDB or { enabled = true }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
endConsultez le cycle de vie complet dans le modèle SavedVariables.
09. Annuler C_Timer.After
After ne renvoie rien. L’objet minuteur provient de NewTimer ou NewTicker.
local t = C_Timer.After(5, func)
t:Cancel()local t = C_Timer.NewTimer(5, func)
t:Cancel()10. Appels protégés cachés dans pcall
Warcraft Forever indique que ChatFrame_OpenChat, C_SuperTrack.SetSuperTrackedUserWaypoint et les attributs sécurisés des cadres de Blizzard échouent sans erreur Lua. Le seul symptôme est un compteur d’actions d’interface que /reload ne réinitialise pas.
pcall(C_SuperTrack.SetSuperTrackedUserWaypoint, true)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. Des tests de faction qui mentent
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.
if UnitIsEnemy("player", unit) thenlocal them = UnitFactionGroup(unit)
local mine = UnitFactionGroup("player")
if them and mine and them ~= mine then12. Des commandes slash qui ne s’enregistrent jamais
Le global doit être SLASH_NAME1 et la clé SlashCmdList doit être le même NAME, orthographié de la même façon. Une variable locale, ou une clé qui ne correspond pas, ne s’enregistre jamais.
local SLASH_fb1 = "/fb"
SlashCmdList.fb = function() endSLASH_FOREVERBEACON1 = "/fb"
SlashCmdList["FOREVERBEACON"] = function(msg)
endPour des barres sûres complètes, des files d’attente de combat et des compartiments d’addons, consultez les modèles de code.
Quatre autres pièges de la bêta
Les douze ci-dessus couvrent les plus gros problèmes. Ces quatre-ci sont plus mineurs. Les pièges 13 et 14 sont des rapports de la communauté sur la bêta, non vérifiés, issus de Warcraft Forever. Les pièges 15 et 16 proviennent des pages de l’API Mainline du Warcraft Wiki, la famille d’interface que Forever utilise. Ils n’ont pas été retestés sur une build Forever.
13. Jouer un fichier son à la manière de Classic
Warcraft Forever indique que PlaySoundFile avec un chemin Sound\Interface\*.ogg échoue silencieusement sur ce client. Aucune erreur, rien n’est affiché ; le son ne se joue jamais.
PlaySoundFile("Sound\\Interface\\LevelUp.ogg")-- Warcraft Wiki, PlaySound: play by SoundKitID, not a file path.
PlaySound(SOUNDKIT.READY_CHECK)La page PlaySound du wiki documente la lecture par SoundKitID ou par une clé SOUNDKIT. Warcraft Forever précise aussi de vérifier le volume principal avant d’accuser l’addon.
14. Faire confiance à une barre de nom dès son apparition
Warcraft Forever indique que NAME_PLATE_UNIT_ADDED se déclenche avant que l’unité soit renseignée, et que les cadres de barres de nom n’ont pas de namePlateUnitToken sur ce client. Lire l’unité dans le même gestionnaire ne donne rien d’utile.
frame:SetScript("OnEvent", function(self, event, unit)
self.name:SetText(UnitName(unit))
end)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. Supposer qu’une recherche de métadonnées échoue en silence
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.
local ver = C_AddOns.GetAddOnMetadata("SomeOtherAddon", "Version")
if not ver then return endlocal ok, ver = pcall(C_AddOns.GetAddOnMetadata, "SomeOtherAddon", "Version")
if not ok or not ver then return end16. Brancher le panneau de paramètres via les anciens globaux
Le wiki date la refonte de l’API Settings du patch 10.0.0, avec d’autres changements majeurs dans le 11.0.2. Son pattern documenté enregistre une catégorie et l’ouvre via Settings, et non via l’ancien InterfaceOptionsFrame_OpenToCategory qu’appellent les modèles de Classic Era.
InterfaceOptionsFrame_OpenToCategory(MyAddonOptionsPanel)local category = Settings.RegisterVerticalLayoutCategory("My Addon")
Settings.RegisterAddOnCategory(category)
-- Later, from a slash command:
Settings.OpenToCategory(category:GetID())Enregistrez la catégorie une seule fois au chargement, puis ouvrez-la depuis une commande slash ou une entrée du compartiment d’addons, comme dans l’addon d’exemple Forever Beacon.
Pourquoi les modèles font ces erreurs par défaut
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.
La solution, c’est le contexte, pas un prompt plus malin. Donnez au modèle le numéro d’interface, l’ID de projet et les API que la bêta signale, et partez des modèles de prompts pour les addons Forever.
Les addons établis s’adaptent de la même façon, en testant sur la bêta. L’addon de guides gratuit de RestedXP a publié des correctifs d’itinéraire Forever dans ses versions GitHub jusqu’en septembre 2026, et Zygor Guides indique que ses guides Forever arriveront chez les abonnés Elite au lancement.

Vérifier un correctif avant de le publier
Aucun de ces seize correctifs n’est garanti de survivre à la prochaine build de la bêta. Retestez chacun sur la build que vous utilisez.
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.
Pour le piège 08, déconnectez-vous complètement puis reconnectez-vous, pas seulement /reload, et vérifiez que votre table sauvegardée a survécu. Des joueurs ont signalé un bug de restauration des SavedVariables à partir du 21 sept. 2026, et un joueur a dit que la build 70009 l’avait corrigé le 25 sept.. Blizzard n’a pas confirmé de correctif.
Testez le piège 11 contre un joueur ennemi non marqué, dans un sanctuaire ou sur un autre shard. Warcraft Forever indique que UnitIsEnemy et UnitCanAttack renvoient tous deux false dans ce cas.
Pour les appels protégés des pièges 07 et 10, surveillez le compteur d’actions d’interface du panneau AddOns plutôt que la valeur de retour de pcall. /reload ne réinitialise pas ce compteur : redémarrez donc le client avant de retester, sinon un ancien compte fera paraître cassé un correctif qui fonctionne.
Notez le numéro de build à côté de tout correctif sur lequel vous comptez, comme le fait l’aide-mémoire de l’API pour les lignes observées sur la build 69913. Un piège corrigé sur une build peut rouvrir sur la suivante.
Faits clés
- Mauvais numéro d’interface ModifiéLes modèles copient 120001 ou 11503 ; le wiki indique 16001 pour la bêta de Forever
- Calcul sur la vie secrète Modifiétype() indique number, mais h + 1 échoue ; pcall renvoie false au lieu d’une somme
- WOW_PROJECT_ID Modifié18 (WOW_PROJECT_CAMELOT) dans la sonde WFG du 12 octobre sur la build 70338 ; l’ancienne build 69913 renvoyait 1 selon les rapportsClassic : Classic Era renvoie 2 (WOW_PROJECT_CLASSIC).
- Journal de combat SuppriméL’enregistrement de COMBAT_LOG_EVENT_UNFILTERED provoque une erreur sur Midnight ; signalé indisponible sur Forever
Sources
- What the WoW Forever beta breaks for addons: secret health values, dead secure snippets, new APIsWoW Forever Builds
- AddonsWarcraft Forever
- TOC formatWarcraft Wiki
- Secret ValuesWarcraft Wiki
- Patch 12.0.0/API changesWarcraft Wiki
- C_Item.GetItemInfoWarcraft Wiki
- Saving variables between game sessionsWarcraft Wiki
- WOWF Beta: Addon SavedVariables appear to write correctly to disk but are not restored at startupWorld of Warcraft Forums (player bug report)
- C_Map.SetUserWaypointWarcraft Wiki
- C_AddOns.GetAddOnMetadataWarcraft Wiki
- Settings APIWarcraft Wiki
- PlaySoundWarcraft Wiki
- RXPGuides releasesRestedXP (GitHub)
- Zygor's World of Warcraft Forever guides launching this NovemberZygor Guides
- Blizzard client source: ProjectConstants.lua (retained build 70338; mirror may change)Blizzard Entertainment (source mirrored by Gethe)
