SA-MP Forums Archive
[Tutorial] O Basico do para comeзar um projeto! - 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] O Basico do para comeзar um projeto! (/showthread.php?tid=475684)



O Basico do para comeзar um projeto! - tonisantolia - 14.11.2013

Bom, sou Antonio Rodrigues mais conhecido como Toni Santolia..

Eu irei dar dicas bбsicas e ensinar a base de alguns sistemas para comeзar seu gamemode..

• Sinopse:
-- Dicas iniciais.
-- Enumeradores e Variбveis.
-- Macros.
-- Cбlculos.
-- Loop's.
-- Comandos (ZCMD - SSCANF2).


• Dicas Iniciais:

Bom, o interessante para se montar um projeto й planejar bem oque vai ter no servidor.. Como por exemplo, sistema de registro, sistema de administrador dinвmico, sistema para defecar (vai que..) e etc..

Entгo o legal era fazer uma lista como esta:

De que serб o servidor:
Sistemas iniciais:
Sistemas complexos:
Novidades:
Organizaзгo Administrativa:

e oque vier na sua cabeзa

• Variбveis:

Bom, vamos comeзar falando sobre as variбveis..

Variбveis como o prуprio nome jб diz.. Sгo simples sнmbolos que sгo criados para receber valores variados.

Exemplo:

Temos uma questгo de matemбtica onde X = Y + 10 logo que Y = 10.. Como fazer para imprimir esses valores?

pawn Код:
X = Y + 10
Y = 10;
X = 10 + 10
X = 20
Simples.. nгo?

Jб na linguagem pawn as variaveis sгo acompanhadas de uma new (funзгo que cria a variavel) e no final recebem ponto e virgula ( ; ) que faz o compilador entender que a linha terminou ali.

Exemplo:
pawn Код:
new Toni_Gostoso;
Jб para setar um valor nessa variбvel eu poderia ir em qualquer comando ou callback e fazer da seguinte forma:
pawn Код:
public OnPlayerConnect(playerid)
{
    Toni_Gostoso = 1; // Logo a variбvel Toni_Gostoso irб receber o valor 1.
    return true;
}
Ai vocк pergunta.. Mais iai tiu? Como faзo para setar esse valor para um jogador especifico?

Para setar um valor para um jogador especifico, vocк antes deve saber que a cada player que entra no seu servidor recebe um ID ъnico para em quanto ele estiver conectado. Exemplo: 3 Jogadores entram no servidor na seguinte ordem.. Joгo_Pedro , Clebinho_PauPreto e Ze_Bruno.

No servidor a ordem de ID seria:

Joгo_Pedro ( 0 )
Clebinho_PauPreto ( 1 )
Ze_Bruno ( 2 )

Lembrando que a contagem se inicia de 0.. Exemplo: 0 1 2 3 4 5 6 7 8 9 [ ... ]

No SA:MP existe o MAX_PLAYERS no qual pode ser usado da seguinte forma:

pawn Код:
new Toni_Gostoso[MAX_PLAYERS];
ai quando o jogador conecta-se ele irб receber no seu ID prуprio o valor 1.. Para isso teria que fazer da seguinte maneira:

pawn Код:
public OnPlayerConnect(playerid)
{
    Toni_Gostoso[playerid] = 1;
    return 1;
}
playerid й a funзгo que irб getar o ID do player para que o valor da variбvel fique 1 para ele..

Bom, as variбveis sгo classificadas da seguinte forma:

Comum - Booleana - Float - String - Estбtica

Variavel Comum: A Variavel comum й como a que nуs vimos acima..
pawn Код:
new Toni_Gostoso[MAX_PLAYERS];
Nгo tem muito oque explicar..

Variбvel Booleana: Para entender mais sobre ela pode ler o tutorial https://sampforum.blast.hk/showthread.php?tid=292185 nгo sou muito bom para explicar

Variavel Float: A Variavel do tipo Float й ideal para receber dados como coordenadas.. Exemplo usando GetPlayerPos:
pawn Код:
new Float:PosicaoPlayerid[3];
GetPlayerPos(playerid, PosicaoPlayerid[0], PosicaoPlayerid[1], PosicaoPlayerid[2]);
Variбvel String: A Variбvel do tipo string й ideal para armazenar qualquer tipo de texto.. Um Exemplo para formatar uma mensagem usando string, float e a funзгo GetPlayerPos:
pawn Код:
new
    Float:PosicaoPlayerid[3],
    String[128]; // 128 й a quantidade de caracteres que pode ser usado no maximo na sua mensagem..
GetPlayerPos(playerid, PosicaoPlayerid[0], PosicaoPlayerid[1], PosicaoPlayerid[2]);
format(string, sizeof string, "Posiзгo atual: %f.%f.%f", PosicaoPlayerid[0], PosicaoPlayerid[1], PosicaoPlayerid[2]);
SendClientMessage(playerid, 0xFFFFFF, string);
Variбvel Estбtica: Nгo me aprofundei no assunto.. Entгo se alguem quiser colocar uma explicaзгo deixe nos comentбrios

As Variбveis podem ser tanto Globais como Locais:

Variбveis Locais: Uma variбvel local sу pode ser usada em um ъnico lugar, por exemplo:
pawn Код:
CMD:teste(playerid) {
    new teste;
    if(teste==1) return SendClientMessage(playerid, 0xFFFFFF00, "Estб variбvel sу pode ser usada dentro deste comando.");
    return true;
}
Variaveis Globais: Elas podem ser usadas em qualquer parte do gamemode.. Exemplo:
pawn Код:
// Topo do Script:
new VariavelGlobal;
CMD:teste(playerid) {
    if(VariavelGlobal==1) return SendClientMessage(playerid, 0xFFFFFF00, "Posso usar ela nesse comando");
    return true;
}
CMD:teste1(playerid) {
    if(VariavelGlobal==2) return SendClientMessage(playerid, 0xFFFFFF00, "Posso usar ela nesse comando tambйm.");
    return true;
}
• Enumeradores:

Oque sгo?
Enumeradores em pawn sгo uma forma de agrupar varias variбveis que vгo ser utilizadas para a mesma funзгo ou com o mesmo intuito.

Ai vocк me pergunta: Mas como assim?

Exemplo:
pawn Код:
new variavel1[MAX_PLAYERS];
new variavel2[MAX_PLAYERS];
vocк poderia usar:
pawn Код:
enum GrupoVariaveis {
    var1,
    var2
};
new VariavelGlobal[MAX_PLAYERS][GrupoVariaveis];
Como chamar a var1 e a var2 que estгo dentro do grupo?
Simples!
pawn Код:
VariavelGlobal[playerid][var1]
VariavelGlobal[playerid][var2]
Simples assim..

Enfim, os enumeradores sгo muito simples de se usar entгo nгo precisa de muita explicaзгo..
Mas й sempre bom lembrar que os enumeradores tem que ser chamados atraves de enum nomedoenumerador

• Macros:
Macros sгo uma forma mais otimizada e mais rapidas para certas funзхes..
Alem de ajudar a economizar linhas! :P

Uma mensagem usando format como esta:
pawn Код:
new str[128],snd[MAX_PLAYER_NAME];
GetPlayerName(playerid, snd, sizeof snd);
format(str, sizeof str, "Meu nome й %s.",snd);
SendClientMessage(playerid, 0xFFFFFF00, str);
poderia ser:
pawn Код:
//Topo do Gamemode:
#define MsgFormat(%0,%1,%2,%3) format(str, sizeof(str),%2,%3) && SendClientMessage(%0, %1, str)
new str[128];

//no script:
new snd[MAX_PLAYER_NAME];
GetPlayerName(playerid, snd, sizeof snd);
MsgFormat(playerid, 0xFFFFFF00, "Meu nome й %s", snd);
Nгo compreendeu o macro?

Explicaзгo:
pawn Код:
#define SendFormattedMsg(%0,%1,%2,%3) format(strt, sizeof(strt),%2,%3) && SendClientMessage(%0, %1, strt)
%0 equivale a playerid
%1 equivale a cor
%2 equivale ao texto
%3 equivale a string.

Sendo que, os itens %0,%1,%2 ... sгo os representantes dos parвmetros da funзгo dentro do macro.

Logo entгo da para criar varias funзхes utilizando macros.
Por exemplo, criar uma funзгo para resetar o dinheiro do jogador e dar uma certa quantia?
pawn Код:
#define GivePlayerCash(%0,%1) ResetPlayerMoney(%0), GivePlayerMoney(%0,%1) // %0 playerid | %1 quantia.
Exemplo de uso:
pawn Код:
public OnPlayerSpawn(playerid) {
    GivePlayerCash(playerid, 350);
    return true;
}
Pronto!

Bom, por hoje й isso!

Ainda nгo completei o tutorial mais aos poucos esta se desenvolvendo

Entгo deixe suas dicas


Re: O Basico do para comeзar um projeto! - smiiir - 14.11.2013

pawn Код:
new
    Float:PosicaoPlayerid[3],
    String[128]; // 128 й a quantidade de caracteres que pode ser usado no maximo na sua mensagem..
GetPlayerPos(playerid, PosicaoPlayerid[0], PosicaoPlayerid[1], PosicaoPlayerid[2]);
format(string, sizeof string, "Posiзгo atual: %f.%f.%f", PosicaoPlayerid[0], PosicaoPlayerid[1], PosicaoPlayerid[2]);
SendClientMessage(playerid, 0xFFFFFF, string);
Analisa isso ae, e tambйm faltou algumas coisas do Нndice como 'Macro'

