Ich möchte euch heute mal die Grundlagen von LUA an praktischen Anwedungsbeispielen in WoW beibringen. Der Guide ist in zusammen arbeit von mir und
Los damals in einem anderen Board entstanden. Ich muss die Rechtschreibung noch etwas ausbessern, da der Guide etwas älter ist ;) Bei Fragen und Feedback einfach hier nachfragen. Viel Spaß :)!
Ich freue mich auf euer Feedback und Wünsche! Zeigt mir das ich mehr machen soll ;) 1. Allgemeines
1.1 Kommentare
1.2 Nachrichten Ausgeben
1.3 lokal
2. Typen und Werte
2.1 String
2.2 Number
2.3 Boolean
3. Anweisungen
3.1 if then else
3.2 Schleifen
4. Tabellen
4.1 Tabelle erstellen
4.2 for k,v in pairs() do
5. Functionen
5.1 Einfache Function
5.2 Function mit Parameter
5.3 Function mit Rückgabe
5.4 Function vorzeitig abbrechen
6. WoW API
6.1 Wie verwenden
1. Allgemeines
Um in WoW eine lua function auszuführen gibt es 2 Möglichkeiten, entweder /run oder /script
1.1 Kommentare
Kommentare kann man wie folgt in seine lua schreiben (Kommentare dienen nur der übersicht und haben keine Auswirkungen auf das Addon)
Code:
-- Ein einzeiliger Kommentar
--[[ Ein Kommenter
über mehrere
Zeilen ]]--
1.2 Nachrichten Ausgeben
Um etwas ingame auszugeben (was man nur selbst sieht!) kann man folgendes nutzen
Code:
ChatFrame1:AddMessage("Hi")
DEFAULT_CHAT_FRAME:AddMessage("Hi")
print("Hi")
Alle 3 Befehle bewirken das selbe, nämlich das der Text Hi im chatfenster1 ausgegeben wird.
1.3 lokal
Lokale Variablen sind ziemlich wichtig und es sollte vor alle Variablen geschrieben werden. Wird etwas lokal kann es nur innerhalb dieser Datei/Schleife/function verwendet werden.
Code:
lokal Test = "lol"
lokal Num = 1
local t = {}
2. Typen und Werte
In lua gibt es verschiedene Grundtypen ich werde hier mal die wichtigsten nennen. Um das am lLeichtesten verständlich zu machen schaut man sich das ganze am besten mal ingame an indem man die einfache function type() benutzt. Eine genauere erklärung zu allem folgt unten.
Code:
/run print(type("Hi")) --> Gibt "string" zurück. Ein string ist an den "" oder '' zu erkennen
/run print(type(123)) --> Gibt "number" zurück. Number ist wie der name schon sagt nur eine Zahl.
/run print(type(true)) --> Gibt "boolean" zurück. Boolean sind true/false
Alle 3 Befehle bewirken das selbe, nämlich das der Text Hi im chatfenster1 ausgegeben wird.
2.1 String
Strings sind eigentlich nichts anderes als eine Folge von Zeichen die innerhalb von "" oder '' stehn.
Code:
a = "Ich bin ein string"
b = "Ein string mit zahlen 12345"
print(a) --> gibt Ich bin ein string aus
print(b) --> gibt Ein string mit zahlen 12345 aus
print("12345") --> gibt 12345 aus
Um strings zusammenzufügen braucht man immer die 2 Punkte hintereinenader ..
Code:
a = "Ich bin "
b = "ein string."
print(a..b) --> gibt Ich bin ein string. aus
print(a.."ein string.") --> gibt Ich bin ein string. aus
Strings können auch eingefärbt werden und zwar mit |caarrggbb|r
Code:
RoterString = "|cffff0000RoterString|r"
BlauerString = "|cff0070ddBlauerString|r"
GrünerString = "|cff1eff00GrünerString|r"
Strings können auch verschieden bearbeitet werden hier mal ne kleine übersicht wer mehr erfahren will lua-users wiki: String Library Tutorial Das alles zu erklären währe keine kleine übersicht mehr^^
Um das am besten zu verstehen kann mas ja mal ingame Testen
Code:
/run print("Erste Zeile\nZweite Zeile") --> Gibt Erste Zeile aus und in der nächsten Zeile Zweite Zeile
/run print("Die \"Anführungszeichen\" bleiben") --> Gibt die Anführungszeichen mit also: Die "Anführungszeichen" bleiben ohne die "\" würde es zu einem fehler kommen.
/run print(string.lower("CAPS INC")) --> Wandelt alles in kleinbuchstaben um also: caps inc
2.1 Number
Numbers wie der
Name schon sagt sind Zahlen. Die Zahlen werden eigentlich verwendet wenn man z.B. mit den Zahlen was rechnen will. Die zahlen dürfen nicht innerhalb der "" oder '' stehen.
Code:
a = 1
b = 2
print(a) --> gibt 1 aus
print(b) --> gibt 2 aus
print(a+b) --> gibt 3 aus
print(1+2) --> gibt 3 aus
Als Rechenzeichen verwendet man:
+ um etwas zu Addieren (2+2 = 4)
- um etwas zu Subtrahieren (4-2 = 2)
/ um etwas zu Dividieren (4/2 = 2)
* um etwas zu Multiplizieren (2*4 = 8)
Solltet ihr mit Zahlen rechnen wollen diese allerdings als String festgelegt/zurückgegeben werden gibt es die funktion tonumber()
Code:
print("1"+"2") --> nicht möglich
print(1+"2") --> Auch nicht möglich
print(1+2) --> Funktioniert
a = "1"
b = 2
print(a+b)-- Funktioniert nicht da a ja ein string ist. Das lässt sich einfach mit tonumber() lösen das den string in eine number umwandelt.
a = tonumber(a) -- a wird zu einer number
print(a+b) -- gibt nun 3 aus
2.3 Boolean
Boolean ist wie vorher schon einmal erwähnt true oder false.
3. Anweisungen
3.1 if then else
Das wohl wichtigste um
if then else erstmal zu benutzen sind wohl die Vergleichsoperatoren.
Code:
< --> kleiner
> --> größer
<= --> kleiner oder gleich
>= --> größer oder gleich
== --> gleich
~= --> ungleich
if then else überprüft die gegebene Bedinung und führt je nachdem ob diese gegeben ist oder nicht den
if oder else Teil aus.
Hier ein paar Beispiele
Code:
vergleich1 = true
vergleich2 = false
if vergleich1 == true then --> das "== true" ist nicht unbedingt nötig es würde auch reichen "if vergleich1 then"
print("if wird ausgeführt") --> wird ausgegeben weil vergleich1 ja true ist.
else
print("else wird ausgeführt")
end
if vergleich2 == true then
print("if wird ausgeführt")
else
print("else wird ausgeführt") --> wird ausgegeben weil vergleich2 ja false ist.
end
if vergleich2 ~= true then --> Hier währe auch möglich zu schreiben "if not vergleich2 then"
print("if wird ausgeführt") --> wird ausgegeben weil vergleich2 ja ungleich true ist also false.
else
print("else wird ausgeführt")
end
Man kann damit auch überprüfen ob etwas exestiert oder nicht das macht man dann so
PHP-Code:
if vergleich then
print("if wird ausgeführt")
else
print("else wird ausgeführt") --> wird ausgegeben weil vergleich ja nicht exestiert.
end
if not vergleich then
print("if wird ausgeführt") --> wird ausgegeben weil vergleich nicht exestiert (Das "not" ist hierbei wichtig).
else
print("else wird ausgeführt")
end
3.2 Schleifen
Es giebt verschiedene Schleifen alle haben gemeinsam das sie solange durchlaufen bis die Bedinung erfüllt is.
Die for Schleife
Die for schleife kann in 2 arten geschrieben werden
for i=1,5 do i: "i" steht für die aktuelle Zahl die gerade ausgeführt wird, bei dem beispiel wird bei i in jedem durchlauf 1 dazugezählt
i: Bestimmt den anfangswert von "i" in dem fall also 1 kann aber auch 0 oder -5 sein.
5: steht für die Zahl die "i" erreichen muss um die schleife zu beenden
for i=1,5,0.5 do i: "i" steht für die aktuelle Zahl die gerade ausgeführt wird
i: Bestimmt den anfangswert von "i" in dem fall also 1 kann aber auch 0 oder -5 sein.
5: steht für die Zahl die "i" erreichen muss um die schleife zu beenden
0.5: gibt eine Zahl an wieviel pro durchlauf zu "i" hinzugezählt wird
Code:
for i=1,5 do
print(i) --> gibt bei jedem durchlauf i aus am schluss hat man also 5 ausgaben mit den zahlen von 1-5
end
for i=1,5,0.5 do
print(i) --> gibt bei jedem durchlauf i aus am schluss hat man also 10 ausgaben mit den zahlen von 1-10
end
Die while Schleife
Die while schleife wird so lange ausgeführt bis die bedinung false ist.
PHP-Code:
i = 1
schleife = true
while schleife do --> wiederholt sich solange "schleife" true
i=i+1 --> Bei jedem durchgang wird zu "i" eins dazugezählt
if i == 5 then --> wenn "i" 5 ist dann
schleife = false --> schleife wird auf false gesetzt.
end
end
Schleifen vorzeitig beenden
Um eine Schleife vorzeitig zu beenden gibt es break das macht nichts anderes als die schleife an der stelle zu beenden.
4. Tabellen
4.1 Tabelle erstellen
Tabelle erstellen und danach füllen
Code:
t = {} --> Tabelle wird erstellt
t["a"] = "stringa" --> Tabelle wird gefüllt
print(t["a"]) --> gibt nun "stringa" aus
Es ist aber auch möglich die Tabelle gleich am anfang zu füllen
Code:
t = { --> Tabelle wird erstellt
["a"] = "stringa", --> Tabelle wird gefüllt, hier ist das "," wichtig sonst gibts nen fehler
}
print(t["a"]) --> gibt auch "stringa" aus
Es können beliebig viele Tabellen in 1 Tabelle erstellt werden
PHP-Code:
t = { --> Tabelle wird erstellt
["a"] = {
["b"] = "stringa", --> Tabelle wird gefüllt, hier ist das "," wichtig sonst gibts nen fehler
}
}
print(t["a"]["b"]) --> gibt auch "stringa" aus
Sollte eine Tabelle nur mit einzelnen strings gefüllt werden ist es wichtig zu beachten das lua ab [1] anfängt zu zählen
Code:
t = {"stringa","stringb","stringc","stringd"} --> Die strings werden hier durchnummerriert
print(t[1]) --> gibt auch "stringa" aus
4.2 for k,v in pairs() do
Dies ist eig auch nichts anderes als eine schleife um Tabellen auszulesen
Code:
t= {
["k1"] = "v1",
["k2"] = "v2",
["k3"] = "v3",
}
for k,v in pairs(t) do
print(k.." = "..v) --> gibt nun bei jedem durchlauf den key und die value dazu aus also beim ersten ma "k1 = v1" zweiten ma "k2 = v2" dritten ma "k3 = v3" dann beedet sich schleife automatisch
end
5. Functionen
5.1 Einfache Function
Eine function wird immer mit "function FunktionName()" erstellt wichtig sind die () danach mehr dazu später
Code:
function ErsteTestFunction()
print("Hi ich bin eine Function")
end
--> Beim ausführen dieser Function wird nur das "Hi ich bin eine Function" ausgegeben mehr nicht
5.2 Function mit Parameter
Eine function kann auch so erstellt werden, dass benötigtest erst mit aufrufend er function dazugegeben wird. Dazu werden die () am ende der function gefüllt.
Wichtig dabei ist nur später vlt kontrollen einzubaun fals etwas nicht mitgegeben wird, das aber gebraucht wird innerhalb der function.
Code:
function ErsteTestFunction(bla1,bla2)
print(bla1..bla2)
end
--> ErsteTestFunction("Hi ich bin ","eine Function") --> Gibt "Hi ich bin eine Function" aus.
5.3 Function mit Rückgabe
Um eine function mit einer rückgabe zu versehn wird "return" benutzt
Code:
function ErsteTestFunction(zahl1)
local zahl = zahl1 + 2
return zahl
end
print(ErsteTestFunction(5)) --> Würde nun "7" ausgeben
5.4 Function vorzeitig abbrechen
Um eine function vorzeitig zu beenden wird "break" benutzt.
Das wird eig erst bei späteren functionen wichtiger, die einen wert unbedingt brauchen weil sie sonst nen lua fehler verursachen würden.
Code:
function ErsteTestFunction(string)
if not string then --> Wenn kein string vorhanden ist wird return ausgeführt und dadurch die function beendet
return
end
print(string) --> gibt es string wird dieser ausgegeben
end
ErsteTestFunction("string") --> Gibt string aus
ErsteTestFunction() --> Gibt nichts aus und verursacht auch keinen lua fehler
6. WoW API
Eine übersicht alle WoW API functionen findet ihr hier. (
World of Warcraft API - WoWWiki - Your guide to the World of Warcraft)
6.1 Wie verwenden
So ne seite ist wie folgt aufgebaut
Function mit rückgabewerten und erlaubten Parametern. Danach die Rückgabewerte und die erlaubten Parameter mit infos dazu. Miestens auch beispiele dazu.
Bei den Parametern siht man oft sachen die in [] geschrieben sind das sind werte die optional sind. Also bei unsrem beispiel
SendChatMessage("msg" [,"chatType" [,"language" [,"channel"]]]) (API SendChatMessage - WoWWiki - Your guide to the World of Warcraft)
- msg: Die nachricht muss eingegeben werden. Das ist hier die Chatausgabe
- chatType: nicht benötigt. Genau beschreibung findet sich auf der wowwikiseite
- language: nicht benötigt. Genau beschreibung findet sich auf der wowwikiseite
- channel: nicht benötigt. Genau beschreibung findet sich auf der wowwikiseite
Code:
SendChatMessage("Test") --> gibt "Test" im Sagenchat aus
SendChatMessage("Test","PARTY") --> gibt "Test" im Gruppenchat aus
SendChatMessage("Test","PARTY","DRAENEI") --> gibt "Test" im Gruppenchat aus allerdings in der sprache die nur Draenai haben
SendChatMessage("Test","WHISPER",nil,"WhisperName") --> flüstert "Test" and WhisperName
SendChatMessage("Test","CHANNEL",nil,"1") --> gibt "Test" im Channel Nr 1 aus
link = GetSpellLink(spellId or spellName) (API GetSpellLink - WoWWiki - Your guide to the World of Warcraft) - link: Der link für den spell
- spellId: SpellId für einen spell dessen link man will
- spellName: SpellName für für einen spell dessen link man will (es ist aber zu empfehlen immer die ID zu benutzen)
Code:
link = GetSpellLink(52610) --> 52610 = Wildes Brüllen
print(link) --> Gibt einen link für den spell von Wildes Brüllen aus
print(GetSpellLink(52610)) --> Gibt einen link für den spell von Wildes Brüllen aus
CHANGELOG Code:
- v0.1 - Erstellung des Threads / Todo - Rechtschreibung ausbessern
Und nochmals - Ich freue mich auf euer Feedback und Wünsche! Zeigt mir das ich mehr machen soll ;)