[Guide] World of Warcraft Lua

05/22/2011 21:14 Mingxie#1
Hallo liebe Elitepvpers Community,

Da die AddOn Sektion ziemlich tod ist was LUA-Coding angebelangt. Wollte ich einen kleinen LUA Guide schreiben. Vielleicht lassen sich ja manche dafür begeistern :)

INHALTSVERZEICHNIS

1. Vorwort
2. LUA - Was ist das?
  • 2.1 Definition
  • 2.2 Vorraussetzungen
  • 2.3 Der richtige Editor
  • 2.4 Andere Scriptsprachen in World of Warcraft?
3. LUA anwenden
  • 3.1 Kommentare
  • 3.2 local
  • 3.3 Strings und Werte
  • 3.4 Bedingungen
  • 3.5 Funktionen
  • 3.6 Tabellen
  • 3.7 Schleifen
  • 3.8 Farben
  • 3.9 Pfade
4. WoW API
5. Frames
  • 5.1 Definition
  • 5.2 Frames anwenden
  • 5.3 Texte einfügen
  • 5.4 Textur hinzuweisen
6. TOC Datei
  • 6.1 Definition
  • 6.2 Aufbau
  • 6.3 Alternativen
7. Selbststudium
8. AddOns selber herstellen (fortgeschritten)
  • 8.1 Inspiration suchen
  • 8.2 Blizzard UI
9. LUA Fehler erkennen
  • 9.1 LUA Fehler
  • 9.2 Taint Fehler
10. Regeln
11. Hilfreiche Links (Anhang)
__________________________________________________ ____________




1. Vorwort

Da der LUA Guide von Los ziemlich veraltet ist und auch nicht weitergeführt wird, wollt ich es besser machen. Ich schreibe in diesem Guide nur über mein Wissen. Das heißt: Dinge die ich nicht weiß bzw. noch nie benutzt habe werd ich nicht hier erwähnen! Und zwischendurch werdet ihr ein paar Spoiler finden, öffnet sie dort sind ein paar Tipps zum lesen :)

__________________________________________________ ____________

2. LUA - Was ist das?


2.1 Definition

Lua (auf portugiesisch: Mond) ist eine Scriptsprache. Lua wurde 1993 von der Computer Graphics Technology Group der Päpstlichen Katholischen Universität von Rio de Janeiro in Brasilien entwickelt. In Wow wird sie benutzt um die AddOns zu schreiben. Alles was sich in eurem Interface\\AddOns\\... befindet sind AddOns. Es ist eine sehr einfache
Scriptsprache, die man leicht verstehen kann. Natürlich sieht das fortgeschrittene Scripten ganz anders aus als bei Anfängern.


2.2 Vorraussetzungen

Ihr solltet nicht schnell aufgeben falls ihr nicht weiterkommt. Und wenn ihr diesen Satz liest und in 20 Minuten mit Freunden rausgeht, dann solltet ihr ab hier aufhören zu lesen. Nehmt euch Zeit und liest euch alles in Ruhe durch.
Englisch- und Mathekenntnisse sind auch vorrausgesetzt. Falls ihr nicht weißt was Width,Height oder SetPoint bedeutet, dann besucht lieber einen Englischkurs.
Mathematik braucht man nicht unbedingt, aber das Koordinatensystem sollte man in der Schule gelernt haben sollen. Der Groß- und Kleinschreibung sollte man auch mächtig sein.

2.3 Der richtige Editor

Auf jeden Fall ist ein guter Editor wichtig. Der 0815 Editor den ihr kriegt bei der Windows Installation ist nicht geeignet um zu scripten. Ich empfehle dringend Notepad++ zu benutzen. Er ist einfach zu bedienen und der Text ist farbig. Ich meine auch Notepad++ und NICHT Notepad!

Man kann auch Scite benutzen, aber da ich mich an den farbigen Text von Notepad++ gewöhnt habe, benutze ich den nicht. Scite punktet aber auf jeden Fall mit seiner Script Hilfe! Dennoch hält sich das mit der Script Hilfe in Grenzen. Ist also nichts besonderes.

Notepad++: [Only registered and activated users can see links. Click Here To Register...]

2.4 Andere Scriptsprachen in World of Warcraft?

Es existiert noch außer LUA in WoW XML. XML muss man nicht lernen, alles was man in XML niederschreibt ist zu 99% mit LUA genauso machbar. Ich werd auch nur ganz kurz über XML was schreiben, aber näher werde ich auch nicht darauf eingehen!

__________________________________________________ ______________


3. LUA anwenden

So nun kommen wir zum spannenden Teil. Es gibt verschiedene Scripts. Die wichtigsten sind hier aufgelistet! Lest euch alles Aufmerksam durch.

3.1 Kommentare
Ein Kommentar ist nichts besonderes. Es dient nur als Notiz für den Author oder dem Benutzer eines AddOns.
So könnte ein Kommentar aussehen im Editor.

[Only registered and activated users can see links. Click Here To Register...]


3.2 local

