Beiträge von d30af26d

    Bild:


    Code:
    dcmd_kick(playerid,params[])
    {
    new id, reason[64], string[256], kicker[MAX_PLAYER_NAME], gekickter[MAX_PLAYER_NAME], string2[256];
    GetPlayerName(playerid, kicker, sizeof(kicker));
    GetPlayerName(id, gekickter, sizeof(gekickter));
    if(PlayerInfo[playerid][pAdmin] >= 2)
    {
    if (sscanf(params, "uz", id, reason)) SendClientMessage(playerid, COLOR_GREY, "Info: /kick [SpielerID] [Grund]");
    else if (id == INVALID_PLAYER_ID) SendClientMessage(playerid, COLOR_GREY, "Spieler wurde nicht gefunden!");
    else
    {
    format(string, sizeof(string), "Du wurdest von %s gekickt. Grund: %s",kicker,reason);
    format(string2, sizeof(string2), "Der Spieler %s wurde von %s gekickt. Grund: %s", gekickter, kicker, reason);
    SCM(id, COLOR_RED, string);
    SCMA(COLOR_YELLOW2, string2);
    Kick(id);
    }
    }
    return SCM(playerid, COLOR_GREY, "Du bist kein Admin");
    }


    Beschreibung:
    Ich schreibe nur den Befehl rein: /kick und es passiert das, was auch aufm Bild zu sehen ist.
    Info: Ich bin auf meinen Server Admin 1337

    Bildchen:



    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid, 1091.3324,-2034.9915,82.0438); // Float:X, Float:Y, Float:Z
    SetPlayerCameraPos(playerid, 1095.0162,-2037.0580,82.7372); // Float:X, Float:Y, Float:Z
    SetPlayerCameraLookAt(playerid, 1091.3324,-2034.9915,82.0438); // Float:X, Float:Y, Float:Z
    return 1;
    }


    public OnPlayerConnect(playerid)
    {
    SetPlayerCameraPos(playerid, 1095.0162,-2037.0580,82.7372); // Float:X, Float:Y, Float:Z
    SetPlayerCameraLookAt(playerid, 1091.3324,-2034.9915,82.0438); // Float:X, Float:Y, Float:Z
    }


    Es ist nicht ganz genau wie bei der 0.3 Version, aber schon etwas.
    Bei OnPlayerConnect werden Funktionen erstellt, welche beim Verbinden kommen sollen
    Bei OnPlayerRequestClass werden Funktionen erstellt, welche bei der Skin-Auswahl kommen sollen.
    Bei SetPlayerCamerPos wird die SpielerCamera festgelegt.
    Bei SetPlayerCamerLookAt wird festgelegt wohin die Camera schaut.
    Bei SetPlayerPos wird festgelegt wo der Spieler stehen soll.


    AddPlayerClass:
    AddPlayerClass(101,1481.1937,-1764.2517,18.7958,0.3206,0,0,0,0,0,0);
    AddPlayerClass - Stellt eine neues Skin in die Skin-Auswahl
    101 - SkinID - SkinListe
    1481.1937,-1764.2517,18.7958,0.3206 - Float:X, Float.Y, Float:Z, Float:Angle
    0,0,0,0,0,0 - Waffe1, Ammo1, Waffe2, Ammo2, Waffe3, Ammo3


    Einfach bei OnGameModeInit reinstellen.


    Tutorial © Bullet

    Ja der eine Fehler ist nun weg, aber dann wird folgendes nicht ausgeführt:
    if(frakid == 0) { PlayerInfo[pID][pSkin] = 101; PlayerInfo[playerid][pTeam] = 0; PlayerInfo[playerid][pLeader] = 0; }
    if(frakid == 1) { PlayerInfo[pID][pSkin] = 280; PlayerInfo[playerid][pTeam] = 1; PlayerInfo[playerid][pLeader] = 1; }


    Ich habe versucht /makeleader mit dcmd zu machen, aber es kommt InGame nur diese Meldung: Die FraktionID muss zwischen 0 und 1 sein!


    Code:
    dcmd_makeleader(playerid,params[])
    {
    new pID;
    new frakid;

    if (sscanf(params, "ui", pID, frakid)) SendClientMessage(playerid, COLOR_RED, "Info: /makeleader [SpielerID] [FraktionID]");
    else if (pID == INVALID_PLAYER_ID) SendClientMessage(playerid, 0xFF0000AA, "Player not found");
    else if (frakid <= 0 || frakid >= 1) SCM(playerid, COLOR_GREY, "Die FraktionID muss zwischen 0 und 1 sein!");
    else
    {
    if(frakid == 0) { PlayerInfo[pID][pSkin] = 101; PlayerInfo[playerid][pTeam] = 0; PlayerInfo[playerid][pLeader] = 0; }
    if(frakid == 1) { PlayerInfo[pID][pSkin] = 280; PlayerInfo[playerid][pTeam] = 1; PlayerInfo[playerid][pLeader] = 1; }
    }
    return 1;
    }

    public Tutorial()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(TutTime[i] >= 1)
    {
    TutTime[i] += 1;
    if(TutTime[i] == 3)
    {
    SendClientMessage(i, COLOR_YELLOW, "|____ Tutorial: Text ____|");
    }
    if(TutTime[i] == 4)
    {
    SendClientMessage(i, COLOR_YELLOW2, "Text");
    SendClientMessage(i, COLOR_YELLOW2, "Text");
    SendClientMessage(i, COLOR_YELLOW2, "Text (Dauer: Zeit:Zeit)");
    }
    else if(TutTime[i] == 19)
    {
    SendClientMessage(i, COLOR_YELLOW, "|____ Tutorial: Text____|");
    }
    else if(TutTime[i] == 20)
    {
    SendClientMessage(i, COLOR_YELLOW2, "Text");
    SendClientMessage(i, COLOR_YELLOW2, "Text");
    SendClientMessage(i, COLOR_YELLOW2, "Text");
    }
    else if(TutTime[i] == 30)
    {
    SendClientMessage(i, COLOR_YELLOW, "|____ Tutorial: Ende ____|");
    }
    else if(TutTime[i] == 31)
    {
    SendClientMessage(i, COLOR_YELLOW2, "Text");
    SendClientMessage(i, COLOR_YELLOW2, "Text");
    SendClientMessage(i, COLOR_YELLOW2, "Text");
    PlayerInfo[i][pTut] = 1;
    TogglePlayerControllable(i, 1);
    TutTime[i] = 0;
    }
    }
    }
    }
    }


    public Tutorial() // Ruft die Funktion auf
    if(IsPlayerConnected(i)) // Prüft ob der Spieler Online ist
    if(TutTime >= 1)// Prüft ob TutTime den Wert 1 oder höher hat
    TutTime += 1;// Zu TutTime wird 1 dazuaddiert
    if(TutTime == 3)// Wenn TutTime den Wert 3 hat ( oder Zeit, weil der Timer jede Sekunde +1 macht - also nach 3 Sekunden )


    Tutorial © Bullet

    Ich zeig euch, wie ihr in euren Server ein Tutorial einbauen könnt.
    Ihr braucht erst mal pTut , pSex , pOrigin
    enum pInfo
    {
    ...
    pTut,
    pOrigin,
    pSex,
    ....
    };


    Da ich leider ein MySQL Server habe, müsst ihr bei euren Server noch bei /register und OnPlayerUpdate, dies einführen.
    Man muss erst abfragen, ob der Tutorial gemacht wurde oder nicht.


    Also macht jetzt unter public OnPlayerSpawn(playerid) folgendes:
    SetPlayerSpawn(playerid);


    Diese Funktion braucht aber ein Forward, hier ist er:
    forward SetPlayerSpawn(playerid); - dieser kommt zu den anderen Forwards.


    Das fügt ihr noch oben im Script ein:
    new RegistrationStep[MAX_PLAYERS];
    new TutTime[MAX_PLAYERS];


    Jetzt ganz unten im Script fügt ihr folgendes ein:
    public SetPlayerSpawn(playerid)
    {
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pTut] == 0)
    {
    TogglePlayerControllable(playerid, 0);
    RegistrationStep[playerid] = 1;
    SendClientMessage(playerid, COLOR_YELLOW, "Willkommen auf Servername! Wir brauchen noch von dir paar Daten:");
    SendClientMessage(playerid, COLOR_LIGHTRED, "Bist du ein <Mann> oder eine <Frau> ?");
    }
    }
    }


    TogglePlayerControllable(playerid, 0); // Der Spieler wird gefreezed
    RegistrationStep[playerid] = 1; // Die Variable RegistrationStep wird auf 1 gesetzt.
    SetPlayerSpawn(playerid) // Die Funktion
    if(IsPlayerConnected(playerid)) // Prüft ob der Spieler überhaupt Online ist
    if(PlayerInfo[playerid][pTut] == 0) // Prüft ob der Spieler schon das Tutorial gemacht hat
    Wenn alles stimmt, dann sendet er die zwei Nachrichten.


    Ja, aber jetzt kommt doch das Tutorial oder? - Nein
    Erst kommt die Bestimmung, ob es ein Mann oder eine Frau ist und woher diese Person ist.


    Jetzt kommt unter public OnPlayerText(playerid, text[]) folgendes:
    {
    new tmp[256];
    if(RegistrationStep[playerid] > 0)
    {
    if(RegistrationStep[playerid] == 1)
    {
    new idx;
    tmp = strtok(text, idx);
    if((strcmp("Mann", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("Mann")))
    {
    PlayerInfo[playerid][pSex] = 1;
    SendClientMessage(playerid, COLOR_YELLOW2, "Wie ich sehe bist du ein Mann. Kannst du noch diese Frage beantworten:");
    SendClientMessage(playerid, COLOR_LIGHTRED, "Woher kommst du? ( USA / Europe / Asia )");
    RegistrationStep[playerid] = 3;
    return 0;
    }
    else if((strcmp("Frau", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("Frau")))
    {
    PlayerInfo[playerid][pSex] = 2;
    SendClientMessage(playerid, COLOR_YELLOW2, "Wie ich sehe bist du eine Frau. Kannst du noch diese Frage beantworten:");
    SendClientMessage(playerid, COLOR_LIGHTRED, "Woher kommst du? ( USA / Europe / Asia )");
    RegistrationStep[playerid] = 3;
    return 0;
    }
    else
    {
    SendClientMessage(playerid, COLOR_LIGHTRED, "Bist du ein Mann oder eine Frau ?");
    }
    return 0;
    }
    else if(RegistrationStep[playerid] == 3)
    {
    new idx;
    tmp = strtok(text, idx);
    if((strcmp("USA", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("USA")))
    {
    PlayerInfo[playerid][pOrigin] = 1;
    SendClientMessage(playerid, COLOR_YELLOW2, "Ok, du bist aus den USA.");
    SendClientMessage(playerid, COLOR_LIGHTRED, "Danke fürs Ausfüllen! Nun Startet ein Kurzes Tutorial");
    RegistrationStep[playerid] = 0;
    TutTime[playerid] = 1;
    return 0;
    }
    else if((strcmp("Europe", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("Europe")))
    {
    PlayerInfo[playerid][pOrigin] = 2;
    SendClientMessage(playerid, COLOR_YELLOW2, "Ok, du bist aus Europa.");
    SendClientMessage(playerid, COLOR_LIGHTRED, "Danke fürs Ausfüllen! Nun Startet ein Kurzes Tutorial");
    RegistrationStep[playerid] = 0;
    TutTime[playerid] = 1;
    return 0;
    }
    else if((strcmp("Asia", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("Asia")))
    {
    PlayerInfo[playerid][pOrigin] = 3;
    SendClientMessage(playerid, COLOR_YELLOW2, "Ok, du bist aus Asien.");
    SendClientMessage(playerid, COLOR_LIGHTRED, "Danke fürs Ausfüllen! Nun Startet ein Kurzes Tutorial");
    RegistrationStep[playerid] = 0;
    TutTime[playerid] = 1;
    return 0;
    }
    else
    {
    SendClientMessage(playerid, COLOR_LIGHTRED, "Woher kommst du? ( USA / Europe / Asia )");
    }
    return 0;
    }
    return 0;
    }
    return 1;
    }
    Hier wird abgefragt ob RegistrationsStep auf über 0 ist und dann prüft es ob die Variable den Wert 1 hat.
    Wenn man Mann oder Frau eingegeben hat, wird die Var auf 3 gestellt. ( Dabei wird pSex eingestellt. )
    Dannach wird abgefragt, ob die Var den Wert 3 hat, wenn ja muss das Herstammungsort gennant werden.
    Wenn alles stimmt so wird RegistrationsStep auf 0 gesetzt und TutTime auf den Wert 1 gesetzt. ( Dabei wird pOrigin eingestellt )


    Für die nächste Funktion muss sich das ganze wiederholen, also brauchen wir ein Timer:
    SetTimer("Tutorial",1000,1); // Die 1000 entsprechen 1 Sekunde
    Und noch ein Forward für den Timer:
    forward Tutorial();


    Jetzt kommt man zur der Funktion, so sieht sie aus:


    Das war Teil 1, der nächste Teil ist im nächsten Post.