[Ajuda] Comando em strtok
#1

Bom minha dъvida й a seguinte: Baseado no Raven's, fiz um comando para teleporte, /suicidio [1-2]

Ta beleza, funcionar direitinho, mas queria colocar de um jeito em que os nъmeros sу podessem ser 1 ou 2, caso for qualquer outro nъmero, que desse erro no comando.

Meu comando й esse aqui:

pawn Код:
if(strcmp("/suicidio [nъmero]", cmdtext, true, 10) == 0)
    {
    new tmp[256];
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) {
    SendClientMessage(playerid, COLOR_GREEN, "/suicidio [1-2]");
    return 1;
    }

    else if(strcmp(tmp,"1",true) == 0) // Nъmero 1 //
    {
    new Float:Vida;
    GetPlayerHealth(playerid, Vida);
    if(Vida > 50)
    {
    new pName[30], string [256];
    GetPlayerName(playerid, pName, 30);
    format(string, 256, "%s esta de mal com a vida e foi suicidar. Agilize o processo dele! /suicidio", pName);
    SendClientMessageToAll(COLOR_RED,string);
    SetPlayerPos(playerid, 1794.06591797,-1793.72912598,59.37450409);
    SetPlayerInterior(playerid, 0);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,8, 1);
    GivePlayerWeapon(playerid, 16, 99999999999);
    GivePlayerWeapon(playerid, 22, 99999999999);
    GivePlayerWeapon(playerid, 30, 99999999999);
    GivePlayerWeapon(playerid, 31, 99999999999);
    }
    else
    {
    SendClientMessage(playerid, COLOR_RED, "[ERRO DE SINTAXE] Vocк nгo pode se teletransportar se estiver morrendo meu amigo.");
    }
    return 1;
    }
   
    else if(strcmp(tmp,"2",true) == 0) // Nъmero 2 //
    {
    new pName[30], string [256];
    GetPlayerName(playerid, pName, 30);
    format(string, 256, "%s foi tentar a sorte a grande atirando nos explosivos. Agilize o processo dele! /suicidio2", pName);
    SendClientMessageToAll(COLOR_RED,string);
    SetPlayerPos(playerid, 548.66491699,-1987.40795898,21.89083481);
    SetPlayerInterior(playerid, 0);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,8, 1);
    GivePlayerWeapon(playerid, 16, 99999999999);
    GivePlayerWeapon(playerid, 22, 99999999999);
    GivePlayerWeapon(playerid, 30, 99999999999);
    GivePlayerWeapon(playerid, 31, 99999999999);
    GivePlayerWeapon(playerid, 34, 99999999999);
    }
    else
    {
    SendClientMessage(playerid, COLOR_RED, "[ERRO DE SINTAXE] Vocк nгo pode se teletransportar se estiver morrendo meu amigo.");
    }
    return 1;
    }
Reply
#2

pawn Код:
if(strcmp("/suicidio [nъmero]", cmdtext, true, 10) == 0)
    {
        new tmp[256];
        tmp = strtok(cmdtext, idx);
        if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GREEN, "/suicidio [1-2]");

        if(strcmp(tmp,"1",true) == 0) // Nъmero 1 //
        {
            new Float:Vida;
            GetPlayerHealth(playerid, Vida);
            if(Vida > 50)
            {
                new pName[30], string [256];
                GetPlayerName(playerid, pName, 30);
                format(string, 256, "%s esta de mal com a vida e foi suicidar. Agilize o processo dele! /suicidio", pName);
                SendClientMessageToAll(COLOR_RED,string);
                SetPlayerPos(playerid, 1794.06591797,-1793.72912598,59.37450409);
                SetPlayerInterior(playerid, 0);
                ResetPlayerWeapons(playerid);
                GivePlayerWeapon(playerid,8, 1);
                GivePlayerWeapon(playerid, 16, 99999999999);
                GivePlayerWeapon(playerid, 22, 99999999999);
                GivePlayerWeapon(playerid, 30, 99999999999);
                GivePlayerWeapon(playerid, 31, 99999999999);
            }
            else return SendClientMessage(playerid, COLOR_RED, "[ERRO DE SINTAXE] Vocк nгo pode se teletransportar se estiver morrendo meu amigo.");
            return 1;
        }
        else if(strcmp(tmp,"2",true) == 0) // Nъmero 2 //
        {
            new pName[30], string [256];
            GetPlayerName(playerid, pName, 30);
            format(string, 256, "%s foi tentar a sorte a grande atirando nos explosivos. Agilize o processo dele! /suicidio2", pName);
            SendClientMessageToAll(COLOR_RED,string);
            SetPlayerPos(playerid, 548.66491699,-1987.40795898,21.89083481);
            SetPlayerInterior(playerid, 0);
            ResetPlayerWeapons(playerid);
            GivePlayerWeapon(playerid,8, 1);
            GivePlayerWeapon(playerid, 16, 99999999999);
            GivePlayerWeapon(playerid, 22, 99999999999);
            GivePlayerWeapon(playerid, 30, 99999999999);
            GivePlayerWeapon(playerid, 31, 99999999999);
            GivePlayerWeapon(playerid, 34, 99999999999);
        }
        else return SendClientMessage(playerid, COLOR_RED, "[Erro] Voce sу pode usar os numeros 1 ou 2!");
        return 1;
    }
