Pièges des addons WoW Forever : 12 erreurs d’IA et 4 pièges de la bêta

Publié le Mis à jour le Rapports de la bêta de la build 1.60.1.69913

Partager

Guide des addons page 4 sur 7

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.

Liste des addons WoW avec Zygor Guide Viewer 8 coché et la case Load out of date AddOns cochée en haut
Partager l’image : liste des addons WoW avec Zygor Guide Viewer 8 coché et la case Load out of date AddOns cochée en haut

La liste des addons dans le manuel de Zygor, avec la case Load out of date AddOns cochée en haut à droite.Source : Zygor manual: enabling content.zygorguides.com/support/manual/enabling.
Ce qu’il écrit
## Interface: 120001
Ce que vous publiez
## Interface: 16001

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

Ce qu’il écrit
if WOW_PROJECT_ID ~= WOW_PROJECT_MAINLINE then
    -- Assumes every non-Mainline client is Classic; 70338 Forever enters here.
end
Ce que vous publiez
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

L’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 ».

Ce qu’il écrit
local h = UnitHealth("player")
local pct = h / UnitHealthMax("player")
Ce que vous publiez
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.

Ce qu’il écrit
print("Hello " .. UnitName("player"))
Ce que vous publiez
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.

Ce qu’il écrit
local name, _, icon = GetSpellInfo(8690)
Ce que vous publiez
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 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.

Ce qu’il écrit
frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
Ce que vous publiez
-- 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.

Ce qu’il écrit
SecureHandlerWrapScript(button, "OnClick", button, [[
    self:SetAttribute("type", "spell")
]])
Ce que vous publiez
-- 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.

Ce qu’il écrit
MyAddonDB = MyAddonDB or { enabled = true }
Ce que vous publiez
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

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

Ce qu’il écrit
local t = C_Timer.After(5, func)
t:Cancel()
Ce que vous publiez
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.

Ce qu’il écrit
pcall(C_SuperTrack.SetSuperTrackedUserWaypoint, true)
Ce que vous publiez
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.

Ce qu’il écrit
if UnitIsEnemy("player", unit) then
Ce que vous publiez
local them = UnitFactionGroup(unit)
local mine = UnitFactionGroup("player")
if them and mine and them ~= mine then

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

Ce qu’il écrit
local SLASH_fb1 = "/fb"
SlashCmdList.fb = function() end
Ce que vous publiez
SLASH_FOREVERBEACON1 = "/fb"
SlashCmdList["FOREVERBEACON"] = function(msg)
end

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

Ce qu’il écrit
PlaySoundFile("Sound\\Interface\\LevelUp.ogg")
Ce que vous publiez
-- 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.

Ce qu’il écrit
frame:SetScript("OnEvent", function(self, event, unit)
    self.name:SetText(UnitName(unit))
end)
Ce que vous publiez
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.

Ce qu’il écrit
local ver = C_AddOns.GetAddOnMetadata("SomeOtherAddon", "Version")
if not ver then return end
Ce que vous publiez
local ok, ver = pcall(C_AddOns.GetAddOnMetadata, "SomeOtherAddon", "Version")
if not ok or not ver then return end

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

Ce qu’il écrit
InterfaceOptionsFrame_OpenToCategory(MyAddonOptionsPanel)
Ce que vous publiez
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.

Kenneth Henseler passe en revue quatre erreurs où une IA a affirmé qu’une fonction n’existait pas alors qu’elle existait, le 25 septembre 2026.

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.

Version v4.11.12 de RestedXP RXPGuides sur GitHub du 30 septembre 2026, indiquant les changements pour les Tarides, Mulgore, Teldrassil et les guides de donjon dans Forever
Partager l’image : version v4.11.12 de RestedXP RXPGuides sur GitHub du 30 septembre 2026, indiquant les changements pour les Tarides, Mulgore, Teldrassil et les guides de donjon dans Forever

Les notes de version v4.11.12 de RestedXP répertorient des changements Forever pour les Tarides, Mulgore, Teldrassil et ses guides de donjon.Source : RXPGuides releases on GitHub, capturé le 30 sept. 2026.

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

  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)