Local wird euch dauernd begegnen in Scripts. Es sollte vor jeder Variable geschrieben werden.

[Only registered and activated users can see links. Click Here To Register...]

mingxie ist nun lokalisiert und kann NUR in der LUA Datei benutzt werden. Das heißt: Es kann nicht in anderen LUA Dateien genutzt werden, so zicken sich dann die AddOns nicht mehr gegenseitig an.

Jedoch - local vergrößert nur die Datei und das Laden dauert länger, deswegen solltet ihr es nur dann benutzen, wenn ihr es auch wirklich benötigt.


3.3 Strings und (booleanische) Werte

Ein String ist nichts anderes als ein Text der zwischen "" oder '' steht.

Code:
local mingxieguide = "Lolig" -- Das ist ein String
Nun könnt ihr mingxieguide für den späteren Gebrauch anwenden. Das gleiche könnt ihr auch mit Werten machen!
Falls ihr 2 Strings gleichzeitig verwenden wollt so muss ein ".." stehen.

Code:
local a = "Lolig" -- Das ist ein String
local b = "Lol"
print(a..b)
Falls ihr mit Werten arbeiten wollt schaut die Addition/.../... so aus:
+ (addieren)
- (subtrahieren)
* (multiplizieren)
/ (dividieren)

Booleanische Werte sind nichts anderes als true und false. Kann man aber auch als Ja und Nein gelten lassen.
Beispiel:
Code:
Frame:SetMovable(true)
Frame:SetMovable(ja) [frame mobil machen]


3.4 Bedingungen

Eine Bedingung kann verschieden aussehen. Doch jede Bedingung fängt mit if an und hört wieder mit end auf! Ein Beispiel:

