Nutze doch das hier, ganz neu und hat alles dabei:
[ INCLUDE ] Kilometer Anzeige / Berechnung
Oder guck dir ab wie es dort gemacht wurde.
Nutze doch das hier, ganz neu und hat alles dabei:
[ INCLUDE ] Kilometer Anzeige / Berechnung
Oder guck dir ab wie es dort gemacht wurde.
Öh, nö, damit fange ich nicht wirklich was an.
Schick mir in PN eben mal deine TeamViewer Daten. Jetzt wird es doch zu durcheinander hier. Ich hab grade 30 Minuten frei, also wenn du schnell bist.
EDIT:
Erledigt. Er hat es falsch eingefügt und das query (Fehlermeldung) nochmals geändert gehabt und ein "=" vergessen.
Dann noch ein anderer Versuch:
Das unter die Registrationsmeldung (das format und das mysql_function_query machst du weg und fügst das ein:)
SetPVarString(playerid, "Password", password);
SetTimerEx("LoginAfterReg", 500, 0, "d", playerid);
Ganz unten in den GameMode:
forward LoginAfterReg(playerid);
public LoginAfterReg(playerid)
{
new query[128], name[MAX_PLAYER_NAME], password[128];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
GetPVarString(playerid, "Password", password, 128);
format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND password=MD5('%s')",name,password);
return mysql_function_query(dbhandle,query,true,"CheckPassword","i",playerid);
}
Klappt es jetzt?
So:
mysql_escape_string(inputtext,password,dbhandle);
format(query,sizeof(query),"INSERT INTO user (username,password) VALUES ('%s',MD5('%s'))",name,password);
mysql_function_query(dbhandle,query,false,"","");
SendClientMessage(playerid,WEIß,"SERVER: Du hast dich erfolgreich registriert.");
AccountInfo[playerid][eingeloggt]=1;
format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND password=MD5('%s')",name,password);
mysql_function_query(dbhandle,query,true,"CheckPassword","i",playerid);
Soll ich das mit dem restlichen Zeug auch machen was sich unter OnPlayerConnect befindet?
Nö, das ist nur ein Problem mit dem Sync der Farben. (SA-MP eben, die Sync die jeder liebt
)
Ja, geht in die richtige Richtung. Aber da du es mit dem cache machst nicht das da einfügen, sondern das was einen Schritt davor ist.
Such mal nach
"CheckPassword"
(ja, mit den " ").
Dann müsstest du auf Folgendes stoßen:
mysql_function_query(...irgendwas...,"CheckPassword",...irgendwas...);
Den Teil (und die paar Zeilen die dazugehören) musst du nach der Registration einfügen.
Du Genie! ![]()
Kann man das irgendwie so Regeln das man mit Eingabe das Menü nicht beenden kann?
..
Nicht dass ich wüsste. Kannst ja mal versuchen ob OnPlayerKeyStateChange angesprochen wird wenn du in einem Menü rumdrückst, ich glaube aber nicht, dass es aufgerufen wird.
public OnPlayerConnect(playerid);
{
SetTimerEx("ColPlayer", 250, 0, "d", playerid);
return 1;
}
forward ColPlayer(playerid);
public ColPlayer(playerid)
{
SetPlayerColor(playerid,weiß);
return 1;
}
Ich hatte so etwas vor Jahren auch mal, ich erinnere mich das über einen kurzen Timer gelöst zu haben.
Nein.
Du hast doch irgendwo eine Funktion mit der du den Spieler einloggst, wenn er nach dem Login seine Statistiken geladen bekommt. (LoginPlayer oder so?)
Diese Funktion sollst du (so wie du es bei /makeadmin mit dem Speichern gemacht hast) nach der Registration einfügen.
Sagte ich doch.
Also:
1) Füge nach der Registration deine Login Funktion ein. (!!)
2) Dann registriere dich nochmal und logge dich dann aus. Klappt es, und/oder werden wieder Fehler in der mysql_log ausgegeben?
Naja, du wirst es merken, wenn du das Menu ausführst und dann dein Log mit irgendwelchem Zeug (nennen wir es einfach mal so) zugemüllt wird.
Das kannst du ja hier posten, falls was kommt und falls du damit nichts anfängst. Ich bezweifle aber, dass was kommt, aber man weiß ja nie. Ein Versuch ist es wert.
Beim ausführen welches Codes kommt der Fehler denn?
Wenn du den Spieler speicherst? Hast du das zwei verschiedene Funktionen?
Hast du das mit dem Login direkt nach der Registration probiert?
Brauch ich nicht per TeamViewer machen, es ist, zumindest dem Code nach, die ID.
Mach doch mal, direkt nach dem Registrieren /stats. Du wirst sehen, dass das nicht stimmt, bzw. nicht geht.
Die ID bekommt der Spieler beim Login, deshalb speichert es auch ohne Probleme nach dem ersten Login. Daher: Login Funktion nach dem Registrieren aufrufen. ![]()
Könntest höchstens mal probieren ob dir das crashdetect Plugin was sagt. ![]()
Du musst ihm beim Registrieren natürlich auch die "id" zuweisen:
AccountInfo[playerid][id]
Ich weiß nicht, ob du das irgendwo in einer Datei hochzählst, oder wie genau du das machst.
Generell könntest du nach der Registration (nach der Nachricht) einfach ein "LoginPlayer" (oder wie es eben heißt) hinsetzen, dann dürfte es klappen. Oder eben nach deiner Variante der "id" einen Wert zuweisen.
ocmd:cr(playerid,params[])
{
#pragma unused params
new bool:in;
if(!isPlayerAnAdmin(playerid,3))return SendClientMessage(playerid,ROT,"Du bist kein Leader / Ausbilder der San Andreas Army");
for(new i=0;i<MAX_VEHICLES;i++)
{
in = false;
for(new p=0; p<MAX_PLAYERS; p++)
{
if(IsPlayerInVehicle(p, i))
{
in = true;
break;
}
}
if(!in) SetVehicleToRespawn(i);
}
new string[128], pname[25];
GetPlayerName(playerid, pname, sizeof(pname));
format(string, sizeof(string), "Server: Ausbilder / Leader %s hat alle Fahrzeuge respawnt", pname);
SendClientMessageToAll(GELB, string);
return 1;
}
Das wird wohl so sein, da du das lädst und dann wieder speicherst, ohne den Wert zu ändern.
Mach das beim LoadAccount und SpielerSpeichern raus.
Dann weiß ich nicht was es noch sein könnte.
Hast du es schon mit einem leeren GameMode versucht, also praktisch einem komplett leeren Server/Script? Wenn es da geht, musst du wohl ein Backup (was du hoffentlich täglich machst) einfügen. Mir ist kein Fehler bekannt, dass ein Callback gar nicht aufgerufen wird. ![]()
Bekommst du diese "Header size:" Meldung im Compiler, wenn du kompilierst?
public OnPlayerDisconnect(playerid, reason)
{
new string[128];
new Spielerdatei[64];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
dini_IntSet(Spielerdatei,"Interior", GetPlayerInterior(interior));
dini_IntSet(Spielerdatei,"VWorld", GetPlayerVirtualWorld(vworld));
return 1;
}
public OnPlayerSpawn(playerid)
{
new Spielerdatei[64];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
SetPlayerInterior(playerid, dini_Int(Spielerdatei,"Interior"));
SetPlayerVirtualWorld(playerid, dini_Int(Spielerdatei,"VWorld"));
return 1;
}
Versuch es so.
Du bist aber schon in einem Interior und einer anderen VirtualWorld, oder?