SA-MP Forums Archive
[FilterScript] Sistema de Registro e Login em comandos Com explicaзгo (ini base) - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+----- Forum: Lançamentos/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=56)
+----- Thread: [FilterScript] Sistema de Registro e Login em comandos Com explicaзгo (ini base) (/showthread.php?tid=626871)



Sistema de Registro e Login em comandos Com explicaзгo (ini base) Dados Atualizados 1.0 - TheBob - 21.01.2017

Код:
//Callback comandos
CMD:login(playerid, params[])
{
if(DesLog[playerid] == 2) return SendClientMessage(playerid, -1, "[Logado] Status Atual");
Dados[playerid][Senha] = EOS;
strcat(Dados[playerid][Senha], DOF2_GetString(Contas(playerid), "Senha"), 10);
new tmp[10], strmsg[58];
if(sscanf(params,"s[10]", tmp)) return SendClientMessage(playerid, -1, "Vocк precisa digitar a sua senha que seja menor que 8 caracteres.");
if(strlen(tmp) > 8 || strlen(tmp) < 1){ return SendClientMessage(playerid, -1, "Senha muito grande."); }
if(strcmp(tmp, Dados[playerid][Senha], true) == 0) {
format(strmsg, sizeof(strmsg), "Logado com sucesso! %s", tmp);
printf("Senha registrada: %s | Senha digitada: %s", Dados[playerid][Senha], tmp);
SendClientMessage(playerid, -1, strmsg);
print("Status: logado");
DesLog[playerid] = 2;
}else{
SendClientMessage(playerid, -1, "Senha errada");
printf("Senha registrada: %s | Senha digitada: %s", Dados[playerid][Senha], tmp);
}
return 1;
}
CMD:register(playerid, params[])
{
if(DOF2_FileExists(Contas(playerid))) return SendClientMessage(playerid, -1, "[Registrado] Status Atual");
new strsenha[10], strmsg[58];
if(sscanf(params,"s[10]", strsenha)) return SendClientMessage(playerid, -1, "Crie uma senha para sua conta.");
if(strlen(strsenha) > 8 || strlen(strsenha) < 4) return SendClientMessage(playerid, -1, "Faзa uma senha entre 4 а 8 caracteres");
DOF2_CreateFile(Contas(playerid));
SalvarContas(playerid);
format(strmsg, sizeof(strmsg), "Senha Antiga: %s", Dados[playerid][Senha]); SendClientMessage(playerid, -1, strmsg);
format(Dados[playerid][Senha], sizeof(strsenha), "%s", strsenha);
format(strmsg, sizeof(strmsg), "Senha: %s", Dados[playerid][Senha]); SendClientMessage(playerid, -1, strmsg);
SendClientMessage(playerid, -1, "{ff0000}Vocк ganhou mais 15Milhхes por registrar");
format(strmsg, sizeof(strmsg), "Dinheiro Antigo: %d", Dados[playerid][Money]); SendClientMessage(playerid, -1, strmsg);
Dados[playerid][Money] = GetPlayerMoney(playerid);
GivePlayerMoney(playerid, 15000000);
Dados[playerid][Money] += 15000000;
format(strmsg, sizeof(strmsg), "Dinheiro: %d", Dados[playerid][Money]); SendClientMessage(playerid, -1, strmsg);
SendClientMessage(playerid, -1, "Done! Type now /login to Log into your new account.");
return SalvarContas(playerid);
}
Код:
//CallBack (Definiзхes na fala do player[chating])
public OnPlayerText(playerid, text[])
{
	new name[MAX_PLAYER_NAME];
	GetPlayerName(playerid, name, sizeof(name));
	new strmsg[170];
	if(strlen(text) > sizeof(strmsg)) return SendClientMessage(playerid, -1, "Mensagem muito grande");
	if(DesLog[playerid] == 0){
	    format(strmsg, sizeof(strmsg), "%s{00FA9A}[Noob/Guest]{ffffff}: %s", name, text);
     	SendClientMessageToAll(-1, strmsg); return 0;
	}
	if(DesLog[playerid] == 1){
		format(strmsg, sizeof(strmsg), "%s{FF1493}[Deslogado]{ffffff}: %s", name, text);
		SendClientMessageToAll(-1, strmsg); return 0;
	}
	if(DesLog[playerid] == 2){
	    format(strmsg, sizeof(strmsg), "%s{00FFFF}[Logado]{ffffff}: %s", name, text);
     	SendClientMessageToAll(-1, strmsg); return 0;
	}
	return 1;
}
Descriзгo Rбpida: Demorei 2 dias para fazer isso aqui, convertido em horas acho que uns 50 minutos.
Resolvi postar aqui jб que muita gente gosta desse tipo de conteъdo acho que a board fica atй mais interativa.
Код:
//Verificaзгo de conexгo do player
public OnPlayerConnect(playerid)
{
        DesLog[playerid] = 0;
	if(DOF2_FileExists(Contas(playerid))){ Cabaco[playerid] = 0; } else { Cabaco[playerid] = 1; }
	SendClientMessage(playerid, -1, "Seja Bem Vindo.");
	if(Cabaco[playerid] == 1){
	SendClientMessage(playerid, -1, "Type /register to register on out database to Your NickName have a account.");
 	SendClientMessage(playerid, -1, "Por sua primeira visita iremos lhe dar 10kk para vocк.");
 	GivePlayerMoney(playerid, 10000000); }else{
 	DesLog[playerid] = 1; SendClientMessage(playerid, -1, "De Volta");
	SendClientMessage(playerid, -1, "Type /login for login into server to use this NickName.");
	}
	return 1;
}
Valores: 1. Algoritimo, 2. Stocks DOF2, 3. Variaveis e Enums
O algoritimo dos Comandos
CMD:Register
vamos criar duas casas de salvamentos. Agora podemos trabalhar somente com essas duas casas
quando o Jogador digitar /register temos que confirmar se o comando vem seguido de senha.
Agora que guardamos a senha na casa de salvamento precisamos estabelecer um limite de letras e numeros na senha para evitar histуrias
Se o jogador digitar entre 8 a 4 - beleza, ta certo.
Vamos prosseguir.
Vocк agora pode dar pra ele alguma coisa de bonus, como 10kk
dei 10k e formatei a variavel dele com a casa de salvamento principal, que й a da senha Ok?
se tudo ok. Jaera

