21.10.2013, 00:11
(
Последний раз редактировалось WLSF; 21.10.2013 в 01:12.
)
Introduзгo
Bom, como meus ultimos posts tem sido relacionados a IPSI, e melhorias sistemбticas, uma das minhas includes lanзadas relacionadas a hooks(w!hooks) abordava o conceito de 'state machines' oque era algo muito bom, e inovador aqui na board, nгo sгo lanзados projetos relacionados a isto.
Decidi utilizar o state nгo sу para hooks, mas tambйm por questхes de organizaзгo, oque me fez dar inicio a este tutorial, irei utilizar states para organizar comandos criados com o iCmd 7.0
Apresentaзгo
como muitos sabem, o iCmd funciona de forma diferenciada dos demais(para quem ainda nгo sabe, atualize-se aqui.)
Logo podemos assumir essa estrutura:
Como sendo a estrutura padrгo para os usuбrios do iCmd 7.0
Oque eu pretendo sugerir para vocкs nesse tutorial й bastante diferente ao que vemos no dia-a-dia, exemplo de estrutura comum utilizando iCmd 7.0:
Especificadores:
Utilizando o conceito de state podemos manipular estes comandos com uma certa organizaзгo a agradar os olhos...
E isso й bom para manipulaзгo, atualizaзгo, e atй mesmo em questгo de execuзгo, quando se trata de comandos normais(players).
Estrutura sugerida por mim:
[offtopic] O 'state machine' pode ser aplicado desta forma(organizaзгo) em outros locais tambйm, como por exemplo, um sistema de login
Vocк pode diferenciar login de um admin, para o login de um player normal.
Vale ressaltar tambйm, que nгo й utilizado somente entre organizaзгo player X admin,
pode ser utilizado de vбrias outras maneiras, vai da criatividade de cada um.
OBS: O state й meio confuso para quem nunca o viu, entгo й necessбrio um certo cuidado quando for mexer com o mesmo, pois pode ter fбceis erros, como por exemplo:
A finalidade do tutorial era mostrar o uso diferenciado(states) dentro de um conceito de organizaзгo utilizando iCmd 7.0, mas creio que servirб para outras finalidades tambйm, dъvidas serгo bem-vindas.
Tуpicos relacionados:
- Includes
beta iBits
beta iCmd 7.0(rбpido)
beta iLoops
beta iEach
- Tutoriais
Como usar iLoops!
Usando iBits!
Truques com icmd7
- FilterScripts
Sistema de admin
Sistema de Registro & Login
Bom, como meus ultimos posts tem sido relacionados a IPSI, e melhorias sistemбticas, uma das minhas includes lanзadas relacionadas a hooks(w!hooks) abordava o conceito de 'state machines' oque era algo muito bom, e inovador aqui na board, nгo sгo lanзados projetos relacionados a isto.
Decidi utilizar o state nгo sу para hooks, mas tambйm por questхes de organizaзгo, oque me fez dar inicio a este tutorial, irei utilizar states para organizar comandos criados com o iCmd 7.0
Apresentaзгo
como muitos sabem, o iCmd funciona de forma diferenciada dos demais(para quem ainda nгo sabe, atualize-se aqui.)
Logo podemos assumir essa estrutura:
pawn Код:
public OnPlayerCommandText(playerid, commandid, params[])
{
switch (commandid)
{
case iscmd("c,m,d"):
{
//comando
}
//comandos a mais
}
return 1;
}
Oque eu pretendo sugerir para vocкs nesse tutorial й bastante diferente ao que vemos no dia-a-dia, exemplo de estrutura comum utilizando iCmd 7.0:
pawn Код:
public OnPlayerCommandText(playerid, commandid, params[])
{
switch (commandid)
{
case iscmd("h,e,l,p"), iscmd("a,j,u,d,a"): //normal
{
//comando de ajuda
return 1;
}
//comandos a mais
case iscmd("k,i,l,l"), iscmd("m,a,t,a,r"): //admin
{
Kill(id);
return 1;
}
case iscmd("s,l,a,y"), iscmd("t,a,p,a"): //admin
{
//tapa
return 1;
}
case iscmd("b,a,n"), iscmd("b,a,n,i,r"): //admin
{
Ban(id);
//comando de ban
return 1;
}
case iscmd("k,i,c,k"), iscmd("c,h,u,t,a,r"): //admin
{
Kick(id);
return 1;
}
case iscmd("m,y,p,r,o,p"), iscmd("m,i,n,h,a,e,m,p"): //normal
{
//comando da empresa
return 1;
}
case iscmd("m,y,h,o,u,s,e"), iscmd("m,i,n,h,a,c,a,s,a"): //normal
{
//comando da casa
return 1;
}
case iscmd("s,t,a,t,s"), iscmd("r,g"): //normal
{
//comando de mostrar o RG
return 1;
}
case iscmd("r,e,p,o,r,t"), iscmd("r,e,l,a,t,o,r,i,o"): //normal
{
//comando de enviar relatуrio para os admins.
return 1;
}
case iscmd("a,d,m,i,n,s"), iscmd("a,d,m"): //normal
{
//ver admins online
return 1;
}
}
return 0;
}
Код:
normal | Todo mundo pode utilizar. admins | Somente administradores podem utilizar.
Utilizando o conceito de state podemos manipular estes comandos com uma certa organizaзгo a agradar os olhos...
E isso й bom para manipulaзгo, atualizaзгo, e atй mesmo em questгo de execuзгo, quando se trata de comandos normais(players).
Estrutura sugerida por mim:
pawn Код:
main()
{
state cmd:players;
}
/*
*
* Comandos em geral, onde qualquer jogador
* Tem acesso e pode utilizar.
*
*/
public OnPlayerCommandText(playerid, commandid, params[]) <cmd:players>
{
//inicio dos comandos gerais.
switch (commandid)
{
case iscmd("h,e,l,p"), iscmd("a,j,u,d,a"): //normal
{
//comando de ajuda
return 1;
}
//comandos a mais
case iscmd("m,y,p,r,o,p"), iscmd("m,i,n,h,a,e,m,p"): //normal
{
//comando da empresa
return 1;
}
case iscmd("m,y,h,o,u,s,e"), iscmd("m,i,n,h,a,c,a,s,a"): //normal
{
//comando da casa
return 1;
}
case iscmd("s,t,a,t,s"), iscmd("r,g"): //normal
{
//comando de mostrar o RG
return 1;
}
case iscmd("r,e,p,o,r,t"), iscmd("r,e,l,a,t,o,r,i,o"): //normal
{
//comando de enviar relatуrio para os admins.
return 1;
}
case iscmd("a,d,m,i,n,s"), iscmd("a,d,m"): //normal
{
//ver admins online
return 1;
}
}
//fim dos comandos
if (none(admin_level, playerid, bit4)) //verificando se o jogador й admin.
return 0;
state cmd:admins;
return OnPlayerCommandText(playerid, commandid, params);
}
/*
*
* Comandos administrativos, onde somente
* administradores online podem alcanзar e utiliza-los.
*
*/
public OnPlayerCommandText(playerid, commandid, params[]) <cmd:admins>
{
state cmd:players;
//inicio dos comandos administrativos
switch (commandid)
{
case iscmd("k,i,l,l"), iscmd("m,a,t,a,r"): //admin
{
Kill(id);
return 1;
}
case iscmd("s,l,a,y"), iscmd("t,a,p,a"): //admin
{
//tapa
return 1;
}
case iscmd("b,a,n"), iscmd("b,a,n,i,r"): //admin
{
Ban(id);
//comando de ban
return 1;
}
case iscmd("k,i,c,k"), iscmd("c,h,u,t,a,r"): //admin
{
Kick(id);
return 1;
}
}
//fim dos comandos
return 0;
}
[offtopic] O 'state machine' pode ser aplicado desta forma(organizaзгo) em outros locais tambйm, como por exemplo, um sistema de login
Vocк pode diferenciar login de um admin, para o login de um player normal.
Vale ressaltar tambйm, que nгo й utilizado somente entre organizaзгo player X admin,
pode ser utilizado de vбrias outras maneiras, vai da criatividade de cada um.
OBS: O state й meio confuso para quem nunca o viu, entгo й necessбrio um certo cuidado quando for mexer com o mesmo, pois pode ter fбceis erros, como por exemplo:
- Vocк criar um state que estб apontando para uma variбvel inexistente.
- Vocк criar um mйtodo utilizando state com nomes aleatуrios, o mйtodo nгo serб executado, pois o mйtodo chamado primeiro sempre serб o vбzio pawn Код:public metodo() <> //mйtodo inicialpawn Код:state var:m;
public metodo() <var:m> //serб chamado - Vocк gerar loops infinitos entre os states, isso pode falhar todo o seu trabalho apуs gerar um stack overflow no servidor, muita atenзгo para isto.(Eu prуprio jб tive problemas, por falta de atenзгo.)
A finalidade do tutorial era mostrar o uso diferenciado(states) dentro de um conceito de organizaзгo utilizando iCmd 7.0, mas creio que servirб para outras finalidades tambйm, dъvidas serгo bem-vindas.
- Crйditos
- Willian Luigi - Tуpico, tutorial e aplicaзхes com state.
- ipsBruno - Include
- [iPs]TeaM
- Agradecimentos a todos BETA-TESTERS e pessoas que aderiram ao uso da lib.(PT, Kronus13, DanDRT, e os demais...)
Tуpicos relacionados:
- Includes
beta iBits
beta iCmd 7.0(rбpido)
beta iLoops
beta iEach
- Tutoriais
Como usar iLoops!
Usando iBits!
Truques com icmd7
- FilterScripts
Sistema de admin
Sistema de Registro & Login