Reply
#3

Quote:
Originally Posted by Pharrel
Посмотреть сообщение
pawn Код:
if(strcmp("/suicidio [nъmero]", cmdtext, true, 10) == 0)
    {
        new tmp[256];
        tmp = strtok(cmdtext, idx);
        if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GREEN, "/suicidio [1-2]");

        if(strcmp(tmp,"1",true) == 0) // Nъmero 1 //
        {
            new Float:Vida;
            GetPlayerHealth(playerid, Vida);
            if(Vida > 50)
            {
                new pName[30], string [256];
                GetPlayerName(playerid, pName, 30);
                format(string, 256, "%s esta de mal com a vida e foi suicidar. Agilize o processo dele! /suicidio", pName);
                SendClientMessageToAll(COLOR_RED,string);
                SetPlayerPos(playerid, 1794.06591797,-1793.72912598,59.37450409);
                SetPlayerInterior(playerid, 0);
                ResetPlayerWeapons(playerid);
                GivePlayerWeapon(playerid,8, 1);
                GivePlayerWeapon(playerid, 16, 99999999999);
                GivePlayerWeapon(playerid, 22, 99999999999);
                GivePlayerWeapon(playerid, 30, 99999999999);
                GivePlayerWeapon(playerid, 31, 99999999999);
            }
            else return SendClientMessage(playerid, COLOR_RED, "[ERRO DE SINTAXE] Vocк nгo pode se teletransportar se estiver morrendo meu amigo.");
            return 1;
        }
        else if(strcmp(tmp,"2",true) == 0) // Nъmero 2 //
        {
            new pName[30], string [256];
            GetPlayerName(playerid, pName, 30);
            format(string, 256, "%s foi tentar a sorte a grande atirando nos explosivos. Agilize o processo dele! /suicidio2", pName);
            SendClientMessageToAll(COLOR_RED,string);
            SetPlayerPos(playerid, 548.66491699,-1987.40795898,21.89083481);
            SetPlayerInterior(playerid, 0);
            ResetPlayerWeapons(playerid);
            GivePlayerWeapon(playerid,8, 1);
            GivePlayerWeapon(playerid, 16, 99999999999);
            GivePlayerWeapon(playerid, 22, 99999999999);
            GivePlayerWeapon(playerid, 30, 99999999999);
            GivePlayerWeapon(playerid, 31, 99999999999);
            GivePlayerWeapon(playerid, 34, 99999999999);
        }
        else return SendClientMessage(playerid, COLOR_RED, "[Erro] Voce sу pode usar os numeros 1 ou 2!");
        return 1;
    }
Ok, corrigiu isso, mas voltou a bugar outra coisa.

Agora quando digite /suicidio sу, em vez de aparecer [Erro] Digite /suicidio [1-2], esta aparecendo "Comando Invбlido"!

Pode me ajudar?

Obrigado!
Reply
#4

pawn Код:
if(!strcmp("/suicidio", cmdtext, true))
    {
    new tmp[256];
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) {
    SendClientMessage(playerid, COLOR_GREEN, "/suicidio [1-2]");
    return 1;
        }
        else if(strcmp(tmp,"1",true) == 0) // Nъmero 1 //
        {
            new Float:Vida;
            GetPlayerHealth(playerid, Vida);
            if(Vida > 50)
            {
                new pName[30], string [256];
                GetPlayerName(playerid, pName, 30);
                format(string, 256, "%s esta de mal com a vida e foi suicidar. Agilize o processo dele! /suicidio", pName);
                SendClientMessageToAll(COLOR_RED,string);
                SetPlayerPos(playerid, 1794.06591797,-1793.72912598,59.37450409);
                SetPlayerInterior(playerid, 0);
                ResetPlayerWeapons(playerid);
                GivePlayerWeapon(playerid,8, 1);
                GivePlayerWeapon(playerid, 16, 99999999999);
                GivePlayerWeapon(playerid, 22, 99999999999);
                GivePlayerWeapon(playerid, 30, 99999999999);
                GivePlayerWeapon(playerid, 31, 99999999999);
            }
            else return SendClientMessage(playerid, COLOR_RED, "[ERRO DE SINTAXE] Vocк nгo pode se teletransportar se estiver morrendo meu amigo.");
            return 1;
        }
        else if(strcmp(tmp,"2",true) == 0) // Nъmero 2 //
        {
            new pName[30], string [256];
            GetPlayerName(playerid, pName, 30);
            format(string, 256, "%s foi tentar a sorte a grande atirando nos explosivos. Agilize o processo dele! /suicidio2", pName);
            SendClientMessageToAll(COLOR_RED,string);
            SetPlayerPos(playerid, 548.66491699,-1987.40795898,21.89083481);
            SetPlayerInterior(playerid, 0);
            ResetPlayerWeapons(playerid);
            GivePlayerWeapon(playerid,8, 1);
            GivePlayerWeapon(playerid, 16, 99999999999);
            GivePlayerWeapon(playerid, 22, 99999999999);
            GivePlayerWeapon(playerid, 30, 99999999999);
            GivePlayerWeapon(playerid, 31, 99999999999);
            GivePlayerWeapon(playerid, 34, 99999999999);
        }
        else return SendClientMessage(playerid, COLOR_RED, "[Erro] Voce sу pode usar os numeros 1 ou 2!");
        return 1;
    }
