WoW-Forever-Addon-Code-Vorlagen zum Einfügen

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

Teilen

Addon-Guide Seite 5 von 7

Kopiere diese Vorlagen für Interface 16001: Hello World, SavedVariables, eine Secret-sichere Leiste, das Addon-Compartment und die Kampfsperre. Sie folgen der Mainline-Dokumentation des Warcraft Wiki, prüfe jede also auf deinem Beta-Build.

Frag unsere verschwitzte Zocker-KI zu Addon-Code-Vorlagen

Hello World, SavedVariables, secret-sichere Balken, Addon-Kompartiment 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.

Jeder Block ist ein vollständiges Muster für Interface 16001. Ordnername und TOC-Dateiname müssen übereinstimmen.

TOC-Interface
16001
SavedVariables
Fehler als behoben gemeldet
Addon compartment
Hier ungetestet
Kampfsperre
Bis zur Regeneration einreihen

Diese Bibliothek gehört zum WoW-Forever-Addon-Entwicklerguide. Das Client-Design hinter diesen Snippets findest du in WoW-Forever-Addon-Patterns. Einzelne Signaturen prüfst du mit dem Forever-API-Cheat-Sheet. Ein fertiges, herunterladbares Addon, das Notizen, eine Probe, das Compartment und eine Secret-sichere Leiste verbindet, siehst du dir im Forever-Beacon-Referenzaddon an.

Diese Website hat keine dieser Vorlagen in einem Forever-Client ausgeführt. Sie folgen der Mainline-Dokumentation des Warcraft Wiki, den zitierten Beta-Berichten und dem aufbewahrten Blizzard-Client-Quellcode aus Build 70338. Die separate Projekt-ID-Probe lief im Spiel; dadurch sind diese Beispiele nicht live getestet.

Die Ergänzungen vom 13. Oktober zitieren den aufbewahrten Client-Auszug von 70338. Verlinkte Quellenspiegel können einen späteren Build zeigen.

Funktionen mit mehr als einem Befehl

Eine Lua-Funktion kann mehrere Anweisungen enthalten. Schreibe jede Operation in eine eigene Zeile zwischen function und end; sie laufen beim Aufruf der Funktion der Reihe nach. Dieses Beispiel gibt eine lokale Nachricht aus und spielt einen UI-Sound ab:

Ready.lua
local function AnnounceReady()
    print("[Forever Notes] Ready.")
    PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON)
end

AnnounceReady()

Du brauchst weder mehrere Funktionsdefinitionen noch Semikolons. Ein frühes return beendet die Funktion, und ein nicht abgefangener Fehler stoppt die übrigen Anweisungen.Quelle: Lua 5,1 Reference Manual, function definitions and blocks und error handling, geprüft am 13. Okt. 2026. Lua-Anweisungen unterscheiden sich von Makro-Slash-Befehlen wie /cast. Diese Beispiele geben Text aus und spielen einen Sound ab; sie setzen keine geschützten Kampfaktionen um.

Im Chat lautet die entsprechende Diagnose /run print("Ready."); PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON). Bewahre wiederverwendbaren Code in einer Lua-Datei auf, die in deiner TOC steht. Das Sound-ID-Cheat-Sheet listet die hier verwendeten Konstanten.

Nachrichtenbefehl und Slash-Befehls-Aliase

Für eine Nachricht, die nur du siehst, nutze print("Hello.") oder DEFAULT_CHAT_FRAME:AddMessage("Hello.", 1, 0.82, 0). Im Chat gib /run print("Hello.") ein. Diese Aufrufe geben lokal aus; sie senden weder eine Gruppennachricht noch eine Flüsternachricht.

Um eine Funktion mit mehr als einem Slash-Befehl zu definieren, gib demselben SlashCmdList-Schlüssel nummerierte Aliase. Dieses vollständige Beispiel mit zwei Dateien lässt sowohl /wfgmessage Hello als auch /wfgmsg Hello den übergebenen Text lokal ausgeben:

WFGMessageExample.toc
## Interface: 16001
## Title: WFG Message Example
## Notes: Two slash commands for one local message handler.
## Version: 0.1.0

