Gracz wszedł/wyszedł z serwera PL

From SA-MP Wiki

Jump to: navigation, search

Witam. Dziś pokaże wam jak zrobić, żeby wyskakiwały informacje o graczach (któs wszedł na serwer/opuścił go). A więc bierzmy się do pracy!

Gracz wszedł na serwer

Najpierw zacznijmy od dodawania następujących tabel pod OnPlayerConnect:

new text[128], imiegracza[MAX_PLAYER_NAME];

text[128] reprezentuje tabele o nazwie 'text' która może przechować 128 znaków. Tym większa liczba, tym więcej pamięci serwer zużywa. To użyjemy do tworzenia wiadomości.
imiegracza[MAX_PLAYER_NAME] to też tabela o nazwie 'imiegracza', tylko że tym razem może przechować tylko 24 znaki! (Tyle może mieć nick gracza max.) MAX_PLAYER_NAME jest definicją dla 24.

Następnie musimy pobrać imię gracza. Robimy to tak:

GetPlayerName(playerid, imiegracza, sizeof(imiegracza));

W tej funkcji używamy tabelkę, którą wcześniej stworzyliśmy (imiegracza). sizeof() jest użyte przy rozmiarach tablic; tego właśnie użyliśmy przy funkcji.

Teraz czas na robienie wiadomości, która wyskoczy na czacie, gdy ktoś wejdzie na nasz serwer! Robi się to tak:

format(text, sizeof(text), "*** Gracz %s (ID %d) wszedł na serwer! ***", imiegracza, playerid);

Podobnie jak w poprzedniej funkcji, tym razem używamy tabelki 'text'. %s representuje miejsce na imie gracza, który dołączyl do serwera. Natomiast %d representuje miejsce na jego ID.
Używa się funkcji format() gdy tekst który chcemy wysłać zawiera zmienny tekst.
I ostatni krok to dodanie tej funkcji:

SendClientMessageToAll(KOLOR, text);

KOLOR musimy zmienić na jakiś kolor. Ta oto funkcja pokaże wiadomość w czacie, że ktoś wbił na nasz serwer!
Nasza praca powinna wyglądać tak:

public OnPlayerConnect(playerid)
{
    new text[128], imiegracza[MAX_PLAYER_NAME];
    GetPlayerName(playerid, imiegracza, sizeof(imiegracza));
    format(text, sizeof(text), "*** Gracz %s (ID %d) wszedł na serwer! ***", imiegracza, playerid);
    SendClientMessageToAll(KOLOR, text);
    return 1;
}

Gracz opuścił serwer

Tym razem będziemy pracować pod OnPlayerDisconnect. Kod jest podobny tylko od format() kod się zmienia. Oto zmiana:

switch(reason)

switch jest alternatywą else if(). To jest coś jak zmienna, tylko lepsze! Pod tym dodajemy:

{
    reason 0:
    {

reason representuje powód opuszczenia serwera. Jest ich 3: Timeout (stracenie łączności z serwerem/crash), używanie komendy /q lub ESC > Wyjdź z gry i kick/ban.
0 jest numerem powodu. W tym przypadku, 0 representuje timeout, 1 to /q i 2 to kick/ban.
Pod tym dodajemy:

format(text, sizeof(text), "*** Gracz %s (ID %d) opuścił serwer! (Timeout) ***", imiegracza, playerid);
SendClientMessageToAll(KOLOR, text);

I zamykamy klamrą. Możemy tak robić i zmieniać dla /q i kick/ban. Gdy to już zrobiliśmy, nasza praca powinna wyglądać tak:

public OnPlayerDisconnect(playerid, reason)
{
    new text[128], imiegracza[MAX_PLAYER_NAME];
    GetPlayerName(playerid, imiegracza, sizeof(imiegracza));
    switch(reason)
    {
        reason 0:
        {
            format(text, sizeof(text), "*** Gracz %s (ID %d) opuścił serwer! (Timeout) ***", imiegracza, playerid);
            SendClientMessageToAll(KOLOR, text);
        }
        reason 1:
        {
            format(text, sizeof(text), "*** Gracz %s (ID %d) opuścił serwer!***", imiegracza, playerid);
            SendClientMessageToAll(KOLOR, text);
        }
        reason 2:
        {
            format(text, sizeof(text), "*** Gracz %s (ID %d) opuścił serwer! (Kick/Ban) ***", imiegracza, playerid);
            SendClientMessageToAll(KOLOR, text);
        }
    }
    return 1;
}
Personal tools
Navigation
Toolbox