MySQL speichert nicht außer Passwort!

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo,


    wie oben bereits steht speichert MySQL nur mein Name und Passwort nach Register.


    Wenn ich mir z.B. Geld setze speichert er das nicht. Wenn ich mich töten lasse ändert sich in der Datenbank auch nichts. Dazu muss man aber sagen das er die IP speichert und lädt.


    [23:11:25] [DEBUG] mysql_format - connection: 1, len: 256, format: "SELECT id FROM accounts WHERE name = '%e'"[23:11:25] [DEBUG] mysql_pquery - connection: 1, query: "SELECT id FROM accounts WHERE name = 'TaigX'", callback: "OnUserCheck2", format: "d"[23:11:25] [DEBUG] CMySQLQuery::Execute[OnUserCheck2] - starting query execution[23:11:25] [DEBUG] CMySQLQuery::Execute[OnUserCheck2] - query was successfully executed within 0.431 milliseconds[23:11:25] [DEBUG] CMySQLResult::CMySQLResult() - constructor called[23:11:25] [DEBUG] Calling callback "OnUserCheck2"..[23:11:25] [DEBUG] cache_get_data - connection: 1[23:11:25] [DEBUG] mysql_format - connection: 1, len: 256, format: "SELECT * FROM accounts WHERE name = '%e' AND password = MD5('%e')"[23:11:25] [DEBUG] mysql_pquery - connection: 1, query: "SELECT * FROM accounts WHERE name = 'TaigX' AND password = MD5('", callback: "OnUserLogin", format: "d"[23:11:25] [DEBUG] CMySQLResult::~CMySQLResult() - deconstructor called[23:11:25] [DEBUG] CMySQLQuery::Execute[OnUserLogin] - starting query execution[23:11:25] [DEBUG] CMySQLQuery::Execute[OnUserLogin] - query was successfully executed within 0.336 milliseconds[23:11:25] [DEBUG] CMySQLResult::CMySQLResult() - constructor called[23:11:25] [DEBUG] Calling callback "OnUserLogin"..[23:11:25] [DEBUG] cache_get_row_count - connection: 1[23:11:25] [DEBUG] cache_get_field_content_int - row: 0, field_name: "id", connection: 1[23:11:25] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "id", data: "2"[23:11:25] [DEBUG] cache_get_field_content_int - row: 0, field_name: "level", connection: 1[23:11:25] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "level", data: "0"[23:11:25] [DEBUG] cache_get_field_content_int - row: 0, field_name: "money", connection: 1[23:11:25] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "money", data: "0"[23:11:25] [DEBUG] cache_get_field_content_int - row: 0, field_name: "kills", connection: 1[23:11:25] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "kills", data: "0"[23:11:25] [DEBUG] cache_get_field_content_int - row: 0, field_name: "deaths", connection: 1[23:11:25] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "deaths", data: "0"[23:11:25] [DEBUG] cache_get_field_content_int - row: 0, field_name: "admin", connection: 1[23:11:25] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "admin", data: "5"[23:11:25] [DEBUG] cache_get_field_content_int - row: 0, field_name: "ip", connection: 1[23:11:25] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "ip", data: "127.0.0.1"[23:11:25] [DEBUG] CMySQLResult::~CMySQLResult() - deconstructor called[23:12:02] [DEBUG] mysql_format - connection: 1, len: 256, format: "UPDATE accounts SET level = '%d', money = '%d', kills = '%d', deaths = '%d', admin = '%d', ip = '%d' WHERE id = '%d'"[23:12:02] [DEBUG] mysql_pquery - connection: 1, query: "UPDATE accounts SET level = '0', money = '0', kills = '0', death", callback: "(null)", format: "(null)"[23:12:02] [DEBUG] CMySQLQuery::Execute[] - starting query execution[23:12:02] [DEBUG] CMySQLQuery::Execute[] - query was successfully executed within 0.310 milliseconds[23:12:02] [DEBUG] CMySQLQuery::Execute[] - no callback specified, skipping result saving


    stock SavePlayer(playerid){ new query[256]; mysql_format(db_handle, query, sizeof(query), "UPDATE accounts SET level = '%d', money = '%d', kills = '%d', deaths = '%d', admin = '%d', ip = '%d' WHERE id = '%d'", PlayerInfo[playerid][plevel], PlayerInfo[playerid][pmoney], PlayerInfo[playerid][pkills], PlayerInfo[playerid][pdeaths], PlayerInfo[playerid][pid], PlayerInfo[playerid][padmin], PlayerInfo[playerid][pip]); mysql_pquery(db_handle, query); return 1;}


    Und unter OnPlayerDisconnect hab ich halt SavePlayer(playerid);


    Datenbank im Anhang.


    Bitte um Hilfe :)


    MfG
    Zreeq

    • Offizieller Beitrag

    Der Fehler liegt an deiner MySQL-Abfrage, die du zum Speichern nutzt. Die Variable pid muss an letzter Stelle der Parameter sein, da diese ja auch als letztes in dem MySQL-Befehl gebraucht wird.


    Code
    stock SavePlayer(playerid)
    { 
    	new query[256]; 
    	mysql_format(db_handle, query, sizeof(query), "UPDATE accounts SET level = '%d', money = '%d', kills = '%d', deaths = '%d', admin = '%d', ip = '%d' WHERE id = '%d'", 
    	PlayerInfo[playerid][plevel], PlayerInfo[playerid][pmoney], PlayerInfo[playerid][pkills], PlayerInfo[playerid][pdeaths], PlayerInfo[playerid][padmin], PlayerInfo[playerid][pip], PlayerInfo[playerid][pid]); 
    	mysql_pquery(db_handle, query); 
    	return 1;
    }
  • @Whice. Ist bei mir das selbe kann in der Datenbank mein Geld setten wird Ingame geladen aber wenn ich /setmoney 1 0 setzte und vom Server Disconnecte was ich eigentlich nichteinmal machen müsste da ich beim setmoney Befehl noch den Spieler Speicher. Aber in der Datenbank steht das ich trotzdem noch 50k habe und @Zreeq Sorry das ich dir jetzt nicht helfen kann :/

    • Offizieller Beitrag

    Danke.


    Deaths werden nun gespeichert und geladen. Jetzt hab ich noch das problem das money geladen wird aber nicht gespeichert.


    @Whice. Ist bei mir das selbe kann in der Datenbank mein Geld setten wird Ingame geladen aber wenn ich /setmoney 1 0 setzte und vom Server Disconnecte was ich eigentlich nichteinmal machen müsste da ich beim setmoney Befehl noch den Spieler Speicher. Aber in der Datenbank steht das ich trotzdem noch 50k habe und @Zreeq Sorry das ich dir jetzt nicht helfen kann


    Ich denke mal das dies daran liegen wird, dass ihr bei deinem GiveMoney Befehl das ganze nur über GivePlayerMoney macht, dort ist es allerdings wichtig, dass die Geldvariable "PlayerInfo[playerid][pmoney]" auch hochgesetzt wird.

  • Denke das du recht hast das hier ist mein jetziger Befehl:


    ocmd:setmoney(playerid,params[])
    {
    print("setmoney Befehl ausgeführt!");
    [b]if[/b](!isAdmin(playerid,3))[b]return[/b] SendClientMessage(playerid,DUNKELROT,"Dein Adminlevel ist zu Niedrig!");
    [b]new[/b] pID, test[128], string[128],BETRAG;
    [b]if[/b](sscanf(params,"ui",pID,BETRAG))[b]return[/b] SendClientMessage(playerid,GELB,"[INFO]: /setmoney [SpielerID] [Betrag]");
    ResetPlayerMoney(pID);
    GivePlayerMoney(pID,BETRAG);
    format(string,sizeof(string),"AdmCmd: %s hat dein Geld auf $%i gesetzt",PlayerInfo[playerid],BETRAG);
    format(test,sizeof(test),"AdmCmd: Du hast %s den Geldbetrag auf $%i gesetzt!",PlayerInfo[pID],BETRAG);
    SendClientMessage(pID,DUNKELROT,string);
    SendClientMessage(playerid,DUNKELROT,test);
    SaveUserStats(playerid);
    [b]return[/b] 1;
    }


    Muss ich das zu dem ändern?:
    ocmd:setmoney(playerid,params[])
    {
    print("setmoney Befehl ausgeführt!");
    [b]if[/b](!isAdmin(playerid,3))[b]return[/b] SendClientMessage(playerid,DUNKELROT,"Dein Adminlevel ist zu Niedrig!");
    [b]new[/b] pID, test[128], string[128],BETRAG;
    [b]if[/b](sscanf(params,"ui",pID,BETRAG))[b]return[/b] SendClientMessage(playerid,GELB,"[INFO]: /setmoney [SpielerID] [Betrag]");
    ResetPlayerMoney(pID);
    GivePlayerMoney(pID,BETRAG);
    format(string,sizeof(string),"AdmCmd: %s hat dein Geld auf $%i gesetzt",PlayerInfo[playerid],BETRAG);
    format(test,sizeof(test),"AdmCmd: Du hast %s den Geldbetrag auf $%i gesetzt!",PlayerInfo[pID],BETRAG);
    SendClientMessage(pID,DUNKELROT,string);
    SendClientMessage(playerid,DUNKELROT,test);
    SaveUserStats(playerid);
    [b]return[/b] 1;
    }


    Wäre das so richtig? @Whice.

    • Offizieller Beitrag

    Wäre das so richtig? @Whice.

  • @Whice. Ich weiß hab ich auch geändert aber mein Code sieht schon so aus aber funkt net:
    ocmd:setmoney(playerid, params[])
    {
    print("setmoney Befehl ausgeführt!");
    if(!isAdmin(playerid,3))return SendClientMessage(playerid, DUNKELROT, "Dein Adminlevel ist zu Niedrig!");
    new pID, string[128], BETRAG;
    if(sscanf(params, "ui", pID, BETRAG))return SendClientMessage(playerid, GELB, "[INFO]: /setmoney [SpielerID] [Betrag]");
    ResetPlayerMoney(pID);
    GivePlayerMoney(pID, BETRAG);
    PlayerInfo[pID][pMoney]+=BETRAG;
    format(string, sizeof(string), "AdmCmd: %s hat dein Geld auf $%i gesetzt", SpielerName(playerid), BETRAG);
    SendClientMessage(pID, DUNKELROT, string);
    format(string, sizeof(string), "AdmCmd: Du hast %s den Geldbetrag auf $%i gesetzt!", SpielerName(pID), BETRAG);
    SendClientMessage(playerid, DUNKELROT, string);
    SaveUserStats(pID);
    return 1;
    }

  • Code
    PlayerInfo[pID][pMoney]+=BETRAG;

    bedeutet du addierst BETRAG zu PlayerInfo[pID][pMoney] hinzu. Was du willst ist aber anscheinend den Betrag überschreiben, also

    Code
    PlayerInfo[pID][pMoney] = BETRAG;

    The fact is, I am right. And if you think I'm wrong, you are wrong.

    • Offizieller Beitrag
  • Also ich hab denke mal ein anderes Problem, da ich das wie oben bereits hatte und es trd. nicht klappt.


    So sieht z.B. mein setmoney aus:


    ocmd:setmoney(playerid, params[])
    {
    new pID, money, string[128];
    if(PlayerInfo[playerid][plogged] == false) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Warnung]: Du musst dich erst einloggen, um den Befehl zu benutzen!");
    if(PlayerInfo[playerid][padmin] < 3) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Warnung]: Du bist nicht berechtigt diesen Befehl zu benutzen!");
    if(PlayerInfo[playerid][pduty] == 0) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Warnung]: Du befindest dich nicht im Administrativen Dienst!");
    if(sscanf(params, "ui", pID, money)) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Verwendung]: [/setmoney] [ID] [GELD]");
    ResetPlayerMoney(pID);
    GivePlayerMoney(pID, money);
    PlayerInfo[pID][pmoney] = money;
    format(string, sizeof(string), "{0099FF}[Admin]:{FFFFFF} %s %s hat dir %i$ gesettet.", GetAdminRank(playerid), PlayerInfo[playerid][pname], money);
    SendClientMessage(pID, COLOR_WHITE, string);
    format(string, sizeof(string), "{0099FF}[Admin]:{FFFFFF} Du hast dem Spieler %s %i$ gesettet.", PlayerInfo[pID][pname], money);
    SendClientMessage(playerid, COLOR_WHITE, string);
    return 1;
    }


    Gespeichert wird der Spieler wenn er den Server verlässt oder der Server beendet wird.

  • @Zreeq versuchs vielleicht mal so:


    ocmd:setmoney(playerid, params[])
    {
    new pID, BETRAG, string[128];
    if(PlayerInfo[playerid][plogged] == false) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Warnung]: Du musst dich erst einloggen, um den Befehl zu benutzen!");
    if(PlayerInfo[playerid][padmin] < 3) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Warnung]: Du bist nicht berechtigt diesen Befehl zu benutzen!");
    if(PlayerInfo[playerid][pduty] == 0) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Warnung]: Du befindest dich nicht im Administrativen Dienst!");
    if(sscanf(params, "ui", pID, money)) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Verwendung]: [/setmoney] [ID] [GELD]");
    ResetPlayerMoney(pID);
    GivePlayerMoney(pID, BETRAG);
    PlayerInfo[pID][pmoney] = BETRAG;
    format(string, sizeof(string), "{0099FF}[Admin]:{FFFFFF} %s %s hat dir %i$ gesettet.", GetAdminRank(playerid), PlayerInfo[playerid][pname], BETRAG);
    SendClientMessage(pID, COLOR_WHITE, string);
    format(string, sizeof(string), "{0099FF}[Admin]:{FFFFFF} Du hast dem Spieler %s %i$ gesettet.", PlayerInfo[pID][pname], BETRAG);
    SendClientMessage(playerid, COLOR_WHITE, string);
    return 1;
    }