[Tutorial] Iniciando pawn
#1

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;
}
Vбrios aspectos serгo abordados por vez, vamos comeзar pela primeira linha:
Include

pawn Код:
#include <a_samp>
Isso basicamente lк o arquivo include da pasta pawno/includes/a_samp.inc incluindo-o para dentro do seu cуdigo, entгo tudo que tem dentro do arquivo, vocк pode usar. Outros includes que vocк pode usar sгo:
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>
Isso incluirб todos os outros arquivos da pasta, entгo por adcionar essa ъnica linha, vocк tem acesso а todas as funзхes do SA:MP (Vocк lerб mais sobre funзхes depois).

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;
Passa o valor (1) de volta ao lugar que chamou principais para dizer o que aconteceu (o valor exato que passou aqui nгo importa, mas em outros lugares faz toda a diferenзa). Vocк tem agora o seu script (muito bбsico) em primeiro lugar. Se vocк selecionar> arquivo-novo no PAWNO ele lhe darб um ponto inicial muito maior que todos os retornos (ver abaixo), incluindo principal (que nгo й tecnicamente um retorno, mas age como um).

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; }
Os braзos({}), nгo parкnteses juntam um grupo de funзхes que devem ser executadas em conjunto(como um parбgrafo em linguagem commum).
pawn Код:
main() print("Hello World!"); return 1;
Com a funзгo acima vocк agora irб receber um erro porquк a declaraзгo "return 1;" nгo estб em grupo da funзгo main. Os braзos contйm uma sйrie de instruзхes em uma ъnica instruзгo (denominado declaraзгo composta) e funзхes tкm uma simples declaraзгo com elas. Sem os braзos, return e print sгo declaraзхes completamente distintas entгo como a print й uma funзгo e return nгo, o cуdigo nгo pode se realizar.

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!");
Como descrito em Iniciando!, isso chama uma funзгo chamada "print" (definida em a_samp.inc, por isso vocк precisa inclui-lo) e diz pra mostrar no console do servidor as palavras "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...
As funзхes podem ter parвmetros como muitos como vocк gosta, de 0 (pode haver um limite mбximo, mas й, pelo menos, 12:
pawn Код:
printf("Olб Mundo!", 1, 2, 3, 4, 5, 6);
Nгo se preocupe com o que essa funзгo faz, por agora, sу que ela tem 7 parвmetros, separados por uma vнrgula.

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;
}
Isso faz exatamente o mesmo que o cуdigo original, mas й arranjado de forma diferente. Quando main () й chamado, ou seja, quando o modo й iniciado (ele й chamado automaticamente) ele chama a nova funзгo personalizada chamada MinhaFuncao(). Esta funзгo imprime a mensagem no console do servidor, em seguida, retorna o nъmero 1 do main (). main () recebe o valor retornado (1) e depois retorna para o prуprio servidor (ou seja, o lugar que chamou principal em primeiro lugar). Como "return MinhaFuncao();" й uma declaraзгo ъnica que vocк poderia fazer:
pawn Код:
#include <a_samp>
 
main() return MinhaFuncao();
 
MinhaFuncao()
{
    print("Olб Mundo!");
    return 1;
}
Mas a maioria das pessoas nгo fazem isso para maior clareza no cуdigo. Vocк tambйm pode executar a funзгo assim:
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;
}
O cуdigo acima faz a mesma coisa que antes MinhaFuncao(), irб mostrar a(a) palavra(s) entre aspas no console. A chamada passa a string "Olб Mundo!" para a funзгo MinhaFuncao, que tem uma variбvel chamada string. Os [] colchetes denotam string como arrayarrays serб explicado depois). A funзгo print й chamada recebendo o conteъdo da variбvel string, nуs sabemos que й uma variбvel porquк nгo tem as aspas antes e depois do texto.

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;
Isso diz ao sistema que deverб ser criada uma variбvel chamada minhaVariavel, o valor inicial dessa variбvel serб 0.

Ajustando:
pawn Код:
new
    minhaVariavel = 7;
Isso declara a variбvel e ajusta seu valor para 7, entгo imprimindo a variбvel o valor serб 7. Para mostrar o valor de uma variбvel que nгo contenha uma string nуs precisamos voltar ao printf() funзгo mencionada antes, e fбcil de usar.
pawn Код:
new
    minhaVariavel = 7;
printf("%d", minhaVariavel);
De novo, por agora tudo que o cуdigo irб fazer й imprimir o valor da variбvel (i.e. 7 ao ponto) para o servidor.
pawn Код:
new
    minhaVariavel = 7;
