Quantcast
Channel: SA-MP Forums
Viewing all articles
Browse latest Browse all 18226

[Tutorial] Crie seu servidor com 2 idiomas!

$
0
0
Olá a todos! Hoje em dia sabemos que o Inglês é uma língua falada fluentemente pelo mundo, ficando atrás apenas do Mandarim idioma falado pela China por conta de sua super população atualmente [1,371 bilhão (2015)].
Apesar disto o Inglês é a língua do mundo, desde a revolução industrial, e o crescimento absurdo econômico estadunidense.
E é por isso que hoje irei mostrar um pequeno e útil tutorial para vocês!


Requerimentos: ter uma base de registro e login com DOF2/Dini
OBS: Você pode usar outro Idioma como Espanõl


Como criar um servidor com 2 idiomas?

Bom, há várias maneiras de você criar, mas a que acho melhor é uma variável para cada idioma. Pois elas são muito importantes para todo o processo.

Code:

if(Player[playerid][Portugues]==1)// Fala Português
if(Player[playerid][English]==1)// Speak English

Você mesmo pode criá las, ou se você já tem uma base, apenas adicione o code.

PHP Code:

new Player[MAX_PLAYERS][InfoPlayer];

enum InfoPlayer {

    
English,
    
Portugues

}; 

Essas variáveis é as mais importante de tudo! pois ela que irá verificar se você fala English ou Português!

Code:

if(Player[playerid][Portugues]==1)//Fala português
if(Player[playerid][Portugues]==0)//Não Fala português

É a mesma coisa em inglês
Code:

if(Player[playerid][English]==1)//Speak English
if(Player[playerid][English]==0)//Do not speak English

Agora precisamos setar esse code ao player! e com isso usaremos uma Dialog para o player escolher o idioma. PT/EN

PHP Code:

#define Dialog_Idioma 666//topo

