WOW UI Mod Guide – Kapitel 2 Slash-Befehle
WoW Gold günstig kaufen
- WoW Classic Gold sicher bei PVPBank mit Gutschein kaufen
SEAN
. Zahlungen: Paypal, Kreditkarte. - Kaufen Sie WoW Gold Paypal bei Mulefactory. WoW Classic Gutschein:
wowcgold
& WoW Gold Gutschein:wowrgold
. Tolle Preise, sofortige Lieferung. Zahlungen: Paypal, Skrill, Bitcoin.
- UI Mod Anleitung – Kapitel 1
- UI Mod Anleitung – Kapitel 2
- UI Mod Anleitung – Kapitel 3
- UI Mod Anleitung – Kapitel 4
- UI Mod Anleitung – Kapitel 5
- UI Mod Anleitung – Kapitel 6
- UI Mod Anleitung – Kapitel 7
Teil 2 Index
- Was sind Schrägstrichbefehle und warum kümmert es mich?
- Wie funktionieren Schrägstrichbefehle?
- LUA-Dateien
- Alles zusammenstellen
- Was macht es?
- Letzte Worte
Willkommen zum zweiten Teil von unser Leitfaden zum Erstellen von WoW AddOns! In dieser Folge bauen wir ¡ll auf dem einfachen AddOn wir im ersten Teil erstellt. Auch wenn Sie¡re bereits vertraut mit der Erstellung von AddOns, möchten Sie vielleicht schnell überfliegen Teil Eins.
In Teil zwei, I¡ll davon ausgehen, dass Sie¡re vertraut mit den Grundlagen der Lua, XML und toc-Dateien. Allerdings werde ich¡t davon ausgehen, dass Sie umfangreiche Programmiererfahrung haben. Unser Fokus liegt auf der Handhabung von ¡ ° slash ¡ ± -Befehlen. Auf dem Weg dorthin werden wir ¡ll auch ein bisschen näher an Lua-Codierung. Wenn wir¡re getan, wir¡ll erweitert haben die eher lahm ¡° schlachtruf¡± AddOn aus Teil Eins zu werden anpassbare durch ende benutzer ohne dass sie zu ändern die Lua code. Wenn Sie das AddOn aus Teil Eins noch nicht haben, können Sie die Dateien <hier> .
WAS SIND SLASH-BEFEHLE, UND WARUM KÜMMERE ICH mich
Wenn Sie¡ve gespielt WoW für mehr als etwa fünf Minuten, Sie¡re vertraut mit Slash-Befehle. Sie¡re die Dinge wie ¡° / sagen¡ ± und ¡° /wer¡±, die Sie eingeben, während WoW spielen. Slash-Befehle sind eine sehr bequeme Möglichkeit, eine Aktion ohne Maus auszuführen. Für AddOn-Autoren sind Slash-Befehle viel einfacher zu implementieren als eine grafische Benutzeroberfläche mit Fenstern und Schaltflächen. Wenn Ihre Anforderungen einfach sind, sind Slash-Befehle möglicherweise alles, was Ihr AddOn benötigt.
Wie Sie wissen, bietet WoW über zig-gazillion solcher Befehle. Was Sie vielleicht nicht wissen, ist, dass AddOns ihre eigenen Slash-Befehle hinzufügen können. So let¡s werfen Sie einen Blick auf das, was es braucht, um die Slash-Befehl Zählung auf zig-Gazillion-and-one stoßen.
WIE FUNKTIONIEREN SLASH-BEFEHLE?
Jedem Slash-Befehl, den ein AddOn erstellt, ist eine Lua-Funktion zugeordnet. Wenn der Benutzer den Befehl slash eingibt, ruft WoW die Lua-Funktion auf. Intern verwaltet WoW eine ¡°SlashCmdList¡± , bei der es sich um eine Tabelle handelt, die alle verschiedenen Slash-Befehle den Funktionen zuordnet, die sie aufrufen sollen. Sie können sich das wie ein Telefonbuch vorstellen. (Denken Sie daran, vor Chatrooms und IM, als die Leute das Telefon benutzten J) Die Schrägstrichbefehle sind wie die Namen und die Funktionen sind wie die Telefonnummern. Wenn der Benutzer einen Schrägstrich-Befehl eingibt, durchläuft WoW die Schrägstrich-Befehle (Namen), bis er den richtigen findet. Dann ruft es die Funktion (Telefonnummer) für diesen Eintrag auf. Hier¡s die Lua einen Slash-Befehl zu erstellen:
SlashCmdList = TthAog2SetMyBattleCry;
Diese Zeile setzt die Funktion für die ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± Slash-Befehl ¡°TthAog2SetMyBattleCry¡±. Wenn der Befehl ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± slash nicht bereits in der Tabelle ¡°SlashCmdList¡± vorhanden ist, wird er automatisch erstellt. (Praktisch, isn¡ t es) Damit dies tatsächlich funktioniert, müssen wir ¡ d die ¡ ° TthAog2SetMyBattleCry¡± Funktion irgendwo in unserem Lua-Code definieren. Die Funktion könnte folgendermaßen aussehen:
function TthAog2SetMyBattleCry(msg)
— setze den Schlachtruf zur späteren Verwendung
TthAog2MyBattleCry = msg;
end
(Ein Wort zur Konvention: Beachten Sie, dass wir für den Schrägstrich-Befehlsnamen Großbuchstaben verwendet haben. Das heißt, wir haben TTH_AOG2_SET_MY_BATTLE_CRY¡± anstelle von ¡°TthAog2SetMyBattleCry¡± geschrieben. In diesem Handbuch verwenden wir ¡ ll Großbuchstaben für Konstanten C-Werte, die sich niemals ändern sollten, selbst wenn die Welt in interstellaren Staub oder Blizzard-Nerfs zerbröckelt, oder etwas ebenso Schreckliches. Jedes Mal, wenn Sie sehen, dass ich einen Namen in Großbuchstaben verwende, wissen Sie, dass ich Ihnen eine Konstante zeige.)
Pop-Quiz: Was gibt ein Benutzer ein, um den neuen Slash-Befehl auszuführen Okay, ich gestehe. Es ist eine Trickfrage. Obwohl die obige Zeile von Lua einen Schrägstrich-Befehl erstellt und eine Lua-Funktion damit verknüpft, haben wir immer noch keine Möglichkeit, ihn auszuführen. WoW verwendet ein raffiniertes Aliasing-System, um das, was der Benutzer eingibt, mit den tatsächlichen Slash-Befehlen zu verknüpfen. Hier¡s der Lua-Code, es zu tun:
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = „/setmybattlecry2“;
Nun, wenn der Benutzer Arten ¡°/setmybattlecry2 Nicht in der Leiste!¡± wird der Slash-Befehl ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± ausgeführt, wodurch die Funktion ¡°TthAog2SetMyBattleCry¡± mit dem Parameter ¡°Not in the groin aufgerufen wird!¡±. (Wir setzen ein ¡° 2¡ ± am Ende von ¡° / setmybattlecry2¡±, weil wir ¡ll unser AddOn in späteren Teilen dieses Handbuchs überarbeiten und wir don¡t wollen, dass die Namen in Konflikt geraten.)
Warum der zusätzliche Schritt Warum nicht¡t Erstellen der Slash-Befehl ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± automatisch machen, so dass der Benutzer eingeben ¡°/tth_aog2_setmybattlecry¡± um es auszuführen, gibt es zwei Gründe. Sie können bereits die erste sehen: obwohl unsere internen Namen viel Sinn in unserem Code machen, sie¡re oft schrecklich hässlich für die Nutzer zu zeigen. Der zweite Grund ist wichtiger: dieser zusätzliche Schritt ermöglicht es, dass mehrere Schlüsselwörter denselben Schrägstrich-Befehl ausführen können. Typing ¡° /setmybattlecry2¡± ist eine Art Schmerz. Geben wir den Leuten einen kürzeren Weg:
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 = „/smbc2“;
Jetzt können Benutzer unseres Addons entweder ¡°/setmybattlecry2¡± oder ¡°/smbc2¡± eingeben, um den Schlachtruf einzustellen. Beachten Sie, dass wir im konstanten Teil (SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2) diesmal ein ¡° 2¡ ± anstelle eines ¡ ° 1¡ ± angehängt haben. Wir könnten ein drittes Schlüsselwort hinzufügen, indem wir stattdessen ein ¡° 3¡ ± anhängen und so weiter.
Obwohl Schrägstrichbefehle nicht so schick oder optisch ansprechend sind wie Fenster und Schaltflächen, sind sie für Benutzer oft praktisch. Und sie¡re eine ganze Menge einfacher für Sie zu erstellen. (Wenn Sie immer noch eine grafische Oberfläche für Ihr AddOn wünschen und dies wahrscheinlich tun, haben Sie Geduld. Wir¡ll Abdeckung, die in Teil Sieben dieses Leitfadens.)
LUA-VARIABLEN
Möglicherweise haben Sie in der obigen Funktion etwas Neues bemerkt. Hier ist es wieder, falls Sie es verpasst haben:
Funktion TthAog2SetMyBattleCry(msg)
— setze den Schlachtruf, um ihn später zu verwenden
TthAog2MyBattleCry = msg;
end
Der ¡°TthAog2MyBattleCry = msg;¡± ist der neue Teil. ¡°TthAog2MyBattleCry¡± ist eine Lua-Variable. Variablen sind nur Slots, die einen beliebigen Wert Ihrer Wahl enthalten. Wie viele Skriptsprachen ist Lua sehr flexibel im Umgang mit Variablen. Wenn Sie eine ¡ ° stark typisierte ¡± Programmiersprache wie C ++ verwendet haben, wundern Sie sich vielleicht über den variablen ¡ s ¡°type¡±. Don ¡ t. Sie können sich Lua-Variablen als große leere Kästchen vorstellen, die so ziemlich alles aufnehmen können, was Sie dort speichern möchten. In diesem AddOn speichern wir die user¡s bevorzugte Schlachtruf in die Variable.
Ein wichtiger Aspekt von Variablen ist ¡°scope¡±. Scope bedeutet im Wesentlichen ¡°Welcher Code kann diese Variable sehen¡± Standardmäßig haben Variablen ¡°globaler Bereich¡±, viele Ihrer Funktionen können die Variable sehen. Die andere Art von Bereich ist ¡°local scope¡±. Dies bedeutet für uns, dass nur Code innerhalb desselben ¡° -Blocks ¡ ± die Variable sehen kann. Ein ¡°Block¡± bedeutet im Grunde ¡°bis zum nächsten Ende¡±. (Die technische Definition des Geltungsbereichs in Lua ist komplizierter, aber wir müssen uns hier nicht um diese Details kümmern.)
In unserem obigen Beispiel ist ¡°TthAog2MyBattleCry¡± eine ¡°globale Variable¡±, eine Variable mit globalem Gültigkeitsbereich. Die Zeile ¡°TthAog2MyBattleCry = msg;¡± innerhalb der Funktion ¡°TthAog2SetMyBattleCry¡± hat sie erstellt. Für diejenigen unter Ihnen, die aus Sprachen wie C ++ stammen, mag dies nicht intuitiv erscheinen. Wenn in Lua eine Variable jedoch nicht explizit als lokaler Bereich identifiziert wird, ist sie automatisch global. Auch wenn es innerhalb einer Funktion deklariert ist. Also würde Folgendes funktionieren:
function TthAog2SetMyBattleCry(msg)
— setze den Schlachtruf für die spätere Verwendung
TthAgo2MyBattleCry = msg;
end
function TTHAog2Event()
— sende eine Nachricht an den Chat
SendChatMessage TthAog2MyBattleCry, „SAY“);
end
Beachten Sie, dass TthAog2MyBattleCry in beiden Funktionen verwendet wird. An beiden Stellen bezieht es sich auf dieselbe Variable. Wenn TthAog2SetMyBattleCry anhand der Box-Analogie einen Wert in die Box einfügt, kann TthAog2Event in die Box schauen und diesen Wert sehen.
Das Deklarieren globaler Variablen auf diese Weise ist jedoch eine schlechte Praxis. Es ist viel besser, sie oben in Ihrer Lua-Datei zu deklarieren. Dies hat zwei Vorteile:
1) Die vollständige Liste der globalen Variablen befindet sich genau dort, wo Sie alle auf einen Blick sehen können
2) Sie können sicher sein, dass die Variable ordnungsgemäß initialisiert ist.
Es ist also viel vorzuziehen, dies zu tun:
— diese Variable enthält unseren Schlachtruf
TthAog2MyBattleCry = „Nicht ins Gesicht!“;
function TthAog2SetMyBattleCry(msg)
— setze den Schlachtruf, um ihn später zu verwenden
TthAog2MyBattleCry = msg;
end
Funktion TthAog2Event()
— sende eine Nachricht an den Chat
SendChatMessage(TthAog2MyBattleCry, „SAY“);
end
Jetzt ist es viel einfacher zu sehen, was los ist.
Lokale Variablen sind oft nützlich, wenn wir nur kurz einen Wert benötigen. Durch die Verwendung eines local ist sehr klar, welcher Code die Variable ändert. Da das lokale nicht sehr lange existiert, können Sie normalerweise den gesamten Code, der es möglicherweise ändert, auf einen Blick sehen. Es wäre eine gute Idee, den neuen Schlachtruf an den Benutzer zurückzugeben, wenn er ihn einstellt. Lassen¡s ändern TthAog2SetMyBattleCry dies zu tun:
function TthAog2SetMyBattleCry(msg)
— Setze den Schlachtruf, um ihn später zu verwenden.
TthAog2MyBattleCry = msg;
— Echo des neuen Schlachtrufs zur Bestätigung.
lokales Echo = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
TthAog2OutputToChat(echo);
end
Wir¡ve einige neue Dinge zusätzlich zu der lokalen Variablen eingeführt, so lassen¡s kurz einen Blick auf sie one-by-one:
local echo = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
Diese Zeile erstellt eine lokale Variable mit dem Namen ¡°echo¡±, um den Wert zu speichern, den wir dem Benutzer echo¡ll. Der Teil nach dem Gleichheitszeichen erstellt eine Textzeichenfolge, die mit dem Inhalt der Variablen TTH_AOG2_BATTLE_CRY_SET_TO beginnt und mit dem Inhalt von msg endet.
Uh-oh, wir haben die Variable TTH_AOG2_BATTLE_CRY_SET_TO nicht definiert. Wir¡ll definieren sie mit dieser Zeile, platziert an der Spitze unserer Datei:
local TTH_AOG2_BATTLE_CRY_SET_TO = „Battle cry set to „;
Wie Sie sehen können, die TTH_AOG2_BATTLE_CRY_SET_TO Variable enthält einfach eine Zeichenfolge. Da sich diese Zeichenfolge nie ändert, wird sie als ¡° Konstante ¡ ± bezeichnet. Platzieren Sie Ihre Konstante an der Spitze Ihrer Datei ist immer eine gute Idee. Auf diese Weise ist die Zeichenfolge sehr leicht zu finden, wenn Sie den Wortlaut ändern müssen. (Wie wir ¡ll in Teil Sechs sehen, es macht auch die Lokalisierung, oder die Unterstützung mehrerer Sprachen, viel einfacher.) Außerdem haben wir die Variable TTH_AOG2_BATTLE_CRY_SET_TO als lokal deklariert, obwohl sie sich nicht in einer Funktion befindet. Dies bedeutet, dass die Variable nur in dieser Datei und nicht in anderen Dateien vorhanden ist. Wenn Sie¡re nur eine Variable in einer Datei verwenden, ist es immer gut, es lokal zu machen. Auf diese Weise¡re Sie sicher, dass kein Code außerhalb Ihrer Datei könnte es geändert haben. (Sie fragen sich vielleicht, warum wir didn¡t machen TthAog2MyBattleCry lokalen. Das¡ s vor allem, weil ich Ihnen zeigen wollte, wie eine globale Variable aussah. Aber es¡s einen anderen Grund zu, die Sie¡ll sehen, in Teil Drei.)
Gehen wir nun zur nächsten Zeile unserer Funktion:
TthAog2OutputToChat(echo);
Diese Zeile ruft eine Funktion auf, die wir schreiben müssen, um eine Nachricht an den Chat-Bereich zu senden. Die Variable echo wird an die Funktion übergeben. Here¡s, was diese Funktion aussieht:
Funktion TthAog2OutputToChat(msg)
if (DEFAULT_CHAT_FRAME) then
DEFAULT_CHAT_FRAME:addMessage(msg);
end
end
Diese Funktion bestimmt, ob wir Text im Standard-Chat-Frame anzeigen können, und zeigt den Text in msg im Chat-Bereich an. Dieser Text wird von keinem anderen Spieler gesehen, da es sich ausschließlich um Informationstext für den Spieler handelt, der das AddOn ausführt. Wenn Sie¡re nicht vertraut mit der Übergabe von Variablen an Funktionen funktioniert, hier¡s, wie es geht: wenn TthAog2SetMyBattleCry TthAog2OutputToChat aufruft, indem die Echo-Variable übergeben wird, Lua einige Dinge hinter den Kulissen. Es erstellt eine lokale Variable namens msg in TthAog2OutputToChat und kopiert dann den Wert in echo nach msg. Dies gibt uns eine lokale Variable namens msg innerhalb der Funktion TthAog2OutputToChat , die wir nach Belieben verwenden können.
Dazu mussten wir keine Funktion erstellen. Wir hätten den Code direkt in der TthAog2SetMyBattleCry-Funktion in den Chat-Bereich ausgeben können. Die Verwendung einer Funktion macht es jedoch sehr einfach, Text in den Chat-Bereich auszugeben. Wenn wir dies woanders tun müssten, müssten wir nur die Funktion aufrufen und nicht einen ganzen Codeblock kopieren. (Wir¡ll nutzen diese in Teil Drei.) Auch, wenn wir beschlossen, Text an den Benutzer in einer anderen Art und Weise zu zeigen, ¡d wir brauchen nur den Code innerhalb der Funktion zu ändern. Kein anderer Code wäre betroffen, wodurch die Wahrscheinlichkeit eines Fehlers verringert wird. Schließlich wurde die Funktion TthAog2SetMyBattleCry vereinfacht. Einfach zu lesender Code ist einfach zu debuggender Code.
Wir haben¡t vollständig erforscht Lua String-Handling oder die WoW-Frame-Hierarchie, aber zu diesem Zeitpunkt zu tun wäre eine Ablenkung von unserem Schwerpunkt der Slash-Befehle. Hoffentlich reicht das oben Genannte aus, um zu verstehen, was in dieser Version des Addons passiert.
ALLES ZUSAMMENFASSEN
Wir¡re jetzt bereit, den Schlachtruf AddOn neu zu schreiben, damit der Benutzer einen bevorzugten Schlachtruf über Slash-Befehle angeben. Genau wie im ersten Teil, Es sind drei Dateien beteiligt:
– Inhaltsverzeichnisdatei
– XML-Datei
– Lua-Codedatei
Die Inhaltsverzeichnisdatei ist seit Teil Eins nahezu unverändert:
## Interface: 11000
## Title: TenTonHammer Guide Part 2
## Author: TenTonHammer.com
## Notes: Makes your character scream a customizable battle cry when combat begins
TthAog2.xml
Wir ¡ ve nur ¡ ° 1¡ ± zu ¡ ° 2¡ ± geändert, und die Noten geändert, um den Schlachtruf ¡ ° anpassbar ¡ ± statt ¡ ° albern ¡ ± nennen. Speichern Sie diese Inhaltsverzeichnisdatei als TthAog2.toc in einen Ordner namens TthAog2 unter dem Ordner AddOns.
Die XML-Datei ist identisch mit Teil Eins, außer ¡°1 in ¡°2¡±:
< Ui xmlns=“http://www.blizzard.com/wow/ui/“ xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance“ xsi:schemaLocation=“http://www.blizzard.com/wow/ui/“>
< Skript Datei =“ TthAog2.lua“/>
< Rahmen name = “ TthAog2Core“>
<Scripts>
<OnLoad>TthAog2Load();</OnLoad>
<OnEvent>TthAog2Event();</OnEvent>
</Scripts>
</Frame>
</Ui>
Speichern Sie diese XML-Datei als TthAog2.xml in einen Ordner namens TthAog2 unter dem Ordner AddOns.
Schließlich haben wir die Lua-Datei, die den Code selbst enthält. You¡ve seen all of these pieces already:
— Konstante Saiten.
local TTH_AOG2_BATTLE_CRY_SET_TO = „Schlachtruf gesetzt auf „;
— Diese Variable enthält unseren Schlachtruf.
TthAog2MyBattleCry = „Nicht ins Gesicht!“;
— Utility-Funktion zum Drucken im Chat-Bereich
Funktion TthAog2OutputToChat(msg)
if (DEFAULT_CHAT_FRAME) then
DEFAULT_CHAT_FRAME:addMessage(msg);
end
end
— Wird aufgerufen, wenn das AddOn geladen wird.
function TthAog2Load()
— Für ein Ereignis registrieren.
dies: RegisterEvent( „PLAYER_REGEN_DISABLED“);
— Erstellen Sie den Slash-Befehl.
SlashCmdList = TthAog2SetMyBattleCry;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = „/setmybattlecry2“;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 = „/smbc2“;
end
— Wird aufgerufen, wenn der Slash-Befehl ausgeführt wird.
function TthAog2SetMyBattleCry(msg)
— Setzt den Schlachtruf, zur späteren Verwendung.
TthAog2MyBattleCry = msg;
— Echo des neuen Schlachtrufs zur Bestätigung.
lokales Echo = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
TthAog2OutputToChat(echo);
end
— Wird aufgerufen, um das Ereignis zu behandeln, für das wir uns registriert haben.
function TthAog2Event()
— Sende eine Nachricht an den Chat.
SendChatMessage(TthAog2MyBattleCry, „SAGEN“);
end
Im Vergleich zum ersten Teil haben wir die globale Variable TthAog2MyBattleCry , den Code zum Erstellen des Slash-Befehls, die Funktion TthAog2SetMyBattleCry und die globale Variable TthAog2MyBattleCry in TthAog2Event . Wir¡ve auch weitere Kommentare hinzugefügt.
Speichern Sie diese Lua-Datei als TthAog2.lua in einen Ordner namens TthAog2 unter dem Ordner AddOns.
WAS MACHT ES
Jetzt starte WoW und kämpfe. Sie¡ll sehen, die dumme Schlachtruf ¡°Nicht in das Gesicht!¡±. Dies spiegelt den Standardwert der Variablen TthAog2MyBattleCry wider. Geben Sie nun Folgendes ein:
/smbc2 To Battle!
Sie¡ll sehen, der neue Schlachtruf hallte in den chat-Bereich. Jetzt in einem anderen Kampf zu bekommen, und Sie¡ll sehen ¡°Zu kämpfen!¡± statt ¡°Nicht ins Gesicht!¡±. Wenn Sie den Schlachtruf lieber ausschalten möchten, können Sie einfach Folgendes eingeben:
/smbc2
Unser Echo ist für diesen Fall nicht sehr gut formuliert (es wird nur ¡ °Schlachtruf auf ¡ ± gesetzt). Wenn dies ein echtes AddOn für die breite Öffentlichkeit wäre, würden wir den Wert von msg testen und ein spezielles Echo anzeigen, wenn der Benutzer den Schlachtruf löscht. Da dies nur ein Beispiel ist, werden wir¡t komplizieren den Code.
LETZTE WORTE
Wenn Sie die neue Version des Addons ausprobieren und Ihr Charakter zwei Kampfschreie schreit, liegt dies wahrscheinlich daran, dass Sie das AddOn aus Teil Eins dieses Handbuchs noch installiert und aktiv haben. Da wir mit der Benennung vorsichtig waren, wird dies keine Fehler verursachen. Aber es isn¡t wahrscheinlich, was Sie wollen, entweder. Holen Sie sich einfach deaktivieren oder löschen Sie die erste Version C die neue ist sowieso besser.
There¡s ein Problem, obwohl: Ihr Schlachtruf ist zwischen den Sitzungen verloren. Jedes mal, wenn Sie schließen und neu starten WoW, Sie¡ll wieder ¡°Nicht in das Gesicht!¡±. Wenn Sie¡re bereit, fahren Sie mit Teil Drei und wir¡ll sehen, wie Sie Ihre bevorzugte Schlachtruf ¡° stick¡ ± zwischen den Sitzungen zu machen.