tibia-client/modules/game_viplist/viplist.lua

149 lines
3.9 KiB
Lua
Raw Normal View History

VipList = {}
2011-09-02 06:29:00 +02:00
-- private variables
2012-01-23 14:47:15 +01:00
local vipWindow
local vipButton
local addVipWindow
-- public functions
function VipList.init()
2012-03-29 01:48:33 +02:00
connect(g_game, { onGameEnd = VipList.clear,
onAddVip = VipList.onAddVip,
onVipStateChange = VipList.onVipStateChange })
vipWindow = displayUI('viplist.otui', GameInterface.getLeftPanel())
vipButton = TopMenu.addGameToggleButton('vipListButton', tr('VIP list'), 'viplist.png', VipList.toggle)
vipButton:setOn(true)
VipList.refresh()
end
function VipList.terminate()
2012-03-29 01:48:33 +02:00
disconnect(g_game, { onGameEnd = VipList.clear,
onAddVip = VipList.onAddVip,
onVipStateChange = VipList.onVipStateChange })
vipWindow:destroy()
vipWindow = nil
2012-01-23 14:47:15 +01:00
vipButton:destroy()
vipButton = nil
2012-04-27 06:54:14 +02:00
VipList = nil
2012-01-23 14:47:15 +01:00
end
function VipList.refresh()
VipList.clear()
for id,vip in pairs(g_game.getVips()) do
VipList.onAddVip(id, unpack(vip))
end
end
2012-03-29 01:48:33 +02:00
function VipList.clear()
local vipList = vipWindow:getChildById('contentsPanel')
vipList:destroyChildren()
end
2012-01-23 14:47:15 +01:00
function VipList.toggle()
local visible = not vipWindow:isExplicitlyVisible()
vipWindow:setVisible(visible)
vipButton:setOn(visible)
2011-09-02 06:29:00 +02:00
end
2012-01-04 19:11:11 +01:00
function VipList.createAddWindow()
addVipWindow = displayUI('addvip.otui')
end
function VipList.destroyAddWindow()
addVipWindow:destroy()
addVipWindow = nil
end
function VipList.addVip()
2012-02-08 22:23:15 +01:00
g_game.addVip(addVipWindow:getChildById('name'):getText())
2012-01-04 19:11:11 +01:00
VipList.destroyAddWindow()
end
-- hooked events
2012-01-11 19:08:56 +01:00
function VipList.onAddVip(id, name, online)
local vipList = vipWindow:getChildById('contentsPanel')
2012-01-11 19:08:56 +01:00
local label = createWidget('VipListLabel', nil)
2011-09-02 06:29:00 +02:00
label:setId('vip' .. id)
label:setText(name)
2011-09-02 06:29:00 +02:00
if online then
2012-01-09 19:45:28 +01:00
label:setColor('#00ff00')
2011-09-02 06:29:00 +02:00
else
2012-01-09 19:45:28 +01:00
label:setColor('#ff0000')
2011-09-02 06:29:00 +02:00
end
2011-09-02 06:29:00 +02:00
label.vipOnline = online
label:setPhantom(false)
2012-02-08 22:23:15 +01:00
connect(label, { onDoubleClick = function () g_game.openPrivateChannel(label:getText()) return true end } )
2012-01-11 19:08:56 +01:00
local nameLower = name:lower()
local childrenCount = vipList:getChildCount()
2012-01-11 23:31:23 +01:00
for i=1,childrenCount do
2012-01-11 19:08:56 +01:00
local child = vipList:getChildByIndex(i)
if online and not child.vipOnline then
vipList:insertChild(i, label)
return
end
2012-01-11 23:31:23 +01:00
if (not online and not child.vipOnline) or (online and child.vipOnline) then
local childText = child:getText():lower()
local length = math.min(childText:len(), nameLower:len())
2012-01-11 23:31:23 +01:00
for j=1,length do
if nameLower:byte(j) < childText:byte(j) then
vipList:insertChild(i, label)
return
elseif nameLower:byte(j) > childText:byte(j) then
break
end
2012-01-11 19:08:56 +01:00
end
end
end
2012-01-11 19:08:56 +01:00
vipList:insertChild(childrenCount+1, label)
2011-09-02 06:29:00 +02:00
end
2012-01-11 19:08:56 +01:00
function VipList.onVipStateChange(id, online)
local vipList = vipWindow:getChildById('contentsPanel')
2011-09-02 06:29:00 +02:00
local label = vipList:getChildById('vip' .. id)
2012-01-11 19:08:56 +01:00
local text = label:getText()
vipList:removeChild(label)
2012-01-11 19:08:56 +01:00
VipList.onAddVip(id, text, online)
2011-09-02 06:29:00 +02:00
end
2012-01-04 19:11:11 +01:00
function VipList.onVipListMousePress(widget, mousePos, mouseButton)
if mouseButton ~= MouseRightButton then return end
2012-03-29 01:48:33 +02:00
local vipList = vipWindow:getChildById('contentsPanel')
2012-01-04 19:11:11 +01:00
local menu = createWidget('PopupMenu')
2012-04-27 00:28:31 +02:00
menu:addOption(tr('Add new VIP'), function() VipList.createAddWindow() end)
2012-01-04 19:11:11 +01:00
menu:display(mousePos)
2012-01-04 19:11:11 +01:00
return true
end
2012-01-04 15:30:28 +01:00
function VipList.onVipListLabelMousePress(widget, mousePos, mouseButton)
if mouseButton ~= MouseRightButton then return end
2012-03-29 01:48:33 +02:00
local vipList = vipWindow:getChildById('contentsPanel')
2012-01-04 15:30:28 +01:00
local menu = createWidget('PopupMenu')
menu:addOption(tr('Add new VIP'), function() VipList.createAddWindow() end)
menu:addOption(tr('Remove %s', widget:getText()), function() if widget then g_game.removeVip(widget:getId():sub(4)) vipList:removeChild(widget) end end)
2012-01-04 19:11:11 +01:00
menu:addSeparator()
menu:addOption(tr('Copy Name'), function() g_window.setClipboardText(widget:getText()) end)
2012-01-04 15:30:28 +01:00
menu:display(mousePos)
2012-01-04 19:11:11 +01:00
return true
2012-01-04 15:30:28 +01:00
end