[Ayuda] Comando [Texto]...
#1

Buenas a Todos,Tengo problemas con los comando con Funcion de txto, /comano [Texto] No me detcta el espacio, ose si escribo: /comano hola mundo solo me sale Hola y si escribo todo junto /comando HolaMuno me sale eso.

como puedo solucionarlo?. :S

Desde ya muchas gracias.

pawn Код:
if(strcmp(cmd, "/Comando", true) == 0)
    {
        if(IsPlayerConnected(playerid))
        {
            new tmp[128];
            tmp = strtok(cmdtext, idx);
            if(strlen(tmp) == 0)
            {
                SendClientMessage(playerid, -1, "    [ ! ] Escribe: /Comando (Texto)");
                return 1;
            }
            format(str, sizeof(str), "*%s", tmp);
            SendClientMessage(playerid, -1, str);
            return 1;
        }
        return 1;
    }
   
strtok(const string[], &index)
{
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
        index++;
    }

    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
    result[index - offset] = EOS;
    return result;
}
Reply
#2

Supongo que puede ser la definicion del strcmp
pawn Код:
if(strcmp(cmdtext, "/Comando", true) == 0)// aqui tenias "cmd", y debe ser "cmdtext"
    {
        if(IsPlayerConnected(playerid))
        {
            new tmp[128];
            tmp = strtok(cmdtext, idx);
            if(strlen(tmp) == 0)
            {
                SendClientMessage(playerid, -1, "    [ ! ] Escribe: /Comando (Texto)");
                return 1;
            }
            format(str, sizeof(str), "*%s", tmp);
            SendClientMessage(playerid, -1, str);
            return 1;
        }
        return 1;
    }
   
strtok(const string[], &index)
{
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
        index++;
    }

    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
    result[index - offset] = EOS;
    return result;
}
No estoy seguro, pero prueba
Reply
#3

Este codigo funciona como tu quieres:
pawn Код:
if(!strcmp(cmdtext, "/Comando", true, 8)){
    if(!strlen(cmdtext[9]))return SendClientMessage(playerid, -1, "    [ ! ] Escribe: /Comando (Texto)");
    cmdtext[8] = '*';
    return SendClientMessage(playerid, -1, cmdtext[8]);
}
Reply
#4

Quote:
Originally Posted by the_chaoz
Посмотреть сообщение
Este codigo funciona como tu quieres:
pawn Код:
if(!strcmp(cmdtext, "/Comando", true, 8)){
    if(!strlen(cmdtext[9]))return SendClientMessage(playerid, -1, "    [ ! ] Escribe: /Comando (Texto)");
    cmdtext[8] = '*';
    return SendClientMessage(playerid, -1, cmdtext[8]);
}
:motherofgod: o.o
Reply
#5

Para comandos de mensajes asн, no hace falta usar strtok
Reply
#6

Te recomiendo usar sscanf, para estas cosas es mucho mas fбcil y rбpido
Reply
#7

Quote:
Originally Posted by [Nikk]
Посмотреть сообщение
Te recomiendo usar sscanf, para estas cosas es mucho mas fбcil y rбpido
De hecho eso podria discutirse, en este caso utilizar sscanf no es mas rapido, inclusive podria decirte que excepto que utilizes cmdtext (como utilize yo) el codigo sera mas ineficiente. sscanf solo es necesario cuando se tienen varios parametros, caso contrario no hay necesidad.
Reply
#8

Ya solucione, El problema estaba en la funcion del strtok.

Gracias Igual a todos .
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)