#include <mysql>
#define COLOR_ERROR 0xFF0000FF //Fehler #define COLOR_SUCCESSFUL 0x00FF00FF //erfolgreich
#define datahost "localhost" #define datauser "BeispielUser" #define datapass "BeispielPasswort" #define database "BeispielDatenbank"
#define update_time 600000 //Zeitintervall des Timers in Millisekunden d.h. um Minuten zu bekommen Minuten *60000 Hier: 10 min
enum rInfo{ EMail[255], Passwort[255], IP[255], RegisterDatum[255], }; new RegInfo[MAX_PLAYERS][rInfo]; enum pInfo{ pLogged, pAdmin }; new PlayerInfo[MAX_PLAYERS][pInfo];
mysql_log(1); //diesen empfehle ich spдter auf mysql_log(0); zu setzen oder ganz zu lцschen wenn das Script funktioniert mysql_connect(datahost,datauser,datapass,database,true); SetTimer("Updater",update_time,true);
Updater(); mysql_close();
public Updater() { for(new i=0;i<MAX_PLAYERS;i++) //solange fьr i um eins erhцht von i=0 aus gilt,dass i kleiner der Maximalen Spielerzahl ist wird durchgefьhrt: { UserUpdate(i);// die Updatefunktion des Spielers } }
public mysqlget(table[],bedien[],abfrag[],data[]) //Funktion: mysqlget(In welcher Tabelle befindet sich die Datei?, Welche Bedienung gilt? (zB ID des Spielers oder bekannte daten), Welche Spalte soll abgefragt werden?, Variable in der gespeichert wird) { new query[256]; //Query = Abfrage String muss definiert werden format(query,sizeof(query),"SELECT %s FROM %s WHERE %s",abfrag,table,bedien); // entspricht: Frage "abfrag" ab in der Tabelle "table" mit der Bedienung "bedien" mysql_query(query); // sende die Abfrage mysql_store_result(); //Liste die Ergebnisse auf if(mysql_num_rows()) //Wie viele Zeilen hat das Ergebnis (Keine Zeile = Kein Ergebnis) { mysql_fetch_field(abfrag, data); //Frage das Feld "abfrag" ab (Feld entspricht dem Spalte in einer ErgebnisZEILE) und speichere in data mysql_free_result(); //gibt den Speicher fьr weitere Abfragen wieder frei return true; //gibt true=Wahr zurьck wenn die Date existiert und abgefragt werden konnte } else { mysql_free_result(); //siehe oben return false; //gibt false zurьck wenn Date nicht existiert oder nicht Abgefragt werden konnte } }
public mysqlupdate(table[],bedien[],spalte[],data[]) {//Syntax: mysqlupdate( die Tabelle in der DB, Die Bedienung, Die Spalte, die Variable als String) new query[256]; format(query,sizeof(query),"UPDATE %s SET %s='%s' WHERE %s",table,spalte,data,bedien); //entspricht: Update die Tabelle "table" Setze "Spalte" den Wert "data" wo die Bedienung "bedien" gilt //Es MUSS beachtet werden das zu speichernde Variablen im Query immer mir ' ' umschlossen werden mьssen daher '%s' mysql_query(query); //senden des Querys mysql_free_result(); //Freigabe des Speichers }
public Login(playerid,playername[]) { new query[256]; new data[255]; new bedienung[256]; format(bedienung,sizeof(bedienung),"Nickname='%s'",playername); format(query,sizeof(query),"SELECT * FROM userdata WHERE %s",bedienung); //Nehme ALLE Daten aus userdata bei der die Bedienung "bedienung" gilt --> * steht immer fьr ALLE mysql_query(query); // senden der ABfrage mysql_store_result();//abfragen des ergebnisses if(mysql_num_rows())//auflisten der zeilen { mysql_fetch_field("Adminlevel",data); //abfragen des felden Adminlevel und zwischen speichern in data PlayerInfo[playerid][pAdmin]=strval(data);//umwandeln von data in die Spielervariable (ACHTUNG!! alle abfragten Daten sind erst Strings --> daher strval um es in einen Integer zu wandeln if(PlayerInfo[playerid][pAdmin]>0) { SendClientMessage(playerid,COLOR_SUCCESSFUL,"Willkommen Admin!"); } mysql_free_result();//freigabe des Speichers PlayerInfo[playerid][pLogged]=1;//spieler ist eingeloggt } else { SendClientMessage(playerid,COLOR_ERROR,"Es ist ein Fehler mit deinem Account aufgetretten!"); Kick(playerid); } return 0; } public Register(playerid) { new playername[256]; GetPlayerName(playerid,playername,sizeof(playername)); new query[256]; format(query,sizeof(query),"INSERT INTO players (Nickname,Passwort,EMail,IP,Register) VALUES ('%s','%s','%s','%s','%s')",//Fьge in players ein mit den Spalten Nickname,Passwort,Email,Ip,Register der Werte.... sind (die Reihen folge in den Klammern muss die selbe bleiben) playername, RegInfo[playerid][Passwort], RegInfo[playerid][EMail], RegInfo[playerid][IP], RegInfo[playerid][RegisterDatum]); mysql_query(query); //senden format(query,sizeof(query),"INSERT INTO userdata (Nickname) VALUES ('%s')",playername); mysql_query(query);//einfьgen des Datensatzen in userdata mit Spalte Nickname deren wert der Speilername ist mysql_free_result(); ShowPlayerDialog(playerid,3,1,"Loginsystem","Dein Account wurde erfolgreich angelegt \n Bitte logge dich ein!","Abbrechen","Login!");//anzeigen des Loginguis }
public UserUpdate(playerid) { if(IsPlayerConnected(playerid))//ist spieler verbunden { if(PlayerInfo[playerid][pLogged]==1)//ist spieler eingeloggt? { new playername[255]; GetPlayerName(playerid,playername,sizeof(playername)); new bedien[256]; new updatestring[256]; format(updatestring,256,"%d",PlayerInfo[playerid][pAdmin]);//Umwandeln der Variable in einen String damit Updatefuntkion geht format(bedien,sizeof(bedien),"Nickname='%s'",playername);//wieder die Bedienung mysqlupdate("userdata",bedien,"Adminlevel",updatestring);//funktion mysqlupdate ausfьhren syntax siehe oben } } }
public OnPlayerDisconnect(playerid, reason) { UserUpdate(playerid); PlayerInfo[playerid][pLogged]=0; return 1; }
forward mysqlget(table[],bedien[],abfrag[],data[]); forward Login(playerid,playername[]); forward Register(playerid); forward mysqlupdate(table[],bedien[],spalte[],data[]); forward UserUpdate(playerid); forward Updater();
public OnPlayerConnect(playerid) { new bedienung[256]; new playername[256]; GetPlayerName(playerid,playername,sizeof(playername)); format(bedienung,sizeof(bedienung),"Nickname='%s'",playername); new daten[256]; if(mysqlget("players",bedienung,"Passwort",daten))//abfrage es gibt true zurьck oder false variable daten ist unwichtig { SendClientMessage(playerid,COLOR_SUCCESSFUL,"Du hast bereits einen Account"); ShowPlayerDialog(playerid,3,1,"Loginsystem","Du hast bereits einen Account \n Bitte logge dich ein!","Abbrechen","Login!"); } else { SendClientMessage(playerid,COLOR_ERROR,"Du hast noch keinen Account"); ShowPlayerDialog(playerid,1,1,"Loginsystem","Du hast noch keinen Account \n Bitte gebe dein Passwort ein!","Abbrechen","Bestдtigen!"); } return 1; }
public OnPlayerDisconnect(playerid, reason) { UserUpdate(playerid); PlayerInfo[playerid][pLogged]=0; return 1; }
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid==1)//registergui 1.Teil { if(response==1){Kick(playerid);} else { format(RegInfo[playerid][Passwort],255,"%s",inputtext); //gewдhltes Passwort zwischenspeichern ShowPlayerDialog(playerid,2,1,"Loginsystem","Um die Registration abzuschlieЯen gebe bitte noch deine Email an!","Abbrechen","Registrieren!"); } } if(dialogid==2)//registergui 2. Teil { if(response==1){Kick(playerid);} else { format(RegInfo[playerid][EMail],255,"%s",inputtext);//zwischenspeichern der eingegeben email GetPlayerIp(playerid,RegInfo[playerid][IP],255);//zwischenspeichern ip new Year, Month, Day; getdate(Year, Month, Day); format(RegInfo[playerid][RegisterDatum],255,"%02d.%02d.%d", Day, Month, Year);//zwischenspeichern registrierungsdatum Register(playerid);//registerfunktion ausfьhren } } if(dialogid==3)//logingui { if(response==1){Kick(playerid);} else { new playername[256]; GetPlayerName(playerid,playername,sizeof(playername)); new string[256]; format(string,sizeof(string),"Nickname='%s'",playername); new data[255]; mysqlget("players",string,"Passwort",data);//abfrage passwort if(!strcmp(data,inputtext,false))//auswertung ob pw's ьbereinsteimmen oder nicht { Login(playerid,playername); } else { ShowPlayerDialog(playerid,3,1,"Loginsystem","Dieses Passwort ist falsch. \n Bitte gib das richtige ein!","Abbrechen","Login!"); } } } return 1; }
CREATE TABLE IF NOT EXISTS `players` ( `ID` Int(50) NOT NULL, `Nickname` VARCHAR(255) NOT NULL, `Password` VARCHAR(255) NOT NULL, `IP` VARCHAR(255) NOT NULL `Register` VARCHAR(255) NOT NULL, `EMAIL` VARCHAR(255) NOT NULL, ); |
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`Register` VARCHAR(255) NOT NULL, `EMAIL` VARCHAR(255) NOT NULL, )' at line 6 [Err] CREATE TABLE IF NOT EXISTS `players` ( `ID` Int(50) NOT NULL, `Nickname` VARCHAR(255) NOT NULL, `Password` VARCHAR(255) NOT NULL, `IP` VARCHAR(255) NOT NULL `Register` VARCHAR(255) NOT NULL, `EMAIL` VARCHAR(255) NOT NULL, ); [Msg] Finished - Unsuccessfully -------------------------------------------------- |