Guten Morgen Breadfish
Direkt zum Problem:
Das Script so wie die Datenbank wird richtig geladen.
Mein Problem ist aber folgendes:
Spieler X joint den Server und man kann nur auf Spawn drücken.
Register Dialog erscheint nicht mal obwohl alles anscheint richtig im script ist ohne fehlermeldungen beim Compailen.
Hier die MYSQL_Log auszug:
SQL
[05:23:54] [DEBUG] mysql_connect - host: "x", user: "x", database: "x", password: "****", port: 3306, autoreconnect: true, pool_size: 2
[05:23:54] [DEBUG] CMySQLHandle::Create - creating new connection..
[05:23:54] [DEBUG] CMySQLHandle::CMySQLHandle - constructor called
[05:23:54] [DEBUG] CMySQLHandle::Create - connection created (id: 1)
[05:23:54] [DEBUG] CMySQLConnection::Connect - establishing connection to database...
[05:23:54] [DEBUG] CMySQLConnection::Connect - connection was successful
[05:23:54] [DEBUG] CMySQLConnection::Connect - auto-reconnect has been enabled
[05:23:54] [DEBUG] mysql_errno - connection: 1
[05:23:54] [DEBUG] CMySQLConnection::Connect - establishing connection to database...
[05:23:54] [DEBUG] CMySQLConnection::Connect - establishing connection to database...
[05:23:54] [DEBUG] CMySQLConnection::Connect - establishing connection to database...
[05:23:54] [DEBUG] CMySQLConnection::Connect - connection was successful
[05:23:54] [DEBUG] CMySQLConnection::Connect - connection was successful
[05:23:54] [DEBUG] CMySQLConnection::Connect - connection was successful
[05:23:54] [DEBUG] CMySQLConnection::Connect - auto-reconnect has been enabled
[05:23:54] [DEBUG] CMySQLConnection::Connect - auto-reconnect has been enabled
[05:23:54] [DEBUG] CMySQLConnection::Connect - auto-reconnect has been enabled
[05:25:53] [DEBUG] mysql_format - connection: 1, len: 128, format: "SELECT id FROM Accounts WHERE Name = �%e� "
[05:25:53] [DEBUG] mysql_pquery - connection: 1, query: "SELECT id FROM Accounts WHERE Name = �Tiriago� ", callback: "OnUserCheck", format: "d"
[05:25:53] [DEBUG] CMySQLQuery::Execute[OnUserCheck] - starting query execution
[05:25:53] [ERROR] CMySQLQuery::Execute[OnUserCheck] - (error #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 '�Tiriago�' at line 1
[05:25:53] [DEBUG] CMySQLQuery::Execute[OnUserCheck] - error will be triggered in OnQueryError
Alles anzeigen
Script Information:
Code
//forwards:
forward OnUserCheck(playerid);
forward OnUserRegister(playerid);
forward OnUserLogin(playerid);
//Dialoge
#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2
//Mysql Daten:
#define MYSQL_HOST "x"
#define MYSQL_USER "x"
#define MYSQL_PASS "x"
#define MYSQL_DBSE "x"
new handle;
//____________________
//Enum
enum playerInfo{
db_id,
bool:eingeloggt,
Name[MAX_PLAYER_NAME],
Adminlevel,
Level,
Money,
Fraktion,
Rang,
Spawn
}
new sInfo[MAX_PLAYER_NAME][playerInfo];
public OnGameModeInit()
{
MySQL_SetupConnection();
SetGameModeText("Reallife Version 0.1");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
return 1;
}
public OnGameModeExit()
{
mysql_close(handle);
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
//Wenn der Spieler die Class-Selection betritt prüfe,ob er bereits eingeloggt ist
if(!sInfo[playerid][eingeloggt])
{
//Wenn nicht,dann prüfe ob der Spieler ein Konto hat
new query[128];
mysql_format(handle,query,sizeof(query),"SELECT id FROM Accounts WHERE Name = ´%e´ ",sInfo[playerid][Name]);
mysql_pquery(handle,query,"OnUserCheck","d",playerid);
}
return 1;
}
public OnPlayerConnect(playerid)
{
sInfo[playerid][db_id] =0;
sInfo[playerid][eingeloggt] =false;
sInfo[playerid][Adminlevel] =0;
sInfo[playerid][Level] = 0;
sInfo[playerid][Money] = 0;
sInfo[playerid][Fraktion] = 0;
sInfo[playerid][Rang] = 0;
sInfo[playerid][Spawn] = 0;
GetPlayerName(playerid,sInfo[playerid][Name],MAX_PLAYER_NAME);
return 1;
}
public OnUserCheck(playerid)
{
//Query wurde ausgeführt und das Ergebnis im Chace gespeichert.
if(cache_get_row_count() == 0)
{
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"Account erstellen","Bitte Registriere dich:","Registrieren","Abbrechen");
}
else
{
//Es existiert ein Ergebnis,das heißt der Spieler ist registriert und muss sich einloggen
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Einloggen","Bitte loggte dich ein:","Einloggen","Abbrechen");
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
SaveUserStats(playerid);
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_REGISTER)
{
//Spieler hat Abbrechen gewählt
if(!response) return Kick(playerid);
//Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
if(strlen(inputtext) < 5) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration", "Bitte registriere Dich:\n{0xFF0000FF}Mindestens 5 Zeichen!", "Ok", "Abbrechen");
//Wenn alles passt wird der Spieler in der Datenbank angelegt
//Als Verschlüsselung für das Passwort wird MD5 verwendet
new query[256];
mysql_format(handle, query, sizeof(query), "INSERT INTO Accounts (name, password) VALUES ('%e', MD5('%e'))", sInfo[playerid][Name], inputtext);
//Das Query wird abgesendet und die playerid an OnUserRegister übergeben
mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
return 1;
}
if(dialogid == DIALOG_LOGIN)
{
//Spieler hat Abbrechen gewählt
if(!response) return Kick(playerid);
//Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
if(strlen(inputtext) < 5) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{0xFF0000FF}Mindestens 5 Zeichen!", "Ok", "Abbrechen");
//Wenn alles passt wird die Datenbank ausgelesen
new query[256];
mysql_format(handle, query, sizeof(query), "SELECT * FROM Accounts WHERE name = '%e' AND password = MD5('%e')", sInfo[playerid][Name], inputtext);
//Das Query wird abgesendet und die playerid an OnUserLogin übergeben
mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
return 1;
}
return 0;
}
stock MySQL_SetupConnection(ttl=4)
{
print("[MYSQL] Verbingungsaufbau.........");
mysql_log(LOG_ALL);
handle = mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_DBSE,MYSQL_PASS);
//MYSQL Verbindungsprüfung mit neu verbinden!:
if(mysql_errno(handle) != 0)
{
//Fehler bei der Verbindung mit der Datenban:
if(ttl >1)
{
//Versuche erneute Verbindung aufzubauen
print("[MYSQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
printf("[MYSQL] Starte neuen Verbindungsaufbau versuch (ttl: %d).",ttl-1);
return MySQL_SetupConnection(ttl-1);
}
else
{
//Abbrechen und Server Schließen
print("[MYSQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
print("[MYSQL] Bitte überprüfen Sie die Verbindungsdaten!");
print("[MYSQL] Der Server wird heruntergefahren!");
return SendRconCommand("exit");
}
}
printf("[MYSQL] Die Verbindung zur Datenbank wurde erfolgreich hergestellt! Handle: %d",handle);
return 1;
}
public OnUserRegister(playerid)
{
//Der Spieler wurde in die Datenbank eingetragen, es wird die id ausgelsen
sInfo[playerid][db_id] = cache_insert_id();
SendClientMessage(playerid,grün,"[Konto]Registration erfolgreich");
return 1;
}
public OnUserLogin(playerid)
{
//Query wurde ausgeführt und das Erbnis im Cache gespeichert
if(cache_get_row_count() == 0)
{
//Der Spieler hat ein falsches Passwort eingegeben
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Einloggen","Bitte logge dich ein:\n{0xFF0000FF}Falsches Passwort!","Einloggen","Abbrechen");
}
else
{
//Es existiert ein Ergebnis,das heißt der Spieler hat das richtige Passwort eingegeben
//Wir lesen nun die erste Zeile des Caches aus (id 0)
sInfo[playerid][db_id] = cache_get_field_content_int(0,"id",handle);
sInfo[playerid][Adminlevel] = cache_get_field_content_int(0,"Adminlevel",handle);
sInfo[playerid][Level] = cache_get_field_content_int(0,"Level",handle);
sInfo[playerid][Money] = cache_get_field_content_int(0,"Money",handle);
sInfo[playerid][Fraktion] = cache_get_field_content_int(0,"Fraktion",handle);
sInfo[playerid][Rang] = cache_get_field_content_int(0,"Rang",handle);
sInfo[playerid][Spawn] = cache_get_field_content_int(0,"Spawn",handle);
}
return 1;
}
stock SaveUserStats(playerid)
{
//Wen der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nicht
if(!sInfo[playerid][eingeloggt])return 1;
//Ansonsten speichere Sie ab
new query[256];
mysql_format(handle,query,sizeof(query),"UPDATE Accounts Set Adminlevel = ´%d´,Level = ´%d´,Money = ´%d´,Fraktion = ´%d´,Rang = ´%d´,Spawn = ´%d´ WHERE id = ´%d´ ",sInfo[playerid][Adminlevel],sInfo[playerid][Level],sInfo[playerid][Money],sInfo[playerid][Fraktion],sInfo[playerid][Rang],sInfo[playerid][Spawn]);
//Das Query wird abgesendet
mysql_pquery(handle,query);
return 1;
}
Alles anzeigen