Gibt jetzt mehrere Möglichkeiten.
Versuche erst mal localhost durch 127.0.0.1 zu ersetzen.
Wenn das nicht geht, dann versuche dich mit dem User root ohne Passwort (einfach "") anzumelden.
Ist der SQL Server auch an?
Gibt jetzt mehrere Möglichkeiten.
Versuche erst mal localhost durch 127.0.0.1 zu ersetzen.
Wenn das nicht geht, dann versuche dich mit dem User root ohne Passwort (einfach "") anzumelden.
Ist der SQL Server auch an?
savePlayer(playerid)
{
if(sInfo[playerid][eingeloggt]==0) return 1;
//speichern level,adminlevel,geld,id
new query[256];
format(query,sizeof(query),"UPDATE user SET Adminlevel='%i' ,money='%i' ,level='%i' WHERE id='%i'",sInfo[playerid][Adminlevel],GetPlayerMoney(playerid),GetPlayerScore(playerid),sInfo[playerid][id]);
mysql_function_query(dbhandle,query,false,"","");
return 1;
}
id stand da doppelt drin.
Lag daran, dass du die Datenbank ID laut Log nirgends ausließt.
Mache es so:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
//Login Register System
if(dialogid == DIALOG_REGISTER)
{
{
if(!response)
{
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrierung","Registrierung war nicht erfolgreich\nBitte registrieren sie sich um auf dem Server zu spielen.","Absenden","Abbrechen");
return 1;
}
{
//eingegebenes Passwort
new name[MAX_PLAYER_NAME],passwort[35],query[256];
GetPlayerName(playerid,name,sizeof(name));
if(strlen(inputtext)>3)
{
//registrierungsfunktion
SetPlayerScore(playerid,1);
sInfo[playerid][level] = 1;
GivePlayerMoney(playerid,15000);
sInfo[playerid][geld] = 15000;
sInfo[playerid][eingeloggt] = 1;
//
mysql_escape_string(inputtext,passwort,dbhandle);
format(query,sizeof(query),"INSERT INTO user (username,passwort) VALUES ('%s','%s')",name,inputtext);
printf(query);
mysql_function_query(dbhandle,query,false,"OnPlayerRegister","d",playerid);
return 1;
}
else
{
return 1;
}
}
}
}
if(dialogid == DIALOG_LOGIN)
{
if(!response)
{
new name[MAX_PLAYER_NAME],string[128],stringend[128];
GetPlayerName(playerid,name,sizeof(name));
format(string,sizeof(string),"{FFFFFF}Der Accountname {37CD00}%s {FFFFFF}wurde gefunden.\nUm mit den Spielen zu beginnen, musst du dich einloggen.\nDu hast die ID: {37CD00}%i\n",name,playerid);
strcat(stringend,string);
format(string,sizeof(string),"{FFFFFF}Bitte gebe unten dein Passwort ein.");
strcat(stringend,string);
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{37CD00}Login System: {FFFFFF}Einloggen",stringend,"Login","Abbruch");
strdel(stringend,0,sizeof(stringend));
strdel(string,0,sizeof(string));
return 1;
}
{
new name[MAX_PLAYER_NAME],query[128],passwort[35];
GetPlayerName(playerid,name,sizeof(name));
if(strlen(inputtext)>0)
{
mysql_escape_string(inputtext,passwort,dbhandle);
format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND passwort='%s'",name,passwort);
mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid);
}
return 1;
}
}
return 1;
}
Und dann füge das hier noch drunter dazu:
forward OnPlayerRegister(playerid);
public OnPlayerRegister(playerid)
{
sInfo[playerid][id] = cache_insert_id();
savePlayer(playerid);
return 1;
}
Laut dem Log nicht, sonst würde da etwas von INSERT INTO stehen, und nicht der SELECT mit dem Passwort.
Mache einfach nochmal ein neues und schau dann in den Log.
Du musst dich natürlich mit einem neuen Konto registrieren.
Dann schreibe es beim Laden wieder so:
sInfo[playerid][datum] = cache_get_field_content_int(0,"datum",dbhandle);
und beim Speichern so:
format(query,sizeof(query),"UPDATE user SET level='%i',cash='%i',datum='%i',geschlecht='%i',alevel='%i',skin='%i',fraktion='%i',rang='%i' WHERE id='%i'"
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
//Login Register System
if(dialogid == DIALOG_REGISTER)
{
{
if(!response)
{
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrierung","Registrierung war nicht erfolgreich\nBitte registrieren sie sich um auf dem Server zu spielen.","Absenden","Abbrechen");
return 1;
}
{
//eingegebenes Passwort
new name[MAX_PLAYER_NAME],passwort[35],query[256];
GetPlayerName(playerid,name,sizeof(name));
if(strlen(inputtext)>3)
{
//registrierungsfunktion
SetPlayerScore(playerid,1);
sInfo[playerid][level] = 1;
GivePlayerMoney(playerid,15000);
sInfo[playerid][geld] = 15000;
sInfo[playerid][eingeloggt] = 1;
//
mysql_escape_string(inputtext,passwort,dbhandle);
format(query,sizeof(query),"INSERT INTO user (username,passwort) VALUES ('%s','%s')",name,inputtext);
printf(query);
mysql_function_query(dbhandle,query,false,"","");
savePlayer(playerid); //Hinzugefügt
return 1;
}
else
{
return 1;
}
}
}
}
if(dialogid == DIALOG_LOGIN)
{
if(!response)
{
new name[MAX_PLAYER_NAME],string[128],stringend[128];
GetPlayerName(playerid,name,sizeof(name));
format(string,sizeof(string),"{FFFFFF}Der Accountname {37CD00}%s {FFFFFF}wurde gefunden.\nUm mit den Spielen zu beginnen, musst du dich einloggen.\nDu hast die ID: {37CD00}%i\n",name,playerid);
strcat(stringend,string);
format(string,sizeof(string),"{FFFFFF}Bitte gebe unten dein Passwort ein.");
strcat(stringend,string);
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{37CD00}Login System: {FFFFFF}Einloggen",stringend,"Login","Abbruch");
strdel(stringend,0,sizeof(stringend));
strdel(string,0,sizeof(string));
return 1;
}
{
new name[MAX_PLAYER_NAME],query[128],passwort[35];
GetPlayerName(playerid,name,sizeof(name));
if(strlen(inputtext)>0)
{
mysql_escape_string(inputtext,passwort,dbhandle);
format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND passwort='%s'",name,passwort);
mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid);
}
return 1;
}
}
return 1;
}
Einfach dein gesamtes OnDialogResponse damit ersetzen.
Nein.
In OnDialogResponse.
Das was du in Post #7 gepostet hast.
Zeile 16 bis 31 im Code den du oben gepostet hast.
Ja, das ist das Gleiche, macht keinen Unterscheid.
Nur:
format(query, sizeof(query), "DELETE FROM FracVehicles WHERE ID = %d", vid);
zu:
format(query, sizeof(query), "DELETE FROM FracVehicles WHERE ID = %d", i);
Was ist denn dein Alter jetzt? Du redest die ganze Zeit vom Alter, gibst aber dein Geburtsdatum an, bzw. die Variable heißt Datum. Im Code steht wiederum, dass man sein Alter eingeben soll, was dann in die Variable datum gespeichert wird.
Das macht keinen Sinn.
Ein Datum: 15.03.2015
Ein Alter: 22
In deinem Code ist das durcheinander, also was davon soll es sein?
Teste es mal so:
COMMAND:delfraktionscar(playerid,params[])
{
new vid;
if(!strlen(params))
{
if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,-1,"Du bist in keinem Fahrzeug!");
vid = GetPlayerVehicleID(playerid);
}
else
{
vid = strval(params);
if(!GetVehicleModel(vid)) return SendClientMessage(playerid,-1,"Dieses Fahrzeug existiert nicht!");
}
new idx = -1;
for(new i=0; i<FRAC_VEHICLES; i++)
{
if(fracVehicle[i][e_vID] == vid)
{
idx = i;
break;
}
}
if(idx==-1) return SendClientMessage(playerid,-1,"Das Fahrzeug ist kein Fraktionsfahrzeug!");
if(fracVehicle[idx][e_modelID] == 0) return SendClientMessage(playerid,-1,"Das Fahrzeug ist kein Fraktionsfahrzeug!");
new query[256];
format(query, sizeof(query), "DELETE FROM FracVehicles WHERE ID = %d", idx);
mysql_tquery(handle, query);
DestroyVehicle(fracVehicle[idx][e_vID]);
LoadFracVehicles();
SendClientMessage(playerid,-1,"Fraktionsfahrzeug entfernt!");
return 1;
}
Schreibe den Teil so:
if(strlen(inputtext)>3)
{
//registrierungsfunktion
SetPlayerScore(playerid,1);
sInfo[playerid][level] = 1;
GivePlayerMoney(playerid,15000);
sInfo[playerid][geld] = 15000;
sInfo[playerid][eingeloggt] = 1;
//
mysql_escape_string(inputtext,passwort,dbhandle);
format(query,sizeof(query),"INSERT INTO user (username,passwort) VALUES ('%s','%s')",name,inputtext);
printf(query);
mysql_function_query(dbhandle,query,false,"","");
savePlayer(playerid); //Hinzugefügt
return 1;
}
Was geht da nicht?
@Mencent: Ja, stimmt so geht's auch. ![]()
JOnny.: Da passt alles. Bist du sicher, dass der Error im Log kommt, wenn du dich registrierst?`Oder wann kommt der?
Du hast keine erstellten Fraktionsfahrzeuge. Alle Indizes sind auf 0.
Wie erstellst du denn dieses Fahrzeug, in das du einsteigst?
sInfo[playerid][datum] = cache_get_field_content_int(0,"datum",dbhandle);
zu:
new tmp[16];
cache_get_field_content(0,"datum",tmp,dbhandle);
format(sInfo[playerid][datum], 16, tmp);
Und dann poste den Code mit dem du OnPasswordResponse aufrufst (suche nach "OnPasswordResponse" (mit Anführungszeichen)).
Debugge es bitte so:
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
for(new i=0; i<FRAC_VEHICLES; i++)
{
printf("%d == %d", fracVehicle[i][e_vID], vehicleid);
if(fracVehicle[i][e_vID] == vehicleid)
{
printf("Frak: %d | vehFrak: %d", SpielerInfo[playerid][pFraktion], fracVehicle[i][e_fracID]);
if(SpielerInfo[playerid][pFraktion] != fracVehicle[i][e_fracID])
{
printf("Kommt nicht rein.");
TogglePlayerControllable(playerid, false);
TogglePlayerControllable(playerid, true);
SendClientMessage(playerid, COLOR_RED, "Du bist nicht in der Fraktion, die dieses Fahrzeug verwenden darf.");
}
break;
}
}
return 1;
}
Dann poste was im Log steht, wenn du ein solches Fahrzeug betrittst.
Nutze den Reiter "Quellcode" neben Editor über der Schriftart.
Der Pawn BB Code - Die richtige Anwendung?
So kann man nichts lesen. ![]()
Ja, poste bitte den Code mit dem du den Spieler das erste mal einloggst, ich schätze mal das ist OnPasswordResponse.