oUF und seine Grundeigenschaften

Plato0n

Dungeon-Boss
Mitglied seit
27.06.2007
Beiträge
564
Reaktionspunkte
1
Kommentare
5
*UPDATE

So im Folgenden möchte ich einmal ein wenig auf die Grundlegenden Sachen von oUF eingehen, was oUF überhaupt ist, wozu es da ist und wie man ein paar sachen auh selber bearbeiten kann, damit nicht für jedne kleinkram immer ein neuer Thread aufgemacht werden muss. ich habe mal nachgeschaut und eigentlich noch keine zusammenfassenden thread in diesem Forum darüber gefunden

Inhaltsverzeichnis:
1) Allgemeines
2) Erste Schritte
3) Es geht los
4) Player/Target
4.1) Target
4.2) Castbar
5) Position
5.1) UIParent
6) Tags


1) Allgemeines:

oUF ist ein Unitframesaddon wie zum Beispiel Xpearl oder Pitbull. Da in diesen Foren aber eine große abneigung gegenüber XPearl besteht besinnen sich doch mittlerweile viele Leute auf Pitbull, oder aber eben oUF.
Nun gibt es Leider das Problem das oUF NICHT über ein ingame menü verfügt wie z.B Pitbull, sondern komplett über die Prorammiersprache LUA eingerichtet werden muss. Wenn man nun nur oUF installiert passiert erstmal gar nichts im Spiel, man muss sich ersteinmal ein oUF Layout herrunterladen. Ich werde mich im folgenden auf Layout oUF_P3lim, beziehungsweise oUF_Perfect stützen.

2) Erste Schritte.

So bevors jetzt los geht müsse wir erst einmal die benötigten Programme downloaden. Als erstes würde ich hier oUF und das oUF layout empfehlen.
oUF download Link
Diverse Layouts findet ihr auch auf WoWinteface.com
oUF Layouts
ic benutze aber hier oUF_P3lim und oUF_Perfect
Diese Addons entpackt ihr wie gewohnt in euren Addon ordner, wenn ihr nicht wisst wie das geht siehe "Wie installiere ich Addons"
Soweit so gut. Nun fehlt noch das wichtigste, ein Programm mit dem man die besagt LUA Dateien lesen kann. Im Prinzip geht das mit jedem nur erdenklichen texteditor. Ich benutze aber SciTE auch zu finden auf WowInterface.com
Auch ich bin ein Downloadlink

3) Es geht los!

Dann wollen wir mal. Als erstes öffnet man SciTE mit einem Doppelklick auf das Icon auf dem Desktop.
Das ganze sieht dann ca. so aus:


Nun öffnet man, wie bei einem normalen Programm die Lua Datei aus dem oUF_layout ordner. Also wahrscheinlich „World of Warcraft -> Interface -> Addons -> oUF_P3lim“
Bei mir z.B oUF_P3lim das sieht dann ca. so aus:


Dies sieht jetzt erstmal relativ unübersichtlich aus, im Endeffekt ist aber alles ganz einfach, wenn man sich einmal reingefunden hat. Außerdem da wir nur ein bereits vorhandenes Layout bearbeiten wollen und kein komplett neues erstellen wollen interressiert uns das meiste eh nicht
tongue.gif

Der wichtigste Absatz, den es zu suchen gilt ist erstmal
Code:
local function CreateStyle(self, unit)
dort wird nämlich die Position der Frames, deren Farbe, die Texte und so weiter festgelegt, und das is ja meistens das was Juckt
tongue.gif



Bitte entschuldigt wenn ich im folgenden NICHT chronologisch zur Reihenfolge in der Lua Datei vorgehe, aber ich gehe einfach mal die einzelnen Frames durch um danach noch ein paar spezielle Sachen anzusprechen.

4) Player/Target

Als erstes wollen wir uns mal dem Player bzw. Targetframe widmen. Um die Einstellungen für diese Frames zu finden suchen wir die folgende Textzeile:
Code:
if(unit == 'player' or unit == 'target') then
Hier wird nun alles eingestellt was den Player und den Targetframe betrifft.
Nun scrollen wir ein wenig runter und finden ziemlich bald die folgenden Zeilen
Code:
SetAttribute('initial-height', 27)
SetAttribute('initial-width', 230)
hier wird jetzt die Höhe (27) und die Breite (230) des Frames angegeben. Alle Angaben werden bei Lua IMMER in Pixeln gemacht, wenn ihr also ganz genau arbeiten wollt und gute Augenhabt könnt ihr einzelne Pixel auch "nachzählen". Wenn wir nun zum Beispiel einen quadratischen frame haben wollen, geben wir einfach zwei gleich große zahlen an z.B.
Code:
self:SetAttribute('initial-height', 64)
self:SetAttribute('initial-width', 64)
Weiter finden wir hier noch ein paar Einstellungen zur Castbar. Als erstes möchte ich hier den Hintergrund erwähnen
Code:
 Castbar:SetBackdropColor(0, 0, 0)
