--To try - add a slash command to the other apartment that reloads this apartment. Done, then deleted, because of the next point...
--Then, use the "TestBag" command at the bottom to send a message over if the two items don't match. Can this be done without user intervention? I think not
--What about unloading the plugin? If the other plugin was watching for this it could reload on unload. A plugin can't unload itself.
--How about a compromise? The plugin reloads on the "inventory" key if, and only if, the player is not in combat. How would it know if the bag was already open? Nope, this won't work either.
--Adds a small on-screen backpack counter
--Add to button
if Counter==nil then Counter={} end
if Counter.x==nil then Counter.x=100 end
if Counter.y==nil then Counter.y=100 end
if Counter.Scale==nil then Counter.Scale=1 end
if Counter.Show==nil then Counter.Show=true end
--Structure; Window, Cover, Label
Count=Turbine.UI.Window()
Count:SetVisible(true)
Count:SetPosition(Counter.x,Counter.y)
Count:SetMouseVisible(false)
Count:SetBackColor( Turbine.UI.Color( 0.3,0,0,0.4 ) )
--Initialise bag count
Count.bag=0
for i=1,size do
local item = backpack:GetItem(i)
if item~=nil then Count.bag=Count.bag+1 end
end
--Function to set the label text. The hide/show stops an over-writing bug.
function SetLabel()
Count.label:SetVisible(false)
if Counter.Remain then
Count.label:SetText( size-Count.bag )
else
Count.label:SetText( Count.bag.."/"..size )
end
Count.label:SetVisible(true)
end
--Set the size of the window
function SetCountSize()
if Counter.Remain then
Count:SetSize(20*Counter.Scale,14*Counter.Scale)
else
Count:SetSize(36*Counter.Scale,14*Counter.Scale)
end
end
Count.label=Turbine.UI.Label()
Count.label:SetFont(Turbine.UI.Lotro.Font.TrajanProBold36)
Count.label:SetMultiline(false)
Count.label:SetTextAlignment( Turbine.UI.ContentAlignment.MiddleCenter )
Count.label:SetMouseVisible (false)
Count.label:SetSize(36*36/14,36)
Count.label:SetParent(Count)
Count.label:SetStretchMode(1)
Count.DragBar = Deusdictum.UI.DragBar( Count,"Count")
Count.DragBar:SetZOrder(9999)
Count.Cover=Turbine.UI.Control()
Count.Cover:SetParent(Count)
Count.Cover:SetVisible(false)
Count.SizeChanged=function()
Count.label:SetSize(36*Counter.Scale,14*Counter.Scale)
Count.Cover:SetSize(Count:GetSize())
Count.DragBar:Refresh()
if Counter.Remain then
Count.label:SetPosition( -8.5*Counter.Scale,0)
else
Count.label:SetPosition(0,0)
end
end
--When UI is unlocked then make the cover visible.
Count.DragEnable=function()
Count.Cover:SetVisible(true)
end
Count.DragDisable=function()
Count.Cover:SetVisible(false)
end
--Cover events - resize the Button.
Count.Cover.MouseDown=function(sender,args)
if ( args.Button == Turbine.UI.MouseButton.Left ) then
moving=true
else
Counter.Remain=not(Counter.Remain)
if Counter.Remain then
Count:SetSize(20*Counter.Scale,14*Counter.Scale)
else
Count:SetSize(36*Counter.Scale,14*Counter.Scale)
end
SetLabel()
end
end
Count.Cover.MouseUp=function(sender,args)
moving=false
end
Count.Cover.MouseMove=function(sender,args)
if moving then
local x,y=Count.Cover:GetMousePosition()
Counter.Scale=y/14
if Counter.Scale<1 then Counter.Scale=1 end
SetCountSize()
end
end
Count.PositionChanged=function()
Counter.x,Counter.y=Count:GetPosition()
end
--Functions to watch for the addition or subtraction of items. Does not look for "Item Moved"
Count.Add=function(sender,args)
--Turbine.Shell.WriteLine("Count.Add")
Count.bag=Count.bag+1
SetLabel()
BagTest()
end
Count.Remove=function(sender,args)
--Turbine.Shell.WriteLine("Count.Remove")
Count.bag=Count.bag-1
SetLabel()
end
Count.Move=function(sender,args)
--Turbine.Shell.WriteLine("Count.Move")
--I have no faith in this hack but... it is the only way I have found to fix the new turbine behaviour!
local n=0
for i=1,size do
local item = backpack:GetItem(i)
if item~=nil then n=n+1 end
end
--Turbine.Shell.WriteLine(n.." "..Count.bag)
if Count.bag>n then Count.bag=Count.bag-1 end
SetLabel()
end
--Tests the bag to see if any "ghost" items have happened.
--Not a perfect test, but it should help!
--Only called when an item is added or strange bugs occur...
function BagTest()
if player:IsInCombat() then return end --Skip this if the player is in combat - don't want to waste CPU cycles.
if bagfaulty then return end --Skip if bag already found to be faulty. They rarely fix themselves.
local n=0
for i=1,size do
local item = backpack:GetItem(i)
if item~=nil then n=n+1 end
end
if n==Count.bag then
Count:SetBackColor( Turbine.UI.Color( 0.3,0,0,0.4 ) )
else
Count:SetBackColor( Turbine.UI.Color( 0.3,0.4,0,0 ) )
bagfaulty=true
end
end
AddCallback(backpack, "ItemAdded", Count.Add)
AddCallback(backpack, "ItemRemoved", Count.Remove)
AddCallback(backpack, "ItemMoved", Count.Move)
--Initialise the size, label and back colour.
SetCountSize()
SetLabel()
BagTest()
--This fixes a very odd bug that has crept in - I have no idea what is causing it, but it is most annoying.
--The label just doesn't seem to scale properly...
Count.label:SetSize(36*Counter.Scale,14*Counter.Scale)