SSGamers - Fique atualizado
Chegou o novo tema 6.1.3 / SSGames - Servidores online de qualidade - Inscreva-se Ja! é entre para nossa comunidade! - Ouça nossa web radio -Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.

[INC] zcmd 0.3.1 | Fast & Simple Command Processor (updated 30/10/2009)

Weslley_Script
SS - Fundador
SS - Fundador
Weslley_Script
Steam Steam : WeslleySSGames
Zello : WeslleySSGames
Mensagens : 9109
Moedas : 1024576
Data de inscrição : 06/10/2011
Idade : 24
Localização : Brasil

Mensagem por Weslley_Script em Sex 24 Maio 2019 - 15:11

Descrição
Este é apenas um pequeno include que usa OnPlayerCommandText () para processar os comandos dos jogadores. Cada comando tem uma função separada, como em dcmd, mas o zcmd os chama diretamente via CallLocalFunction (). Esse método é muito mais rápido do que quando você compara sucessivamente o texto inserido em cada comando que você tem em seu script (especialmente se ele envia um cmd inexistente, você passa por todos) e sua superioridade sobre o antigo é proporcional ao número de comandos. Eu fiz um teste de velocidade quando comecei a pensar sobre essa abordagem, você pode encontrar os resultados aqui.

Uso
Tudo que você precisa para adicionar um comando é apenas fazer uma função pública usando uma macro pré-definida especial, como esta:



Código:
COMMAND:mycommand(playerid, params[]) // or CMD:mycommand(playerid, params[])
{
  // Do something
  return 1;
}


ou (estilo antigo):


Código:
command(mycommand, playerid, params[]) // or cmd(mycommand, playerid, params[])
{
  // Do something
  return 1;
}



Aqui params [] é a string de parâmetros, o playerid é um ID do jogador que envia este comando.
Isso é tudo! Muito fácil, não é?

Importante: Já que a v0.3 OnPlayerCommandText não pode mais ser usada (também a opção ZCMD_NO_CALLBACK foi removida), mas há duas novas chamadas de retorno:


Código:
OnPlayerCommandReceived(playerid, cmdtext[])


Este é chamado quando alguém envia um comando. Se você retornar 0 aqui, o comando não será executado.


Código:
OnPlayerCommandPerformed(playerid, cmdtext[], success)



E este é chamado após a execução do comando, aqui se você "retornar 0" o jogador verá a mensagem padrão "Comando Desconhecido". O parâmetro "success" é igual ao valor retornado pelos retornos da função de comando (se não existir, o sucesso será 0).


Observe que não é necessário adicionar esses retornos de chamada ao seu script se você não usá-los.

Como fazer dois comandos diferentes fazendo a mesma coisa

Por exemplo, você tem /something  cmd:

Código:
COMMAND:something(playerid, params[])
{
  // some stuff here
  return 1;
}



e você quer criar outro como /another que faz o que /something  faz. A maneira mais simples de fazer isso é:


Código:
COMMAND:another(playerid, params[])
{
  return cmd_something(playerid, params);
}




Nota # 1: Se você quiser usar o zcmd em um filterscript, coloque isto define antes de incluir:

Código:
#define FILTERSCRIPT



Nota #2: Se você quiser verificar se a string de parâmetros está vazia, você não deve fazer como:


Código:
if (!strlen(params))
{
  // no parameters
}


ou:


Código:
if (!params[0])



porque seu comprimento nunca é nulo (leia mais aqui), simplesmente use isnull () incluído no zcmd:

Código:
if (isnull(params))


Na verdade, se você usar o sscanf, não precisará fazer isso, pois ele possui uma verificação interna.


Aqui está um exemplo de como você pode fazer o comando / givemoney usando zcmd com sscanf:


Código:
COMMAND:givemoney(playerid, params[])
{
    if (IsPlayerAdmin(playerid))
    {
        new
          toplayerid, // the player we want to give money to
          amount;
        // extracting player's ID and amount from params
        if (!sscanf(params, "ii", toplayerid, amount))
        {
          if (toplayerid != INVALID_PLAYER_ID)
          {
            new
              message[40];
            GivePlayerMoney(toplayerid, amount);
            format(message, sizeof(message), "You got $%d from admin!", amount);
            SendClientMessage(toplayerid, 0x00FF00FF, message);
          }
          else SendClientMessage(playerid, 0xFF0000FF, "That player is not connected");
        }
        else SendClientMessage(playerid, 0xFFFFFFFF, "Usage: /givemoney <playerid> <amount>");
    }
    else SendClientMessage(playerid, 0xFF0000FF, "Only admins can use this command!");
    return 1;
}



Download
Pastebin



[INC] zcmd 0.3.1 | Fast & Simple Command Processor (updated 30/10/2009) D07Xwqb
[INC] zcmd 0.3.1 | Fast & Simple Command Processor (updated 30/10/2009) Yjab9HN

^
subir
Data/hora atual: Qui 6 Ago 2020 - 19:20