[Tool/Web/Other] Conversor: Strcmp para Zcmd.
#1

Conversor : Strcmp para Zcmd.
Por rjjj ou Ken




Objetivo do programa:




Transformar comandos baseados na comparaзгo com o que foi digitado pelo jogador por meio da funзгo strcmp em comandos do sistema zcmd, que sгo mais rбpidos .





Informaзхes:



Chamando comandos direitamente quando em formato de callback, zcmd й uma das mais populares bibliotecas focadas em comandos uma vez que com seu uso estes ficam mais rбpidos, sobretudo os ъltimos do OnPlayerCommandText .



Fiz este programa em HTML e VBScript capaz de converter muitos comandos em strcmp (padrгo) para zcmd porque a transformaзгo de um por um й um processo demorado e cansativo (principalmente quando hб muitos deles) .



Alйm disso, a ferramenta faz a identaзгo automбtica dos comandos para que os mesmos fiquem organizados ao serem colocados fora da public OnPlayerCommandText .



Testado com atй 15000 linhas de comandos.





Notas importantes:



Como a variбvel cmdtext nгo й acessнvel de dentro dos comandos em zcmd como й nos em strcmp, esse sнmbolo, sempre que aparecer, serб substituнdo por cmd. Por isso, antes de mais nada :


pawn Код:
//Adicione ao Topo do GM:

new cmd[128];


Obs: Dos cуdigos citados abaixo, apenas um poderб ser utilizado no mesmo GM.



Para atribuir a esse elemento o valor que teria o cmdtext :


pawn Код:
//Coloque no Final do GM:

public OnPlayerCommandReceived(playerid, cmdtext[])
{
    cmd = #;
    strcat(cmd, cmdtext);
    return 1;
}


Para utilizar strtok nos comandos em zcmd :


pawn Код:
//Coloque no Topo do GM as variбveis que ficavam no inнcio do OnPlayerCommandText, com exceзгo da "cmd" (se existisse):


new string[256]; //Essas sгo as do GM lvdm, como exemplo.
new playermoney; //Essas sгo as do GM lvdm, como exemplo.
new sendername[MAX_PLAYER_NAME]; //Essas sгo as do GM lvdm, como exemplo.
new giveplayer[MAX_PLAYER_NAME]; //Essas sгo as do GM lvdm, como exemplo.
new giveplayerid, moneys, idx; //Essas sгo as do GM lvdm, como exemplo.



//E depois, coloque no Final do GM:

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;
}


public OnPlayerCommandReceived(playerid, cmdtext[])
{
    cmd = strtok(cmdtext, idx);
    cmd = #;
    strcat(cmd, cmdtext);
    return 1;
}



public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
    idx = 0;
    return 1;
}

A variбvel idx que apareceu diversas vezes acima й do GM lvdm, para achar a correspondente a ela no seu GM, apenas veja, nos comandos em strcmp, qual o nome do dado que й passado ao segundo parвmetro do strtok .





Crйditos:




rjjj ou Ken pela feitura do conversor.
Zeex pela criaзгo do zcmd, com o qual o programa trabalha.





Atualizaзхes:





Agora comandos com atй 4 "atalhos" (como o atalho /an de /anuncio) sгo convertidos corretamente.





Download:





Clique Aqui





OBS: Nгo retire os crйditos !!



OBS2: Tem dicas para possнveis futuras versхes ou achou bugs ? Por favor comente-os aqui no tуpico .



Espero ter ajudado .
Reply
#2

Perfeito... testado e aprovado!! sу poderia mudar o design nй
Reply
#3

realmente muito bom rjjj sempre com coisas boas, agora nao estou podendo testar estou indo pro ver meus curso assim que eu voltar com certesa irei testar

parabens
Reply
#4

Quote:
Originally Posted by histire
Посмотреть сообщение
realmente muito bom rjjj sempre com coisas boas
parabens
І...
Reply
#5

Parece ser bom, e muito util.
Vou testar '
Reply
#6

