SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

Participe do fórum, é rápido e fácil

SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 12 Anos online por você.

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Chegou o novo tema 6.5.5 - SSGamers - Servidores online de qualidade - Aproveite e entre para nossa comunidade, inscreva-se já! - Ouça nossa web radio - Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.

2 participantes

    PAWN - SAMP

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


    Steam Steam : WeslleySSGames
    Zello : WeslleySSGames
    Mensagens : 11378
    Moedas : 1031971
    Data de inscrição : 06/10/2011
    Idade : 28
    Localização : Brasil

    include - PAWN - SAMP Empty PAWN - SAMP

    Mensagem por Weslley_Script Qua 4 Fev 2015 - 2:30

    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 Google.
    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

    1º Após fazer o download, extraia os arquivos para uma pasta.
    2º Apos extrair os arquivos, abra o pawno e clique em new.
    3º Agora vamos começar por criar um pequeno script, começe por eliminar tudo menos:
    #include
    public OnFilterScriptInit
    public OnFilterScriptExit
    public OnPlayerConnect
    4º 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 Code:



    Código:
    #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 Code:
    SetTimer(callback[],tempo,bool:repetir)
    callback[] Neste parâmetro iremos definir o nome da função que queremos chamar.
    tempo Neste 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
    repetir Neste 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 Code:
    SetTimerEx(callback[],tempo,repetir,format[],{Float,_}:...);
    callback[] Neste parâmetro iremos definir o nome da função que queremos chamar.
    tempo Neste 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
    repetir Neste 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 Code:



    Código:
    SayHello();,kr




    Definindo
    Como disse a pouco, existem 5 formas para definir uma função, então vamos rever.
    public & forward Criarmos uma função com public & forward é mais vantajoso, alem de poder ser chamada com CallRemote(Local)Function & SetTimer(Ex), também é rápida.
    stock Criarmos 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();
    #define Podemos 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.
    native Isto é 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ção Em 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 Code:
    Código:
    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 Code:
    Código:
    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:

     include - PAWN - SAMP 2l8ykk7


    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 Code:
    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 Code:
    Código:
    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 Code:
    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 Code:
    Código:
    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 Code:
    Código:
    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 Code:
    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 Code:
    Código:
    #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 Útil Um código util, é um script muito pequeno, ele pode ser apenas uma função (Clique Aqui)
    FilterScript Um filterscript, pelo nome diz, filtro de script, é um script pequeno, que contem algumas funções e sistemas.
    GameMode Um 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.
    Include Uma 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
    Plugin Um 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;



    Postado na ssgames por weslley_script





    Última edição por Weslley_Script em Seg 26 Nov 2018 - 22:24, editado 2 vez(es)



    include - PAWN - SAMP D07Xwqb
    include - PAWN - SAMP Yjab9HN
    CAAW
    CAAW
    --> Postador Iniciante
    --> Postador Iniciante


    Celular : Celular
    Mensagens : 166
    Moedas : 3723
    Data de inscrição : 03/01/2015
    Idade : 32
    Localização : São Paulo

    include - PAWN - SAMP Empty SSGames ~ Tutorial Para Iniciantes ~ Fechado Tópico By: Caaw

    Mensagem por CAAW Ter 17 Fev 2015 - 11:25

    Curti Tutorial, Muito Bom, Bom Aproveito Para Inciiantes e Novatos Quer Aprender Scripter ...




    Tópico Trancado
    Motivo: Evitar Chat
    @Closed



    Meu Fan? Então Utilize 
    include - PAWN - SAMP I4uzgdF
    ------------------------------------------------------------------------------------------------------------------------
    Sou Fan De:
    include - PAWN - SAMP FnZjLX1
    include - PAWN - SAMP D5Kp60i
    -------------------------------------------------------------------------------------------------------------------------



      Data/hora atual: Qui 2 maio 2024 - 5:38