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.
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;
}
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. |
//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;
}
achei meio complicado para manusear porйm й bom trabalho.
|
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.. |