MySQL
Hallo,
hiermit möchte ich euch eine erste Einführung in "Pawn in Verbindung mit MySQL" geben. Das ganze baut auf das G-Stylezzz - PlugIn auf - ganz einfach aus dem Grund: Ich benutze es selber auch. MySQL ist das weit verbreiteste Datenbankverwaltungssystem - es wird seit 1994 entwickelt. MySQL läuft über Tabellen - das heißt ihr könnt aus euren Userdateien nun Tabellenspalten machen, euer Fahrzeugsystem nutzt nun nicht für jedes Fahrzeug eine Datei, nein, es nutzt eine Tabellenspalte.
MySQL war für mich auch ein wenig "hohes Gerede" - aber glaubt mir, wenn ihr es nutzt und es soweit versteht, wollt ihr es nicht mehr missen! In DINI oder jeglichen anderen Dateispeicherungssystemen schaut "ein User" wie folgt aus:
In MySQL wäre das eine Tabelle und dort eine Spalte:
=> Doch welchen Vorteil bringt MySQL noch mit sich?
In meinen Augen bringt MySQL ein weiteres, wichtiges, Argument mit sich: Dynamische Webseiten bauen (oftmals) auch darauf auf: Man kann es also im nachhinein prima miteinander verknüpfen und bspw. ein solches WBB-PlugIn daraus bauen:
Hallo,
hiermit möchte ich euch eine erste Einführung in "Pawn in Verbindung mit MySQL" geben. Das ganze baut auf das G-Stylezzz - PlugIn auf - ganz einfach aus dem Grund: Ich benutze es selber auch. MySQL ist das weit verbreiteste Datenbankverwaltungssystem - es wird seit 1994 entwickelt. MySQL läuft über Tabellen - das heißt ihr könnt aus euren Userdateien nun Tabellenspalten machen, euer Fahrzeugsystem nutzt nun nicht für jedes Fahrzeug eine Datei, nein, es nutzt eine Tabellenspalte.
MySQL war für mich auch ein wenig "hohes Gerede" - aber glaubt mir, wenn ihr es nutzt und es soweit versteht, wollt ihr es nicht mehr missen! In DINI oder jeglichen anderen Dateispeicherungssystemen schaut "ein User" wie folgt aus:
In MySQL wäre das eine Tabelle und dort eine Spalte:
Ihr habt eine Tabelle mit allen Usern: Alles in einem! Wunderbar, oder?username | adminlevel | money
vincent---_--1337____------20000
=> Doch welchen Vorteil bringt MySQL noch mit sich?
In meinen Augen bringt MySQL ein weiteres, wichtiges, Argument mit sich: Dynamische Webseiten bauen (oftmals) auch darauf auf: Man kann es also im nachhinein prima miteinander verknüpfen und bspw. ein solches WBB-PlugIn daraus bauen:
[Blockierte Grafik: http://www.abload.de/img/neuigkeiten_plugin8qu58.png]
Ich möchte nicht behaupten, dass das mit anderen Speicherungssystem nicht möglich ist - aber ich denke mit MySQL ist das hier am einfachsten umsetzbar, ggf. auch am "schönsten".
Natürlich gibt es noch andere Argumente: Anschaulich (sehr übersichtlich), Schnelligkeit (soweit ich weiß ist das schneller als jedes Filesystem), ...
=> Kommen wir zur Sache: Anschnallen, es wird ernst!
Wir haben in diesem Tutorial vor, euer gesamtes System so aufzubauen, dass es komplett auf MySQL basiert. Vorallem aber auch, dass ihr mit eurem (ggf. neuen) Speicherungssystem umgehen könnt.
Als erstes empfehle ich euch xampp zum erstellen einer lokalen MySQL-Datenbank, bzw. auch um PHPMyAdmin nutzen zu können. Downloaden könnt ihr dieses Programm hier! Es kann zu Problemen/Behinderungen mit Skype kommen, einfach den Port bei Skype unter "Aktionen => Optionen => Erweitert => Verbindung" ändern. Ich würde euch empfehlen PHPMyAdmin zu installieren (ich glaube aber, dass das automatisch mit installiert wird). Wenn ihr xampp erfolgreich installiert habt startet den Webserver & MySQL und gebt in eure Browser-Adresszeile mal "localhost/phpmyadmin" ein. Dort loggt ihr euch nun ein (es dürfte aber kein Login abverlangt werden).
Wenn ihr folgendes Bild:
Natürlich gibt es noch andere Argumente: Anschaulich (sehr übersichtlich), Schnelligkeit (soweit ich weiß ist das schneller als jedes Filesystem), ...
=> Kommen wir zur Sache: Anschnallen, es wird ernst!
Wir haben in diesem Tutorial vor, euer gesamtes System so aufzubauen, dass es komplett auf MySQL basiert. Vorallem aber auch, dass ihr mit eurem (ggf. neuen) Speicherungssystem umgehen könnt.
Als erstes empfehle ich euch xampp zum erstellen einer lokalen MySQL-Datenbank, bzw. auch um PHPMyAdmin nutzen zu können. Downloaden könnt ihr dieses Programm hier! Es kann zu Problemen/Behinderungen mit Skype kommen, einfach den Port bei Skype unter "Aktionen => Optionen => Erweitert => Verbindung" ändern. Ich würde euch empfehlen PHPMyAdmin zu installieren (ich glaube aber, dass das automatisch mit installiert wird). Wenn ihr xampp erfolgreich installiert habt startet den Webserver & MySQL und gebt in eure Browser-Adresszeile mal "localhost/phpmyadmin" ein. Dort loggt ihr euch nun ein (es dürfte aber kein Login abverlangt werden).
Wenn ihr folgendes Bild:
[Blockierte Grafik: http://img248.imageshack.us/img248/62/localhostphpmyadmininde.png]
vorfindet dann seit ihr nun auf der Startseite der PHPMyAdmin - Oberfläche - Glückwunsch und ein Herzliches Willkommen von mir.
Keine Angst - das ist gar nicht so kompliziert, wie es eventuell erstmal wirkt.
=> Es ist wie folgt ...
Links habt ihr die Datenbanken aufgeführt. Es sind bereits Standart-Datenbanken drin, diese bitte ich euch nicht anzurühren sondern einfach professionell zu ignorieren. Im oberen Bereich findet ihr ganz oben den "Wegweiser", der zeigt euch, wo ihr gerade seit: Aktuell seit ihr auf "localhost", sprich auf der Startseite. Dann seht ihr 9 Tabs.

=> Nähern wir uns dem ganzen ein Stückchen ...
Wir klicken auf "Datenbanken" - und los! Wir legen nun unsere erste Datenbank an indem ihr bei Datenbank bspw. "samp" eingebt, das Select-Feld auf "Kollation" lasst und auf "Anlegen" klickt!

Keine Angst - das ist gar nicht so kompliziert, wie es eventuell erstmal wirkt.
=> Es ist wie folgt ...
Links habt ihr die Datenbanken aufgeführt. Es sind bereits Standart-Datenbanken drin, diese bitte ich euch nicht anzurühren sondern einfach professionell zu ignorieren. Im oberen Bereich findet ihr ganz oben den "Wegweiser", der zeigt euch, wo ihr gerade seit: Aktuell seit ihr auf "localhost", sprich auf der Startseite. Dann seht ihr 9 Tabs.
- Das erste nennt sich "Datenbanken" - dort könnt ihr Datenbanken löschen, erstellen, bearbeiten, ...
- Das zweite ist "SQL": Dort ist es euch möglich Querys (was das ist erfahrt ihr später) auszuführen, sprich die grafische Oberfläche mal links liegen zu lassen und gleich den Code einzufügen, den PMA generiert, wenn ihr euch mit Klicks durchwühlt.
- Anschließend habt ihr "Status" ... dürfte sich von selbst erklären.
- Darauffolgend kommt "Benutzer": Dort könnt ihr Benutzer erstellen - ähnlich wie ihr es ggf. bei eurem PC kennt: Benutzerkonten mit vollem/beschränktem Zugriff.
- Als nächstes findet ihr "Exportieren": Dort könnt ihr später, falls ihr auf einen anderen Server wechselt die Datenbank mitnehmen, exportieren ...
- Und dann "Importieren": ... und in der nächsten Datenbank importieren.

=> Nähern wir uns dem ganzen ein Stückchen ...
Wir klicken auf "Datenbanken" - und los! Wir legen nun unsere erste Datenbank an indem ihr bei Datenbank bspw. "samp" eingebt, das Select-Feld auf "Kollation" lasst und auf "Anlegen" klickt!
[Blockierte Grafik: http://www.abload.de/img/mysql1bkel6.png]
Wenn ihr alles richtig gemacht habt, dann kommt nun ein kleines Fensterchen mit dem Text:
Nun dürfte bei euch stehen:
=> Zur Erklärung: Tabellen
Tabellen stelle ich mir vor wie Ordner/Akten bei der Polizei. Sie sind geordnet nach bestimmten Werten und es sind stetig neue Einträge (Verbrechen) eintragbar. So ist das nun auch in MySQL - ähnlich zumindest. Ihr könnt euch Tabellen ohne Ende erstellen (mir ist kein Limit bekannt) und dort Werte eintragen, wie ihr wollt und diese durch sogenannte Querys abrufen.
=> Zur Erklärung: Querys
Querys sind in MySQL eine Art "Befehl" wie sie auch in Pawn existieren. Es gibt da ein paar wichtige Befehle die ihr euch schon einmal im Hinterkopf behalten dürft:

=> Back to topic: Die Tabellenerstellung
Wir geben nun also in das Feld den gewünschten Spielertabellennamen ein, geben bei "Anzahl der Spalten" eine 4 an und drücken auf "Ok":
Vergesst den Haken bei "AUTO_INCREMENT" bzw. bei "A_I" nicht!
=> Zur Erklärung: AUTO INCREMENT
Auto Increment ist eine super Sache - es erspart wirklich einiges an Arbeit! Es verteilt den einzelnen Zeilen (den einzelnen Datensätzen innerhalb einer Akte (Tabelle)) eindeutige Nummern die zur Identifikation prima genutzt werden können!
Ihr habt nun folgendes Bild nachdem ihr auf "Speichern" gedrückt habt:
Nun wartet ihr entweder 10 Sekunden oder drückt flott F5 und dann dürfte bei euch, links, in der Übersicht nun ein "samp" stehen. Dort klickt ihr einmal rauf!Die Datenbank samp wurde erzeugt.
Nun dürfte bei euch stehen:
Wir erstellen nun also unsere erste Tabelle.Diese Datenbank hat keine Tabellen
=> Zur Erklärung: Tabellen
Tabellen stelle ich mir vor wie Ordner/Akten bei der Polizei. Sie sind geordnet nach bestimmten Werten und es sind stetig neue Einträge (Verbrechen) eintragbar. So ist das nun auch in MySQL - ähnlich zumindest. Ihr könnt euch Tabellen ohne Ende erstellen (mir ist kein Limit bekannt) und dort Werte eintragen, wie ihr wollt und diese durch sogenannte Querys abrufen.
=> Zur Erklärung: Querys
Querys sind in MySQL eine Art "Befehl" wie sie auch in Pawn existieren. Es gibt da ein paar wichtige Befehle die ihr euch schon einmal im Hinterkopf behalten dürft:
- SELECT
- INSERT
- DROP
- UPDATE

=> Back to topic: Die Tabellenerstellung
Wir geben nun also in das Feld den gewünschten Spielertabellennamen ein, geben bei "Anzahl der Spalten" eine 4 an und drücken auf "Ok":
[Blockierte Grafik: http://www.abload.de/img/mysql2tqjm4.png]
Nun öffnet sich ein kleines "Popup" - nicht schließen: Das ist keine Werbung! Es wird nun von uns verlangt, dass wir allerlei Daten angeben - auch hier: Schreckt nicht ab, wir packen das schon! 
Es ist, wie erwähnt, nützlich mit ID's zu arbeiten. Deshalb nennen wir unser erstes Feld "id" und machen etwas weiter hinten bei "AUTO INCREMENT" (ggf. auch "A_I") ein Haken rein. Das nächste Feld nennen wir nun "username", das ganze wird ein Varchar mit 24 Zeichen, da SA:MP ja nicht mehr anbietet. Darauffolgend kommt Feld Nr. 3 mit dem Namen "password" und dem Typen "Text". Und als letztes noch ein Feld namens "adminlevel" ohne jegliche Eigenschaftsänderungen.
Da das nun evtl. ein wenig viel auf einmal war, hier mal das, was gemacht werden sollte:

Es ist, wie erwähnt, nützlich mit ID's zu arbeiten. Deshalb nennen wir unser erstes Feld "id" und machen etwas weiter hinten bei "AUTO INCREMENT" (ggf. auch "A_I") ein Haken rein. Das nächste Feld nennen wir nun "username", das ganze wird ein Varchar mit 24 Zeichen, da SA:MP ja nicht mehr anbietet. Darauffolgend kommt Feld Nr. 3 mit dem Namen "password" und dem Typen "Text". Und als letztes noch ein Feld namens "adminlevel" ohne jegliche Eigenschaftsänderungen.
Da das nun evtl. ein wenig viel auf einmal war, hier mal das, was gemacht werden sollte:
[Blockierte Grafik: http://img593.imageshack.us/img593/3951/localhostphpmyadminindeu.png]
Vergesst den Haken bei "AUTO_INCREMENT" bzw. bei "A_I" nicht!
=> Zur Erklärung: AUTO INCREMENT
Auto Increment ist eine super Sache - es erspart wirklich einiges an Arbeit! Es verteilt den einzelnen Zeilen (den einzelnen Datensätzen innerhalb einer Akte (Tabelle)) eindeutige Nummern die zur Identifikation prima genutzt werden können!
Ihr habt nun folgendes Bild nachdem ihr auf "Speichern" gedrückt habt:
[Blockierte Grafik: http://www.abload.de/img/mysql3doqlz.png]
Ihr klickt nun einmal auf das "spieler" oder auch links, da sich dort ja auch was getan hat, und nun seht ihr: leere!
Bis hierhin geht der Konfigurationsteil - nun kommen wir zum Pawnteil...
=> Der Pawnteil
So - dampft der Kopf schon? Ja? Das ist gut - so soll es doch sein, so macht es doch Spaß!
Ich hoffe der erste Teil ist verständlich - falls bislang fragen aufgekommen sind, stellt sie!
Ich werde euch den Pawnteil nun anhand eines neuen, leeren Scripts erklären wollen. Als erstes werde ich mir das MySQL Plugin herunterladen (klick). Ich möchte hier darauf hinweisen, dass ich noch nicht mit dem Cachingsystem arbeite - habe ich mich bislang nicht mit auseinandergesetzt (falls ihr das damit machen wollt, nutzt es gerne (Tutoriallink)). Heißt also, ich nutze Version 6.
Als erstes inkludieren wir das PlugIn mit:
[pwn]#include <a_mysql>[/pwn]
Als nächstes gebe ich Verbindungsdaten an, damit sich mein Gamemode bzw. mein Server dann mit dem MySQL-Server verbinden kann und die dortigen Einträge nutzen kann. Ich mache das mit Konstanten:
[pwn]#define sql_Host "localhost" //Der MySQL-Host (localhost ist das, sofern ihr das ganze aber nicht mehr auf eurem PC habt kann es zu Änderungen kommen)
#define sql_User "root" //Der User, der auf die Datenbank "samp" Zugriff hat
#define sql_Password "" //Das Userpasswort von "root"
#define sql_Database "samp" //Der Datenbankname[/pwn]
Ich denke auch hier ist alles klar - oder?
Ich möchte nun eine Verbindung zu meiner Datenbank herstellen...
=> Verbindung zur Datenbank herstellen
Das machen wir in Pawn mit folgender Funktion: mysql_connect()
Diese verlangt folgende Parameter:
[pwn]host[], user[], database[], password[][/pwn]
Wir wandern nun also zu OnGameModeInit, denn beim starten des Gamemodes soll sich das ganze ja verbinden, nicht wahr?
Als erstes hauen wir ein:
[pwn]mysql_debug(1);[/pwn]
rein - das sorgt dafür, dass im Hauptverzeichnis des SA:MP - Servers eine Debugdatei (.txt) erstellt wird, die Fehlermeldungen aber auch erfolgreiche MySQL-Meldungen niederschreibt.
Anschließend möchten wir zum Server verbinden, dies machen wir mit dem, oben geschriebenen, mysql_connect() - Befehl/Funktion:
[pwn]mysql_connect(sql_Host, sql_User, sql_Database, sql_Password);[/pwn]
wenn die Daten nun richtig waren, hat sich SA:MP Server mit MySQL - Server verbunden - wenn nicht, ja ... was dann?
Wir bauen also nun eine kleine Funktion ein, die checked, ob sich die Server überhaupt verbunden haben, das ganze mit Hilfe von mysql_ping().
Diese Funktion liefert das PlugIn von G-Stylezzz ebenfalls mit und erwartet auch keine Parameter. Diese Funktion liefert ein Boolean zurück, das ist ein true/false, sprich:
[pwn]mysql_debug(1);
mysql_connect(sql_Host, sql_User, sql_Database, sql_Password);
if(mysql_ping()) {
printf("Mit Server %s verbunden!", sql_Host);
}
else {
}[/pwn]
Wie ihr nun dazu kommt, dass sich der Server wieder schließt, wenn die Verbindung fehlgeschlagen ist: Überlegt mal selber, das sind dann doch eher Grundlagen!
Nun wird es spannend: Wie sagen wir: "Schaue ob der Spieler beim connect existiert und schaue dann, ob sein Passwort, was eingegeben worden ist, auch das richtige ist!"? - Ja, das geht schon recht weit, aber da sollten wir nun ansetzen. Nach Dialogtutorial kreieren wir nun ein DIALOG_STYLE_PASSWORD mit der ID DIALOG_LOGIN_PASSWORD und zeigen diesen dann bei OnPlayerConnect an:
[pwn]public OnPlayerConnect(playerid)
{
ShowPlayerDialog(playerid, DIALOG_LOGIN_PASSWORD, DIALOG_STYLE_PASSWORD, "Login", "Tippe dein Passwort ein!", "Ok", "Verlassen");
return 1;
}[/pwn]
und nun springen wir zu OnDialogResponse ...
Wir schauen, ob es sich beim Dialog um DIALOG_LOGIN_PASSWORD handelt und ob response auf true ist. Nun gehts an unseren ersten Query! Hey! Glückwunsch das ihr es bis hier geschafft habt! Nicht schlecht! Hut ab! Chapeau!
Um das ganze euch jetzt mal logisch zu erklären, da es ja doch schon etwas neues für euch ist, denke ich:
Wir SELECT(ieren) aus der Tabelle "spieler" den Wert "*" (alles) WENN die Felder "username" und "password" mit dem Usernamen und dem Inputtext übereinstimmen und loggen den Spieler dann ein.
Das sieht in der Praxis wie folgt aus:
Wenn wir nun ein mysql_num_rows() von 1 erhalten, dann haben wir gute Arbeit geleistet und holen uns 'n Bier aus'm Kühlschrank und stoßen auf uns an ... HAAALT! Noch nicht losrennen, wir habens noch nicht geschafft *pfeif*.
Ja, wie send ich das denn nun an den MySQL-Server?
=> MySQL-Query senden? Wie geht das?
Dazu dient die Funktion mysql_query()
Anschließend holen wir uns mit mysql_store_result() alles das, was wir als Antwort vom MySQL-Server erhalten, das schaut in der Praxis wie folgt aus:
[pwn]if(dialogid == DIALOG_LOGIN_PASSWORD && response) {
new strQuery[150];
format(strQuery, 150, "SELECT * FROM `spieler` WHERE `username` = '%s' AND `password` = '%s' LIMIT 1", getName(playerid), inputtext);
mysql_query(strQuery);
mysql_store_result();
}[/pwn]
Alle Funktionen nochmal zum ansehen übrigens hier! Die Funktion getName() ist selbst zu schreiben - das schafft ihr!
Damit aber nun nicht genug. Wir möchten ja auch wissen, ob ein Datensatz welcher unseren "WENN"-Bedingungen entsprach, auch existiert. Das mache ich mit mysql_num_rows() - damit zählt er mir alle Zeilen. Ich frage nun ob eine Zeile "angesprochen" wurde.
[pwn]mysql_store_result();
if(mysql_num_rows()) {
// Einloggen
}
mysql_free_result();[/pwn]
Einloggen müsstet ihr den Spieler selber.
Als Hilfe kann ich euch nur das Schattenbaum-MySQL-Tutorial anbieten, damit ist euch geholfen! Ignoriert möglichst den PHP-Teil. Oder probiert einfach selber rum - oder: FRAGT!
Ich hoffe das alle Angaben richtig sind und ich helfen konnte. Wenn ihr Fehler findet kackt mich bitte nicht von der Seite an, sondern weist mich darauf hin, freundlich, wie es sich gehört. Ich werde das Tutorial auch bald ein wenig erweitern, damit ihr wisst, wie ihr Werte updated und nicht auf Schattenbaum angewiesen seit. Puh. Das war es von mir.
Grüße.
Bis hierhin geht der Konfigurationsteil - nun kommen wir zum Pawnteil...
=> Der Pawnteil
So - dampft der Kopf schon? Ja? Das ist gut - so soll es doch sein, so macht es doch Spaß!

Ich hoffe der erste Teil ist verständlich - falls bislang fragen aufgekommen sind, stellt sie!

Ich werde euch den Pawnteil nun anhand eines neuen, leeren Scripts erklären wollen. Als erstes werde ich mir das MySQL Plugin herunterladen (klick). Ich möchte hier darauf hinweisen, dass ich noch nicht mit dem Cachingsystem arbeite - habe ich mich bislang nicht mit auseinandergesetzt (falls ihr das damit machen wollt, nutzt es gerne (Tutoriallink)). Heißt also, ich nutze Version 6.
Als erstes inkludieren wir das PlugIn mit:
[pwn]#include <a_mysql>[/pwn]
Als nächstes gebe ich Verbindungsdaten an, damit sich mein Gamemode bzw. mein Server dann mit dem MySQL-Server verbinden kann und die dortigen Einträge nutzen kann. Ich mache das mit Konstanten:
[pwn]#define sql_Host "localhost" //Der MySQL-Host (localhost ist das, sofern ihr das ganze aber nicht mehr auf eurem PC habt kann es zu Änderungen kommen)
#define sql_User "root" //Der User, der auf die Datenbank "samp" Zugriff hat
#define sql_Password "" //Das Userpasswort von "root"
#define sql_Database "samp" //Der Datenbankname[/pwn]
Ich denke auch hier ist alles klar - oder?
Ich möchte nun eine Verbindung zu meiner Datenbank herstellen...
=> Verbindung zur Datenbank herstellen
Das machen wir in Pawn mit folgender Funktion: mysql_connect()
Diese verlangt folgende Parameter:
[pwn]host[], user[], database[], password[][/pwn]
Wir wandern nun also zu OnGameModeInit, denn beim starten des Gamemodes soll sich das ganze ja verbinden, nicht wahr?
Als erstes hauen wir ein:
[pwn]mysql_debug(1);[/pwn]
rein - das sorgt dafür, dass im Hauptverzeichnis des SA:MP - Servers eine Debugdatei (.txt) erstellt wird, die Fehlermeldungen aber auch erfolgreiche MySQL-Meldungen niederschreibt.
Anschließend möchten wir zum Server verbinden, dies machen wir mit dem, oben geschriebenen, mysql_connect() - Befehl/Funktion:
[pwn]mysql_connect(sql_Host, sql_User, sql_Database, sql_Password);[/pwn]
wenn die Daten nun richtig waren, hat sich SA:MP Server mit MySQL - Server verbunden - wenn nicht, ja ... was dann?
Wir bauen also nun eine kleine Funktion ein, die checked, ob sich die Server überhaupt verbunden haben, das ganze mit Hilfe von mysql_ping().
Diese Funktion liefert das PlugIn von G-Stylezzz ebenfalls mit und erwartet auch keine Parameter. Diese Funktion liefert ein Boolean zurück, das ist ein true/false, sprich:
- true: Verbunden
- false: Verbinden fehlgeschlagen
[pwn]mysql_debug(1);
mysql_connect(sql_Host, sql_User, sql_Database, sql_Password);
if(mysql_ping()) {
printf("Mit Server %s verbunden!", sql_Host);
}
else {
}[/pwn]
Wie ihr nun dazu kommt, dass sich der Server wieder schließt, wenn die Verbindung fehlgeschlagen ist: Überlegt mal selber, das sind dann doch eher Grundlagen!

Nun wird es spannend: Wie sagen wir: "Schaue ob der Spieler beim connect existiert und schaue dann, ob sein Passwort, was eingegeben worden ist, auch das richtige ist!"? - Ja, das geht schon recht weit, aber da sollten wir nun ansetzen. Nach Dialogtutorial kreieren wir nun ein DIALOG_STYLE_PASSWORD mit der ID DIALOG_LOGIN_PASSWORD und zeigen diesen dann bei OnPlayerConnect an:
[pwn]public OnPlayerConnect(playerid)
{
ShowPlayerDialog(playerid, DIALOG_LOGIN_PASSWORD, DIALOG_STYLE_PASSWORD, "Login", "Tippe dein Passwort ein!", "Ok", "Verlassen");
return 1;
}[/pwn]
und nun springen wir zu OnDialogResponse ...
Wir schauen, ob es sich beim Dialog um DIALOG_LOGIN_PASSWORD handelt und ob response auf true ist. Nun gehts an unseren ersten Query! Hey! Glückwunsch das ihr es bis hier geschafft habt! Nicht schlecht! Hut ab! Chapeau!
Um das ganze euch jetzt mal logisch zu erklären, da es ja doch schon etwas neues für euch ist, denke ich:
Wir SELECT(ieren) aus der Tabelle "spieler" den Wert "*" (alles) WENN die Felder "username" und "password" mit dem Usernamen und dem Inputtext übereinstimmen und loggen den Spieler dann ein.
Das sieht in der Praxis wie folgt aus:
Wenn wir nun ein mysql_num_rows() von 1 erhalten, dann haben wir gute Arbeit geleistet und holen uns 'n Bier aus'm Kühlschrank und stoßen auf uns an ... HAAALT! Noch nicht losrennen, wir habens noch nicht geschafft *pfeif*.
Ja, wie send ich das denn nun an den MySQL-Server?
=> MySQL-Query senden? Wie geht das?
Dazu dient die Funktion mysql_query()
Anschließend holen wir uns mit mysql_store_result() alles das, was wir als Antwort vom MySQL-Server erhalten, das schaut in der Praxis wie folgt aus:
[pwn]if(dialogid == DIALOG_LOGIN_PASSWORD && response) {
new strQuery[150];
format(strQuery, 150, "SELECT * FROM `spieler` WHERE `username` = '%s' AND `password` = '%s' LIMIT 1", getName(playerid), inputtext);
mysql_query(strQuery);
mysql_store_result();
}[/pwn]
Alle Funktionen nochmal zum ansehen übrigens hier! Die Funktion getName() ist selbst zu schreiben - das schafft ihr!

Damit aber nun nicht genug. Wir möchten ja auch wissen, ob ein Datensatz welcher unseren "WENN"-Bedingungen entsprach, auch existiert. Das mache ich mit mysql_num_rows() - damit zählt er mir alle Zeilen. Ich frage nun ob eine Zeile "angesprochen" wurde.
[pwn]mysql_store_result();
if(mysql_num_rows()) {
// Einloggen
}
mysql_free_result();[/pwn]
Einloggen müsstet ihr den Spieler selber.
Als Hilfe kann ich euch nur das Schattenbaum-MySQL-Tutorial anbieten, damit ist euch geholfen! Ignoriert möglichst den PHP-Teil. Oder probiert einfach selber rum - oder: FRAGT!

Ich hoffe das alle Angaben richtig sind und ich helfen konnte. Wenn ihr Fehler findet kackt mich bitte nicht von der Seite an, sondern weist mich darauf hin, freundlich, wie es sich gehört. Ich werde das Tutorial auch bald ein wenig erweitern, damit ihr wisst, wie ihr Werte updated und nicht auf Schattenbaum angewiesen seit. Puh. Das war es von mir.
Grüße.