SA-MP Forums Archive
[Tutorial] Criando funзхes (Simples e Avanзado) - 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] Criando funзхes (Simples e Avanзado) (/showthread.php?tid=459871)



Criando funзхes (Simples e Avanзado) - Juniiro3 - 25.08.2013

Criando Funзхes

Funзхes Simples
As funзхes mais simples sгo aquelas com poucos parвmetros (um parвmetro й tudo que se encontra dentro de um parenteses), e as vezes nenhum e tem uma linguagem simples, como o nome diz. Na wiki tem um pequeno exemplo de uma funзгo chamada quando o servidor inicia:

pawn Код:
main()
{
    return MinhaFuncao();
}
 
MinhaFuncao()
{
    print("Olб Mundo!");
    return 1;
}
Nesse pequeno exemplo, estб mostrando uma funзгo hiper simples, que retorna 1 e mostra uma mensagem no console. Uma funзгo pode estar no meio, no fim, ou no inнcio de um GM/FS e pode ser chamada em qualquer lugar dele, nгo necessariamente DEPOIS de declarar a funзгo. No exemplo, a funзгo nгo possui parвmetros, porque ela nгo precisa de informaзхes adicionais para funcionar.


Declarando Funcoes


Como eu disse, uma funзгo pode ser declarada e usada em qualquer de um Gm/Fs, desde que ela nгo seja declarada dentro de chaves "{ }". Para declarar uma funзгo, basta procurar o espaзo que quiser fora de chaves e escrever o nome dela. Depois disse, abra as chaves normalmente e use sua imaginaзгo.

pawn Код:
Funcao( playerid ) //Esses parenteses sao necessarios, mesmo sem nenhum parametro
{ //Abre Chave
   if (vip[playerid] == 1)    
        return 1; //retorna 1 caso ele for vip
} //Fecha Chave
Quando se fala em uma funзгo ou stock, NГO INTERESSA O NOME DO PARAMETRO, e sim o tipo. Colocar playerid ou asdasd tera a mesma funзгo, mesmo se for usado para um player. O que realmente conta й:
- Se й numйrico
- Se й booleano ( bool )
- Se й Float
- Se й String.

Funзхes Avanзadas

Se uma funзгo simples й uma com pouco ou nenhum parвmetro e com uma linguagem mais simplificada, uma funзгo avanзada ou complexa й aqeula com muitos parвmetros ou com uma complexibilidade maior. Por exemplo:

pawn Код:
MensagemProxima(playerid, cor, Float:distancia, texto[])
{
    static Float:Pos[3];
   
    GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
   
    for (new i; i < MAX_PLAYERS; i++)
        if (IsPlayerInRangeOfPoint(i, distancia, Pos[0], Pos[1], Pos[2]))
            SendClientMessage(i, cor, texto);
   
    return 1;
}
Vamos comeзar com os parвmetros. Como eu disse, nгo importa o nome do parвmetro, isso:

pawn Код:
MensagemProxima(playerid, cor, Float:distancia, texto[])
Й o mesmo que isso:

pawn Код:
MensagemProxima(asdasd , vodka, Float:aguadecoco, colchetesXD[])
Porйm em uma funзao com parвmetros й bem mais fбcil usar como nome algo relacionado, como na funзгo MensagemProxima (Retirada do meu GM). O que realmente importa, й sй e do tipo bool, float, string ou numerico. Nessa funзгo temos string, numerico e Float.



Declarando Parametros e seus tipos


Vamos trabalhar em cima dessa funзгo:

pawn Код:
MensagemProxima(playerid, cor, Float:distancia, texto[])
{
    static Float:Pos[3];
   
    GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
   
    for (new i; i < MAX_PLAYERS; i++)
        if (IsPlayerInRangeOfPoint(i, distancia, Pos[0], Pos[1], Pos[2]))
            SendClientMessage(playerid, cor, texto);
   
    return 1;
}
Como se pode ver, ela tem 4 parвmetros ( playerid, cor, Float:distancia, texto[]) sendo que playerid e cor sгo do tipo numйrico, distancia do tipo Float e texto do tipo string. Olhando apenas a declaraзгo dela й possнvel identificar isso. Mas como informar que o parвmetro й de cada um desses tipos?

