Sección informativa y Descargas > Addons

AutoDeleter, un AddOn para gestionar objetos indeseados

<< < (2/2)

Zelys:

--- Cita de: Caranthir en 11 Marzo, 2026, 09:35:05 ---Buenas zelys, creo que has puesto mal el enlace y se sigue redirigiendo a la version v0.4.2, no metiste el link de la nueva o al menos en el drive el archivo tiene un nombre erróneo en ese caso.

--- Fin de la cita ---
Otra vez la manía de hacer las cosas de madrugada...

Enlace arreglado. https://drive.google.com/file/d/1RCGlEJoDMUiCEm-aKEa4B6aaMcd-I5DO/view


--- Cita de: Caranthir en 11 Marzo, 2026, 09:35:05 ---Por otro lado, llevo riendome un buen rato con los comentarios del Lua xD


--- Citar ----- Si se insertó un alias de un set, preguntamos para confirmar (¿qué hacía exactamente este? ni idea, mejor no tocar)

--- Fin de la cita ---

--- Fin de la cita ---
Lo peor es que sé perfectamente que es para agregar un set predefinido, debían ser horas altas en la madrugada. xD

Y bueno, comentarios que pongo por si alguien los lee, tengo esa manía desde hace ya tiempo.


--- Cita de: Caranthir en 11 Marzo, 2026, 09:35:05 ---Posible mejora que yo metería:

- El evento de BAG_UPDATE se dispara muchísimo (Comprar, vender, correo, mover items, banco y demas). Aunque has puesto un deletionInterval de 0.3 segundos, puedes hacer que el evento se dispare muchisimas veces en 1 segundo. ¿Que puede pasar?

0.00 BAG_UPDATE -> timer = 0.3
0.05 BAG_UPDATE -> timer = 0.3
0.10 BAG_UPDATE -> timer = 0.3
0.15 BAG_UPDATE -> timer = 0.3 --> El schedule ya se ejecuta al 0.45

El borrado nunca llega a ejecutarse hasta que paran los BAG_UPDATE.

Lo que podrías hacer es programar un borrado en el schedule si es que no tienes ya programado un borrado de items previo:

function AutoDeleter.ScheduleDeletion()
    if AutoDeleter.pendingDeletion then
        return
    end
    AutoDeleter.pendingDeletion = true
    AutoDeleter.deletionTimer = AutoDeleter.deletionInterval
end

Algo así.

De esta manera:

0.00 BAG_UPDATE -> timer = 0.3
0.10 BAG_UPDATE (Ignorado)
0.20 BAG_UPDATE (Ignorado)
0.30 delete
0.40 BAG_UPDATE -> timer = 0.3
0.70 delete

Solo se agenda una eliminación cada 0.3 segundos y evitas bugs como que el timer se alargue de forma infinita en caso de eventos del BAG_UPDATE masivos.

--- Fin de la cita ---
Me di cuenta del fallo mientras usaba el AddOn al ponerme a despojar grandes cantidades de cadáveres y en ese sentido sí que funciona un poco raro y no empezaba a borrar hasta terminar de despojar o hacer una breve pausa, o directamente borraba un ítem y paraba hasta que terminaba de despojar.

Nunca lo toqué porque igualmente cumplía su función aunque de forma rara, aún así muy probablemente sea una de las siguientes cosas que modificaré para que el borrado sea inmediato y que no salte constantemente.

Zelys:

--- Cita de: Caranthir en 11 Marzo, 2026, 09:35:05 ---Posible mejora que yo metería:

- El evento de BAG_UPDATE se dispara muchísimo (Comprar, vender, correo, mover items, banco y demas). Aunque has puesto un deletionInterval de 0.3 segundos, puedes hacer que el evento se dispare muchisimas veces en 1 segundo. ¿Que puede pasar?

0.00 BAG_UPDATE -> timer = 0.3
0.05 BAG_UPDATE -> timer = 0.3
0.10 BAG_UPDATE -> timer = 0.3
0.15 BAG_UPDATE -> timer = 0.3 --> El schedule ya se ejecuta al 0.45

El borrado nunca llega a ejecutarse hasta que paran los BAG_UPDATE.

Lo que podrías hacer es programar un borrado en el schedule si es que no tienes ya programado un borrado de items previo:

function AutoDeleter.ScheduleDeletion()
    if AutoDeleter.pendingDeletion then
        return
    end
    AutoDeleter.pendingDeletion = true
    AutoDeleter.deletionTimer = AutoDeleter.deletionInterval
end

Algo así.

De esta manera:

0.00 BAG_UPDATE -> timer = 0.3
0.10 BAG_UPDATE (Ignorado)
0.20 BAG_UPDATE (Ignorado)
0.30 delete
0.40 BAG_UPDATE -> timer = 0.3
0.70 delete

Solo se agenda una eliminación cada 0.3 segundos y evitas bugs como que el timer se alargue de forma infinita en caso de eventos del BAG_UPDATE masivos.

--- Fin de la cita ---
Pues gracias por la sugerencia, al final modifiqué varias líneas para arreglar este pequeño problema y ahora funciona de maravilla.


--- Código: ---frame:SetScript("OnEvent", function(_, event, arg1)
    if event == "ADDON_LOADED" and arg1 == "AutoDeleter" then
        AutoDeleter.EnsureSavedVars()
    elseif event == "PLAYER_LOGIN" then
        if debugEnabled == true then AutoDeleter.PrintMsg(AutoDeleter.L.debugModeOn) else AutoDeleter.PrintMsg(AutoDeleter.L.loadedMsg) end
    elseif event == "BAG_UPDATE" and AutoDeleter.pendingDeletion == false then
        AutoDeleter.ScheduleDeletion()
    end
end)
--- Fin del código ---
He añadido en el BAG_UPDATE que requiera que pendingDeletion sea false para activarse.


--- Código: ---    function AutoDeleter.ScheduleDeletion()
        if AutoDeleter.pendingDeletion then return end

        AutoDeleter.pendingDeletion = true
        AutoDeleter.deletionTimer = AutoDeleter.deletionInterval
    end
--- Fin del código ---
En el ScheduleDeletion se vuelve true cuando el BAG_UPDATE lo llama (como estaba).


--- Código: ---    frame:SetScript("OnUpdate", function(self, elapsed)
        if not AutoDeleter.pendingDeletion then return end

        AutoDeleter.deletionTimer = AutoDeleter.deletionTimer - elapsed

        if AutoDeleter.deletionTimer <= 0 then
            local deleted = AutoDeleter.DeleteItemsFromInventory()

            if deleted then
                AutoDeleter.deletionTimer = AutoDeleter.deletionInterval
            else
                AutoDeleter.pendingDeletion = false
            end
        end
    end)

--- Fin del código ---
Y tras eliminar ítems, si la eliminación de ítems devuelve true el timer para el siguiente borrado se reinicia, y si devuelve false (que no se eliminó nada) cambiamos el pendingDeletion a false para que el próximo BAG_UPDATE pueda llamarlo nuevamente.

Así que con esto el problema de múltiples llamados del BAG_UPDATE queda resuelto. Gracias por la sugerencia Caranthir. ;D

Retocaré un par de cosas más antes de subir la siguiente versión, es un problema que no urge mucho.

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa