Beiträge von SebMcpepp

    Moin,


    bei mir speichert er keine fahrzeuge mehr. Es funktionierte bis ich e_gekauft und e_zerstoert hinzugefügt habe. Was ist der fehler?



    enum fracVehEnum
    {
    e_modelID,
    e_gekauft,
    e_zerstoert,
    Float:e_x,
    Float:e_y,
    Float:e_z,
    Float:e_a,
    Float:carheal,
    e_color1,
    e_color2,
    e_fracID,
    e_vID
    };

    Hier die Publics:

    public LoadFracVehicles_Data()
    {
    //Deklaration neuer temporärer Variablen:
    new rows, id, createdVehs;



    //Anzahl der gelesenen Datensätze abfragen:
    rows = cache_num_rows();



    //Schleife durch alle Datensätze:
    for(new i=0; i<rows; i++)
    {
    //Fahrzeug existiert in der Datenbank, wir laden die Daten jetzt aus dem Cache.
    id = cache_get_field_content_int(i, "ID");



    //Um Fehler bei der Verarbeitung zu vermeiden:
    if(id < 0 || id >= MAX_FRAC_VEHICLES) continue;



    //Danach die restlichen Daten laden. Unser Index (der Wert mit dem wir auf das
    //Fahrzeug in der Datenbank zugreifen) ist die "ID".
    fracVehicle[id][e_modelID] = cache_get_field_content_int(i, "ModelID");
    fracVehicle[id][e_gekauft] = cache_get_field_content_int(i, "Gekauft");
    fracVehicle[id][e_zerstoert] = cache_get_field_content_int(i, "Zerstoert");
    fracVehicle[id][e_x] = cache_get_field_content_float(i, "PosX");
    fracVehicle[id][e_y] = cache_get_field_content_float(i, "PosY");
    fracVehicle[id][e_z] = cache_get_field_content_float(i, "PosZ");
    fracVehicle[id][e_a] = cache_get_field_content_float(i, "PosA");
    fracVehicle[id][carheal] = cache_get_field_content_float(i, "CarHealth");
    fracVehicle[id][e_color1] = cache_get_field_content_int(i, "Color1");
    fracVehicle[id][e_color2] = cache_get_field_content_int(i, "Color2");
    fracVehicle[id][e_fracID] = cache_get_field_content_int(i, "FracID");



    //Zur Sicherheit fragen wir hier nun ab, ob das angegebene Modell auch existiert,
    //sollte das nicht der Fall sein, dann wird das Fahrzeug nicht erstellt.
    if(fracVehicle[id][e_modelID] >= 400 && fracVehicle[id][e_modelID] <= 611)
    {
    if(fracVehicle[id][e_gekauft] == 1)
    {
    //Nachdem das Fahrzeug geladen wurde, wird es erstellt.
    fracVehicle[id][e_vID] = CreateVehicle(fracVehicle[id][e_modelID], fracVehicle[id][e_x], fracVehicle[id][e_y], fracVehicle[id][e_z], fracVehicle[id][e_a], fracVehicle[id][e_color1], fracVehicle[id][e_color2], -1);
    SetVehicleHealth(fracVehicle[id][e_vID],fracVehicle[id][carheal]);
    }
    else
    {
    //Falls eine nicht existierende Model-ID angegeben wurde, geben wir eine Information aus.
    printf("[Error] Model-ID %d existiert nicht (ID: %d).", fracVehicle[id][e_modelID], id);
    }
    }
    //Zur Sicherheit fragen wir noch ab, ob das Fahrzeug-Limit noch nicht überschritten wurde.
    //Existiert ein Fahrzeug mit der höchsten ID, dann kann kein weiteres mehr erstellt werden.
    if(GetVehicleModel(MAX_VEHICLES-1) != 0) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_VEHICLES) erreicht.");



    //Zur weiteren Sicherheit prüfen wir noch, ob die maximale Anzahl an Fraktions-Fahrzeugen erreicht ist.
    createdVehs++;
    if(createdVehs == MAX_FRAC_VEHICLES) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_FRAC_VEHICLES) erreicht.");
    }
    return 1;
    }
    public SaveAllFracVehs()
    {
    //Deklaration neuer temporärer Variablen:
    new query[256];



    //Schleife durch alle Fraktions-Fahrzeuge
    for(new i=0; i<MAX_FRAC_VEHICLES; i++)
    {
    //Wenn das Fahrzeug existiert
    if(fracVehicle[i][e_modelID] >= 400 && fracVehicle[i][e_modelID] <= 611)
    {
    //Wir fragen die Position des Fahrzeugs ab:
    GetVehiclePos(fracVehicle[i][e_vID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z]);
    GetVehicleZAngle(fracVehicle[i][e_vID], fracVehicle[i][e_a]);
    GetVehicleHealth(fracVehicle[i][e_vID], fracVehicle[i][carheal]);



    //Und wir erstellen das Query:
    format(query, sizeof(query), "UPDATE FracVehicles SET ModelID = '%d', Gekauft = '%d', Zerstoert = '%d', PosX = '%f', PosY = '%f', PosZ = '%f', PosA = '%f', CarHealth = '%f', Color1 = '%d', Color2 = '%d', FracID = '%d' WHERE ID = '%d'",
    fracVehicle[i][e_modelID], fracVehicle[i][e_gekauft], fracVehicle[i][e_zerstoert], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][carheal], fracVehicle[i][e_color1], fracVehicle[i][e_color2], fracVehicle[i][e_fracID], i);
    //handle = die Connection Handle ID die vor mysql_connect steht.
    mysql_tquery(handle, query);
    }
    }
    return 1;
    }

    Hier das Stock

    stock SaveFracVehCheck(vehicleid)
    {
    //Deklaration neuer temporärer Variablen:
    new query[256];



    //Schleife durch alle Fraktions-Fahrzeuge
    for(new i=0; i<MAX_FRAC_VEHICLES; i++)
    {
    //Wenn die vehicleid die gleiche ist, wie die des Fraktions-Fahrzeugs
    if(fracVehicle[i][e_vID] == vehicleid)
    {
    //Wir fragen die Position des Fahrzeugs ab:
    GetVehiclePos(fracVehicle[i][e_vID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z]);
    GetVehicleZAngle(fracVehicle[i][e_vID], fracVehicle[i][e_a]);
    GetVehicleHealth(fracVehicle[i][e_vID], fracVehicle[i][carheal]);



    //Und wir erstellen das Query:
    format(query, sizeof(query), "UPDATE FracVehicles SET ModelID = '%d', Gekauft = '%d', Zertoert = '%d', PosX = '%f', PosY = '%f', PosZ = '%f', PosA = '%f', CarHealth = '%f', Color1 = '%d', Color2 = '%d', FracID = '%d' WHERE ID = '%d'",
    fracVehicle[i][e_modelID], fracVehicle[i][e_gekauft], fracVehicle[i][e_zerstoert], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][carheal], fracVehicle[i][e_color1], fracVehicle[i][e_color2], fracVehicle[i][e_fracID], i);
    //handle = die Connection Handle ID die vor mysql_connect steht.
    mysql_tquery(handle, query);
    return 1; //Es gibt ja keine zwei gleichen Fahrzeuge
    }
    }
    return 0; //Fahrzeug ist kein Fraktions-Fahrzeug
    }

    Und hier die Befehle:

    ocmd:fferstellen(playerid, params[])
    {
    //Zuerst fragen wir ab, ob wir noch Fahrzeuge erstellen können
    if(GetVehicleModel(MAX_VEHICLES-1) != 0) return SendClientMessage(playerid, 0xFF0000FF, "Es können keine weiteren Fahrzeuge erstellt werden, Limit (MAX_VEHICLES) erreicht.");



    //Wir deklarieren die benötigten temporären Variablen.
    new tmp[20], idx, model, fID, color1 = -1, color2 = -1;



    //Anschließend teilen wir mit strtok die eingegebenen Paramater auf und wandeln sie in eine Zahl um.
    //Falls etwas falsches eingegeben wurde, geben wir eine entsprechende Meldung zurück.
    tmp = strtok(params, idx);
    if(!strlen(tmp) || !IsNumeric(tmp)) return SendClientMessage(playerid, 0xFF0000FF, "Verwendung: /fferstellen [Model] [FraktionsID] [opt:Farbe1] [opt:Farbe2]");
    model = strval(tmp);
    //Eine solche Abfrage kann man auch für nachfolgende FraktionsID (fID) machen, falls gewünscht.
    if(model < 400 || model > 611) return SendClientMessage(playerid, 0xFF0000FF, "Error: Model ID existiert nicht.");
    tmp = strtok(params, idx);
    if(!strlen(tmp) || !IsNumeric(tmp)) return SendClientMessage(playerid, 0xFF0000FF, "Verwendung: /fferstellen [Model] [FraktionsID] [opt:Farbe1] [opt:Farbe2]");
    fID = strval(tmp);
    tmp = strtok(params, idx);
    if(strlen(tmp) && IsNumeric(tmp)) color1 = strval(tmp);
    tmp = strtok(params, idx);
    if(strlen(tmp) && IsNumeric(tmp)) color2 = strval(tmp);



    //Sind alle Parameter korrekt übergeben worden, dann suchen wir uns einen freien Index in den wir das Fraktions-Fahrzeug speichern können.
    for(new i=0; i<MAX_FRAC_VEHICLES; i++)
    {
    //Frei:
    if(fracVehicle[i][e_vID] == 0)
    {
    //Daten werden übergeben
    new Float:x, Float:y, Float:z, Float:a;
    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, a);
    fracVehicle[i][e_modelID] = model;
    fracVehicle[i][e_gekauft] = 1;
    fracVehicle[i][e_zerstoert] = 0;
    fracVehicle[i][e_x] = x;
    fracVehicle[i][e_y] = y;
    fracVehicle[i][e_z] = z;
    fracVehicle[i][e_a] = a;
    fracVehicle[i][carheal] = 1000;
    fracVehicle[i][e_color1] = color1;
    fracVehicle[i][e_color2] = color2;
    fracVehicle[i][e_fracID] = fID;



    //und anschließend in die Datenbank geschrieben.
    new query[256];
    format(query, sizeof(query), "INSERT INTO FracVehicles (ID, ModelID, Gekauft, Zerstoert, PosX, PosY, PosZ, PosA, CarHealth, Color1, Color2, FracID) VALUES ('%d', '%d', '%d, '%d', '%f', '%f', '%f', '%f', '%f', '%d', '%d', '%d')",
    i, fracVehicle[i][e_modelID], fracVehicle[i][e_gekauft], fracVehicle[i][e_zerstoert], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][carheal], fracVehicle[i][e_color1], fracVehicle[i][e_color2], fracVehicle[i][e_fracID]);
    mysql_tquery(handle, query);



    //Zuletzt wird dann noch das Fahrzeug erstellt und der Spieler in das Fahrzeug gesetzt.
    fracVehicle[i][e_vID] = CreateVehicle(fracVehicle[i][e_modelID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][e_color1], fracVehicle[i][e_color2], -1);
    SetVehicleHealth(fracVehicle[i][e_vID],fracVehicle[i][carheal]);
    PutPlayerInVehicle(playerid, fracVehicle[i][e_vID], 0);
    return SendClientMessage(playerid, 0x00FF00FF, "Fahrzeug gespeichert.");
    }
    }
    return SendClientMessage(playerid, 0xFF0000FF, "Error: Limit für Fraktions-Fahrzeuge erreicht.");
    }



    ocmd:ffloeschen(playerid, params[])
    {
    //Wir deklarieren die benötigte temporäre Variable.
    new vid;



    //Wenn der Spieler keine Vehicle-ID eingibt wird die gelöscht, in der sich der Spieler befindet,
    //ansonsten die eingegebene ID.
    if(!IsNumeric(params) || !strlen(params)) return SendClientMessage(playerid, 0xFF0000FF, "Error: Nutze: /ffloeschen [Vehicle ID]");
    vid = strval(params);



    if(vid <= 0) return SendClientMessage(playerid, 0xFF0000FF, "Error: Vehicle-ID ist kein Fraktions-Fahrzeug.");



    for(new i=0; i<MAX_FRAC_VEHICLES; i++)
    {
    //Eingegebene ID und die des Fraktions-Fahrzeugs stimmen überein.
    if(fracVehicle[i][e_vID] == vid)
    {
    //Daten werden entfernt
    fracVehicle[i][e_modelID] = 0;
    fracVehicle[i][e_gekauft] = 0;
    fracVehicle[i][e_zerstoert] = 0;
    fracVehicle[i][e_x] = 0.0;
    fracVehicle[i][e_y] = 0.0;
    fracVehicle[i][e_z] = 0.0;
    fracVehicle[i][e_a] = 0.0;
    fracVehicle[i][carheal] = 0.0;
    fracVehicle[i][e_color1] = 0;
    fracVehicle[i][e_color2] = 0;
    fracVehicle[i][e_fracID] = -1;



    //und anschließend in der Datenbank gelöscht.
    new query[128];
    format(query, sizeof(query), "DELETE FROM FracVehicles WHERE ID = '%d'", i);
    mysql_tquery(handle, query);



    DestroyVehicle(fracVehicle[i][e_vID]);
    fracVehicle[i][e_vID] = 0;
    return SendClientMessage(playerid, 0x00FF00FF, "Fahrzeug gelöscht.");
    }
    }
    return SendClientMessage(playerid, 0xFF0000FF, "Error: Vehicle-ID ist kein Fraktions-Fahrzeug.");
    }



    ocmd:parken(playerid)
    {
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "Du bist in keinem Fahrzeug.");
    new vehicleid = GetPlayerVehicleID(playerid);
    if(SaveFracVehCheck(vehicleid)) return SendClientMessage(playerid, 0x00FF00FF, "Fahrzeug geparkt.");
    else return SendClientMessage(playerid, 0xFF0000FF, "Dieses Fahrzeug kann nicht geparkt werden.");
    }


    Hoffe du kannst mir helfen, mit freundlichem Gruß,
    SebMcpepp

    Moin ich bins mal wieder :D


    Bei mir speichert er jetzt überhaupt nichts mehr beim Disconnecten und auch nicht wenn ich es per Timer jede Minuten speichern lasse speichert er nix auch wenn ich mir Adminlevel gebe er speichert es nicht in der Datenbank. Woran kann das liegen? Hier das SaveUserStats Stock:



    stock SaveUserStats(playerid)
    {
    //Wenn der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nicht
    if(!PlayerInfo[playerid][pLoggedIn]) return 1;



    //Ansonsten speichere sie
    new query[256];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', admin = '%d', money = '%d', kills = '%d', deaths = '%d', team = '%d', fraktion '%d', member '%d', leader '%d', rang '%d' WHERE id = '%d'",
    PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][pTeam], PlayerInfo[playerid][pFrak], PlayerInfo[playerid][pMember], PlayerInfo[playerid][pLeader], PlayerInfo[playerid][pRang], PlayerInfo[playerid][p_id]);



    //Das Query wird abgesendet
    mysql_pquery(handle, query);
    return 1;
    }

    Moin Leute,


    ich habe nochmal ein kleines komisches Problem.



    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    if(PlayerInfo[playerid][pAdmin] >= 2)
    {
    new string1[128];
    new string2[128];
    //new vehid = GetPlayerVehicleID(playerid);
    new modelid = GetVehicleModel(vehicleid);
    format(string1, sizeof(string1),"VEHICLE ID: %d",GetPlayerVehicleID(playerid));//vehid);
    format(string2, sizeof(string2),"MODEL ID: %d",modelid);
    SendClientMessage(playerid,COLOR_ORANGE,string1);
    SendClientMessage(playerid,COLOR_ORANGE,string2);
    }
    return 1;
    }


    Hier ein Screen was passiert wenn ich in 2 verschiedene Autos einsteige:


    Woran mag das liegen? Mit freundlichem Gruß,
    SebMcpepp

    Moin Leute,


    ich habe folgendes Problem, mein Script habe ich per Pastebin beigelegt (Ist nicht groß keine Sorge).
    Wenn ich mich registriere startet er das Tutorial und gibt noch kein Geld oder setzt das Level zum Score. Das ist noch richtig. Wenn er nun das Tutorial beendet soll er das Geld bekommen und das Level als Score gesetzt werden. Dies tut er aber nicht. In der Tabelle ist aber das Geld und Level usw. alles richtig gespeichert. Wenn ich mich dann auslogge und wieder einlogge spawne ich ganz normal und bekomme das Geld und den Score gesetzt. Ich hoffe jemand kann mir hierbei eventuell helfen und mal rüberschauen.


    Mit freundlichem Gruß,
    SebMcpepp


    Anhang: http://pastebin.com/6ps8ABPA

    @SebMcpepp
    Wenn du dem Spieler das Geld bei OnPlayerSpawn gibst, dann musst du ihm es aber vorher mit ResetPlayerMoney zurücksetzen, sonst verdoppelt sich sein Geld jedes mal wenn er spawnt.

    Ne muss ich garnicht, habe dem Spieler beim Registrieren 2500 per folgendem Code gegeben:

    if(dialogid == DIALOG_REGISTER)
    {
    //Spieler hat Abbrechen gewählt
    if(!response) return Kick(playerid);



    //Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registrierung", "Bitte registrieren Sie sich:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");



    //Wenn alles passt wird der Spieler in der Datenbank angelegt
    //Als Verschlüsselung für das Passwort wird MD5 verwendet
    new query[256];
    [b]--> [/b] mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password, level, money) VALUES ('%e', MD5('%e'),1,2500)", PlayerInfo[playerid][pName], inputtext);



    //Das Query wird abgesendet und die playerid an OnUserRegister übergeben
    mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
    SetPlayerScore(playerid,PlayerInfo[playerid][pLevel]);
    return 1;
    }

    Und unter OnPlayerSpawn gebe ich im das Geld was im pMoney als Wert steht. Dies tuhe ich folgendermaßen und das funktioniert ohne das jedes mal 2500$ mehr gutgeschrieben werden:

    public OnPlayerSpawn(playerid)
    {
    if(PlayerInfo[playerid][pErsterLogin] == 0)
    {
    GivePlayerMoney(playerid,PlayerInfo[playerid][pMoney]);
    SetPlayerScore(playerid,PlayerInfo[playerid][pLevel]);
    PlayerInfo[playerid][pErsterLogin] = 1;
    //Tutorial(playerid);
    return 1;
    }
    else if(PlayerInfo[playerid][pErsterLogin] >= 1)
    {
    new geld = PlayerInfo[playerid][pMoney];
    GivePlayerMoney(playerid,geld);
    SetPlayerScore(playerid,PlayerInfo[playerid][pLevel]);
    return 1;
    }
    return 1;
    }


    Mit freundlichem Gruß,
    SebMcpepp

    Warum hast du Bei OnPlayerRequestClass folgendes Entfernt?


    Code
    public OnPlayerRequestClass(playerid, classid)
    {
        SetPlayerPos(playerid, 329.0244,-1513.3033,36.0391);
    	SetPlayerCameraPos(playerid, 329.0244,-1513.3033,36.0391);
    	SetPlayerCameraLookAt(playerid, 329.0244,-1513.3033,36.0391);
    	SetPlayerFacingAngle(playerid,49.4261);
    	return 1;
    }

    Warum nicht? :P Und du hast mir schonmal weitergeholfen. Es wird nun das Level und das Geld gesetzt. Jedoch bekomme ich das Geld nicht auf die Hand trotz:
    public OnUserLogin(playerid)
    {
    //Query wurde ausgeführt und das Ergebnis im Cache gespeichert
    if(cache_get_row_count() == 0)
    { //Der Spieler hat ein falsches Passwort eingegeben
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmelden", "Bitte melden Sie sich an:\n{FF0000}Falsches Passwort!", "Ok", "Abbrechen");
    }
    else
    {
    new geld = PlayerInfo[playerid][pMoney];
    GivePlayerMoney(playerid,geld);
    //Es existiert ein Ergebnis, das heißt der Spieler hat das richtige Passwort eingegeben
    //Wir lesen nun die erste Zeile des Caches aus (ID 0)
    PlayerInfo[playerid][p_id] = cache_get_field_content_int(0, "id", handle);
    PlayerInfo[playerid][pLevel] = cache_get_field_content_int(0, "level", handle);
    PlayerInfo[playerid][pAdmin] = cache_get_field_content_int(0, "admin", handle);
    PlayerInfo[playerid][pMoney] = cache_get_field_content_int(0, "money", handle);
    PlayerInfo[playerid][pKills] = cache_get_field_content_int(0, "kills", handle);
    PlayerInfo[playerid][pDeaths] = cache_get_field_content_int(0, "deaths", handle);
    PlayerInfo[playerid][pLoggedIn] = true; SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt.");
    SetPlayerScore(playerid,PlayerInfo[playerid][pLevel]);
    }
    return 1;
    }

    Hier gebe ich doch das Geld was im Account ist. Aber es passiert nix. Meine Tabelle sieht so aus:

    Code
    id 	name 	        password 	                      level     admin money   kills  deaths
    1 	SebMcpepp 	098f6bcd4621d373cade4e832627b4f6 	1 	  0   2500 	0 	0


    //edit by Seb: Habe es gelöst in dem ich es einfach in OnPlayerSpawn gepackt habe mit dem Geld geben und dem Score.

    So wie es im Tutorial angegeben wird.


    So werden Accounts gespeichert:


    stock SaveUserStats(playerid)
    {
    //Wenn der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nicht
    if(!PlayerInfo[playerid][pLoggedIn]) return 1;



    //Ansonsten speichere sie
    new query[256];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', admin = '%d', money = '%d', kills = '%d', deaths = '%d' WHERE id = '%d'",
    PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id]);



    //Das Query wird abgesendet
    mysql_pquery(handle, query);
    return 1;
    }

    Hier die Dialoge für Login und Register:


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_REGISTER)
    {
    //Spieler hat Abbrechen gewählt
    if(!response) return Kick(playerid);



    //Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registrierung", "Bitte registrieren Sie sich:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");



    //Wenn alles passt wird der Spieler in der Datenbank angelegt
    //Als Verschlüsselung für das Passwort wird MD5 verwendet
    new query[256];
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password) VALUES ('%e', MD5('%e'))", PlayerInfo[playerid][pName], inputtext);



    //Das Query wird abgesendet und die playerid an OnUserRegister übergeben
    mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
    return 1;
    }
    if(dialogid == DIALOG_LOGIN)
    {
    //Spieler hat Abbrechen gewählt
    if(!response) return Kick(playerid);



    //Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmelden", "Bitte melden Sie sich an:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");



    //Wenn alles passt wird die Datenbank ausgelesen
    new query[256];
    mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e' AND password = MD5('%e')", PlayerInfo[playerid][pName], inputtext);



    //Das Query wird abgesendet und die playerid an OnUserLogin übergeben
    mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
    return 1;
    }
    return 0;
    }

    Hier noch etwas von OnPlayerRequestClass falls es nötig ist:

    public OnPlayerRequestClass(playerid, classid)
    {
    //Wenn der Spieler die Class-Selection betritt, prüfe ob er bereits eingeloggt ist
    if(!PlayerInfo[playerid][pLoggedIn])
    {
    //Wenn nicht, dann prüfe ob der Spieler ein Konto hat
    //Dazu wird ein Query gesendet und ein neues Callback aufgerufen
    //%e steht für einen geprüften String (sollte anstatt %s in Queries verwendet werden)
    new query[128];
    mysql_format(handle, query, sizeof(query), "SELECT id FROM users WHERE name = '%e'", PlayerInfo[playerid][pName]);



    //Das Query wird abgesendet und die playerid an OnUserCheck übergeben
    mysql_pquery(handle, query, "OnUserCheck", "d", playerid);
    }
    return 1;
    }

    Definiert ist alles so:

    enum pDataEnum
    {
    p_id,
    bool:pLoggedIn,
    pName[MAX_PLAYER_NAME],
    pLevel,
    pAdmin,
    pMoney,
    pKills,
    pDeaths
    }
    new PlayerInfo[MAX_PLAYERS][pDataEnum];


    Mfg,
    SebMcpepp

    Okey, aber müsste ja auch so gehen da bei OnUserLogin das Geld gegeben wird.



    public OnUserLogin(playerid)
    {
    //Query wurde ausgeführt und das Ergebnis im Cache gespeichert
    if(cache_get_row_count() == 0)
    {
    //Der Spieler hat ein falsches Passwort eingegeben
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmelden", "Bitte melden Sie sich an:\n{FF0000}Falsches Passwort!", "Ok", "Abbrechen");
    }
    else
    {
    new geld = PlayerInfo[playerid][pMoney];
    GivePlayerMoney(playerid,geld);
    //Es existiert ein Ergebnis, das heißt der Spieler hat das richtige Passwort eingegeben
    //Wir lesen nun die erste Zeile des Caches aus (ID 0)
    PlayerInfo[playerid][p_id] = cache_get_field_content_int(0, "id", handle);
    PlayerInfo[playerid][pLevel] = cache_get_field_content_int(0, "level", handle);
    PlayerInfo[playerid][pAdmin] = cache_get_field_content_int(0, "admin", handle);
    PlayerInfo[playerid][pMoney] = cache_get_field_content_int(0, "money", handle);
    PlayerInfo[playerid][pKills] = cache_get_field_content_int(0, "kills", handle);
    PlayerInfo[playerid][pDeaths] = cache_get_field_content_int(0, "deaths", handle);
    PlayerInfo[playerid][pLoggedIn] = true;
    SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt.");
    }
    return 1;
    }


    Und das Level wird auch nicht wie gewollt auf Level 1 gesetzt sondern bleibt bei 0.


    public OnUserRegister(playerid)
    {
    //Der Spieler wurde in die Datenbank eingetragen, es wird die id ausgelesen
    PlayerInfo[playerid][p_id] = cache_insert_id();
    SendClientMessage(playerid, 0x00FF00FF, "[System] Registrierung erfolgreich.");
    PlayerInfo[playerid][pLevel] = 1;
    PlayerInfo[playerid][pAdmin] = 0;
    PlayerInfo[playerid][pMoney] = 2500;
    PlayerInfo[playerid][pKills] = 0;
    PlayerInfo[playerid][pDeaths] = 0;
    return 1;
    }


    Mit freundlichem Gruß,
    SebMcpepp

    Hallo, ich wollte dass wenn der User sich registriert, das Geld auf 2500 gesetzt wird. Dies funktioniert aber nicht.
    Hier der Code:


    public OnUserRegister(playerid)
    {
    //Der Spieler wurde in die Datenbank eingetragen, es wird die id ausgelesen
    PlayerInfo[playerid][p_id] = cache_insert_id();
    SendClientMessage(playerid, 0x00FF00FF, "[System] Registrierung erfolgreich.");
    PlayerInfo[playerid][pLevel] = 1;
    PlayerInfo[playerid][pAdmin] = 0;
    PlayerInfo[playerid][pMoney] = 2500;
    PlayerInfo[playerid][pKills] = 0;
    PlayerInfo[playerid][pDeaths] = 0;
    return 1;
    }


    Hoffe auf Hilfe, evtl. ja direkt von @Jeffry mit freundlichem Gruß,
    SebMcpepp