[Ajuda] Usando Sscanf
#1

pawn Код:
CMD:editaremp(playerid, params[])
{
    new id = 0,
        cmd[12],
        valor;

    id = IdEmpProxima(playerid);
   
    if (sscanf(params, "s[12]i",cmd, valor)) {
        SendClientMessage(playerid, -1, "/editaremp [id] [opcao] [valor]");
        SendClientMessage(playerid, -1, "opзoes: stock");
        return 1;
    }

    if (!strcmp(cmd, "stock", true)) {
        if(id == 0) return SendClientMessage(playerid, -1, "Vocк nгo estб prуximo a uma empresa.");
        Empresa[id][TotalStock] = valor;
        return 1;
    }
    return 1;
}
Alguem me ajuda? nгo estou conseguindo fazer o comando em sscanf, sempre da erro, quando digito /editaremp stock quantia, ele nгo seta.
Reply
#2

nгo entendi muito bem o seu comando mas tenta assim:

PHP код:
CMD:editaremp(playeridparams[])
{
    new 
id 0cmd[12], valor;

    
id IdEmpProxima(playerid);

    if (
sscanf(params"ds[12]d"idcmdvalor))
    {
        
SendClientMessage(playerid, -1"/editaremp [id] [opзгo] [valor]");
        
SendClientMessage(playerid, -1"opзoes: stock");
        return 
1;
    }
    if (!
strcmp(cmd"stock"true))
    {
        if(
id == 0) return SendClientMessage(playerid, -1"Vocк nгo estб prуximo a uma empresa.");

        
Empresa[id][TotalStock] = valor;
        return 
1;
    }
    return 
1;

ou assim:

PHP код:
CMD:editaremp(playeridparams[])
{
    new 
id 0cmd[12], valor;

    
id IdEmpProxima(playerid);

    if (
sscanf(params"s[12]d"cmdvalor))
    {
        
SendClientMessage(playerid, -1"/editaremp [opзгo] [valor]");
        
SendClientMessage(playerid, -1"opзoes: stock");
        return 
1;
    }
    if (!
strcmp(cmd"stock"true))
    {
        if(
id == 0) return SendClientMessage(playerid, -1"Vocк nгo estб prуximo a uma empresa.");

        
Empresa[id][TotalStock] = valor;
        return 
1;
    }
    return 
1;

Reply
#3

Verifique:

PHP код:
CMD:editaremp(playeridparams[]) {
    new 
id IdEmpProxima(playerid), cmd[12], valor;
    if(
sscanf(params"s[12]i"cmdvalor)) {
        
SendClientMessage(playerid, -1"/editaremp [opcao] [valor].");
        
SendClientMessage(playerid, -1"Opзхes: stock.");
        return 
1;
    }
    if(!
strcmp(cmd"stock")) {
        if(
id == 0) return SendClientMessage(playerid, -1"Vocк nгo estб prуximo a uma empresa.");
        
Empresa[id][TotalStock] = valor;
        
SendClientMessage(playerid, -1"Comando efetuado com sucesso.");
        return 
1;
    }
    
    
SendClientMessage(playerid, -1"Opзгo invбlida, use: stock.");
    return 
1;

Reply
#4

Veja se funciona, nгo testei.

PHP код:
CMD:editaremp(playeridparams[])
{
    new 
id 0,
        
cmd[12],
        
string[128],
        
valor;

    
id IdEmpProxima(playerid);

    if(
id == 0
        return 
SendClientMessage(playerid, -1"Vocк nгo estб prуximo a uma empresa.");
    else if (
sscanf(params"s[12]S()[128]"cmdstring)) 
    {
        
SendClientMessage(playerid, -1"/editaremp [opзгo]");
        
SendClientMessage(playerid, -1"Opзхes: stock");
        return 
1;
    }
    else if (!
strcmp(cmd"stock"true)) 
    {
        if (
sscanf(string"d"valor))
            return 
SendSyntaxMessage(playerid"/editaremp stock [valor]");

        if(
valor 1)
            return 
SendClientMessage(playerid, -1"Vocк deve informar um valor acima de 0.");

        
Empresa[id][TotalStock] = valor;
        new 
str[128];
        
format(str128"Vocк editou com sucesso o estoque da empresa %d para %d produtos."idvalor);
        
SendClientMessage(playerid, -1str);
        return 
1;
    }
    else
        
SendClientMessage(playerid"Opзгo invбlida.");

    return 
1;

Reply
#5

Creio que deste jeito irб fazer o que vocк precisa...

Код:
CMD:editaremp(playerid, params[]) 
{ 
	if(isnull(params)) return SendClientMessage(playerid, -1, "/editaremp [opcao] [valor]."); //caso o comando tenha sido digitado sem parвmetros retorna mensagem de erro
	new id = IdEmpProxima(playerid); //variavel que irб armazenar o id da empresa mais prуxima
	if(id == 0) return SendClientMessage(playerid, -1, "Vocк nгo estб prуximo(a) de uma empresa."); //caso IdEmpProxima(playerid) retorne 0, ele da erro
	
	if(!strfind(params, "stock", true))) //caso a procura do texto "stock" nos parametros retorn 0, ou seja, o parametro digitado for stock, cai no if
	{
		new valor; //variavel que armazena-ra o valor digitado
	    if(sscanf(params, "' 'd", valor)) return SendClientMessage(playerid, -1, "/editaremp [opcao] [valor]."); //agora usa sscanf para buscar o valor digitado, ele busca esse valor а partir do digito espaзo
		//digitando /editaremp stock 0, ele vai armazenar o 0 na variavel valor, pois estб apуs o espaзo.
		
		Empresa[id][TotalStock] = valor; //salva o valor nos dados da empresa
        SendClientMessage(playerid, -1, "Comando efetuado com sucesso."); 
	}
	//caso tenha outros tipos de "opзгo", use: else if(!strfind(params, "nome da opзгo", true)))
	else  //caso nгo seja digitado nenhuma das opзхes, retorna mensagem de erro
	{	SendClientMessage(playerid, -1, "/editaremp [opcao] [valor]."); 
        SendClientMessage(playerid, -1, "Opзхes: stock."); 
	}
    return 1; 
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)