[Tutorial] Criando funзхes (Simples e Avanзado)
#1

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
Reply
#2

Gostei bastante, bem explicado. Bom trabalho !

+rep
Reply
#3

Bom tutorial parabens
Reply
#4

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
Reply
#5

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

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!
Reply
#7

Obrigado
Reply
#8

Fico bom parabйns

Reputado
Reply
#9

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
Reply
#10

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


Forum Jump:


Users browsing this thread: 1 Guest(s)