CMD:Login Atualizado 0.1
primeiro definimos EndOfString da Variavel de salvamento de senha do player.
agora definimos que a Dados[...][Senha] seria igual ao dado salvo da conta do Player,
criamos duas casas de salvamento, uma para guardar a senha digitada e a outra precisamos
para formatar uma mensagem de erro, caso ele erre(para que o player veja o erro).
Beleza, vamos ver se o player agora digitou alguma coisa acompanhado do comando /login
a funзгo sscanf que estб colada aн para vocкs, jб define que nossa string, guarde a senha
digitada do player. Verificamos agora a string(tmp) й maior do que a gente aceita,
caso for mandaremos uma mensagem de erro com esse simples SendClientMesage();
tudo certo, vamos ver se o que o player digitou condiz agora com o que estб registrado
abrimos a chave e abaixo da chave, digitamos o que acontece se a senha for real
Colocamos uma mensagem formatada da nossa string de mensagem (strmsg)
e mandamos um SCM(sendclientmessage) de sucesso, acompanhado com a senha.
Agora tambйm para Fins de Debug's, colocamos um prinf(formatad) para o console do server
com a senha digitada, e a senha que estб no banco de dados. (Isso foi um teste)
colocamos tambйm o print normal mandando para o console, que o player estб com o status logado
Por fim colocamos nossa casa de salvamento(variavel) >DesLog< para o valor 2(Logado)
fechamos a primeira chave, que acontece quando o player acerta a senha.
Colocamos agora um ELSE (OU SE) Ele errar, abrimos outra chave
colocamos agora a mensagem de erro da senha, e mandamos um debug simples, para o console.
Mostrando a senha registrada e a senha digitada. Por causa de algum erro, sу ver se estб errado msm
fechamos a chave. Retornamos o valor 1 da callback CMD:login

public OnPlayerText(playerid, text[])
bom, aqui tratamos sobre os nнveis de Login, onde irб verificar se o player estб logado, ou nгo e mostrar para todos.
Criamos uma variбvel para salvar o nome do player, para quando ele digitar aparecer o nome dele tambйm.
Usamos a funзгo para pegar o nome do player e mandar para nossa variavel Name
criamos uma pequena string para a mensagem do player. Na hora da formataзгo.
colocamos o mбximo de caracteres 170, mas vocк pode diminuir.
agora verificamos se o texto digitado nгo й muito grande. Prosseguindo
vamos usar nossa string, strmsg que criamos para as mensagens.
Verificamos primeiramente o nнvel de login do player, assim formatando a mensagem com uma Tag ao lado do nome.
[Logado] , [Deslogado], [Noob];