Reply
#5

para falar a verdade,nunca vi comando desse tipo:
pawn Код:
if(strcmp("/suicidio [nъmero]", cmdtext, true, 10) == 0)
quero dizer,com [] depois do comando principal,entao retire o [numero] e teste.
Reply
#6

if(strcmp("/suicidio [nъmero]", cmdtext, true, 10) == 0)

conta 10 celulas, o q vem dps de 10 celulas nao importa no codigo.
Reply
#7

Pharrel,estou me referindo ao strtok,e nao ao comando em Si.
@Nao Leve isso como um comeзo de Briga.
Reply
#8

mas й o msm q uma format(... c vc por 10 celulas ele sу vai ler atй o caractere 9, e o resto й 'inutilizado'

pq eu levaria, isso й uma simples argumentaзгo sobre um comando ^^?
Reply
#9

Quote:
Originally Posted by Pharrel
Посмотреть сообщение
pawn Код:
if(!strcmp("/suicidio", cmdtext, true))
    {
    new tmp[256];
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) {
    SendClientMessage(playerid, COLOR_GREEN, "/suicidio [1-2]");
    return 1;
        }
        else if(strcmp(tmp,"1",true) == 0) // Nъmero 1 //
        {
            new Float:Vida;
            GetPlayerHealth(playerid, Vida);
            if(Vida > 50)
            {
                new pName[30], string [256];
                GetPlayerName(playerid, pName, 30);
                format(string, 256, "%s esta de mal com a vida e foi suicidar. Agilize o processo dele! /suicidio", pName);
                SendClientMessageToAll(COLOR_RED,string);
                SetPlayerPos(playerid, 1794.06591797,-1793.72912598,59.37450409);
                SetPlayerInterior(playerid, 0);
                ResetPlayerWeapons(playerid);
                GivePlayerWeapon(playerid,8, 1);
                GivePlayerWeapon(playerid, 16, 99999999999);
                GivePlayerWeapon(playerid, 22, 99999999999);
                GivePlayerWeapon(playerid, 30, 99999999999);
                GivePlayerWeapon(playerid, 31, 99999999999);
            }
            else return SendClientMessage(playerid, COLOR_RED, "[ERRO DE SINTAXE] Vocк nгo pode se teletransportar se estiver morrendo meu amigo.");
            return 1;
        }
        else if(strcmp(tmp,"2",true) == 0) // Nъmero 2 //
        {
            new pName[30], string [256];
            GetPlayerName(playerid, pName, 30);
            format(string, 256, "%s foi tentar a sorte a grande atirando nos explosivos. Agilize o processo dele! /suicidio2", pName);
            SendClientMessageToAll(COLOR_RED,string);
            SetPlayerPos(playerid, 548.66491699,-1987.40795898,21.89083481);
            SetPlayerInterior(playerid, 0);
            ResetPlayerWeapons(playerid);
            GivePlayerWeapon(playerid,8, 1);
            GivePlayerWeapon(playerid, 16, 99999999999);
            GivePlayerWeapon(playerid, 22, 99999999999);
            GivePlayerWeapon(playerid, 30, 99999999999);
            GivePlayerWeapon(playerid, 31, 99999999999);
            GivePlayerWeapon(playerid, 34, 99999999999);
        }
        else return SendClientMessage(playerid, COLOR_RED, "[Erro] Voce sу pode usar os numeros 1 ou 2!");
        return 1;
    }
Quote:
Originally Posted by Gustavo_Araujo
Посмотреть сообщение
para falar a verdade,nunca vi comando desse tipo:
pawn Код:
if(strcmp("/suicidio [nъmero]", cmdtext, true, 10) == 0)
quero dizer,com [] depois do comando principal,entao retire o [numero] e teste.
Velho!!!

Era sу tirar essa merda de [numero]

Nem sei porque coloquei esse treco ai, esse foi meu primeiro comando em strtok.

Meu comando jб tava praticamente certo jб!

Valeu ai, reputacгo pros dois.

Nossa vei, nгo acredito.
Reply
#10

Quote:
Originally Posted by Jason_King
Посмотреть сообщение
Velho!!!

Era sу tirar essa merda de [numero]

Nem sei porque coloquei esse treco ai, esse foi meu primeiro comando em strtok.

Meu comando jб tava praticamente certo jб!

Valeu ai, reputacгo pros dois.

Nossa vei, nгo acredito.
Jб que foi seu primeiro comando, aconselho vocк comeзar por ZCMD & SSCANF. Alйm de ser mais fбcil, й muito mais rбpido e eficiente. Alйm de que(como diz na wiki) strtok deve ser evitada sempre que possнvel!
Reply


Forum Jump:


Users browsing this thread: