@Yadd of Legends @Dot_Warner
I love a good challenge. The main culprit is in the MiniModelUpdate function. I didn't look into why it is being called too often, but the following change should make event monsters lootable again. OR it may make looting even worse... you'll have to test it to find out.
When a container is first opened - if it has around 125 items in gridview it should call UpdateContents once for each item - instead it was calling UpdateContents up to 15,000 times.
Find this function in ContainerWindow.lua
Code:
function ContainerWindow.MiniModelUpdate()
local id = WindowData.UpdateInstanceId
if id == Interface.TrapBoxID then
return
end
if (ContainerWindow.OpenContainers[id] and ContainerWindow.OpenContainers[id].inUpdate) then
return
end
-- the amount of items is changed so we force the update
if WindowData.ContainerWindow[id] and ContainerWindow.OpenContainers[id] and ContainerWindow.OpenContainers[id].numItems ~= WindowData.ContainerWindow[id].numItems then
ContainerWindow.OpenContainers[id].LastUpdate = Interface.TimeSinceLogin
end
if (ContainerWindow.OpenContainers[id] and (ContainerWindow.OpenContainers[id].LastUpdate and ContainerWindow.OpenContainers[id].LastUpdate <= Interface.TimeSinceLogin)) then
if( id == WindowGetId(SystemData.ActiveWindow.name) ) then
ContainerWindow.UpdateContents(id)
end
if (ContainerSearch.Container == id) then
ContainerSearch.UpdateList()
end
end
end
and change it to this... (the only change is the two -- in front of the call to UpdateContents(id))
Code:
function ContainerWindow.MiniModelUpdate()
local id = WindowData.UpdateInstanceId
if id == Interface.TrapBoxID then
return
end
if (ContainerWindow.OpenContainers[id] and ContainerWindow.OpenContainers[id].inUpdate) then
return
end
-- the amount of items is changed so we force the update
if WindowData.ContainerWindow[id] and ContainerWindow.OpenContainers[id] and ContainerWindow.OpenContainers[id].numItems ~= WindowData.ContainerWindow[id].numItems then
ContainerWindow.OpenContainers[id].LastUpdate = Interface.TimeSinceLogin
end
if (ContainerWindow.OpenContainers[id] and (ContainerWindow.OpenContainers[id].LastUpdate and ContainerWindow.OpenContainers[id].LastUpdate <= Interface.TimeSinceLogin)) then
if( id == WindowGetId(SystemData.ActiveWindow.name) ) then
--ContainerWindow.UpdateContents(id)
end
if (ContainerSearch.Container == id) then
ContainerSearch.UpdateList()
end
end
end
That call was probably there for a reason, but it sure isn't working the way it's supposed to.
In order to make this change in Pinco's for testing - you'll need to edit the file AFTER you have launched the game, otherwise it will be overwritten by Pinco's aggressive file patcher.
The file is located (on my pc) at C:\Program Files (x86)\Electronic Arts\Ultima Online Enhanced\UserInterface\Pinco's UI\Source\Containers\ContainerWindow\ContainerWindow.lua
Then you need to reload the interface by typing into the chat window "/script InterfaceCore.ReloadUI()" without the quotes. Or by logging out and logging back in (DO NOT CLOSE THE CLIENT)
If this does fix then bring it up to Pinco as a possible fix. I leave this in your hands - please don't ask me to look at his code ever again. For reals.