Code:
if login then 
print("Du hast dich eingeloggt)
end
Dieser Code ist nur ein Beispiel! Ingame wird er zu einem LUA Fehler führen!

Es geht auch so:

if not ... then ... end
Wenn nicht ... dann ... ende

if ... then ... else ... end
Wenn ... dann ... andernfalls ... ende

Diesmal ein funktionierendes Beispiel:
Code:
if not IsAddOnLoaded("Grid") then return end
Falls "Grid" nicht aktiv ist, dann hört der Script ab hier auf zu laden.


3.5 Funktionen

Eine Funktion hat viele schreibweisen. Wir konzentrieren uns aber auf die einfachste
Code:
[B]local function FunktionName()[/B]
die () sind wichtig. ohne die wird es zu einem LUA Fehler kommen! Eine solch einfache Funktion wird so nichts tun. Um sie auszuführen muss man den Funktionsnamen wiederholen.

Code:
local function Mingxie()
print("Mingxie")
end
Mingxie() -- Funktion wird nun ausgeführt
Es gibt aber auch Funktionen mit Parametern. Das heißt: Man kann Funktionen ausfüllen damit sie erst arbeiten.

Code:
local function Mingxie(irgendwas)
print(irgendwas)
end
Mingxie("Lol")
Lol ist nun irgendwas. Man kann aber natürlich mehrere Parameter einfügen, aber das ist als Anfänger garnicht nötig.

Um eine Funktion mit Rückgabe zu erstellen, reicht ein einfaches return
(Ist von Los 1:1 kopiert)

Code:
local function ErsteTestFunction(zahl1)
    local zahl = zahl1 + 2
    return zahl
end
print(ErsteTestFunction(5)) --> Würde nun "7" ausgeben

3.6 Tabellen

Um eine Tabelle zu erstellen tut man als erstes:

Code:
mingxie = { }
Es kommt kein local davor! So nun ist unsere Tabelle erstellt um sie auszufüllen machen wir anschließend:

Code:
mingxie = { 
["lol"] = lol,
}
Bloß nicht das Komma vergessen!! Nun man schreibt bestimmt nicht die ganze Klammern etc mit. Mit Punkten gehts einfacher:

Code:
print(mingxie.lol)
Gibt nun aus der Tabelle ["lol"] aus.


3.7 Schleifen

Eine Schleife wird häufig benutzt um mehrere Sachen gleichzeitig auszuführen, ohne für jeden Code das selbe 5-Mal hinzuschreiben. Eine Schleife beginnt immer mit for i = 1, WERT_HIER do und endet mit einem end.

So könnt eine Schleife aussehen:

Code:
for i = 1, 5 do
	if i [b]==[/b] 1 then
		print("Erste Schleife")
		i = i + 1 -- Wir erhöhen sie auf 2
	elseif i [b]==[/b] 2 then
		print("Zweite Schleife")
		i = i + 1 -- Wir erhöhen sie auf 3
	...
	...
	end
end
Anstatt der 5 kann auch natürlich ein anderer Wert stehen.

3.8 Farben

Natürlich kann man auch die Farben eines jeweiligen Objektes bestimmen. Es gibt Ausnahmen, wann man welche Farbmethode benutzt!

Frames (Objekt, dazu später noch mehr ...) färben:

Ein Frame wird normalerweise durch ein Backdrop (Hintergrund) sichtbar und gefärbt.

Code:
Frame:SetBackdrop(...) -- dazu später mehr
Frame:SetBackdropColor(ROT, GRÜN, BLAU, [ALPHA])
Frame:SetBackdropBorderColor(ROT, GRÜN, BLAU, [ALPHA])
Alpha (Sichtbarkeit) ist optional. Normalerweise wird es via Dezimalstelle gefärbt, heißt also:

Code:
Frame:SetBackdrop(...) -- dazu später mehr
Frame:SetBackdropColor(0.58, 0.87, 0.91, 0.6)
Frame:SetBackdropBorderColor(0, 0, 0, 1)
0 = Schwarz
...
...
1 = Weiß

Falls ihr ohne Dezimalstellen färbt, dann müsst ihr es so machen:

Code:
Frame:SetBackdrop(...) -- dazu später mehr
Frame:SetBackdropColor(44/255, 78/255, 255/255, 0.6)
Frame:SetBackdropBorderColor(32/255, 68/255, 23/255, 1)
Eine Zahl die höher ist als 1 muss dann durch 255 dividiert werden. Wert/255. 255 ist das Maximum.


Text (Fontstring):

Fontstrings (Schriftzüge, dazu aber später mehr) werden so gefärbt:

Code:
Frame.text:SetTextColor(ROT, GRÜN, BLAU, [ALPHA])
Texturen:

Texturen auf Objekten werden mit SetTexture(ROT, GRÜN, BLAU, [ALPHA]) oder SetVertexColor(ROT, GRÜN, BLAU, [ALPHA]) gefärbt.

Code:
Frame.texture:SetTexture(ROT, GRÜN, BLAU, [ALPHA])
Frame.texture:SetVertexColor(ROT, GRÜN, BLAU, [ALPHA])
Statusbar: (zb: HP Leiste)

Statusbars hingegen werden mit SetStatusBarColor(...) gefärbt.

Code:
Frame:SetStatusBarColor(ROT, GRÜN, BLAU, [ALPHA])
Text:

Texte hingegen die nicht mit SetTextColor(...) gefärbt werden können, werden mit |caarrggbb|r bearbeitet. Funktioniert auch mit Strings!

print("|cff888888Dieser Text wird grau|r")
local a = "|cff888888Dieser Text wird grau|r"

Die Farbtabellen werd ich unten auflisten.


3.9 Pfade

Ein Pfad ist unbedingt von Nöten falls ihr eure Texturen oder Schriften verwenden wollt in WoW.

So könnte ein Pfad aussehen:
Code:
"Interface\\AddOns\\MeinOrdner\\MeineSchrift.ttf"
Der Pfad beginnt immer mit Interface\\AddOns... danach folgt der Name eures Ordners und dann der Name euer Schrift! Nicht vergessen:
Die Endung muss immer dabei stehen sonst erkennt Wow die Schrift nicht!

Ein Pfad kann auch in Verbindung mit Strings angewendet werden:

Code:
local mingxie = "Interface\\AddOns\\MeinOrdner\\MeineSchrift.ttf"
Die Endungen für Texturen sind .tga und .blp.
Und auch nur diese werden angenommen! .jpg und so weiter geht nicht.

Verschiedene Schreibweisen:

Code:
local mingxie = "Interface\\AddOns\\MeinOrdner\\MeineSchrift.ttf"
local mingx = [[Interface\AddOns\MeinOrdner\MeineTextur.tga]]
local mingz = [=[Interface\AddOns\MeinOrdner\MeineTexture2.blp]=]
Bei den eckigen Klammern kommt nur ein Backslash.

__________________________________________________ ____________


4. WoW API

Eine ausführliche und gute Auflistung der WoW API findet ihr hier:

Siehe Anhang bitte...

Vergesst nicht die Groß- und Kleinschreibung, Kommas, die (geschweiften {}) Klammern ().
Die Seite ist auf Englisch!


__________________________________________________ ____________


5. Frames


5.1 Definition

Nun erstellen wir Frames anstatt den 08/15 "Hello World" Müll. Erstellt zunächst eine .LUA Datei die ihr mingxie bennent.
Was ist eigentlich ein Frame? Nun es ist einfach alles. Guckt auf euer Blizzard Interface etc. Alles was ihr sieht sind Frames.

Frames bedeutet laut dict.cc:
Rahmen
Gerüst
Spant

Doch ich nenne es einfach ein Objekt.

5.2 Frames anwenden

Ein Frame wird eingeleitet mit einer Variable

Code:
local mingxie
Nun ergänzen wir es mit der WoW API CreateFrame

Code:
local mingxie = CreateFrame("Frame", "FRAME_NAME", PARENT)
Nun ist unser Frame erstellt jedoch ist es nicht sichtbar, aber erstmal zur Erklärung.

CreateFrame("Frame", "FRAME_NAME", PARENT)

-- "Frame"
Die Eigentschaft unseres Frames ist "Frame" es gibt noch "Button", "Editbox" und "Statusbar", jedoch ist das nicht nötig als Anfänger.

-- "FRAME_NAME"
Hier kommt einfach nur ein Namen für das Frame. Zum Beispiel: "Mingxie". Jedoch benennt es nicht so: "Lolrolflicksdeh___imamkewl". Ein einfach und kurzer Name ist ein guter Name.

-- "PARENT"
Ist der Ursprung, sozusagen wo es verankert werden soll. Benutzt UIParent.

So könnte es aussehen:

Code:
local mingxie = CreateFrame("Frame", "Mingxie", UIParent)
Wir bestimmen nun die Höhe und Breite des Frames.

Code:
local mingxie = CreateFrame("Frame", "Mingxie", UIParent)
mingxie:SetWidth(WERT)
mingxie:SetHeight(WERT)
Wir machen beginnen in der neuen Zeile mit unserer Variable und machen einen Doppelpunkt. Nun kommt unser Script. WERT ersetzt ihr nun mit einer Zahl.

SetWidth(WERT) -> Breite
SetHeight(WERT) -> Höhe

Code:
local mingxie = CreateFrame("Frame", "Mingxie", UIParent)
mingxie:SetWidth(50)
mingxie:SetHeight(70)
Jetzt verankern wir es:

Code:
local mingxie = CreateFrame("Frame", "Mingxie", UIParent)
mingxie:SetWidth(50)
mingxie:SetHeight(70)
mingxie:SetPoint(ANKERPUNKT1, PARENT, ANKERPUNKT2, X-Achse, Y-Achse)
Wer schon in der Schule das Koordinatensystem gerlernt hat, dem wird das sicherlich leicht fallen.

ANKERPUNKT1:
"CENTER", "TOPLEFT", "TOPRIGHT", "BOTTOMLEFT", "BOTTOMRIGHT", "LEFT", "RIGHT"

Zur Vereinfachung ein Bild:
[Only registered and activated users can see links. Click Here To Register...]

PARENT: Am besten nehmt ihr UIParent

ANKERPUNKT2: Siehe ANKERPUNKT1. Die Ankerpunkte können gleich sein (empfehle ich für Anfänger).

X-Achse: Wert eingeben.

Y-Achse: Wert eingeben.

Code:
local mingxie = CreateFrame("Frame", "Mingxie", UIParent)
mingxie:SetWidth(50)
mingxie:SetHeight(70)
mingxie:SetPoint("CENTER", UIParent, "CENTER", 10, -10)
Jetzt wollen wir es sichtbar machen. Dies tun wir am besten mit einem Backdrop (Hintergrund)!

Code:
local mingxie = CreateFrame("Frame", "Mingxie", UIParent)
mingxie:SetWidth(50)
mingxie:SetHeight(70)
mingxie:SetPoint("CENTER", UIParent, "CENTER", 10, -10)
mingxie:SetBackdrop({
bgFile = Texturpfad,
edgeFile = Texturpfad,
edgeSize = WERT,
})
mingxie:SetBackdropColor(ROT, GRÜN, BLAU, [ALPHA])
mingxie:SetBackdropBorderColor(ROT, GRÜN, BLAU, [ALPHA])
Kommas nicht vergessen!
Ihr braucht Texturen für euren Hintergrund. Doch keine Angst - ihr könnt die von World of Warcraft benutzen. Ich erkläre aber fix die Begriffe:

bgFile: BackgroundFile = Hintergrundtextur
edgeFile: Rahmentextur
edgeSize = Rahmengröße (Der Wert: 1 eignet sich am besten)

Code:
local mingxie = CreateFrame("Frame", "Mingxie", UIParent)
mingxie:SetWidth(50)
mingxie:SetHeight(70)
mingxie:SetPoint("CENTER", UIParent, "CENTER", 10, -10)
mingxie:SetBackdrop({
	bgFile = "Interface\\Buttons\\WHITE8x8",
	edgeFile = "Interface\\Buttons\\WHITE8x8",
	edgeSize = 1
})
mingxie:SetBackdropColor(0.27, 0.27, 0.27, 1)
mingxie:SetBackdropBorderColor(0.21, 0.21, 0.21, 1)
So sollte es im Spiel aussehen:
[Only registered and activated users can see links. Click Here To Register...]


5.3 Texte einfügen

Als nächstes fügen wir einen Text hinzu. Dies ist ganz einfach:
Zunächst erstellen wir wieder eine Variable am besten sollte die mit der vorherigen Variable anfangen.

Code:
mingxie.text = [b]Variable[/b]:CreateFontString("FRAME_NAME", "EBENE") -- local ist nicht nötig
Kurze Erklärung:

Variable: Natürlich die Variable unseres Frames: mingxie.
"FRAME_NAME": Der Name des Fontstrings (Schriftzug) ist nicht nötig, also schreiben wir ein nil. nil ist nichts, sozusagen wir geben kein Namen für den Fontstring.
"EBENE": Die Ebene auf welche sie sich befinden soll. Soll sie überdeckt werden oder immer im Vodergrund stehen? Mehr Informationen über Layer findet ihr im Anhang.

So könnte unser Fontstring aussehen:

Code:
mingxie.text = mingxie:CreateFontString(nil, "ARTWORK") -- local ist nicht nötig
Jetzt brauchen wir eine Schrift die wir benutzen können. Ihr könnt eure eigene oder die von World of Warcraft nehmen.

Code:
mingxie.text = mingxie:CreateFontString(nil, "ARTWORK")
mingxie.text:SetFont(PFAD_DER_SCHRIFT, SCHRIFTGRÖßE, [KONTUR])
PFAD_DER_SCHRIFT = Siehe im Kapitel LUA Anwenden.
SCHRIFTGRÖßE = Ein Wert muss hier eingegeben werden. Für Pixelschriften solltet ihr 8/10 nehmen. Für normale wie diese, die ihr grad liest, eignet sich 12/14.
KONTUR = optional. Ein schwarzer Umriss wird geziert um die Schrift. Für normale Schriften nehmt ihr "OUTLINE" oder "THINOUTLINE, bei Schriftgröße über 20
solltet ihr "THICKOUTLINE" nehmen. Falls ihr Pixelfonts habt dann müsst ihr "OUTLINEMONOCHROME" nehmen.

Code:
mingxie.text = mingxie:CreateFontString(nil, "ARTWORK")
mingxie.text:SetFont("Fonts\\ARIALN.ttf", 12, "OUTLINE")
Als nächstes verankert ihr den Schriftzug.

Code:
mingxie.text = mingxie:CreateFontString(nil, "ARTWORK")
mingxie.text:SetFont("Fonts\\ARIALN.ttf", 12, "OUTLINE")
mingxie.text:SetPoint("CENTER", mingxie)
Ihr fragt euch sicherlich wieso ab mingxie aufgehört wird. Ganz einfach, man kann Teile eines Codes weglassen.
Zum Beispiel:
So würde es aussehen wenn ich alles ausfüllen würde

Code:
mingxie.text:SetPoint("CENTER", mingxie, "CENTER", 0, 0)
Das ist garnicht nötig. Ihr verschwendet nur eure Zeit. Der Fontstring ist schon in der Mitte und die X/Y-Achsen muss man dann auch nicht bestimmen, soll ja auch in der Mitte bleiben.

Zum Schluss fügen wir einen Text hinzu.
Code:
mingxie.text = mingxie:CreateFontString(nil, "ARTWORK")
mingxie.text:SetFont("Fonts\\ARIALN.ttf", 12, "OUTLINE")
mingxie.text:SetPoint("CENTER", mingxie)
mingxie.text:SetText("Mingxie war hier")
So sollte es aussehen:
[Only registered and activated users can see links. Click Here To Register...]

5.4 Textur hinzuweisen

Eine Textur einzufügen ist ein Kinderspiel. Der Aufbau und Code ähnelt dem Fontstring.

Code:
mingxie.textur = mingxie:CreateTexture("NAME", "EBENE")
Erklärung:
"NAME": Nicht nötig.
"EBENE": Siehe nach unter 5.3 Texte einfügen

Code:
mingxie.textur = mingxie:CreateTexture(nil, "ARTWORK")
Natürlich müssen wir nun einen Texturenpfad hinzuweisen. Es muss aber keine Textur sein, ihr könnt auch Farben eintragen. Jedoch sieht dann die Textur "platt" aus.

Code:
mingxie.textur = mingxie:CreateTexture(nil, "ARTWORK")
mingxie.textur:SetTexture(PFAD_DER_TEXTUR/ROT, GRÜN, BLAU, [ALPHA])
Falls ihr eine eigene Textur wollt und es noch färben wollt, dann tut dies:

Code:
mingxie.textur = mingxie:CreateTexture(nil, "ARTWORK")
mingxie.textur:SetTexture(PFAD_DER_TEXTUR)
mingxie.textur:SetVertexColor(ROT, GRÜN, BLAU, [ALPHA])
Nicht vergessen die Textur zu verankern!

Code:
mingxie.textur = mingxie:CreateTexture(nil, "ARTWORK")
mingxie.textur:SetTexture("Interface\\Buttons\\WHITE8x8")
mingxie.textur:SetVertexColor(0.27, 0.27, 0.27, 1)
mingxie.textur:SetAllPoints(mingxie)

Ihr habt sicherlich bemerkt das ich diesmal SetAllPoints() benutzt habe. Sowie der Name schon verrät, verankere ich die ganze Texture auf das Frame.

So sieht es im Spiel aus:
[Only registered and activated users can see links. Click Here To Register...]

Ja, kein großer Unterschied. Liegt auch daran das CreateTexture nur wenig/selten angewendet wird. Ist eben leicht ersetzbar.


Im Grunde genommen sieht das Frame noch sehr öde aus. Es war nur ein Beispiel um euch zu zeigen was ihr damit anstellen könnt. Fantasie ist hier halt gefragt.

__________________________________________________ ____________

6. TOC Datei


6.1 Definition

Jetzt mal hinter den Kulissen! Die .TOC (Table of Contents) Datei erkennt euren Ordner und lädt eure LUA Dateien. Das heißt ohne die .TOC Datei funktiniert kein AddOn!

Ihr sollte einen Ordner erstellen den ihr nach Wunsch bennent. Aber Achtung die .TOC Datei muss den gleichen Namen haben wie der Ordner sonst geht es nicht. Und stellt sicher, dass eure .LUA Datei im Ordner ist.
Der Aufbau ist recht simpel und erfordert keinerlei LUA Kenntnisse.

6.2 Aufbau

Als erstes erstellt ihr eine .TOC Datei. Nun füllt ihr sie aus:

Code:
## Interface:
## Title:
## Notes:
## Author:

LUA_DATEI_NAME.lua
Vor jedem Wort sollte ein "##" stehen. Außnahme: LUA Dateienname. Bloß nicht die Endungen vergessen!

Quote:
## Interface: 40000
Richtet sich nach dem Patch. Die 4 steht immer am Anfang bis die neue Erweiterung von WoW rauskommt.

## Title: Mingxie
Der Titel eures AddOns

## Notes: LUA Guide by Mingxie
Eine kurze Notiz/Beschreibung zum AddOn.

## Author: Mingxie
Das erklärt sich ja wohl von allein.
So könnte es aussehen:
[Only registered and activated users can see links. Click Here To Register...]

6.3 Alternativen

Eine richtige Alternative zu der .TOC Datei gibt es nicht, wenn nur falls man LUA Dateien laden will, aber das ist als Anfänger nicht nötig und was ändern tut sich nichts.

So könnte alles aussehen, falls ihr alles befolgt habt im Guide:
[Only registered and activated users can see links. Click Here To Register...]

__________________________________________________ ____________


7. Selbststudium

Auf dem weiteren Weg. Geht auf diverse Seiten wo man AddOns runterladen kann (Links im Anhang). Nehmt AddOns die nicht so groß sind. Deren Aufbau sollten leicht sein und verständlich.
Verändert sie nach euren Wünschen. Nach und nach wird euch alles leichter fallen. Ich helfe euch auch gern, falls ihr mal nicht weiterkommen solltet.
Hört aber nicht nach 3 Tagen auf und fängt nach einer Woche wieder an. Das nützt nichts.
Entweder beschäftigt ihr euch intensiv damit oder ihr lasst es.
LUA ist wirklich ganz einfach, das meiste ist nur Auswendig lernen und Englisch/Mathe mal hier und da.

Wenn ihr meint ihr seid fortgeschritten genug, dann holt euch Tukui (Link im Anhang). Tukui ist ein UI-Pack das auf LUA basiert. Es besitzt ein In Game Menü. Ich kann es nur empfehlen!
Ich selber benutze sogar Tukui. Natürlich editiert ;)

