[Tutorial] Truques com icmd7
#1

Aqui alguns truques que podes usar com icmd:




Vбrios comandos em um sу


PHP код:
public OnPlayerCommandText(playeridcommandidparams[]) {
    switch(
commandid) {
        case 
iscmd("v,i,d,a"), iscmd("h,e,a,l,t,h"),  : {
            if(!
params[0]) {
                return 
SendClientMessage(playerid, -1"[Erro]: Use /vida /health");
            }
            
SetPlayerHealth(playeridfloatstr(params));
            return 
true;
        }
        default: return 
SendClientMessage(playerid, -1"[Erro]: Comando desconhecido, desculpe.");
    }
    return 
false;

Neste exemplo, caso digitar /health ou /vida. Ambos comandos farгo mesmo efeito.

Estes casos podem ser expandidos para muitos outros.

Como:

PHP код:
public OnPlayerCommandText(playeridcommandidparams[]) {
    switch(
commandid) {
        case 
iscmd("v,i,d,a"), iscmd("h,e,a,l,t,h"), iscmd("v"), iscmd("r,e,c,u,p,e,r,a,r") : {
            if(!
params[0]) {
                return 
SendClientMessage(playerid, -1"[Erro]: Use /vida /health /v /recuperar");
            }
            
SetPlayerHealth(playeridfloatstr(params));
            return 
true;
        }
        default: return 
SendClientMessage(playerid, -1"[Erro]: Comando desconhecido, desculpe.");
    }
    return 
false;

Nesse caso, os quatros comandos farгo o mesmo efeito! Em outros processadores como ZCMD, precisava

PHP код:
cmd(comando1,playeridparams[]) {
}
cmd(comando2,playeridparams[]) return cmd_comando1(playeridparams[]); 




Fazer o jogador digitar comandos

Alйm do mйtodo tradicional. em icmd7 vocк pode fazer o usuбrio digitar comandos atravйs de iscmd. Basta usar:

pawn Код:
OnPlayerCommandText( playerid, iscmd("v,i,d,a"), ""); /* /vida */
ou com params:

pawn Код:
OnPlayerCommandText( playerid, iscmd("v,i,d,a"), "40.5"); /* /vida 40.5 */
este mйtodo й mais veloz, por puxar a callback com valores e nгo com strings. Dessa maneira vбrias (talvez dezenas) de cйlulas a menos sгo criadas para repassar






Controle de comandos

Essa dica parece fбcil, mas sу й possнvel com icmd7 ser feita de forma fбcil

Caso fizeres:
pawn Код:
public OnPlayerCommandText(playerid, commandid, params[]) {

   if(commandid != iscmd("v,i,d,a")) {
      printf("Vocк nгo digitou /vida, mas sim outro comando");
      return true;
   }
}
Dessa maneira, й ao contrбrio. O jogador poderб digitar qualquer comando, mas sу irб ser processado se o comando for diferente de /vida






Listagem de comandos

pawn Код:
public OnPlayerCommandText(playerid, commandid, params[]) {

    switch(commandid) {


        case iscmd("a") .. iscmd("z"): {
             return SendClientMessage(playerid, -1, "Vocк digitou /a /b /c /d .. ou /z");
        }


        default: return SendClientMessage(playerid, -1, "[Erro]: Comando desconhecido, desculpe.");
    }

    return false;
}
Dessa maneira й declarado, que comandos de /a a /z irгo executar a mensagem. Neste caso /a /b /c /d /e /f /g e por aн vai. Este caso pode ser expandido para

PHP код:
iscmd("/aa") .. iscmd("/zz"
assim os comandos pegos serгo /aa /ab /ac /ad .. /za /zb /cc

Tambйm lembrando, que se o compilador detectar comandos iguais, ele anuncia o erro, da seguinte forma:

pawn Код:
case iscmd("a") .. iscmd("z"): {
             return SendClientMessage(playerid, -1, "Oi");
}

case iscmd("b"): {
             return SendClientMessage(playerid, -1, "Tchau");
}
Quote:

error 040: duplicate "case" label (value X)

pois o comando iscmd("b") estб incluнdo no iscmd("a") .. iscmd("z")






Comandos em forma de nъmeros

Em icmd7, todos comandos representam ids, dessa maneira vocк pode equivaler as s,t,r,i,n,g,s a nъmeros!

Para pegar o ID faзa:

pawn Код:
printf("%d", iscmd("c,o,m,a,n,d,o"));
e retornarб um nъmero, no caso:

Quote:

[19:35:38] 187935

Entгo basta fazer:


pawn Код:
public OnPlayerCommandText(playerid, commandid, params[]) {

    switch(commandid) {

        case 187935: {
             return SendClientMessage(playerid, -1, "Vocк digitou /comando");
        }



        default: return SendClientMessage(playerid, -1, "[Erro]: Comando desconhecido, desculpe.");
    }

    return false;
}
Estranho, nгo?



Conforme as atualizaзхes, icmd7 serб atualizado e vira novos truques para fazer.

Em breve estarei estendendo este tutorial
Reply
#2

bom tutorial

gosto da forma como vc declara 2 comandos pra fazer o mesmo

pawn Код:
case iscmd("v,i,d,a"), iscmd("h,e,a,l,t,h"),  :
Reply
#3

Afs, nao sei como o povin do samp ainda nao chamaram o bruno para beta tester ( besta testi ksks )

Cara voce tem futuro em programaзгo :P
Reply
#4

Quote:
Originally Posted by N3XTMapper
Посмотреть сообщение
Afs, nao sei como o povin do samp ainda nao chamaram o bruno para beta tester ( besta testi ksks )

Cara voce tem futuro em programaзгo :P
Obrigado

Quote:
Originally Posted by PT
Посмотреть сообщение
bom tutorial

gosto da forma como vc declara 2 comandos pra fazer o mesmo

pawn Код:
case iscmd("v,i,d,a"), iscmd("h,e,a,l,t,h"),  :
Sim, й o melhor truque do tutorial. Acho.

Abraзos
Reply
#5

O que eu nao entendi ainda й porque as virgulas separando as palavras , poderia explicar as virgulas ?
Reply
#6

Quote:
Originally Posted by ipsBruno
Посмотреть сообщение
Obrigado




Sim, й o melhor truque do tutorial. Acho.

Abraзos
sim e um dos melhores,

tambem gostei

pawn Код:
case iscmd("a") .. iscmd("z"):
tbm gostei desteґ


e essa coisa do comando por id tambem e inovadora
Reply
#7

Quote:
Originally Posted by N3XTMapper
Посмотреть сообщение
O que eu nao entendi ainda й porque as virgulas separando as palavras , poderia explicar as virgulas ?
Bem, й complicado te explicar. Mas ocorre pelo seguinte

Os comandos sгo processados na hora da compilaзгo, dessa maneira, vocк nгo pode fazer

iscmd("string")

porque o init estб definido como


pawn Код:
#define init(%0,%1)
note:

Quote:

(%0,%1)

dessa maneira, ele lerб os caracteres divididos por virgulas. E nгo poderб ser

PHP код:
(%0%1
pois dessa maneira ele nгo reconheceria os caracteres e o compilador nгo aceitaria %0%1


O prуprio ****** citou algo parecido no y_stringhash, pois o icmd7 foi baseado neste projeto.

http://forum.sa-mp.com/showpost.php?...7&postcount=10

Quote:

however I have managed to update the code to remove the reliance on this major restriction (this was NOT easy, despite the fact that it sounds easy). You can now do:

ou

Quote:

consegui atualizar o cуdigo para remover a dependкncia deste grande restriзгo (,) (isto nгo foi fбcil, apesar do fato de que parece fбcil).

Reply
#8

Quote:
Originally Posted by ipsBruno
Посмотреть сообщение
Bem, й complicado te explicar. Mas ocorre pelo seguinte

Os comandos sгo processados na hora da compilaзгo, dessa maneira, vocк nгo pode fazer

iscmd("string")

porque o init estб definido como


pawn Код:
#define init(%0,%1)
note:



dessa maneira, ele lerб os caracteres divididos por virgulas. E nгo poderб ser

PHP код:
(%0%1
pois dessa maneira ele nгo reconheceria os caracteres e o compilador nгo aceitaria %0%1


O prуprio ****** citou algo parecido no y_stringhash, pois o icmd7 foi baseado neste projeto.

http://forum.sa-mp.com/showpost.php?...7&postcount=10



ou

Agora eu entendi mais ou menos , como voce definiu la em cima

pawn Код:
#define init(%0,%1)
Voce sу terб que utilizar a virgula paara separar as strings , pois se nao colocar daria um fatal error

ksksks
Reply
#9

ipsBruno e (Rjj Ou Ken) Daria uma grande equipe.
Parabйns!
Reply
#10

Quote:
Originally Posted by petrick_schoba
Посмотреть сообщение
ipsBruno e (Rjj Ou Ken) Daria uma grande equipe.
Parabйns!
eh mas o Rjj ja pediu para que deletassem sua conta, e isso ja foi feito...
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)