WFGMessageExample.lua
WFGMessageExample.lua
local function ShowLocalMessage(text)
    if not text:find("%S") then
        print("Usage: /wfgmessage Hello")
        return
    end
    DEFAULT_CHAT_FRAME:AddMessage("[WFG Message] " .. text, 1, 0.82, 0)
end

SLASH_WFGMESSAGEEXAMPLE1 = "/wfgmessage"
SLASH_WFGMESSAGEEXAMPLE2 = "/wfgmsg"
SlashCmdList["WFGMESSAGEEXAMPLE"] = ShowLocalMessage

Nutze den Ordnernamen WFGMessageExample und starte den Client nach dem Hinzufügen neu. Der Registrierungsschlüssel in Großbuchstaben muss zu beiden SLASH_-Globals passen. Registriere Aliase beim Laden der Datei, nicht bei jedem Handler-Aufruf. Blizzards Slash-Befehlsregistrierung verwendet dasselbe Muster nummerierter Globals.Quelle: Blizzards Slash-Befehlsregistrierung, aufbewahrter Client-Build 70338, geprüft am 13. Okt. 2026.

Wenn „Nachrichtenbefehl“ das Senden von Chatnachrichten an andere meint, ist das eine separate Operation: C_ChatInfo.SendChatMessage("Hello.", "PARTY") sendet in den Gruppenchat, wenn der Client es erlaubt. Rufe es nur für eine bewusste Spieleraktion auf und prüfe die aktuellen Chatbeschränkungen. Die generierte Dokumentation kennzeichnet diese API als HasRestrictions; diese Seite behauptet nicht, dass beliebiges automatisiertes Senden erlaubt ist.Quelle: Blizzards ChatInfo-Dokumentation, SendChatMessage, aufbewahrter Client-Build 70338, geprüft am 13. Okt. 2026.

Eine Popup-Nachricht anzeigen

Registriere einen Addon-eigenen Eintrag in StaticPopupDialogs und rufe dann StaticPopup_Show mit diesem Schlüssel auf. Dieses Beispiel zeigt eine feste Infomeldung mit Okay-Button, die sich mit Escape schließen lässt. Schreibe es in eine Lua-Datei, die deine TOC lädt:

PopupMessage.lua
StaticPopupDialogs["WFG_EXAMPLE_READY_MESSAGE"] = {
    text = "Forever Notes is ready.",
    button1 = OKAY,
    timeout = 0,
    whileDead = true,
    hideOnEscape = true,
}

SLASH_WFGPOPUPEXAMPLE1 = "/wfgpopup"
SlashCmdList["WFGPOPUPEXAMPLE"] = function()
    StaticPopup_Show("WFG_EXAMPLE_READY_MESSAGE")
end

Gib nach dem Laden des Addons /wfgpopup ein. Die Nachricht bleibt bis zum Schließen stehen, weil timeout = 0. Nutze deinen eigenen Schlüssel, lass Blizzards Dialogdefinitionen intakt und fordere das Popup bewusst an, statt es aus einer Aktualisierungsschleife heraus zu wiederholen. Dieses Beispiel wurde nicht im Forever-Client ausgeführt.Quelle: Blizzards StaticPopup-Implementierung, StaticPopup_Show, timeout, whileDead und hideOnEscape, aufbewahrter Client-Build 70338, geprüft am 13. Okt. 2026.

Hello

Das kleinste Addon: Es gibt beim Login einmal etwas aus und fasst nie einen Namen an, der ein Secret sein könnte.

HelloForever.toc
## Interface: 16001
## Title: Hello Forever
## Notes: Prints once on login, without touching a secret name.
## Author: YourName
## Version: 0.1.0
## Category: Miscellaneous

HelloForever.lua
HelloForever.lua
local addonName = ...
local frame = CreateFrame("Frame")
frame:SetScript("OnEvent", function()
    print("|cffd4a85a[" .. addonName .. "]|r Forever client accepted this addon.")
end)
frame:RegisterEvent("PLAYER_LOGIN")

