hi,
wollen wir doch mal sehen obs hier wirklich so tot is ^^
für den anfang hier mal ein kurzer Text in Sachen SQL grundlagen für MaNGOS und ähnliche Emus. Im grunde ist es eh immer das gleiche man muss nur wissen wie die tabellen aufgebaut sind, der rest is nur Syntax und darum gehts im grunde ^^
[FONT="Verdana"][SIZE="3"]Wozu SQL?[/SIZE]
Natürlich kommt man auch ohne SQL-Wissen zurecht, MaNGOS updated die Struktur selbst und gefüllt wird die Datenbank von UDB oder ähnlichem. Das Resultat ist dann ein Server von der Stange. Ok wir können NPCs und Objekte ingame an anderen Orten aufstellen und einige weitere Scherze treiben. Doch irgendwann möchte man vielleicht eine "Kopie" von NPC X mit anderen Eigenschaften oder einen Boss-Mob der friedlich in der Gegend rumsteht ohne gleichzeitig den Encounter zu zerstören. An dieser Stelle kommen wir um einen direkten Eingriff in die Datenbank nicht herum.
Bleiben wir mal beim Beispiel Boss Encounter. Stellen wir uns mal vor wir wünschen uns eine etwas kleinere Version von Illidan um daraus Wachen für unsere GM-Insel zu basteln.
Dafür müssen wir Illidan erstmal finden, das erledigen wir mit der Select Anweisung:
Damit finden wir alle Datensätze bei denen der Wert des Feldes "name" mit "Illidan " beginnt. Das % dient in SQL als Platzhalter wie man das aus anderen Anwendungen vom "*" gewöhnt ist. Das Leerzeichen zwischen dem Namen und dem % ist an dieser Stelle wichtig, weil "Illidan%" würde auch "Illidanblahblub" finden, wir wissen aber das "Illidan" ein einzelnes Wort ist. Der grundlegende Aufbau einer Select-Anweisung ist folgender:
Nach dem Schlüsselwort Select folgt eine Aufzählung aller Felder die uns interessieren. will man alle Felder sehen kann man das mit einem "*" abkürzen, das ganze nennt man dann gemeinhin "blind-Select". Nach der Aufzählung sagen wir welche Tabelle wir betrachten wollen und filtern das Ganze mit einer WHERE-Klausel. Wer sich näher über Select-Anweisungen informieren möchte, sollte sich einen Abend zeit nehmen und die MySQL Dokumentation zu dem Thema lesen (is wirklich recht viel).
An dieser Stelle ein paar Worte zu Datenbanken. Datenbanken sind in (in der Regel, es gibt Ausnahmen) zweidimensionalen Tabellen gegliedert. Tabellen bestehen aus mehreren Datensätzen und jeder Datensatz aus mehreren Werten. Der "Sinn" der Werte wird in der Tabellenstruktur durch einzelne Felder definiert. Welcher Wert für ein Feld gültig ist ergibt sich aus der Definition des Feldes.
Eine Datenbank kann ganz einfach mit:
erstellt werden. Man kann auch noch ein paar Optionen gleich an dieser Stelle vornehmen, ansonsten wählt das Managmentsystem den Serverstandard und erzeugt die neue Datenbank. Eine Tabelle zu erzeugen ist schon etwas komplexer, und man sollte sich in jedem Fall vorher Gedanken darüber machen was man eigentlich speichern möchte.
Das erzeugt eine Tabelle mit dem Namen "tabelle1" die aus 2 Feldern besteht, "id" und "name". INT gibt an das für das Feld "id" nur ganze Zahlen zugelassen sind, für "name" sind beliebige Zeichen möglich allerdings kann das Feld nur höchstens 50 aufnehmen.
Gut zurück zu unserem Illidan Problem. Wir haben erfolgreich nach allen NPCs gesucht deren Name mit "Illidan " beginnt. An der Stelle müssten wir per .npc add schauen welcher davon der richtige ist, oder wir verlassen uns darauf das unser gesuchter der einzige mit einem Script ist. Der Scriptname steht im entsprchenden Feld im Datensatz. Gut wir können nun einfach schauen welcher davon ein script hat und alle Werte dieses Kandidaten notieren. Geht aber auch einfacher, man kann nämlich auch nach verschiedenen Werten gleichzeitig suchen.
Das sollte uns nun unseren geliebten Illidan hervorzaubern. Jetzt könnten wir Illidan schon kopieren, aber das ganze hat einen kleinen Hacken. Das Feld "entry" der Tabelle "creature_template" ist ein Primärschlüssel und hat somit nur einzigartige Werte zu beinhalten, das heißt wir können Illidan nich einfach mal so kopieren. Wir müssen das Datenbanksystem ein wenig überreden. Eine Möglichkeit wäre nur die Felder zu kopieren die nicht einzigartig sein müssen (Primärschlüssel, Unique-Index). Das ist bei der Tabelle allerdings fast abendfüllende Tipparbeit.
Schneller geht es wenn wir uns eine Kopie von "creature_template" machen.
Die erste Anweisung erstellt eine Tabelle "ct_copy" mit den gleichen Feldern und Eigenschaften unserer "creature_template" Tabelle. Danach wird alles aus der Tabelle "creature_template" in die Tabelle "ct_copy" kopiert. Genauer betrachtet bedeutet die Anweisung: Füge in Tabelle ct_copy alles ein was du in Tabelle creature_template findest. Man könnte natürlich auch nur den einen Illidan kopieren, dazu muss man nur das Select mit einer WHERE Klausel filtern, und die kennen wir ja schon von oben.
Jetzt können wir unseren Illidan in spee anpassen, das geschieht mit einer oder mehreren UPDATE Anweisungen. Dafür sollten wir uns natürlich vorher überlegen was wir überhaupt ändern wollen. Im UDB-Wiki gibt es einen Überblick über die Felder der Tabelle "creature_template", und davon KÖNNTE man praktisch alles ändern. Tun wir aber nich, sonst haben wir kein Illidan mehr übrig. Oben erwähnt wurde der Primärschlüssel, wer aufgepasst hat weiß, den müssen wir auf jeden Fall ändern. Als neuen Wert für entry sollte etwas möglichst weit weg von allen anderen Kreaturen liegen, also etwa 500.000. Dann passen wir hier noch beispielhaft den Schaden, das Script, die Größe und die Geschwindigkeit an.
Nachdem wir alles angepasst haben was wir wollten, kopieren wir unseren Illidan zurück in die originale Tabelle.
Leider kann MaNGOS die creature_template nicht online neu laden, weshalb an dieser Stelle ein Neustart erforderlich ist. Ist das erledigt, können wir unseren Illidan aufstellen wo wir wollen.
[/FONT]
bei interesse gibts noch mehr davon ^^
wollen wir doch mal sehen obs hier wirklich so tot is ^^
für den anfang hier mal ein kurzer Text in Sachen SQL grundlagen für MaNGOS und ähnliche Emus. Im grunde ist es eh immer das gleiche man muss nur wissen wie die tabellen aufgebaut sind, der rest is nur Syntax und darum gehts im grunde ^^
[FONT="Verdana"][SIZE="3"]Wozu SQL?[/SIZE]
Natürlich kommt man auch ohne SQL-Wissen zurecht, MaNGOS updated die Struktur selbst und gefüllt wird die Datenbank von UDB oder ähnlichem. Das Resultat ist dann ein Server von der Stange. Ok wir können NPCs und Objekte ingame an anderen Orten aufstellen und einige weitere Scherze treiben. Doch irgendwann möchte man vielleicht eine "Kopie" von NPC X mit anderen Eigenschaften oder einen Boss-Mob der friedlich in der Gegend rumsteht ohne gleichzeitig den Encounter zu zerstören. An dieser Stelle kommen wir um einen direkten Eingriff in die Datenbank nicht herum.
Bleiben wir mal beim Beispiel Boss Encounter. Stellen wir uns mal vor wir wünschen uns eine etwas kleinere Version von Illidan um daraus Wachen für unsere GM-Insel zu basteln.
Dafür müssen wir Illidan erstmal finden, das erledigen wir mit der Select Anweisung:
Damit finden wir alle Datensätze bei denen der Wert des Feldes "name" mit "Illidan " beginnt. Das % dient in SQL als Platzhalter wie man das aus anderen Anwendungen vom "*" gewöhnt ist. Das Leerzeichen zwischen dem Namen und dem % ist an dieser Stelle wichtig, weil "Illidan%" würde auch "Illidanblahblub" finden, wir wissen aber das "Illidan" ein einzelnes Wort ist. Der grundlegende Aufbau einer Select-Anweisung ist folgender:
Nach dem Schlüsselwort Select folgt eine Aufzählung aller Felder die uns interessieren. will man alle Felder sehen kann man das mit einem "*" abkürzen, das ganze nennt man dann gemeinhin "blind-Select". Nach der Aufzählung sagen wir welche Tabelle wir betrachten wollen und filtern das Ganze mit einer WHERE-Klausel. Wer sich näher über Select-Anweisungen informieren möchte, sollte sich einen Abend zeit nehmen und die MySQL Dokumentation zu dem Thema lesen (is wirklich recht viel).
An dieser Stelle ein paar Worte zu Datenbanken. Datenbanken sind in (in der Regel, es gibt Ausnahmen) zweidimensionalen Tabellen gegliedert. Tabellen bestehen aus mehreren Datensätzen und jeder Datensatz aus mehreren Werten. Der "Sinn" der Werte wird in der Tabellenstruktur durch einzelne Felder definiert. Welcher Wert für ein Feld gültig ist ergibt sich aus der Definition des Feldes.
Eine Datenbank kann ganz einfach mit:
erstellt werden. Man kann auch noch ein paar Optionen gleich an dieser Stelle vornehmen, ansonsten wählt das Managmentsystem den Serverstandard und erzeugt die neue Datenbank. Eine Tabelle zu erzeugen ist schon etwas komplexer, und man sollte sich in jedem Fall vorher Gedanken darüber machen was man eigentlich speichern möchte.
Das erzeugt eine Tabelle mit dem Namen "tabelle1" die aus 2 Feldern besteht, "id" und "name". INT gibt an das für das Feld "id" nur ganze Zahlen zugelassen sind, für "name" sind beliebige Zeichen möglich allerdings kann das Feld nur höchstens 50 aufnehmen.
Gut zurück zu unserem Illidan Problem. Wir haben erfolgreich nach allen NPCs gesucht deren Name mit "Illidan " beginnt. An der Stelle müssten wir per .npc add schauen welcher davon der richtige ist, oder wir verlassen uns darauf das unser gesuchter der einzige mit einem Script ist. Der Scriptname steht im entsprchenden Feld im Datensatz. Gut wir können nun einfach schauen welcher davon ein script hat und alle Werte dieses Kandidaten notieren. Geht aber auch einfacher, man kann nämlich auch nach verschiedenen Werten gleichzeitig suchen.
Das sollte uns nun unseren geliebten Illidan hervorzaubern. Jetzt könnten wir Illidan schon kopieren, aber das ganze hat einen kleinen Hacken. Das Feld "entry" der Tabelle "creature_template" ist ein Primärschlüssel und hat somit nur einzigartige Werte zu beinhalten, das heißt wir können Illidan nich einfach mal so kopieren. Wir müssen das Datenbanksystem ein wenig überreden. Eine Möglichkeit wäre nur die Felder zu kopieren die nicht einzigartig sein müssen (Primärschlüssel, Unique-Index). Das ist bei der Tabelle allerdings fast abendfüllende Tipparbeit.
Schneller geht es wenn wir uns eine Kopie von "creature_template" machen.
Die erste Anweisung erstellt eine Tabelle "ct_copy" mit den gleichen Feldern und Eigenschaften unserer "creature_template" Tabelle. Danach wird alles aus der Tabelle "creature_template" in die Tabelle "ct_copy" kopiert. Genauer betrachtet bedeutet die Anweisung: Füge in Tabelle ct_copy alles ein was du in Tabelle creature_template findest. Man könnte natürlich auch nur den einen Illidan kopieren, dazu muss man nur das Select mit einer WHERE Klausel filtern, und die kennen wir ja schon von oben.
Jetzt können wir unseren Illidan in spee anpassen, das geschieht mit einer oder mehreren UPDATE Anweisungen. Dafür sollten wir uns natürlich vorher überlegen was wir überhaupt ändern wollen. Im UDB-Wiki gibt es einen Überblick über die Felder der Tabelle "creature_template", und davon KÖNNTE man praktisch alles ändern. Tun wir aber nich, sonst haben wir kein Illidan mehr übrig. Oben erwähnt wurde der Primärschlüssel, wer aufgepasst hat weiß, den müssen wir auf jeden Fall ändern. Als neuen Wert für entry sollte etwas möglichst weit weg von allen anderen Kreaturen liegen, also etwa 500.000. Dann passen wir hier noch beispielhaft den Schaden, das Script, die Größe und die Geschwindigkeit an.
Nachdem wir alles angepasst haben was wir wollten, kopieren wir unseren Illidan zurück in die originale Tabelle.
Leider kann MaNGOS die creature_template nicht online neu laden, weshalb an dieser Stelle ein Neustart erforderlich ist. Ist das erledigt, können wir unseren Illidan aufstellen wo wir wollen.
[/FONT]
bei interesse gibts noch mehr davon ^^