WoW Forever Addon-Fallen: 12 KI-Fehler und 4 Beta-Fallen

Veröffentlicht am Aktualisiert am Beta-Berichte aus Build 1.60.1.69913

Teilen

Addon-Guide Seite 4 von 7

Modelle übernehmen Interface 120001 oder 11503, wo das Wiki 16001 nennt, und sie rechnen mit UnitHealth, das in Build 69913 als geheime Zahl zurückkam.

Frag unsere verschwitzte Zocker-KI zu Addon-Fallstricken

Interface-Nummern, Rechnen mit Secret Values für Gesundheit, WOW_PROJECT_ID, Kampflog-Lücken, Beta-Soundfallen und mehr

Alles, was unsere Guides abdecken. Die Antworten stammen von dieser Seite und aus unseren übrigen Guides, mit den echten Werten als Diagramm und verlinkten Guide-Abschnitten. Es ist KI, also prüfe die Quelle, bevor du zitierst.

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.

Falsche Interface-Nummer
16001
Rechnen mit geheimer Gesundheit
h + 1 scheitert
WOW_PROJECT_ID
18 (Camelot)
Kampflog
Reported unavailable

Diese Übersicht gehört zum WoW Forever Addon-Entwicklerguide. Warum diese Fehler passieren, liest du in den WoW Forever Addon-Patterns und im Forever-API-Cheatsheet. Die meisten lassen sich mit den fertigen KI-Prompts vermeiden.

Zwölf Fallen

01. Interface 120001 oder 11503 ausliefern

Modelle übernehmen Midnight-Guides oder Classic-Vorlagen. Das Warcraft Wiki nennt für die Forever-Beta 16001. Bei einer anderen Nummer kann der Client, den du testest, das Addon als veraltet markieren.

WoW-AddOn-Liste mit angehaktem Zygor Guide Viewer 8 und angehaktem Kästchen „Load out of date AddOns“ oben
Bild teilen: WoW-AddOn-Liste mit angehaktem Zygor Guide Viewer 8 und angehaktem Kästchen „Load out of date AddOns“ oben

Die AddOn-Liste im Zygor-Handbuch, mit angehaktem Kästchen „Load out of date AddOns“ oben rechts.Quelle: Zygor manual: enabling content.zygorguides.com/support/manual/enabling.
Das schreibt es
## Interface: 120001
Das lieferst du aus
## Interface: 16001

02. Verzweigen anhand von WOW_PROJECT_ID

Auf Build 1.60.1.69913 gab WOW_PROJECT_ID laut Berichten 1 zurück, den Mainline-Wert. Die aufbewahrte Probe vom 12. Oktober auf Build 70338 zeichnet stattdessen 18 auf, passend zu Blizzards WOW_PROJECT_CAMELOT-Konstante. Ein reiner Classic-Zweig übersieht Forever; ein Auffangzweig kann es mit einem anderen Client verwechseln. Vergleiche die benannte Konstante und prüfe dann die API des Features.Quelle: Blizzards Camelot-Projektkonstanten, aufbewahrter Auszug von 70338, geprüft am 13. Okt. 2026; WFG-Probe erfasst am 12. Okt.. Der Spiegel kann einen späteren Build zeigen.

Das schreibt es
if WOW_PROJECT_ID ~= WOW_PROJECT_MAINLINE then
    -- Assumes every non-Mainline client is Classic; 70338 Forever enters here.
end
Das lieferst du aus
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

Das ältere Beispiel des Warcraft Wiki kombinierte WOW_PROJECT_MAINLINE mit LE_EXPANSION_LEVEL_CURRENT == LE_EXPANSION_CLASSIC. Diese erste Bedingung ist auf dem erfassten Client 70338 falsch. Das überarbeitete Snippet wurde anhand der Quellen geprüft, nicht im Spiel getestet; ns:UseForeverPath() steht für deinen eigenen Addon-Code.

03. Eins zu UnitHealth addieren