__________________________________________________ ____________


8. AddOns selber herstellen

8.1 Inspiration suchen

Das wichtigste ist natürlich die Inspiration. Ohne Inspiration, keine AddOns. Schaut doch mal in den "Zeigt euer Interface" Thread nach oder sonst wo. Ihr werdet sicherlich eine Inspiration finden.
Euer AddOn muss nicht immer was neues sein. Man kann es ja schließlich besser machen als andere. Falls ihr wirklich ideenlos seid, dann spielt andere Videospiele. Es gibt sogar UI (User Interface = Benutzerinterface) Packs die das Diablo, Aion, ... Theme haben.

8.2 Blizzard UI

Meine meisten Inspirationen kommen vom Blizzard UI. Ich hab hier eine Skala einfügt plus Bild an was ihr euch so ranmachen könnt.

1 = Leicht
2 = Mittel
3 = Fortgeschritten

[Only registered and activated users can see links. Click Here To Register...]

__________________________________________________ ____________

9. Fehler erkennen

9.1 LUA Fehler

Ihr habt eine Fehlermeldung bekommen? Kein Problem! Meistens sind es Tippfehler oder der Script ist falsch. Hier die meisten LUA Fehler die euch passieren können.
Falls ihr keine LUA Fehlermeldung an habt, dann könnt ihr die schnell anzeigen lassen.
[Only registered and activated users can see links. Click Here To Register...]