SavedVariables

Deklariere die Tabelle in der TOC: ## SavedVariables: BeaconNotesDB. Der Name ist ein Global, weil der Client sie befüllt, nachdem deine Dateien gelaufen sind. Fasse sie nur in ADDON_LOADED an und führe Standardschlüssel zusammen, damit du nie die Einstellungen eines Spielers überschreibst.

SavedVariables.lua
local addonName, ns = ...
local defaults = { scale = 1, locked = false }

local events = {}
function events:ADDON_LOADED(loaded)
    if loaded ~= addonName then return end
    BeaconNotesDB = BeaconNotesDB or {}
    local db = BeaconNotesDB
    for key, value in pairs(defaults) do
        if db[key] == nil then db[key] = value end
    end
    ns.db = db
end

local frame = CreateFrame("Frame")
frame:SetScript("OnEvent", function(self, event, ...)
    if events[event] then events[event](self, ...) end
end)
frame:RegisterEvent("ADDON_LOADED")

Setze BeaconNotesDB = BeaconNotesDB or {} nicht im Datei-Scope. Das ist Fallstrick 08 in den häufigen KI-Addon-Fallstricken.

Secret-sichere Leiste

In Build 69913 kam UnitHealth("player") als Secret-Zahl zurück. Laut den Midnight-Regeln des Warcraft Wiki kann auch UnitHealthMax ein Secret sein. Daraus lässt sich in Lua kein Prozentwert berechnen, aber eine StatusBar nimmt sie direkt an.

HealthBar.lua
local bar = CreateFrame("StatusBar", nil, UIParent)
bar:SetSize(200, 14)
bar:SetPoint("CENTER", 0, -40)
bar:SetStatusBarTexture("Interface\\TargetingFrame\\UI-StatusBar")
bar:SetStatusBarColor(0.55, 0.12, 0.12)

local function Paint()
    -- Both values may be secret. The bar may have them. Lua may not do math on them.
    bar:SetMinMaxValues(0, UnitHealthMax("player"))
    bar:SetValue(UnitHealth("player"))
end

local frame = CreateFrame("Frame")
frame:SetScript("OnEvent", Paint)
frame:RegisterUnitEvent("UNIT_HEALTH", "player")
frame:RegisterUnitEvent("UNIT_MAXHEALTH", "player")
frame:RegisterEvent("PLAYER_ENTERING_WORLD")

Addon-Compartment

Das Minimap-Addon-Compartment braucht kein LibDataBroker: Die TOC nennt globale Funktionen, und der Client ruft sie auf. Das Warcraft Wiki dokumentiert diese Felder für Mainline. Diese Seite hat sie nicht in einem Forever-Client getestet, prüfe also, ob der Eintrag erscheint.

CompartmentStub.toc
## Interface: 16001
## Title: Compartment Stub
## Notes: Minimap compartment without LibDataBroker.
## IconTexture: Interface\Icons\INV_Misc_Note_01
## AddonCompartmentFunc: CompartmentStub_OnClick
## AddonCompartmentFuncOnEnter: CompartmentStub_OnEnter
## AddonCompartmentFuncOnLeave: CompartmentStub_OnLeave

CompartmentStub.lua
CompartmentStub.lua
function CompartmentStub_OnClick()
    print("|cffd4a85a[Stub]|r compartment click")
end

function CompartmentStub_OnEnter(_, owner)
    GameTooltip:SetOwner(owner, "ANCHOR_LEFT")
    GameTooltip:SetText("Compartment Stub", 1, 0.82, 0.45)
    GameTooltip:Show()
end

function CompartmentStub_OnLeave()
    GameTooltip:Hide()
end

Warteschlange für die Kampfsperre

Im Kampf, solange InCombatLockdown() true ist, können Addons geschützte Frames nicht anzeigen, ausblenden, verschieben oder deren Attribute ändern. Reihe diese Änderungen ein und führe sie aus, wenn PLAYER_REGEN_ENABLED feuert.

Queue.lua
local pending = {}

