tibia-client/modules/old/game_textmessage/textmessage.lua

118 lines
4.0 KiB
Lua
Raw Normal View History

TextMessage = {}
2011-08-30 17:12:57 +02:00
-- require styles
importStyle 'textmessage.otui'
2011-09-04 19:21:42 +02:00
-- private variables
2012-01-08 16:42:23 +01:00
local MessageTypes = {
consoleRed = { color = '#F55E5E', consoleTab = 'Default' },
consoleOrange = { color = '#FE6500', consoleTab = 'Default' },
consoleBlue = { color = '#9F9DFD', consoleTab = 'Default' },
warning = { color = '#F55E5E', consoleTab = 'Server Log', labelId = 'centerWarning', wrap = true },
infoDescription = { color = '#00EB00', consoleTab = 'Server Log', labelId = 'centerInfo', consoleOption = 'showInfoMessagesInConsole', wrap = true },
eventAdvance = { color = '#FFFFFF', consoleTab = 'Server Log', labelId = 'centerAdvance', consoleOption = 'showEventMessagesInConsole', wrap = true },
eventDefault = { color = '#FFFFFF', consoleTab = 'Server Log', labelId = 'bottomStatus', consoleOption = 'showEventMessagesInConsole' },
statusDefault = { color = '#FFFFFF', consoleTab = 'Server Log', labelId = 'bottomStatus', consoleOption = 'showStatusMessagesInConsole' },
statusSmall = { color = '#FFFFFF', labelId = 'bottomStatus' },
2011-09-04 19:21:42 +02:00
}
local centerTextMessagePanel
local centerLabel
2012-01-08 16:42:23 +01:00
-- private functions
local function displayMessage(msgtype, msg, time)
2012-02-08 22:23:15 +01:00
if not g_game.isOnline() then return end
2012-01-08 21:11:50 +01:00
2012-01-14 02:37:15 +01:00
if msgtype.consoleTab ~= nil then
2012-01-09 00:28:49 +01:00
if msgtype.consoleOption == nil or Options[msgtype.consoleOption] then
2012-01-14 02:37:15 +01:00
Console.addText(msg, msgtype, msgtype.consoleTab)
2012-01-09 00:28:49 +01:00
end
2011-09-04 19:21:42 +02:00
end
if msgtype.labelId then
2012-02-08 22:23:15 +01:00
local label = g_game.gameMapPanel:recursiveGetChildById(msgtype.labelId)
2011-09-04 19:21:42 +02:00
label:setVisible(true)
2012-01-08 16:42:23 +01:00
label:setText(msg)
2012-01-09 19:45:28 +01:00
label:setColor(msgtype.color)
label:resizeToText()
2012-01-08 16:42:23 +01:00
if msgtype.wrap then
label:setWidth(label:getParent():getWidth())
2012-01-25 01:50:30 +01:00
label:wrapText()
label:setHeight(label:getTextSize().height)
2012-01-25 01:50:30 +01:00
end
if not time then
time = math.max(#msg * 100, 4000)
else
time = time * 1000
end
2012-01-08 16:42:23 +01:00
removeEvent(label.hideEvent)
label.hideEvent = scheduleEvent(function() label:setVisible(false) end, time)
end
end
local function createTextMessageLabel(id, parent)
local label = createWidget('UILabel', parent)
label:setFont('verdana-11px-rounded')
label:setTextAlign(AlignCenter)
label:setId(id)
label:setMarginBottom(2)
label:setVisible(false)
return label
end
2012-01-08 16:42:23 +01:00
-- public functions
2012-01-08 16:42:23 +01:00
function TextMessage.create()
2012-02-08 22:23:15 +01:00
centerTextMessagePanel = createWidget('Panel', g_game.gameMapPanel)
centerTextMessagePanel:setId('centerTextMessagePanel')
local layout = UIVerticalLayout.create(centerTextMessagePanel)
layout:setFitChildren(true)
centerTextMessagePanel:setLayout(layout)
centerTextMessagePanel:setWidth(360)
centerTextMessagePanel:centerIn('parent')
createTextMessageLabel('centerWarning', centerTextMessagePanel)
createTextMessageLabel('centerAdvance', centerTextMessagePanel)
createTextMessageLabel('centerInfo', centerTextMessagePanel)
2012-02-08 22:23:15 +01:00
bottomStatusLabel = createTextMessageLabel('bottomStatus', g_game.gameMapPanel)
bottomStatusLabel:setHeight(16)
bottomStatusLabel:addAnchor(AnchorBottom, 'parent', AnchorBottom)
bottomStatusLabel:addAnchor(AnchorLeft, 'parent', AnchorLeft)
bottomStatusLabel:addAnchor(AnchorRight, 'parent', AnchorRight)
2012-01-08 16:42:23 +01:00
end
function TextMessage.displayStatus(msg, time)
displayMessage(MessageTypes.warning, msg)
end
function TextMessage.displayEventAdvance(msg, time)
displayMessage(MessageTypes.eventAdvance, msg, time)
2012-01-08 16:42:23 +01:00
end
function TextMessage.display(msgtypedesc, msg)
local msgtype = MessageTypes[msgtypedesc]
2012-01-08 21:11:50 +01:00
if msgtype then
displayMessage(msgtype, msg)
2011-08-30 17:12:57 +02:00
end
2012-01-08 16:42:23 +01:00
end
-- hooked events
local function onGameDeath()
2012-02-08 22:23:15 +01:00
local advanceLabel = g_game.gameMapPanel:recursiveGetChildById('centerAdvance')
if advanceLabel:isVisible() then return end
TextMessage.displayEventAdvance('You are dead.')
2011-08-30 17:12:57 +02:00
end
2011-11-03 23:16:47 +01:00
local function onGameTextMessage(msgtypedesc, msg)
TextMessage.display(msgtypedesc, msg)
end
2011-11-03 23:16:47 +01:00
2012-02-08 22:23:15 +01:00
connect(g_game, { onGameStart = TextMessage.create,
onGameEnd = TextMessage.destroy,
onDeath = onGameDeath,
onTextMessage = onGameTextMessage })