[GameMode] GameMode Base Inglкs/Portuguкs
#1

Cуdigo Mais Otimizado, Editado Dia: 20/03/2018, аs 21:44
PHP код:
/* Idiomas
    - Linguagem 1 - Ingles
    - Linguagem 2 - Portugues
    - Sexo      1 - Homem
    - Sexo      2 - Mulher
    Usei SetInt Para Setar Nъmeros para nгo ter dificuldades para vocк no futuro.
*/
#include <a_samp>
#include <DOF2>
#define REGISTRO          0
#define LOGIN             1
#define IDIOMA          2
#define SEXO            3
#define IDADE           4
#define DIA_NASCIMENTO  5
#define MES_NASCIMENTO  6
#define ANO_NASCIMENTO  7
#define MensagemFormatada(%1,%2,%3,%4) do{format(gstring,sizeof(gstring),%3,%4 );SendClientMessage(%1,%2,gstring );}while(IsPlayerConnected(-1))
main()
{
    print(
"Servidor ligado/carregado com sucesso.");
}
enum PlayerInfo
{
    
Linguagem,
    
Sexo,
    
Idade,
    
Dia_Nascimento,
    
Mes_Nascimento,
    
Ano_Nascimento
}
new 
pInfo[MAX_PLAYERS][PlayerInfo];
new 
gstring[500];
new 
tentativas[MAX_PLAYERS];
public 
OnGameModeInit()
{
    return 
1;
}
public 
OnGameModeExit()
{
    
DOF2_Exit();
    return 
1;
}
public 
OnPlayerRequestClass(playeridclassid)
{
    if(!
DOF2_FileExists(Conta(playerid)))
    {
        
format(gstringsizeof(gstring), "Olб Jogador %s, vocк nгo й registrado, Digite uma senha para vocк se registrar."PlayerName(playerid));
        
format(gstringsizeof(gstring), "%s\n\nDepois de colocar sua senha responda as perguntas bбsicas.\n"gstring);
        
ShowPlayerDialog(playeridREGISTRODIALOG_STYLE_INPUT"Registro"gstring"Registrar""Sair");
    }
    else
    {
        
format(gstringsizeof(gstring), "Olб Jogador %s, vocк й registrado, digite sua senha para logar"PlayerName(playerid));
        
format(gstringsizeof(gstring), "%s\n\nAcompanhe nosso Server pelo Fуrum: DigiteSeuForumAqui.com\n"gstring);
        
ShowPlayerDialog(playeridLOGINDIALOG_STYLE_PASSWORD"Login"gstring"Logar""Sair");
    }
    return 
1;
}
public 
OnPlayerDisconnect(playerid)
{
    
SalvarConta(playerid);
    
ResetarVariaveis(playerid);
    return 
1;
}
public 
OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    new 
len strlen(inputtext), val strval(inputtext);
    if(
dialogid == REGISTRO)
    {
        if(!
response) return Kick(playerid);
        if(
<= len <= 20)
        {
            
SendClientMessage(playerid, -1"| ERROR | Please enter a password between 4 and 20 characters!");
            
ShowPlayerDialog(playeridREGISTRODIALOG_STYLE_INPUT"Register""| ERROR | Please enter a password between 4 and 20 characters!""Register""Exit");
        }
        else
        {
            
DOF2_CreateFile(Conta(playerid));
            
DOF2_SetString(Conta(playerid), "Senha"inputtext);
            
ShowPlayerDialog(playeridIDIOMADIALOG_STYLE_LIST"What is your language?""English\nPortuguкs""Selecionar""Cancelar");
        }
    }
    if(
dialogid == LOGIN)
    {
        if(
strcmp(inputtextDOF2_GetString(Conta(playerid), "Senha"), true) == 0)
        {
            if(
pInfo[playerid][Linguagem] == 1) return SendClientMessage(playerid, -1"| INFO | successfully logged in");
            else 
SendClientMessage(playerid, -1"| INFO | Logado com sucesso.");
            
CarregarConta(playerid);
        }
        else
        {
            if(
tentativas[playerid] == 3)
            {
                if(
pInfo[playerid][Linguagem] == 1) return SendClientMessage(playerid, -1"You've made a mistake 3 times and been kicked.");
                   else 
SendClientMessage(playerid, -1"Vocк errou a senha 3 vezes e foi kikado.");
                
Kick(playerid);
            }
            else
            {
                new 
stg[100];
                
tentativas[playerid] ++;
                if(
pInfo[playerid][Linguagem] == 1)
                {
                    
format(stgsizeof(stg), "Number of attempts to log in to the server: (%d/3)"tentativas[playerid]);
                    
SendClientMessage(playerid, -1stg);
                    
ShowPlayerDialog(playeridLOGINDIALOG_STYLE_PASSWORD"Login""Enter the password correctly, you have 3 attempts""Next""Exit");
                }
                else
                {
                    
format(stgsizeof(stg), "Nъmero de Tentativas para vocк logar no servidor: (%d/3)"tentativas[playerid]);
                    
SendClientMessage(playerid, -1stg);
                    
ShowPlayerDialog(playeridLOGINDIALOG_STYLE_PASSWORD"Login""Digite sua senha correta, vocк tem 3 Tentativas""Proximo""Sair");
                }
            }
        }
    }
    if(
dialogid == IDIOMA)
    {
        if(!
response) return ShowPlayerDialog(playeridIDIOMADIALOG_STYLE_LIST"What is your language?""English\nPortuguкs""Selecionar""Cancelar");
        if(
listitem == 0)
        {
            
pInfo[playerid][Linguagem] = 1;
            
ShowPlayerDialog(playeridSEXODIALOG_STYLE_MSGBOX"Your Sex""Choose man or woman according to your gender""Man""Woman");
        }
        if(
listitem == 1)
        {
            
pInfo[playerid][Linguagem] = 2;
            
ShowPlayerDialog(playeridSEXODIALOG_STYLE_MSGBOX"Seu Sexo""Escolha Homem ou Mulher de acordo com seu Sexo""Homem""Mulher");
        }
    }
    if(
dialogid == SEXO)
    {
        if(
response)
        {
            
pInfo[playerid][Sexo] = 1;
            if(
pInfo[playerid][Linguagem] == 1) return ShowPlayerDialog(playeridIDADEDIALOG_STYLE_INPUT"Your Age""Enter what is your age""Next""Exit");
            else 
ShowPlayerDialog(playeridIDADEDIALOG_STYLE_INPUT"Sua Idade""Digite quantos anos vocк tem""Proximo""Sair");
        }
        else
        {
            
pInfo[playerid][Sexo] = 2;
            if(
pInfo[playerid][Linguagem] == 1) return ShowPlayerDialog(playeridIDADEDIALOG_STYLE_INPUT"Your Age""Enter what is your age""Next""Exit");
            else 
ShowPlayerDialog(playeridIDADEDIALOG_STYLE_INPUT"Sua Idade""Digite quantos anos vocк tem""Proximo""Sair");
        }
    }
    if(
dialogid == IDADE)
    {
        if(
16 <= val <= 70)
        {
            if(
pInfo[playerid][Linguagem] == 1) return ShowPlayerDialog(playeridIDADEDIALOG_STYLE_INPUT"Your Age""Enter how old you are between the ages of 11 and 70""Next""Exit");
               else 
ShowPlayerDialog(playeridIDADEDIALOG_STYLE_INPUT"Sua Idade""Digite quantos anos vocк tem entre 11 e 70 Anos""Proximo""Sair");
        }
        else 
pInfo[playerid][Idade] = strval(inputtext);
        if(
pInfo[playerid][Linguagem] == 1) return ShowPlayerDialog(playeridDIA_NASCIMENTODIALOG_STYLE_INPUT"Your birth day""now enter your birth day""Next""Exit");
        else 
ShowPlayerDialog(playeridDIA_NASCIMENTODIALOG_STYLE_INPUT"Seu Dia de Nascimento""Digite seu Dia de Nascimento""Proximo""Sair");
    }
    if(
dialogid == DIA_NASCIMENTO)
    {
        if(
<= val <= 31)
        {
            if(
pInfo[playerid][Linguagem] == 1) return ShowPlayerDialog(playeridDIA_NASCIMENTODIALOG_STYLE_INPUT"Your birth day""Enter your date of birth between 1 and 31""Next""Exit");
            else 
ShowPlayerDialog(playeridDIA_NASCIMENTODIALOG_STYLE_INPUT"Seu Dia de Aniversбrio""Digite entre 1 e 31 a data do seu Aniversбrio""Proximo""Sair");
        }
        else 
pInfo[playerid][Dia_Nascimento] = strval(inputtext);
        if(
pInfo[playerid][Linguagem] == 1) return ShowPlayerDialog(playeridMES_NASCIMENTODIALOG_STYLE_INPUT"your month of birth""Enter your month of birth""Next""Exit");
           else 
ShowPlayerDialog(playeridMES_NASCIMENTODIALOG_STYLE_INPUT"Seu Mкs de Nascimento""Digite seu Mкs de Nascimento""Proximo""Sair");
    }
    if(
dialogid == MES_NASCIMENTO)
    {
        if(
<= val <= 12)
        {
            if(
pInfo[playerid][Linguagem] == 1) return ShowPlayerDialog(playeridMES_NASCIMENTODIALOG_STYLE_INPUT"your month of birth""Enter your birthday month between 1 and 12""Next""Exit");
            else 
ShowPlayerDialog(playeridMES_NASCIMENTODIALOG_STYLE_INPUT"Seu Mкs de Aniversбrio""Digite o seu mкs de aniversбrio entre 1 e 12""Proximo""Sair");
        }
        else 
pInfo[playerid][Mes_Nascimento] = strval(inputtext);
        if(
pInfo[playerid][Linguagem] == 1) return ShowPlayerDialog(playeridANO_NASCIMENTODIALOG_STYLE_INPUT"your birth year""type the year you were born""Next""Exit");
        else 
ShowPlayerDialog(playeridANO_NASCIMENTODIALOG_STYLE_INPUT"Seu Ano de Nascimento""Digite o ano que vocк nasceu""Proximo""Sair");
    }
    if(
dialogid == ANO_NASCIMENTO)
    {
        if(
1970 <= val <= 2013)
        {
            if(
pInfo[playerid][Linguagem] == 1) return ShowPlayerDialog(playeridANO_NASCIMENTODIALOG_STYLE_INPUT"Your birth year""Enter between the years of 1970 and 2013 the year you were born""Next""Exit");
            else 
ShowPlayerDialog(playeridANO_NASCIMENTODIALOG_STYLE_INPUT"Seu ano de Aniversбrio""Digite entra 1970 e 2013 o ano que vocк nasceu!""Proximo""Sair");
        }
        else 
pInfo[playerid][Ano_Nascimento] = strval(inputtext);
           
SpawnPlayer(playerid);
          if(
pInfo[playerid][Linguagem] == 1) return SendClientMessage(playerid, -1"| INFO | We finished our questions, now play at will!");
        else 
SendClientMessage(playerid, -1"| INFO | Terminamos nossas perguntas, agora jogue avontade!");
    }
    return 