printf("%d", minhaVariavel);
minhaVariavel = 8;
printf("%d", minhaVariavel);
Esse cуdigo imrpimirб 7 depois ajustarб o valor da variбvel para 8 e imprimieб 8, logicamente. Abaixo muitas outras coisas que vocк pode fazer com variбveis, e que sгo mais listados em outros lugares:
pawn Код:
minhaVariavel = minhaVariavel + 4;
Ajusta o valor de minhaVariavel para o valor antigo e adciona mais 4 а ela. Isso tambйm pode ser escrito assim:
pawn Код:
minhaVariavel += 4;
Irб fazer a mesma coisa.
pawn Код:
minhaVariavel -= 4;
Isso irб diminuir o valor dela por 4
pawn Код:
minhaVariavel *= 4;
Isso irб atribuir а variavel o valor dela multiplicado por 4
pawn Код:
minhaVariavel /= 4;
Isso irб atribuir а variavel o valor dela dividido por 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];
Esse cуdigo irб declarar uma matriz com 5 slots grandes, entгo vocк pode armazenar 5 peзas de data normal ao mesmo tempo. Uma coisa que vocк nгo pode fazer й o seguinte:
pawn Код:
new
    minhaVariavel = 5,
    Matriz[minhaVariavel];
Esse cуdigo parece que ele irб criar uma matriz do tamanho de qualquer nъmero que estб armazenado em minhaVariavel (aqui 5, mas poderia ser qualquer coisa), mas vocк nгo pode fazer isso. Em Pawn a memуria para as variбveis й atribuнdo quando vocк compilar o cуdigo, isso significa que as matrizes sгo sempre um tamanho, nгo й possнvel definir o tamanho para o que quiser quando quiser.

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;
Isso irб declarar uma matriz com 5 espaзos e dar ao terceiro espaзo o valor 7, as outras variбveis terгo o valor 0 Esses serгo os valores da array:
pawn Код:
0, 0, 7, 0, 0
Por quк isto nгo й?
pawn Код:
0, 7, 0, 0, 0 ?
Vocк estб preocupado? Isso acontece porquк a contagem comeзa do 0, e nгo 1, como estamos habituados. Considere os seguintes dados:
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
Hб cinco slots, mas como vocк pode ver, e isso й muito importante, nгo hб espaзo CINCO, fazendo o seguinte pode falhar o servidor:
pawn Код:
new
    Matriz[5];
Matriz[5] = 7;
Como mencionado sobre o нndice da matriz(o indice й o espaзo que vocк irб escrever) pode ser qualquer coisa, um nъmero, uma variбvel que retorna um valor.
pawn Код:
new
    Matriz[5],
    MeuIndice = 2;
Matriz[MeuIndice] = 7;
Tendo uma matriz e um нndice vocк pode usar esse bloco, exatamente como se fosse qualquer outra variбvel:
pawn Код:
Matriz[2] = Matriz[2] + 1;
Matriz[2] += 1;
Matriz[2]++;
Exemplo
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)
    }
}
Consulte a seзгo sobre estruturas de controle para obter mais informaзхes sobre o que estб acontecendo por lб, nota-se que isso poderia ser feito como um interruptor, mas isso й menos clara para o exemplo e efetivamente seria o mesmo cуdigo de qualquer maneira.
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;
}
O cуdigo acima cria uma variбvel global (veja esta seзгo no escopo) com um espaзo pra cada jogador, entгo a funзгo irб atribuir o que estб no "valor" variбvel para o espaзo do jogador. O primeiro exemplo foi grande, com apenas quatro jogadores, com 4 linhas por jogador, que й de 2000 linhas por 500 jogadores (se pode ser menor, mas ainda й muito), a segunda versгo й uma ъnica linha, nгo importa quantos jogadores vocк tem.

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!";
Esse cуdigo declara uma nova seqькncia de caracteres com espaзo suficiente para uma seqькncia de 15 caracteres e define-se inicialmente para a seqькncia de cinco caracteres "Hello World!", as aspas em torno do texto indicam que ele й uma string. Internamente, a matriz se parece com:
pawn Код:
104 101 108 108 111 0 x x x x x x x x x x
O "x" nгo significa nada, neste exemplo, todos eles vгo ser 0, mas como eles estгo apуs o caractere nulo, nгo importa o que sгo, eles nгo afetarгo a seqькncia.
Strings podem ser manipulados como vetores normais, por exemplo:
pawn Код:
new
    minhaString[16] = "Hello World!";
minhaString[1] = 97;
Vai mudar o caractere no espaзo 1 para o caratcete representado pelo nъmero 97 (uma minъscula "a "), resultando na seqькncia de leitura "alф". Isso pode ser escrito muito mais legнvelmente e fбcil de editar como:
pawn Код:
new
    minhaString[16] = "Hello World!";
minhaString[1] = 'a';
As aspas simples em torno do "a " significa que ele й um caractere, nгo uma seqькncia, os caracteres nгo precisam ser NULL finalizado como eles estгo sempre apenas uma cйlula longa, eles tambйm podem ser usados de forma intercambiбvel com nъmeros, se vocк souber o que eles representam.
pawn Код:
new
    minhaString[16] = "Hello World!";
minhaString[1] = '\0';
'\0' sгo dois caracteres, no entanto, o \ й um caractere especial, que modifica o prуximo caractere, \0 significa NULL, o cуdigo й o mesmo que fazer:
pawn Код:
new
    minhaString[16] = "Hello World!";
minhaString[1] = 0;
Mas isso NГO й o mesmo que:
pawn Код:
new
    myString[16] = "Hello World!";
