Thema: LUA Grundlagen Guide
Diskutiere im LUA Addon-Entwicklung Forum über LUA Grundlagen Guide. 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 ;) ...
Du bist noch kein Mitglied?
Mitglieder sehen keine störende Werbung und können alle Funktionen des Forums nutzen. Die Registrierung ist kostenlos und es ist keine Bestätigung deiner E-Mail Adresse erforderlich! Schließe dich rund 260.000 Mitgliedern an und sei Teil des größten, deutschen World of Warcraft Forums!
Alt 22.04.2011, 12:12   #1
Level 14
 
Avatar von psychoduke
 
Fraktion: Allianz
 
Beiträge: 96

LUA Grundlagen Guide

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 ;)

Geändert von psychoduke (22.04.2011 um 17:29 Uhr)
psychoduke ist offline  
Alt 22.04.2011, 12:12  
Anzeige
 
 

AW: LUA Grundlagen Guide

Hast du schon im Lösungsbuch nachgelesen? Eventuell hilft dir das ja weiter...
__________________
Schäppchen für WoWler
 
Alt 23.04.2011, 01:04   #2
Level 65
 
Avatar von Ollowaain

... ist genervt
 
Fraktion: Horde
Klasse: Druide
 
Beiträge: 2.105

AW: LUA Grundlagen Guide

Du bist ein Engel!

Du hast mein interesse an der Geschichte auf jeden Fall geweckt.
Werde mir das morgen gleich mal genauer anschauen
Den Guide hab ich zwar bisher nur überflogen, aber sieht wirklich vernünftig aus. Inhaltlich kann ich natürlich noch nichts dazu sagen, kenn mich auf dem Gebiet ja noch nicht aus.
Wichtig wäre allerdings ein Guide, der auch wirklich LUA in Verbindung mit WoW erklärt. Findet sich zwar mittels Google, aber zumindest ein Link wäre an dieser Stelle nett ^^

Gruß Ollowaaín
Ollowaain ist offline  
Alt 23.04.2011, 01:22   #3
Level 14
 
Avatar von psychoduke
 
Fraktion: Allianz
 
Beiträge: 96

AW: LUA Grundlagen Guide

Zitat:
Zitat von Ollowaain Beitrag anzeigen
Du bist ein Engel!

Du hast mein interesse an der Geschichte auf jeden Fall geweckt.
Werde mir das morgen gleich mal genauer anschauen
Den Guide hab ich zwar bisher nur überflogen, aber sieht wirklich vernünftig aus. Inhaltlich kann ich natürlich noch nichts dazu sagen, kenn mich auf dem Gebiet ja noch nicht aus.
Wichtig wäre allerdings ein Guide, der auch wirklich LUA in Verbindung mit WoW erklärt. Findet sich zwar mittels Google, aber zumindest ein Link wäre an dieser Stelle nett ^^

Gruß Ollowaaín
Vielen Dank für das Feedback. Ich hab auf Wunsch von dir mal diesen Thread erstellt. Da werd ich Tutorials für z.B. praktische Beispiele sammeln.
psychoduke ist offline  
Alt 25.04.2012, 11:47   #4
Level 1
 
 
Beiträge: 1

AW: LUA Grundlagen Guide

wie krieg ich nur ne leere seite wenn dich den verlinken thread aufrufen will
Jungbluth11 ist offline  
Alt 25.04.2012, 12:26   #5
Moderator
 
Avatar von Arghant

... ist schuldig
 
Fraktion: Allianz
Realm: Nethersturm
Rasse: Gnome
Klasse: Krieger
 
Beiträge: 7.881
Tagebuch-Einträge: 4

AW: LUA Grundlagen Guide

der thread ist jetzt genau 1 jahr alt, da ist es nicht unwahrscheinlich das so mancher link nicht mehr geht ^^
Arghant ist offline  

« Hilfe | - »

Ähnliche Themen zu „LUA Grundlagen Guide”
Stichworte zum Thema LUA Grundlagen Guide

wow lua nur 1. zeile wird ausgeführt

,

wow lua arrays

, debuff vom 2. tank anzeige, lua code guide, lua tutorial deutsch, eep lua befehle, eep 11 lua, eep lua script, eep lua scleife, eep lua bestimmtem rückgabewert erhalten