[Only registered and activated users can see links. Click Here To Register...]
Der Pfad eurer Schrift ist falsch. Überprüft nochmal ob der Pfad auch wirklich richtig ist!

[Only registered and activated users can see links. Click Here To Register...]
Tippfehler bzw diese Variable existiert garnicht.

[Only registered and activated users can see links. Click Here To Register...]
Ihr habt ein end vergessen

[Only registered and activated users can see links. Click Here To Register...]
Klammer fehlt.
( ) <- Richtig
{ } <- Richtig
( } <- Falsch

9.2 Taint Fehler

Taints blockieren das Script eines AddOns. Treten aber selten auf. Die meisten Taints entstehen wenn man Aktionen wie bewegen, verstecken, ... während dem Kampf macht.
Im Chat steht dann auch eine Nachricht in gelb. Falls ihr die richtige Ursache herausfinden wollt dann geht unter

World of Warcraft/Logs/Taints.log

Dort sollte stehen was ihr falsch gemacht habt.

Lua Fehler sollten auf garkeinen Fall ignoriert oder abgeschaltet werden! Sie wird/kann eure FPS in den Keller sinken lassen!

__________________________________________________ ____________


10. Regeln

Es gibt auch sogar Regeln an denen man sich halten muss. Falls ihr das nicht tut dann wird sich Blizzard um euch kümmern.

