Änderungen an Addons in Battle for Azeroth

World of Warcraft: Battle for Azeroth
Release Notes 8.0 für Addon-Entwickler in WoW

Mit der Veröffentlichung der Beta von Battle for Azeroth möchte das Team für die Benutzeroberfläche von WoW einige kommende Änderungen hervorheben, die Addon-Entwickler betreffen. Viele dieser Änderungen wurden bereits auf die Beta-Realms aufgespielt, einige andere werden erst mit dem Pre-Patch für Battle for Azeroth implementiert.

Wenn ihr selbst keine Addons entwickelt, wird die folgende Liste nicht besonders interessant für euch sein:

Änderungen an Events im Kampflog
Die Events COMBAT_LOG_EVENT und COMBAT_LOG_EVENT_UNFILTERED haben keine Event-Nutzdaten mehr. Bitte verwendet die Funktion CombatLogGetCurrentEventInfo, um die Informationen zu erhalten, die ihr bisher über diese Events erhalten habt.

Änderungen an der API des Zaubersystems
Wegen einer Änderung am Backend haben die API und Events des Zaubersystems mehrere wichtige Änderungen erhalten. Bitte lest weiter, wenn ihr Zauber-API oder -Events in euren Addons verwendet.

Textfelder von Zaubern – z. B. der Untertext des Namens oder die Beschreibung – werden jetzt mit Ausnahme des Namens des Zaubers auf Anfrage geladen. Das betrifft die folgenden Funktionen:
Name der Funktion – Betroffener Rückgabewert
GetActiveArtifactByRace – #5 (Beschreibung des Zaubers)
GetArtifactInfoByRace – #5 (Beschreibung des Zaubers)
GetRecipeDescription – #1 (Beschreibung des Zaubers)
GetSelectedArtifactInfo – #5 (Beschreibung des Zaubers)
GetSpellBookItemName – #2 (Untertext des Namens des Zaubers)
GetSpellDescription – #1 (Beschreibung des Zaubers)
GetTrainerServiceAbilityReq – #1 (Untertext des Namens des Zaubers)
GetTrainerServiceDescription – #1 (Beschreibung des Zaubers)

Wenn ihr diese Funktionen aufruft, kann der Rückgabewert Null oder leer betragen, weil die Daten zum Zeitpunkt des Aufrufs der Funktion nicht verfügbar sind. Wir bieten eine Oberfläche in Lua an –SpellMixin –, die einen Aufruf verzögert, bis die Daten verfügbar sind. Mit dieser Oberfläche könnt ihr Funktionen aus der Liste oben aufrufen und müsst dabei nicht befürchten, leere Daten zu erhalten.

