ALS HOOK's
Bom, até onde consegui pesquisar o ALS (Advanced Library System) basicamente determina que uma função já foi registrado/fisgado. Essa técnica até onde tenho conhecimento aproveita do pre-processamento do compilador através de suas diretivas que fazem que o processamento ocorra de forma especial gerando uma outra linha de processamento.
COMO FUNCIONA
O gancho é feito fazendo com que uma função chame outra função aparentemente com o mesmo nome, "encadeando" todas essas funções idênticas, de modo que chamar uma chama todas elas. Ao conectar funções, isso é fácil porque a cadeia chama a função anterior com o mesmo nome; no entanto, conectar retornos de chamada é complicado pelo fato de que a cadeia chama a próxima função com o mesmo nome - uma função que ainda não foi definida e pode nem existir.
MACROS
Um macro é uma sequência de instruções que é atribuída a um nome. Os macros são usados para automatizar tarefas repetitivas.
DIRETIVAS
As diretivas são comandos especiais que são processados pelo compilador antes de compilar o código-fonte.
#if, #else, #endif: São usados para condicionalmente compilar parte do código, dependendo de se uma condição é verdadeira ou falsa.
#undef: Ela desfaz a definição de uma constante de uma #define.
OBSERVAÇÕES
1. Achei pouco conteúdo sobre na internet, se houver algum erro me corrija.
2. Ao declarar um ALS é extremamente necessário que ele esteja sendo chamado caso contrário ele pode, dar conflito e assim ele não carregará os outros módulo
3. Infelizmente o compilador não possui suporte para um limite de 31 caracteres em definições de variáveis e funções, caso aconteça esse aviso na hora de compilar utilize o código abaixo:
COMO UTILIZAR O ALS
Tendo em mente as observações citadas acima, vamos aplicar o ALS em prática, o código a seguir representa o uso do ALS com Callbacks:
1. Crie uma pasta chamada: "modules" e dentro dessa pasta adicione um arquivo chamado: "ALS.inc", após isso coloque o código abaixo dentro desse arquivo.
2. Após isso, dentro do arquivo principal que se encontra em: "gamemodes/main.pwn". Adicione o código abaixo para incluir o arquivo que possui o método de ALS, assim ele será executado quando compilado o arquivo principal.
CRÉDITOS/REFERÊNCIAS
Tópico bem completo e com diversos adendos: https://sampforum.blast.hk/showthread.php?tid=574534
Bom, até onde consegui pesquisar o ALS (Advanced Library System) basicamente determina que uma função já foi registrado/fisgado. Essa técnica até onde tenho conhecimento aproveita do pre-processamento do compilador através de suas diretivas que fazem que o processamento ocorra de forma especial gerando uma outra linha de processamento.
COMO FUNCIONA
O gancho é feito fazendo com que uma função chame outra função aparentemente com o mesmo nome, "encadeando" todas essas funções idênticas, de modo que chamar uma chama todas elas. Ao conectar funções, isso é fácil porque a cadeia chama a função anterior com o mesmo nome; no entanto, conectar retornos de chamada é complicado pelo fato de que a cadeia chama a próxima função com o mesmo nome - uma função que ainda não foi definida e pode nem existir.
MACROS
Um macro é uma sequência de instruções que é atribuída a um nome. Os macros são usados para automatizar tarefas repetitivas.
DIRETIVAS
As diretivas são comandos especiais que são processados pelo compilador antes de compilar o código-fonte.
LISTA DE DIRETIVAS:
#define: Define uma constante no código.#if, #else, #endif: São usados para condicionalmente compilar parte do código, dependendo de se uma condição é verdadeira ou falsa.
#undef: Ela desfaz a definição de uma constante de uma #define.
OBSERVAÇÕES
1. Achei pouco conteúdo sobre na internet, se houver algum erro me corrija.
2. Ao declarar um ALS é extremamente necessário que ele esteja sendo chamado caso contrário ele pode, dar conflito e assim ele não carregará os outros módulo
3. Infelizmente o compilador não possui suporte para um limite de 31 caracteres em definições de variáveis e funções, caso aconteça esse aviso na hora de compilar utilize o código abaixo:
Código PHP:
#pragma warning disable 230
COMO UTILIZAR O ALS
Tendo em mente as observações citadas acima, vamos aplicar o ALS em prática, o código a seguir representa o uso do ALS com Callbacks:
1. Crie uma pasta chamada: "modules" e dentro dessa pasta adicione um arquivo chamado: "ALS.inc", após isso coloque o código abaixo dentro desse arquivo.
Código PHP:
public OnPlayerConnect(playerid) {
print("ALS in Callbacks, teste");
#if defined HOOK_OnPlayerConnect
return HOOK_OnPlayerConnect(players);
#else
return 1;
#endif
}
#if defined _ALS_OnPlayerConnect
#undef OnPlayerConnect
#else
#define _ALS_OnPlayerConnect
#endif
#define OnPlayerConnect HOOK_OnPlayerConnect
#if defined HOOK_OnPlayerConnect
forward HOOK_OnPlayerConnect(playerid);
#endif
2. Após isso, dentro do arquivo principal que se encontra em: "gamemodes/main.pwn". Adicione o código abaixo para incluir o arquivo que possui o método de ALS, assim ele será executado quando compilado o arquivo principal.
Código PHP:
#include "../modules/ALS.inc"
CRÉDITOS/REFERÊNCIAS
Tópico bem completo e com diversos adendos: https://sampforum.blast.hk/showthread.php?tid=574534