Quote:
Acht Punkte, die Programmierer ab sofort einhalten müssen
Wie Blizzard auf der offiziellen Seite bekannt gab, müssen Autoren von Add-ons seit dem 20.03.2009 folgende weitere Richtlinien befolgen:

1) Add-ons müssen kostenlos zu erwerben sein.

Alle Add-ons müssen frei zugänglich sein. Entwicklern ist es nicht erlaubt, "Premium" Versionen ihrer Add-ons zu erstellen und für zusätzliche Features oder einen bestimmten Service Geld zu verlangen. Der Zugang zu dem Add-on darf auf keine Art und Weise mit Kosten verbunden sein.

2) Der Add-on Quellcode muss komplett einsichtbar sein.
Der Programmiercode eines Add-ons darf in keiner Weise versteckt oder verschlüsselt sein und muss der Öffentlichkeit zugänglich sein.

3) Add-ons dürfen die Server von World of Warcraft oder andere Spieler nicht negativ beeinflussen.
Add-ons dürfen keine Funktionen enthalten die, im Ermessen von Blizzard Entertainment, einen negativen Einfluss auf die Performance der World of Warcraft Servern oder der Spieler haben. negatively impacts the performance of the World of Warcraft realms or otherwise negatively affects the game for other players. Dies betrifft beispielsweise die exzessiven Nutzung des Chatsystems, unnötige Zugriffe auf die Festplatte und die Verringerung der Bildraten

