Register for your free account! | Forgot your password?

You last visited: Today at 15:10

  • Please register to post and access all features, it's quick, easy and FREE!

 

WoW LUA Guide

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Aug 2006
Posts: 445
Received Thanks: 519
WoW LUA Guide

Ich schreib hier ma n kleinen guid zu lua im speziellen aber für WoW. Das ganze is mit sicherheit ne perfekt und hat ne die beste Ordnung aber es sollte ne übersicht bieten
Fals wer fehler findet kanners gerne sagen bin ne besonders gut in tuts schreiben :P und das hier hab ich ma eben aufgeschrieben wies mir grade eingefallen is :sMehr kommt noch.

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)
PHP Code:
-- Ein einzeiliger Kommentar

--[[ Ein Kommenter
über mehrere 
Zeilen 
]]-- 
1.2 Nachrichten Ausgeben
Um etwas ingame auszugeben (was man nur selbst siht!) kann man folgendes nutzen
PHP 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.
PHP 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 leichtesten 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.
PHP Code:
/run print(type("Hi")) --> Gibt "string" zurückEin string ist an den "" oder '' zu erkennen
/run print(type(123)) --> Gibt "number" zurückNumber ist wie der name schon sagt nur eine Zahl.
/
run print(type(true)) --> Gibt "boolean" zurückBoolean 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.
PHP Code:
"Ich bin ein string"
"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 ..
PHP Code:
"Ich bin "
"ein string."
print(a..b) --> gibt Ich bin ein stringaus
print(a.."ein string.") --> gibt Ich bin ein stringaus 
Strings können auch eingefärbt werden und zwar mit |caarrggbb|r
PHP 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 Das alles zu erklären währe keine kleine übersicht mehr^^
Um das am besten zu verstehen kann mas ja mal ingame Testen
PHP 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 eig verwendet wenn man z.B. mit den Zahlen was rechnen will. Die zahlen dürfen nicht innerhalb der "" oder '' stehen.
PHP Code:
1
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()
PHP Code:
print("1"+"2") --> nicht möglich
print(1+"2") --> Auch nicht möglich
print(1+2) --> Funktioniert

"1"
2
print(a+b)-- Funktioniert nicht da a ja ein string istDas lässt sich einfach mit tonumber() lösen das den string in eine number umwandelt.
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 Vergelichsoperatoren.
PHP 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 n paar beispiele
PHP 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

PHP Code:
for i=1,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:
1
schleife 
true

while schleife do --> wiederholt sich solange "schleife" true
    i
=i+--> Bei jedem durchgang wird zu "i" eins dazugezählt
    