In einem Test mit Build 69913 gibt type(UnitHealth("player")) den Wert number aus, doch h + 1 scheitert. WoW Forever Builds sah Grid2 den Fehler „attempt to perform arithmetic on a secret number value“ auslösen.

Das schreibt es
local h = UnitHealth("player")
local pct = h / UnitHealthMax("player")
Das lieferst du aus
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. Einen möglicherweise geheimen Namen ausgeben

Warcraft Forever meldet, dass Einheiten- und Kreaturennamen geheime Strings sein können. Außerdem heißt es dort, dass das Ausgeben eines solchen Namens einen Fehler auslöst und dein Fenster leeren kann. Prüfe zuerst und weiche dann auf einen Wert aus, den du selbst gewählt hast.

Das schreibt es
print("Hello " .. UnitName("player"))
Das lieferst du aus
local name = UnitName("player")
if type(issecretvalue) == "function" and issecretvalue(name) then
    name = "adventurer"
end
print("Hello " .. name)

05. GetSpellInfo und GetItemInfo

Beide fehlten in Build 69913, ebenso GetSpellBookItemName und die alten Talent-Globals. C_Spell.GetSpellInfo gibt eine Tabelle zurück. C_Item.GetItemInfo gibt dieselbe Werteliste zurück wie das alte Global.

Das schreibt es
local name, _, icon = GetSpellInfo(8690)
Das lieferst du aus
local info = C_Spell.GetSpellInfo(8690)
if not info then
    C_Spell.RequestLoadSpellData(8690)
    return
end
local name, icon = info.name, info.iconID

06. Ein Schadensmeter, höflich getarnt

Unter Midnight löst das Registrieren des Kampflog-Events einen Fehler aus. Tester melden es auf Forever als nicht verfügbar. Blizzard sagte, Forever enthalte ein eingebautes Schadensmeter und einen Cooldown Manager.

Das schreibt es
frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
Das lieferst du aus
-- Presentation only. Let the built-in meter count.
frame:RegisterUnitEvent("UNIT_HEALTH", "player")

07. Klick-Zauber über ein Secure Snippet

Secure Snippets ließen sich in Build 69913 nicht kompilieren. Selbst wenn ein späterer Build das behebt, listet Warcraft Forever Secure-Attribute auf Blizzard-Einheitenfenstern als geschützt auf, und pcall lässt den Fehler nicht verschwinden.

Das schreibt es
SecureHandlerWrapScript(button, "OnClick", button, [[
    self:SetAttribute("type", "spell")
]])
Das lieferst du aus
-- 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 im Datei-Scope

SavedVariables sind nil, während deine Datei lädt. Der Client lädt gespeicherte Daten, nachdem deine Dateien gelaufen sind, und ersetzt alles, was deine Datei gesetzt hat. Ein Standardwert ganz oben wird entweder überschrieben oder zu früh gelesen. Spieler meldeten außerdem, dass die Beta bis Build 70009 gespeicherte Daten zwischen Sitzungen verlor.

Das schreibt es
MyAddonDB = MyAddonDB or { enabled = true }
Das lieferst du aus
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

Den ganzen Ablauf siehst du in der SavedVariables-Vorlage.

09. C_Timer.After abbrechen

After gibt nichts zurück. Das Timer-Objekt stammt von NewTimer oder NewTicker.

Das schreibt es
local t = C_Timer.After(5, func)
t:Cancel()
Das lieferst du aus
local t = C_Timer.NewTimer(5, func)
t:Cancel()

10. Geschützte Aufrufe in pcall versteckt

Warcraft Forever meldet, dass ChatFrame_OpenChat, C_SuperTrack.SetSuperTrackedUserWaypoint und Secure-Attribute auf Blizzard-Fenstern ohne Lua-Fehler scheitern. Das einzige Symptom ist ein Zähler für Interface-Aktionen, den /reload nicht zurücksetzt.

Das schreibt es
pcall(C_SuperTrack.SetSuperTrackedUserWaypoint, true)
Das lieferst du aus
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. Fraktionstests, die lügen

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.

