mirror of
https://github.com/edubart/otclient.git
synced 2025-04-30 01:29:21 +02:00

Sandboxing makes module scripts run inside an isolated lua environments, making more easier and secure to script Move and rework TextMessage using the new sandbox system
113 lines
4.0 KiB
Lua
113 lines
4.0 KiB
Lua
MessageTypesConf = {
|
|
ConsoleRed = { color = '#F55E5E', consoleTab = tr('Default') },
|
|
ConsoleOrange = { color = '#FE6500', consoleTab = tr('Default') },
|
|
ConsoleBlue = { color = '#9F9DFD', consoleTab = tr('Default') },
|
|
Warning = { color = '#F55E5E', consoleTab = tr('Server Log'), labelId = 'warningLabel' },
|
|
Info = { color = '#00EB00', consoleTab = tr('Server Log'), labelId = 'infoLabel', consoleOption = 'showInfoMessagesInConsole' },
|
|
EventAdvance = { color = '#FFFFFF', consoleTab = tr('Server Log'), labelId = 'advanceLabel', consoleOption = 'showEventMessagesInConsole' },
|
|
EventDefault = { color = '#FFFFFF', consoleTab = tr('Server Log'), labelId = 'statusLabel', consoleOption = 'showEventMessagesInConsole' },
|
|
StatusDefault = { color = '#FFFFFF', consoleTab = tr('Server Log'), labelId = 'statusLabel', consoleOption = 'showStatusMessagesInConsole' },
|
|
StatusSmall = { color = '#FFFFFF', labelId = 'statusLabel' },
|
|
Private = { color = '#5FF7F7', labelId = 'privateLabel' }
|
|
}
|
|
|
|
centerTextMessagePanel = nil
|
|
statusLabel = nil
|
|
privateLabel = nil
|
|
warningLabel = nil
|
|
advanceLabel = nil
|
|
infoLabel = nil
|
|
|
|
function init()
|
|
connect(g_game, {
|
|
onTextMessage = displayMessage,
|
|
onGameStart = clearMessages
|
|
})
|
|
registerProtocol()
|
|
|
|
g_ui.importStyle('textmessage.otui')
|
|
centerTextMessagePanel = g_ui.createWidget('Panel', GameInterface.getMapPanel())
|
|
centerTextMessagePanel:setId('centerTextMessagePanel')
|
|
|
|
local layout = UIVerticalLayout.create(centerTextMessagePanel)
|
|
layout:setFitChildren(true)
|
|
centerTextMessagePanel:setLayout(layout)
|
|
centerTextMessagePanel:setWidth(360)
|
|
centerTextMessagePanel:centerIn('parent')
|
|
|
|
warningLabel = createTextMessageLabel('warningLabel', centerTextMessagePanel, 'CenterLabel')
|
|
advanceLabel = createTextMessageLabel('advanceLabel', centerTextMessagePanel, 'CenterLabel')
|
|
infoLabel = createTextMessageLabel('infoLabel', centerTextMessagePanel, 'CenterLabel')
|
|
privateLabel = createTextMessageLabel('privateLabel', GameInterface.getMapPanel(), 'TopCenterLabel')
|
|
statusLabel = createTextMessageLabel('statusLabel', GameInterface.getMapPanel(), 'BottomLabel')
|
|
|
|
export({
|
|
clearMessages = clearMessages,
|
|
displayStatus = function() displayMessage(MessageTypes.StatusSmall, msg) end,
|
|
displayEventAdvance = function() displayMessage(MessageTypes.EventAdvance, msg, time) end,
|
|
displayPrivate = function() displayPrivate(msg, time) end
|
|
}, 'TextMessage')
|
|
end
|
|
|
|
function terminate()
|
|
disconnect(g_game, {
|
|
onTextMessage = display,
|
|
onGameStart = clearMessages
|
|
})
|
|
unregisterProtocol()
|
|
|
|
removeEvent(warningLabel.hideEvent)
|
|
removeEvent(advanceLabel.hideEvent)
|
|
removeEvent(infoLabel.hideEvent)
|
|
removeEvent(privateLabel.hideEvent)
|
|
removeEvent(statusLabel.hideEvent)
|
|
|
|
centerTextMessagePanel:destroy()
|
|
statusLabel:destroy()
|
|
privateLabel:destroy()
|
|
|
|
unexport('TextMessage')
|
|
end
|
|
|
|
function clearMessages()
|
|
warningLabel:hide()
|
|
advanceLabel:hide()
|
|
infoLabel:hide()
|
|
privateLabel:hide()
|
|
statusLabel:hide()
|
|
end
|
|
|
|
function createTextMessageLabel(id, parent, class)
|
|
local label = g_ui.createWidget(class, parent)
|
|
label:setFont('verdana-11px-rounded')
|
|
label:setId(id)
|
|
return label
|
|
end
|
|
|
|
function displayMessage(msgtype, msg, time)
|
|
if not g_game.isOnline() then return end
|
|
msgtypeconf = MessageTypesConf[msgtype]
|
|
|
|
if msgtypeconf.consoleTab ~= nil then
|
|
if msgtypeconf.consoleOption == nil or Options.getOption(msgtypeconf.consoleOption) then
|
|
Console.addText(msg, msgtypeconf, msgtypeconf.consoleTab)
|
|
end
|
|
end
|
|
|
|
if msgtypeconf.labelId then
|
|
local label = GameInterface.getMapPanel():recursiveGetChildById(msgtypeconf.labelId)
|
|
|
|
label:setText(msg)
|
|
label:setColor(msgtypeconf.color)
|
|
|
|
if not time then
|
|
time = math.max(#msg * 100, 4000)
|
|
else
|
|
time = time * 1000
|
|
end
|
|
removeEvent(label.hideEvent)
|
|
addEvent(function() label:setVisible(true) end)
|
|
label.hideEvent = scheduleEvent(function() label:setVisible(false) end, time)
|
|
end
|
|
end
|