Also, ich habe es jetzt mal getestet. Interessanterweise kompiliert es sogar ohne Fehler, ihn stört diese Zeile 18 nicht, wegen dem strcmp, das ist ja eine Funktion.
Mache sie aber trotzdem weg.
(!strlen(IP[playerid]) || strcmp(IP[playerid], NewIP, true));
Bei OnAccountRegister fehlt:
IstRegistriert[playerid] = 1;
Beim SpielerSpeichern kommt dann wie erwartet:
Zitat
[01:12:38] [DEBUG] mysql_format - connection: 1, len: 100, format: "UPDATE `Spieler` SET `IP`='%s', `Admin`=%d, `VIP`=%d, `Morde`=%d, `Tode`=%d, `Level`=%d, `Geld`=%d WHERE `ID`=%d"
[01:12:38] [ERROR] mysql_format - destination size is too small
[01:12:38] [DEBUG] mysql_tquery - connection: 1, query: "UPDATE `Spieler` SET `IP`='X.X.X.X', `Admin`=0, `VIP`=0, `", callback: "(null)", format: "(null)"
[01:12:38] [DEBUG] CMySQLQuery::Execute[] - starting query execution
[01:12:38] [ERROR] CMySQLQuery::Execute[] - (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 '' at line 1
[01:12:38] [DEBUG] CMySQLQuery::Execute[] - error will be triggered in OnQueryError
Alles anzeigen
Also da:
new Query[100];
zu:
new Query[256];
Außerdem lädt es die Statistiken nicht.
Ändere bei OnPlayerConnect:
mysql_format(Handle, Query, sizeof(Query), "SELECT `IP`, `Passwort`, `ID` FROM `Spieler` WHERE `Spielername` = '%e' LIMIT 1", Name[playerid]);
zu:
mysql_format(Handle, Query, sizeof(Query), "SELECT * FROM `Spieler` WHERE `Spielername` = '%e' LIMIT 1", Name[playerid]);
Und der Timer bei OnAccountCheck muss da nicht sein. Wenn jemand innerhalb der 3 Sekunden den Server verlässt hat er alle Statistiken verloren.
SetTimerEx("OnAccountLoad", 3000, false, "i", playerid);
zu:
OnAccountLoad(playerid);
Bei OnDialogResponse solltest du zur Sicherheit noch abfragen, ob die Eingabe leer ist.
if(!strcmp(H_Pass, SpielerInfo[playerid][Passwort])) {
zu:
if(strlen(H_Pass) && !strcmp(H_Pass, SpielerInfo[playerid][Passwort])) {
Beim Login überschreibst du die IP, somit wird nicht die aktuelle IP gespeichert.
cache_get_field_content(0, "IP", IP[playerid], Handle, 16);
new NewIP[16];
GetPlayerIp(playerid, NewIP, 16);
IstRegistriert[playerid] = 1;
if(strlen(IP[playerid]) != 0 && !strcmp(IP[playerid], NewIP, true)) {
zu:
new oldIP[16];
cache_get_field_content(0, "IP", oldIP, Handle, 16);
IstRegistriert[playerid] = 1;
if(strlen(IP[playerid]) != 0 && !strcmp(IP[playerid], oldIP, true)) {
Und noch ein kleiner Fehler, du schreibst beim Registrieren 50000 an Geld in die Tabelle, gibst dem Spieler aber nur 10000. Das müsstest du ändern.
Das war es soweit, der Rest hat funktioniert.