Beiträge von Johann_x3

    Hallo fische :)


    Was lernen wir in diesem Tutorial?

    • ein AFK-System zu bauen
    • es zu erweitern

    Let's start with the System!


    Was wird benötigt?

    • 1ne Variable
    • 2 Commands

    Die Varable wird bei uns "IstAFK" heißen.
    Wir definieren eine Variable mit "new" aber
    wir definieren einen Bool da der nur 1 oder 0 returnen kann! (1 = true ; 0 = false)


    //Am Anfang des Scriptes kommt
    new bool:IstAFK[MAX_PLAYERS];
    Beim Definieren ist der Standardwert eines Bools 0, also false.


    Nun warum Bool?
    Eine normale Variable reserviert ein stückchen Speicher im RAM.
    Und da wir nur 1 / 0 benutzen ist der wohl sinnvoller.

    Nun der CMD "/afk".


    // Dies kommt unter "OnPlayerCommand"
    if(strcmp(cmdtext, "/afk", true, 4) == false)


    Zu Deutsch:
    Überprüft ob der String "cmdtext" mit "/afk" übereinstimmt. Das "true" ist ein Bool und
    entscheidet darüber ob zwischen Groß- und Kleinschreibung unterschieden werden muss.
    Die "4" gibt dabei die Länge des Strings an, welcher mit "cmdtext" verglichen wird.
    Das "== false" am Ende frägt ab ob die Abfrage false returnt.


    {
    Die Geschweifte-Klammer "eröffnet" den Codeblock sozusagen.


    if(IstAFK[playerid] == false)
    Überprüft ob "IstAFK" bei "playerid" zu false gleicht


    {
    Die Geschweifte-Klammer "eröffnet" den Codeblock sozusagen.


    new str[20], pname[20];
    GetPlayerName(playerid, pname, 20);


    new str[20],
    Definiert eine Variable mit max. 20 Zeichen die enthalten sein können.


    pname[20];
    Definiert ebenfalls eine Variable mit max 20 Zeichen.


    GetPlayerName(playerid, pname, 20);
    "fischt" sozusagen den Namen des Spielers raus und speichert diesen im string "pname" ab der
    max. 20 Zeichen* enthält sonst kommt ein Error/Warning.

    * Der Name darf max 20 Charaktere enthalten...


    format(str, 256, "%s ist nun AFK!", pname, cmdtext[4]);
    SendClientMessageToAll(0x4682B4AA, str);


    [SYNTAX]: format(output[], len, const format[], {Float,_}:...)
    Formatiert
    eine Zeichenkette in die Variable rein.

    SendClientMessageToAll(0x4682B4AA, str);
    [SYNTAX]: SendClientMessageToAll((color, const message[]);

    Sendet dem Clienten eine Message und das "ToAll" bedeutet, dass die Message an jeden Spieler gesendet wird.


    IstAFK[playerid] = true;
    TogglePlayerControllable(playerid, false);

    IstAFK[playerid] = true;

    Setzt den Inhalt des Bool's auf true.


    TogglePlayerControllable(playerid, false);
    Der Spieler wird gefreezed.
    able = "fähig" also der Spieler wird nicht fähig
    seinen Charackter zu Kontrollieren.

    } else {

    wenn die Variable "IstAFK" nicht false ist soll


    SendClientMessage(playerid, COLOR_RED, "[ERROR]: Du bist schon AFK!");
    }
    return true;
    }


    eine Message zum Player rausgesendet werden wo drin steht "[ERROR]: Du bist schon AFK!".



    Wir haben den ersten CMD bereits fertig er sollte funktionstüchtig sein!
    Den /back CMD kann man auf die selbe Art&Weise coden nur, dass die Zahlen bei "IstAFK" auf 0 gesetzt werden müssen!


    Zitat

    Ihr benutzt doch nur Copy&Paste

    Aus diesem Grund sollt ihr selbst den /back CMD
    coden.
    Ich bitte alle erfahrenen Scripter dabei nicht zu helfen ausser es nochmal zu erklären und
    ich hoffe, dass jemand aus diesem Tutorial was gelernt hat!


    TEIL 2 - COMMING SOON!!

    Wenn ich bei dir zoggn würde und dies im update käme wär ich sofort wo anders...
    new ipStr[16], messageStr[48];
    GetPlayerIp( playerid, ipStr, 16 );

    format( messageStr, 48, " * Deine IP Adresse - %s", ipStr );
    SendClientMessage( playerid, 0xFFFFFFFF, messageStr );

    Müsste es sein...

    Im Ordner wo die sever.cfg datei ist, ist ein ordner namens "gamemodes" dort sind die Funktionen eines servers hauptsächlich enthalten um diese "einzustellen musst du diese scripten und compilen.
    diese werden als *.amx gespeichert.
    und bei der server cfg musst du eine vorhandene *.amx datei angeben zwar nicht mit .amx aber den namen der datei