Spieler speichern nicht in Mysql?

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
  • Guten Tag


    Habe ein Problem und zwar accounts werden nicht nicht mehr in der Datenbank abgespeichert.


    So sieht alles aus:


    Forward:

    Code
    forward OnUserCheck(playerid);
       forward OnPasswordResponse(playerid);













    Dialoge:

    Code
    #define DIALOG_REGISTER 2
    #define DIALOG_LOGIN 3


    PlayerInfo:

    Code
    enum playerInfo{
    	eingeloggt,
    	level,
    	db_id,
    	alevel,
    	fraktion,
    	rang,
    	spawnchange
    }
    Code
    new sInfo[MAX_PLAYERS][playerInfo];

    OnGameModInit:

    Code
    //mysql verbindung:
    	dbhandle = mysql_connect(db_host,db_user,db_db,db_pass);
    	print("Mysql wurde verbunden!");
    	mysql_log(LOG_ERROR | LOG_WARNING | LOG_DEBUG);
    Code
    public OnGameModeExit()
    {
    	mysql_close(dbhandle);
    	KillTimer(sekunden_timer);
    	return 1;
    }

    OnUserCheck:



    OnPlayerConnect:



    OnPlayerDisconnect:



    getPlayerName (weiß ich jetzt nicht so ganz ob es dazu gehört!):

    Code
    getPlayerName(playerid)
    {
    	new name[MAX_PLAYER_NAME];
    	GetPlayerName(playerid,name,sizeof(name));
    	return name;
    }


    Spielergeld:

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



    Einmal editiert, zuletzt von Markuslobicher () aus folgendem Grund: Änderungen des Codes

  • Hallo,


    Leider kann man an diesem Code nicht viel erkennen(durch das [/b]). Ich bitte dich den Code ordentlich einzufügen, das kannst du wie folgt machen:


    [spoiler='Code ordentlich einfügen: (Anleitung)']


    Ich empfehle nicht den PAWN Quellencode zu benutzen, da dieser noch nicht 100%ig an das "neue" Forum angepasst ist.
    Um den Code gut lesbar einzufügen, machst du folgendes:



    Drücke oben auf den Butten 'Code' dieser ist im oberen Bild blau markiert.
    Nach dem du auf den Butten gedrückt hast sollte sich folgendes Fenster öffnen:



    Nachdem sich das Fenster geöffnet hat, wähle bitte bei 'Syntax-Hervorhebung' (blau markiert) bitte 'C-Quellencode' aus, dieser dient zur besseren übersicht. Jetzt kannst du den Code im rot markierten Feld einfügen und am ende mit 'Speichern' bestätigen.


    Mit freundlichen Grüßen
    German_ScripterHD

  • Beitrag von Markuslobicher ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • format(query,sizeof(query),"INSERT INTO user username = '%s', passwort = '%s', level = '1' ",name,passwort);
    mysql_function_query(dbhandle,query,false,"","");
    Zu:
    format(query,sizeof(query),"INSERT INTO user (username, passwort, level) VALUES ('%s', '%s', '1')",name,passwort);
    mysql_function_query(dbhandle,query,false,"OnPlayerRegister","d",playerid);


    Und das hier im Gamemode ganz unten hinzufügen:
    forward OnPlayerRegister(playerid);
    public OnPlayerRegister(playerid)
    {
    sInfo[playerid][db_id] = cache_insert_id();
    return 1;
    }

  • @Jeffry
    Jetzt wird zwar account eingespielt aber das prob ist nun:


    Wenn man sich registriert hat und neu einloggen möchte wird das password nicht eingespeichert.
    Ich habe kein Plan:


    MYSQL-Log:

  • format(query,sizeof(query),"INSERT INTO user (username, passwort, level) VALUES ('%s', '%s', '1')",name,passwort);
    zu:
    format(query,sizeof(query),"INSERT INTO user (username, passwort, level) VALUES ('%s', MD5('%s'), '1')",name,passwort);

  • Das Passwort wird immer noch nicht gespeichert. Desweiteren auch nicht MD5 verschlüsselt.



    MYSQL-Log:






    Spieler Register und Login:




  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • @Jeffry
    Nach dem ich das alles so gemacht habe kann man keine Admin-Befehle mehr ausführen selbst wenn man adminrechte hat.


    Ich weiß einfach nicht was nun der Fehler sein soll:


    Ob es jetzt an OnPlayerRegister liegt weiß ich nicht.
    Aber ich weiß´nur das unter OnUserCheck geprüft wird ob Spieler registriert ist oder login gehen muss:




    Forward:

    Code
    forward OnUserCheck(playerid);
    forward OnPasswordResponse(playerid);
    forward OnUserCheck(playerid)


    Login/Register:

    Code
    #define DIALOG_REGISTER 2
    #define DIALOG_LOGIN 3


    enum playerinfo:

    Code
    enum playerInfo{
    	eingeloggt,
    	level,
    	db_id,
    	alevel,
    	fraktion,
    	rang,
    	spawnchange
    }
    Code
    new sInfo[MAX_PLAYERS][playerInfo];


    //mysql:

    Code
    #define db_host "localhost"
    #define db_user "benutzername"
    #define db_pass ""
    #define db_db "samp5608_samp"
    new dbhandle;

    OnGameModeInit:


    Code
    //mysql verbindung:
    	dbhandle = mysql_connect(db_host,db_user,db_db,db_pass);
    	print("Mysql wurde verbunden!");
    	mysql_log(LOG_ERROR | LOG_WARNING | LOG_DEBUG);


    OnGameModExit:

    Code
    public OnGameModeExit()
    {
    	mysql_close(dbhandle);
    	KillTimer(sekunden_timer);
    	return 1;
    }



    Ka ob es dazu gehört:

    Code
    getPlayerName(playerid)
    {
    	new name[MAX_PLAYER_NAME];
    	GetPlayerName(playerid,name,sizeof(name));
    	return name;
    }



  • Beitrag von German_ScripterHD ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Frage falsch gelesen... ().
  • Ändere OnPlayerDisconnect zu:
    public OnPlayerDisconnect(playerid, reason)
    {
    for(new i=0; i<sizeof(aInfo); i++)
    {
    if(aInfo[i][id_x]==0)continue;
    if(aInfo[i][besitzer]!=sInfo[playerid][db_id])continue;
    GetVehiclePos(aInfo[i][id_x],aInfo[i][c_x],aInfo[i][c_y],aInfo[i][c_z]);
    GetVehicleZAngle(aInfo[i][id_x],aInfo[i][c_r]);
    new query[256];
    /*
    Hier das format für das Query um die Fahrzeug-Tabelle zu ändern!
    */
    mysql_function_query(dbhandle,query,false,"","");
    DestroyVehicle(aInfo[i][id_x]);
    aInfo[i][id_x]=0;
    break;
    }
    savePlayer(playerid);
    resetPlayer(playerid);
    loadPlayerCars(playerid);
    return 1;
    }


    Den Login Dialog zu:
    if(dialogid==DIALOG_LOGIN)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[256],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>0)
    {
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND passwort=MD5('%s')",name,passwort);
    mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid);
    }
    else
    {
    //Keine Eingabe
    SendClientMessage(playerid,grün,"Gibt bitte dein Passwort ein.");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gibt bitte dein Passwort ein:","Anmelden","Abbrechen");
    }
    }
    else
    {
    Kick(playerid);
    }
    return 1;
    }


    Dann sollte das mit dem Login klappen.

  • @Jeffry Habe ein neuen Fehler/Warung bekommen im Script


    Und zwar wird mir die Funktion die ich mir gemacht habe mit SetPlayerMoney als warnung ausgebeben.



    Scriptcode:



    Forwoard:

    Code
    forward OnUserCheck(playerid);
    forward OnPasswordResponse(playerid);
    forward OnPlayerRegister(playerid);



    Register/Login Dialog definiert:


    Code
    #define DIALOG_REGISTER 2
    #define DIALOG_LOGIN 3


    Enum:

    Code
    enum playerInfo{
    	eingeloggt,
    	level,
    	db_id,
    	alevel,
    	fraktion,
    	rang,
    	spawnchange
    }
    new sInfo[MAX_PLAYERS][playerInfo];


    MYSQL:


    Code
    //mysql:
    #define db_host "localhost"
    #define db_user "Root"
    #define db_pass ""
    #define db_db "MEINE DB"
    new dbhandle;


    OnGameModeInit:


    Code
    //mysql verbindung:
    	dbhandle = mysql_connect(db_host,db_user,db_db,db_pass);
    	print("Mysql wurde verbunden!");
    	mysql_log(LOG_ERROR | LOG_WARNING | LOG_DEBUG);

    OnGameModeExit: Der Timmer ist für was anderes!



    Code
    public OnGameModeExit()
    {
    	mysql_close(dbhandle);
    	KillTimer(sekunden_timer);
    	return 1;
    }

    OnUserCheck:




    OnPlayerRegister:


    Code
    public OnPlayerRegister(playerid)
    {
    	sInfo[playerid][db_id] = cache_insert_id();
    	return 1;
    }


    OnPlayerConnect Mit Spieler Speichern und Spieler Laden:



    OnPlayerDisconnect:


    getPlayerName: [Ich weiß es nicht ob es dazu gehört]:



    Code
    getPlayerName(playerid)
    {
    	new name[MAX_PLAYER_NAME];
    	GetPlayerName(playerid,name,sizeof(name));
    	return name;
    }


    OnPasswordResponse:


    OnDialogResponse: [Es sind alle Dialoge von mir drin]



    SpielerName:


    Code
    stock SpielerName(playerid)
    {
        new name[MAX_PLAYER_NAME];
        GetPlayerName(playerid,name,MAX_PLAYER_NAME);
        return name;
    }

    Dann sagt er mir auch das folgende Funktion die ich gemacht habe nicht gibt:




    Code
    SetPlayerMoney(playerid,money)
    {
    	ResetPlayerMoney(playerid);
    	GivePlayerMoney(playerid,money);
    	return 1;
    }
    
    
    samplernen.p(1570) : warning 203: symbol is never used: "SetPlayerMoney"

    MYSQL_Log:


  • Dann sagt er mir auch das folgende Funktion die ich gemacht habe nicht gibt:


    samplernen.p(1570) : warning 203: symbol is never used: "SetPlayerMoney"


    Das heißt nur, dass du die Funktion nirgends verwendest.
    Wenn du die Warnung entfernen willst, dann setze vor das SetPlayerMoney - bei der Funktion - ein "stock" hin.


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

  • @Jeffry


    Sieht bis jetzt so alles aus:






    Datenbank:


    MYSQL-LOGdatei: Da ist auch von Autos mit drin


    Nach dem Neueinloggen:


    MYSQL-Log nach dem Neueinloggen:


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