Gracz wszedł/wyszedł z serwera PL
From SA-MP Wiki
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; }