[Tutorial] PAWN
#1

PAWN


Нndice
  • Introduзгo
    • Use o search
  • FAQ
    • Perguntas Frequentes
    • Primeiros passos
    • Examinando o cуdigo
      • Variaveis
        • Strings
        • Floats
        • Ints
        • Bools
    • Funзхes
      • Chamando
      • Definindo
      • Parвmetros
    • Exemplos de Funзхes
    • Source Code
    • Tipos de script
    • Crйditos
Introduзгo

Bem, eu estive a pensar em criar um grande tutorial sobre pawn, jб tenho algum conhecimento e penso que seja capaz de fazer um tutorial destes, tenho o objetivo de facilitar os membros a aprenderem pawn e tentar reduzir as duvidas que muitos tem, lembrando que isto й um tutorial muito complexo.
  • Use o search

    Muita gente vem ao forum sa-mp e cria uma conta, espera que ela seja ativada e comeзa a criar pedidos de ajudas sem verificar as regras e/ou sem procurar no forum usando o search, muitas vezes o que nуs escrevemos й absurdo, ou seja, й algo que a probabilidade que exista й nula, por exemplo:

    "O meu sistema de gasolina nгo funciona" (ERRADO)
    "sistema de gasolina" (CERTO)

    Por vezes podemos nгo achar o que queremos em portuguкs, entгo se colocarmos em inglкs podemos ter algum resultado, veja "fuel system" , nem sempre o forum facilita a nossa ajuda, entгo tambйm й aconselhбvel usar o ******.

    Na minha opiniгo й mais interessante procurar do que for criar um tуpico, porque ao procurar vocк ganha conhecimento e experiкncia.
