Criando mensagem de entrada e saida
From SA-MP Wiki
Criando uma mensagem de entrada
public OnPlayerConnect(playerid) { new pname[MAX_PLAYER_NAME], string[22 + MAX_PLAYER_NAME]; GetPlayerName(playerid, pname, sizeof(pname)); format(string, sizeof(string), "%s entrou no servidor.", pname); SendClientMessageToAll(0xAAAAAAAA, string); return 1; }
O código acima irá mostrar uma mensagem de entrada no chat para todos os jogadores. Ele é colocado na callback OnPlayerConnect, que é chamada cada vez que um jogador conecta ao servidor. Isso significa que este código será executado toda vez que um jogador entrar no servidor. Primeiro, uma matriz chamada pName será criada com o tamanho de MAX_PLAYER_NAME (definido como 24 na a_samp.inc). Depois, iremos armazenar o nome do jogador nesta matriz.
Então, definimos uma nova matriz chamada string. Nesta matriz iremos armazenar a mensagem de entrada. O tamanho é 48, então ambos, o nome do jogador (pName, 24 chars) e a mensagem (" entrou no servidor.", 20 chars) e um character invisivel NUL-byte para terminar a string cabem em nossa matriz.
Agora, GetPlayerName pode ser chamado para obter o nome do jogador. Ele será armazenado na matriz pName (o segundo parâmetro), com o tamanho máximo de sizeof(pName), o tamanho de pName (que era 24).
Agora que sabemos o nome do jogador, podemos formatar a mensagem de entrada com format. O primeiro parametro permite nos especificar onde queremos ter a string formatada. Criamos a matriz string para este propósito mais cedo. O segundo parâmetro é o tamanho máximo da string formatada. Isto irá ser o tamanho da string. O terceiro parâmetro é o tamanho real que queremos formatar. %s é um espaço-reservado(placeholder) para outra string(texto). Usando o quatro parâmetro nós especificamos que ele deve ser substituído por pName. Desse modo, teremos "<nome do jogador> entrou no servidor." na matriz string.
Finalmente, podemos enviar a mensagem para todos os jogadores com a função SendClientMessageToAll. O primeiro parâmetro especifica a cor cinza, o segundo é a mensagem.
Criando uma mensagem de saída
Agora iremos criar as mensagens de saídas e adicionar se foi queda de conexão, conta própria, ou kickado.
public OnPlayerDisconnect(playerid, reason) { new pname[MAX_PLAYER_NAME], string[39 + MAX_PLAYER_NAME]; GetPlayerName(playerid, pname, sizeof(pname)); switch(reason) { case 0: format(string, sizeof(string), "%s saiu do servidor. (Perda de Conexão)", pname); case 1: format(string, sizeof(string), "%s saiu do servidor. (Conta Própria)", pname); case 2: format(string, sizeof(string), "%s saiu do servidor. (Kickado)", pname); } SendClientMessageToAll(0xAAAAAAAA, string); return 1; }
Este código é bastante parecido com o de entrada, exceto que ele é colocado na callback OnPlayerDisconnect, que é executado sempre que um jogador sai do servidor. A declaração switch nos permite criar diferentes mensagens de acordo com o motivo. Motivo(reason) 0 é perca de conexão(timeout), motivo 1 é quando o jogador fecha o jogo e motivo 2 quando o servidor expulsa o jogador (kick ou ban).
Note que a matriz string agora tem o tamanho de 56 cells, para acomodar a mensagem com maior quantidade de letras (24 + 31 + 1). Neste caso, a mensagem de perda de conexão é a maior.