Das schreibt es
if UnitIsEnemy("player", unit) then
Das lieferst du aus
local them = UnitFactionGroup(unit)
local mine = UnitFactionGroup("player")
if them and mine and them ~= mine then

12. Slash-Befehle, die sich nie registrieren

Das Global muss SLASH_NAME1 heißen, und der Schlüssel SlashCmdList muss derselbe NAME sein, gleich geschrieben. Eine lokale Variable oder ein nicht passender Schlüssel registriert sich nie.

Das schreibt es
local SLASH_fb1 = "/fb"
SlashCmdList.fb = function() end
Das lieferst du aus
SLASH_FOREVERBEACON1 = "/fb"
SlashCmdList["FOREVERBEACON"] = function(msg)
end

Komplette sichere Leisten, Kampfwarteschlangen und Addon-Compartments findest du in den Code-Vorlagen.

Vier weitere Fallen aus der Beta

Die zwölf oben decken die größten Bruchstellen ab. Diese vier sind kleiner. Die Fallen 13 und 14 sind unbestätigte Beta-Meldungen aus der Community von Warcraft Forever. Die Fallen 15 und 16 stammen von den Mainline-API-Seiten des Warcraft Wiki, der UI-Familie, auf der Forever läuft. Sie wurden auf einem Forever-Build nicht erneut getestet.

13. Eine Sounddatei auf die Classic-Art abspielen

Warcraft Forever meldet, dass PlaySoundFile mit einem Sound\Interface\*.ogg-Pfad auf diesem Client stillschweigend scheitert. Es gibt keinen Fehler und keine Ausgabe; der Sound wird nie abgespielt.

Das schreibt es
PlaySoundFile("Sound\\Interface\\LevelUp.ogg")
Das lieferst du aus
-- Warcraft Wiki, PlaySound: play by SoundKitID, not a file path.
PlaySound(SOUNDKIT.READY_CHECK)

Die Wiki-Seite zu PlaySound beschreibt das Abspielen per SoundKitID oder über einen SOUNDKIT-Schlüssel. Warcraft Forever rät außerdem, die Gesamtlautstärke zu prüfen, bevor du dem Addon die Schuld gibst.

14. Einer Nameplate im Moment ihres Erscheinens vertrauen

Warcraft Forever meldet, dass NAME_PLATE_UNIT_ADDED auslöst, bevor die Einheit befüllt ist, und dass Plate-Frames auf diesem Client kein namePlateUnitToken tragen. Die Einheit im selben Handler zu lesen, liefert nichts Brauchbares.

Das schreibt es
frame:SetScript("OnEvent", function(self, event, unit)
    self.name:SetText(UnitName(unit))
end)
Das lieferst du aus
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. Annehmen, dass ein Metadaten-Abruf still scheitert

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.

Das schreibt es
local ver = C_AddOns.GetAddOnMetadata("SomeOtherAddon", "Version")
if not ver then return end
Das lieferst du aus
local ok, ver = pcall(C_AddOns.GetAddOnMetadata, "SomeOtherAddon", "Version")
if not ok or not ver then return end

16. Das Einstellungsfenster über die alten Globals verdrahten

Das Wiki datiert die Neufassung der Settings-API auf Patch 10.0.0, mit weiteren Breaking Changes in 11.0.2. Das dokumentierte Muster registriert eine Kategorie und öffnet sie über Settings, nicht über das ältere InterfaceOptionsFrame_OpenToCategory, das Classic-Era-Vorlagen aufrufen.

Das schreibt es
InterfaceOptionsFrame_OpenToCategory(MyAddonOptionsPanel)
Das lieferst du aus
local category = Settings.RegisterVerticalLayoutCategory("My Addon")
Settings.RegisterAddOnCategory(category)
-- Later, from a slash command:
Settings.OpenToCategory(category:GetID())

