[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) { 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> |