11/11/2020 13:54
Programação modular simples (sem y_hooks)
É fundamental que você saiba organizar seu ambiente de trabalho, o seu código não será diferente disto, para organizar algo grande, nada melhor do que dividi-lo em módulos específicos de cada categoria do que você fez, não?
Neste tutorial, irei ensinar um método simples, sem plugins e sem includes adicionais do fórum, para você criar módulos e facilmente gerencia-los.
- O primeiro de tudo é criar uma pasta para tais módulos, pode ser a sua escolha. Eu por exemplo separei sistemas específicos no código que eu trabalho em uma pasta chamada sys/.
- Crie o arquivo .pwn ou em alguma extensão que não impeça a leitura dele. Particularmente eu utilizo a extensão .sys para essa pasta especifica que eu criei com meus sistemas.
- Abra o arquivo e comece a escrever os códigos, crie as funções que necessitar para o seu sistema.
- Se caso você precise que essa função esteja em uma public do sa-mp e essa public está declarada no main-code (arquivo principal do GM) você pode criar uma stock ou uma public dentro do modulo e chama-lo na public desejada.
Por exemplo, necessito que uma informação seja realizada quando o jogador entrar, a public que é chamada quando esse evento acontece é o OnPlayerConnect, ela já está declarada nativamente no meu main-code por que existe outros códigos dentro dela, eu irei criar uma stock com as funções que eu desejo nessa public. Irei declarar uma variável como negativa para esse evento como exemplo.
Código:
stock DrinkBuy_OnPlayerConnect(playerid)
{
AlgumaVariavel[playerid] = false;
return 1;
}
* Lembre-se que o tamanho do nome/titulo de qualquer stock, function, public ou variável não pode passar dos 32 caracteres.
* Para fins de organização, sempre tento criar a função com parte do mesmo nome da nativa, diferenciando apenas o nome/abreviação do nome do modulo que estou trabalhando.
Criei a stock no arquivo do modulo, agora irei até o main-code e irei chama-la na public nativa, que é o OnPlayerConnect(playerid) e coloca-lo na posição que eu julgar necessária e relevante.
Código:
public OnPlayerConnect(playerid)
{
/*Suas funções e necessidades no OnPlayerConnect nativo do main-code*/
DrinkBuy_OnPlayerConnect(playerid);
return 1;
}
Posicionei a minha stock no final da public, ou seja, ela só será executada quando tudo antes dela for executado.
- Em casos de comandos, você pode fazer o mesmo com o OnPlayerText, se for ZCMD ou qualquer outro processador de comandos, você pode cria-lo normalmente no modulo que ele funcionará normalmente.
- Em casos de variáveis que tenham a criação no main-code e você precise de novas no modulo, crie elas diretamente no main-code para chama-las no modulo.
- Para chamar o seu arquivo ao main-code você deve declarar fora de qualquer função uma #include, por exemplo:
Código:
#include "diretórios/drinkbuy.sys"
- O que estiver dentro do " " deverá ser o caminho a partir do main-code até o arquivo do modulo, no meu caso o meu modulo está localizado numa pasta chamada sys/ e o nome do arquivo é drinkbuy.sys, logo ficando sys/drinkbuy.sys o caminho até o arquivo.