SA-MP Forums Archive
[Tutorial] Iniciantes: Criando Comandos Simples - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+----- Forum: Lançamentos/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=56)
+----- Thread: [Tutorial] Iniciantes: Criando Comandos Simples (/showthread.php?tid=265696)



Iniciantes: Criando Comandos Simples - Dr_Pawno - 02.07.2011

Bom, como o numero de Scripters Iniciantes estб aumentando muito, resolvi fazer este Tutorial para Ajuda-los a fazerem comandos.

Inicio
Onde Coloco os Comandos?

Resposta:
Код:
public OnPlayerCommandText(playerid, cmdtext[])
Como iniciar um Comando?

Resposta:

Vocк usa um if ( Em Portuguкs: Se ) e um strcmp.

Exemplo:
Код:
if(strcmp("/Comando", cmdtext, true) == 0)
Oque й o strcmp?

O strcmp й um comparador de strings.

Exemplo:

Se o Nome do Jogador for Dr_Pawno e o dono de uma casa for Shickard e o Dr_Pawno tiver a chave da casa do shickard por bug ela checarб o nome do jogador com o nome do dono da casa para poder retirar o bug.

ExemploІ:

pawn Код:
forward CheckStrings(playerid, string1[], string2[]);

public CheckStrings(playerid, string1[], string2[])
{
    if(strcmp(string1, string2, true) == 0))
    {
        SendClientMessage(playerid, -1, "A String1 й igual a String2.");
    }
    else
    {
        SendClientMessage(playerid, -1, "A String1 Nгo й igual a String2.");
    }
    return 1;
}
Como eu uso o strcmp?

Simples:

Код:
strcmp("Comando", Formato do Texto /* No cado do OnPlayerCommandText vocк usa cmdtext */, true, 7 /* Numero Maximo de Letras no Comando. Nгo й preciso usar. */)
Como devo iniciar um comando?

Vocк deve iniciar um comando com um if se o jogador precisar de algum status ou profissao ou com um SendClientMessage se o comando for para mandar uma mensagem.

Exemplo:
pawn Код:
new pLevel[MAX_PLAYERS];

public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp("/MeuComando", cmdtext, true) == 0)
    {
        if(pLevel[playerid] == 1)
        {
            SendClientMessage(playerid, -1, "Vocк й level 1!");
        }
        else
        {
            SendClientMessage(playerid, -1, "Vocк nгo й level 1 para usar este comando.");
        }
        return true;
    }
    return false;
}
ou
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp("/MeuComando", cmdtext, true) == 0)
    {
        SendClientMessage(playerid, -1, "Vocк usou o comando: /MeuComando!");
        return true;
    }
    return false;
}
Como devo terminar um comando?

Vocк sempre deve terminar com um return true para evitar o erro: (...)

Код:
SERVER: Unknown Command
(...) que irб aparecer.

Como eu crio um comando que funcione para todos os jogadores online?

Isso jб sairб um pouco do Bбsico.

Vocк deve usar um for para criar um loop.

Como devo usar o for?

Vocк deve Criar ou ter uma variбvel jб criada e o tamanho maximo.

Se vocк nгo tiver uma variбvel jб criada vocк usa o for com um new.

O tamanho maximo vocк pode escolher quando quiser.

Exempo:

Sem Variбvel Criada:
Код:
for(new Variavel = 0; Variavel < Tamanho; Variavel++)
Com Variбvel Criada:
Код:
new Variavel;
for(Variavel = 0; Variavel < Tamanho; Variavel++)
Exemplo em um Comando:

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp("/MeuComando", cmdtext, true) == 0)
    {
        for(new Variavel = 0; Variavel < MAX_PLAYERS; Variavel++)
        {
            if(IsPlayerConnected(Variavel) && Variavel != playerid) // Checa se o jogador esta conectado e depois se a Variбvel nгo й o JogadorID para impedir o envio de 2 mensagens ao mesmo tempo.
            {
                SendClientMessage(Variavel, -1, "Algum jogador usou o comando /MeuComando e vocк agora й level 1!");
                pLevel[Variavel] = 1;
            }
        }
        SendClientMessage(playerid, -1, "Vocк usou o comando /MeuComando e agora todos os jogadores sгo level 1!");
        return true;
    }
    return false;
}
Como eu fasso um comando que mostra o nome do jogador?

Vocк deve criar uma String com MAX_PLAYER_NAME ou com 24 celulas.
Logo apos vocк pega o nome do jogador com esta string usando o GetPlayerName.

Depois vocк formata um texto para colocar o Nome do jogador.

