Truque iCmd 7.0 (organizaзгo) -
WLSF - 21.10.2013
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:
pawn Код:
public OnPlayerCommandText(playerid, commandid, params[])
{
switch (commandid)
{
case iscmd("c,m,d"):
{
//comando
}
//comandos a mais
}
return 1;
}
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:
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;
}
Especificadores:
Код:
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 inicial
Logo vocк precisa apontar a variбvel para o seu mйtodo.
pawn Код:
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
Respuesta: Truque iCmd 7.0 (organizaзгo) -
DanDRT - 21.10.2013
Bom tutorial!
Re: Truque iCmd 7.0 (organizaзгo) -
SeV_ - 21.10.2013
Pode Ser Rбpido e tudo.
Mais Prefiro algo que me dк facilidade. Nгo ficar botando:
pawn Код:
switch (commandid)
{
case iscmd("i,c,m,d"), iscmd("a,j,u,d,a"):
{
return 1;
}
Уtima include. porйm poderia melhorar neste aspecto. E nгo somente pensar em Velocidade.
Re: Truque iCmd 7.0 (organizaзгo) -
smiiir - 21.10.2013
Bom gostei.
Re: Truque iCmd 7.0 (organizaзгo) -
Juniiro3 - 21.10.2013
Eu nem sabia que essa keyword existia ( state ), mas poderia me explicar uma coisa? Qual й a funзгo de <> no fim da callback? Isso permite que a callback seja usada 2 vezes?
Se permitir, acaba de surgir um novo mйtodo de hook '--' (ou nгo)
Re: Truque iCmd 7.0 (organizaзгo) -
WLSF - 21.10.2013
Quote:
Originally Posted by _SysTeM_OFF
Pode Ser Rбpido e tudo.
Mais Prefiro algo que me dк facilidade. Nгo ficar botando:
pawn Код:
switch (commandid) { case iscmd("i,c,m,d"), iscmd("a,j,u,d,a"): { return 1; }
Уtima include. porйm poderia melhorar neste aspecto. E nгo somente pensar em Velocidade.
|
Na verdade nгo й tгo complicado.
"oi" e "o,i" sгo a mesma coisa a diferenзa que tem uma vнrgula no meio, que no caso й considerado um caractere alfa-numйrico, logo nгo hб do que reclamar em questгo de facilidade de uso.
E se for o caso de vocк usar ZCMD, como vocк linkaria um comando ao outro ?
pawn Код:
CMD:cmd1(playerid)
{
//comando
return 1;
}
CMD:cmd2(playerid)
{
cmd_cmd2();
return 1;
}
Realmente acha mais fбcil isto /\, do que isto \/ ?!
pawn Код:
case iscmd("c,m,d,1"), iscmd("c,m,d,2"): //normal
{
//comando
return 1;
}
Sem esquecer que iCmd estб em versгo beta, estб sim sendo trabalhado possibilidades de melhoras.
Mas sinceramente falando, do jeito que estб, nгo estб difнcil.
Quote:
Originally Posted by Juniiro3
Eu nem sabia que essa keyword existia ( state ), mas poderia me explicar uma coisa? Qual й a funзгo de <> no fim da callback? Isso permite que a callback seja usada 2 vezes?
Se permitir, acaba de surgir um novo mйtodo de hook '--' (ou nгo)
|
Exatamente isso, o
w!hooks foi baseado nisso, pode perceber lб no tуpico.
Re: Truque iCmd 7.0 (organizaзгo) -
Dolby - 21.10.2013
Usando state machine...? muito interessante Willian, esta de parabйns
Re: Truque iCmd 7.0 (organizaзгo) -
zSuYaNw - 21.10.2013
Belo tutorial Willian!
Re: Truque iCmd 7.0 (organizaзгo) -
AlieN_. - 21.10.2013
vc й o segundo kara mais foda ke konhesso luigi,o primeiro й o super mario :B Parabйns
Re: Truque iCmd 7.0 (organizaзгo) -
Russo66 - 21.10.2013
Existe testes de velocidades referente ao iCmd vs Zcmd ?