Ad Code

Responsive Advertisement

 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ção
O 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.
Explorando essa função, podemos fazer várias coisas.

2. Usos
  • Alterar o texto 'conversado'
As mensagens que você envia pelo chat geralmente aparecem no SA-MP como " Seu nome : Mensagem ". Mas e se você quiser adicionar o ID e torná-lo " Seu nome : [ID] Mensagem "?

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 ;
}
Agora, a mensagem será semelhante a " Seu nome : [ID] Mensagem "!

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 ;
}
(Não existe uma função como essa e nem a definimos. Este é apenas um exemplo. Digamos, se o nome da sua equipe for 'Vermelho', no lugar do ID, você verá [Vermelho]. Você também poderia ter feito isso mudando a cor do player e, portanto, você não teria necessidade de tal, mas este é apenas um exemplo.)
  • 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 ) ;
        }
    }
}
Altere IsPlayerAdmin (i) com qualquer outra função ou variável que contenha seu nível de administrador, como PlayerInfo [i] [pAdmin]. Se você tiver vários níveis, pode fazer como "if (GetPlayerAdmin (playerid)> = 1)" (supondo que você tenha essa função).

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 ;
}
E nosso chat de administrador está pronto!
Strfind irá procurar na string por uma determinada palavra.
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 ;
}
(Sim, também pode ser feito com um comando simples, mas por que diabos não?: P)


  • Respondendo a perguntas
Por exemplo, você pode fazer uma pergunta ao jogador, como 'Quantos anos você tem?', E deseja que o jogador responda a essa pergunta diretamente, escrevendo-a no chat.
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
Substitua '200' por sua contagem máxima de jogadores. Se for inferior a 500, ajudará, pois ocupará menos espaço.

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 ;
}
Fizemos a pergunta ao jogador e definimos IsAnswering como QUESTION_AGE para que possamos saber o que ele responderá em OnPlayerText.

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 ;
}
.... Estou brincando; Não tenho mais de 18 anos, de qualquer maneira. Este é apenas um exemplo do que poderia ser feito.

...
Este tutorial será atualizado em breve com mais exemplos!
3. Desafios para iniciantes
  1. 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)
  2. Mostre um balão de bate-papo acima do jogador com o texto que ele digitou! (dica: use SetPlayerChatBubble ) (Extremamente fácil)
  3. 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)
  4. 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)
  5. 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)
  6. 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)

Postar um comentário

0 Comentários

© 2022 PawnScript All Rights Reversed