WoW Forever Addon-Fallen: 12 KI-Fehler und 4 Beta-Fallen
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.

content.zygorguides.com/support/manual/enabling.## Interface: 120001## Interface: 1600102. 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.
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
endDas ä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.
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. 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.
print("Hello " .. UnitName("player"))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.
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. 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.
frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")-- 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.
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 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.
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
endDen 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.
local t = C_Timer.After(5, func)
t:Cancel()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.
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. 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.
if UnitIsEnemy("player", unit) thenlocal them = UnitFactionGroup(unit)
local mine = UnitFactionGroup("player")
if them and mine and them ~= mine then12. 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.
local SLASH_fb1 = "/fb"
SlashCmdList.fb = function() endSLASH_FOREVERBEACON1 = "/fb"
SlashCmdList["FOREVERBEACON"] = function(msg)
endKomplette 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.
PlaySoundFile("Sound\\Interface\\LevelUp.ogg")-- 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.
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. 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.
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. 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.
InterfaceOptionsFrame_OpenToCategory(MyAddonOptionsPanel)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.
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.

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
- 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)
