Beiträge von Deniz0801

    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);


    Hat nix geändert... ;(


    Dann sieht das aber so aus, was mir sehr unseriös und unfunktionsfähig scheint.


    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;
    mysql_escape_string(inputtext,password,dbhandle);
    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);

    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.


    Meinst du vielleicht das bzw. sowas?
    public CheckPassword(playerid)
    {
    new num_rows,num_fields;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1)
    {
    new string[128];
    SpawnPlayer(playerid);
    AccountInfo[playerid][banned]=cache_get_field_content_int(0,"banned",dbhandle);
    if(AccountInfo[playerid][banned]==1)
    {
    Kick(playerid);
    }
    SendClientMessage(playerid,WEIß,"SERVER: Du hast dich erfolgreich eingeloggt.");
    AccountInfo[playerid][eingeloggt] = 1;
    AccountInfo[playerid][levelscore] = cache_get_field_content_int(0,"levelscore",dbhandle);
    SetPlayerScore(playerid,AccountInfo[playerid][levelscore]);
    AccountInfo[playerid][id] = cache_get_field_content_int(0,"id",dbhandle);
    SetPlayerMoney(playerid,cache_get_field_content_int(0,"money",dbhandle));
    AccountInfo[playerid][premium] = cache_get_field_content_int(0,"premium",dbhandle);
    if(AccountInfo[playerid][premium]>=1)
    {
    SendClientMessage(playerid,WEIß,"SERVER: Du besitzt ein {9BFF00}Premium-Account{FFFFFF}.");
    SetPlayerColor(playerid,LEMONGRÜN);
    }
    else
    {
    SetPlayerColor(playerid,WEIß);
    }
    AccountInfo[playerid][admlevel] = cache_get_field_content_int(0,"admlevel",dbhandle);
    if(AccountInfo[playerid][admlevel]>=1)
    {
    format(string,sizeof(string),"SERVER: Du bist ein %s%s{FFFFFF}.",Admincolor(playerid),Adminrang(playerid));
    SendClientMessage(playerid,WEIß,string);
    }
    AccountInfo[playerid][spielerskin] = cache_get_field_content_int(0,"spielerskin",dbhandle);
    AccountInfo[playerid][mute] = cache_get_field_content_int(0,"mute",dbhandle);
    if(AccountInfo[playerid][mute]>=1)
    {
    SendClientMessage(playerid,TEAMDMROT,"HINWEIS: Du bist noch gemuted! Unter deinen /stats kannst du dir die Dauer anzeigen lassen.");
    }
    AccountInfo[playerid][fightstyle] = cache_get_field_content_int(0,"fightstyle",dbhandle);
    SetPlayerFightingStyle(playerid,AccountInfo[playerid][fightstyle]);
    AccountInfo[playerid][vehicle]=0;
    }
    else
    {
    SendClientMessage(playerid,TEAMDMROT,"Das eingegebene Passwort war nicht korrekt.");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Deathmatch-Reloaded: Login","Willkommen zurück!\nDein account wurde in unserer Datenbank gefunden.\nGebe bitte dein Passwort ein, um dich einzuloggen und zu spielen.\nDas Passwort muss mindestens 5 Zeichen beinhalten.","Login","Abbrechen");
    }
    }


    Also soll ich jetzt beim registrieren irgendwo dieses "CheckPassword(playerid);" reinmachen oder wie?

    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. :thumbup:


    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?


    Ich glaube beim speichern, ja. Ich habe /q gemacht und direkt danach hat sich ein mysql_log.txt erstellt (hatte den alten gelöscht). Ich hab mich registriert und tatsächlich, du hattest Recht, die Account-ID (db_id) wird bei den /stats als 0 (falsch) angezeigt.

    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. :thumbup:

    Ich weiß zwar nicht, wie man diese Id beim registrieren zuweißt, aber ich hab da so etwas gefunden.
    Guck mal:

    SQL
    [15:13:19] [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 ''0' WHERE id='19'' at line 1


    Kann dir vielleicht das weiterhelfen/etwas sagen?

    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.


    Die ID bekommt er automatisch, wenn ich z.B. InGame eingeloggt bin, hat der Spieler unter seinen /stats (da steht die Datenbank-ID ebenfalls) die richtige DB Id.
    Sprich, wenn er im phpMyAdmin die ID 15 hat, steht dort auch 15. Soweit ich weiß, müsste das also funktionieren.
    Kannst du nicht irgendwie was per TeamViewer machen oder so?

    Setzt du beim Registrieren das hier auch auf 1?
    AccountInfo[playerid][eingeloggt]


    So wie du das beschrieben hast, klingt es ganz danach als machst du das nicht. Das würde genau zur Fehlerbeschreibung passen.


    PS: Du bist einer der Wenigen der sein Problem wirklich gut beschreibt. Top!

    Danke für deine Hilfe.
    Ich hatte das nicht, jedoch habe ich es jetzt mal gemacht.
    Hier der momentane Quellcode von der Registration.


    if(dialogid==DIALOG_REGISTER)
    {
    new name[MAX_PLAYER_NAME],query[128],password[30];
    GetPlayerName(playerid,name,sizeof(name));
    if(response)
    {
    if(strlen(inputtext)<5)
    {
    SendClientMessage(playerid,ROT,"Das ausgewählte Passwort ist zu kurz.");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Deathmatch-Reloaded: Registration","Herzlich Willkommen auf Deathmatch-Reloaded!\nDein Account wurde nicht in unserer Datenbank gefunden.\nGebe nun bitte für die Registration dein gewünschtes Passwort ein.\nDas Passwort muss mindestens 5 Zeichen beinhalten.\n{FF0000}Behalte dein Passwort immer für dich!","Registrieren","Abbrechen");
    return 1;
    }
    else
    {
    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;
    }
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du hast die Registrierung abgebrochen. Die Verbindung zum Server wird nun geschlossen.");
    Kick(playerid);
    return 1;
    }
    return 1;
    }
    Ich hab es probiert, wie du es geschrieben hast, jedoch hat es leider nichts geändert.
    Vielleicht bist du so nett und könntest auch über TeamViewer oder so mal rüber gucken? Oder du hast wahrscheinlich andere Lösungen.
    Wenn du n Code von etwas anderem brauchst (Login etc.), sag bescheid. :D

    Hallo,
    ich habe es mal so getan, wie du es gesagt hast.
    Nun habe ich mich mit einem neuen Account auf dem Server registriert.


    1. Login (Registration) > Ich habe mir per RCON das Adminlevel 5 gegeben und mein Skin auf 92 gesetzt. Nun habe ich /q gemacht (ausgeloggt).
    2. Login > Ich hatte wieder Skin id 0 und war Adminlevel 0. Nichts hat sich geändert. Nun habe ich mir nochmal zum Test die Skin ID 186 gegeben und mich ausgeloggt.
    3. Login > Ich hatte mein Skin 186 noch. Also habe ich mir auch noch mal ebend den Adminlevel 5 gegeben und mich wieder ausgeloggt.
    4. Login > Ich hatte Skin und Adminlevel 5. Nun war alles erfolgreich.


    Mein Verdacht: Wenn man sich registriert hat, muss man einen Relog machen und erst ab DEM wird dann alles gespeichert... ist das möglich? Wenn ja, wie kann man das fixxen?


    Jeffry:

    Hallo liebes SA:MP Forum,
    heute habe ich mal so glaube ich das größte und letzte Problem vor der Eröffnung meines DM-Servers.
    Ich bin mit allem fertig, habe es geschafft vieles selbst zu erledigen (einiges auch dank euch, dankeschön an dieser Stelle an dieses Forum) und bin nun am Ziel erlangt.
    Nur habe ich ein Problem, der mir jetzt aufgefallen ist.
    Accounts werden nicht richtig gespeichert bzw. nur in seltenen Fällen gespeichert. Ich habe hinter vielen Sachen ein "SaveAccount" gesetzt (also hinter jeden Befehlen), jedoch wird bei einem Relog oder bei einem Server-Neustart selten was vom Account gespeichert. Nur wenn ich die Werte (z.B. Adminlevel) per phpMyAdmin Datenbank ändere, wird es gespeichert.
    Beispiel: Ich setze den Wert von Adminlevel per Datenbank auf 4. Nun gehe ich InGame > es hat geklappt, ich bin Adminlevel 4. Wenn ich mich jetzt Adminlevel 3 mache (InGame) und relogge, bin ich immernoch AdminLevel 4. Würde ich dies über der Daten-Bank erledigen, würde das sicher nicht passieren.


    Kann es auch vielleicht daran liegen, dass es alles aufm localhost statt findet? Ich glaube es nicht, aber wer weiß...


    Heir mal mein SaveAccount


    SaveAccount(playerid)
    {
    if(AccountInfo[playerid][eingeloggt]==0)return 1;
    new query[128];
    format(query,sizeof(query),"UPDATE user SET levelscore='%i',money='%i',admlevel='%i',premium='%i',spielerskin='%i',mute='%i',banned='%i',fightstyle='%i' WHERE id='%i'",AccountInfo[playerid][levelscore],GetPlayerMoney(playerid),AccountInfo[playerid][admlevel],AccountInfo[playerid][premium],AccountInfo[playerid][spielerskin],AccountInfo[playerid][mute],AccountInfo[playerid][banned],AccountInfo[playerid][fightstyle],AccountInfo[playerid][id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }


    Da als Beispiel mein /makeadmin.
    ocmd:makeadmin(playerid,params[])
    {
    if(IsPlayerAnAdmin(playerid,5))
    {
    new pID,rank,string[256],string2[256];
    if(sscanf(params,"ui",pID,rank))return SendClientMessage(playerid,WEIß,"{FFFFFF}» {FF000F}Syntax: {FFFFFF}/makeadmin {969696}[Name/ID] [Adminlevel]");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid, GRAU, "Dieser Spieler ist nicht online.");
    if(rank<0||rank>5)return SendClientMessage(playerid,GRAU,"Bitte nur gültiges Adminlevel angeben! {FFFFFF}[0-5]");
    AccountInfo[pID][admlevel]=rank;
    format(string,sizeof(string),"Dein Adminlevel wurde auf {969696}%i {FFFFFF}({969696}%s{FFFFFF}) gesetzt. Verantwortlicher: {969696}%s{FFFFFF}.",rank,Adminrang(pID),Name(playerid));
    format(string2,sizeof(string2),"Du hast das Adminlevel von dem Spieler {969696}%s{FFFFFF} auf {969696}%i{FFFFFF} ({969696}%s{FFFFFF}) gesetzt.",Name(pID),rank,Adminrang(pID));
    SendClientMessage(pID,WEIß,string);
    SendClientMessage(playerid,WEIß,string2);
    SaveAccount(pID);
    return 1;
    }
    SendClientMessage(playerid,GRAU,"Für diesen Befehl benötigst du das folgende Adminlevel: {002DFF}Scripter {969696}[{002DFF}5{969696}].");
    return 1;
    }


    Ich hoffe, ihr könnt mir helfen.


    MfG

    Hallo,
    ich habe ebend per TextDraw eine Uhrzeit erstellt. Diese funktioniert, die Uhr tickt jedoch nur nicht.
    Sprich, wenn ich um 23:59:37 Uhr auf dem Server komme, steht auf dem Textdraw die ganze Zeit "23:59:37 Uhr".


    Wie fixxe ich das?


    Code:
    TextdrawUhr = TextDrawCreate(577.000000, 27.000000, string);
    TextDrawAlignment(TextdrawUhr, 2);
    TextDrawBackgroundColor(TextdrawUhr, 421083903);
    TextDrawFont(TextdrawUhr, 1);
    TextDrawLetterSize(TextdrawUhr, 0.269999, 1.299999);
    TextDrawColor(TextdrawUhr, -1);
    TextDrawSetOutline(TextdrawUhr, 1);
    TextDrawSetProportional(TextdrawUhr, 1);


    public Uhrzeit()
    {
    new string[256],hour,minute,second;
    gettime(hour,minute,second);
    format(string,sizeof(string),"%02d:%02d:%02d",hour,minute,second);
    TextDrawSetString(TextdrawUhrzeit,string);
    return 1;
    }

    Hallo,
    ich habe ein Problem beim setzen des Skins beim spawnen.
    Die Nachricht "Du hast dich erfolgreich registriert" erscheint, d.h. wenn ich da SetPlayerSkin(playerid,1); machen würde, müsste es eigentlich auch kommen.
    Tut es aber nicht.
    Hier der Code, ich hoffe ihr könnt mir helfen.


    if(dialogid==DIALOG_REGISTER)
    {
    new name[MAX_PLAYER_NAME],query[128],password[30];
    GetPlayerName(playerid,name,sizeof(name));
    if(response)
    {
    if(strlen(inputtext)<5)
    {
    SendClientMessage(playerid,ROT,"Das ausgewählte Passwort ist zu kurz.");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Deathmatch-Reloaded: Registration","Herzlich Willkommen auf Deathmatch-Reloaded!\nDein Account wurde nicht in unserer Datenbank gefunden.\nGebe nun bitte für die Registration dein gewünschtes Passwort ein.\nDas Passwort muss mindestens 5 Zeichen beinhalten.","Registrieren","Abbrechen");
    return 1;
    }
    else
    {
    mysql_escape_string(inputtext,password,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (username,password) VALUES ('%s','%s')",name,password);
    mysql_function_query(dbhandle,query,false,"","");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß," ");
    SendClientMessage(playerid,WEIß,"SERVER: Du hast dich erfolgreich registriert.");
    SaveAccount(playerid);
    }
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du hast die Registrierung abgebrochen. Die Verbindung zum Server wird nun geschlossen.");
    Kick(playerid);
    return 1;
    }
    return 1;
    }
    return 1;
    }