Exemplo:

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp("/MeuNome", cmdtext, true) == 0)
    {
        new MeuNome[MAX_PLAYER_NAME],
                string[64];
        GetPlayerName(playerid, MeuNome, sizeof(MeuNome));
        format(string, sizeof(string), "Seu nome й %s. E seu id й %d.", MeuNome, playerid);
        SendClientMessage(playerid, -1, string);
        return true;
    }
    return false;
}
Bom, й isso.
Espero que gostem

Se tiver algo errado me avisem para mim corrigir.


Re: Iniciantes: Criando Comandos Simples - Transferencia - 02.07.2011

So uma pequena correзao,pra min,SendClientMessage nao tem esse Parametro -1 ai nao cara...


Re: Iniciantes: Criando Comandos Simples - Shadoww5 - 02.07.2011

-1 indica a cor que a mensagem terб ao ser enviada ao jogador. Neste caso, ela serб branca.

#TOPIC

Bom tutorial.

OBS: Nгo existe sу o for para fazer loop. Tem tambйm o while e outras formas.


Re: Iniciantes: Criando Comandos Simples - Dr_Pawno - 02.07.2011

Quote:
Originally Posted by Shadoww5
Посмотреть сообщение
OBS: Nгo existe sу o for para fazer loop. Tem tambйm o while e outras formas.
Sim, eu sei. so que while й + enjoado .-.

Tem que cria a var antes e coloca ++ no fim


Re: Iniciantes: Criando Comandos Simples - demonneni - 02.07.2011

^^ vlw


Re: Iniciantes: Criando Comandos Simples - Transferencia - 02.07.2011

Ata Sakei,mais mesmo assim,bom Tuto..


Re: Iniciantes: Criando Comandos Simples - Andrew_Guiga - 02.07.2011

Belo tutorial


Re: Iniciantes: Criando Comandos Simples - Macintosh - 02.07.2011

Faltou explicar o que й o strcmp e o que ele faz, no caso comparar as strings.

@Transferencia
- Depois que ficastes ausente por um tempo, muita coisa mudou * - *


Re: Iniciantes: Criando Comandos Simples - Dr_Pawno - 02.07.2011

Vlw shickard! Vou editar


Re: Iniciantes: Criando Comandos Simples - TheGarfield - 02.07.2011

Quote:
Originally Posted by Dr_Pawno
Посмотреть сообщение
Exemplo:
pawn Код:
new pLevel[MAX_PLAYERS];

public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp("/MeuComando", cmdtext, true) == 0)
    {
        if(pLevel == 1)
        {
            SendClientMessage(playerid, -1, "Vocк й level 1!");
        }
        else
        {
            SendClientMessage(playerid, -1, "Vocк nгo й level 1 para usar este comando.");
        }
        return true;
    }
    return false;
}
ou
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp("/MeuComando", cmdtext, true) == 0)
    {
        SendClientMessage(playerid, -1, "Vocк usou o comando: /MeuComando!");
        return true;
    }
    return false;
}
a variбvel pNivel nгo estб indexada a nenhuma array.
assim darб erro, aconselho fazer:
pawn Код:
new pLevel[MAX_PLAYERS];

public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp("/MeuComando", cmdtext, true) == 0)
    {
        if(pLevel[playerid] == 1)
        {
            SendClientMessage(playerid, -1, "Vocк й level 1!");
        }
        else
        {
            SendClientMessage(playerid, -1, "Vocк nгo й level 1 para usar este comando.");
        }
        return true;
    }
    return false;
}
Continuando ...

esta й uma correзгo sem prestar a atenзгo.
tutorial ele EXPLICA COMO FAZ e nгo explica PRA QUE SERVE A FUNЗГO.

Quote:
Originally Posted by Shadoww5
Посмотреть сообщение
-1 indica a cor que a mensagem terб ao ser enviada ao jogador. Neste caso, ela serб branca.

#TOPIC

Bom tutorial.

OBS: Nгo existe sу o for para fazer loop. Tem tambйm o while e outras formas.
existe vбrias formas de fazer-se um loop., mais a mais rбpida й o loop comum.
pawn Код:
new i;
do
{
      printf(i);
      ++i;
}
while(i <= GetMaxPlayers());
loop com do while.

pawn Код:
new i;
public OnPlayerUpdate(playerid)
{
     if(!strcmp(i,GetMaxPlayers())) return 0;    
     return ++i, OnPlayerUpdate(playerid), true;
}
/\ esta eu nгo recomendo usar, pois lagaria seu sever -troll