if == 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
PHP Code:
= {} --> 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
PHP Code:
= { --> Tabelle wird erstellt
    
["a"] = "stringa", --> Tabelle wird gefüllthier 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:
= { --> Tabelle wird erstellt
    
["a"] = {
        [
"b"] = "stringa", --> Tabelle wird gefüllthier 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
PHP Code:
= {"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
PHP 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
PHP 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.
PHP 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
PHP 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.
PHP 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.
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"]]]) ()
  • 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
PHP 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) ()
  • 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)
PHP 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 



Los is offline  
Thanks
35 Users
Old   #2
 
elite*gold: 0
Join Date: Aug 2006
Posts: 445
Received Thanks: 519
Platzhalter need den no^^


Los is offline  
Thanks
4 Users
Old   #3
 
elite*gold: 0
Join Date: Apr 2008
Posts: 55
Received Thanks: 4
danke dir für die mühe
Atoos is offline  
Old   #4
 
elite*gold: 0
Join Date: Sep 2007
Posts: 197
Received Thanks: 20
sieht ganz hilfreich aus für leute die sch noch nicht mit programmieren beschäftigt haben :-)


ginky is offline  
Old   #5
3-2-1...Let's Jam
 
elite*gold: 0
Join Date: May 2007
Posts: 60,168
Received Thanks: 27,864
Ich move mal lieber in die Addon sektion und mach den Thread sticky
Obilee is offline  
Thanks
1 User
Old   #6
 
elite*gold: 0
Join Date: Aug 2008
Posts: 334
Received Thanks: 92
Frage:
Wie bekomm ich das hin das ich etwas im Guild sage und dahinter ein Spell gelinkt is?

Edit: Was kommt bei GetSpellLink hin fürn Item?
Varti is offline  
Old   #7
 
elite*gold: 0
Join Date: Sep 2009
Posts: 187
Received Thanks: 110
ich hab mal ne gaaanz dumme frage...
muss ich dat ganze in den chat schreiben oder wie?
Fresh^^ is offline  
Old   #8

 
elite*gold: 20
Join Date: May 2006
Posts: 2,011
Received Thanks: 784
Du kannst den Code entweder durch den "/script" Befehl im Chat/in einem Makro ausführen oder deinen Code in ein Addon schreiben, dass dann mit dem Spiel geladen wird.
Uzgarel is offline  
Old   #9
 
elite*gold: 0
Join Date: Sep 2009
Posts: 187
Received Thanks: 110
wie in ein addon schreiben? das kapier ich nicht so richtig...
Fresh^^ is offline  
Old   #10

 
elite*gold: 20
Join Date: May 2006
Posts: 2,011
Received Thanks: 784
Du gehst mit dem Datei-Explorer in das Verzeichnis, in das Du WoW installiert hast, standardmäßig ist das C:\Programme\World of Warcraft\. Dort dürftest Du einen Ordner "Interface" finden, wenn nicht, kannst Du ihn erstellen. Darin ist wiederum ein Unterordner "Addons" (ggf. auch den wieder erstellen) zu finden.
Gehst Du in den Ordner rein, kannst Du einen neuen Ordner mit dem Namen des Addons, das Du erstellen willst, neu machen. Hier nenne ich den einfach mal "lolAddon", das kann aber irgendwas sein, was auch immer Du willst. In dem Ordner drin erstellst Du dann mit einem Texteditor (ich nehme gerne Notepad++) mind. 2 Dateien. Eine heißt "lolAddon.toc" (muss genauso heißen, wie der Ordner) und dann noch eine "core.lua", wobei dabei der Name egal ist.
In die .lua-Datei kannst Du jetzt den Lua-Code reinschreiben, den Du mit obigem Guide gelernt hast. Das kann unbegrenzt viel sein, aber es geht halt nur Lua und auch nur in dem Umfang, in dem Blizz die Funktionen freigegeben hat.
In die .toc Datei schreibst Du Sachen wie den Autor des Addon, die Versionsnummer, den Namen des Addon, kurze Notizen (alles Optional) und (ganz wichtig), dass die .lua-Datei aufgerufen wird.
Am besten, Du gehst mal auf und guckst dir ein paar Addons an, wie die aufgebaut sind. Da Du scheinbar noch gar keine Erfahrung mit Addons hast, dürfte es auch ganz spannend sein, erstmal nur Addons zu benutzen und nicht sofort mit dem Coden anzufangen.

So far
Uzgarel
Uzgarel is offline  
Thanks
1 User
Old   #11
 
elite*gold: 0
Join Date: Sep 2009
Posts: 187
Received Thanks: 110
naja xD ich benutze schon addons wie xperl, questhelper, tourguide etc. aber mit deren aufbau hab ich mich nie beschäftigt
Fresh^^ is offline  
Old   #12
 
elite*gold: 56
Join Date: Mar 2010
Posts: 642
Received Thanks: 62
Moin

Ich blick da i wie nicht durch ich will das am Anfang wenn man sich einloggt im Chatfenster "xy" steht aber bekomms einfach nicht hin --"
Kann mir bitte jemand helfen?
Flexyo is offline  
Old   #13
 
elite*gold: LOCKED
Join Date: Aug 2006
Posts: 3,292
Received Thanks: 866
Code:
local f = CreateFrame("Frame")
f:RegisterEvent("PLAYER_ENTERING_WORLD")
function f:OnEvent(event, ...)
for i=1,20 do   
print("Hi")
end
end
f:SetScript("OnEvent", f.OnEvent)
als *.lua abspeichern, *.toc dazu hauen und wow starten
scenebase is offline  
Thanks
1 User
Old   #14
 
elite*gold: 0
Join Date: Sep 2007
Posts: 745
Received Thanks: 93
Quote:
local f = CreateFrame("Frame")
f:RegisterEvent("PLAYER_ENTERING_WORLD")
function f:OnEvent(event, ...)
for i=1,20 do
print("Hi")
end
end
f:SetScript("OnEvent", f.OnEvent)
was es macht ist klar, erklären plox :3

Quote:
for i=1,20 do
wartet also 20 sekunden nach dem "Entering world" geklickt wurde?
wenn ja, wo wird das tempo bestimmt?

und das mit dem
Quote:
local f = CreateFrame("Frame")
hab ich auch nicht ganz gerafft :P
ReggeGandalf is offline  
Old   #15
 
elite*gold: 0
Join Date: May 2010
Posts: 3,135
Received Thanks: 645
Schön Aufgebaut und guter Guide :>


Psychoduke is offline  
Reply



« Previous Thread | Next Thread »

Similar Threads
[GUIDE] How to Skill Guide für alle Klassen (Teil 1/2 Krieger und Ninjas)
So hier ist mein erster Guide :cool: hoffe er gefällt euch :D 1. Der Krieger 1.1 Der Körper Krieger Die Vorteile des Körper-Kriegers (...
42 Replies - Metin2 Guides & Templates
[GUIDE] Item Filter Guide | Cabal Crafting & Dungeon Guide by Dewa Gempak.
Since its his work, just SHARING it here, i just gonna link his URL from his work. because i dont like copy and pasting other ppl's guides: ...
5 Replies - Cabal Guides & Templates



All times are GMT +1. The time now is 15:10.


Powered by vBulletin®
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Abuse
Copyright ©2017 elitepvpers All Rights Reserved.