4) Add-ons dürfen keine Werbung enthalten.
Add-ons dürfen nich dazu verwendet werden um Güter oder Dienstleistungen zu bewerben.

5) Add-ons dürfen nicht um Spenden bitten.
Add-ons dürfen keine Aufforderungen zum Spenden enhalten. Wir wissen um den immensen Aufwand und Anstrengungen die in der Entwicklung eines Add-ons stecken können, aber solche Aufforderungen sollten auf die Webseite des Autoren oder auf eine allgemein Addonseite beschränkt blieben und nicht im Spiel erscheinen.

6) Add-ons dürfen kein aggresives oder fragwürdiges Material enthalten.
World of Warcraft wurde für Spieler ab 12 Jahren freigegeben. Blizzard Entertainment gestattet nicht, dass Ad-on Material gegen diese Wertung verstößt.

7) Add-ons müssen sich an die World of Warcraft ToU und EULA halten.
Alle Add-ons müssen den World of Warcraft Terms of Use und die World of Warcraft End User License Agreement entsprechen.

8) Blizzard Entertainment hat das Recht, die Add-on Funktionen anzupassen wenn es nötig ist.
Um die integrität von World of Warcraft zu gewährleisten und um sicherzustellen, dass bestmögliche Spielerlebniss für unsere Spieler geboten wird. behält sich Blizzard Entertainment das Recht vor, jede Add-on Funktion einzuschränken oder zu deaktivieren."

Von einigen Add-on-Autoren gibt es bereits Reaktionen, so scheint vor allem Punkt 5 die Gemüter der Entwickler zu erhitzen. Der Autor von Outfitter und GroupCalendar (mundocani) gab zum Beispiel bekannt, er wolle seine Add-ons nicht mehr weiter entwickeln.
__________________________________________________ ____________

11. Hilfreiche Links (Anhang)

Ich hab doch das Einverständnis von lowfyr bekommen (Vielen Dank!).

Hilfreiche Links:

[Only registered and activated users can see links. Click Here To Register...]
Hier könnt ihr eure AddOns runterladen/hochladen
[Only registered and activated users can see links. Click Here To Register...]
Eins der besten UI Packs: Tukui
[Only registered and activated users can see links. Click Here To Register...]
RGB Tabelle
[Only registered and activated users can see links. Click Here To Register...]
RGB Tabelle
[Only registered and activated users can see links. Click Here To Register...]
Ähnlich wie Wikipedia extra für Lua (WoW)
[Only registered and activated users can see links. Click Here To Register...]
Ähnlich wie Wikipedia extra für Lua (WoW)
[Only registered and activated users can see links. Click Here To Register...]
Hier könnt ihr eure AddOns runterladen/hochladen
[Only registered and activated users can see links. Click Here To Register...]
Hier könnt ihr eure AddOns runterladen/hochladen


Farbentabelle: (Für 3.9)
__________________________________________________ ____________


Ich hoffe der Guide hat euer Interesse geweckt oder geholfen ;)

