CMD:teste(playerid, params[])
{
new cmdn[10], Float:quantidadee;
if(strcmp(cmdn, "vida", true) == 0)
{
if(sscanf(params, "s[10]f",cmdn, quantidadee))
return SendClientMessage(playerid, -1,"/teste [vida] [quantidade]");
for(new i; i < GetPlayerPoolSize() + 1; i++) if(IsPlayerConnected(i)) SetPlayerHealth(i, quantidadee);
}
else if(strcmp(cmdn, "colete", true) == 0)
{
if(sscanf(params, "s[10]f",cmdn, quantidadee))
return SendClientMessage(playerid, -1,"/teste [colete] [quantidade]");
for(new i; i < GetPlayerPoolSize() + 1; i++) if(IsPlayerConnected(i)) SetPlayerArmour(i, quantidadee);
}
else if(strcmp(cmdn, "deagle", true) == 0)
{
for(new i; i < GetPlayerPoolSize() + 1; i++) if(IsPlayerConnected(i)) GivePlayerWeapon(i, 24, 50);
}
return 1;
}
CMD:teste(playerid, params[]) { new cmdn[10], Float:quantidadee; if(sscanf(params, "s[10]f", cmdn, quantidadee)) return SendClientMessage(playerid, -1,"/teste [vida] [quantidade]"); if(strcmp(cmdn, "vida", true) == 0) { for(new i; i < GetPlayerPoolSize() + 1; i++) if(IsPlayerConnected(i)) SetPlayerHealth(i, quantidadee); } else if(strcmp(cmdn, "colete", true) == 0) { if(sscanf(params, "s[10]f",cmdn, quantidadee)) return SendClientMessage(playerid, -1,"/teste [colete] [quantidade]"); for(new i; i < GetPlayerPoolSize() + 1; i++) if(IsPlayerConnected(i)) SetPlayerArmour(i, quantidadee); } else if(strcmp(cmdn, "deagle", true) == 0) { for(new i; i < GetPlayerPoolSize() + 1; i++) if(IsPlayerConnected(i)) GivePlayerWeapon(i, 24, 50); } return 1; }
O sscanf deve estar fora da condicional de comparaзгo:
Код:
CMD:teste(playerid, params[]) { new cmdn[10], Float:quantidadee; if(sscanf(params, "s[10]f", cmdn, quantidadee)) return SendClientMessage(playerid, -1,"/teste [vida] [quantidade]"); if(strcmp(cmdn, "vida", true) == 0) { for(new i; i < GetPlayerPoolSize() + 1; i++) if(IsPlayerConnected(i)) SetPlayerHealth(i, quantidadee); } else if(strcmp(cmdn, "colete", true) == 0) { if(sscanf(params, "s[10]f",cmdn, quantidadee)) return SendClientMessage(playerid, -1,"/teste [colete] [quantidade]"); for(new i; i < GetPlayerPoolSize() + 1; i++) if(IsPlayerConnected(i)) SetPlayerArmour(i, quantidadee); } else if(strcmp(cmdn, "deagle", true) == 0) { for(new i; i < GetPlayerPoolSize() + 1; i++) if(IsPlayerConnected(i)) GivePlayerWeapon(i, 24, 50); } return 1; } |
Mas й claro, tem que digitar 2 parвmetros (neste caso):
1 String 1 Float Ex: /teste vida 100.0 |
vocк nгo entendeu ..
quando eu tiro do comando ele retorna a mensagem do sscanf exemplo se eu digito /teste deagle retorna pra mim /teste vida/colete quantidade, sendo que deagle nгo tem nada haver com vida/colete... Se vocк ver o cуdigo tem um item a mais nгo tem sу vida e colete |
CMD:teste(playerid, params[])
{
new cmdn[10], Float:quantidadee;
if(isnull(params))
return SendClientMessage(playerid, -1,"/teste [colete/vida] [quantidade] or /teste [deagle]");
if(strcmp(params, "vida", true) == 0)
{
if(sscanf(params, "s[10]f", cmdn, quantidadee))
return SendClientMessage(playerid, -1,"/teste [vida] [quantidade]");
for(new i; i < GetPlayerPoolSize() + 1; i++) if(IsPlayerConnected(i)) SetPlayerHealth(i, quantidadee);
}
else if(strcmp(params, "colete", true) == 0)
{
if(sscanf(params, "s[10]f",cmdn, quantidadee))
return SendClientMessage(playerid, -1,"/teste [colete] [quantidade]");
for(new i; i < GetPlayerPoolSize() + 1; i++) if(IsPlayerConnected(i)) SetPlayerArmour(i, quantidadee);
}
else if(strcmp(params, "deagle", true) == 0)
{
for(new i; i < GetPlayerPoolSize() + 1; i++) if(IsPlayerConnected(i)) GivePlayerWeapon(i, 24, 50);
}
return 1;
}
Eu entendi o motivo e vc nгo quer entender o que estou falando.
Quando vc usa sscanf e utiliza 2 argumentos, vc precisa usar dois argumentos, independentemente se vai precisar de seus valores, vc й obrigado a usar os dois argumentos. Ex.: /teste deagle 0.0 0.0 nгo й utilizado, mas й o ultimo argumento de sscanf e vc й obrigado a colocar qualquer valor float aleatуrio para realizar o comando. |
Eu entendi o motivo e vc nгo quer entender o que estou falando.
Quando vc usa sscanf e utiliza 2 argumentos, vc precisa usar dois argumentos, independentemente se vai precisar de seus valores, vc й obrigado a usar os dois argumentos. Ex.: /teste deagle 0.0 0.0 nгo й utilizado, mas й o ultimo argumento de sscanf e vc й obrigado a colocar qualquer valor float aleatуrio para realizar o comando. |
CMD:teste(playerid, params[]) { new cmdn[10], Float:quantidadee; if(sscanf(params, "s[10] F(100.0)", cmdn, quantidadee)) return SendClientMessage(playerid, -1,"/teste [vida] [quantidade]"); if(strcmp(cmdn, "vida", true) == 0) { for(new i; i < GetPlayerPoolSize() + 1; i++) if(IsPlayerConnected(i)) SetPlayerHealth(i, quantidadee); } else if(strcmp(cmdn, "colete", true) == 0) { for(new i; i < GetPlayerPoolSize() + 1; i++) if(IsPlayerConnected(i)) SetPlayerArmour(i, quantidadee); } else if(strcmp(cmdn, "deagle", true) == 0) { for(new i; i < GetPlayerPoolSize() + 1; i++) if(IsPlayerConnected(i)) GivePlayerWeapon(i, 24, 50); } return 1; }
if(sscanf(params, "s[10] F(100.0)", cmdn, quantidadee))
/teste vida |
/teste vida 50 |
/teste vida (com um espaзo em branco depois de vida) |