Hier wird die Farbe des Hintergrundes festgelegt, wobei die erste Zahl für Rot, die zweite für Grün und die Dritte für Blau steht. Weiter können wir noch die Farbe der direkten Castbar bestimmen, also nicht nur die des Hintergrundes. Dies passiert in der Zeile
Code:
 Castbar:SetStatusBarColor(0.25, 0.25, 0.35)
Hier wird die Farbe genauso definiert wie beim Hintergrund, also mit RGB werten.

4.1) Target

Nun Gehen wir ein paar Zeilen weiter Runter und finden das Folgende
Code:
if(unit == 'target') then
Hier wird es nun ein wenig komplexer, da hier alles definiert wird was das Target betrifft, also z.B Buffs und Debuffs.
Die Einstellung von Buffs und Debuffs läuft allerdings genau gleich, da sich nichts ändert, außer das aus Buffs ein Debufs wird
tongue.gif
Deswegen werde ich das Hier nur einmal anhand der Buffs vorführen. Der Gesamt Code für die Buffs sieht ca. So aus
Code:
		self.Buffs:SetPoint('TOPLEFT', self, 'RIGHT', 3, 14)
		self.Buffs:SetHeight(24 * 2)
		self.Buffs:SetWidth(270)
		self.Buffs.num = 10
		self.Buffs.size = 24
		self.Buffs.spacing = 2
		self.Buffs.initialAnchor = 'BOTTOMLEFT'
		self.Buffs['growth-y'] = 'UP'
Code:
 Buffs.num = 10
setzt nun die Anzahl der angezeigten Buffs fest, also z.B. 5 oder 24 je nachdem wieviele man sehen möchte.
Code:
Buffs.spacing = 2
gibt den Abstand zwischen den einzelnen Buffs an wieder in pxl. Wie immer bei lua. Der Abstand von 2 Pixeln gilt sowohl auf der x-Achse, als auch auf der y-Achse.
Code:
Buffs['growth-y'] = 'UP'
gibt die Richtung an in der sich die Buffs auf der y-Achse Fortsetzen, das Gleiche geht auch mit der x-Achse, allerdings muss man dann 'LEFT' oder 'RIGHT' einsetzen. Da man auf der x-Achse nur nach rechts und Links verschieben kann.
Code:
Buffs.initialAnchor = 'BOTTOMLEFT'
gibt den Punkt an von dem aus die Buffs wachsen, also z.B. 'TOPLEFT' oder wie hier ‚BOTTOMLEFT‘. Dieser Anker ist wichtig wenn man die Buffs nun verschieben möchte.

Mit allen anderen Frames funktioniert es genau so wie beim Target hier, man muss bloß halt immer den für den jeweiligen Frame wichtigen Absatz zu finden, also beim ToT beispielsweise
Code:
  if(unit == 'targettarget') then
aber jeden Frame hier einzeln durch zuexzerzieren würde eindeutig zu lange dauern. Und dann würd es erst recht niemand mehr lesen
wink.gif


4.2) Castbar

So nun möchte ich ein wenig über die Castbar reden. Auch hier ist alles ganz ganz einfach, wenn man weis wonach man suchen muss.
Im eigentlichen wird die Castbar un´ter dem Punkt
Code:
if(unit == 'player' or unit == 'target') then
schon komplett mit eingerichtet, und dies sind auch die Grundlegendste Funktionen auf die ich hier einmal ansprechen möchte.
als erstes wäre hier die Farbe der Castbar
Code:
self.Castbar:SetStatusBarColor(0.25, 0.25, 0.35)
Wobei die 3 Kommazahlen jeweils füe eine Farbe stehen, die erse ist Rot, die zweite Grün und dir Dritte Blau. (1, 1, 1) wäre weiß, (0, 0, 0,) wäre schwarz und je näher die drei werte beieinander liegen desto eher ist es ein Grau, wir hätten hier also ein schönes grau gegeben.
Als nähstes kommen wir zum Hintergrund
Code:
self.Castbar:SetBackdrop(backdrop)
self.Castbar:SetBackdropColor(0, 0, 0)
self.Castbar:SetBackdropCAlpha(0.5)
auch hier wird wie bei der Farbe schon der Hintergrund definiert durch die Drei werte, also Rot/ Grün und Blau. Der Wert BackdropAlpha definiert die helligkeit des Hintergrundes. Wobei 0 für durchsichtig steht, und 1 für komplett undurchsichtig.

