Beiträge von [KoSoVa]

    Auf einem Nitrado Server kannst du dich nicht über "root" und "127.0.0.1" anmelden. Du musst da die MySQL-Daten angeben, die irgendwo im User Panel stehen.
    https://server.nitrado.net/var…enbank-zugegriffen-werden


    habe ich gemacht... und jetzt kommen diese Error:


    Hallo Leute!
    Ich habe mir heute ein Nitrado Server zugleget, und nachdem ich alles zum laufen gekriegt habe, kommen am anfang die Login/register Textdraws nicht. ich kann z.b.: auf spawn drücken und ich werde an meinen Zivispawn gespawnt. es kommen auch diese Warnings/Erros im Mysql_Log:


    Und hir sin die ganzen OnPlayer...



    public OnPlayerRegister(playerid)
    {
    SpielerInfo[playerid][db_id] = cache_insert_id(dbhandle);
    return 1;
    }


    public OnPlayerSkinTextdraw(playerid)
    {
    if(cache_num_rows() != 0) SpielerInfo[playerid][Skin] = cache_get_field_content_int(0,"Skin",dbhandle);
    else SpielerInfo[playerid][Skin] = 0;
    PlayerTextDrawSetPreviewModel(playerid,Textdraw7[playerid], SpielerInfo[playerid][Skin]);
    return 1;
    }


    public OnPlayerDataLoaded2(playerid)
    {
    if(cache_num_rows() != 0)
    {
    SendClientMessage(playerid, Rot,"[FEHLER] {FFFFFF}Dieser Account ist Regestriert! Um hier spielen zu können, musst du dich Einloggen!");
    return 1;
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"Registrierung","Herzlichen Willkommen auf Incredible German Reallife!\nBitte gib nun dein Password ein, um auf dem Server Spielen zu können!","Register","Abbrechen");
    return 1;
    }
    }


    public OnPlayerDataLoaded(playerid)
    {
    if(cache_num_rows() == 0)
    {
    SendClientMessage(playerid, Rot,"[FEHLER] {FFFFFF}Dieser Account ist nicht Regestriert! Um hier spielen zu können, musst du dich Regestrieren!");
    return 1;
    }
    else //Falls doch
    {
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"Login Vorgang","Herzlichen Willkommen zurück auf Incredible German Reallife!\nBitte gib nun dein Password ein!","Login","Abbrechen");
    return 1;
    }
    }


    Erstellst du das Textdraw auch bei OnPlayerConnect? Wenn ja, dann musst du in das public noch das TextDrawSetPreviewModel rein machen, und dem Spieler das Textdraw dann anzeigen.


    Ja es wird in OnPlayConnect angezeigt, jedoch geht es leider immer noch nicht..



    public OnPlayerSkinTextdraw(playerid)
    {
    if(cache_num_rows() != 0) SpielerInfo[playerid][Skin] = cache_get_field_content_int(0,"Skin",dbhandle);
    else SpielerInfo[playerid][Skin] = 0;
    PlayerTextDrawSetPreviewModel(playerid,Textdraw7[playerid], SpielerInfo[playerid][Skin]);
    return 1;
    }

    bleibt immer noch bei den CJ Skin:


    Also habe es jetzt so gemacht:



    //OnPlayerConnect
    new query[128],name[MAX_PLAYER_NAME];
    format(query,sizeof(query),"SELECT Skin FROM user WHERE username='%s'",name); //Anpassen
    mysql_function_query(dbhandle,query,true,"OnPlayerSkinTextdraw","i",playerid);


    //etwas weiter unten:
    forward OnPlayerSkinTextdraw(playerid);
    public OnPlayerSkinTextdraw(playerid)
    {
    if(cache_num_rows() != 0) SpielerInfo[playerid][Skin] = cache_get_field_content_int(0,"Skin",dbhandle);
    else SpielerInfo[playerid][Skin] = 0;
    return 1;
    }


    Eigentlich sollte da die SKIN ID 20 angezeigt werden..


    wie meinste dass genau jetzt mit "setzten"? Etwar die ganzen Textdraw-Daten einfach in den public OnPlayerSkinTextdraw(playerid); reinsetzten? Und dann hinterher und OnPlayerConnect einfach OnPlayerSkinTextdraw(playerid)

    Super! :thumbup:


    Wo soll er das denn auslesen? Kannst du bitte den Code posten?


    Ups, habe es vergessen unter OnPasswordResponse hinzuzufügen :X ...


    aber ich habe jetzt wieder ein Problem mit der Skinanzeige ... :P , und zwar da es nicht mehr den richtigen Anzeigt, wieder die ID 0


    Hier der Code:

    //Hier ist der Textdraw
    Textdraw7[playerid] = CreatePlayerTextDraw(playerid, 526.000000, 292.444458, "LD_SPAC:white");
    PlayerTextDrawLetterSize(playerid, Textdraw7[playerid], 0.000000, 0.000000);
    PlayerTextDrawTextSize(playerid, Textdraw7[playerid], 104.500000, 131.911102);
    PlayerTextDrawAlignment(playerid, Textdraw7[playerid], 1);
    PlayerTextDrawColor(playerid, Textdraw7[playerid], -1);
    PlayerTextDrawSetShadow(playerid, Textdraw7[playerid], 0);
    PlayerTextDrawSetOutline(playerid, Textdraw7[playerid], 0);
    PlayerTextDrawBackgroundColor(playerid, Textdraw7[playerid], 255);
    PlayerTextDrawFont(playerid, Textdraw7[playerid], TEXT_DRAW_FONT_MODEL_PREVIEW);
    PlayerTextDrawSetPreviewModel(playerid,Textdraw7[playerid], SpielerInfo[playerid][Skin]);


    //hier ist dass was unter OnPlayerConnect steht:
    SpielerInfo[playerid][Skin] = cache_get_field_content_int(0,"Skin",dbhandle);


    //selbst wenn ich es ausprinte , dann kommt immer die ID 0 Obwohl eigentlich Skin ID 20 ... kommen sollte...


    So das Register/Login system geht jetzt endlich! Nur irgendwie ließt er nicht mehr das Adminlevel.. oder Fraktion?

    3) okay...


    2)Also anmelden kann ich mich garnicht... also es kommt dieser Dialog das dass Passwort falsch ist.


    1)

    if(dialogid==DIALOG_REGISTER)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[128],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>=3)
    {
    //Registerfunktion
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (username,passwort) VALUES ('%s',MD5('%s')) ",name,passwort);
    mysql_function_query(dbhandle,query,false,"OnPlayerRegister","i",playerid);
    SpawnPlayer(playerid);
    }
    else
    {
    //Kleiner als 4 Zeichen
    ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"Registrierung","Das angegebende Passwort war zu kurz! Bitte versuchs nochmal:","Register","Abbrechen");
    }


    }
    else
    {
    return 1;
    }
    return 1;
    }
    //ich finde kein Callback mit " mysql_tquery "


    okay. es wird immer besser! Aber jedoch einiege Bugs noch :X


    Bugs:
    1) Obwohl ein Account in der Datenbank herrscht , kann ich mich nochmal mit den Regestrieten Account Regestrieren(Eigentlich soll da die Fehlermeldung kommen dass der Spieler schon ein Account hat! )


    2) Das Passwort wird nicht richtig von der Datenbank abgelesen, obwohl ich ich dass richtige eingegeben habe(ist mit MD5 vlt. hilft es ja)


    3) In der Datenbank werden immer wieder neue IDS erstellt , also z.b. ich lösche Datenbank ID 15 , und es geht dann trozdem weiter .. also mit ID 16,17... aber es sollte ein freien Platz suchen.. :/


    Kein Problem :)
    So. also ,


    1) Ich bekomme in der Zeile


    public OnPlayerDataLoaded(playerid)
    {
    if(cache_num_rows() == 0)
    {
    SendClientMessage(playerid, Rot,"[FEHLER] {FFFFFF}Dieser Account ist nicht Regestriert! Um hier spielen zu können, musst du dich Regestrieren!");
    return 1;
    }
    else //Falls doch
    {
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"Login Vorgang","Herzlichen Willkommen zurück auf Incredible German Reallife!\nBitte gib nun dein Password ein!","Login","Abbrechen");
    return 1;
    }
    //printf("There are %d players with the same name.", NumRows);
    return 1;//warning 225: unreachable code
    }


    Und hier der Dialog_Login:

    if(dialogid==DIALOG_LOGIN)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[128],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>0)
    {
    mysql_escape_string(inputtext,passwort,dbhandle);//Fragt ab ob das Passwort richtig ist
    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);
    SpawnPlayer(playerid);

    }
    else
    {
    //keine Eingabe
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Das Angegebene Passwort war Falsch.\nBitte log dich jetzt mit dem richtigen Passwort ein:","Login","Abbrechen");
    }
    }
    else
    {
    return 1;
    }
    return 1;
    }

    Dann hast du bei OnPlayerConnect einen Code stehen, der "OnPlayerDataLoaded" aufruft. Das musst du dann weg machen.


    Hab es jetzt so stehen:

    new query[128], pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
    mysql_format(dbhandle, query, sizeof(query), "SELECT * FROM `user` WHERE `username` = '%e' LIMIT 1", pname);
    mysql_tquery(dbhandle, query, "", "d", playerid);


    ist das richtig? Sry , kenne mich nicht so gut mit MySQL aus.. :/

    Du sollst den Code posten, von dem Textdraw das du andrückst und von dem das den Dialog eigentlich zeigen soll. Du hast nur letzteres gemacht.


    Außerdem steht doch bei Textdraw3 einloggen, was also passt denn nicht?
    Kannst du mal versuchen dich klarer auszudrücken?


    Ja sry, ich versuchs nochmal: Also, wenn ich online komme erscheint das "Login Dilaog" sofort , eigentlich sollte es erst erscheinen wenn ich auf "EINLOGGEN" Drücke....

    Dann poste bitte den Code von dem dazugehörigen Code, von dem Textdraw das du andrückst, und von dem Textdraw, das die Aktion eigentlich ausführen soll.



    else if(clickedid == Textdraw3) //ist der Textdraw der aufgerufen werden soll...
    {
    if(GetPVarInt(playerid,"eingeloggt") == 0)
    {
    new name[MAX_PLAYER_NAME],query[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(query,sizeof(query),"SELECT * FROM user WHERE username='%s'",name);
    mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid);
    }
    }


    Und der Textdraw:
    new Text:Textdraw3;


    Textdraw3 = TextDrawCreate(552.904663, 67.257781, "~r~E~w~inloggen <");
    TextDrawLetterSize(Textdraw3, 0.548995, 2.328000);
    TextDrawTextSize(Textdraw3, 650.00, 20.00);
    TextDrawAlignment(Textdraw3, 1);
    TextDrawColor(Textdraw3, -1);
    //TextDrawUseBox(Textdraw3, true);
    TextDrawBoxColor(Textdraw3, 255);
    TextDrawSetShadow(Textdraw3, 0);
    TextDrawSetOutline(Textdraw3, 1);
    TextDrawBackgroundColor(Textdraw3, 51);
    TextDrawFont(Textdraw3, 0);
    TextDrawSetProportional(Textdraw3, 1);

    Ok, ist auch egal. Poste bitte den Code so wie er jetzt ist, das bekommen wir auch ohne Log hin, so viel ist es ja nicht.


    Alles Klar! :



    else if(clickedid == Textdraw3)
    {
    if(GetPVarInt(playerid,"eingeloggt") == 0)
    {
    if(OnPlayerDataLoaded(playerid))
    {
    SendClientMessage(playerid, Rot,"[FEHLER] {FFFFFF}Dieser Account ist nicht Regestriert! Um hier spielen zu können, musst du dich Regestrieren!");
    return 1;
    }
    else//Falls doch
    {
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"Login Vorgang","Herzlichen Willkommen zurück auf Incredible German Reallife!\nBitte gib nun dein Password ein!","Login","Abbrechen");
    return 1;
    }
    }
    }
    //___________________________________
    public OnPlayerDataLoaded(playerid)
    {
    new NumRows = cache_num_rows();
    //printf("There are %d players with the same name.", NumRows);
    return 1;
    }
    //___________________________________
    if(dialogid==DIALOG_LOGIN)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[128],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>0)
    {
    mysql_escape_string(inputtext,passwort,dbhandle);//Fragt ab ob das Passwort richtig ist
    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);
    SpawnPlayer(playerid);

    }
    else
    {
    //keine Eingabe
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Das Angegebene Passwort war Falsch.\nBitte log dich jetzt mit dem richtigen Passwort ein:","Login","Abbrechen");
    }
    }
    else
    {
    return 1;
    }
    return 1;
    }
    //___________________________________
    public OnPasswordResponse(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1)
    {
    //passwort richtig
    SpielerInfo[playerid][eingeloggt] = 1;
    SpielerInfo[playerid][Level] = cache_get_field_content_int(0,"Level",dbhandle);//So liest man etwas aus der Datenbank!
    SetPlayerScore(playerid,SpielerInfo[playerid][Level]);
    SpielerInfo[playerid][u_id] = cache_get_field_content_int(0,"id",dbhandle);
    SetPlayerMoney(playerid, cache_get_field_content_int(0,"Geldaufhand",dbhandle));
    }
    else
    {
    //passwort Falsch
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Das war das Falsche Passwort.\nBitte log dich jetzt mit dem richtigen Passwort ein:","Login","Abbrechen");
    }
    return 1;
    }

    Bitteschön :thumbup:

    Ja ist nur die mysql_log.txd und da steht genau dass gleiche.


    //EDIT:


    Das Login System geht nicht richtig. Also Register geht einwandfrei(glaube ich) aber wenn ich auf Login drücke, obwohl ich einen Account auf der Datenbank habe, steht da dass ich keinen habe.

    Habe ich unter OnGameModeInit gepackt, und es kommen nun: (Also ist gleich geblieben)
    [17:50:12] [WARNING] cache_get_row_int - no active cache
    [17:50:20] [WARNING] cache_get_row_count - no active cache
    [17:50:23] [WARNING] cache_get_row_count - no active cache

    [21:45:08] [WARNING] cache_get_row_count - no active cache
    [21:45:10] [WARNING] cache_get_row_count - no active cache
    [21:45:11] [WARNING] cache_get_row_count - no active cache
    [21:45:12] [WARNING] cache_get_row_count - no active cache
    [21:51:06] [WARNING] cache_get_row_count - no active cache
    [21:51:09] [WARNING] cache_get_row_count - no active cache
    [21:51:10] [WARNING] cache_get_row_count - no active cache
    [21:51:18] [WARNING] cache_get_row_count - no active cache
    [21:51:19] [WARNING] cache_get_row_count - no active cache
    [21:51:20] [WARNING] cache_get_row_count - no active cache
    [21:51:25] [WARNING] cache_get_row_count - no active cache
    [21:51:25] [WARNING] cache_get_row_count - no active cache
    [21:51:25] [WARNING] cache_get_row_count - no active cache