(https://i.imgur.com/J8wGPFA.png) | (https://i.imgur.com/d9A4U8O.png) | (https://i.imgur.com/6USs5AH.png) |
(https://i.imgur.com/EWGFc7D.png) | (https://i.imgur.com/9pX6799.png) |
-- Si se insertó un alias de un set, preguntamos para confirmar (¿qué hacía exactamente este? ni idea, mejor no tocar)
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.Otra vez la manía de hacer las cosas de madrugada...
Por otro lado, llevo riendome un buen rato con los comentarios del Lua xDLo peor es que sé perfectamente que es para agregar un set predefinido, debían ser horas altas en la madrugada. xDCitar-- Si se insertó un alias de un set, preguntamos para confirmar (¿qué hacía exactamente este? ni idea, mejor no tocar)
Posible mejora que yo metería: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.
- 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.
Posible mejora que yo metería:Pues gracias por la sugerencia, al final modifiqué varias líneas para arreglar este pequeño problema y ahora funciona de maravilla.
- 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.
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)He añadido en el BAG_UPDATE que requiera que pendingDeletion sea false para activarse. function AutoDeleter.ScheduleDeletion()
if AutoDeleter.pendingDeletion then return end
AutoDeleter.pendingDeletion = true
AutoDeleter.deletionTimer = AutoDeleter.deletionInterval
endEn el ScheduleDeletion se vuelve true cuando el BAG_UPDATE lo llama (como estaba). 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)
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.