Register for your free account! | Forgot your password?

Go Back   elitepvpers > World of Warcraft > WoW Addons
You last visited: Today at 06:56

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

 

[Guide] World of Warcraft Lua

Reply
 
Old   #16
 
elite*gold: 132
Join Date: Feb 2011
Posts: 6,618
Received Thanks: 4,359
Quote:
Originally Posted by Ennea View Post
Bump weil wegen Kritik; aber solche Threads verlieren ja eigentlich nie an Aktualität, sollte also kein Problem sein.

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:

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.
Hallo,

erst einmal vielen Dank für deine Kritik.

Natürlich kann man den Begriff local noch näher erläutern, jedoch sollte man nicht vergessen, dass sich dieser Guide mehr an Neulinge richtet, als an Experten. Und ich weiß nicht wie du es siehst, nur bringt es, denke ich, nicht viel einem Neuling einen ganzen Roman über local zu schreiben.
Ich hatte mir vorgenommen, die wichtigsten Begriffe bzw. Befehle so gut und kurz wie möglich zu erklären.

Das dieser "Guide" noch einen Haufen an Arbeit benötigt ist mir schon klar. Ich habe mir immer wieder überlegt, ihn doch neu umzuschreiben, jedoch fehlt mir einfach die Zeit.

Diesen Teil hätte ich wirklich besser erläutern sollen.
Quote:
Originally Posted by Mingxie
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.
Abgesehen von den globalen/lokalen Variablen eine Frage an dich: Ist es nicht das Ziel eines Add-On Autors, seinen Code sauber u. fehlerfrei zu programmieren? Damit meine ich auch den Code nicht mit unnötigen Zeug zu überladen.

Nun zu den globalen/lokalen Variablen: Ich bin mir durchaus bewusst, dass lokale Variablen schneller geladen werden als globale. Wie ich schon oben geschrieben habe, ich hätte es wirklich besser erklären sollen, ich muss aber schon zugeben, dass mir das mit den globalen Variablen gar nicht erst eingefallen ist.

Falls ich noch ein paar Punkte vergessen habe, auf dich ich noch eingehen sollte. Tut es mir leid, es ist schon ziemlich spät und ich kann mich nicht vollständig konzentrieren.

Wenn ich wieder Zeit habe, schreibe ich den ganzen Guide eventuell von neu und nehme mir nächstes Mal mehr Zeit und lasse mich demnächst von dem ein oder anderen Experten noch beraten.



Mingxie is offline  
Thanks
1 User
Old   #17
 
elite*gold: 0
Join Date: Jan 2009
Posts: 2,872
Received Thanks: 981
Geile arbeit danke dafür...
thx given.


•kяyteя• is offline  
Old   #18
 
elite*gold: 0
Join Date: May 2006
Posts: 3,667
Received Thanks: 996
Quote:
Originally Posted by Mingxie View Post
Hallo,
Tach.

Quote:
Originally Posted by Mingxie View Post
erst einmal vielen Dank für deine Kritik.
Freut mich, dass du sie dir zu Herzen nimmst

Quote:
Originally Posted by Mingxie View Post
Natürlich kann man den Begriff local noch näher erläutern, jedoch sollte man nicht vergessen, dass sich dieser Guide mehr an Neulinge richtet, als an Experten. Und ich weiß nicht wie du es siehst, nur bringt es, denke ich, nicht viel einem Neuling einen ganzen Roman über local zu schreiben.
Ich hatte mir vorgenommen, die wichtigsten Begriffe bzw. Befehle so gut und kurz wie möglich zu erklären.
Ich stimme dir vollkommen zu. Daher bin auch ich nicht weiter auf local eingegangen; aber es gibt, denke ich, einige wichtige Punkte, die man auch Neulingen nicht vorenthalten sollte.

Quote:
Originally Posted by Mingxie View Post
Abgesehen von den globalen/lokalen Variablen eine Frage an dich: Ist es nicht das Ziel eines Add-On Autors, seinen Code sauber u. fehlerfrei zu programmieren? Damit meine ich auch den Code nicht mit unnötigen Zeug zu überladen.
Das ist es, natürlich. Jedoch ist es auch Auslegungssache, was unnötigt ist und was nicht. Und es ist ein Fakt, dass lokale Variablendeklarationen nicht unnötig sind. Das gehört einfach zur Optimierung dazu. Unnötig ist anders.

Quote:
Originally Posted by Mingxie View Post
Wenn ich wieder Zeit habe, schreibe ich den ganzen Guide eventuell von neu und nehme mir nächstes Mal mehr Zeit und lasse mich demnächst von dem ein oder anderen Experten noch beraten.
Die Einstellung gefällt mir Bleib am Ball! Falls da von deiner Seite Interesse besteht würde ich vielleicht auch gern ein wenig beitragen, solltest du das Ganze nochmal überarbeiten.
Ennea is offline  
Old   #19

 
elite*gold: 20
Join Date: May 2006
Posts: 2,011
Received Thanks: 784
Ich glaube -ohne jemandem zu nahe treten zu wollen- dass ihr bzgl. der (Un-)Nötigkeit lokalen Variablen ein bisschen aneinander vorbeiredet ;-)

Wenn ich mal versuche, eure Aussagen zusammenzufassen:
-Lieber lokale statt globale Variablen nutzen.
-Lieber keine Variable nutzen, statt einer, die nur einmal speichert und dann ungenutzt bleibt.

Ansonsten freue ich mich sehr, dass die Diskussion hier auf so sachlichem Niveau bleibt und würde mich auch ggf. an einem zukünftigen Guide beteiligen, auch wenn ich mich lange nicht als Experte verstehe.


Uzgarel is offline  
Old   #20
 
elite*gold: 37
Join Date: Feb 2009
Posts: 615
Received Thanks: 144
Quote:
Originally Posted by Uzgarel View Post
... und würde mich auch ggf. an einem zukünftigen Guide beteiligen, auch wenn ich mich lange nicht als Experte verstehe.
Jippy!
Wobei, kein Experte? Hast du in deinem Ui nicht DBM auf minimalistic getrimmt? *g* (Hab zwar dein Ui nie getestet, aber damals schon Screenshots gesehen)
Über eine Erweiterung des Guide's würde ich mich sehr freuen.
Nelunia is offline  
Old   #21
 
elite*gold: 0
Join Date: Aug 2006
Posts: 445
Received Thanks: 519
Vieles wurde ja schon gesagt vorallem das zu localen Variablen sollte geändert werden.

Zu schleifen, dass ist zwar nicht falsch aber das i = i+1 ist unnötig

Schleifenbeispiele währen

Hier währen 2 schleifen die beide das selbe machen und zwar die Zahlen 1-5 ausgeben
Code:
for i=1,5 do
	print(i)
end

local i = 1 
while i <= 5 do 
	print(i) 
	i=i+1 -- Erhöhung ist nötig sonst Endlosschleife!
end

Dein Tabellenbeispiel wird dir n Fehler auswerfen

Code:
-- Falsch lol nicht in ""
mingxie = { 
	["lol"] = lol,
}

-- Richtig lol in ""
mingxie = { 
	["lol"] = "lol",
}
Dann zur Frame benennung IMMER darauf achten, eindeutige Namen zu verwenden sonst hat man schnell Problem also z.B.

AddonName_FrameName
AddonNameFrameName

So kommts später nicht zu Konflikten da kann der name ruhig ma etwas Länger sein. Wenns wirklich ist kann man sich seine Frames immer noch in ner Tabelle abspeichern also z.b. so
Code:
AddonName = {
	frame = {},
}

function FirstFrame()
	AddonName.frame["background"] = CreateFrame("Frame", "AddonName_FrameBackGround", UIParent)
	-- ...
end
Namenskonflikte bei Frames sind was sehr nerviges glaub mir :<

Gäb noch n bisl was was man erweitern könnte aber sonst ok
Los is offline  
Thanks
1 User
Old   #22
 
elite*gold: 31
Join Date: Feb 2010
Posts: 1,597
Received Thanks: 249
erste Sahne

lg
Radio² is offline  
Old   #23
 
elite*gold: 0
Join Date: Feb 2013
Posts: 14
Received Thanks: 0
Quote:
Originally Posted by Mingxie View Post
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!



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.


__________________________________________________ ____________

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~
Ich find die Farbtabelle nicht sorry ;(
RyffLe is offline  
Old   #24
 
elite*gold: 0
Join Date: Sep 2009
Posts: 62
Received Thanks: 3
awesome , nice guide


Diru is offline  
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 06:56.


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.