myString[1] = '0';
A primeira e a segunda versгo resultarб na seqькncia de ser simplesmente:
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] = "\"";
Esse cуdigo irб criar uma string que consiste de apenas criar uma aspa, normalmente aspas duplas sinalizam o fim de uma seqькncia de escrita, mas a barra invertida faz com que as aspas duplas sejam escritas imediatamente apуs uma parte da string, e as aspas depois terminam a seqькncia de caracteres em vez. Outros caracteres especiais sгo:
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)
Existem outros, mas esses sгo os principais.

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;
O "Float" parte й a tag, isso define esta variбvel como float (nъmero de nгo-inteiros) e determina onde ele pode ser usada.
pawn Код:
native AjustarGravidade(Float:gravidade);
Isto significa que a funзгo AjustarGravidade leva um ъnico parвmetro que deve ser um float, por exemplo:
pawn Код:
AjustarGravidade(6.0);
new
   Float:fGrav = 5.0;
AjustarGravidade(fGrav);
Isso vai definir a gravidade de 6 (6,0 como um float) a 5 (5.0 como um float). Usando a etiqueta errada no lugar errado, muitas vezes, gera um erro(tag mismatch):
pawn Код:
AjustarGravidade(MinhaTag:7);
Isso vai tentar definir a gravidade a 7 com a tag "myTag", que nгo й claramente um "Float" isso й errado. Observe tambйm que as tags sгo case sensitive(diferenciam maiъsculas de minъsculas).

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
As variбveis locais sгo de descanso a cada hora, por exemplo:
pawn Код:
for (new i = 0; i < 3; i++)
{
    new
        j = 1;
    printf("%d", j);
    j++;
}
Irб imprimir:
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
Esse cуdigo vai se comportar exatamente como o novo exemplo:
pawn Код:
for (new i = 0; i < 3; i++)
{
    static
        j = 1;
    printf("%d", j);
    j++;
}
Irб imprimir
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);
}
Eles nunca sгo repostas ou perdidas.

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);
}
#include "File2"
File2:
pawn Код:
MinhaFunc2()
{
    / / Isto estб errado pois gsMinhaVar nгo existe aqui
    printf("%d", gsMinhaVar);
}
static tambйm pode ser aplicado а funзхes da mesma forma.

Creditos:
Traduзao: |_MeGaTroN_|
Tutorial: wiki.sa-mp
Reply
#2

NA MINHA OPINIAO DEVE LEVAR STICK.


Algum dia tinha que ter um tutorial desses.
Уtimo.
Reply
#3

Gostei, sу que tem algumas partes copiadas de outros tutoriais.

#Edit

Do miqueias ja chequei e nгo tem nada.

Sу que ja vi estas palavras em outro tutorial.
Reply
#4

Quote:
Originally Posted by dMagnus
Посмотреть сообщение
Gostei, sу que tem algumas partes copiadas de outros tutoriais (como o do Miqueias).
Acho que nгo hein, tambйm acho que merece sticky.
Reply
#5

Quote:
Originally Posted by dMagnus
Посмотреть сообщение
Gostei, sу que tem algumas partes copiadas de outros tutoriais (como o do Miqueias).
Pode atй ter, mas vamos dizer, isso vai reduzir bastante o numero de topicos noobs.
Reply
#6

Quote:
Originally Posted by Stewie`
Посмотреть сообщение
NA MINHA OPINIAO DEVE LEVAR STICK.


Algum dia tinha que ter um tutorial desses.
Уtimo.
Vlw

Quote:
Originally Posted by dMagnus
Посмотреть сообщение
Gostei, sу que tem algumas partes copiadas de outros tutoriais.

#Edit

Do miqueias ja chequei e nгo tem nada.

Sу que ja vi estas palavras em outro tutorial.
Use search -.- e ve se tem essas palavras em algum tuto...

Quote:
Originally Posted by AppleX
Посмотреть сообщение
Acho que nгo hein, tambйm acho que merece sticky.
thanks

Quote:
Originally Posted by Stewie`
Посмотреть сообщение
mas vamos dizer, isso vai reduzir bastante o numero de topicos noobs.
Pode crer lek..
Reply
#7

Eu tenho quase certeza absoluta que ja vi isso em algum lugar.


@edit
Oh nenйm.

Poe os creditos BEM GRANDГO se vc n quiser perder esse topico.
Reply
#8

ele apenas traduziu oq ja tinha na Wiki Samp
Reply
#9

Eu sei, achei muito boa a traduзгo por sinal, mas ele nгo CRIOU entao tem que por os creditos, se alguem reportar o topico ele vai perde-lo.
Reply
#10

Quote:
Originally Posted by Pharrel
Посмотреть сообщение
Eu sei, achei muito boa a traduзгo por sinal, mas ele nгo CRIOU entao tem que por os creditos, se alguem reportar o topico ele vai perde-lo.
Sabia que tinha visto essas palavras em algum lugar.

Sua traduзгo estб уtima cara, sу que coloca os crйditos do verdadeiro criador...

Deveria ter citado pelo menos a fonte
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)