Perfeito ^^
Reply
#7

Уtimo trabalho
Reply
#8

Olб Rjj, bom seu trabalho estб уtimo o unico problema й que nгo estou conseguindo compilar meu GameMode, ele trava tudo e fecha bom irei postar um exemplo de comando para vocк me dar outro ex ^^.

pawn Код:
if(strcmp(cmd, "/dar", true) == 0)
{
    new moneys;
    new giveplayer[MAX_PLAYER_NAME];
    new playermoney;
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) {
        SendClientMessage(playerid, 0xFFFFFFAA, "dar id quantia");
        return 1;
    }
    giveplayerid = strval(tmp);
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) {
        SendClientMessage(playerid, 0xFFFFFFAA, "dar id quantia");
        return 1;
    }
    moneys = strval(tmp);if (IsPlayerConnected(giveplayerid)) {
        GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
        GetPlayerName(playerid, sendername, sizeof(sendername));
        playermoney = GetPlayerMoney(playerid);
        if (moneys > 0 && playermoney >= moneys) {
            GivePlayerMoney(playerid, (0 - moneys));
            GivePlayerMoney(giveplayerid, moneys);
            format(string, sizeof(string), "Voce deu %d para jogador ''%s''[ID:%d].", moneys, giveplayer,giveplayerid);
            SendClientMessage(playerid, 0x88FF9FAA, string);
            format(string, sizeof(string), "Voce recebeu %d do jogador ''%s''[ID:%d].", moneys, sendername, playerid);
            SendClientMessage(giveplayerid, 0x88FF9FAA, string);
        }
        else {
            SendClientMessage(playerid, 0xFF0000AA, "sem grana");
        }
    }
    else {
        format(string, sizeof(string), "%d no esta on", giveplayerid);
        SendClientMessage(playerid, 0x88FF9FAA, string);
    }
    return 1;
}
e compilado fica exatamente assim:

pawn Код:
CMD:dar(playerid, params[])
{
    new moneys;
    new giveplayer[MAX_PLAYER_NAME];
    new playermoney;
    tmp = strtok(cmd, idx);
    if(!strlen(tmp)) {
        SendClientMessage(playerid, 0xFFFFFFAA, "dar id quantia");
        return 1;
    }
    giveplayerid = strval(tmp);
    tmp = strtok(cmd, idx);
    if(!strlen(tmp)) {
        SendClientMessage(playerid, 0xFFFFFFAA, "dar id quantia");
        return 1;
    }
    moneys = strval(tmp);if (IsPlayerConnected(giveplayerid)) {
        GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
        GetPlayerName(playerid, sendername, sizeof(sendername));
        playermoney = GetPlayerMoney(playerid);
        if (moneys > 0 && playermoney >= moneys) {
            GivePlayerMoney(playerid, (0 - moneys));
            GivePlayerMoney(giveplayerid, moneys);
            format(string, sizeof(string), "Voce deu %d para jogador ''%s''[ID:%d].", moneys, giveplayer,giveplayerid);
            SendClientMessage(playerid, 0x88FF9FAA, string);
            format(string, sizeof(string), "Voce recebeu %d do jogador ''%s''[ID:%d].", moneys, sendername, playerid);
            SendClientMessage(giveplayerid, 0x88FF9FAA, string);
        }
        else {
            SendClientMessage(playerid, 0xFF0000AA, "sem grana");
        }
    }
    else {
        format(string, sizeof(string), "%d no esta on", giveplayerid);
        SendClientMessage(playerid, 0x88FF9FAA, string);
    }
    return 1;
}
Quando vou compilar trava tudo, poderia me dizer oque estou fasendo de errado ? coloco as variaveis necessarias assima do comando.
Reply
#9

Como eu passaria isto para Zcmd?
pawn Код:
OnPlayerCommandText(playerid,"/flymode");
Reply
#10

Muito Obrigado a Todos !



* Programa atualizado.