Nun der Text, also zaubername und ähnliches.
Code:
self.Castbar.Text = self.Castbar:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmallLeft')
self.Castbar.Text:SetPoint('LEFT', self.Castbar, 2, -1)
Die erse zele definiert den Text der ausgegeben werden soll, hier der Zaubername. In der zweiten Leiste steht wo der Name angezeigt wird. in Diesem Fall in der Castbar, am Linken Rand, allerdings um 2 pxl nach rechts und um 1pxl nach untern verschoben.
Nach genau dem Gleichen prinzip läuft es bei der zauberzeit ab, bloß das dort anstatt des .Text ein .Time steht

Als letztes möchte ich noc einmal auf die Position der Castbar zu sprechen kommen. Diese wird definiert durch die folgenden Befehle
Code:
self.Castbar:SetPoint('TOPRIGHT', self, 'BOTTOMRIGHT', 0, -100)
wobei das "self" für den Playerframe steht, das Heist die Castbar is um 100pxl nach unten verschoben unter den Playerframe. die erste zahl steht wie immer für die xWerte.

5) Position

Als letztes komme ich zur Position der einzelnen Frames, die so wie ich mitbekommen habe den meistne schwierigkeiten bereitet. als erstes suchen wir in der Lua datei einmal nach
Code:
oUF:Spawn
Weil hier die position definiert wird. Nun steht da z.B. das Folgende:
Code:
oUF:Spawn('player'):SetPoint('TOPLEFT', UIParent, 460, -760)
Das
Code:
'player'
steht jetzt für den frame der Gespawnt wird, hier der Playerframe
das
Code:
'TOPLEFT'
steht für den Punkt von dem ausgerechnet wird, hier jetzt die Linke obere Ecke, hier kannst du auch
Code:
'TOPRIGHT'
oä. einfügen, dann wird halt von oben Rechts gerechnet.
Das
Code:
UIParent
is relativ unwichtig, steht aber dafür das dieser Frame als Orientierung für andere Frames dienen kann. Siehe auch -> 5.1)
So und nun das Wichtigste, die beiden Zahlen stehen, wie in Mathe, für die x-Achse bzw- y-Achse, wobei immer von dem Punkt gerechnet wird den du vorne definiert hast. Um sich das einmal vorstellen zu können, der oben definierte Punkt ist so zusagen der 0-Punkt, bei dem die x-/ und y-Achse aufeinander treffen und dann ist es nur noch einfaches subtrahieren, bzw Addieren.
In meinem Falle ist es jetzt mal 'TOPLEFT' wenn man nun eine Bildschirmauflösung von 1280 mal 1024 hat und den Playerframe ziemlich genau in der Mitte haben will muss man das folgende einfügen
Code:
oUF:Spawn('player'):SetPoint('TOPLEFT', UIParent, 640, -512)

Für alle anderen Frames bleibt das Prinzip gleich. Meistens eine Ausname bilden der Focustarget-, der Pettarget-, und der ToTframe. Diese sind meistens über UIParents festgelegt.

5.1) UIParent

Wie eben schon gesagt werden der Focustarget-, der Pettarget-, und der ToTframe über UIParents mit vorhanden Frames verknüpft.
Die Definition das ein Frame als UIParent benutz werden kann passiert wie auch schon erwähnt durch das
Code:
UIParent
Man kann sich das ganze ungefähr so vorstellen das der Frame dann als Elternframe für einen neuen Frame steht und sich der neue Frame dann am Parent orientiert. Ich führe das mal am ToT vor.
Also zuerst suchen wir einmal in unserer Lua-Datei die folgende Zeile.
Code:
 oUF:Spawn('targettarget'):SetPoint('BOTTOMRIGHT', oUF.units.target, 'TOPRIGHT', 0, 5)