Registriere die Kategorie einmal beim Laden und öffne sie dann über einen Slash-Befehl oder einen Addon-Compartment-Eintrag wie im Forever-Beacon-Beispiel-Addon.

Warum Modelle standardmäßig diese Fehler machen

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 geht vier Fehler durch, bei denen eine KI sagte, eine Funktion existiere nicht, obwohl sie existierte, 25. September 2026.

Die Lösung ist Kontext, kein cleverer Prompt. Nenne dem Modell die Interface-Nummer, die Projekt-ID und die APIs, die die Beta meldet, und starte mit den Prompt-Vorlagen für Forever-Addons.

Etablierte Addons passen sich genauso an: durch Tests in der Beta. Das kostenlose Guide-Addon von RestedXP hat in seinen GitHub-Releases bis September 2026 Forever-Routenkorrekturen ausgeliefert, und Zygor Guides sagt, dass seine Forever-Guides zum Launch bei Elite-Abonnenten ankommen.

RestedXP-RXPGuides-Release v4.11.12 auf GitHub vom 30. September 2026 mit Änderungen an den Forever-Guides für Brachland, Mulgore, Teldrassil und Dungeons
Bild teilen: RestedXP-RXPGuides-Release v4.11.12 auf GitHub vom 30. September 2026 mit Änderungen an den Forever-Guides für Brachland, Mulgore, Teldrassil und Dungeons

Die Release Notes von RestedXP v4.11.12 listen Forever-Änderungen für Brachland, Mulgore, Teldrassil und die Dungeon-Guides.Quelle: RXPGuides releases on GitHub, erfasst am 30. Sept. 2026.

Eine Korrektur prüfen, bevor du sie auslieferst

Keine dieser sechzehn Korrekturen überlebt garantiert den nächsten Beta-Build. Teste jede erneut auf dem Build, den du nutzt.

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.

Melde dich bei Falle 08 vollständig ab und wieder an, nicht nur mit /reload, und prüfe, ob deine gespeicherte Tabelle erhalten geblieben ist. Spieler meldeten einen Fehler bei der SavedVariables-Wiederherstellung seit dem 21. Sept. 2026, und ein Spieler sagte, Build 70009 habe ihn am 25. Sept. behoben. Blizzard hat keine Behebung bestätigt.

Teste Falle 11 gegen einen nicht markierten gegnerischen Spieler, in einem Zufluchtsort oder auf einem anderen Shard. Warcraft Forever meldet, dass UnitIsEnemy und UnitCanAttack dort beide false zurückgeben.

Achte bei den geschützten Aufrufen in den Fallen 07 und 10 auf den Zähler für Interface-Aktionen im AddOns-Fenster statt auf den Rückgabewert von pcall. /reload setzt diesen Zähler nicht zurück. Starte den Client daher vor dem erneuten Test neu, sonst lässt ein alter Zählerstand eine funktionierende Korrektur kaputt wirken.

Notiere die Build-Nummer neben jeder Korrektur, auf die du dich verlässt, so wie das API-Cheatsheet Zeilen markiert, die in Build 69913 beobachtet wurden. Eine in einem Build behobene Falle kann im nächsten wieder auftreten.

Wichtige Fakten

  • Falsche Interface-Nummer GeändertModelle übernehmen 120001 oder 11503; das Wiki nennt 16001 für die Forever-Beta
  • Rechnen mit geheimer Gesundheit Geänderttype() sagt number, aber h + 1 scheitert; pcall gibt false statt einer Summe zurück
  • WOW_PROJECT_ID Geändert18 (WOW_PROJECT_CAMELOT) in der WFG-Probe vom 12. Oktober auf Build 70338; älterer Build 69913 meldete 1Classic: Classic Era gibt 2 (WOW_PROJECT_CLASSIC) zurück.
  • Kampflog EntferntDas Registrieren von COMBAT_LOG_EVENT_UNFILTERED löst unter Midnight einen Fehler aus; auf Forever als nicht verfügbar gemeldet

Quellen

  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)