Fahrzeuge in MySQL Speichern

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
  • Wie meinst du das, abstand nehmen ?
    //edit
    Es dauert noch ca 8 Sekunden, zwar bisschen nervig aber besser als davor, danke :)


    Pass auf, ich spawne per Befehl ein Auto(admincar)
    ich will da rein steigen dann sagt er mir du hast keinen Schlüssel :O?
    und wenn ich mein Autohaus mit einbaue ist da das gleiche Problem...


    if(GetVehicleFrak(vehicleid) != SpielerInfo[playerid][pTeam] && isinADAC[playerid] != 1 && ispassenger)
    {
    SendClientMessage(playerid,hinweis1,"Du hast keinen Schlüssel!");
    TogglePlayerControllable(playerid,false);
    TogglePlayerControllable(playerid,true);
    }



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF ()

  • Schreibe es so:
    new frak = GetVehicleFrak(vehicleid);
    if(frak != -1 && frak != SpielerInfo[playerid][pTeam] && isinADAC[playerid] != 1 && ispassenger)
    {
    SendClientMessage(playerid,hinweis1,"Du hast keinen Schlüssel!");
    TogglePlayerControllable(playerid,false);
    TogglePlayerControllable(playerid,true);
    }



    Ich meine, dass man diese Funktionen nicht verwendet, sondern es mit den eigentlichen Funktionen macht (etwas komplizierter), das ist viel performanter, weil du sendest ja beim Speichern pro Fahrzeug ca. 20 Queries, anstatt eins, und beim Laden ebenfalls.
    MySQL hat das meistens nicht so gern. Manchmal macht es auch nichts aus, das kommt immer drauf an.
    Weißt du wie das geht?

  • Das ist dann wohl auch der Grund wieso das laden bzw hochfahren vom Server so ewig dauert..
    Nein ich weiß leider nicht wie das geht :/
    Und bei den Kassen ist das genau so?
    Will ja das der Server mal schnell läuft :/



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Ja, das ist dann bei allen gleich. Schick mir bitte mal das Laden und Speichern der Kassen, dann zeige ich es dir wieder anhand dessen, und du übernimmst es dann für die Fahrzeuge, damit du es gleich lernst, und nicht nur kopierst.


    Klar, 8 Sekunden sind viel zu lang.


    Nutzt du viel mit MySQL bereits? Wenn nicht, dann wäre es nämlich sinnvoll, wenn du gleich auf die neuste Version upgradest, sprich die R39-2. Wenn wir schon dabei sind, das umzuschreiben, dann gleich richtig, oder?

  • Hier mal von den Kassen :)


    stock LoadKassen()
    {
    new string[3], query[128], bool:added;
    for(new i=1; i < MAX_FRAKTION; i++)
    {
    format(string, sizeof string, "%d", i);
    format(KassenInfo[i][fName], 32, mysql_GetString("Kassen", "Name", "ID", string));
    if(!strlen(KassenInfo[i][fName]))
    {
    switch(i)
    {
    case 1: format(KassenInfo[i][fName], 32, "Staatskasse");
    case 2: format(KassenInfo[i][fName], 32, "Test1");
    case 3: format(KassenInfo[i][fName], 32, "Test2");
    case 4: format(KassenInfo[i][fName], 32, "Test3");
    case 5: format(KassenInfo[i][fName], 32, "ADAC");
    }
    format(query, sizeof(query), "INSERT INTO Kassen (ID) VALUES ('%d')", i);
    mysql_query(query);
    added = true;
    }
    KassenInfo[i][fGeld] = mysql_GetInt("Kassen", "Geld", "ID", string);
    KassenInfo[i][fDrogen] = mysql_GetInt("Kassen", "Drogen", "ID", string);
    KassenInfo[i][fWaffen] = mysql_GetInt("Kassen", "Waffen", "ID", string);
    }
    if(added) SaveKassen();
    return 1;
    }


    stock SaveKassen()
    {
    new string[3];
    for(new i=1; i < MAX_FRAKTION; i++)
    {
    format(string, sizeof string, "%d", i);
    mysql_SetString("Kassen", "Name", KassenInfo[i][fName], "ID", string);
    mysql_SetInt("Kassen", "Geld", KassenInfo[i][fGeld], "ID", string);
    mysql_SetInt("Kassen", "Drogen", KassenInfo[i][fDrogen], "ID", string);
    mysql_SetInt("Kassen", "Waffen", KassenInfo[i][fWaffen], "ID", string);
    }
    return 1;
    }



    Also bis jetzt nutze ich eigentlich alles über MySQL und das wird sich auch noch vermehren (Haussys, Bizsys und Carsys)
    Hab schon jetzt 3 Datenbanken..
    Klar, also wenn das an der geschwindigkeit was ändert gerne !


    Danke für die Mühe und Hilfe :)



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Ok, dann wirst du jetzt einiges zu tun haben, aber das ist es wert. Ich antworte erst so spät, da ich noch anderweitig beschäftigt war und das hier nicht nebenher schreiben konnte.


    1.) Kommentiere alles was momentan mit MySQL zu tun hat aus, du musst es ja alles neu schreiben, bzw. umändern.
    2.) Lade dir das neuste MySQL Plugin herunter: https://github.com/pBlueG/SA-MP-MySQL/releases/tag/R39-2
    3.) Nimm das Kassen-Beispiel und teste es (lösche vorher die Daten in der Kassen-Tabelle).


    Ich hoffe, dass das auf Anhieb so klappt. Wenn nicht, sag bitte Bescheid.


    A)
    Ersetze:
    LoadKassen();
    in OnGameModeInit mit:
    mysql_tquery(handle, "SELECT * FROM Kassen ORDER BY ID ASC", "LoadKassen", "d", 0);


    B)
    Schreibe den LoadKassen-stock um zu (bzw. überschreibe es mit Copy/Paste):
    forward LoadKassen(secure);
    public LoadKassen(secure)
    {
    new query[128], bool:added, rows = cache_num_rows();
    for(new i=1; i < MAX_FRAKTION; i++)
    {
    if(i > rows || cache_get_field_content_int(i-1, "ID") != i) //i-1 bei den cache-Funktionen, da diese bei 0 anfangen zu zählen
    {
    switch(i)
    {
    case 1: format(KassenInfo[i][fName], 32, "Staatskasse");
    case 2: format(KassenInfo[i][fName], 32, "Test1");
    case 3: format(KassenInfo[i][fName], 32, "Test2");
    case 4: format(KassenInfo[i][fName], 32, "Test3");
    case 5: format(KassenInfo[i][fName], 32, "ADAC");
    }
    format(query, sizeof(query), "INSERT INTO Kassen (ID, Name) VALUES ('%d', '%s')", i, KassenInfo[i][fName]);
    mysql_tquery(handle, query);
    added = true;
    continue;
    }
    cache_get_field_content(i-1, "Name", KassenInfo[i][fName]);
    KassenInfo[i][fGeld] = cache_get_field_content_int(i-1, "Geld");
    KassenInfo[i][fDrogen] = cache_get_field_content_int(i-1, "Drogen");
    KassenInfo[i][fWaffen] = cache_get_field_content_int(i-1, "Waffen");
    }
    if(added && secure < 10) mysql_tquery(handle, "SELECT * FROM Kassen ORDER BY ID ASC", "LoadKassen", "d", secure+1);
    //Ich habe diese secure Variable hinzugefügt, da eine theoretische Chance besteht, dass wir hier durch einen
    //Fehler in einer Endlosschleife enden. Unter normalen Voraussetzungen wird dies nie der Fall sein, und secure
    //wird maximal den Wert 1 erreichen, aber sicher ist sicher.
    return 1;
    }


    C)
    Ändere den SaveKassen-stock zu:
    stock SaveKassen()
    {
    new query[512];
    for(new i=1; i < MAX_FRAKTION; i++)
    {
    format(query, sizeof(query), "UPDATE Kassen SET Name = '%s', Geld = '%d', Drogen = '%d', Waffen = '%d' WHERE ID = '%d'",
    KassenInfo[i][fName], KassenInfo[i][fGeld], KassenInfo[i][fDrogen], KassenInfo[i][fWaffen], i);
    mysql_tquery(handle, query);
    }
    return 1;
    }


    Wenn das drin ist, und ohne Probleme kompiliert, teste es aus, und schaue, ob es deine Kassen korrekt einträgt (wie wir es damals per TeamViewer gemacht haben). Die Ansicht in der Tabelle aktualisierst du mit F5, falls du sie offen hast und nichts drin steht.
    Wenn alles klappt, dann kannst du dich an dem Laden/Speichern der Fahrzeuge versuchen. Gleiches Prinzip.




    PS: Danke für die Widmung in deiner Signatur. :)

  • Ouuh, dann muss ich ja auch das Login/Register System neu machen :)?


    Hab alles mit /* */ auskommentiert.
    hab jetzt mit dem neuen System 3 Errors
    error 017: undefined symbol "handle"


    Sonst müsste alles passen denk ich..
    musste jetzt aber auch die Connect Funktion zur Datenbank auskommentiert..


    MfG und Danke :P



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Ja so könnte ich den Error weg bekommen, doch das macht bestimmt kein Sinn weil ich das bestimmt irgendwie anders definieren müsste, hat bestimmt seine Funktion oder nicht?



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Mehr oder Weniger, ja :D



    Schau mal, muss ich da diese Case dinger weg machen ?
    oder kommt da was anderes rein?


    public LoadPlayer(secure)
    {
    new query[128], bool:added, rows = cache_num_rows();
    for(new i=1; i < MAX_FRAKTION; i++)
    {
    if(i > rows || cache_get_field_content_int(i-1, "ID") != i) //i-1 bei den cache-Funktionen, da diese bei 0 anfangen zu zählen
    {
    switch(i)
    {
    case 1: format(KassenInfo[i][fName], 32, "Staatskasse");
    case 2: format(KassenInfo[i][fName], 32, "Test1");
    case 3: format(KassenInfo[i][fName], 32, "Test2");
    case 4: format(KassenInfo[i][fName], 32, "Test3");
    case 5: format(KassenInfo[i][fName], 32, "ADAC");
    }
    format(query, sizeof(query), "INSERT INTO accounts (ID, Name) VALUES ('%d', '%s')", i, SpielerInfo[i][pName]);
    mysql_tquery(handle, query);
    added = true;
    continue;
    }
    cache_get_field_content(i-1, "Name", SpielerInfo[i][pName]);
    SpielerInfo[i][pLevel] = cache_get_field_content_int(i-1, "Level");
    SpielerInfo[i][pGeld] = cache_get_field_content_int(i-1, "Geld");
    SpielerInfo[i][pKills] = cache_get_field_content_int(i-1, "Kills");
    SpielerInfo[i][pTode] = cache_get_field_content_int(i-1, "Tode");
    SpielerInfo[i][pAdmin] = cache_get_field_content_int(i-1, "Admin");
    SpielerInfo[i][pBanned] = cache_get_field_content_int(i-1, "Banned");
    SpielerInfo[i][pLeader] = cache_get_field_content_int(i-1, "Leader");
    SpielerInfo[i][pMember] = cache_get_field_content_int(i-1, "Member");
    SpielerInfo[i][pTeam] = cache_get_field_content_int(i-1, "Team");
    SpielerInfo[i][pRank] = cache_get_field_content_int(i-1, "Rank");
    SpielerInfo[i][pDuty] = cache_get_field_content_int(i-1, "Duty");
    SpielerInfo[i][pSkin] = cache_get_field_content_int(i-1, "Skin");
    SpielerInfo[i][pRank] = cache_get_field_content_int(i-1, "xKord");
    SpielerInfo[i][pDuty] = cache_get_field_content_int(i-1, "yKord");
    SpielerInfo[i][pSkin] = cache_get_field_content_int(i-1, "zKord");

    }
    if(added && secure < 10) mysql_tquery(handle, "SELECT * FROM accounts ORDER BY ID ASC", "LoadPlayer", "d", secure+1);
    //Ich habe diese secure Variable hinzugefügt, da eine theoretische Chance besteht, dass wir hier durch einen
    //Fehler in einer Endlosschleife enden. Unter normalen Voraussetzungen wird dies nie der Fall sein, und secure
    //wird maximal den Wert 1 erreichen, aber sicher ist sicher.
    return 1;
    }



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Das heisst, ich müsste statt source playerid machen?


    forward LoadPlayer(playerid);
    public LoadPlayer(playerid)//68
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))//70
    {//71
    if(GetPVarInt(playerid,"Eingeloggt") == 1)
    {
    cache_get_field_content(playerid-1, "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pLevel] = cache_get_field_content_int(playerid-1, "Level");
    SpielerInfo[playerid][pGeld] = cache_get_field_content_int(playerid-1, "Geld");
    SpielerInfo[playerid][pKills] = cache_get_field_content_int(playerid-1, "Kills");
    SpielerInfo[playerid][pTode] = cache_get_field_content_int(playerid-1, "Tode");
    SpielerInfo[playerid][pAdmin] = cache_get_field_content_int(playerid-1, "Admin");
    SpielerInfo[playerid][pBanned] = cache_get_field_content_int(playerid-1, "Banned");
    SpielerInfo[playerid][pLeader] = cache_get_field_content_int(playerid-1, "Leader");
    SpielerInfo[playerid][pMember] = cache_get_field_content_int(playerid-1, "Member");
    SpielerInfo[playerid][pTeam] = cache_get_field_content_int(playerid-1, "Team");
    SpielerInfo[playerid][pRank] = cache_get_field_content_int(playerid-1, "Rank");
    SpielerInfo[playerid][pDuty] = cache_get_field_content_int(playerid-1, "Duty");
    SpielerInfo[playerid][pSkin] = cache_get_field_content_int(playerid-1, "Skin");
    SpielerInfo[playerid][pRank] = cache_get_field_content_int(playerid-1, "xKord");
    SpielerInfo[playerid][pDuty] = cache_get_field_content_int(playerid-1, "yKord");
    SpielerInfo[playerid][pSkin] = cache_get_field_content_int(playerid-1, "zKord");

    }
    }

    return 1;
    }


    und SavePlayer


    stock SavePlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 1)
    {
    new query[512];
    format(query, sizeof(query), "UPDATE Kassen SET Name = '%s', Level = '%d', Geld = '%d', Kills = '%d', Tode = '%d', Admin = '%d', Banned, Leader = '%d', Member = '%d', Team = '%d', Rank = '%d', Duty = '%d', Skin = '%d', Health = '%d', xKord = '%d', yKord = '%d', zKord, Interior = '%d' = '%d' = '%d' WHERE ID = '%d'",
    SpielerInfo[playerid][pName], SpielerInfo[playerid][pName], SpielerInfo[playerid][pLevel], SpielerInfo[playerid][pGeld], SpielerInfo[playerid][pKills], SpielerInfo[playerid][pTode], SpielerInfo[playerid][pAdmin], SpielerInfo[playerid][pBanned], SpielerInfo[playerid][pLeader], SpielerInfo[playerid][pMember], SpielerInfo[playerid][pTeam], SpielerInfo[playerid][pRank], SpielerInfo[playerid][pDuty], SpielerInfo[playerid][pSkin], SpielerInfo[playerid][pHealth], SpielerInfo[playerid][xKord], SpielerInfo[playerid][yKord], SpielerInfo[playerid][zKord], SpielerInfo[playerid][pInterior], playerid);
    mysql_tquery(handle, query);
    }
    }
    return 1;
    }



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF ()

  • Ok, gut ich hab es jetzt so gemacht


    SpielerInfo[playerid][pLevel] = cache_get_field_content_int(playerid, "Level");


    So, nun zum Reg/Log System, die Verbindung zur Datenbank besteht und die FrakKasse wird erstellt.
    Aber wenn ich jetzt mein Login/Register System machen will überforder es mich etwas, da funktionen dabei sind die ich nicht mit deinem System gleichstellen kann wie bsp.
    stock mysql_CheckAccount(playerid)
    {
    new Query[128],Name[MAX_PLAYER_NAME],count;
    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    mysql_real_escape_string(Name, Name);
    format(Query, sizeof(Query), "SELECT * FROM `accounts` WHERE `Name` = '%s'", Name);
    mysql_query(Query);
    mysql_store_result();
    count = mysql_num_rows();
    mysql_free_result();
    return count;
    }
    stock CreateAccount(playerid, pass[])
    {
    new query[256],Name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    mysql_real_escape_string(Name,Name);
    mysql_real_escape_string(pass,pass);
    format(query, sizeof(query), "INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('%s', '%s')", Name, pass);
    mysql_query(query);
    return true;
    }
    stock mysql_ReturnPasswort(Name[])
    {
    new query[130], Get[130];
    mysql_real_escape_string(Name, Name);
    format(query, 128, "SELECT `passwort` FROM `accounts` WHERE `Name` = '%s'", Name);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row(Get);
    mysql_free_result();
    return Get;
    }


    Wenn ich wüsste wie ich das umbaue, könnte ich weiter machen :)



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Nicht ganz, playerid ist nicht unbedingt 0.
    Schreibe es bei allen so:
    SpielerInfo[playerid][pLevel] = cache_get_field_content_int(playerid, "Level");
    zu:
    SpielerInfo[playerid][pLevel] = cache_get_field_content_int(0, "Level");
    0 ist die erste Zeile des Caches. Da der Spieler ja nur eine Zeile hat passt das.


    Zu den anderen Funktionen:
    mysql_CheckAccount(playerid):
    Poste bitte, wie das im Zusammenhang mit dem restlichen Code drum herum aufgerufen wird. Dann kann ich dir sagen, wie du das machen musst.


    CreateAccount(playerid, pass[]):
    stock CreateAccount(playerid, pass[])
    {
    new query[256],Name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    mysql_format(handle, query, sizeof(query), "INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('%e', '%e')", Name, pass);
    mysql_tquery(handle, query);
    return true;
    }


    mysql_ReturnPasswort(Name[]):
    Poste auch hier bitte, wie das im Zusammenhang mit dem anderen Code steht, der das aufruft, da das so nicht mehr realsisierbar ist, bzw. nur bedingt, falls unbedingt nötig, aber in 99.99% kann man es sinnvoll und ohne viel Aufwand umschreiben.

  • Alles klar, erledigt.


    Pass auf, Checkaccount wird hier aufgerufen:
    public OnPlayerRequestClass(playerid, classid)
    if(GetPVarInt(playerid,"Eingeloggt") == 0)
    {
    if(mysql_CheckAccount(playerid) == 0)
    {
    SendClientMessage(playerid, 0xFFFFFFFF,"________Herzlich Wilkommen auf San Francisco Reallife________");
    SendClientMessage(playerid, 0xFFFFFFFF,"Datenbank: Akte konnte nicht gefunden werden. Bitte Registrieren Sie sich!");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrieren","Bitte gib dein Persöhnliches Passwort ein:","Register","Abbrechen");
    }
    else if(mysql_CheckAccount(playerid) == 1)
    {
    SendClientMessage(playerid, 0xFFFFFFFF,"________Herzlich Wilkommen auf San Francisco Reallife________");
    SendClientMessage(playerid, 0xFFFFFFFF,"Datenbank: Akte wurde gefunden. Bitte Loggen Sie sich ein!");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Einloggen","Bitte gib dein Passwort ein:","Login","Abbrechen");
    }
    }
    Das wars.


    CreateAccount/ReturnPassword hier:


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])


    switch(dialogid)
    {
    case DIALOG_REGISTER:
    {
    if(response)
    {
    if(strlen(inputtext) == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Regestration","Datenbank: Das angegebene Passwort ist zu kurz!","Register","Abbrechen");
    return 1;
    }
    else
    {
    CreateAccount(playerid, inputtext);
    SetPVarInt(playerid,"Eingeloggt",1);
    SpawnPlayer(playerid);
    SetSpawnInfo(playerid, 0, 0, -1982.5010,140.7040,27.6875,89.0363, 0, 0, 0, 0, 0, 0 );
    return 1;
    }
    }
    else
    {
    Kick(playerid);
    }
    }
    case DIALOG_LOGIN:
    {
    if(response)
    {
    if(strlen(inputtext) == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Einloggen","Datenbank: Das angegebene Passwort ist falsch!","Login","Abbrechen");
    return 1;
    }
    else
    {
    new PlayerName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, PlayerName, MAX_PLAYER_NAME);
    if(!strcmp(inputtext, mysql_ReturnPasswort(PlayerName), true))
    {
    SetPVarInt(playerid,"Eingeloggt",1);
    LoadPlayer(playerid);
    SpawnPlayer(playerid);
    return 1;
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Einloggen","Datenbank: Das war das falsche Passwort!","Login","Abbrechen");
    return 1;
    }
    }
    }
    else
    {
    Kick(playerid);
    }
    }
    }


    Danke, für deine hilfe :)


    //Edit:
    Wie schaut es eigentlich mit
    mysql_GetString
    mysql_SetFloat
    mysql_SetString
    mysql_SetInt
    Float:mysql_GetFloat
    mysql_GetInt


    Aus, die kann ich löschen oder?



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF ()

  • Ok, super! Das ist ja kein Aufwand.
    So muss es dann aussehen:


    Bei OnPlayerRequestClass:
    if(GetPVarInt(playerid,"Eingeloggt") == 0)
    {
    new query[128], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    mysql_format(handle, query, sizeof(query), "SELECT name FROM users WHERE name = '%e'", name); //name und users zu deinem anpassen!!
    mysql_tquery(handle, query, "CheckAccount", "d", playerid);
    }


    Ganz unten im Gamemode:
    forward CheckAccount(playerid);
    public CheckAccount(playerid)
    {
    if(cache_num_rows() == 0)
    {
    SendClientMessage(playerid, 0xFFFFFFFF,"________Herzlich Wilkommen auf San Francisco Reallife________");
    SendClientMessage(playerid, 0xFFFFFFFF,"Datenbank: Akte konnte nicht gefunden werden. Bitte Registrieren Sie sich!");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrieren","Bitte gib dein Persöhnliches Passwort ein:","Register","Abbrechen");
    }
    else
    {
    SendClientMessage(playerid, 0xFFFFFFFF,"________Herzlich Wilkommen auf San Francisco Reallife________");
    SendClientMessage(playerid, 0xFFFFFFFF,"Datenbank: Akte wurde gefunden. Bitte Loggen Sie sich ein!");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Einloggen","Bitte gib dein Passwort ein:","Login","Abbrechen");
    }
    return 1;
    }


    Den mysql_CheckAccount stock kannst du dann aus dem Code entfernen.



    Und der andere Teil würde so aussehen, bei OnDialogResponse:


    switch(dialogid)
    {
    case DIALOG_REGISTER:
    {
    if(response)
    {
    if(strlen(inputtext) == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Regestration","Datenbank: Das angegebene Passwort ist zu kurz!","Register","Abbrechen");
    return 1;
    }
    else
    {
    CreateAccount(playerid, inputtext);
    SetPVarInt(playerid,"Eingeloggt",1);
    SpawnPlayer(playerid);
    SetSpawnInfo(playerid, 0, 0, -1982.5010,140.7040,27.6875,89.0363, 0, 0, 0, 0, 0, 0 );
    return 1;
    }
    }
    else
    {
    Kick(playerid);
    }
    }
    case DIALOG_LOGIN:
    {
    if(response)
    {
    if(strlen(inputtext) == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Einloggen","Datenbank: Das angegebene Passwort ist falsch!","Login","Abbrechen");
    return 1;
    }
    else
    {
    new PlayerName[MAX_PLAYER_NAME], query[256];
    GetPlayerName(playerid, PlayerName, MAX_PLAYER_NAME);
    mysql_format(handle, query, sizeof(query), "SELECT name FROM users WHERE name = '%e' AND passwort = '%e'", PlayerName, inputtext); //name, passwort und users zu deinem anpassen!!
    mysql_tquery(handle, query, "CheckPassword", "d", playerid);
    }
    }
    else
    {
    Kick(playerid);
    }
    }
    }


    Ganz unten im Gamemode:
    forward CheckPassword(playerid);
    public CheckPassword(playerid)
    {
    if(cache_num_rows() != 0)
    {
    SetPVarInt(playerid,"Eingeloggt",1);
    LoadPlayer(playerid);
    SpawnPlayer(playerid);
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Einloggen","Datenbank: Das war das falsche Passwort!","Login","Abbrechen");
    }
    return 1;
    }



    Vom Prinzip her ist es immer gleich: Query -> mysql_tquery -> Callback -> Im Callback den Cache auslesen.


    Ich hoffe, dass das alles so passt. :)



    Und ja, diese Funktionen kannst du löschen, musst du sogar. ;)

  • Jo geht, aber irgendwie werden meine XYZ Koordinaten nicht gespeichert und muss ich jetzt eine andere Admin abfrage machen? Weil irgendwie sagt er mir immer ich bin kein Admin..


    SpielerInfo[playerid][pRank] = cache_get_field_content_int(0, "xKord");
    SpielerInfo[playerid][pDuty] = cache_get_field_content_int(0, "yKord");
    SpielerInfo[playerid][pSkin] = cache_get_field_content_int(0, "zKord");//Load


    Denke mal liegt an dem int? wenn ich float mache kommt warning..


    format(query, sizeof(query), "UPDATE Kassen SET Name = '%s', Level = '%d', Geld = '%d', Kills = '%d', Tode = '%d', Admin = '%d', Banned, Leader = '%d', Member = '%d', Team = '%d', Rank = '%d', Duty = '%d', Skin = '%d', Health = '%d', xKord = '%d', yKord = '%d', zKord, Interior = '%d' = '%d' = '%d' WHERE ID = '%d'",
    SpielerInfo[playerid][pName], SpielerInfo[playerid][pName], SpielerInfo[playerid][pLevel], SpielerInfo[playerid][pGeld], SpielerInfo[playerid][pKills], SpielerInfo[playerid][pTode], SpielerInfo[playerid][pAdmin], SpielerInfo[playerid][pBanned], SpielerInfo[playerid][pLeader], SpielerInfo[playerid][pMember], SpielerInfo[playerid][pTeam], SpielerInfo[playerid][pRank], SpielerInfo[playerid][pDuty], SpielerInfo[playerid][pSkin], SpielerInfo[playerid][pHealth], SpielerInfo[playerid][xKord], SpielerInfo[playerid][yKord], SpielerInfo[playerid][zKord], SpielerInfo[playerid][pInterior], playerid);


    Save



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)