local function Queue(fn)
    if InCombatLockdown() then
        pending[#pending + 1] = fn
    else
        fn()
    end
end

local frame = CreateFrame("Frame")
frame:RegisterEvent("PLAYER_REGEN_ENABLED")
frame:SetScript("OnEvent", function()
    for i = 1, #pending do pending[i]() end
    wipe(pending)
end)

-- Use Queue only for protected frames.
-- Your own unprotected frames may Show() during combat.

Prompts, die Code in dieser Form erzeugen, findest du in den einsatzbereiten KI-Prompts.

Für Forever schreiben; die benannte Projekt-ID-Konstante vergleichen

WOW_PROJECT_IDwar 18 in der aufbewahrten Live-Probe auf Forever-Beta-Build 1.60.1.70338 vom 12. Oktober 2026. Blizzards Quellcode nennt diesen Wert WOW_PROJECT_CAMELOT. WOW_PROJECT_MAINLINE war 1 und WOW_PROJECT_CLASSIC war 2, also war der übliche if WOW_PROJECT_ID == WOW_PROJECT_MAINLINE-Zweig auf diesem Build falsch. Der ältere Community-Bericht zu 1 gehört zu Build 69913; behalte seine Build-Nummer bei, statt ihn als heutige Konstante zu behandeln.Quelle: Blizzards Camelot-Projektkonstanten, aufbewahrte Client-Dateien von 70338, geprüft am 13. Okt. 2026. Konstanten im Beta-Client 1.60.1.70338 gemessen am 12. Okt. 2026.

Ein Addon, das nur in Forever läuft, hat nichts zu verzweigen. Schreibe die Forever-Version und sag es in einem Kommentar, damit der nächste Leser nicht nach der Verzweigung sucht.

Detect.lua
-- Build 70338 recorded WOW_PROJECT_ID 18, named WOW_PROJECT_CAMELOT.
-- WOW_PROJECT_MAINLINE was 1 and WOW_PROJECT_CLASSIC was 2, so an
-- "is this Retail" or "is this Classic" branch was false; retest.
-- A Forever-only add-on writes for Forever directly.
local FOREVER_PROJECT_ID = WOW_PROJECT_CAMELOT

Das ältere Wiki-Beispiel bezeichnet einen Zweig als "camelot/forever", weil Forever ein Spieltyp innerhalb der Mainline-Familie ist. Diese gemeinsame Architektur bestimmt seine Projekt-ID nicht. Blizzards Aussage im WoW-UI-Discord, zitiert von Wowhead, nennt Forever und Midnight "two game types within the Mainline code family." („zwei Spieltypen innerhalb der Mainline-Codefamilie“). Dieselbe Aussage nennt Forevers Typ "Camelot (to be renamed before launch)" („Camelot, wird vor dem Launch umbenannt“) und sagt, Forever teile "the vast majority of APIs available in 12.1.5," („die große Mehrheit der verfügbaren APIs“), weshalb die Mainline-Wiki-Seiten unten überhaupt gelten.Quelle: WoW: Forever Will Have Addon Changes from Midnight, geprüft am 28. Sept. 2026.

Für gemeinsame Addons, die mehrere Clients unterstützen, vergleiche WOW_PROJECT_ID mit WOW_PROJECT_CAMELOT, wenn diese Konstante existiert, und prüfe dann die API des Features. Ein reines Forever-Addon kann Forever direkt ansprechen. Du kannst Dateien auch über die TOC aufteilen. Für den aktuellen Regelsatz, das Hardcore-Flag oder die Classic/Modern-Erlebniseinstellung nutze die GameRules-Referenz; eine Client-ID beantwortet diese Fragen nicht.

<details><summary>Technische Hinweise: Erweiterungskonstanten</summary>

Das aufbewahrte Wiki-Beispiel verschachtelt LE_EXPANSION_LEVEL_CURRENT und LE_EXPANSION_CLASSIC in seinem Mainline-Projekt-ID-Zweig. Dieser Zweig ist auf dem erfassten Forever-Client 70338 falsch. Der Client der Midnight-Ära ist ein anderer Spieltyp innerhalb der Mainline-Familie; leite seine Projekt-ID nicht aus dieser Beziehung ab.

</details>

Dateien mit TOC-Variablen aufteilen

Die TOC-Variablen [Family] und [Game] werden beim Laden aufgelöst, sodass eine AddonName.toc für jeden Client ohne jede Lua-Verzweigung auf andere Dateien zeigen kann.

Split.toc
## Interface: 16001
## Title: Split Example

[Family]\File.lua
[Game]\File.lua

[Family]wird zu Mainline oder Classic. [Game] wird in einem Forever-Client zu Camelot. Zu den anderen aufgeführten Spieltypen gehören Standard, Vanilla und TBC.Quelle: TOC format, geprüft am 28. Sept. 2026.

Dieselbe Seite nennt ein clientspezifisches Suffix camelot, sodass AddonName_Camelot.toc anstelle der Standarddatei geladen wird. Die Interface-Tabelle setzt 16001 in die Zeile „Forever Beta“ und lässt „Forever Test“ und „Forever“ leer, nimm also nicht an, dass diese Nummer die Beta überdauert.

Ein Item abfragen, ohne gegen den Cache zu laufen

C_Item.GetItemInfogibt 18 einzelne Werte zurück, keine Tabelle: Name, Link, Qualität, Stufe und weitere bis itemDescription. Es antwortet nil, bis der Client das Item gecacht hat, egal ob das Item existiert.Quelle: C_Item.GetItemInfo, geprüft am 28. Sept. 2026.

Daten anfordern, dann das Event lesen

ItemLookup.lua
local function OnItemData(_, event, itemID, success)
    if not success then return end
    local name = C_Item.GetItemInfo(itemID)
    if name then print(name, "is cached now") end
end

local frame = CreateFrame("Frame")
frame:SetScript("OnEvent", OnItemData)
frame:RegisterEvent("ITEM_DATA_LOAD_RESULT")

C_Item.RequestLoadItemDataByID(4306)

Seit Patch 10.0.5 kann der Server success = false für eine bestimmte Item-ID beantworten. Prüfe dieses Flag also, bevor du GetItemInfo in derselben Sitzung erneut aufrufst.Quelle: ITEM_DATA_LOAD_RESULT, geprüft am 28. Sept. 2026.

RequestLoadItemDataByID akzeptiert auch einen vollständigen Item-Link, sodass du weitergeben kannst, was dir ein Tooltip-Hook oder Chat-Link liefert, ohne zuerst die numerische ID herauszulösen.

Einen Zauber auf dieselbe Weise abfragen

C_Spell.GetSpellInfogibt eine Tabelle zurück, anders als der Item-Aufruf: spellInfo.name, spellInfo.iconID, spellInfo.castTime und den Rest. Es ersetzte die älteren GetSpellInfo- und C_SpellBook.GetSpellInfo-Globals.Quelle: C_Spell.GetSpellInfo, geprüft am 28. Sept. 2026.

SpellLookup.lua
local function OnSpellData(_, event, spellID, success)
    local info = C_Spell.GetSpellInfo(spellID)
    if not info then return end
    -- success == false can still mean a partial record, such as no description.
    print(info.name, info.castTime, success and "full" or "partial")
end

local frame = CreateFrame("Frame")
frame:SetScript("OnEvent", OnSpellData)
frame:RegisterEvent("SPELL_DATA_LOAD_RESULT")

C_Spell.RequestLoadSpellData(2061)

Das Wiki sagt, success „Might return false when only partial spell data is available,“ (könne false zurückgeben, wenn nur Teildaten des Zaubers vorliegen), etwa alles außer der Beschreibung.Quelle: SPELL_DATA_LOAD_RESULT, geprüft am 28. Sept. 2026. Deshalb liest die Vorlage die Tabelle auch bei einem false-Ergebnis, statt abzubrechen. Die Liste der KI-Addon-Fallstricke nennt weitere Stellen, an denen eine generierte Antwort einen solchen Guard auslässt.

Beide Aufrufe nehmen eine Zauber-ID oder einen Zaubernamen. Übergibst du einen Namen, sucht C_Spell.GetSpellInfo zuerst nach dem aktuellen Override dieses Zaubers beim Spieler, sodass eine verwandelte Fähigkeit das Icon des überschreibenden Zaubers zurückgeben kann.

Arbeit ohne OnUpdate-Skript verzögern

C_Timer.Afterplant einen einmaligen Callback ein. Ein im Wiki zitierter Blizzard-Beitrag sagt, das Timer-System arbeite nur, wenn ein Timer erstellt oder zerstört wird, während ein OnUpdate-Handler bei jedem gerenderten Frame einen Lua-Aufruf kostet.Quelle: C_Timer.After, geprüft am 28. Sept. 2026.

Debounce.lua
local pendingSave = false

local function ScheduleSave()
    if pendingSave then return end
    pendingSave = true
    C_Timer.After(2, function()
        pendingSave = false
        -- update an in-memory table or refresh a preview here
    end)
end

Use this to debounce follow-up work after a setting changes, such as updating an in-memory table or refreshing a preview. The timer does not write SavedVariables to disk; the client persists declared variables on logout or UI reload.

Deine eigenen TOC-Metadaten lesen

C_AddOns.GetAddOnMetadata(name, variable)liest Title, Notes, Author, Version oder ein beliebiges eigenes X--Feld direkt aus deiner eigenen TOC-Datei, ohne Beachtung der Groß-/Kleinschreibung.Quelle: C_AddOns.GetAddOnMetadata, geprüft am 28. Sept. 2026.

Version.lua
local addonName = ...
local version = C_AddOns.GetAddOnMetadata(addonName, "Version") or "dev"
print(("%s v%s loaded"):format(addonName, version))

Anders als das ältere Global GetAddOnMetadata löst dieser Aufruf einen Fehler aus, wenn der Name zu keinem installierten Addon passt. Packe daher jede unsichere Abfrage in pcall. Gib die Version in einem Compartment-Tooltip aus, damit ein Spieler, der einen Fehler meldet, sie dir nennen kann, ohne die TOC-Datei zu öffnen.

Ein Optionsfenster mit der Settings-API hinzufügen

Das Wiki sagt, die Settings-API wurde in Patch 10.0.0 überarbeitet, mit weiteren Breaking Changes in 11.0.2. Optionscode aus einem Tutorial vor 10,0 passt nicht zu den Aufrufen unten, und eine KI-Antwort, die auf solchen Tutorials basiert, ebenso wenig.Quelle: Settings API, geprüft am 28. Sept. 2026.

Options.lua
local addonName, ns = ...

function ns.BuildOptions(db)
    local category = Settings.RegisterVerticalLayoutCategory("Beacon Notes")
    local setting = Settings.RegisterAddOnSetting(
        category, "BeaconNotes_Locked", "locked", db,
        "boolean", "Lock the notes frame", false
    )
    Settings.CreateCheckbox(category, setting, "Prevents dragging the frame.")
    Settings.RegisterAddOnCategory(category)
end

-- Call ns.BuildOptions(ns.db) at the end of your ADDON_LOADED handler.

Baue das Fenster innerhalb von ADDON_LOADED, nachdem das SavedVariables-Muster oben die Tabelle gefüllt hat. Im Datei-Scope existiert die gespeicherte Tabelle noch nicht, die Einstellung würde also an nil binden.

Einen Wegpunkt ohne geschützten Aufruf setzen

Ein Community-Beta-Bericht auf Warcraft Forever sagt, C_SuperTrack.SetSuperTrackedUserWaypoint sei in diesem Client geschützt. Der Aufruf scheitert still und erhöht nur einen Zähler für Interface-Fehler im AddOns-Fenster, für den es heißt: „only resets on a full client restart, not on /reload.“Quelle: Addons, geprüft am 28. Sept. 2026. (er setzt sich nur bei einem vollständigen Client-Neustart zurück, nicht bei /reload). Derselbe Bericht nennt C_Map.SetUserWaypoint als sicheren Weg, eine Markierung zu setzen. Behandle beides als unbestätigt, bis du es getestet hast.

Wegpunkte sind das Zuhause der Guide-Addons. Zygor Guides bewirbt einen „3D Waypoint Arrow“ und RestedXP nutzt „Follow the arrow“ als Slogan. Prüfe also, wie sich ein Routen-Addon in der Beta verhält, bevor du eigenen Pin-Code darauf aufbaust.

Waypoint.lua
local mapID = C_Map.GetBestMapForUnit("player")

if mapID and C_Map.CanSetUserWaypointOnMap(mapID) then
    local pos = C_Map.GetPlayerMapPosition(mapID, "player")
    if pos then
        C_Map.SetUserWaypoint(UiMapPoint.CreateFromVector2D(mapID, pos))
    end
end

Derselbe Bericht führt ChatFrame_OpenChat und das Schreiben von Secure-Attributen auf Blizzards eigene Unit-Frames ebenfalls als geschützt auf, mit HandleModifiedItemClick als sicherem Weg für Shift-Klick-Links. Keiner der drei löst einen abfangbaren Fehler aus, ein pcall-Wrapper sagt dir also nicht, dass der Aufruf scheiterte. Gleiche eine neue Vorlage mit dem Addon-Entwicklerguide und dem Forever-Beacon-Download ab, bevor du sie veröffentlichst, denn nichts auf dieser Seite lief bisher in einem Forever-Client.

Wichtige Fakten

  • TOC-Interface Geändert16001 in der Zeile „Forever Beta“ der TOC-Tabelle im Warcraft Wiki; mit /dump select(4, GetBuildInfo()) prüfenClassic: Classic Era führt in derselben Tabelle 11509.
  • SavedVariablesLaut Berichten Mitte September zwischen Sitzungen verloren; eine Antwort vom 25. September sagt, Build 70009 lädt sie wieder
  • Addon-Compartment Neu in ForeverTOC-Felder sind für Mainline dokumentiert; hier noch nicht in einem Forever-Client getestet
  • Kampfsperre Wie in ClassicGeschützte Frames können im Kampf nicht angezeigt, ausgeblendet oder verschoben werden; einreihen bis PLAYER_REGEN_ENABLED

Quellen

  1. TOC formatWarcraft Wiki
  2. Saving variables between game sessionsWarcraft Wiki
  3. WOWF Beta: Addon SavedVariables appear to write correctly to disk but are not restored at startupWorld of Warcraft Forums (player bug report)
  4. Addon compartmentWarcraft Wiki
  5. InCombatLockdownWarcraft Wiki
  6. Secret ValuesWarcraft Wiki
  7. AddonsWarcraft Forever
  8. WOW_PROJECT_IDWarcraft Wiki
  9. WoW: Forever Will Have Addon Changes from MidnightWowhead
  10. C_Item.GetItemInfoWarcraft Wiki
  11. ITEM_DATA_LOAD_RESULTWarcraft Wiki
  12. C_Spell.GetSpellInfoWarcraft Wiki
  13. C_Timer.AfterWarcraft Wiki
  14. C_AddOns.GetAddOnMetadataWarcraft Wiki
  15. Settings APIWarcraft Wiki
  16. What the WoW Forever beta breaks for addons: secret health values, dead secure snippets, new APIsWoW Forever Builds
  17. SPELL_DATA_LOAD_RESULTWarcraft Wiki
  18. RestedXP home pageRestedXP
  19. Zygor Guides home pageZygor Guides
  20. Blizzard client source: ProjectConstants.lua (retained build 70338; mirror may change)Blizzard Entertainment (source mirrored by Gethe)
  21. Blizzard client source: SlashCommandsRegistry.lua (retained build 70338; mirror may change)Blizzard Entertainment (source mirrored by Gethe)
  22. Blizzard client source: StaticPopup.lua (retained build 70338; mirror may change)Blizzard Entertainment (source mirrored by Gethe)
  23. Lua 5.1 Reference ManualLua.org
  24. Blizzard client source: ChatInfoDocumentation.lua (retained build 70338; mirror may change)Blizzard Entertainment (source mirrored by Gethe)