Cómo conectar una funciónDe la documentación de LUA: La declaración function f () ... end se traduce en f = function () ... end. Esto significa que mediante una simple asignación, cualquier función Puede ser reemplazado por cualquier otra función. Con esto en mente, resulta fácil "enganchar" o agregar sus propias funciones a las funciones predefinidas. # Gancho significa enganchar, enganchar. Advertencia: esta sección contiene información desactualizada. Digamos, por ejemplo, que queremos mostrar los niveles de jugadores y monstruos que son mucho más altos que los nuestros, en lugar de esqueletos. La función que oculta el nivel es TargetFrame_CheckLevel(), por lo que debemos vincular esa función para que no oculte el nivel. Digamos que nuestro complemento se llama "MyAddOn" y tiene un controlador OnLoad llamado por un evento XML. En la documentación de Lua deberíamos tener: local MyAddOn_Orig_TargetFrame_CheckLevel; function MyAddOn_OnLoad() MyAddOn_Orig_TargetFrame_CheckLevel = TargetFrame_CheckLevel - Guarda el nivel de verificación original. CheckLevel; - guardar la función original TargetFrame_CheckLevel = MyAddOn_TargetFrame_CheckLevel; - conectar a nuestra terminal Entonces, la operación anterior es almacenar el parámetro "TargetFrame_CheckLevel" original en "MyAddOn_Orig_TargetFrame_CheckLevel". Luego reemplace los parámetros originales con nuestra función, de modo que ahora cualquiera que llame a TargetFrame_CheckLevel() será reemplazado por MyAddOn_TargetFrame_CheckLevel(). El siguiente paso es crear MyAddOn_TargetFrame_CheckLevel(). Función MyAddOn_TargetFrame_CheckLevel() local retval = MyAddOn_Orig_TargetFrame_CheckLevel() - Llama a la función original TargetLevelText:Show(); TargetHighLevelTexture:Hide(); return retval; end Entonces, en esta función, primero llamamos a la función anterior y le dejamos hacer lo que necesita hacer. Luego mostramos el nivel y ocultamos la calavera. Bastante simple, ¿no? Este es sólo un ejemplo de cómo conectarlo, en realidad no muestra el nivel. --Realmente no te muestra el nivel. ¿Es fácil seguir la sombra y hacer ganchos de función? Si tiene la biblioteca Sea, puede usar la función de gancho Sea.util.hook. Sea.util.hook("OldFunctionName", "NewFunctionName", "antes|después|ocultar|reemplazar"); Si especifica "antes|después|ocultar|reemplazar", solo sucederá cuando la nueva función devuelva verdadero Llame al función antigua. Si usa Sea.util.hook, también puede usar Sea.util.unhook para quitar el anzuelo. Sea.util.unhook("OldFunctionName, "NewFunctionName"); cuando utilice Sea.util.hook, preste atención al paso de parámetros, la prioridad y la vinculación para garantizar que no se produzcan problemas. Cuando utilice Sea.util.hook, pague atención a los parámetros Cuestiones como entrega, priorización, vinculación, etc., asegúrese de que se haga de una manera que no cause ningún problema.
Usar Sea de forma selectiva Si no desea que su complemento dependa de Sea, pero aun así desea beneficiarse de Sea cuando esté disponible, puede probarlo: local MyAddOn_Old_FunctionToHook = function() end si Sea entonces Sea.util. gancho("", "FunctionToHook", "FunctionName"); use Sea.util.hook.FunctionToHook", "ReplacementFunction", "después"); else MyAddOn_Old_FunctionToHook = FunctionToHook; FunctionToHook = ReemplazoFunción; finalizar función ReemplazoFunción(); si Sea luego Sea.util. fin de la función ReemplazoFunción() MyAddOn_Old_FunctionToHook().... fin Este código le permite incluir a Sea como un OpcionalDep en el TOC, lo que puede ayudarlo a evitar conflictos futuros causados por otros complementos que reemplazan completamente el antiguo. funciona cuando los usuarios instalan la biblioteca Sea. Hook Stubby Usando Stubby, puedes enganchar cosas como Stubby.hook1, gancho2, ..., ganchoN]) "FunctionToHook" es una cadena que se utiliza como nombre del gancho a enganchar. GameTooltip.SetOwner" (#GameTooltip). .SetOwner) "posición" es un número negativo o positivo que define el orden de llamada real del complemento. Cuanto más pequeño o negativo sea el número, antes se llamará realmente a la función de enlace, y viceversa. Se llama a la posición 0, por lo que si su complemento se engancha en una posición negativa, la tabla de valores que devuelva (ver a continuación) incluirá los valores de funciones anteriores en la cadena de llamadas de Stubby. Puede pasar (a través de parámetros) a su función. un valor que desea tener La función llamada como alternativa La función se llamará con los siguientes parámetros: hookFunction(hookParams, returnValue, gancho1, gancho2... ganchoN) "hookParams" es la lista de parámetros adicionales que se pasarán. a la función RegisterFunctionHook (parámetros "hook1, gancho2, ..., ganchoN"). ,hookN "parámetros). "returnValue" es una matriz que contiene el valor de retorno de la función llamada al ingresar a la cadena de llamadas auxiliares, o si no hay un valor nulo. "hook1...hookN" son los parámetros iniciales de las funciones enganchadas en el orden inicial si desea un manejo especial, opcionalmente puede devolver la siguiente cadena a Stubby. "abort" terminará la cadena de llamadas (no se llamará a ninguna otra función después de su propia llamada). función, pero la cadena de llamadas continuará. "setparams" reemplazará los parámetros de llamada de la función con el segundo valor de retorno de la función en la lista que especifique. "setreturn" cambiará el valor de retorno de la siguiente función en la cadena de llamadas de Stubby. uno en la lista que especificas. El segundo valor de retorno de la función. Ace Ace2 La cuestión de dónde llamar a la función anterior es complicada y realmente depende de lo que estés escribiendo ahora. De forma predeterminada, deberías poder llamar a la función anterior primero. y luego haga lo que necesita hacer. Sin embargo, a veces querrá llamar a la función anterior al final, llamar a la función anterior de manera condicional o no llamar a la función anterior en absoluto. Nota: No llame a la función anterior con la función popular. efecto, asumiendo que otro complemento lo conecta antes que usted. Todo lo que tiene que hacer es no permitir que el complemento vea la llamada a la función. De esto se trata realmente la biblioteca de enlaces.