Nas funзхes, declaramos de forma idкntica a outros scripts, usando:

pawn Код:
bool:TipoBoolean, Float:TipoFloat, string[size]
Porйm com uma pequena diferenзa nas strings, os colchetes sгo vazios.

Voltando para nossa funзгo, conseguimos perceber o tipo de cada parвmetro que ela possui. Agora, precisamos usar eles dentro de nossa funзгo.

pawn Код:
static Float:Pos[3];
   
    GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
   
    for (new i; i < MAX_PLAYERS; i++)
        if (IsPlayerInRangeOfPoint(i, distancia, Pos[0], Pos[1], Pos[2]))
            SendClientMessage(i, cor, texto);
   
    return 1;
Como se pode ver, estamos usando todas as funзхes declaradas e ainda mais uma para no final retornar uma simples mensagem. Mas como isto funciona?
Todos os parвmetros sгo variбveis, ou seja, "sгo passados por referкncia", assim como GetPlayerName e etc. Quando formos usar uma funзгo, nгo vamos usar esses parвmetros em si, mas sim de acordo com nossa necessidade. Essa funзгo, por exemplo, usada como Chat Prуximo, ficaria:

pawn Код:
public OnPlayerText(playerid, text[]) //Os parвmetros de public trabalham da mesma maneira
{
    MensagemProxima( playerid , GetPlayerColor ( playerid ) , 50.0 , text);
    return 0;
}
Como dб para perceber, sу repetimos o playerid na funзгo, o resto foi adaptado de acordo com nossa necessidade, usando os parвmetros declarados na public, que funcionam de maneira semelhante nas funзхes.

Avaliem o tutorial e me ajudem com o que nгo ficou bom


Re: Criando funзхes (Simples e Avanзado) - [THs]ShadoW - 25.08.2013

Gostei bastante, bem explicado. Bom trabalho !

+rep


Re: Criando funзхes (Simples e Avanзado) - P1c4550 - 25.08.2013

Bom tutorial parabens


Re: Criando funзхes (Simples e Avanзado) - Don_Speed - 25.08.2013

Wikipedia e foda mesmo

https://sampwiki.blast.hk/wiki/Scripting_Basics_PT

/\ Ali esta a prova


pawn Код:
#include <a_samp>
 
main()
{
    return MinhaFuncao();
}
 
MinhaFuncao()
{
    print("Olб Mundo!");
    return 1;
}
Codigo gerado pela wikipedia



Re: Criando funзхes (Simples e Avanзado) - Juniiro3 - 25.08.2013

Lol eu falei que era da wiki esse exemplo '-' leia as linhas anteriores.


Re: Criando funзхes (Simples e Avanзado) - WLSF - 25.08.2013

Quote:
Originally Posted by Juniiro3
Посмотреть сообщение
Lol eu falei que era da wiki esse exemplo '-' leia as linhas anteriores.
Relaxa, ele nгo sabe ler, hue.

Ficou bom, parabйns!


Re: Criando funзхes (Simples e Avanзado) - Juniiro3 - 25.08.2013

Obrigado


Re: Criando funзхes (Simples e Avanзado) - smiiir - 25.08.2013

Fico bom parabйns

Reputado


Re: Criando funзхes (Simples e Avanзado) - Don_Speed - 25.08.2013

Quote:
Originally Posted by Willian_Luigi
Посмотреть сообщение
Relaxa, ele nгo sabe ler, hue.

Ficou bom, parabйns!
Sei ler sim fodao .
So tentei dizer que ele fe\ algo que a wiki ja fez .

#Ultimopostmeuaquinotopic



Re: Criando funзхes (Simples e Avanзado) - WLSF - 25.08.2013

Quote:
Originally Posted by Don_Speed
Посмотреть сообщение


Sei ler sim fodao .
So tentei dizer que ele fez algo que a wiki ja fez .

#Ultimopostmeuaquinotopic
Se soubesse ler mesmo nгo teria vindo dizer que ele 'fez' algo que a Wiki jб fez, vocк teria notado que ele sу deu ctrl+c, ctrl+v para usar como exemplo, aliбs ele citou isso...

Fodгo ? Vocк que veio esfregar no tуpico do cara que ele tб copiando cуdigo, sem nem ter lido.