Hallo,
Ich möchte gerne ein kleines Tutorial machen.
Die Spieler sollen also nachdem die sich zum ersten mal eingelogt haben, in eine art tutorial gelangen, wo alles erklärt wird.
Nachdem das tutorial zuende ist,  sollen die  ein Skin auswählen können und dann "fertig" klicken und somit an XYZ Spawnen
Wie bekomme ich soetwas hin?
Habe bereits das Login/register System von Jeffry
Code:
/*
Login/Register System Mysql von Jeffry
*/
#include <a_samp>
#include <a_mysql>
enum pDataEnum
{
    p_id,
    bool:pLoggedIn,
    pName[MAX_PLAYER_NAME],
    pLevel,
    pMoney,
    pKills,
    pDeaths
}
new PlayerInfo[MAX_PLAYERS][pDataEnum];
#define MYSQL_HOST    "127.0.0.1"      //IP Adresse des MySQL Servers
#define MYSQL_USER    "root"           //Benutzername der angemeldet wird
#define MYSQL_PASS    ""               //Passwort des Benutzers
#define MYSQL_DBSE    "samp_db"        //Name der Datenbank
//Dialog IDs (gegebenenfalls ändern, falls bereits belegt)
#define DIALOG_REGISTER  1403
#define DIALOG_LOGIN     2401
new MySQL:handle; //Die Connection-Handle, über die wir später auf die Tabellen der Datenbank zugreifen
#if defined FILTERSCRIPT
public OnFilterScriptInit()
{
    print("\n--------------------------------------");
    print(" Blank Filterscript by your name here");
    print("--------------------------------------\n");
    return 1;
}
public OnFilterScriptExit()
{
    return 1;
}
#else
main()
{
    print("\n----------------------------------");
    print(" Gamemode Reallife Selfmade by Paddy");
    print("----------------------------------\n");
}
#endif
public OnGameModeInit()
{
    MySQL_SetupConnection();
    return 1;
}
public OnGameModeExit()
{
    mysql_close(handle);
    return 1;
}
//public OnPlayerRequestClass(playerid, classid)
public OnPlayerRequestClass(playerid)
{
    //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;
}
public OnPlayerConnect(playerid)
{
    PlayerInfo[playerid][p_id]       = 0;
    PlayerInfo[playerid][pLoggedIn]  = false;
    PlayerInfo[playerid][pLevel]     = 0;
    PlayerInfo[playerid][pMoney]     = 0;
    PlayerInfo[playerid][pKills]     = 0;
    PlayerInfo[playerid][pDeaths]    = 0;
    GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME);
    return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
    //Speichere den Spieler wenn er der Server verlässt
    SaveUserStats(playerid);
    return 1;
}
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', money = '%d', kills = '%d', deaths = '%d' WHERE id = '%d'",
        PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id]);
    //Das Query wird abgesendet
    mysql_pquery(handle, query);
    return 1;
}
public OnPlayerSpawn(playerid)
{
    // Da ich nicht weiß, wo ihr spawnen wollt, müsst ihr die Position selbst reinmachen!
    // Das ist notwendig, da ihr sonst womöglich durch die Map fallt!
   // SetPlayerPos(playerid,1645.0569,-2286.5154,-1.2033); // Anpassen!
    return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
    //Beispielcode
    if(killerid != INVALID_PLAYER_ID)
    {
        PlayerInfo[killerid][pKills]++;
        GivePlayerMoney(killerid, 10);
        PlayerInfo[killerid][pMoney] += 10;
        if(PlayerInfo[killerid][pKills] > 3)
        {
            PlayerInfo[killerid][pLevel] = 1;
        }
    }
    PlayerInfo[playerid][pDeaths]++;
    return 1;
}
public OnVehicleSpawn(vehicleid)
{
    return 1;
}
public OnVehicleDeath(vehicleid, killerid)
{
    return 1;
}
public OnPlayerText(playerid, text[])
{
    return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
    if (strcmp("/mycommand", cmdtext, true, 10) == 0)
    {
        // Do something here
        return 1;
    }
    return 0;
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
    return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
    return 1;
}
public OnPlayerLeaveCheckpoint(playerid)
{
    return 1;
}
public OnPlayerEnterRaceCheckpoint(playerid)
{
    return 1;
}
public OnPlayerLeaveRaceCheckpoint(playerid)
{
    return 1;
}
public OnRconCommand(cmd[])
{
    return 1;
}
public OnPlayerRequestSpawn(playerid)
{
    return 1;
}
public OnObjectMoved(objectid)
{
    return 1;
}
public OnPlayerObjectMoved(playerid, objectid)
{
    return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
    return 1;
}
public OnVehicleMod(playerid, vehicleid, componentid)
{
    return 1;
}
public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
    return 1;
}
public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
    return 1;
}
public OnPlayerSelectedMenuRow(playerid, row)
{
    return 1;
}
public OnPlayerExitedMenu(playerid)
{
    return 1;
}
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
    return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    return 1;
}
public OnRconLoginAttempt(ip[], password[], success)
{
    return 1;
}
public OnPlayerUpdate(playerid)
{
    return 1;
}
public OnPlayerStreamIn(playerid, forplayerid)
{
    return 1;
}
public OnPlayerStreamOut(playerid, forplayerid)
{
    return 1;
}
public OnVehicleStreamIn(vehicleid, forplayerid)
{
    return 1;
}
public OnVehicleStreamOut(vehicleid, forplayerid)
{
    return 1;
}
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, "Registration", "Bitte registriere Dich:\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, "Anmeldung", "Bitte logge Dich ein:\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;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
    return 1;
}
stock MySQL_SetupConnection(ttl = 3)
{
    print("[MySQL] Verbindungsaufbau...");
    mysql_log();  //<- Kommentar vor mysql_log entfernen um den MySQL Debug-Modus zu aktivieren
handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DBSE);
    //Prüfen und gegebenenfalls wiederholen
    if(mysql_errno(handle) != 0)
    {
        //Fehler im Verbindungsaufbau, prüfe ob ein weiterer Versuch gestartet werden soll
        if(ttl > 1)
        {
            //Versuche erneut eine Verbindung aufzubauen
            print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
            printf("[MySQL] Starte neuen Verbindungsversuch (TTL: %d).", ttl-1);
            return MySQL_SetupConnection(ttl-1);
        }
        else
        {
            //Abbrechen und Server schließen
            print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
            print("[MySQL] Bitte prüfen Sie die Verbindungsdaten.");
            print("[MySQL] Der Server wird heruntergefahren.");
            return SendRconCommand("exit");
        }
    }
    printf("[MySQL] Die Verbindung zur Datenbank wurde erfolgreich hergestellt! Handle: %d", _:handle);
    return 1;
}
forward OnUserCheck(playerid);
public OnUserCheck(playerid)
{
    //Query wurde ausgeführt und das Ergebnis im Cache gespeichert
    new rows;
    cache_get_row_count(rows);
    if(rows == 0)
    {
        //Der Spieler konnte nicht gefunden werden, er muss sich registrieren
        ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration", "Bitte registriere Dich:", "Ok", "Abbrechen");
    }
    else
    {
        //Es existiert ein Ergebnis, das heißt der Spieler ist registriert und muss sich einloggen
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:", "Ok", "Abbrechen");
    }
    return 1;
}
forward OnUserRegister(playerid);
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, "[Konto] Registration erfolgreich.");
    SendClientMessage(playerid, 0x00FF00FF, "Bitte Logge dich nun ein um fortzufahren");
    return 1;
}
forward OnUserLogin(playerid);
public OnUserLogin(playerid)
{
    //Query wurde ausgeführt und das Ergebnis im Cache gespeichert
    new rows;
    cache_get_row_count(rows);
    if(rows == 0)
    {
        //Der Spieler hat ein falsches Passwort eingegeben
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Falsches Passwort!\nAchte auf Rechtschreibung, solltest du dein Passwort vergessen haben, so melde dich beim Admin.", "Ok", "Abbrechen");
    }
    else
    {
        //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)
         cache_get_value_name_int(0, "id", PlayerInfo[playerid][p_id]);
        cache_get_value_name_int(0, "level", PlayerInfo[playerid][pLevel]);
        cache_get_value_name_int(0, "money", PlayerInfo[playerid][pMoney]);
        cache_get_value_name_int(0, "kills", PlayerInfo[playerid][pKills]);
        cache_get_value_name_int(0, "deaths", PlayerInfo[playerid][pDeaths]);
        PlayerInfo[playerid][pLoggedIn]  = true;
        SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt.");
        GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
    }
    return 1;
}
MFG
Paddy
 
		 
		
		
	 
			
									
		



