Portal SAMP
[Tutorial] ALS Método de HOOK - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Guias e Tutoriais (https://portalsamp.com/forumdisplay.php?fid=7)
+--- Tópico: [Tutorial] ALS Método de HOOK (/showthread.php?tid=4226)



ALS Método de HOOK - tsnull - 19/11/2023

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


RE: ALS Método de HOOK - zBreno - 19/11/2023

achou pouco conteúdo sobre isso porque o conteúdo sobre isso tava no extinto fórum samp, quem for procurar alguma coisa sobre isso agora só vai cair em paginas de backup do fórum ou cair em algum fórum russo https://sampforum.blast.hk/forumdisplay.php?fid=70 se quiser compilar com mais de 31 chars tem que usar um compilador que dê suporte pra isso https://portalsamp.com/showthread.php?tid=4041


RE: ALS Método de HOOK - tsnull - 19/11/2023

(19/11/2023 21:04)zBreno Escreveu: achou pouco conteúdo sobre isso porque o conteúdo sobre isso tava no extinto fórum samp, quem for procurar alguma coisa sobre isso agora só vai cair em paginas de backup do fórum ou cair em algum fórum russo https://sampforum.blast.hk/forumdisplay.php?fid=70 se quiser compilar com mais de 31 chars tem que usar um compilador que dê suporte pra isso https://portalsamp.com/showthread.php?tid=4041

Obrigado pelo adendo


RE: ALS Método de HOOK - White_Blue - 20/11/2023

Vale ressaltar que usar hooks dessa maneira já é antiquado, eu usaria apenas para includes, pois para tornar uma gamemode modular, já existe o y_hooks do pacote de includes YSI que torna isso muito mais fácil.

Código PHP:
#include <YSI/y_hooks>
hook OnPlayerConnect(playerid) {
        
// Hook
        
return 1;