25.11.2011, 13:57
(
Последний раз редактировалось |_MeGaTroN_|; 25.11.2011 в 16:36.
)
Introduзao:
Ola a todos a razao que estou criando esse tutorial e porque to cansado de ouvir pessoas me perguntando como cria um gm? como faz aquilo? para que serve aquilo? enfim vamos ao que entereзa.Iniciando:
o seguinte exemplo й o cуdigo mais bбsico que vocк pode escrever:pawn Код:
#include <a_samp>
pawn Код:
main()
{
print("Hello World!");
return 1;
}
Include
pawn Код:
#include <a_samp>
pawn Код:
#include <core>
#include <float>
#include <string>
#include <file>
#include <time>
#include <datagram>
#include <a_players>
#include <a_vehicles>
#include <a_objects>
#include <a_sampdb>
Chamadas:
O prуximo cуdigo mostra os dois lados da chamada de um arquivo. main() й uma funзгo em que vocк pode escrever o cуdigo para ser mostrado em outro lugar. print(string[]) й uma funзгo com o cуdigo que serб mostrado em outro lugar. Tudo que isso vai fazer й carregar, imprimir uma seqькncia de caracteres (ou seja, imprimir "Olб mundo!"(sem as aspas) (uma tradiзгo em todas as linguagens de script)) para o console do servidor. O retorno:pawn Код:
return 1;
Declaraзoes:
As linhas do return e print tem um ';' (ponto e vнrgula) no final, isso simplesmente denota o fim de uma declaraзгo(uma declaraзгo й um grupo de uma ou mais funзхes e operadores que juntos fazem algo, semelhante a uma frase em linguagem comum). Muitas pessoas colocam declaraзхes separados pra cada funзгo isso nгo й necessбrio, a seguinte declaraзгo й vбlida:pawn Код:
main() { print("Hello World!"); return 1; }
pawn Код:
main() print("Hello World!"); return 1;
Funзoes:
Uma funзгo й basicamente um pedaзo de cуdigo que faz algo e pode ser dito para fazer esta coisa de outro lugar. Ele tambйm pode passar dados sobre o que fez e voltar ao lugar que lhe disse para continuar(o lugar que a funзгo foi "chamada").Chamando:
pawn Код:
print("Olб Mundo!");
Uma funзгo consiste no nome dela(e.g. print), que diz ao sistema qual pedaзo de cуdigo que vocк deseja chamar, e uma lista de parвmetros, entre ()s apуs o nome da funзгo, que passam de dados adicionais para a funзгo de ajudб-la a ser executada. Se vocк nгo tem os parвmetros, vocк precisarб de milhхes de funзхes:
pawn Код:
printa();
printaa();
printab();
printac();
etc...
pawn Код:
printf("Olб Mundo!", 1, 2, 3, 4, 5, 6);
Definindo:
Bem como ser chamar funзхes existentes vocк pode tambйm criar e chamar as suas:pawn Код:
#include <a_samp>
main()
{
return MinhaFuncao();
}
MinhaFuncao()
{
print("Olб Mundo!");
return 1;
}
pawn Код:
#include <a_samp>
main() return MinhaFuncao();
MinhaFuncao()
{
print("Olб Mundo!");
return 1;
}
pawn Код:
#include <a_samp>
main()
{
MinhaFuncao();
return 1;
}
MinhaFuncao()
{
print("Olб Mundo!");
return 1;
}
Parametros:
Parвmetros sгo um tipo de variбveis que vocк nгo precisa declarar jб que eles vкm de um lugar que chamou a funзгo:pawn Код:
#include <a_samp>
main()
{
return MinhaFuncao("Olб Mundo!");
}
MinhaFuncao(string[])
{
print(string);
return 1;
}
Variaveis:
Uma variбvel й basicamente um pouco de memуria. Й onde os dados sгo armazenados e podem ser alterados, e lidos. Variбveis sгo uma ou mais cйlulas. Uma cйlula tem 32 bits (4 bytes) grandes e por padrгo sгo assinadas com os valores: -2147483648 atй 2147483647 (embora -2147483648 й pobremente definido em PAWN e dб resultados estranhos quando exibido. Uma variбvel feita pra armazenar mais que uma cйlula й chamada de array, strings sгoum tipo especialde arrays, onde cada cйlula armazena 1 caractere da string (ou 4 caracteres em packed strings mas elas nгoserгo discutidas aqui.)Declaraзao:
Para criar uma variбvel vocк precisa declara-la:pawn Код:
new
minhaVariavel;
Ajustando:
pawn Код:
new
minhaVariavel = 7;
pawn Код:
new
minhaVariavel = 7;
printf("%d", minhaVariavel);
pawn Код:
new
minhaVariavel = 7;
printf("%d", minhaVariavel);
minhaVariavel = 8;
printf("%d", minhaVariavel);
pawn Код:
minhaVariavel = minhaVariavel + 4;
pawn Код:
minhaVariavel += 4;
pawn Код:
minhaVariavel -= 4;
pawn Код:
minhaVariavel *= 4;
pawn Код:
minhaVariavel /= 4;
Matrizes:
Declaraзгo
Uma matriz й uma variбvel em que vocк pode armazenar mъltiplas peзas do dado e acessбlo- dinamicamente. Uma matriz й declarada com um tamanho definido em tempo de compilaзгo que vocк precisa saber quantas peзas de dados que vocк precisa para armazenar de antecedкncia, um bom exemplo disso й a matriz MAX_PLAYERS muito comum, isso terб um slot para cada jogador, possivelmente ligado , Assim vocк sabe os dados para um jogador nгo irб interferir com os dados para um outro jogador (mais sobre constantes mais tarde).
pawn Код:
new
Matriz[5];
pawn Код:
new
minhaVariavel = 5,
Matriz[minhaVariavel];
Accessando
Para ajustar um valor em uma matriz vocк precisa que parte da array vocк quer que seja armazenado o quк. Isso PODE ser feito com outra variбvel
pawn Код:
new
Matriz[5];
minhaVariavel[2] = 7;
pawn Код:
0, 0, 7, 0, 0
pawn Код:
0, 7, 0, 0, 0 ?
2, 4, 6, 8
Se vocк percorrer a lista, em seguida, apуs o nъmero 2, vocк jб teve um nъmero (o 2), isto significa que se vocк estб contando os nъmeros com o tempo vocк chegar ao nъmero 4 jб estб em um, vocк nгo estб em um quando chegar a 2, o que vocк estб em zero. Assim, o 2 estб na posiзгo zero e os 4 estб na posiзгo um, e assim segue-se que o 6 estб na posiзгo dois, que й onde a 7 no primeiro exemplo acima й. Segue abaixo a ordem do primeiro exemplo:
pawn Код:
0 1 2 3 4
0 0 7 0 0
pawn Код:
new
Matriz[5];
Matriz[5] = 7;
pawn Код:
new
Matriz[5],
MeuIndice = 2;
Matriz[MeuIndice] = 7;
pawn Код:
Matriz[2] = Matriz[2] + 1;
Matriz[2] += 1;
Matriz[2]++;
Como mencionado acima sobre um tipo comum de matriz й a matriz MAX_PLAYERS. MAX_PLAYERS nгo й uma variбvel, й uma definiзгo em constante que serб explicada mais tarde, para aceitar um nъmero constante que й igual ao nъmero mбximo de jogadores que um servidor pode conter (isso por padrгo й 500, mesmo se vocк mudar o nъmero do seu arquivo server.cfg). O cуdigo a seguir utiliza variбveis normais para armazenar dados para 4 jogadores e fazer algo com os jogadores em uma funзгo (por causa da simplicidade, assumir MAX_PLAYERS й de 4 por enquanto):
pawn Код:
new
jogador0,
jogador1,
jogador2,
jogador3;
AjustarValorDoJogador(jogador, valor)
{
switch(jogador)
{
case 0: jogador0 = valor; // isso й a mesma coisa que usar if(jogador == 0)
case 1: jogador1 = valor; // isso й a mesma coisa que usar if(jogador == 1)
case 2: jogador2 = valor; // isso й a mesma coisa que usar if(jogador == 2)
case 3: jogador3 = valor; // isso й a mesma coisa que usar if(jogador == 3)
}
}
Agora compare isso ao uso de uma matriz com um espaзo para cada jogador, tendo em conta que um нndice de array pode ser qualquer valor:
pawn Код:
new
jogadores[MAX_PLAYERS];
AjustarValorDoJogador(jogador, valor)
{
jogadores[jogador] = valor;
}
Strings:
Uso bбsico
Uma string й um tipo especial de matriz, que й utilizado para armazenar vбrios caracteres para criar uma palavra ou frase ou texto de outro ser humano legнvel. Um caractere й um byte grande (embora haja estendido define onde um caractere й bytes mъltiplos, mas estes nгo estгo bem definidas no SA: MP) e por padrгo um caractere pega uma cйlula (uma variбvel normal ou um espaзo de matriz). Os caracteres sгo codificados em um sistema chamado ASCII, o caractere "A "й representado pelo nъmero 65, dizendo que o sistema exibe uma sйrie, darб 65, dizendo que o sistema exibe um caractere vai dar uma letra a. Obviamente й um ъnico caractere, ocupando uma ъnica cйlula de mъltiplos caracteres (i.e. text) ocuparб vбrias cйlulas, coleзхes de cйlulas, como acabei de explicar, sгo chamadas de matrizes.
strings em PAWN (e outras lнnguas) й o que й chamado de "encerrado NULL", isso significa que quando 0 й atingido, a cadeia de caracteres termina. Este nгo й o mesmo que o caractere "0", representado pelo nъmero 48, este й o caractere nulo, representado pelo nъmero 0. Isso significa que vocк pode ter uma matriz de seqькncia de 20 grandes cйlulas, mas apenas ter uma seqькncia de trкs caracteres se o quarto caractere й o caractere NULL, sinalizando o fim da cadeia. Vocк nгo pode no entanto ter uma seqькncia de 20 caracteres, como o caractere NULL deve ser na seqькncia, assim, em uma matriz de cйlulas 20 vocк pode ter uma seqькncia de caracteres 19 e um caractere NULL de terminaзгo.
pawn Код:
new
minhaString[15] = "Hello World!";
pawn Код:
104 101 108 108 111 0 x x x x x x x x x x
Strings podem ser manipulados como vetores normais, por exemplo:
pawn Код:
new
minhaString[16] = "Hello World!";
minhaString[1] = 97;
pawn Код:
new
minhaString[16] = "Hello World!";
minhaString[1] = 'a';
pawn Код:
new
minhaString[16] = "Hello World!";
minhaString[1] = '\0';
pawn Код:
new
minhaString[16] = "Hello World!";
minhaString[1] = 0;
pawn Код:
new
myString[16] = "Hello World!";
myString[1] = '0';
h
A terceira versгo resultarб na seqькncia de ser simplesmente:
h0llo
Caractede de escape
Como mencionado brevemente uma barra invertida й um caractere especial, fazendo:
'\'
ou:
"\"
Vai dar um erro no compilador porque o \ modifica o prуximo caractere assim aqueles constantes nгo serгo encerrados corretamente, isso pode ser usado para criar caractere que normalmente nгo pode ser criado, por exemplo:
pawn Код:
new
minhaString[4] = "\"";
pawn Код:
\0 Caractere NULL finaliza uma string.
\n saltar linha use \n para uma nova linha no Linux (tambйm funciona no Windows)
\r retorno de procedimento Use \r\n para uma nova linha no Windows
\\ Backslash Used to put an actual backslash in a string
\' Aspa simples Usado para usar uma ъnica barra como um caractere de aspas simples (uso: '\'')
\" Aspas duplas Usado pra colocar aspas duplas na string
\xNNN; Nъmero hexadecimal Usado para definir o caractere ao caractere representada por um nъmero hexadecimal especificado em lugar de NNN
\NNN; Nъmero Usado para definir o caractere ao caractere representado pelo nъmero especificado em lugar de NNN (ver \ 0)
Tags:
Uma tag й uma peзa adicional de informaзгo sobre uma variбvel que define onde ela pode ser usada. Por exemplo:pawn Код:
new
Float:a = 6.0;
pawn Код:
native AjustarGravidade(Float:gravidade);
pawn Код:
AjustarGravidade(6.0);
new
Float:fGrav = 5.0;
AjustarGravidade(fGrav);
pawn Код:
AjustarGravidade(MinhaTag:7);
Escopo:
Escopo й o local onde uma variбvel pode ser usada. Hб quatro вmbitos principais: locais, estбticas local, global e global estбtica. Todas as variбveis sу podem ser usadas depois que eles sгo declarados por isso esta й a direita:pawn Код:
new
var = 4;
printf("%d", var);
Isso й errado:
printf("%d", var);
new
var = 4;
Local:
Uma variбvel local й declarada com um "new" dentro de uma funзгo ou parte de uma funзгo:pawn Код:
MyFunc()
{
new
var1 = 4;
printf("%d", var1);
{
// como este й um nнvel mais baixo, var1 ainda existe
new
var2 = 8;
printf("%d %d", var1, var2);
}
// como este й um nнvel mais alto, var2 nгo existe mais
}
// var1 nгo existe mais
pawn Код:
for (new i = 0; i < 3; i++)
{
new
j = 1;
printf("%d", j);
j++;
}
1
1
1
j й criado, impresso, incrementado destruнdo em seguida, e em seguida.
Local estбtica:
Um local estбtico pode ser usado do mesmo modo que um local, mas nгo se esqueзa que й o valor antigo, por exemplo:pawn Код:
MyFunc()
{
static
var1 = 4;
printf("%d", var1);
{
// como este й um nнvel mais baixo, var1 ainda existe
static
var2 = 8;
printf("%d %d", var1, var2);
}
// como este й um nнvel mais alto, var2 nгo existe mais
}
// var1 nгo existe mais
pawn Код:
for (new i = 0; i < 3; i++)
{
static
j = 1;
printf("%d", j);
j++;
}
1
2
3
Como j й estбtico lembra o seu valor antigo.
global
As variбveis globais sгo declaradas fora de uma funзгo e podem ser usadas em todas as funзхes:
pawn Код:
new
gMinhaVar = 4;
MyFunc()
{
printf("%d", gMinhaVar);
}
global estбtica
Variбveis globais estбticas sгo como globais normais, mas sу podem ser usadas no arquivo em que sгo declaradas:
File1:
pawn Код:
static
gsMinhaVar = 4;
MyFunc()
{
printf("%d", gsMinhaVar);
}
File2:
pawn Код:
MinhaFunc2()
{
/ / Isto estб errado pois gsMinhaVar nгo existe aqui
printf("%d", gsMinhaVar);
}
Creditos:
Traduзao: |_MeGaTroN_|Tutorial: wiki.sa-mp