Luxocracy / NeatPlates

NeatPlates is a continuation of the original Tidy Plates in an attempt to keep it update date in the absence of its authors.
https://wow.curseforge.com/projects/neat-plates
80 stars 20 forks source link

Script ran too long (game freezing) #380

Closed zaphon closed 1 week ago

zaphon commented 1 year ago

What version of the game you are experiencing the issue with: Retail

Describe the bug Tanking dungeons today (leveling toons), keep getting freezes and they tie back to 2 errors I'm getting with

1x ...nterface/AddOns/NeatPlatesWidgets/ResourceWidget.lua:468: script ran too long
[string "@Interface/AddOns/NeatPlatesWidgets/ResourceWidget.lua"]:468: in function `UpdatePoints'
[string "@Interface/AddOns/NeatPlatesWidgets/ResourceWidget.lua"]:376: in function `Expire'
[string "@Interface/AddOns/NeatPlatesWidgets/WidgetCore.lua"]:61: in function <Interface/AddOns/NeatPlatesWidgets/WidgetCore.lua:52>

Locals:
(*temporary) = Frame {
 0 = <userdata>
 UpdatePoints = <function> defined @Interface/AddOns/NeatPlatesWidgets/ResourceWidget.lua:418
 _Hide = <function> defined =[C]:-1
 guid = "Creature-0-4216-2287-16184-167892-00037171E6"
 Update = <function> defined @Interface/AddOns/NeatPlatesWidgets/ResourceWidget.lua:471
 Points = <table> {
 }
 UpdateContext = <function> defined @Interface/AddOns/NeatPlatesWidgets/ResourceWidget.lua:484
 Hide = <function> defined @Interface/AddOns/NeatPlatesWidgets/ResourceWidget.lua:573
}
(*temporary) = <table> {
 1 = <table> {
 }
 2 = <table> {
 }
 3 = <table> {
 }
 4 = <table> {
 }
 5 = <table> {
 }
 6 = <table> {
 }
}
(*temporary) = 6
(*temporary) = 16
(*temporary) = -8
(*temporary) = <table> {
 1 = 0
 2 = 0
 3 = 0
 4 = 0
 5 = 0
 6 = 0
}
(*temporary) = <function> defined =[C]:-1
(*temporary) = <table> {
 1 = <table> {
 }
 2 = <table> {
 }
 3 = <table> {
 }
 4 = <table> {
 }
 5 = <table> {
 }
 6 = <table> {
 }
}
(*temporary) = <function> defined @Interface/AddOns/NeatPlatesWidgets/ResourceWidget.lua:434
(*temporary) = "script ran too long"
GetPlayerPower = <function> defined @Interface/AddOns/NeatPlatesWidgets/ResourceWidget.lua:313
CalculatePointSpacing = <function> defined @Interface/AddOns/NeatPlatesWidgets/ResourceWidget.lua:355
CreateResourceIcon = <function> defined @Interface/AddOns/NeatPlatesWidgets/ResourceWidget.lua:380
GetResourceTexture = <function> defined @Interface/AddOns/NeatPlatesWidgets/ResourceWidget.lua:327
PolledHideIn = <function> defined @Interface/AddOns/NeatPlatesWidgets/WidgetCore.lua:78

and

13x ...nterface/AddOns/NeatPlatesWidgets/ResourceWidget.lua:93: attempt to perform arithmetic on local 'start' (a nil value)
[string "@Interface/AddOns/NeatPlatesWidgets/ResourceWidget.lua"]:93: in function <...nterface/AddOns/NeatPlatesWidgets/ResourceWidget.lua:65>
[string "=(tail call)"]: ?
[string "@Interface/AddOns/NeatPlatesWidgets/ResourceWidget.lua"]:421: in function `UpdatePoints'
[string "@Interface/AddOns/NeatPlatesWidgets/ResourceWidget.lua"]:376: in function `Expire'
[string "@Interface/AddOns/NeatPlatesWidgets/WidgetCore.lua"]:61: in function <Interface/AddOns/NeatPlatesWidgets/WidgetCore.lua:52>

Locals:
self = <table> {
 GetPower = <function> defined @Interface/AddOns/NeatPlatesWidgets/ResourceWidget.lua:65
 POWER = 5
 POINT = "DK-Rune"
}
points = <table> {
}
runeMap = <table> {
 2 = "Frost"
 RUNETYPE_CHROMATIC = "Unholy"
 3 = "Unholy"
 RUNETYPE_BLOOD = "Blood"
 RUNETYPE_FROST = "Frost"
 4 = "Death"
 RUNETYPE_DEATH = "Death"
 1 = "Blood"
}
runeOrder = <table> {
 1 = 1
 2 = 2
 3 = 3
 4 = 4
 5 = 5
 6 = 6
}
(for generator) = <function> defined =[C]:-1
(for state) = <table> {
 1 = 1
 2 = 2
 3 = 3
 4 = 4
 5 = 5
 6 = 6
}
(for control) = 1
_ = 1
i = 1
point = <table> {
 EXPIRATION = 0
 ICON = "DK-Rune"
 DURATION = 0
 STATE = "Off"
}
start = nil
duration = nil
runeReady = nil
(*temporary) = "string"
(*temporary) = "DK-Rune"
(*temporary) = "string"
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = "attempt to perform arithmetic on local 'start' (a nil value)"
getPointIcon = <function> defined @Interface/AddOns/NeatPlatesWidgets/ResourceWidget.lua:51
Luxocracy commented 1 year ago

This should be fixed in the latest release(v426).

It's really odd that it doesn't manage to get a rune to compare duration against, but I've added an extra check to make sure it actually gets a rune instead of just assuming.

As for the "Scrip ran too long" issue, I've removed the "Expiration" function that it seems to stem from. It shouldn't be needed as it should function properly without it, but it just existed to make sure rune states don't get stuck. That should hopefully fix the issue altogether. But if you notice any issues with runes getting stuck I would love to know.

zaphon commented 1 year ago

Thanks, will check it out and let you know. I was able to reproduce it really rapidly on my DK in dungeons.

github-actions[bot] commented 1 month ago

This issue is stale because it has been open for 90 days with no activity. If you feel the issue is still relevant, please leave a comment to prevent the issue from being closed in 30 days