Register for your free account! | Forgot your password?

Go Back   elitepvpers > World of Warcraft > WoW Addons
You last visited: Today at 09:31

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

 

[Guide] World of Warcraft Lua

Reply
 
Old   #1
 
elite*gold: 132
Join Date: Feb 2011
Posts: 6,618
Received Thanks: 4,359
Thumbs up [Guide] World of Warcraft Lua

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++:

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.




3.2 local

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



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:


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:



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:


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:


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:


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:


__________________________________________________ ____________


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



__________________________________________________ ____________

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.




Der Pfad eurer Schrift ist falsch. Überprüft nochmal ob der Pfad auch wirklich richtig ist!


Tippfehler bzw diese Variable existiert garnicht.


Ihr habt ein end vergessen


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:


Hier könnt ihr eure AddOns runterladen/hochladen

Eins der besten UI Packs: Tukui

RGB Tabelle

RGB Tabelle

Ähnlich wie Wikipedia extra für Lua (WoW)

Ähnlich wie Wikipedia extra für Lua (WoW)

Hier könnt ihr eure AddOns runterladen/hochladen

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

Mit freundlichen Grüßen
Mingxie~



Mingxie is offline  
Thanks
26 Users
Old   #2
 
elite*gold: 0
Join Date: Jun 2008
Posts: 96
Received Thanks: 218
Great work
You can also add a reference to embbed libraries like Ace 3 with libstub.


vabatta is offline  
Thanks
1 User
Old   #3
 
elite*gold: 132
Join Date: Feb 2011
Posts: 6,618
Received Thanks: 4,359
Mhm. I never worked with Ace3 or Libstub and I think it's difficult for newbies to understand libraries...
Mingxie is offline  
Thanks
1 User
Old   #4

 
elite*gold: 0
Join Date: Jun 2010
Posts: 8,045
Received Thanks: 1,124
danke vielmals, werd mich in der freizeit mal dransetzen und n paar addons basteln


Vesanius is offline  
Thanks
1 User
Old   #5
 
elite*gold: 132
Join Date: Feb 2011
Posts: 6,618
Received Thanks: 4,359
Freut mich das es dir gefällt. Und wünsche dir gutes Gelingen bei deinem AddOn
Mingxie is offline  
Old   #6
 
elite*gold: LOCKED
Join Date: May 2011
Posts: 107
Received Thanks: 9
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 ??
Serc651 is offline  
Old   #7
 
elite*gold: 132
Join Date: Feb 2011
Posts: 6,618
Received Thanks: 4,359
Nein. Das ist kein Hack oder so...
Mingxie is offline  
Old   #8

 
elite*gold: 0
Join Date: Jun 2010
Posts: 8,045
Received Thanks: 1,124
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
Vesanius is offline  
Thanks
1 User
Old   #9
 
elite*gold: 37
Join Date: Feb 2009
Posts: 615
Received Thanks: 144
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! :-)
Nelunia is offline  
Thanks
1 User
Old   #10
 
elite*gold: 132
Join Date: Feb 2011
Posts: 6,618
Received Thanks: 4,359
Ja, ist untergegangen, da wohl kein großes Interesse an LUA da ist D:
Mingxie is offline  
Old   #11
 
elite*gold: 98
Join Date: Dec 2009
Posts: 156
Received Thanks: 23
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
Exburst is offline  
Old   #12
 
elite*gold: 0
Join Date: Dec 2008
Posts: 12,369
Received Thanks: 2,168
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!
TheOwnWay is offline  
Old   #13
 
elite*gold: 98
Join Date: Dec 2009
Posts: 156
Received Thanks: 23
sticky?
Exburst is offline  
Old   #14
 
elite*gold: 0
Join Date: Jun 2011
Posts: 877
Received Thanks: 64
Versteh nicht aber wayne hat sehr kange gedauert dafür GZ!
Sewk² is offline  
Old   #15
 
elite*gold: 0
Join Date: May 2006
Posts: 3,667
Received Thanks: 996
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.



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.


Ennea is offline  
Thanks
1 User
Reply



« Previous Thread | Next Thread »

Similar Threads
World of Warcraft : 5 Man Achievement Guide
Read it all here.
0 Replies - User Submitted News
Ultimate World of Warcraft Guide!
Hey, hab mir die mühe gemacht und euch den Ultimate World of Warcrat Guide in eine PDF zu speichern... Hab nix gesehen hier und denke mal es kann...
4 Replies - WoW Guides & Templates
LF World of Warcraft Warlock Guide
Hello guys :P Im currently looking for World of Warcraft Warlock Guide Like this one World of Warcraft Warlock Guide - Killer Guides Does...
2 Replies - WoW Main - Discussions / Questions
World of Warcraft Gold Guide
Download : http://rapidshare.de/files/11183070/World_..._Guide.rar.html This guide is in englisch dieser guide kostet eigentlich ~25&#036; :D es ist...
9 Replies - WoW Guides & Templates



All times are GMT +1. The time now is 09:31.


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.