local spell = Spell:CreateFromSpellID(spellID);
spell:ContinueOnSpellLoad(function()
spellButton:SetText(GetSpellDescription(spell:GetSpellID());
end);

Der Aufruf SetText geschieht unmittelbar, sofern der Text des Zaubers geladen und verfügbar ist. Wenn nicht, wird der Aufruf verzögert, bis die Daten geladen wurden.

Verwendet diese Oberfläche, wenn ihr eine Anfrage zu einem beliebigen Zeitpunkt abbrechen müsst:

local spell = Spell:CreateFromSpellID(spellID);
local spellDataLoadedCancelFunc = spell:ContinueWithCancelOnSpellLoad(function()
button:SetText(GetSpellDescription(spell:GetSpellID());
end);

Ruft die Abbruchfunktion auf, wenn ihr bereit seid, die Anfrage abzubrechen:

if spellDataLoadedCancelFunc then
spellDataLoadedCancelFunc();
spellDataLoadedCancelFunc = nil; – for safety!
end

Zusätzlich zu den Funktionen ContinueOnSpellLoad bietet SpellMixin die folgenden Methoden, mit denen ihr verschiedene Textfelder von Zaubern abfragen könnt:

GetSpellID() Die Zauber-ID, die mit diesem SpellMixin in Verbindung steht.
GetSpellName() Der Name des Zaubers.
GetSpellSubtext() Der Untertext des Namens des Zaubers (oft der Rang des Zaubers).
GetSpellDescription() Die Beschreibung des Zaubers.

Ihr solltet diese Funktionen wie in den obigen Beispielen über euren erfassten Funktionsrumpf aufrufen können. Es folgt ein erstes mit diesen Funktionen vereinfachtes Beispiel:

local spell = Spell:CreateFromSpellID(spellID);
spell:ContinueOnSpellLoad(function()
spellButton:SetText(spell:GetSpellDescription());
end);

Änderungen an Funktionen:
• GetSpellInfo – Der zweite Parameter hat Spell.nameSubtext ausgegeben und gibt jetzt Null aus.
• GetTrainerServiceInfo – Der zweite Parameter wurde entfernt (nameSubtext).
• GetShapeshiftFormInfo – Der zweite Parameter wurde entfernt (name).
• GetMacroSpell – Die ersten beiden Parameter wurden entfernt (name und nameSubtext).
• GetPetActionInfo – Der zweite Parameter wurde entfernt (nameSubtext).
• GetPossessInfo – Der zweite Parameter wurde vom Namen des Zaubers zur Zauber-ID geändert.
• CancelUnitBuff – Der Abbruch über Namen von Zaubern wird nicht mehr unterstützt.
• UnitBuff – Der zweite Parameter wurde entfernt (nameSubtext). Außerdem wird die Abfrage über Namen von Zaubern nicht mehr unterstützt.
• UnitDebuff – Der zweite Parameter wurde entfernt (nameSubtext). Außerdem wird die Abfrage über Namen von Zaubern nicht mehr unterstützt.
• UnitAura – Der zweite Parameter wurde entfernt (nameSubtext). Außerdem wird die Abfrage über Namen von Zaubern nicht mehr unterstützt.
• UnitCastingInfo – Der zweite Parameter wurde entfernt (nameSubtext).
• UnitChannelInfo – Der zweite Parameter wurde entfernt (nameSubtext).
• GameTooltip:GetSpell – Der zweite Parameter wurde entfernt (nameSubtext).
• GetAuraInfo – Die Abfrage über Namen von Zaubern wird nicht mehr unterstützt.
• GetItemSpell – Der zweite Parameter wurde entfernt (nameSubtext).
• GetSpellLink – Gibt nicht mehr Trade Skill Link als zweiten Parameter aus (siehe GetSpellTradeSkillLink unten).

Diese Funktionen wurden entfernt:
• FindSpellOverrideNameByName
• FindBaseSpellNameByName
• SearchGuildRecipes

Diese Funktionen wurden hinzugefügt:
• CancelPetPossess
• FindSpellOverrideByID
• FindBaseSpellByID
• DoesSpellExist
• GetSpellTradeSkillLink
• GetSpellSubtext

Änderungen an Events:
• UNIT_SPELLCAST_SUCCEEDED – Gibt nicht mehr den Namen und den Rang des Zaubers aus.
• UNIT_SPELLCAST_FAILED_QUIET – Gibt nicht mehr den Namen und den Rang des Zaubers aus.
• UNIT_SPELLCAST_INTERRUPTED – Gibt nicht mehr den Namen und den Rang des Zaubers aus.
• UNIT_SPELLCAST_START – Gibt nicht mehr den Namen und den Rang des Zaubers aus.
• UNIT_SPELLCAST_FAILED – Gibt nicht mehr den Namen und den Rang des Zaubers aus.
• UNIT_SPELLCAST_STOP – Gibt nicht mehr den Namen und den Rang des Zaubers aus.
• UNIT_SPELLCAST_DELAYED – Gibt nicht mehr den Namen und den Rang des Zaubers aus.
• UNIT_SPELLCAST_CHANNEL_START – Gibt nicht mehr den Namen und den Rang des Zaubers aus.
• UNIT_SPELLCAST_CHANNEL_UPDATE – Gibt nicht mehr den Namen und den Rang des Zaubers aus.
• UNIT_SPELLCAST_CHANNEL_STOP – Gibt nicht mehr den Namen und den Rang des Zaubers aus.

Änderungen an der Weltkarte
Die Weltkarte wurde beinahe gänzlich neu geschrieben, und alle Karten-APIs wurden entfernt. Sie werden ersetzt, aber wir befinden uns noch in der Übergangsphase. worldMapAreaID, dungeonMapID und dungeonFloor wurden entfernt und durch uiMapID ersetzt. Wir haben ein Mapping zwischen den alten und den neuen Daten AddOns/Blizzard_Deprecated/UIMapIDToWorldMapAreaID.lua hinzugefügt, damit ihr eure Daten leichter übertragen könnt.

Dokumentation von Events
Zusätzlich zur Dokumentation von Funktionen und API-Tabellen werden jetzt alle Events samt Nutzdaten dokumentiert. Ihr könnt im Spiel mit dem Befehl /api auf die Dokumentation zugreifen. Die Dokumentationsdateien findet ihr in /AddOns/Blizzard_APIDocumentation. Ihr könnt sie mit dem bereits existierenden Befehl „ExportInterfaceFiles code“ exportieren.

Widgets für die Benutzeroberfläche ersetzen den World State Frame (und noch viel mehr ist in Arbeit)
Widgets für die Benutzeroberfläche sind ein neues System, das in Zukunft eine Vielzahl verschiedener Aufgaben für die Benutzeroberfläche übernimmt. Deshalb wird WorldStateFrame nicht mehr benötigt und vollständig entfernt. World-State-Events werden weiterhin wie gewohnt weitergegeben, also keine Sorge, wenn ihr euch bislang auf sie verlassen habt. Es gibt neue Events und API-Funktionen für Widgets für die Benutzeroberfläche … seht euch dazu UIWidgetManagerDocumentation.lua im Dokumentationsordner an. Weitere Informationen findet ihr in den lua- und xml-Dateien im Ordner \AddOns\Blizzard_UIWidgets .

Voicechat
Das neue Voicechat-System ist jetzt live! Die Dokumentation für die Voicechat-API befindet sich wie oben angegeben im normalen Dokumentationsordner.

VoiceActivityManager ist ein Lua-seitiges System, mit dem ihr Benachrichtigungsfenster erstellen könnt, die erscheinen, wenn Teilnehmer im Voicechat zu sprechen beginnen. Zu diesem Zweck könnt ihr die Methoden RegisterFrameForVoiceActivityNotifications und UnregisterFrameForVoiceActivityNotifications verwenden.

Pool Collections
PoolCollections sind ein neues Lua-seitiges System, mit dem ihr mehrere Pools für die Erstellung von Fenstern registrieren könnt. Dabei könnt ihr verschiedene Vorlagen und/oder Arten von Fenstern verwenden und müsst nicht für jedes einzelne einen Pool haben. Das System funktioniert genau wie Pools, ihr müsst nur sicherstellen, dass ihr CreatePool aufruft, bevor ihr versucht, ein Objekt eines bestimmten Typs zu erstellen. Hier findet ihr ein Beispiel für die Verwendung von PoolCollections:

– Erstellt zunächst die PoolCollection und ruft für jeden Vorlagentyp, den ihr erstellen wollt, CreatePool auf.
self.myPools = CreatePoolCollection();
self.myPools:CreatePool(“FRAME”, parent, “FrameTemplateA”);
self.myPools:CreatePool(“FRAME”, parent, " FrameTemplateB");
self.myPools:CreatePool(“BUTTON”, parent, “ButtonTemplateA”);
self.myPools:CreatePool("BUTTON “, parent, " ButtonTemplateB”);

– Danach könnt ihr diese Vorlagen kinderleicht erstellen, indem ihr Acquire in PoolCollection aufruft.
local frame1 = self.myPools:Acquire(“FrameTemplateA”);
local frame2 = self.myPools:Acquire(“FrameTemplateB”);
local frame3 = self.myPools:Acquire(“FrameTemplateB”);
local button1 = self.myPools:Acquire(“ButtonTemplateB”);
local button2 = self.myPools:Acquire(“ButtonTemplateA”);

– Und wenn ihr mit den Fenstern fertig seid, könnt ihr sie einzeln veröffentlichen oder ReleaseAll verwenden.
self.myPools:Release(frame3);
self.myPools:ReleaseAll();

Änderungen an der Texture object API
• Die Funktion SetRotation(radians) dreht jetzt die Eckpunkte von Texturen, anstatt die Texturkoordinaten zu modifizieren.
• Die Funktion GetRotation wurde hinzugefügt.
• Wenn die Drehung eingestellt wird, werden die von SetTexCoord festgelegten Texturkoordinaten nicht mehr zerstört.
• Anders als in der alten API bleiben Drehungen nach Anchor-Änderungen bestehen.
• In XML erstellte Texturen können mit dem Attribut „Rotation“ als gedreht initialisiert und in Grad spezifiziert werden.

Weitere Änderungen an der Frame-API
• Texture, FontString und Line können jetzt mit den neu hinzugefügten Funktionen SetScale, GetScale und GetEffectiveScale skaliert werden.
• Das Modell-XML-Attribut „scale“ heißt jetzt „modelScale“.

Verschiedene Änderungen
• Wenn ihr versucht, für ein unbekanntes Event zu registrieren oder die Registrierung aufzuheben, erhaltet ihr jetzt einen Lua-Fehler.
• Wir haben mehrere Leistungsverbesserungen an der Anchor-Abwicklung vorgenommen.
• Es kommt jetzt auch seltener vor, dass die Anchor-Abwicklung ein gültiges rect nicht auflösen kann.
• xpcall akzeptiert jetzt wie pcall Argumente.
• Das Alarmsystem wurde überarbeitet, sodass es jetzt mehrere unabhängige Erinnerungs-/Benachrichtigungsbereiche in der Benutzeroberfläche geben kann. Wir haben außerdem einen neuen intrinsischen Typ namens ContainedAlertFrame hinzugefügt, der für Erinnerungen verwendet werden kann.
• Kontextmenüs verfügen jetzt über ein eingebettetes, benutzerdefiniertes Fenster.
• GetItemInfo zieht jetzt für den Verkaufspreis des Link Levels von Spielern in Betracht.

Vielen Dank!