#1 - Oct. 4, 2016, 3:27 p.m.
Blizzard Post
In Patch 7.1 sind ein paar Änderungen an der Benutzeroberfläche von WoW enthalten. Wir möchten hier einige von ihnen hervorheben, da sie möglicherweise nicht mit einigen Funktionen von Addons kompatibel sind. Das ist keine umfassende Auflistung aller in 7.1 enthaltenen Änderungen an der Benutzeroberfläche oder der API – wir erwähnen nur die, die für Entwickler von Addons am interessantesten sind. Wenn ihr keine Addons entwickelt, könnt ihr diesen Beitrag ignorieren, da es hier nur um technische Änderungen im Zusammenspiel von Addons mit dem Spiel geht.

Änderungen an der Position von Einheiten

Einige APIs in Bezug auf die Positionierung/Blickrichtung/Reichweite von Einheiten wurden eingeschränkt, sodass sie nur dann gültige Werte liefern, wenn die folgenden Kriterien erfüllt sind:
• Die Einheit ist der aktive Spieler oder befindet sich in der Gruppe.
• Die Einheit befindet sich nicht in einer PvE- oder PvP-Instanz.

Die folgenden Funktionen sind davon betroffen:
GetPlayerMapPosition
UnitCameraFacing
UnitDistanceSquared
UnitFacing
UnitPosition (Hinweis: mapID liefert im eingeschränkten Status weiterhin gültige Ergebnisse)

Es gibt neue Möglichkeiten, auf Einheiten auf der Karte zuzugreifen:
"AddUnit",
"AddUnitFileID",
"AddUnitAtlas",
"ClearUnits",
"FinalizeUnits", AddUnit kann nicht ausgeführt werden, wenn Finalize im selben Frame ausgeführt wird.
"SetPlayerPingTexture",
"StartPlayerPing",
"StopPlayerPing",
"GetMouseOverUnits",
"SetOverrideMapID",
"GetOverrideMapID",

Intrinsische Funktionen

Es ist jetzt möglich, „intrinsische“ Framevorlagen zu erstellen. Sie sind virtuellen XML-Vorlagen ähnlich, verhalten sich in einigen Fällen aber etwas anders.

Als Beispiel findet ihr hier eine einfache intrinsische Definition.

<Frame name="ExampleIntrinsic" intrinsic="true">
<Scripts>
<OnShow function="ExampleIntrinsic_OnPostShow" intrinsicOrder="postcall" />
</Scripts>
</Frame>


Intrinsische Funktionen können wie eingebaute Widgets über CreateFrame erstellt werden. Mit dem oben angeführten Beispiel würdet ihr ein neues ExampleIntrinsic erstellen, indem ihr CreateFrame("ExampleIntrinsic") ausführt.

Sie können auch über XML-Elemente überall dort erstellt werden, wo ein Frametyp erstellt werden könnte. Zum Beispiel:

<Frame name="ExampleParentFrame">
<Frames>
<ExampleIntrinsic parentKey="Example">
<Scripts>
<OnShow function="ExampleIntrinsic_OnShow" />
</Scripts>
</ExampleIntrinsic>
</Frames>
</Frame>


Zu guter Letzt können intrinsische Funktionen ihren Framescripts besondere Reihenfolgen zuweisen. Außerdem können intrinsische Framescripts nicht neu zugewiesen werden, sobald sie an einen Frame gebunden sind. Sie können jedoch gehookt und inspiziert werden. Zum Beispiel ist in der oben angeführten Definition die globale Funktion „ExampleIntrinsic_OnPostShow“ an eine Instanziierung von ExampleIntrinsic gebunden. Ihre intrinsicOrder ist „postcall“, was bedeutet, dass dieser OnShow-Handler nach dem normalen OnShow-Handler ausgeführt wird.

ExampleIntrinsic_OnPostShow kann nicht ersetzt werden. Sie kann jedoch mit HookScript gehookt oder mit GetScript inspiziert werden, indem man entweder mit LE_SCRIPT_BINDING_TYPE_INTRINSIC_POSTCALL oder LE_SCRIPT_BINDING_TYPE_INTRINSIC_PRECALL ein zusätzliches optionales Argument einbaut. Wird für intrinsicOrder „precall“ spezifiziert, so wird der Handler vor dem normalen OnShow-Handler ausgeführt. Eine intrinsische Funktion kann sowohl einen Precall als auch einen Postcall haben.

Für ein Anwendungsbeispiel könnt ihr euch die neue Datei ScrollingMessageFrame.xml und die dazugehörige Datei ScrollingMessageFrame.lua ansehen.

Namensplaketten

In Patch 7.1 wurden Addons beim Zugriff auf Namensplaketten eingeschränkt. Addons können noch immer Informationen von Namensplaketten sammeln, sie als Ziel auswählen und anpassen, jedoch können sie ihre Einheitenmarken nicht mehr das Ausführen von Fähigkeiten verwenden. Sie funktionieren damit jetzt ähnlich wie die Namensplaketten in Warlords of Draenor.

Es wurden einige Funktionen hinzugefügt, um Addons zu unterstützen:

Hinzugefügt:
SetNamePlateFriendlySize,
GetNamePlateFriendlySize,
SetNamePlateEnemySize,
GetNamePlateEnemySize,
SetNamePlateSelfClickThrough,
GetNamePlateSelfClickThrough,
SetNameplateFriendlyClickThrough,
GetNameplateFriendlyClickThrough,
SetNamePlateEnemyClickThrough,
GetNamePlateEnemyClickThrough

Mit diesen Funktionen kann ein bestimmter Bereich auf der Namensplakette als bevorzugter Klickbereich markiert werden. Wenn die Positionsabfrage von Namensplaketten in zwei einander überlappenden Plaketten resultiert, wird die Namensplakette, in deren bevorzugten Bereich geklickt wurde, ausgewählt.

SetNamePlateSelfPreferredClickInsets,
GetNamePlateSelfPreferredClickInsets,
SetNamePlateFriendlyPreferredClickInsets,
GetNamePlateFriendlyPreferredClickInsets,
SetNamePlateEnemyPreferredClickInsets,
GetNamePlateEnemyPreferredClickInsets,

Entfernt:
SetNamePlateOtherSize
GetNamePlateOtherSize