public OnPlayerConnect(playerid)
{
    
ShowPlayerDialog(playeridDialog_IdiomaDIALOG_STYLE_MSGBOX"Idioma / Language",
    
"Escolha um idioma!\n\n\
    Choose a language!\n\n"
,
    
"Português""English");
    return 
1;


Agora iremos na callback OnDialogResponse para definir o code.

PHP Code:

}
    if (
dialogid == Dialog_Idioma)
{
        if(
response)
        {
                                
/* PORTUGUÊS */
                    
Player[playerid][Portugues]=1//O Player escolheu português
            
SendClientMessage(playerid0xFF0000FF,"[PORTUGUÊS]: Se houver problemas digite /ajuda /cmds");
             
Player[playerid][English]=1//Não existe english 
        
}
        else
          {       
                        
/* ENGLISH */
               
Player[playerid][English]=1;//O Player escolheu English
            
SendClientMessage(playerid0xFF0000FF,"[ENGLISH]: If there are problems enter /help /cmds");
            
Player[playerid][Portugues]=0//Não existe português 
        


Bom agora que já setamos o code ao player, vamos para a parte de mensagens!

Lembarando:
Code:

Player[playerid][English]=1;//O Player Fala English! 
Player[playerid][Portugues]=0;//Não fala português

Vice-versa!

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Comandos de Bloqueio, que exijam uma função



Code:

CMD:ban(playerid, params[])
{       
    if(IsPlayerAdmin(playerid))return SendMessageIdioma(playerid, "Você não pode!", "You cant not!");

No final do seu Gm adicione o code

PHP Code:

stock SendMessageIdioma(playeridPTmsg[], ENmsg[])
{
    if(
Player[playerid][Portugues]==1)
    {
        
SendClientMessage(playerid, -1PTmsg);//1°MENSAGEM de texto
        
return 1;
    }
        if(
Player[playerid][English]==1)
        {
        
SendClientMessage(playerid, -1ENmsg);//2° MENSAGEM de texto
        
return 1;
    }
    return 
true;


Explicações SendMessageIdioma

SendMessageIdioma(playerid, PTmsg[], ENmsg[])

Stock criada com o sentido de dar mensagens duplas, "Mensagem Portugues","Mensagem English"
SendMessageIdioma(playerid, "Sua Mensagem em PORTUGUES", "Sua Mensagem em English");

Esse tipo de mensagem pode ser utilizado em qualquer lugar de seu GameMode, com o fato que que 1° Portugues 2° English mas você pode alterar isso na stock.

PHP Code:

if(IsPlayerAdmin(playerid))return SendMessageIdioma(playerid"Você não pode!""You cant not!"); 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Mensagem formatada para todos de uma linguagem


Trago a vocês o SendMessageFormatPTAll / SendMessageFormatENAll

O que ele faz?

Ele formata uma mensagem e manda automaticamente para os player que falam Português/English
ou seja você pode usar esse parâmetro com sscanf zcmd dcmd etc..

SendMessageFormatENAll //Mensagem formatada para todos os players quem fala English no servidor
SendMessageFormatPTAll //Mensagem formatada para todos os players que falam Português no servidor

Como funciona? SendMessageFormatPTAll


EXEMPLO:
PHP Code:

new pnome[MAX_PLAYER_NAME];
GetPlayerName(playeridpnome23);
SendMessageFormatPTAll(COR_MSG"Admin  %s é gay",pnome); 

COR_MSG = Coloque a cor da mensagem.

Para usar a função adiciona isso no topo de seu GM.

PHP Code:

new Cebola[200];
#define SendMessageFormatPTAll(%0,%1,%2); format(Cebola, sizeof(Cebola), %1, %2); for(new i = 0; i < GetMaxPlayers(); i++) { if(Player[i][Portugues]==1) SendClientMessage(i, %0, Cebola); }
#define SendMessageFormatENAll(%0,%1,%2); format(Cebola, sizeof(Cebola), %1, %2); for(new i = 0; i < GetMaxPlayers(); i++) { if(Player[i][English]==1) SendClientMessage(i, %0, Cebola); }[/CODE] 

Uso da função com comando



Code:

CMD:t(playerid, params[])
{
    new Text[70];
    if(sscanf(params, "s", Text))return SendMessageIdioma(playerid, "use o comando /t [mensagem]", "Usage the command /t [message]");
    SendMessageFormatPTAll(-1, "AVISO: %s", Text);//mensagem para todos os que falam português
    SendMessageFormatENAll(-1, "WARNING: %s", Text);//mensagem para todos os que falam English
        return 1;
}

OBS:

SendMessageIdioma
SendMessageFormatPTAll
SendMessageFormatENAll


são funções manuais criadas para diminuir as linhas e serem de fácil uso para cada idioma, elas estão abaixo.

PHP Code:

new Cebola[200];
#define SendMessageFormatPTAll(%0,%1,%2); format(Cebola, sizeof(Cebola), %1, %2); for(new i = 0; i < GetMaxPlayers(); i++) { if(Player[i][Portugues]==1) SendClientMessage(i, %0, Cebola); }
#define SendMessageFormatENAll(%0,%1,%2); format(Cebola, sizeof(Cebola), %1, %2); for(new i = 0; i < GetMaxPlayers(); i++) { if(Player[i][English]==1) SendClientMessage(i, %0, Cebola); }

stock SendMessageIdioma(playeridPTmsg[], ENmsg[])
{
    if(
Player[playerid][Portugues]==1)
    {
        
SendClientMessage(playerid, -1PTmsg);
        return 
1;
    }
        if(
Player[playerid][English]==1)
        {
        
SendClientMessage(playerid, -1ENmsg);
        return 
1;
    }
    return 
true;


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Uso do idioma em Dialogs


Não há muito segredo, uso um método strcat para criar a tradução olhem a abaixo:

PHP Code:

public OnPlayerSpawn(playerid)
{
    new 
set[120],str[100],Title[30]
    if(
Player[playerid][Portugues]==1)
    {
         
format(strsizeof(str),"Jogador Novato");
          
strcat(Titlestr);
        
format(strsizeof(str),"Bem Vindo ao inferno!");
         
strcat(setstr);
    }
    else
    if(
Player[playerid][English]==1)
    {
         
format(strsizeof(str),"Player New");
          
strcat(Titlestr);
        
format(strsizeof(str),"Welcome to hell!");
         
strcat(setstr);
    }
    
ShowPlayerDialog(playerid0xFDIALOG_STYLE_MSGBOXTitleset,"Ok","");
    return 
1;


A dialog usada DIALOG_STYLE_MSGBOX, mas é assim em qualquer outra dialog. Veja aqui DIALOGS

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Sobre

o uso da variável sempre irá definir todo o processo da linguagem

PHP Code:

if(Player[playerid][Portugues]==1)
{
//Função
}
else
if(
Player[playerid][English]==1)
{
//Função


Com a criação de comandos é bom sempre ser Neutro nesse assunto comandos com nomes diferentes, tente junta los em um só, existem aquele caso que você terá que criar 2 comandos para cada idiomas, e na parte de enviar mensagem para todos eu recomendo também você a baixarem a include Foreach, pois ela irá procrurar um player e dará a mensagem a ele. EX:

PHP Code:

#include <a_samp>
#include Foreach
#include sscanf

CMD:kill(playerid)
{
    
SetPlayerHealth(playerid, -1);
    new 
string[50], pName[MAX_PLAYER_NAME];
     
GetPlayerName(playerid,pName,MAX_PLAYER_NAME);
     
format(string,sizeof string,"{FF0000}%s Cometeu suicídio",pName);
     {
         foreach(
Player,i)
         if(
Player[i][Portugues]==1)
          
SendClientMessage(i, -1string);
      }
      
format(string,sizeof string,"{FF0000}%s Committed suicide",pName);
     {
         foreach(
Player,i)
         if(
Player[i][English]==1)
          
SendClientMessage(i, -1string);
      }
      return 
1;


Explicando:

foreach(Player,i) Irá procurar o player que no caso é o i
if(Player[i][English]==1) Esse player precisa ter English==1
SendClientMessage(i, -1, string);Se for english ==1 dará a mensagem formatada em inglês.

Espero que entendam.
Uso 2 idiomas em meu servidor e até hoje nunca deu nenhuma erro ou bug, se houver algum bug me avisem!


OBS:no meu caso a variável base do meu GM é essa Player[playerid]... Se a sua for diferente como PlayerDados[playerid] ou PlayerInfo[playerid] Mude! pois se não dará erro no seu server.

Viewing all articles
Browse latest Browse all 18226

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>