[Include] h_Cmd | Processador de comandos
#1

h_Cmd


O h_Cmd tem o principal intuito de processar os comandos com facilidade e ainda excluir o famoso uso do sscanf em comandos. Ele й baseado em CallLocalFunction e uma funзгo de Split (divisгo por delimitadores).


Funзхes
pawn Код:
SPLIT<nъmero> //Utilizada para buscar uma string de um argumento do comando.
SPLIT_INT<nъmero> //Utilizada para buscar um nъmero de um argumento do comando.
SPLIT_FLOAT<nъmero> //Utilizada para buscar uma float  de um argumento do comando.
TOTAL_SPLIT<> //Retorna o total de argumentos colocados no comando.. Exemplo: "/x [arg1] [arg2] [arg3]" retornarб o valor 3.
forward OnPlayerExecuteCommand(playerid, cmdtext[], bool:sucess); //Callback destinada a bloquear ou detectar se o comando nгo existe.
Aprenda
pawn Код:
h_Cmd("/gta")
{
    SendClientMessage(playerid, -1, "Estou testando");
    return true;
}

h_Cmd("/telepos")
{
    if(TOTAL_SPLIT<> != 3) //TOTAL_SPLIT<> Retorna o valor total de argumentos no exemplo aqui й 3.
    {
        SendClientMessage(playerid, -1, "Uso: /telepos [X] [Y] [Z]");
        return true;
    }
    SetPlayerPos(playerid, SPLIT_FLOAT<1>, SPLIT_FLOAT<2>, SPLIT_FLOAT<3>); //SPLIT_FLOAT<numero> obtem o valor da posiзгo coloca em um nъmero decimal.
    return true;
}

h_Cmd("/anunciar")
{
    if(!TOTAL_SPLIT<>) //Se TOTAL_SPLIT<> retornar 0 significa que nгo foi digitado nada depois de /anunciar
    {
        SendClientMessage(playerid, -1, "Uso: /anunciar [Anuncio]");
        return true;
    }
    new string[144];
    format(string, 144, "ANЪNCIO GLOBAL: %s",SPLIT<1>); //SPLIT<nъmero> pega o argumento nъmero 1 utilizado no comando. Exemplo: /anunciar [Argumento 1].. Retorna em string.
    SendClientMessageToAll(-1, string);
    return true;
}

h_Cmd("/meunumero")
{
    if(!TOTAL_SPLIT<>) //Se TOTAL_SPLIT<> retornar 0 significa que nгo foi digitado nada depois de /anunciar
    {
        SendClientMessage(playerid, -1, "Uso: /meunumero [Nъmero]");
        return true;
    }
    new string[144];
    format(string, 144, "NЪMERO GLOBAL: %d",SPLIT_INT<1>); //SPLIT_INT<nъmero> pega o argumento nъmero 1 utilizado no comando. Exemplo: /meunumero [Argumento 1].. Retorna em nъmero.
    SendClientMessageToAll(-1, string);
    return true;
}

public OnPlayerExecuteCommand(playerid, cmdtext[], bool:sucess)
{
    if(sucess == false) return SendClientMessage(playerid, 0xFFFF00FF, "COMANDO INEXISTENTE"); //Exemplo de erro de comando inexistente.
    if(!strcmp(cmdtext, "/gta", true))//Exemplo de bloqueio de comando
    {
        SendClientMessage(playerid, -1, "COMANDO BLOQUEADO");
        return false;
    }
    return true;
}
Importante
  1. Como todos outros sistemas de processadores de comando o h_Cmd vai bloquear os comandos criados em OnPlayerCommandText(); no script que for utilizar esta include.
Instalaзгo
  1. Insira a include depois da include "a_samp".
Download da Include Changelog
  • 0.1 Versгo inicial.
Crйditos
Atenзгo:
Nгo dou permissгo para qualquer suposta postagem em outro forum ou parte deste forum.
Reply
#2

Parapкnis ficou bom !
Reply
#3

Velocidade й Superior , Menor ou igual б ZCMD,YCMD?
Reply
#4

Quote:
Originally Posted by Adejair
Посмотреть сообщение
Velocidade й Superior , Menor ou igual б ZCMD,YCMD?
O meu sistema faz um loop para obter argumentos somente se ouver.. Nгo fiz testes de velocidade, se alguйm se interessar em me falar os resultados seria bom..
Reply
#5

Interessante, nгo vi vantagem, mas essa ideia de split pode ser aprimorada... Me pareceu um pouco ctrl+c do sscanf que estava sendo criado pro icmd...

Parabйns ai pelo sistema.
Reply
#6

achei meio complicado para manusear porйm й bom trabalho.
Reply
#7

