[Tutorial] Programaзгo modular simples (s/ y_hooks)
#1

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.
PHP код:
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.

PHP код:
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:
PHP код:
#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.
Se tiver dъvidas, pergunte no tуpico. Se achar algum erro, envie via MP.
Reply
#2

Poderia citar tambйm algum modo de organizaзгo das pastas, que й algo muito importante.
Acho que nгo adianta muito colocar tudo em uma pasta sу, vai ficar mais desorganizado ainda.
Reply
#3

Quote:
Originally Posted by CaioTJF
Посмотреть сообщение
Poderia citar tambйm algum modo de organizaзгo das pastas, que й algo muito importante.
Acho que nгo adianta muito colocar tudo em uma pasta sу, vai ficar mais desorganizado ainda.
A organizaзгo varia de programador pra programador, o exemplo que eu citei sгo sistemas especнficos que eu criei e separei eles apenas em uma pasta, por se tratarem da mesma categoria. Faзo o mesmo com mapas, tenho dois modulos chamados exterior.map e interior.map, que guardo em uma pasta chamada maps/.
Reply
#4

Ki Linu
Reply
#5

Jб a muitos anos que uso esse mйtodo e atй hoje nгo me arrependo atй para reparar bugs e muito mais fбcil.

Bom tutorial
Reply
#6

Bom tutorial, porйm ainda usarei y_hooks.
Reply
#7

Й importante tambйm raciocinar a leitura do compilador. Уtimo tutorial, organizaзгo й tudo na vida de quem programa.
Reply
#8

Boa jovem

#AdvancedRoleplay
Reply
#9

Deveria citar um exemplo do seu mйtodo trabalhando com retornos de chamadas, e ao meu ver isto mata totalmente o significado de "mуdulos"
Reply
#10

Bacana, mas nгo acha que poderias ter incrementado o Method ALS 7? Ele й de fбcil implementaзгo e nгo precisaria toda hora estar inserindo funзхes nas callbacks do mуdulo main, sem contar que em relaзгo ao y_hooks, ele й bem mais preciso, utiliza menos processamento, tem resposta bem mais rбpida e o tempo de compilaзгo й menor.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)