Coisas a fazer com OnPlayerText
Coisas a fazer com OnPlayerText
Em primeiro lugar, como você deve saber, OnPlayerText é chamado sempre que um jogador digita algo no chat.
Há muitos usos para ele que podem tornar seu servidor mais interessante, então vou mostrar alguns deles.
NOTA: Este tutorial presume que você tenha pelo menos um conhecimento básico de PAWN e de como usar as funções SA-MP padrão.
1. IntroduçãoO OnPlayerText em si é fácil de entender.
Ele tem dois parâmetros , ' playerid ' e ' text [] '.
- playerid é um número inteiro (ou seja, um número inteiro) e representa o ID do jogador que digitou a mensagem.
- text [] é uma string e representa o texto que o jogador digitou no chat.
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
return 1 ;
}
- Retornar 1 envia a mensagem padrão, como: " Seu nome : Mensagem "
- Retornar 0 não envia a mensagem padrão.
2. Usos
- Alterar o texto 'conversado'
Em primeiro lugar, mudamos 'return 1;' para 'retornar 0;' . Se o fizermos, a mensagem original não será enviada.
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
return 0 ;
}
Em seguida, definimos uma nova string de tamanho 128 . Chame do que você quiser, mas neste tutorial irei chamá-lo de 'msg' .
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
new msg [ 128 ] ; // A corda. Não precisamos ter um tamanho maior que 128, porque uma mensagem não pode ser maior que isso.
return 0 ;
}
Agora, teremos que formatar a string. Chame a função de formato e transforme a string em '[% d]% s' assim.
% d significa inteiro, e colocaremos o playerid em seu lugar.
% s significa string e colocaremos o texto em seu lugar.
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
new msg [ 128 ] ; // A corda. Não precisamos ter um tamanho maior que 128, porque uma mensagem não pode ser maior que isso.
formato ( msg, sizeof ( msg ) , "[% d]% s" , playerid, texto ) ; // A mensagem formatada. Lembre-se,% d significa inteiro (número inteiro) e% s é string - eles estão associados ao playerid, respectivamente texto.
return 0 ;
}
Pode parecer que terminamos, mas não terminamos. A mensagem está formatada, mas não foi enviada! Portanto, se você tentar bater um papo agora, nenhuma mensagem sairá - e não acho que isso ajude em nada, então há uma última coisa a fazer.
Chame SendPlayerMessageToAll , com senderid como playerid e com o texto como 'msg', da seguinte forma:
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
new msg [ 128 ] ; // A corda. Não precisamos ter um tamanho maior que 128, porque uma mensagem não pode ser maior que isso.
formato ( msg, sizeof ( msg ) , "[% d]% s" , playerid, texto ) ; // A mensagem formatada. Lembre-se,% d significa inteiro (número inteiro) e% s é string - eles estão associados ao playerid, respectivamente texto.
SendPlayerMessageToAll ( playerid, msg ) ;// SendPlayerMessageToAll enviará uma mensagem do jogador para todos, como o que aconteceria normalmente quando um jogador bate-papo, mas com a mensagem que escolhermos.
return 0 ;
}
Você poderia ajustar isso para ver o que quiser - se você tiver uma função em seu modo de jogo que retorna algo como o nome do time ou a classificação do jogador como uma string (ou seja, como um texto, não como um número) , nós poderia usá-lo e mostrá-lo na mensagem.
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
new msg [ 128 ] ; // A corda. Não precisamos ter um tamanho maior que 128, porque uma mensagem não pode ser maior que isso.
formato ( msg, sizeof ( msg ) , "[% s]% s" , GetPlayerTeamName ( playerid ) , texto ) ; // A mensagem formatada. Lembre-se,% s significa string - as strings estão associadas a GetPlayerTeamName (playerid), respectivamente texto.
SendPlayerMessageToAll ( playerid, msg) ; // SendPlayerMessageToAll enviará uma mensagem do jogador para todos, como o que aconteceria normalmente quando um jogador bate-papo, mas com a mensagem que escolhermos.
return 0 ;
}
- Fazendo um chat de administrador
Digamos que você queira discutir coisas com seus administradores em particular no servidor, mas sem enviar PM para cada um deles - é por isso que você precisa de um bate-papo com o administrador! Você também pode fazer isso com um comando, mas por que não simplificar:
Se o administrador fizer uma mensagem que começa com #, ela será automaticamente mostrada para outros administradores!
Começaremos mais uma vez do OnPlayerText 'padrão', mas você também pode continuar com o 'antigo'.
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
return 1 ;
}
Primeiro, adicione uma verificação para ver se o jogador é um administrador. Usaremos IsPlayerAdmin , que é usado para verificar se um jogador está logado no RCON, mas você pode alterá-lo com qualquer outra função / variável que mostre o nível de administrador do jogador.
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
if ( IsPlayerAdmin ( playerid ) )
{
// nosso código estará aqui
}
return 1 ;
}
À instrução if que acabamos de criar, adicionaremos "&& text [0] == '#'" para verificar se o primeiro caractere no texto é #. Você pode alterá-lo para qualquer outro personagem que você escolher para o chat de administrador.
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
if ( IsPlayerAdmin ( playerid ) && text [ 0 ] == '#' )
{
// nosso código estará aqui
}
return 1 ;
}
Em seguida, criaremos uma nova string, com o tamanho de 128 (como nas partes anteriores, nomeie como quiser) e a formataremos da seguinte maneira:
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
if ( IsPlayerAdmin ( playerid ) && text [ 0 ] == '#' )
{
new msg [ 128 ] ;
formato ( msg, sizeof ( msg ) , "[ADMIN CHAT]% s:% s" , pNome, texto [ 1 ] ) ;
}
return 1 ;
}
Mas espere! Não temos 'pName'. Crie-o como uma string com o tamanho de MAX_PLAYER_NAME e use GetPlayerName para obter o nome do jogador. Neste tutorial, presumimos que você sabe como usar as funções básicas, portanto, não explicaremos o uso de GetPlayerName em detalhes - no entanto, não há muito o que explicar.
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
if ( IsPlayerAdmin ( playerid ) && text [ 0 ] == '#' )
{
new msg [ 128 ] , pName [ MAX_PLAYER_NAME ] ;
GetPlayerName ( playerid, pName, MAX_PLAYER_NAME ) ;
formato ( msg, sizeof ( msg ) , "[ADMIN CHAT]% s:% s" , pNome, texto[ 1 ] ) ;
}
return 1 ;
}
Perfeito! Agora precisamos mostrar a todos os administradores.
Adicione isto ao final do seu modo de jogo:
Código de peão:
ações SendMessageToAdmins ( texto [ ] )
{
para ( nova i = 0 , i < MAX_PLAYERS, i ++ )
{
se ( IsPlayerAdmin ( i ) )
{
SendClientMessage ( i, - 1 , texto ) ;
}
}
}
Agora, adicione-o assim em OnPlayerText:
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
if ( IsPlayerAdmin ( playerid ) && text [ 0 ] == '#' )
{
new msg [ 128 ] , pName [ MAX_PLAYER_NAME ] ;
GetPlayerName ( playerid, pName, MAX_PLAYER_NAME ) ;
formato ( msg, sizeof ( msg ) , "[ADMIN CHAT]% s:% s" , pNome, texto[ 1 ] ) ;
SendMessageToAdmins ( msg ) ;
}
return 1 ;
}
Você também pode adicionar o ID como no exemplo anterior, assim:
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
if ( IsPlayerAdmin ( playerid ) && text [ 0 ] == '#' )
{
new msg [ 128 ] , pName [ MAX_PLAYER_NAME ] ;
GetPlayerName ( playerid, pName, MAX_PLAYER_NAME ) ;
formato ( msg, sizeof ( msg ) , "[ADMIN CHAT]% s (ID% d):% s", pNome, playerid, texto [ 1 ] ) ;
SendMessageToAdmins ( msg ) ;
}
return 1 ;
}
- Usando strfind
Isso pode ser usado para várias coisas, e darei um exemplo.
Mais uma vez, começamos com o OnPlayerText 'básico'.
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
return 1 ;
}
Primeiro, adicionaremos uma instrução if que verifica duas 'palavras' no texto: 'como' e 'obter o carro'.
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
if ( strfind ( text, "how" , true ) ! = - 1 && strfind ( text, "get car" , true ) ! = - 1 ) {
// nosso código vai aqui
}
return 1 ;
}
Então, retornamos 0, para que a mensagem não seja enviada, e enviamos ao jogador esta mensagem: "Para pegar um carro, use o comando / v.".
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
if ( strfind ( text, "como" , true ) ! = - 1 && strfind ( text, "get car" , true ) ! = - 1 ) {
SendClientMessage ( playerid, - 1 , "Para obter um carro, use o comando / v." ) ;
return 0 ;
}
return 1 ;
}
Você pode usar isso com várias outras strings para tornar seu servidor de diversão / acrobacias mais incrível, por exemplo, se o jogador disser 'ajude-me a subir', você pode definir sua posição 10 Z acima.
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
if ( strfind ( text, "help me up" , true ) ) {
new Float : X, Float : Y, Float : Z;
GetPlayerPos ( playerid, X, Y, Z ) ;
SetPlayerPos ( playerid, X, Y, Z + 10 ) ;
SendClientMessage ( playerid, - 1 ,"Eu configurei sua posição 10 Z mais alta - espero que você não esteja mais preso!" ) ;
return 0 ;
}
return 1 ;
}
- Respondendo a perguntas
Mais uma vez, começamos com a função base OnPlayerText.
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
return 1 ;
}
Em primeiro lugar, teremos que criar algumas variáveis, mas antes disso, faça o seguinte, se ainda não o fez:
No topo do seu modo de jogo, coloque o seguinte:
Código de peão:
#undef MAX_PLAYERS
#define MAX_PLAYERS 200
Agora podemos criar as variáveis! Faça IsAnswering e pAge, com o tamanho de MAX_PLAYERS, e defina QUESTION_AGE como 1 e QUESTION_NONE como 0, assim:
Código de peão:
novo IsAnswering [ MAX_PLAYERS ] ;
novo pAge [ MAX_PLAYERS ] ;
#define QUESTION_NONE 0
#define QUESTION_AGE 1
Agora, onde devemos fazer a pergunta? Vamos fazer isso em OnPlayerSpawn .
Código de peão:
public OnPlayerSpawn ( playerid )
{
SendClientMessage ( playerid, - 1 , "PERGUNTA: Quantos anos você tem? (responda à pergunta no chat.)" ) ;
IsAnswering [ playerid ] = QUESTION_AGE;
return 1 ;
}
Agora, vamos adicionar uma instrução if que verifica se o jogador está respondendo QUESTION_AGE.
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
if ( IsAnswering [ playerid ] == QUESTION_AGE )
{
// nosso código estará aqui!
}
return 1 ;
}
Agora, vamos pensar. O que deveríamos fazer? Devemos retornar 0 para que os jogadores não vejam, mas como obtemos o valor como um inteiro, já que o texto é uma string?
É aqui que somos salvos por uma função muito mágica - strval! Vamos declarar uma nova variável e armazenar o valor da string nela.
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
if ( IsAnswering [ playerid ] == QUESTION_AGE )
{
new age; // Declare a variável de idade.
idade = strval ( texto ) ; // Defina-o com o valor do texto.
pAge [ playerid ] = idade; // Defina a variável Idade para a idade digitada, que pode ser salva com o sistema de sua escolha.
IsAnswering [ playerid ] = QUESTION_NONE; // Você pode adicionar várias perguntas e alterá-las para o ID da próxima pergunta e, em seguida, colocar a próxima pergunta abaixo como uma ClientMessage.
return 0 ;
}
return 1 ;
}
Claro, podemos querer evitar que os jogadores mentem sobre sua idade ou manter as "crianças" fora de nossos servidores ...
Código de peão:
public OnPlayerText ( playerid, text [ ] )
{
if ( IsAnswering [ playerid ] == QUESTION_AGE )
{
new age;
idade = strval ( string ) ;
if ( age > = 18 && age <= 100 ) // Se você tem idade suficiente para jogar San Andreas e em limites realistas de idade
{
pAge [ playerid ] = age;// Defina a variável Idade para a idade digitada, que pode ser salva com o sistema de sua escolha.
}
else if ( age <= 18 )
{
SendClientMessage ( playerid, - 1 , "Você não tem idade suficiente para jogar San Andreas!" ) ;
Chute ( playerid ) ;
}
else if ( age > = 100 )
{
SendClientMessage ( playerid, - 1 ,"Você não pode ser tão velho, e se é, por que está jogando San Andreas?" ) ;
Chute ( playerid ) ;
}
return 0 ;
}
return 1 ;
}
...
Este tutorial será atualizado em breve com mais exemplos!
3. Desafios para iniciantes
- Faça um chat VIP, junto com o chat do administrador! Se você entendeu alguma coisa do que estava acontecendo, deve ser um pedaço de torta para você. Caso contrário, leia o tutorial novamente. (Extremamente fácil)
- Mostre um balão de bate-papo acima do jogador com o texto que ele digitou! (dica: use SetPlayerChatBubble ) (Extremamente fácil)
- Faça um sistema mudo! Se o jogador estiver sem som, sua mensagem não será enviada e ele receberá uma mensagem como 'Você está sem som. Você não pode falar.' (Fácil)
- Faça um tutorial completo! Isso não deve ser difícil e requer apenas que você adicione mais instruções define e if. (Fácil)
- Faça canais de chat! Se o jogador estiver no canal 1, ele só pode receber mensagens do canal 1, se ele estiver no canal 2, apenas do canal 2 e assim por diante. (Médio)
- Faça um script de censura: se o jogador disser algo como 'oi, <palavrão aqui> você' mude para 'oi, **** você' SEM remover a mensagem inteira. (dica: use o strfind ) (Médio / Difícil)

0 Comentários