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