Falls ihr grammatikalische-, lexikalische-, inhaltliche- oder Rechtschreibfehler findet oder noch Sachen unklar sind, dann macht mich bitte darauf aufmerksam! Natürlich über eine private Nachricht ;)

Credits:

Los - Inspiration und bisschen abgeguckt :awesome:

Mit freundlichen Grüßen
Mingxie~
05/23/2011 12:19 vabatta#2
Great work :)
You can also add a reference to embbed libraries like Ace 3 with libstub.
05/23/2011 13:58 Mingxie#3
Mhm. I never worked with Ace3 or Libstub and I think it's difficult for newbies to understand libraries...
05/24/2011 19:13 Vesanius#4
danke vielmals, werd mich in der freizeit mal dransetzen und n paar addons basteln :D
05/24/2011 19:36 Mingxie#5
Freut mich das es dir gefällt. Und wünsche dir gutes Gelingen bei deinem AddOn :)
05/24/2011 20:20 Serc651#6
Also müsste das doch auch gehen mit Lua ein interface ins spiel zu implamentieren das man sich gold adden kann oder das man mehr mals in eine ini kann und diese sperre um gehen kann. oder nicht ??
05/24/2011 20:24 Mingxie#7
Nein. Das ist kein Hack oder so...
05/24/2011 21:57 Vesanius#8
Quote:
Originally Posted by Serc651 View Post
Also müsste das doch auch gehen mit Lua ein interface ins spiel zu implamentieren das man sich gold adden kann oder das man mehr mals in eine ini kann und diese sperre um gehen kann. oder nicht ??
Mit Lua schreibt man Addons wie Bartender, Recount oder Mappy :)
08/20/2011 21:39 Nelunia#9
WoW Oo
Warum habe ich diesen Guide noch nicht früher entdeckt? Hätte mir eine Menge Fragen erstspart .. Das hier ist aufjedenfall ein push Wert und sollte zum Sticky gemacht werden! :-)
08/21/2011 00:46 Mingxie#10
Ja, ist untergegangen, da wohl kein großes Interesse an LUA da ist D:
08/22/2011 11:46 Exburst#11
Echt sehr netter Guide!
Es ist sehr leicht und verständlich geschrieben, ich hab jedoch schon einpaar Programmier kenntnisse, aber ich denke auch jeder Neuling wird sich hier auskennen!

Hast THX
08/22/2011 14:22 TheOwnWay#12
Sehr netter und großer Guide, auch wenn ich mich nicht an LUA ransetzen werde. :)

Das Tutorial würde ich an deiner Stelle auch in anderen Foren spreaden, erst recht im offiziellen!
08/24/2011 08:07 Exburst#13
sticky?
08/26/2011 23:29 Sewk²#14
Versteh nicht aber wayne hat sehr kange gedauert dafür GZ!
12/09/2011 22:52 Ennea#15
Bump weil wegen Kritik; aber solche Threads verlieren ja eigentlich nie an Aktualität, sollte also kein Problem sein.


Quote:
Originally Posted by Mingxie View Post
3.2 local

Local wird euch dauernd begegnen in Scripts. Es sollte vor jeder Variable geschrieben werden.

[Only registered and activated users can see links. Click Here To Register...]

mingxie ist nun lokalisiert und kann NUR in der LUA Datei benutzt werden. Das heißt: Es kann nicht in anderen LUA Dateien genutzt werden, so zicken sich dann die AddOns nicht mehr gegenseitig an.

Jedoch - local vergrößert nur die Datei und das Laden dauert länger, deswegen solltet ihr es nur dann benutzen, wenn ihr es auch wirklich benötigt.
Ungefähr hier habe ich aufgehört zu lesen. Wenn man diverse Aspekte von Lua erläutern will, dann sollte man das auch vollständig tun. local ist ein Keyword, welches - vor Variablen gesetzt - diese auf ein kleineres Scope beschränkt, also nicht mehr von überall aus abgerufen werden kann.

Vor allem folgender Teil dieses Unterpunktes sticht bei deinem Guide ins Auge:
Quote:
Originally Posted by Mingxie View Post
Jedoch - local vergrößert nur die Datei und das Laden dauert länger, deswegen solltet ihr es nur dann benutzen, wenn ihr es auch wirklich benötigt.
Ganz einfach darum, weil es riesiger Bullshit ist. Ob WoW nun ein paar Bytes mehr lädt oder nicht ist völlig egal. Es lässt sich sogar genau das Gegenteil von dem was du formuliert hast sagen:

Man sollte nur dann globale Variablen benutzen, wenn man sie wirklich braucht. Ansonsten sollte man immer auf lokale Variablen zurückgreifen, da dies unter anderem die Effizienz des Codes steigert; eine globale Variable abzurufen dauert länger, als eine lokale Variable abzurufen.

Zu lokalen Variablen gibt es noch deutlich mehr zu sagen, aber ich spar mir jetzt den Rest.


Achja: Es heißt Lua, nicht LUA.