Geld wird nicht Gespeichert

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,
    Bei der Registration wird das Geld nicht Gespeichert in der Datenbank.


    Registration:

    if(dialogid==DIALOG_REGISTRATION){
    if(response==0)return Kick(playerid);
    if(response==1){
    new query[512],passwort[16];
    if(strlen(inputtext)>=6){
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (username,password) VALUES ('%s','%s')",SpielerName(playerid),passwort);
    mysql_function_query(dbhandle,query,false,"","");
    SetPlayerMoney(playerid,500); //<--- Da gebe ich ihn das Geld
    }else{
    ShowPlayerDialog(playerid,DIALOG_REGISTRATION,DIALOG_STYLE_INPUT,"{FFFFFF}Registration's Schritt {0000FF}1{FFFFFF}/{FF0000}3","{FFFFFF}Herzlich willkommen auf Titan {FFFF00}RolePlay\n{FFFFFF}Es wurde kein Account mit diesem Namen in der Datenbank gefunden.\nDamit du aber bei uns Spielen kannst musst du ein Account erstellen.\nDies ist einfach, Folge einfach denn Anweisungen!\nGebe bitte ein Gewünschtes Passwort ein!\n{FF0000}WICHTIG: Maximal 6-16 Zeichen!\n\nMfG. das Admin Team!",">>>","Beenden");
    }
    }
    return 1;
    }


    Geld geben:

    SetPlayerMoney(playerid,money){
    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid,money);
    return 1;
    }


    Einloggen/Laden:

    public OnUserPasswortCheck(playerid){
    new num_rows,num_fields;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1){
    SpielerInfo[playerid][sEingeloggt]=1;
    SpielerInfo[playerid][sLevel]=cache_get_field_content_int(0,"level",dbhandle);
    SetPlayerScore(playerid,SpielerInfo[playerid][sLevel]);
    SpielerInfo[playerid][sID]=cache_get_field_content_int(0,"id",dbhandle);
    SetPlayerMoney(playerid,cache_get_field_content_int(0,"bargeld",dbhandle));
    SpielerInfo[playerid][sAdminrang]=cache_get_field_content_int(0,"adminrang",dbhandle);
    }else{
    ShowPlayerDialog(playerid,DIALOG_EINLOGGEN,DIALOG_STYLE_PASSWORD,"Ü{FFFFFF}Einloggen Fortschritt {0000FF}1{FFFFFF}/{FF0000}2","{FFFFFF}Herlich willkommen auf Titan {FFFF00}RolePlay\n{FFFFFF}Es wurde ein Account mit diesm Namen in der Datenbank gefunden.\nDamit du weiet Spielen kannst musst du dich Einloggen.\nUm dich Einzuloggen gebe dein Passwort ein was du bei der Registration Eingetragen hast!\n\nMfG. das Titan RolePlay Admin Team!","Spielen","Beenden");
    }
    return 1;
    }


    Speichern:

    OnUserSave(playerid){
    if(SpielerInfo[playerid][sEingeloggt]==0)return 1;
    new query[512];
    format(query,sizeof(query),"UPDATE user SET level='%i',bargeld='%i',adminrang='%i' WHERE id='%i'",SpielerInfo[playerid][sLevel],GetPlayerMoney(playerid),SpielerInfo[playerid][sAdminrang],SpielerInfo[playerid][sID]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }

  • Schick mal bitte die server_log.txt und die mysql_log.txt


    Die Server Logs



    SA-MP Dedicated Server
    ----------------------
    v0.3x-R2, (C)2005-2013 SA-MP Team


    [12:14:25] filterscripts = "" (string)
    [12:14:25]
    [12:14:25] Server Plugins
    [12:14:25] --------------
    [12:14:25] Loading plugin: mysql
    [12:14:25] >> plugin.mysql: R34 successfully loaded.
    [12:14:25] Loaded.
    [12:14:25] Loading plugin: sscanf
    [12:14:25]


    [12:14:25] ===============================


    [12:14:25] sscanf plugin loaded.


    [12:14:25] Version: 2.8.1


    [12:14:25] (c) 2012 Alex "Y_Less" Cole


    [12:14:25] ===============================


    [12:14:25] Loaded.
    [12:14:25] Loaded 2 plugins.


    [12:14:25]
    [12:14:25] Filterscripts
    [12:14:25] ---------------
    [12:14:25] Loaded 0 filterscripts.


    [12:14:25]
    ----------------------------------
    [12:14:25] .:: Titan RolePlay ::.
    [12:14:25] ----------------------------------


    [12:14:25] Number of vehicle models: 0
    [12:14:43] Incoming connection: 127.0.0.1:57894
    [12:14:43] [join] Dominik has joined the server (0:127.0.0.1)
    [12:14:52] [part] Dominik has left the server (0:1)



    Die MySQL Log wird gar nicht erst Erstellt.


    MfG.

  • Prüfe auch ob Spieler[playerid][sEingeloggt] auch auf 1 steht wenn du dich einloggst.
    Ansonsten, wie die anderen schon gesagt haben, die mysql log herzeigen.


    mysql_log(LOG_DEBUG,LOG_TYPE_TEXT);

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • mal doof gefragt, bist du überhaupt eingeloggt?



    Das ist whayne


    Zeig mal den query aus den sql debug oder debugge einfach alles


    Prüfe auch ob Spieler[playerid][sEingeloggt] auch auf 1 steht wenn du dich einloggst.
    Ansonsten, wie die anderen schon gesagt haben, die mysql log herzeigen.


    mysql_log(LOG_DEBUG,LOG_TYPE_TEXT);


    Ja bin Eingeloggt.
    Wenn ich z.B. ein Befehl mache um mich InGame ein Admin mache. Dann Speichert er das auch.
    Nur das Geld nicht.


    MfG.


    PS: Im Ahnung ist das Script, habe leider nicht so Viel Erfahrung in MySQL bzw. gar keine.
    Ist nicht Tolles drinne, außer das Login/Register System. :)


  • Dein Problem ist es das du es jemanden SpielerInfo[playerid][sEingeloggt] setzt der sich einloggt mit seinem passwort , jedoch nicht wenn er sich registriert, wie jedoch
    dein Adminlevel darüber gespeichert wird ist mir ein Rätsel direkt nach dem registrieren.

    Einmal editiert, zuletzt von IPrototypeI ()

  • @

    IPrototypeI
    :


    Ich verstehe jetzt gar nicht's mehr. :D


    MfG.


    Okay nochmal Step by Step:


    OnUserSave(playerid){
    if(SpielerInfo[playerid][sEingeloggt]==0)return 1;
    new query[512];
    format(query,sizeof(query),"UPDATE user SET level='%i',bargeld='%d',adminrang='%i' WHERE id='%i'",SpielerInfo[playerid][sLevel],GetPlayerMoney(playerid),SpielerInfo[playerid][sAdminrang],SpielerInfo[playerid][sID]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }


    kann nur richtig ausgeführt werden(Die Werte speichern) wenn SpielerInfo[playerid][sEingeloggt] den wert 1 besitzt.



    Nun stellt sich die Frage wo setzt du diesen Wert überall auf 1 ?


    1. Wenn der Spieler sich einloggt mit dem richtigen Passwort


    public OnUserPasswortCheck(playerid){
    new num_rows,num_fields;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1){
    SpielerInfo[playerid][sEingeloggt]=1;
    SpielerInfo[playerid][sLevel]=cache_get_field_content_int(0,"level",dbhandle);
    SetPlayerScore(playerid,SpielerInfo[playerid][sLevel]);
    SpielerInfo[playerid][sID]=cache_get_field_content_int(0,"id",dbhandle);
    SetPlayerMoney(playerid,cache_get_field_content_int(0,"bargeld",dbhandle));
    SpielerInfo[playerid][sAdminrang]=cache_get_field_content_int(0,"adminrang",dbhandle);
    }else{
    ShowPlayerDialog(playerid,DIALOG_EINLOGGEN,DIALOG_STYLE_PASSWORD,"Ü{FFFFFF}Einloggen Fortschritt {0000FF}1{FFFFFF}/{FF0000}2","{FFFFFF}Herlich willkommen auf Titan {FFFF00}RolePlay\n{FFFFFF}Es wurde ein Account mit diesm Namen in der Datenbank gefunden.\nDamit du weiet Spielen kannst musst du dich Einloggen.\nUm dich Einzuloggen gebe dein Passwort ein was du bei der Registration Eingetragen hast!\n\nMfG. das Titan RolePlay Admin Team!","Spielen","Beenden");
    }
    return 1;
    }


    2. ? Du setzt sonst nirgendwo anders den Wert. Jedoch rufst du den Dialog " DIALOG_REGISTRATION", wenn der Account des Spielers nicht existiert
    Nun gut der Spieler gibt nun ein Passwort ein und registriert sich. Es wird ein Eintrag in die Tabelle user eingetragen. Danach kann der Spieler mit 500 Dollar
    an dem Punkt 1958.3783, 1343.1572, 15.3746 mit einem CJ Skin spawnen, wenn er auf den Spawnbutton klickt.



    Wir halten nochmal zusammen der Spieler verlässt den Server die Funktion OnUserSave wird aufgerufen da SpielerInfo[playerid][sEingeloggt] nicht den Wert 1 hat wird nix gespeichert, da die Funktion direkt durch die if abfrage und dem return 1 abgebrochen wird.


    Noch ein Tipp um die ganzen Spielerwerte zu reseten für einen Spieler kannst du eine for-schleife nutzen
    for(new i; i != _:SpielerDatei; ++i) SpielerInfo[playerid][SpielerDatei:i] = 0;

  • Sprich so sollte es eigentlich sein oder?

    if(dialogid==DIALOG_REGISTRATION){
    if(response==0)return Kick(playerid);
    if(response==1){
    new query[512],passwort[16];
    if(strlen(inputtext)>=6){
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (username,password) VALUES ('%s','%s')",SpielerName(playerid),passwort);
    mysql_function_query(dbhandle,query,false,"","");
    SetPlayerMoney(playerid,500);
    SpielerInfo[playerid][sEingeloggt]=1;
    }else{
    ShowPlayerDialog(playerid,DIALOG_REGISTRATION,DIALOG_STYLE_INPUT,"{FFFFFF}Registration's Schritt {0000FF}1{FFFFFF}/{FF0000}3","{FFFFFF}Herzlich willkommen auf Titan {FFFF00}RolePlay\n{FFFFFF}Es wurde kein Account mit diesem Namen in der Datenbank gefunden.\nDamit du aber bei uns Spielen kannst musst du ein Account erstellen.\nDies ist einfach, Folge einfach denn Anweisungen!\nGebe bitte ein Gewünschtes Passwort ein!\n{FF0000}WICHTIG: Maximal 6-16 Zeichen!\n\nMfG. das Admin Team!",">>>","Beenden");
    }
    }
    return 1;
    }

    Aber so geht es auch nicht. :(


    MfG.

  • Aber so geht es auch nicht. :(

    Jo da hast du Recht das war nur die Halbemiete schau dir mal dein Update Query an


    format(query,sizeof(query),"UPDATE user SET level='%i',bargeld='%d',adminrang='%i' WHERE id='%i'",SpielerInfo[playerid][sLevel],GetPlayerMoney(playerid),SpielerInfo[playerid][sAdminrang],SpielerInfo[playerid][sID]);
    Wurde dem Spieler eine eindeutige ID zugewiesen ? Nein wurde sie nicht daher solltest du dir diese nochmal ausgeben lassen via
    cache_insert_id() oder du geht hier über den Namen des Spielers.



    mysql_format(query,300,dbhandle,"INSERT INTO `user` (username,password) VALUES ('%e','%e');",SpielerName(playerid),inputtext);
    mysql_tquery(dbhandle,query,false,"","");
    SpielerInfo[playerid][sID] = cache_insert_id();


    //Edit es ist besser
    mysql_tquery zu verwenden da du hier threaded querys nutzt, dies hast du bei mysql_query oder mysql_query_function nicht


  • Wenn ich das so ändere, bekomme ich Zwei Erros oder zwei Warns.


    MfG.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen