Beiträge von Jeffry

    Du kannst es natürlich ohne die Publics lösen, aber das wird dir niemand empfehlen.
    Der Code sieht dann so aus:

    Spoiler anzeigen
    case DIALOG_LOGIN:
    {
    if(response)
    {
    if(strlen(inputtext) == 0) // Wenn kein Passwort angegebene wurde
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Anmeldung","Das Angegebene Passwort war Falsch!","Anmelden","Abbrechen");
    return 1;
    }
    else
    {
    new query[256];
    mysql_format(handle, query, sizeof(query), "SELECT * FROM accounts WHERE Name = '%e' AND Passwort = MD5('%e')", SpielerInfo[playerid][pName], inputtext);
    mysql_query(handle, query);
    if(cache_get_row_count() != 0)
    {
    SpielerInfo[playerid][pdb_id] = cache_get_field_content_int(0, "id", handle);
    SpielerInfo[playerid][pLevel] = cache_get_field_content_int(0, "Level", handle);
    SpielerInfo[playerid][pSkin] = cache_get_field_content_int(0, "Skin", handle);
    SpielerInfo[playerid][pGeld] = cache_get_field_content_int(0, "Geld", handle);
    SpielerInfo[playerid][pKills] = cache_get_field_content_int(0, "Kills", handle);
    SpielerInfo[playerid][pTode] = cache_get_field_content_int(0, "Tode", handle);
    SpielerInfo[playerid][pbdaytag] = cache_get_field_content_int(0, "bdaytag", handle);
    SpielerInfo[playerid][pbdaymonat] = cache_get_field_content_int(0, "bdaymonat", handle);
    SpielerInfo[playerid][pbdayjahr] = cache_get_field_content_int(0, "bdayjahr", handle);
    SpielerInfo[playerid][pSex] = cache_get_field_content_int(0, "Sex", handle);
    SpielerInfo[playerid][pSkins] = cache_get_query_string("Skins", handle);
    SpielerInfo[playerid][pSecAntwort] = cache_get_query_string("SecAntwort", handle);
    SpielerInfo[playerid][pSecFrage] = cache_get_field_content_int(0, "SecFrage", handle);
    SpielerInfo[playerid][pLoggedIn] = true;
    if(SpielerInfo[playerid][pSecFrage] != 0)
    {
    //...
    }
    }
    }
    }
    }

    Aber das nimmt dir natürlich den Performancevorteil den du durch das neue Plugin hast, da der Server erst auf die Antwort des MySQL Servers wartet.

    whitetiiger: Das stimmt schon so. Die MD5-Funktion kann in Queries verwendet werden, sonst bräuchte man ein extra Plugin dafür.
    Allerdings muss das Query so aussehen ist mir noch aufgefallen:
    mysql_format(handle, query, sizeof(query), "SELECT * FROM accounts WHERE Name = '%e' AND Passwort = MD5('%e')", SpielerInfo[playerid][pName], inputtext);


    Sonst liest er nur die id aus.
    Habe es oben geändert.

    Du solltest den Cache über ein Callback auslesen und das Query zuvor auch absenden.


    case DIALOG_LOGIN:
    {
    if(response)
    {
    if(strlen(inputtext) == 0) // Wenn kein Passwort angegebene wurde
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Anmeldung","Das Angegebene Passwort war Falsch!","Anmelden","Abbrechen");
    return 1;
    }
    else
    {
    new query[256];
    mysql_format(handle, query, sizeof(query), "SELECT * FROM accounts WHERE Name = '%e' AND Passwort = MD5('%e')", SpielerInfo[playerid][pName], inputtext);
    mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
    }
    }
    }


    forward OnUserLogin(playerid);
    public OnUserLogin(playerid)
    {
    if(cache_get_row_count() != 0)
    {
    SpielerInfo[playerid][pdb_id] = cache_get_field_content_int(0, "id", handle);
    SpielerInfo[playerid][pLevel] = cache_get_field_content_int(0, "Level", handle);
    SpielerInfo[playerid][pSkin] = cache_get_field_content_int(0, "Skin", handle);
    SpielerInfo[playerid][pGeld] = cache_get_field_content_int(0, "Geld", handle);
    SpielerInfo[playerid][pKills] = cache_get_field_content_int(0, "Kills", handle);
    SpielerInfo[playerid][pTode] = cache_get_field_content_int(0, "Tode", handle);
    SpielerInfo[playerid][pbdaytag] = cache_get_field_content_int(0, "bdaytag", handle);
    SpielerInfo[playerid][pbdaymonat] = cache_get_field_content_int(0, "bdaymonat", handle);
    SpielerInfo[playerid][pbdayjahr] = cache_get_field_content_int(0, "bdayjahr", handle);
    SpielerInfo[playerid][pSex] = cache_get_field_content_int(0, "Sex", handle);
    SpielerInfo[playerid][pSkins] = cache_get_query_string("Skins", handle);
    SpielerInfo[playerid][pSecAntwort] = cache_get_query_string("SecAntwort", handle);
    SpielerInfo[playerid][pSecFrage] = cache_get_field_content_int(0, "SecFrage", handle);
    SpielerInfo[playerid][pLoggedIn] = true;
    if(SpielerInfo[playerid][pSecFrage] != 0)
    {
    //...
    }
    }
    return 1;
    }


    PS: Du hast das schon wieder in der MTA Scripting Base gepostet.


    Du kannst - als Hilfestellung - auch mein Tutorial nutzen: [ SCRIPTING ] [jTuT] MySQL R39-3 (Installation, XAMPP, Verwendung, Bedienung & Registrations-System)

    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(Condition[playerid] == CONDITION_DOWNED)
    {
    if(newkeys & (KEY_HANDBRAKE))
    {
    if(Downstate_DialogSwitch[playerid] == true)
    {
    Downstate_DialogSwitch[playerid] = false;
    ShowPlayerDialog(playerid, 9999999, DIALOG_STYLE_MSGBOX, "a", "a", "a", "a");
    print("Close");
    }
    else
    {
    Downstate_DialogSwitch[playerid] = true;

    new
    ds[MAX_LANGUAGES][150];

    format(ds[LANGUAGE_DE], sizeof(ds[]), "Blutung stoppen\nLetzte Kraft\nHilferuf\nBlutbeutel (%d)\nMorphin (%d)\nBeruhigungsmittel (%d)\nAdrenalin (%d)", Item_Bloodbag[playerid], Item_Morphine[playerid], Item_Tranquilizer[playerid], Item_Adrenaline[playerid]);
    format(ds[LANGUAGE_EN], sizeof(ds[]), "Stop the bleeding\nLast strength\nCall for help\nBloodbag (%d)\nMorphine (%d)\nTranquilizer (%d)\nAdrenaline (%d)", Item_Bloodbag[playerid], Item_Morphine[playerid], Item_Tranquilizer[playerid], Item_Adrenaline[playerid]);
    ShowLanguageDialog(playerid, DIALOG_DOWNSTATE, DIALOG_STYLE_LIST, "Downstate Aktionen", "Downstate actions", ds[LANGUAGE_DE], ds[LANGUAGE_EN], "OK", "OK", "", "");
    print("Open");
    }
    }
    }
    return 1;
    }
    Versuche es so.


    Wenn das nicht geht, dann wird das Callback wohl zwei mal aufgerufen, und direkt nach dem Close müsste wieder Open angezeigt werden.
    Dann müsstest du einen kurzen Zeitstempel-Block einbauen, damit dieser Teil innerhalb von sagen wir 50ms nicht nochmal ausgeführt wird.

    ocmd:navitest(playerid,params[])
    {
    new hID;
    if(sscanf(params, "d", hID))return SendClientMessage(playerid, COLOR_RED, "INFO: /navitest [Hausnummer]");
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(hInfo[i][h_id]==hID)
    {
    SetPlayerCheckpoint(playerid,hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z],1.0);
    return 1;
    }
    }
    return SendClientMessage(playerid,C_Error,"Diese Hausnummer ist nicht verfügbar.");
    }

    Danke!


    Warum ist Maddins Variante (Tutorial) "veraltet", beziehungsweise, ist diese Variante noch zu empfehlen, das mit dem Funtkionen erstellen, um die Spielerdaten zu holen?


    Das R5 Plugin kann nicht mit mehreren Threads und Caches umgehen, das ist der Hauptgrund für den Geschwindigkeitsunterschied.


    Diese Funktionen für einfache Aufrufe sollten gemieden werden, denn wenn du 50 Stats lädst, dann werden 50 SELECT Queries gesendet, und das dauert. Das ist zwar eine einfache Variante, aber so ziemlich die schlechteste von der Performance her.

    public SpielerSpeichern(playerid)
    {
    printf("SpielerSpeichern: %d", playerid);
    printf("Eingeloggt: %d", SpielerInfo[playerid][Eingeloggt]);
    if(SpielerInfo[playerid][Eingeloggt]!=1)return 1;
    if(isttot[playerid]==0)
    {
    tot[playerid]=0;
    }
    printf("Speichere...");
    mysql_queryf("UPDATE user SET saving='1' WHERE Name='%s'",SpielerName(playerid));
    mysql_free_result();
    //mysql_query(query,10,0,mysql_save);
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(query,sizeof(query),"UPDATE user SET Geld='%i',Wanteds='%i',Alevel='%i',Jail='%i',Mats='%i',Jailed='%i',TutorialFinished='%i',Death='%i',saving_start='%i' WHERE Name='%s';",GetPlayerMoney(playerid),SpielerInfo[playerid][Wanteds],SpielerInfo[playerid][Admin],SpielerInfo[playerid][Jail],SpielerInfo[playerid][Mats],SpielerInfo[playerid][Jailed],SpielerInfo[playerid][TutorialFinished],SpielerInfo[playerid][contract],tot[playerid],gettime(),name);
    mysql_query(query,1,playerid,mysql_save);
    printf("query: %s", query);
    format(query,sizeof(query),"UPDATE user SET Spawnchange='%i', Baned='%i', Fraktion='%i', Rang='%i',Job='%i',HIN='%i',Level='%i',Respekt='%i',Car='%i' WHERE Name='%s';",SpielerInfo[playerid][Spawnchange],SpielerInfo[playerid][ban],SpielerInfo[playerid][Frakt],SpielerInfo[playerid][Rank],SpielerInfo[playerid][Job],SpielerInfo[playerid][HIN],SpielerInfo[playerid][Level],SpielerInfo[playerid][Respekt],SpielerInfo[playerid][Car],name);
    mysql_query(query,1,playerid,mysql_save);
    format(query,sizeof(query),"UPDATE user SET Paytime='%i',Bank='%i',Motel='%i',pRank='%i',Geschlecht='%i',Skin='%i',phonebook='%i',rented='%i',alg='%i',flug='%i' WHERE Name='%s';",SpielerInfo[playerid][Paytime],SpielerInfo[playerid][Bank],SpielerInfo[playerid][Motel],SpielerInfo[playerid][pRank],SpielerInfo[playerid][Geschlecht],SpielerInfo[playerid][Skin],SpielerInfo[playerid][phonebook],SpielerInfo[playerid][rented],SpielerInfo[playerid][alg],SpielerInfo[playerid][flug],name);
    mysql_query(query,1,playerid,mysql_save);
    format(query,sizeof(query),"UPDATE user SET WSchein='%i',Zollpass='%i',Aversicherung='%i' WHERE Name='%s';",SpielerInfo[playerid][WSchein],SpielerInfo[playerid][zollpass],SpielerInfo[playerid][aversicherung],name);
    mysql_query(query,1,playerid,mysql_save);
    format(query,sizeof(query),"UPDATE user SET bl='%i',C4='%i',pangel='%i' WHERE Name='%s';",SpielerInfo[playerid][bl],SpielerInfo[playerid][C4],SpielerInfo[playerid][pangel],name);
    mysql_query(query,1,playerid,mysql_save);
    format(query,sizeof(query),"UPDATE user SET kirche='%i',frees='%i' WHERE Name='%s';",SpielerInfo[playerid][kirche],SpielerInfo[playerid][frees],name);
    mysql_query(query,1,playerid,mysql_save);
    format(query,sizeof(query),"UPDATE user SET gefischt='%i',gehalt='%i',robtime='%i',hanf='%i',explodetime='%i',warn='%i' WHERE Name='%s';",SpielerInfo[playerid][gefischt],SpielerInfo[playerid][pgehalt],SpielerInfo[playerid][robtime],SpielerInfo[playerid][phanf],SpielerInfo[playerid][explodetime],SpielerInfo[playerid][warn],name);
    mysql_query(query,1,playerid,mysql_save);
    format(query,sizeof(query),"UPDATE user SET lsd='%i',dutyskin='%i',quittime='%i',drivingskill='%i',drivingpoints='%i',totx='%f',toty='%f',totz='%f',totvirtual='%i',totinterior='%i' WHERE Name='%s';",SpielerInfo[playerid][lsd],SpielerInfo[playerid][dutyskin],SpielerInfo[playerid][quittime],SpielerInfo[playerid][drivingskill],SpielerInfo[playerid][drivingpoints],TotX[playerid],TotY[playerid],TotZ[playerid],totvirtual[playerid],totinterior[playerid],name);
    mysql_query(query,1,playerid,mysql_save);
    format(query,sizeof(query),"UPDATE user SET GWD='%i',lunch='%i',reisepass='%i',gang='%i',grank='%i',alka='%i',guser='%s',helm='%i',scheintime='%i',bike='%i' WHERE Name='%s';",SpielerInfo[playerid][GWD],SpielerInfo[playerid][lunch],SpielerInfo[playerid][reisepass],SpielerInfo[playerid][gang],SpielerInfo[playerid][grank],SpielerInfo[playerid][alka],SpielerInfo[playerid][guser],SpielerInfo[playerid][helm],SpielerInfo[playerid][stime],SpielerInfo[playerid][bike],name);
    mysql_query(query,1,playerid,mysql_save);
    format(query,sizeof(query),"UPDATE user SET partner='%s',muted='%i',koks='%i',leader='%i',card='%i',eventwarn='%i',races='%i',wins='%i',handy='%i' WHERE Name='%s';",SpielerInfo[playerid][partner],GetPVarInt(playerid,"muted"),SpielerInfo[playerid][koks],SpielerInfo[playerid][leader],SpielerInfo[playerid][card],SpielerInfo[playerid][eventwarn],SpielerInfo[playerid][races],SpielerInfo[playerid][wins],SpielerInfo[playerid][handy],name);
    mysql_query(query,1,playerid,mysql_save);
    format(query,sizeof(query),"UPDATE user SET vertrag='%i', flatrate='%i', coins='%i',telefoniert='%i',pizza0='%i',pizza1='%i',punkte='%i' WHERE Name='%s';",SpielerInfo[playerid][vertrag],SpielerInfo[playerid][flatrate],SpielerInfo[playerid][coins],SpielerInfo[playerid][ptelefoniert],SpielerInfo[playerid][pizza0],SpielerInfo[playerid][pizza1],SpielerInfo[playerid][punkte],name);
    mysql_query(query,1,playerid,mysql_save);
    format(query,sizeof(query),"UPDATE user SET distance='%f',kasten='%i',Subrang='%i',dmkills='%i',dmdeaths='%i',dmpunkte='%i',donuts='%i' WHERE Name='%s';",SpielerInfo[playerid][pdistance],SpielerInfo[playerid][kasten],SpielerInfo[playerid][Subrank],GetPVarInt(playerid,"dmkills"),GetPVarInt(playerid,"dmdeaths"),GetPVarInt(playerid,"dmpunkte"),SpielerInfo[playerid][donuts],name);
    mysql_query(query,1,playerid,mysql_save);
    format(query,sizeof(query),"UPDATE user SET morde='%i',gestime='%i',kanister='%i',boatschein='%i',lkwschein='%i',angelschein='%i' WHERE Name='%s';",SpielerInfo[playerid][morde],SpielerInfo[playerid][gestime],SpielerInfo[playerid][kanister],SpielerInfo[playerid][boatschein],SpielerInfo[playerid][lkwschein],SpielerInfo[playerid][angelschein],name);
    mysql_query(query,1,playerid,mysql_save);
    format(query,sizeof(query),"UPDATE user SET gwkills='%i',gwtode='%i',gwflaggen='%i',gwstarted='%i',fskill='%i',lmittel='%i',zelle='%i' WHERE Name='%s';",SpielerInfo[playerid][gwkills],SpielerInfo[playerid][gwtode],SpielerInfo[playerid][gwflaggen],SpielerInfo[playerid][gwstarted],SpielerInfo[playerid][fskill],GetPVarInt(playerid,"lebensmittel"),GetPVarInt(playerid,"zelle"),name);
    mysql_query(query,1,playerid,mysql_save);
    format(query,sizeof(query),"UPDATE user SET radio='%i',radioURL='%s',pausweis='%i',anzug='%i',premium='%i',fightstyle='%i' WHERE Name='%s';",GetPVarInt(playerid,"radio"),GetPVarStringEx(playerid,"radioURL"),SpielerInfo[playerid][pausweis],GetPVarInt(playerid,"anzug"),SpielerInfo[playerid][u_premium],SpielerInfo[playerid][fightstyle],name);
    mysql_query(query,1,playerid,mysql_save);
    format(query,sizeof(query),"UPDATE user SET swat='%i',karttime='%i',deckname='%s' WHERE Name='%s'",SpielerInfo[playerid][swat],SpielerInfo[playerid][karttime],SpielerInfo[playerid][deckname],name);
    mysql_query(query,1,playerid,mysql_save);
    format(query,sizeof(query),"UPDATE user SET cartows='%i',death_reason='%i',saving='0',saving_end=UNIX_TIMESTAMP() WHERE Name='%s'",SpielerInfo[playerid][cartows],GetPVarInt(playerid,"death_reason"),name);
    mysql_query(query,1,playerid,mysql_save);
    printf("Fertig.");
    return 1;
    }


    Dann schreibe es jetzt so und poste dann was im Server Log steht, und zwar von Connect, über Tutorial, dann was kaufen und dann den Server verlassen.

    Habe es ausprobiert. Das Problem ist, dass du nichts im Dialog stehen hast. So geht es bei mir weg:
    ShowPlayerDialog(playerid, 9999999, DIALOG_STYLE_MSGBOX, "a", "a", "a", "a");


    Insgesamt:
    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(Condition[playerid] == CONDITION_DOWNED)
    {
    if(RELEASED(KEY_HANDBRAKE))
    {
    ShowPlayerDialog(playerid, 9999999, DIALOG_STYLE_MSGBOX, "a", "a", "a", "a"); //Hide dialog when RMB is pressed
    }
    else if(newkeys & (KEY_HANDBRAKE))
    {
    new ds[MAX_LANGUAGES][150];

    format(ds[LANGUAGE_DE], sizeof(ds[]), "Blutung stoppen\nLetzte Kraft\nHilferuf\nBlutbeutel (%d)\nMorphin (%d)\nBeruhigungsmittel (%d)\nAdrenalin (%d)", Item_Bloodbag[playerid], Item_Morphine[playerid], Item_Tranquilizer[playerid], Item_Adrenaline[playerid]);
    format(ds[LANGUAGE_EN], sizeof(ds[]), "Stop the bleeding\nLast strength\nCall for help\nBloodbag (%d)\nMorphine (%d)\nTranquilizer (%d)\nAdrenaline (%d)", Item_Bloodbag[playerid], Item_Morphine[playerid], Item_Tranquilizer[playerid], Item_Adrenaline[playerid]);
    ShowLanguageDialog(playerid, DIALOG_DOWNSTATE, DIALOG_STYLE_LIST, "Downstate Aktionen", "Downstate actions", ds[LANGUAGE_DE], ds[LANGUAGE_EN], "OK", "OK", "", "");
    }
    }
    return 1;
    }


    Das funktioniert allerdings nur mit dem Gamepad, da durch den Dialog und die Maus der Rechtsklick als losgelassen erkannt wird, es flackert dann wie verrückt. Mit der Tastatur das Gleiche.
    Mit dem Gamepad geht's.

    Versuche es mal so rum:
    public OnFilterScriptInit()
    {
    print("<-| [Es wird geladen!!");
    Connect_To_Database();
    LoadLSbizSkinShop();
    return 1;
    }


    Du fragst sonst erst MySQL Daten ab, bevor du die Verbindung herstellst, das geht nicht.


    Außerdem solltest du auf die neuste MySQL Plugin Version umsteigen.


    PS: Du hast es in der MTA Scripting Base gepostet. Das ist falsch.