0;
}
static 
SalvarConta(playerid)
{
    
DOF2_SetInt(Conta(playerid), "Linguagem"pInfo[playerid][Linguagem]);
    
DOF2_SetInt(Conta(playerid), "Sexo"pInfo[playerid][Sexo]);
    
DOF2_SetInt(Conta(playerid), "Idade"pInfo[playerid][Idade]);
    
DOF2_SetInt(Conta(playerid), "DiaNascimento"pInfo[playerid][Dia_Nascimento]);
    
DOF2_SetInt(Conta(playerid), "MesNascimento"pInfo[playerid][Mes_Nascimento]);
    
DOF2_SetInt(Conta(playerid), "AnoNascimento"pInfo[playerid][Ano_Nascimento]);
    
DOF2_SaveFile();
    return 
1;
}
static 
CarregarConta(playerid)
{
    
DOF2_GetInt(Conta(playerid), "Linguagem"pInfo[playerid][Linguagem]);
    
DOF2_GetInt(Conta(playerid), "Sexo"pInfo[playerid][Sexo]);
    
DOF2_GetInt(Conta(playerid), "Idade"pInfo[playerid][Idade]);
    
DOF2_GetInt(Conta(playerid), "DiaNascimento"pInfo[playerid][Dia_Nascimento]);
    
DOF2_GetInt(Conta(playerid), "MesNascimento"pInfo[playerid][Mes_Nascimento]);
    
DOF2_GetInt(Conta(playerid), "AnoNascimento"pInfo[playerid][Ano_Nascimento]);
    
SpawnPlayer(playerid);
    if(
pInfo[playerid][Linguagem] == 1)
    {
        
MensagemFormatada(playerid, -1"Hello player %s, welcome back to the server"PlayerName(playerid));
    }
    else 
MensagemFormatada(playerid, -1"Olб player %s, bem vindo ao servidor novamente"PlayerName(playerid));
    return 
1;
}
static 
Conta(playerid)
{
    new 
Arquivo[100];
    
format(Arquivosizeof(Arquivo), "/Contas/%s.ini"PlayerName(playerid));
    return 
Arquivo;
}
static 
ResetarVariaveis(playerid)
{
    
pInfo[playerid][Linguagem] = 0,
    
pInfo[playerid][Sexo] = 0,
    
pInfo[playerid][Idade] = 0,
    
pInfo[playerid][Dia_Nascimento] = 0,
    
pInfo[playerid][Mes_Nascimento] = 0,
    
pInfo[playerid][Ano_Nascimento] = 0;
}
static 
PlayerName(playerid)
{
    new 
Nome[MAX_PLAYER_NAME];
    
GetPlayerName(playeridNome20);
    return 
Nome;

Reply
#2

que lixo kk nгo quero isso ai nem se vocк me pagar
Reply
#3

Quote:
Originally Posted by KoloradO
Посмотреть сообщение
que lixo kk nгo quero isso ai nem se vocк me pagar
Sim, tambйm penso assim de suas contribuiзхes para o fуrum Samp.
Reply
#4

@GuiKommander, vou lhe dar pequenas dicas para melhorias futuras.

#1
Este cуdigo й relativamente simples. Entrei achando que vocк havia feito de alguma forma diferente, porйm sгo apenas condicionais....

#2
Код:
if(strlen(inputtext) < 4 || strlen(inputtext) > 20)
Sempre que vocк usar uma funзгo mais de uma vez, recomendo armazenar o valor em uma variбvel.
Outra forma de otimizaзгo й fazer assim:
Код:
new len = strlen(inputtext);
if(4 <= len <= 20))
#3
A funзгo ResetarVariaveis(playerid) й utilizada ao conectar e desconectar e, de momento, nгo hб necessidade de zerar duas vezes.

#4
A funзгo Conta(playerid) й utilizada vбrias vezes na mesma funзгo e ela faz, respectivamente:
- formata a var Arquivo com a funзгo format;
- formata a var Nome e define o valor de nome com GetPlayerName.

Essa ordem й feita diversas vezes. Recomendo armazenar o valor em uma variбvel.

________________

Sгo alguns pontos que vi no seu cуdigo que podem ser melhorados.
Reply
#5

Quote:
Originally Posted by F1N4L
Посмотреть сообщение
@GuiKommander, vou lhe dar pequenas dicas para melhorias futuras.

#1
Este cуdigo й relativamente simples. Entrei achando que vocк havia feito de alguma forma diferente, porйm sгo apenas condicionais....

#2
Код:
if(strlen(inputtext) < 4 || strlen(inputtext) > 20)
Sempre que vocк usar uma funзгo mais de uma vez, recomendo armazenar o valor em uma variбvel.
Outra forma de otimizaзгo й fazer assim:
Код:
new len = strlen(inputtext);
if(4 <= len <= 20))
#3
A funзгo ResetarVariaveis(playerid) й utilizada ao conectar e desconectar e, de momento, nгo hб necessidade de zerar duas vezes.

#4
A funзгo Conta(playerid) й utilizada vбrias vezes na mesma funзгo e ela faz, respectivamente:
- formata a var Arquivo com a funзгo format;
- formata a var Nome e define o valor de nome com GetPlayerName.

Essa ordem й feita diversas vezes. Recomendo armazenar o valor em uma variбvel.

________________

Sгo alguns pontos que vi no seu cуdigo que podem ser melhorados.
Reforзei seus critйrios e nгo programo desse jeito, Acho muito dificil, Nгo ligo para o cуdigo ser mt complicado, quero uma coisa bem otimizada. Coloquei o Cуdigo da forma que vocк acha que quem precisar de uma base vai estudar para no futuro fazer um cуdigo bom.
A funзгo
PHP код:
Conta(playerid
Jб й uma static Para Pegar O arquivo do player, Para nгo ficar formatando trilhхes de Vezes quando for programar.
Valeu!
Reply
#6

Bom trabalho, nгo ligue para certas pessoas que querem lhe jogar para baixo! ninguйm nasce sabendo, continue estudando sempre para seu aprendizado sempre estб melhorando! +REP
Reply
#7

Enfim eu acredito que fez melhor que vender ao menos pode ensinar outros a estudar para melhorarem
Reply
#8

Quote:
Originally Posted by SpikeCompiler
Посмотреть сообщение
Bom trabalho, nгo ligue para certas pessoas que querem lhe jogar para baixo! ninguйm nasce sabendo, continue estudando sempre para seu aprendizado sempre estб melhorando! +REP
Vou deixar 1 REP para vocк tambйm, vocк anda ajudando bastante pessoas aqui no forum :3
Valeu mesmo mano. <3
Reply
#9

Quote:
Originally Posted by PT
Посмотреть сообщение
Enfim eu acredito que fez melhor que vender ao menos pode ensinar outros a estudar para melhorarem
Vou estudar mais.. e brevemente vou montar um sistema mais otimizado em Inglкs/Portuguкs
Valeu PT <3 Abraзos.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)