21.01.2017, 14:23
(
Последний раз редактировалось TheBob; 27.01.2017 в 12:15.
Причина: Atualizaзгo 1.0
)
Код:
//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; }
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; }
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(playerid, name, 32);
format(arquivo, 320, "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;
}
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
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!