Hier wird also die Position festgetzt, an der der ToT-Frame erscheint. Im prinzip ist es nichts anderes als beim playerframe auch, allerdings dient nun nicht mehr der gesamte Bildschirm als mögliche Spawnposition, sondern nur noch der Targetframe. Dafür sorgt das „oUF.units.target” hier wird nämlich so ca. das folgende gesagt: „Hey orientier dich mal nicht mehr am ganzen bildschirm, sondern nimm lieber den Targetframe“ das folgende
Code:
'TOPRIGHT'
setzt die Position am Parentrame fest, an der sich der Anker des ToT-Frames orientiert, also hier oben rechts.
Die beiden folgenden Zahlen stehen wie immer für die X-/ bzw. Y-Achse und sorgen dafür das der Frame ein wenig verschoben wird. Auch hier wie immer bei Lua sind alle Angaben in Pixeln zu machen.
In eigenen Worten sagt die Zeile dem ToT-Frame also das folgende: „hey ich möchte nicht das du deine Position auf den gesamten Bikdschirm beziehst, sondern nur auf den Targetframe. Und hier bitte auf der X-Achse nciht verschoben, dafür aber auf der Y-Achse um 5 Pixel nach oben.
 
Zuletzt bearbeitet von einem Moderator:
Dieser Eintrag kann von einem Mod gelöscht werden, da ich alles in einen Eintrag geschrieben habe.
 
Zuletzt bearbeitet von einem Moderator:
Dieser Eintrag kann von einem Mod gelöscht werden, da ich alles in einen Eintrag geschrieben habe.
 
Zuletzt bearbeitet von einem Moderator:
So dieser Eintrag gilt als Platzhalter und Verabschiedung
liebe Grüße!!

ToDo:
-Tags erklären
-Und ggf. die Farben der Frames
-Rechtschreibfehler entfernen...^^
 
Zuletzt bearbeitet von einem Moderator:
Hab kaum was gelesen, aber UIParent ist sehr wohl wichtig -_-

Wer mit Lua nichts am Hut hat, sollte PitBull o.ä. nutzen und wer mit Lua was am Hut hat, brauch dieses hier nicht.

Meine Meinung hier zu.

...und "self" steht nicht für den Playerframe *heul*
"SetBackdropAlpha" gibt es ebenfalls nicht in der WoW API... *weiter heul*
...gibt noch weitere Fehler...
sad.gif
 
Zuletzt bearbeitet von einem Moderator:
Moin,

super das sich einer die Arbeit mal gemacht hat. Inwieweit Fehler enthalten sind kann ich nicht wirklich sagen, denn ich bin hinsichtlich LUA noch ziemlich grün hinter den Ohren.

Wer mit Lua nichts am Hut hat, sollte PitBull o.ä. nutzen und wer mit Lua was am Hut hat, brauch dieses hier nicht.

...gibt noch weitere Fehler...
sad.gif

Nun, so pauschal würde ich das nicht sagen und Dein *rumgeheule* bringt einen auch nicht viel weiter. Erstens kann nicht jeder als LUA-crack geboren worden sein und zweitens gibt es einige die das Forum hier recht interessant finden und sich zum Einstieg über ein paar Basics freuen - ohne lange im Internet suchen zu müssen.

Bis vor einigen Tagen war LUA für mich etwas absolut neues und erst durch die Anregungen im "Ich zeige mein Interface"-Thread habe ich begonnen mich damit zu beschäftigen. Allerdings möchte man ja nicht nur dauernd fragen und dann hinterher so Kommentare wie Megamage kassieren, sondern sich auch einiges selbst aneignen. Und da finde ich es toll wenn sich jemand einmal die Mühe gemacht hat. Fehler können dann doch in einer konstruktiven Diskussion ausgemerzt werden. Das würde mir als Anfänger auf jeden Fall einiges bringen - ohne anderen eventuell auf den Wecker gehen zu müssen.

Mich zum Beispiel würden solche Sachen interessieren wie:

Wie kann ich einen Text auf max. 20 Buchstaben begrenzen (im targetframe überdenkt der Name manchmal die Prozentangabe des Lebensbalkens eines Bosses, da würde ich statt "Heigan, der ...." lieber nur "Heigan" stehen haben, als Beispiel)

Wie kann ich mir meine Punkte bei einer Fraktion anzeigen lassen (zB Schwarze Klinge 6587/12000), entweder als Balken oder als Text

und und und
smile.gif