Quote:
Originally Posted by Willian_Luigi
Посмотреть сообщение
Interessante, nгo vi vantagem, mas essa ideia de split pode ser aprimorada... Me pareceu um pouco ctrl+c do sscanf que estava sendo criado pro icmd...

Parabйns ai pelo sistema.
Primeiramente obrigado pelo elogio..Segundamente quero lhe dizer que nгo tem nada haver com o iCMD atй porque eu de fato nгo sabia de sua existкncia, ah! Vamos comparar o cуdigo entгo nй? http://pastebin.com/JFejpEiz ! Serб que tem algum CTRL + C no meio? Creio que nгo. Enquanto as vantagens? Imagine.. й claro que sim! Mais facil nгo?...

pawn Код:
//zcmd + sscanf
CMD:telepos(playerid, params[])
{
    new Float:x, Float: y, Float: z, interior, string[70];
    if(sscanf(params, "ifff",interior,x,y,z)) return SendClientMessage(playerid, -1,"Uso correto: /telepos [interior] [x] [y] [z]");
       
    SetPlayerInterior(playerid, interior);
    SetPlayerPos(playerid, x,y,z);
    format(string, sizeof (string), "AdmCmd: INTERIOR: %d | X: %.0f | Y: %.0f | Z: %.0f", interior, x, y, z);
    SendClientMessage(playerid, -1, string);
    return true;
}

//h_Cmd
h_Cmd("/telepos")
{
    new string[70];
    if(TOTAL_SPLIT<> != 4) return SendClientMessage(playerid, -1, "Uso: /telepos [Interior] [X] [Y] [Z]");
   
    SetPlayerInterior(playerid, SPLIT_INT<1>);
    SetPlayerPos(playerid, SPLIT_FLOAT<2>, SPLIT_FLOAT<3>, SPLIT_FLOAT<4>);
    format(string, sizeof (string), "AdmCmd: INTERIOR: %d | X: %.0f | Y: %.0f | Z: %.0f", SPLIT_INT<1>, SPLIT_FLOAT<2>, SPLIT_FLOAT<3>, SPLIT_FLOAT<4>);
    SendClientMessage(playerid, -1, string);
    return true;
}
- Nгo estou sendo sacбrstico, mais acho que hoje em dia muitas pessoas inventam qualquer coisa para tirar seu mйrito.

Quote:
Originally Posted by BieeelEvolution
Посмотреть сообщение
achei meio complicado para manusear porйm й bom trabalho.
Vlw cara com o tempo acostuma!
Reply
#8

Boa include, achei interessante a forma de manuseio, parabйns
Reply
#9

Quando eu falei ctrl+c, me referi mais na ideia, e pra ser sincero, o cуdigo й parecido logicamente falando.
Mas eu nгo falei pra te julgar, tanto que eu falei "me pareceu um pouco ctrl+c"...

enquanto as vantagens, nгo achei mais fбcil nгo, vocк tб dizendo que seu cуdigo ficou 1 linha mais fбcil que os demais, isso й meio que nada a ver... Tem gente que vai achar й mais difнcil, por estar mais habituado ao sscanf, ou seja, essa questгo de dificuldade vai da habituaзгo da pessoa.

Foque numa funcionalidade mais poderosa pra esse SPLIT_ALGUMACOISA, que ai vai fazer bastante diferenзa mesmo.

Abraзos..
Reply
#10

Quote:
Originally Posted by Willian_Luigi
Посмотреть сообщение
Quando eu falei ctrl+c, me referi mais na ideia, e pra ser sincero, o cуdigo й parecido logicamente falando.
Mas eu nгo falei pra te julgar, tanto que eu falei "me pareceu um pouco ctrl+c"...

enquanto as vantagens, nгo achei mais fбcil nгo, vocк tб dizendo que seu cуdigo ficou 1 linha mais fбcil que os demais, isso й meio que nada a ver... Tem gente que vai achar й mais difнcil, por estar mais habituado ao sscanf, ou seja, essa questгo de dificuldade vai da habituaзгo da pessoa.

Foque numa funcionalidade mais poderosa pra esse SPLIT_ALGUMACOISA, que ai vai fazer bastante diferenзa mesmo.

Abraзos..
Sim, claro, quem usa sscanf vai ter um grau de dificuldade maior caso queira se readaptar.. Й a mesma coisa de strtok para sscanf.. Sim ouve uma grande diferenзa e rapidez, porйm muitos demoraram para se acostumar ao novo sistema que porйm facil, mбs foi dificil para alguns. Enquanto б funзгo Split eu estou um pouco sem tempo vai brevemente vou criar uma otimizada..
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)