Agora comandos com atй 4 "atalhos" (como o atalho /an de /anuncio) sгo convertidos corretamente. A versгo anterior sу suportava 1 atalho .



Quote:
Originally Posted by whiXґ
Посмотреть сообщение
Olб Rjj, bom seu trabalho estб уtimo o unico problema й que nгo estou conseguindo compilar meu GameMode, ele trava tudo e fecha bom irei postar um exemplo de comando para vocк me dar outro ex ^^.

pawn Код:
if(strcmp(cmd, "/dar", true) == 0)
{
    new moneys;
    new giveplayer[MAX_PLAYER_NAME];
    new playermoney;
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) {
        SendClientMessage(playerid, 0xFFFFFFAA, "dar id quantia");
        return 1;
    }
    giveplayerid = strval(tmp);
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) {
        SendClientMessage(playerid, 0xFFFFFFAA, "dar id quantia");
        return 1;
    }
    moneys = strval(tmp);if (IsPlayerConnected(giveplayerid)) {
        GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
        GetPlayerName(playerid, sendername, sizeof(sendername));
        playermoney = GetPlayerMoney(playerid);
        if (moneys > 0 && playermoney >= moneys) {
            GivePlayerMoney(playerid, (0 - moneys));
            GivePlayerMoney(giveplayerid, moneys);
            format(string, sizeof(string), "Voce deu %d para jogador ''%s''[ID:%d].", moneys, giveplayer,giveplayerid);
            SendClientMessage(playerid, 0x88FF9FAA, string);
            format(string, sizeof(string), "Voce recebeu %d do jogador ''%s''[ID:%d].", moneys, sendername, playerid);
            SendClientMessage(giveplayerid, 0x88FF9FAA, string);
        }
        else {
            SendClientMessage(playerid, 0xFF0000AA, "sem grana");
        }
    }
    else {
        format(string, sizeof(string), "%d no esta on", giveplayerid);
        SendClientMessage(playerid, 0x88FF9FAA, string);
    }
    return 1;
}
e compilado fica exatamente assim:

pawn Код:
CMD:dar(playerid, params[])
{
    new moneys;
    new giveplayer[MAX_PLAYER_NAME];
    new playermoney;
    tmp = strtok(cmd, idx);
    if(!strlen(tmp)) {
        SendClientMessage(playerid, 0xFFFFFFAA, "dar id quantia");
        return 1;
    }
    giveplayerid = strval(tmp);
    tmp = strtok(cmd, idx);
    if(!strlen(tmp)) {
        SendClientMessage(playerid, 0xFFFFFFAA, "dar id quantia");
        return 1;
    }
    moneys = strval(tmp);if (IsPlayerConnected(giveplayerid)) {
        GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
        GetPlayerName(playerid, sendername, sizeof(sendername));
        playermoney = GetPlayerMoney(playerid);
        if (moneys > 0 && playermoney >= moneys) {
            GivePlayerMoney(playerid, (0 - moneys));
            GivePlayerMoney(giveplayerid, moneys);
            format(string, sizeof(string), "Voce deu %d para jogador ''%s''[ID:%d].", moneys, giveplayer,giveplayerid);
            SendClientMessage(playerid, 0x88FF9FAA, string);
            format(string, sizeof(string), "Voce recebeu %d do jogador ''%s''[ID:%d].", moneys, sendername, playerid);
            SendClientMessage(giveplayerid, 0x88FF9FAA, string);
        }
        else {
            SendClientMessage(playerid, 0xFF0000AA, "sem grana");
        }
    }
    else {
        format(string, sizeof(string), "%d no esta on", giveplayerid);
        SendClientMessage(playerid, 0x88FF9FAA, string);
    }
    return 1;
}
Quando vou compilar trava tudo, poderia me dizer oque estou fasendo de errado ? coloco as variaveis necessarias assima do comando.
Compilei o comando e este funcionou normalmente .



Tenha certeza de que colocou os comandos em zcmd fora da public OnPlayerCommandText e apagou esta depois disso.



Espero ter ajudado .
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)