public OnPlayerConnect(playerid)
primeira coisa a se fazer no algoritimo concedido a nosso script, й resetar a variavel de login do player
fazemos a verificaзгo para ver se existe a conta no banco de dados, caso exista, ele nгo vai receber a medalha por ser cabaзo.
Enviaremos logo uma mensagem de boas vindas: SendClientMessage(playerid, -1, "Seja Bem Vindo.");
depois de definirmos se o player й virgem no servidor a gente define o estado dele para DesLog = 1(Significa: meio logado, nгo novato) No caso se nosso player tiver sem registro, ele vai estar com o DesLog = 0(Visitante)
Eu coloquei essa variavel para definir melhor o estado de entrada do player(se ele jб logou, ou й registrado mas nгo logou, e nгo tem o nick registrado) na ordem fica: 2,1,0 Val.
caso o player nгo tenha login, apуs nossa definiзгo iremos dar pra ele 10k em barras de ouro que valem mais do que dinheiro ou se ele for mestre dos paranauк manjador e jб tiver registro mandamos logo ele fazer login com a funзгo da mensagem simples Ok?

Minhas Stocks:
PHP код:
//STOCK CONTAS
stock Contas(playerid)
{
    new 
arquivo[320], name[MAX_PLAYER_NAME];
    
GetPlayerName(playeridname32);
    
format(arquivo320"Contas/%s.ini"name);
    return 
arquivo;
}
stock SalvarContas(playerid)
{
    
SendClientMessage(playerid, -1"{ff0000}DEBUG: {FFFFFF}seus dados foram atualizados.");
    
DOF2_SetString(Contas(playerid), "Senha"Dados[playerid][Senha]);
    
DOF2_SetInt(Contas(playerid), "Money"Dados[playerid][Money]);
    
DOF2_SaveFile();
    return 
1;

Explicando sobre o sistema de salvamento
Contas(playerid) = Geta o nome do player(nick)
e para dar aquele loop pra salvar , SalvarContas(playerid)
No momento salvando Dinheiro e Senha

Variaveis e Enums(casa de salvamentos principais)
Код:
enum Carregamento{
Senha[10], //Salvamos a variбvel de senha do player
Money //O ultimo da lista [Carregamento] nгo coloque a virgula.
}
new Dados[MAX_PLAYERS][Carregamento];//Dados que irб salvar tudo que estiver na enum de cima.
new Cabaco[MAX_PLAYERS];//Variavel que define se o player й novato(tem conta) ou nгo. Na hora da conexгo
new DesLog[MAX_PLAYERS];//Nнveis de login
Nнveis de login que fica definido na var DesLog que por padrгo й 0, desconectado/visitante
0 = Cabaзo total, partiu /register ([~Noob]Fica ao lado do nick do player quando ele manda uma mensagem)
1 = Meio logado, ou seja tem conta mas nгo fez login ([~Deslogado]Fica ao lado do nick do player quando ele manda uma mensagem)
2 = Registrado e Logado ([~Logado]Fica ao lado do nick do player quando ele manda uma mensagem)
Isso й tudo pessoal,
Ah! e nгo se esqueзa que utilizamos DOF2, SSCANF, ZCMD para esse tutorial

TOTALMENTE FUNCIONAL! 27/01/2017 - Estб Funcionando!


Re: Sistema de Registro e Login em comandos Com explicaзгo (ini base) - ipsLuan - 21.01.2017

Nada contra o seu estilo de programaзгo, mas isso ardeu meus olhos de certo modo que tive que ficar 2 horas molhando pra parar de arder.

Coisas totalmente desnecessбrias inseridas;
Duplo idioma (caracterizando que vocк pegou esse tutorial de algum outro membro do fуrum);
Variбveis com nomes "chulos";


Dentre outros que nгo й necessбrio fazer a citaзгo nessa postagem.

Й deprimente ver que vocк, com este seu jeito esquizofrкnico de ser vem atentar os outros aqui com postagem ridнculas, desnecessбrias e no-sense.


Re: Sistema de Registro e Login em comandos Com explicaзгo (ini base) - TheBob - 21.01.2017

eu to arrumando o cуdigo ainda, se nгo gostou paciкncia. Nгo precisa vir falar mal aliбs meu cуdigo foi programado em inglкs, para que na hora que trouxesse para o fуrum eu traduziria.

@Topic
obrigado pelo feedback

@ipsLuan por pessoas como vocк, o fуrum nгo amadurece jб que todas suas postagens sгo para diminuir o projeto dos outros
Nada pessoal mas isso que vc ta fazendo й chato, to tentando arrumar o cуdigo.


Re: Sistema de Registro e Login em comandos Com explicaзгo (ini base) - ipsLuan - 21.01.2017

Quote:
Originally Posted by TheBob
Посмотреть сообщение
eu to arrumando o cуdigo ainda, se nгo gostou paciкncia. Nгo precisa vir falar mal aliбs meu cуdigo foi programado em inglкs, para que na hora que trouxesse para o fуrum eu traduziria.

@Topic
obrigado pelo feedback

@ipsLuan por pessoas como vocк, o fуrum nгo amadurece jб que todas suas postagens sгo para diminuir o projeto dos outros
Nada pessoal mas isso que vc ta fazendo й chato, to tentando arrumar o cуdigo.
Nгo se faзa de doente, vocк criou uma postagem sobre maconha em um fуrum que й voltado para o SA-MP. Se vocк й maconheiro, o problema й seu.


Quote:

Nнveis de login que fica definido na var DesLog que por padrгo й 0, desconectado/visitante
0 = Cabaзo total, partiu /register
1 = Meio logado, ou seja tem conta mas nгo fez login
2 = Registrado e Logado

Muito sem lуgica isso.


Re: Sistema de Registro e Login em comandos Com explicaзгo (ini base) - TheBob - 21.01.2017

Quote:
Originally Posted by ipsLuan
Посмотреть сообщение
Nгo se faзa de doente, vocк criou uma postagem sobre maconha em um fуrum que й voltado para o SA-MP. Se vocк й maconheiro, o problema й seu.
@Topic o que meu release tem a ver com a sua brisa?


Critica Construtiva | nota: 1/10 - RazorGuigo - 21.01.2017

Esse Login ta uma Porra!
parece q pegou de uma GM gringa, e deu uma piorada para dizer q й dele!


Re: Critica Construtiva | nota: 1/10 - TheBob - 21.01.2017

Quote:
Originally Posted by RazorGuigo
Посмотреть сообщение
Esse Login ta uma Porra!
parece q pegou de uma GM gringa, e deu uma piorada para dizer q й dele!
Xiu noob rs! pra que descrever meu estilo de programar? Tudo isso aqui й codigo mermao, na hora do processamento vai ficar tudo 0 e 1 , para de ser gay em relaзгo a isso, pelo amor de deus vc tbm й um porra em razor


Re: Sistema de Registro e Login em comandos Com explicaзгo (ini base) - HeisenGiromB - 21.01.2017

Creio eu, que nenhuma pessoa irб usar este tipo de login/registro, por vбrios motivos :

1- Por ser sistema de login/registro por comando

2- Codigo mal otimizado/ pessima identaзao

Entre outros...( que o nosso amigo @IPSluan jб citou)

Melhoras estude mais um pouco. "Antes de ensinar, certifique-se que jб aprendeu"


Re: Sistema de Registro e Login em comandos Com explicaзгo (ini base) - TheBob - 21.01.2017

Quote:
Originally Posted by GiromB
Посмотреть сообщение
Creio eu, que nenhuma pessoa irб usar este tipo de login/registro, por vбrios motivos :

1- Por ser sistema de login/registro por comando

2- Codigo mal otimizado/ pessima identaзao

Entre outros...

Melhoras estude mais um pouco. "Antes de ensinar, certifique-se que jб aprendeu"
Sim eu jб fiz diversas vezes sistemas parecidos, dessa vez queria fazer um em comando pq tava testando um gm do zero
@Topic
Obrigado pelo feedback.


.-. - RazorGuigo - 21.01.2017

Quote:
Originally Posted by TheBob
Посмотреть сообщение
Xiu noob rs! pra que descrever meu estilo de programar? Tudo isso aqui й codigo mermao, na hora do processamento vai ficar tudo 0 e 1 , para de ser gay em relaзгo a isso, pelo amor de deus vc tbm й um porra em razor
qualquer idiota coda para computador,
mas somente programadores de verdade, fazem para humanos!