Ich habe versucht mich bei wowwiki.com durchzuwühlen aber für einen Neuling nicht immer so ein einfaches Unterfangen
biggrin.gif
 
ah und trotzdem muss einem nicht alles vorgekaut werden...

Hat das irgendwer behauptet?

Ich habe mich positiv über die Erstellung dieses Threads geäußert und negativ darüber das er mal kurz abgewatscht wird. Das hilft halt Neulingen nicht wirklich weiter für die dieser Thread eigentlich ja sein sollte, oder?

....
 
jo dieser Thread ist für anfänger. Weil ich mir dachte das er leuten wie Megamage oder so vll einm wenig hilft, und somit unser geliebter post your UI thred ein wenig sauberer bleibt.
Das Leute wie shanty/psycho und Biggus das alles schon wissen und auch div. sachen zu bemängeln haben ist mir klar, aber ich glaube denen kann ich auch ncihts neues mehr erzählen
tongue.gif


lg
 
@Miran1067: Zu allererst, es heißt Lua.
oUF ist zu komplex für Anfänger.
Als Anfänger sollte man andere Dinge machen und wenn man diese kann, kann man auch oUF...

@psychomuffin: Gibt sowohl "self" als auch "this" in Lua :-)


"self" steht in diesem Fall für den Unitframe welcher platziert wird.
 
Zuletzt bearbeitet von einem Moderator:
im gegensatz zu shanty weiß ich noch lange nicht alles^^
ich sagte nur man kann auch mal etwas selbstständig sein
 
@Miran1067: Zu allererst, es heißt Lua.
oUF ist zu komplex für Anfänger.
Als Anfänger sollte man andere Dinge machen und wenn man diese kann, kann man auch oUF...

Hach ich liebe so kleine Spitzen die dann doch sein müssen
victory.gif
. Aber sorry, ich wollte LUA nicht als "schreien" verstanden wissen, von daher hast Du natürlich recht.

Ich wollte hier auch beim besten Willen keinen Streit vom Zaun brechen, sondern nur meine Meinung anmerken. Das oUF ziemlich komplex ist, das habe ich auch schon leidlich erfahren, aber ich bemühe mich, mich durch den ausgedruckten Quellcode (das layout von lyn, finde es sehr übersichtlich) ein wenig zu informieren.

Also nix für ungut, ich bin schon wieder lieb
rolleyes.gif
 
@Biggus ich weis das niemand perfekt ist, aber ich denke mal du weist eindeutig mehr als ich über LUA. Und ist dies ja nur eine Grobanleitung, wenn irgendwer nach dem lesen diesen thread NICHT mehr selbstständig ist habe ich irgendwas falsch gemacht, denn alles erklärt ist hier ja nun nicht, wie gesagt es sind nur die gröbsten grundlagen

lg
 
jo und ich finds ja super dass du den thread gemacht hast
smile.gif
 
Jo ich finds auch sehr gut von der Idee her
smile.gif


Ma guggen wie's wird, wenn er fertig is
smile.gif
Da der Guide für Anfänger sein soll würd ich das von der Struktur wirklich depperleinfach machen, so das man dem Schritt für Schritt folgen kann & Sachen (falls sie öfters vorkommen) auch öfters erklären
smile.gif
Und viell a erstma "offline" schreiben und nem lua-Profi wie zB Shanti geben zum kontrollieren.. dann sollte nem sehr guten Thread nix mehr im Weg stehen
smile.gif


von mir n
top.gif
 
danke danke, mehrfach erklären werde ich wohl noch, und wenn sich wirklich einer zum durchschaun anbietet wäre es super...
*sich wieder an die arbeit mach*
 
Das Leute wie shanty/psycho und Biggus das alles schon wissen und auch div. sachen zu bemängeln haben ist mir klar, aber ich glaube denen kann ich auch ncihts neues mehr erzählen
tongue.gif
ich habe nicht bemängelt
(ich bin froh wenn ich n unitframe problemlos verschoben krieg -_-)
Ich hatte die Hoffnung das mich jemand aufklärt...ebend weil du das eine über dieses "self" sagst, und shanti das andere gesagt hatte... mehr nicht =/
wie böse ihr alle immer von mir denkt =/
 
wir denken alle ganz ganz lieb von dir....
aber nochmal zu dem "Self", das "self" steht also dafür das der oben genannte frame selber gemeint ist wenn ich das richtig verstanden habe oder?

lg
 
Zurück