FAQ
  • Perguntas Frequentes

    Pergunta: O que й o PAWN?
    • Resposta: PAWN й uma linguagem de programaзгo nгo-oficial, criada em 1998 pela ITB CompuPhase, pawn й derivado da linguagem de programaзгo chamada Small-C e que tem uma sintaxe parecida a C.
    Pergunta: O que й o PAWNO?
    • Resposta: Pawno й o IDE(Integrated development environment) oficial da linguagem de programaзгo pawn, ou seja, pawno й o editor da linguagem de programaзгo.
    Pergunta: O que й o PAWNCC?
    • Resposta: O pawncc й o compilador, ele serve para compilar os nossos cуdigos, apуs serem compilados serб criado um arquivo .amx .
    Pergunta: PAWN й uma linguagem de programaзгo oficial?
    • Resposta: Nгo, pawn й uma linguagem de programaзгo nгo-oficial, ele й usado em jogos, como o SA-MP, Counter-Strike 1.6 AmxMod, Half-Life mod.
    Pergunta: PAWN й dificil de programar?
    • Resposta: Nгo, eu acho pawn uma linguagem muito simples de programar, apуs vocк aprender pawn, torna-se simples aprender as outras linguagens de programaзгo.
    Pergunta: O que й um GF?
    • Resposta: GF, vem do prefixo GodFather, o GF foi um Gamemode muito famoso, й atualmente utilizado pela maioria dos servidores de RPG no Brasil e em Portugal.
    Pergunta:Vale a pena editar um gamemode?
    • Resposta:Na minha opiniгo nгo, porque muitos desses gamemodes vem bugados, mal feitos, sem optimizaзгo, nгo utilizam coisas corretas, etc... Mas existem gamemodes que sгo bem feitos e bem estruturados, esses sim vale a pena editar.
    Pergunta:Vale a pena criar um gamemode?
    • Resposta: Sim, lembre-se que tudo criado por si й bom, claro que nem sempre podemos usar coisas criadas por nуs, porque cada linguagem de programaзгo tem coisas nativas que foram criadas por outras pessoas, mas sobre criar um gamemode, vale sempre mais a pena criar o seu gamemode, vocк conta com muitas coisas, optimizaзгo, sem bugs, estruturado, coisas exclusivas, entre outras...
    Pergunta: Porque devo deixar os crйditos de um script que eu nгo fiz?
    • Resposta: Bem, como disse nem todos os scripts sгo feitos por nуs certo, entгo convйm deixar os devidos crйditos do autor, os crйditos nгo precisam de ser um comando, deixar no script jб й muito ъtil, entгo pense sempre, gostava que alguйm roubasse algo seu e disse-se que foi ele que fez?
    Clique aqui para ver mais Perguntas Frequentes
  • Primeiros passos

    Bem, os primeiros passos sгo fбceis, mas muita gente pergunta "Como eu comeзo a programar pawn?", simples, se vocк quer mesmo programar pawn basta ter dedicaзгo e vocк aprende.
    Pawn nгo й um quebra cabeзas, muito pelo contrario, no inicio pode ser complicado, mas se nos dedicarmos ele torna-se fбcil.

    Entгo para comeзar vocк deve fazer o download do sa-mp server:
    SA-MP 0.3e Windows Server: Download
    SA-MP 0.3e Linux Server (x86): Download


    Apуs fazer o download, extraia os arquivos para uma pasta.
    Apos extrair os arquivos, abra o pawno e clique em new.
    Agora vamos comeзar por criar um pequeno script, comeзe por eliminar tudo menos:
    • #include <a_samp>
    • public OnFilterScriptInit
    • public OnFilterScriptExit
    • public OnPlayerConnect
    Apos isso, compile (pressionando F5) e de um nome ao seu arquivo.
    Apуs vocк ter compilado o arquivo, poderemos comeзar a programar e a criar pequenas coisas, lembre-se que o source code deve se parecer com este.

    Source code (*.pwn):
    pawn Код:
    #include <a_samp>

    public OnFilterScriptInit()
    {
        print("\n--------------------------------------");
        print(" Blank Filterscript by your name here");
        print("--------------------------------------\n");
        return 1;
    }

    public OnFilterScriptExit()
    {
        return 1;
    }

    public OnPlayerConnect(playerid)
    {
        return 1;
    }
  • Examinando o cуdigo

    Agora vamos passar a fase de examinar o cуdigo, quando examinamos o cуdigo temos a noзгo do que estamos a fazer, por vezes й util usamos comentarios, ou seja (//comentбrio) , assim isto facilita-nos quando temos de ler o nosso cуdigo, se implementarmos a lуgica nos comentбrios ate podemos resolver alguns bugs caso eles existem.
  • Variaveis

    As variбveis sгo coisas muito importantes no nosso script, para alem de serem dinвmicas, elas guardam dados temporбrios, ou seja, enquanto tivermos o server ligado e as variбveis nгo modificadas, sem valores alterados, os dados vгo ser iguais.

    • Strings

      Uma string, й uma Array1D, que permite-nos armazenar caracteres, para quem nгo sabe, array's1D sгo aquelas arrays que contem apenas um [], ou seja, new arr[20]; , isto й uma array 1D, pelo que eu sei, o mбximo que existe й ate 4D's, ou seja, new arr[20][20][20][20]; , entгo, digamos que a string й uma array 1D, lembrando que tambem й possivel criar uma string com apenas um caracter, mas eu chamo isso de, cell, ou seja, new arr = '1'; , mas para ser considerada uma string й necessбrio ser no mнnimo 1D, menos que isso, serб considerada uma cell, ou seja, cйlula e lembrando que as cells sу permitem apenas 1 carбcter.
    • Floats

      Uma float, й uma variavel decimal, ela contem um ponto (.) entre os dois numeros, para declararmos uma float, necessitamos de fazer, new Float:tempposx; , penso que o tamanho mбximo da Float й entre 6000 e -6000, isto й o tamanho do mapa do GTA.
    • Ints

      Uma int, й uma variavel base, os dados que armazenamos na int pode ser nъmeros, ou Hexadecimal, para criarmos uma int, basta escrever new arr = 1;
    • Bools

      Uma bool, й uma variбvel que tem apenas 2 condiзхes, verdadeira ou falsa, para declararmos uma variavel booleana, basta escrever, new bool: arr = false;
  • Funзхes

    As funзхes podem ser funзхes nativas, como SendClientMessage , ou podem ser funзхes criadas por nуs, as funзхes podem ser criadas de 5 formas, forward & public, stock, #define, native ou digitando apenas o nome da funзгo.

    • Chamando

      Para chamarmos uma funзгo podemos usar 3 formas, via timer, via Remote/Local Function ou via normal, para chamarmos via timer, usamos o SetTimer ou SetTimerEx.

      pawn Код:
      SetTimer(callback[],tempo,bool:repetir)
      callback[]Neste parвmetro iremos definir o nome da funзгo que queremos chamar.
      tempoNeste parametro iremos definir o tempo necessбrio para a funзгo ser chamada, lembrando que o tempo й definido em ms, ou seja, milissegundos, clique aqui para ver um conversor de tempo
      repetirNeste parвmetro iremos definir se queremos chamar a funзгo apenas 1 vez, ou se queremos chamar a funзгo para sempre, lembrando que aqui teremos que usar apenas a condiзгo verdadeiro ou falso, ou seja (1, true || 0, false)
      Nota:Esta funзгo funciona apenas para publics.
      pawn Код:
      SetTimerEx(callback[],tempo,repetir,format[],{Float,_}:...);
      callback[]Neste parвmetro iremos definir o nome da funзгo que queremos chamar.
      tempoNeste parametro iremos definir o tempo necessбrio para a funзгo ser chamada, lembrando que o tempo й definido em ms, ou seja, milissegundos, clique aqui para ver um conversor de tempo
      repetirNeste parвmetro iremos definir se queremos chamar a funзгo apenas 1 vez, ou se queremos chamar a funзгo para sempre, lembrando que aqui teremos que usar apenas a condiзгo verdadeiro ou falso, ou seja (1, true || 0, false)
      format[]Aqui iremos definir o parametro que queremos usar, ou seja:
      • i & d - Representa um parвmetro inteiro, ou seja, uma int
      • s - Representa um parвmetro string, ou seja, uma string
      • f - Representa um parвmetro float, ou seja, uma float.
      • b - Representa um parвmetro bool, ou seja, uma booleana.
      {Float,_}:...Nъmero indefinido de argumentos para passar
      Nota:Esta funзгo funciona apenas para publics.
      Tambem podemos usar o CallRemoteFunction para chamar funзхes de um filterscript, mas lembrando que essas funзхes tem de ser publics, para chamar funзхes normais, basta colocar o nome dela no script, exemplo.

      pawn Код:
      SayHello();
    • Definindo

      Como disse a pouco, existem 5 formas para definir uma funзгo, entгo vamos rever.
      public & forwardCriarmos uma funзгo com public & forward й mais vantajoso, alem de poder ser chamada com CallRemote(Local)Function & SetTimer(Ex), tambйm й rбpida.
      stockCriarmos uma funзгo com stock, sгo funзхes simples, como dar dinheiro do jogador e nнvel ao mesmo tempo, entre outras, veja um exemplo stock HelloWorld();
      #definePodemos criar uma pequena funзгo com o #define, porйm na minha opiniгo e pelo que me disseram, usar #define nгo vale muito a pena, porque o #define ao ser executado ele vai ser criado varias vezes tornando o tamanho do amx maior.
      nativeIsto й muito curiso, porque quando se cria uma include, podemos colocar /* native HelloWorld(); */ e ele vai mostrar a funзгo na lista lateral direita, onde tem todas as includes, mas a native й usada para plugins, digamos que ela faz a conexгo entre o script e o plugin.
      Nome da funзгoEm vez de criarmos uma stock, podemos colocar logo o nome da funзгo, veja HelloWorld();
    • Parвmetros

      Os parвmetros de uma funзгo sгo variбveis que nos permitem transferir dados, ou seja, em vez de usarmos variбveis globais, podemos usar variaveis locais e transferir os dados para essa mesma funзгo, vejamos:

      pawn Код:
      stock MyFunction(&var,var2){
          var = 1;
          var2 = 2;
          printf("var1: %d | var2: %d",var,var2);
          return 1;
      }
      Como podemos ver aqui, usamos 2 integers, mas o primeiro tem um &, esse & serve para passar valores por referencia, ou seja, quando fazemos
      pawn Код:
      new xd = 3,xd2 = 4;
      printf("xd: %d | xd2: %d",xd,xd2);
      MyFunction(xd,xd2);
      printf("xd: %d | xd2: %d",xd,xd2);
      O valor do xd serб passado por referencia e em vez de ficar 3, ficara 1, veja esta imagem:



      Entгo sу podemos usar o & para as seguintes coisas: ints,floats e bools, nгo й possнvel usar em uma string porque elas jб sгo passadas por referencia.

      Vejamos como podemos definir os parametros em uma funзгo:
      pawn Код:
      MyFunction(var,Float:var2,bool:var3,var4[]):
      //var - aqui temos um parвmetro integer.
      //var2 - aqui temos um parвmetro float.
      //var3 - aqui temos um parвmetro booleano.
      //var4 - aqui temos um parвmetro array 1D ou uma string.
  • Exemplos de funзхes

    • SayHello

      Funзгo criada a partir de stock e o seu objetivo й mandar uma mensagem personalizada para o servidor.

      Source Code:
      pawn Код:
      stock SayHello(playerid,text[]){ //definimos os nossos parвmetros aqui, neste caso usaremos uma int e uma array 1D (string)
         
          if(strlen(text) > 3 && IsPlayerConnected(playerid)) //verificamos se a nossa string tem mais que 3 caracteres e se o jogador esta conectado.
              return SendClientMessage(playerid,-1,text);
              //retornamos com uma mensagem para um jogador.
          return 1;
      }
      Exemplo de uso:
      pawn Код:
      SayHello(playerid,"Bot diz: Olб mundo!");
    • PawnLogin

      Funзгo criada sem stock, permito-nos avisar todos os jogador quando algum jogador novo entra.

      Source Code:
      pawn Код:
      PawnLogin(playerid){
          static string[80]; //definimos o tamanho da nossa string usando static, assim serб uma variбvel estбtica e nгo serб sempre criada, o tamanho dela й 25(nome do jogador) + 31(texto);
          GetPlayerName(playerid,string,25); //pegamos o nome do jogador
          format(string,sizeof string,"O jogador %s entrou no servidor",string); //formatamos a nossa string
          SendClientMessageToAll(-1,string); //enviamos uma mensagem para todos os jogadores
          return 1;
      }
    • PawnPaycheck

      Esta funзгo й criada com public & forward, a funзгo dela й dar dinheiro aos jogadores online.

      pawn Код:
      forward PawnPaycheck(grana);
      public PawnPaycheck(grana){
          for(new i; i<GetMaxPlayers(); ++i){ //fazemos um loop e o tamanho do loop serб a quantidade de slots que existem no server.cfg
              if(IsPlayerConnected(i)) //verificamos se os jogadores estгo conectados
                  return GivePlayerMoney(i,grana),SendClientMessage(i,-1,"Parabйns voce recebeu $$"); //retornamos com dinheiro e uma mensagem.
          }
          return 1;
      }
      Nesta funзгo podemos usar um timer, veja.

      pawn Код:
      SetTimerEx("PawnPaycheck",600000,true,"d",1000);
      Entгo, o tempo de chamada serб de 10 minutos, serб sempre repetido e o dinheiro serб de 1000.
  • Source Code

    Entгo, apуs vermos estes exemplos e explicaзхes obtemos um cуdigo como este:

    pawn Код:
    #include <a_samp>

    stock SayHello(playerid,text[]){ //definimos os nossos parвmetros aqui, neste caso usaremos uma int e uma array 1D (string)
       
        if(strlen(text) > 3 && IsPlayerConnected(playerid)) //verificamos se a nossa string tem mais que 3 caracteres e se o jogador esta conectado.
            return SendClientMessage(playerid,-1,text);
            //retornamos com uma mensagem para um jogador.
        return 1;
    }

    PawnLogin(playerid){
        static string[80]; //definimos o tamanho da nossa string usando static, assim serб uma variбvel estбtica e nгo serб sempre criada, o tamanho dela й 25(nome do jogador) + 31(texto);
        GetPlayerName(playerid,string,25); //pegamos o nome do jogador
        format(string,sizeof string,"O jogador %s entrou no servidor",string); //formatamos a nossa string
        SendClientMessageToAll(-1,string); //enviamos uma mensagem para todos os jogadores
        return 1;
    }

    public OnFilterScriptInit()
    {
        print(" *Filterscript carregado com sucesso.");
        SetTimerEx("PawnPaycheck",600000,true,"d",random(20000)); //usaremos a funзгo random para dar dinheiro randonomicamente.
        return 1;
    }

    public OnFilterScriptExit()
    {
        print(" *Filterscrip descarregado com sucesso");
        return 1;
    }

    public OnPlayerConnect(playerid)
    {
        PawnLogin(playerid);    
        SayHello(playerid,"Bot diz: Seja bem vindo ao servidor");
        return 1;
    }

    forward PawnPaycheck(grana);
    public PawnPaycheck(grana){
        for(new i; i<GetMaxPlayers(); ++i){ //fazemos um loop e o tamanho do loop serб a quantidade de slots que existem no server.cfg
            if(IsPlayerConnected(i)) //verificamos se os jogadores estгo conectados
                return GivePlayerMoney(i,grana),SendClientMessage(i,-1,"Parabйns voce recebeu $$"); //retornamos com dinheiro e uma mensagem.
        }
        return 1;
    }
    Isto foi apenas uma das coisas que podemos fazer, claro que podemos fazer outras coisa.
  • Tipos de script

    Existem muitos tipos de script, desde um cуdigo ъtil ate um gamemode, entгo vejamos quais sгo os tipos de script.

    Cуdigo ЪtilUm cуdigo util, й um script muito pequeno, ele pode ser apenas uma funзгo (Clique Aqui)
    FilterScriptUm filterscript, pelo nome diz, filtro de script, й um script pequeno, que contem algumas funзхes e sistemas.
    GameModeUm GameMode, pelo nome diz modo de jogo, й um script grande, em que os jogadores pode jogar nele, existem vбrios tipos de GameModes, desde RP,RPG,DM,TDM,DRIFT,STUNT entre outros.
    IncludeUma include й um script externo, ou seja, ele й um ficheiro gravado em .inc, assim facilita ao programador usar as funзхes, para usar uma include basta colocar no seu script #include <nomedoficheiro>
    PluginUm plugin tambйm й um script externo, mas ele usa a linguagem de programaзгo C++, ou seja, com um plugin poderemos fazer coisas que no pawn nгo dб, por vezes devida ao seu tamanho o plugin usa uma include, como por exemplo o plugin sscanf.
  • Crйditos
    • BlueX - Criaзгo do tutorial;
    • rjjj - Retirada de duvidas;
    • Stewie` - Retirada de duvidas;
    • Wiki SA-MP - Retirada de duvidas;
    • Wikipйdia - Informaзхes;
    • [iPs]TeaM - Creative Logic;
    • SA-MP TeaM - Passado\Presente\Futuro;
    • Kyosaur - Fonte de inspiraзгo para o tutorial;
Reply
#2

Very Nice blue tuto bem explicado parabens..
Reply
#3

I can't rate this tutorial, because I can't understand it :P
Reply
#4

Quote:
Originally Posted by Juninho_Oakley
Посмотреть сообщение
Very Nice blue tuto bem explicado parabens..
Obrigado

Quote:
Originally Posted by Smokkr
Посмотреть сообщение
I can't rate this tutorial, because I can't understand it :P
That's no problem dude, i think you can use ****** translate
Reply
#5

Quote:
Originally Posted by Smokkr
Посмотреть сообщение
Eu nгo posso avaliar este tutorial, porque eu nгo consigo entender :P
OMG ******
Reply
#6

Muito bom o tutorial.
Parabйns. +REP.


Mais Agora eu acredito que o Mapa tem 3000/-3000.
Me conserte se eu estiver errado. !
Reply
#7

Muito Bom , Bem Explicado (Parabйns)

RedX kk
Reply
#8

Quote:
Originally Posted by AmericanStyle'™
Посмотреть сообщение
Muito bom o tutorial.
Parabйns. +REP.


Mais Agora eu acredito que o Mapa tem 3000/-3000.
Me conserte se eu estiver errado. !
Obrigado

---

O limite do mapa й 6000/-6000

Mas vocк sу pode ir ate aos 3000/-3000

Quando eu falo em mapa, nгo й a imagem do mapa, mas sim o mapa em si.

Se vocк for ver o source do MapAndreas, tб lб 6000


Quote:
Originally Posted by Japa3D
Посмотреть сообщение
Muito Bom , Bem Explicado (Parabйns)

RedX kk
Obrigado
Reply
#9

Quote:
Originally Posted by BlueX
Посмотреть сообщение
That's no problem dude, i think you can use ****** translate
You're right
Reply
#10

Quote:
Originally Posted by henrique_wwi
Посмотреть сообщение
Parabйns reunio bastante coisa em um tutorial!!!
Obrigado

Quote:
Originally Posted by @Riichard
Посмотреть сообщение
Muito bom BlueX. .
Obrigado

Quote:
Originally Posted by Smokkr
Посмотреть сообщение
You're right
So, do you translated the tutorial? If yes, it's good?
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)