Parabйns


Re: O Basico do para comeзar um projeto! - tonisantolia - 14.11.2013

Quote:
Originally Posted by iSmirnoff
Посмотреть сообщение
pawn Код:
new
    Float:PosicaoPlayerid[3],
    String[128]; // 128 й a quantidade de caracteres que pode ser usado no maximo na sua mensagem..
GetPlayerPos(playerid, PosicaoPlayerid[0], PosicaoPlayerid[1], PosicaoPlayerid[2]);
format(string, sizeof string, "Posiзгo atual: %f.%f.%f", PosicaoPlayerid[0], PosicaoPlayerid[1], PosicaoPlayerid[2]);
SendClientMessage(playerid, 0xFFFFFF, string);
Analisa isso ae, e tambйm faltou algumas coisas do Нndice como 'Macro'

Parabйns
Chegar em casa dou uma editada kk Obrigado pelo comentбrio


Re: O Basico do para comeзar um projeto! - PT - 14.11.2013

nesta parte
pawn Код:
CMD:teste(playerid) {
    new teste;
    if(teste==1) return SendClientMessage(playerid, 0xFFFFFF00, "Estб variбvel sу pode ser usada dentro deste comando.");
    return true;
}
tambem podera ser

pawn Код:
CMD:teste(playerid) {
    new teste;
    if(teste) return SendClientMessage(playerid, 0xFFFFFF00, "Estб variбvel sу pode ser usada dentro deste comando.");
    return true;
}
E o uso podera ser if(teste) ou if(!teste)


Re: O Basico do para comeзar um projeto! - Falcon. - 14.11.2013

Quote:
Originally Posted by tonisantolia
Посмотреть сообщение
Bom, as variбveis sгo classificadas da seguinte forma:

Comum - Booleana - Float - String - Estбtica
Cara, isso estб um pouquinho errado...


Re: O Basico do para comeзar um projeto! - RebeloX - 14.11.2013

Gostei porйm acho que vocк aprofundou-se nos aspetos da linguagem, o que deveria ter explicado й mais sobre o projeto em si.


Respuesta: Re: O Basico do para comeзar um projeto! - DanDRT - 14.11.2013

Quote:
Originally Posted by Falcon.
Посмотреть сообщение
Cara, isso estб um pouquinho errado...
Melhor seria ele ensinar assim:


"Tipos de variбvel:
Integer - Inteiro;
Float - Flutuante;
Bool - Booleana;
String - Cordas;

Tambйm existem 2 formas de criaзгo de variбveis:
new - Comum;
static - Algo que ficarб fixo na memoria ou seja so seria criado uma vez(Necessita-se de cuidado ao usar este tipo)."


Re: Respuesta: Re: O Basico do para comeзar um projeto! - GWMPT - 14.11.2013

Quote:
Originally Posted by DanDRT
Посмотреть сообщение
Melhor seria ele ensinar assim:


"Tipos de variбvel:
Integer - Inteiro;
Float - Flutuante;
Bool - Booleana;
String - Cordas;

Tambйm existem 2 formas de criaзгo de variбveis:
new - Comum;
static - Algo que ficarб fixo na memoria ou seja so seria criado uma vez(Necessita-se de cuidado ao usar este tipo)."
Tipo de variбvel tambйm deve incluir double. [Just sayin']
O tutorial poderia ter sido feito noutra forma, que iria fazer com que o "newbie" aprende-se melhor.


Re: O Basico do para comeзar um projeto! - zPain - 14.11.2013

Segue um esclarecimento para o caso de vocк levar o tutorial a esse ponto.


static local й declarada apenas uma vez, portanto se a pessoa fizer:

pawn Код:
func() {
    static x = 3;
    printf("%d", x);

    x = 4;
    return 1;
}
Inicialmente retornarб 3, mas, uma vez executada novamente, retornarб 4.

Jб a global funciona da mesma forma que new, exceto pelo fato de sу poder ser acessada no script em que foi declarada.


Re: O Basico do para comeзar um projeto! - zPain - 15.11.2013

Quote:
Originally Posted by PT
Посмотреть сообщение
nesta parte
pawn Код:
CMD:teste(playerid) {
    new teste;
    if(teste==1) return SendClientMessage(playerid, 0xFFFFFF00, "Estб variбvel sу pode ser usada dentro deste comando.");
    return true;
}
tambem podera ser

pawn Код:
CMD:teste(playerid) {
    new teste;
    if(teste) return SendClientMessage(playerid, 0xFFFFFF00, "Estб variбvel sу pode ser usada dentro deste comando.");
    return true;
}
E o uso podera ser if(teste) ou if(!teste)
Nem sempre.

pawn Код:
if(!teste) // teste = false = 0
if(teste) // teste = true = qualquer valor diferente de 0
Caso sу valha o valor 1, ele deve utilizar da maneira anterior.