Como criar seu sistema de administraзгo 2.0 -
zSuYaNw - 08.01.2013
Como criar seu sistema de administraзгo 2.0
Aviso: Este tutorial necessita de um conhecimento bбsico, pois utiliza Arrays, Enumeradores, Variбveis, Callbacks,Diretivas se vocк nгo tem o certo conhecimento na бrea, sugiro ler este tutorial(Oque vocк precisa saber sobre PAWN)
Introduзгo:
Depois de um simples tutorial que criei hб alguns anos atrбs resolvi criar este
mais explicativo e funзхes/includes atualizadas.
Nele ensinarei:
- Criando sistema de administraзгo (Contendo comando /Setlevel, /Kick, /Registrar, /Logar).
- Sistema de salvamento completo(Utilizando a include bINI).
Itens:
Primeiramente vamos pegar os itens necessбrios para o nosso sistema de administraзгo:
-
Y_commands - ******
-
sscanf 2.8.1 - ******
-
Bini files - ipsBruno
Apуs ter baixado os arquivos acima, coloque cada arquivo em sua correspondente pasta.
Tutorial:
Coloque exatamente no seu gamemode/filterscript oque esta escrito abaixo:
pawn Код:
#include a_samp
#include YSI\y_commands
#include sscanf2
#include bINi
No cуdigo acima, ele apenas carrega as includes baixadas, lembrado que nгo usei
o sнmbolo 'maior que' | 'menor que' Esses: <,>.
nгo muda nada em questгo de velocidade, й sу estйtica
Primeiramente vamos criar os enumeradores, com eles iremos armazenar os valores
temporбrios como nнvel, score etc..
pawn Код:
enum E_ADMIN{
bool: E_LOGGED,
E_NOME[24],
E_PLAYER,
E_VALOR,
E_NIVEL
};
Apуs ter criado os enumeradores, vocк deve estar ciente que tem que criar uma variбvel
multi-array para utiliza-los.
pawn Код:
enum E_ADMIN{
bool: E_LOGGED,
E_NOME[24],
E_PLAYER,
E_VALOR,
E_NIVEL
};
new
gPlayerData [ MAX_PLAYERS ] [ E_ADMIN ],
gString [128]
;
Eu fiz na liberdade de fazer uma array gString que alйm da multi-array gPlayerData, ela й
usada para manipuaзхes de string do nosso sistema.
Agora vamos para algumas definiзхes para falicitar nosso trabalho:
pawn Код:
#define GetNick(%0) (GetPlayerName(playerid, gPlayerData[%0][E_NOME], 24), gPlayerData[%0][E_NOME])
#define IsPlayerLogged(%0) gPlayerData[%0][E_LOGGED]
#define Vermelho 0xFF0000FF
A funзгo "GetNick" pega o nick do jogador com base do nosso enumerador E_ADMIN, agora a funзгo
"IsPlayerLogged" verifica se o player estб logado, de acordo com o enumerador E_LOGGED.
A definiзгo "Vermelho" й nossa cor vermelha que iremos utilizar para sinalizar um erro.
Agora iremos colocar uma pequeno scriptzinho necessбrio no OnPlayerConnect
pawn Код:
public OnPlayerConnect(playerid){
for(new i, e = _:E_ADMIN; i != e; ++i){
gPlayerData[playerid][E_ADMIN: i] = 0;
}
return true;
}
Ele evita que caso algum player entre no servidor, pode pegar o ъltimo valor salvo pelo player antigo.
Atй agora seu cуdigo deve ficar mais ou menos assim:
pawn Код:
#include a_samp
#include YSI\y_commands
#include sscanf2
#include bINi
#define GetNick(%0) (GetPlayerName(playerid, gPlayerData[%0][E_NOME], 24), gPlayerData[%0][E_NOME])
#define IsPlayerLogged(%0) gPlayerData[%0][E_LOGGED]
#define Vermelho 0xFF0000FF
enum E_ADMIN{
bool: E_LOGGED,
E_NOME[24],
E_PLAYER,
E_VALOR,
E_NIVEL
};
new
gPlayerData [ MAX_PLAYERS ] [ E_ADMIN ],
gString [128]
;
Agora vamos a segunda parte do nosso tutorial,
#Primeiro comando:
O primeiro comando do nosso sistema й o "/setlevel" que nada mais nada menos que
"dar" moderaзгo/administraзгo para um player.
Primeiramente vб em qualquer parte do script (fora das callbacks) e adicione a seguinte
cуdigo:
pawn Код:
CMD:setlevel(playerid, params[]){
return true;
}
Aqui vocк estб inicializando o sistema de administraзгo com o primeiro comando, sendo ele
"/setlevel", mais como vamos usar o comando se nгo tem nenhuma funзгo nele?
Adicione agora dentro do nosso comando:
pawn Код:
if(!IsPlayerAdmin(playerid)){ // verificar se й administrador RCON.
if(!IsPlayerLogged(playerid)) // Verificar se estб logado no sistema
return SendClientMessage(playerid, Vermelho, "[Erro]: Vocк nгo estб logado para usar este comando");
if(gPlayerData[playerid][E_NIVEL] < 5) // Verificar se estб com autorizaзгo
return SendClientMessage(playerid, Vermelho, "[Erro]: Vocк nгo tem nнvel suficiente para usar este comando!");
}
Explicaзгo
Caso o player que digitar o comando nгo for admin rcon ele irб executar os seguintes if's
abaixo dele. O primeiro verifica se o player estб logado, caso ele nгo estiver o comando
para ali mesmo, mais se estiver logado ele verifica o nнvel do player que digitou o comando
se for menor que 5 ele nгo tem autorizaзгo para usar o comando entгo sу admins masters(nivel 5)
podem usar o comando sem estar logado na RCON.
Bom apуs ter inserido nossa verificaзгo de autenticaзгo vamos ao restante, introduza logo abaixo
do cуdigo anterior,
pawn Код:
if(sscanf(params, "ii", gPlayerData[playerid][E_PLAYER], gPlayerData[playerid][E_VALOR]))
return SendClientMessage(playerid, Vermelho, "[Erro]: Uso: /Setlevel <id> <level>");
if(!IsPlayerConnected(gPlayerData[playerid][E_PLAYER]))
return SendClientMessage(playerid, Vermelho, "[Erro]: Player nгo conectado!");
if(gPlayerData[playerid][E_VALOR] < 0 || gPlayerData[playerid][E_VALOR] > 5)
return SendClientMessage(playerid, Vermelho, "[Erro]: Nнvel invбlido!, escolha de 0(retirar moderaзгo) atй 5(admin master)");
static tempID;
tempID = gPlayerData[playerid][E_PLAYER];
if(!gPlayerData[tempID][E_LOGGED])
return SendClientMessage(playerid, Vermelho, "[Erro]: Player nгo logado!");
Explicaзгo:
Caso o player estiver autorizado(Logado na rcon ou no sistema contendo no nнvel 5 de adminstrador)
poderб executar o cуdigo que nуs acabamos de colocar.
Nele sгo da parde de formataзгo do comando, entгo vamos lб,
Logo na primeira linha, o "if" formata os parвmetros de acordo com oque foi definido no
segundo parвmetro da funзгo sscanf(parece confuso, nгo ?), jб o segundo verificador
olha se o player estб no servidor e o terceiro verifica se o nнvel digitado й menor que 5
e maior que 0. O ъltimo verificador vк se o futuro administrador(ou nгo) estб logado e
para isto й criado uma variбvel temporara chamada "tempID" que terб o valor do id do
futuro(ou nгo) administrador.
Ъltima parte do comando de setlevel:
pawn Код:
gPlayerData[tempID][E_NIVEL] = gPlayerData[playerid][E_VALOR];
format(gString, 128, "O Administrador %s deu ao player %s o nнvel de administraзгo #%i", GetNick(playerid), GetNick(tempID), gPlayerData[playerid][E_VALOR]);
SendClientMessageToAll(-1, gString);
Logo na primeira Linha vocк pode notar que o nнvel do futuro administrador й modificado
para o valor que o master (player que digitou o comando) definiou, e na 3, 4є Linha й
uma mensagem enviada a todos sobre a nova mudanзa na staff de administradores.
Depois do comando "Setlevel" agora й a vez do comando "/Registrar" e "/Logar".
Vamos iniciar um novo comando:
pawn Код:
CMD:registrar(playerid, params[]){
return true;
}
Logo apуs ter introduzido o cуdigo acima, coloque dentro dele:
pawn Код:
if(IsPlayerLogged(playerid)){
return SendClientMessage(playerid, Vermelho, "[Erro]: Vocк jб estб logado!");
}
new Senha[32];
if(sscanf(params, "s[32]", Senha))
return SendClientMessage(playerid, Vermelho, "[Erro]: /Registrar <Senha>");
if(strlen(Senha) < 3)
return SendClientMessage(playerid, Vermelho, "[Erro]: Sua senha tem que ter no mнnimo 3 caracteres!");
Explicaзгo:
O primeiro comparador verifica se o player jб estб logado, com isto nгo precisa registrar
novamente, o segundo verifica se a utilizaзгo do comando estб correta e jб formata o mesmo.
A ъltima condicional verifica se a senha й menor que 3 caracteres, caso for returna a um
erro. Assim nгo concluindo o registro.
Agora vamos terminar o comando de registro:
pawn Код:
format(gString, 128, "/Contas/%s.ips", GetNick(playerid));
INI_Open(gString);
INI_WriteString(gString, "Senha", Senha);
INI_WriteInt(gString,"Score",GetPlayerScore(playerid));
INI_WriteInt(gString,"Dinheiro",GetPlayerMoney(playerid));
INI_Save();
INI_Close();
SendClientMessage(playerid, -1, "Registrado!");
Logo na primeira linha й formatado a string "gString" para a pasta/nomeplayer.ips.
e logo abaixo й criado a conta dele.
Agora vamos ao sistema de registro:
pawn Код:
CMD:logar(playerid, params[]){
if(IsPlayerLogged(playerid)){
return SendClientMessage(playerid, Vermelho, "[Erro]: Vocк jб estб logado!");
}
format(gString, 128, "/Contas/%s.ips", GetNick(playerid));
if(!fexist(gString)){
return SendClientMessage(playerid, Vermelho, "[Erro]: Em nosso banco de dados a sua conta nгo estб registrada. Digite /Registrar.");
}
return true;
}
Explicaзгo:
Na primeira condicional й verificado se o player jб estб logado, e logo apуs
ser feita a verificaзгo й formatado a string "gString" para checar se existe
o usuбrio em questгo.
pawn Код:
new Senha[32];
if(sscanf(params, "s[32]", Senha))
return SendClientMessage(playerid, Vermelho, "[Erro]: /Logar <Senha>");
if(strlen(Senha) < 3)
return SendClientMessage(playerid, Vermelho, "[Erro]: Sua senha tem que ter no mнnimo 3 caracteres!");
INI_Open(gString);
if(strcmp(INI_ReadString(gString, "Senha"), Senha, false) != 0)
return SendClientMessage(playerid, Vermelho, "[Erro]: Senha incorreta.");
Explicaзгo:
Na primeira condicional й verificado & formatado o comando de acordo com os
parвmetros definidos pelo sscanf, na segunda condicional й verificado o tamanho da senha.
Logo tem uma funзгo que Abre o arquivo formatado anteriormente (gString) e verifica
se a arrray "Senha" й igual a que estб no arquivo, caso nгo for ela returna a um erro.
pawn Код:
ResetPlayerMoney(playerid);
SetPlayerScore(playerid, 0);
SetPlayerScore(playerid, INI_ReadInt(gString, "Score"));
GivePlayerMoney(playerid, INI_ReadInt(gString, "Dinheiro"));
SendClientMessage(playerid, -1, "Logado");
gPlayerData[playerid][E_LOGGED] = true;
Explicaзгo:
Nas duas primeiras linhas й restado o dinheiro/score do player, porque logo abaixo
serб carregado o Score/Dinheiro do player pela conta salva dele e na ъltima linha й
indicado que o player estб registrado e logado.
Consideraзхes finais:
Bom, nгo se esqueзa de criar a pasta "Contas" no script files, caso vocк
nгo tenha entendido calhordas nenhuma irei postar o script do tutorial
funcionando perfeitamente.
- Download:
Re: Como criar seu sistema de administraзгo 2.0 -
Pietrotm2012 - 08.01.2013
Rep+ Muito Bom 10/10
Re: Como criar seu sistema de administraзгo 2.0 -
Kuddy - 08.01.2013
Excelente tutorial, mбs nгo ensina a criar um sistema de admin.
Re: Como criar seu sistema de administraзгo 2.0 -
zSuYaNw - 08.01.2013
Quote:
Originally Posted by Kuddy
Excelente tutorial, mбs nгo ensina a criar um sistema de admin.
|
Eu sei, ele ensina a fazer bolo de chocolate no microondas, no difнcil demora para aprender
(Conta para ninguйm nгo).
Re: Como criar seu sistema de administraзгo 2.0 -
HeyHoLetsGo - 08.01.2013
Tuto muito bom, parabйns!
Re: Como criar seu sistema de administraзгo 2.0 -
RebeloX - 08.01.2013
Quote:
Originally Posted by Kuddy
Excelente tutorial, mбs nгo ensina a criar um sistema de admin.
|
Concordo, o que vocк estб fazendo й criar alguns cуdigos e fazer um mau sistema de administraзгo (A onde й que jб se viu um sistema de Admin que verifique se ele tб logado na rcon e depois verifique o nivel, rcon й coisa mбxima, toda a gente quer evitar usar rcon, por isso que se cria um sistema de admin com certas variaveis) , na minha opiniгo o que vocк deveria ter feito era estruturar o seu tutorial e apontar alguns tуpicos, como por exemplo: O que um sistema de admin tem, Formas de salvar dados (Bini,Dini,MySQL,SQLite,y_ini,SII), Alguns comandos base em um sistema de administraзгo ( com seus exemplos ), etc...
Vocк deve dar a estrutura entende? Nгo dar um bocado de cуdigo, ninguйm aprende com isso, й o mesmo que um aluno vai aprender equaзхes mas o professor em vez de explicar para ele dб a conta para ele resolver.
Enfim, й um bom tutorial, porйm nгo explica como fazer o sistema de administraзгo em sн.
(nгo leve isto como uma ofensa nem uma critica destrutiva, pense nela como uma critica construtiva, a pouco tempo teve um membro que foi ler o seu tutorial umas 4x e ele disse que nгo entendeu nada)
Re: Como criar seu sistema de administraзгo 2.0 -
steki. - 08.01.2013
Sistema de admin й o de menos aн. Se liga.
Re: Como criar seu sistema de administraзгo 2.0 -
tonisantolia - 08.01.2013
Quote:
Originally Posted by Kuddy
Excelente tutorial, mбs nгo ensina a criar um sistema de admin.
|
Pelo que entendi, o principal objetivo do tutorial й ensinar como usar as devidas funзхes para fazer o seu proprio sistema de administraзгo.
@Topic:
Boa gato, dps te dou uma lasanha hehe
Respuesta: Como criar seu sistema de administraзгo 2.0 -
italoteixeira - 08.01.2013
valew cara otimo tuto
Re: Como criar seu sistema de administraзгo 2.0 -
Gleisson_. - 08.01.2013
Simples, e muito bom
9/10
Poderia ter deixado em Dialog. Seria muito melhor