-add tibia chat commands like #w, #y and private command.
-fixed redundant onEnter/onReturn on chat panel
This commit is contained in:
parent
882b7ec026
commit
1615bf7a36
|
@ -58,7 +58,7 @@ end
|
||||||
|
|
||||||
function UITabBar:getTab(text)
|
function UITabBar:getTab(text)
|
||||||
for k,tab in pairs(self.tabs) do
|
for k,tab in pairs(self.tabs) do
|
||||||
if tab:getText() == text then
|
if tab:getText():lower() == text:lower() then
|
||||||
return tab
|
return tab
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -36,6 +36,12 @@ local SpeakTypes = {
|
||||||
[SpeakMonsterYell] = SpeakTypesSettings.monsterYell,
|
[SpeakMonsterYell] = SpeakTypesSettings.monsterYell,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
local SayModes = {
|
||||||
|
[1] = { speakTypeDesc = 'whisper', icon = '/core_styles/icons/whisper.png' },
|
||||||
|
[2] = { speakTypeDesc = 'say', icon = '/core_styles/icons/say.png' },
|
||||||
|
[3] = { speakTypeDesc = 'yell', icon = '/core_styles/icons/yell.png' }
|
||||||
|
}
|
||||||
|
|
||||||
local consolePanel
|
local consolePanel
|
||||||
local consoleBuffer
|
local consoleBuffer
|
||||||
local consoleTabBar
|
local consoleTabBar
|
||||||
|
@ -65,7 +71,7 @@ function Console.create()
|
||||||
|
|
||||||
Console.addChannel('Default', 0)
|
Console.addChannel('Default', 0)
|
||||||
Console.addTab('Server Log', false)
|
Console.addTab('Server Log', false)
|
||||||
|
|
||||||
Hotkeys.bindKeyDown('Tab', function() consoleTabBar:selectNextTab() end, consolePanel)
|
Hotkeys.bindKeyDown('Tab', function() consoleTabBar:selectNextTab() end, consolePanel)
|
||||||
Hotkeys.bindKeyDown('Shift+Tab', function() consoleTabBar:selectPrevTab() end, consolePanel)
|
Hotkeys.bindKeyDown('Shift+Tab', function() consoleTabBar:selectPrevTab() end, consolePanel)
|
||||||
Hotkeys.bindKeyDown('Enter', Console.sendCurrentMessage, consolePanel)
|
Hotkeys.bindKeyDown('Enter', Console.sendCurrentMessage, consolePanel)
|
||||||
|
@ -126,14 +132,14 @@ function Console.addChannel(name, id)
|
||||||
return tab
|
return tab
|
||||||
end
|
end
|
||||||
|
|
||||||
function Console.addPrivateText(text, speaktype, name)
|
function Console.addPrivateText(text, speaktype, name, isPrivateCommand)
|
||||||
if speaktype.speakType == SpeakPrivateNpcToPlayer then
|
if speaktype.speakType == SpeakPrivateNpcToPlayer then
|
||||||
name = 'NPCs'
|
name = 'NPCs'
|
||||||
end
|
end
|
||||||
|
|
||||||
local privateTab = Console.getTab(name)
|
local privateTab = Console.getTab(name)
|
||||||
if privateTab == nil then
|
if privateTab == nil then
|
||||||
if Options.showPrivateMessagesInConsole then
|
if Options.showPrivateMessagesInConsole or (isPrivateCommand and not privateTab) then
|
||||||
privateTab = Console.getTab('Default')
|
privateTab = Console.getTab('Default')
|
||||||
else
|
else
|
||||||
privateTab = Console.addTab(name, false)
|
privateTab = Console.addTab(name, false)
|
||||||
|
@ -145,7 +151,11 @@ end
|
||||||
|
|
||||||
function Console.addText(text, speaktype, tabName)
|
function Console.addText(text, speaktype, tabName)
|
||||||
local tab = Console.getTab(tabName)
|
local tab = Console.getTab(tabName)
|
||||||
Console.addTabText(text, speaktype, tab)
|
if tab ~= nil then
|
||||||
|
Console.addTabText(text, speaktype, tab)
|
||||||
|
else
|
||||||
|
print("Error","Trying to addText on tabName: " .. tabName)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Console.addTabText(text, speaktype, tab)
|
function Console.addTabText(text, speaktype, tab)
|
||||||
|
@ -172,6 +182,33 @@ function Console.sendCurrentMessage()
|
||||||
-- get current channel
|
-- get current channel
|
||||||
local tab = Console.getCurrentTab()
|
local tab = Console.getCurrentTab()
|
||||||
|
|
||||||
|
-- handling chat commands
|
||||||
|
local chatCommandSayMode
|
||||||
|
local chatCommandPrivate
|
||||||
|
|
||||||
|
local chatCommandMessage = message:match("^%#y (.*)")
|
||||||
|
if chatCommandMessage ~= nil then chatCommandSayMode = 'yell' end -- player used yell command
|
||||||
|
message = chatCommandMessage or message
|
||||||
|
|
||||||
|
local chatCommandMessage = message:match("^%#w (.*)")
|
||||||
|
if chatCommandMessage ~= nil then chatCommandSayMode = 'whisper' end -- player used whisper
|
||||||
|
message = chatCommandMessage or message
|
||||||
|
|
||||||
|
local findIni, findEnd, chatCommandInitial, chatCommandPrivate, chatCommandEnd, chatCommandMessage = message:find("([%*%@])(.+)([%*%@])(.*)")
|
||||||
|
if findIni ~= nil and findIni == 1 then -- player used private chat command
|
||||||
|
if chatCommandInitial == chatCommandEnd then
|
||||||
|
chatCommandPrivateRepeat = false
|
||||||
|
if chatCommandInitial == "*" then
|
||||||
|
consoleLineEdit:setText('*'.. chatCommandPrivate .. '* ')
|
||||||
|
end
|
||||||
|
chatCommandPrivate = chatCommandPrivate
|
||||||
|
message = chatCommandMessage:trim()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
message = message:gsub("^(%s*)(.*)","%2") -- remove space characters from message init
|
||||||
|
if #message == 0 then return end
|
||||||
|
|
||||||
-- when talking on server log, the message goes to default channel
|
-- when talking on server log, the message goes to default channel
|
||||||
local name = tab:getText()
|
local name = tab:getText()
|
||||||
if name == 'Server Log' then
|
if name == 'Server Log' then
|
||||||
|
@ -180,9 +217,10 @@ function Console.sendCurrentMessage()
|
||||||
end
|
end
|
||||||
local speaktypedesc
|
local speaktypedesc
|
||||||
|
|
||||||
if tab.channelId then
|
if tab.channelId and not chatCommandPrivate then
|
||||||
if tab.channelId == 0 then
|
if tab.channelId == 0 then
|
||||||
speaktypedesc = 'say'
|
speaktypedesc = chatCommandSayMode or SayModes[consolePanel:getChildById('sayModeButton').sayMode].speakTypeDesc
|
||||||
|
if speaktypedesc ~= 'say' then Console.sayModeChange(2) end -- head back to say mode
|
||||||
else
|
else
|
||||||
speaktypedesc = 'channelYellow'
|
speaktypedesc = 'channelYellow'
|
||||||
end
|
end
|
||||||
|
@ -190,21 +228,39 @@ function Console.sendCurrentMessage()
|
||||||
Game.talkChannel(SpeakTypesSettings[speaktypedesc].speakType, tab.channelId, message)
|
Game.talkChannel(SpeakTypesSettings[speaktypedesc].speakType, tab.channelId, message)
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
if tab.npcChat then
|
local isPrivateCommand = false
|
||||||
|
if chatCommandPrivate then
|
||||||
|
speaktypedesc = 'privatePlayerToPlayer'
|
||||||
|
name = chatCommandPrivate
|
||||||
|
isPrivateCommand = true
|
||||||
|
elseif tab.npcChat then
|
||||||
speaktypedesc = 'privatePlayerToNpc'
|
speaktypedesc = 'privatePlayerToNpc'
|
||||||
else
|
else
|
||||||
speaktypedesc = 'privatePlayerToPlayer'
|
speaktypedesc = 'privatePlayerToPlayer'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local speaktype = SpeakTypesSettings[speaktypedesc]
|
local speaktype = SpeakTypesSettings[speaktypedesc]
|
||||||
local player = Game.getLocalPlayer()
|
local player = Game.getLocalPlayer()
|
||||||
Game.talkPrivate(speaktype.speakType, name, message)
|
Game.talkPrivate(speaktype.speakType, name, message)
|
||||||
|
|
||||||
message = applyMessagePrefixies(player:getName(), player:getLevel(), message)
|
message = applyMessagePrefixies(player:getName(), player:getLevel(), message)
|
||||||
Console.addPrivateText(message, speaktype, name)
|
Console.addPrivateText(message, speaktype, name, isPrivateCommand)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Console.sayModeChange(sayMode)
|
||||||
|
local buttom = consolePanel:getChildById('sayModeButton')
|
||||||
|
if sayMode == nil then
|
||||||
|
sayMode = buttom.sayMode + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
if sayMode > #SayModes then sayMode = 1 end
|
||||||
|
|
||||||
|
buttom:setIcon(SayModes[sayMode].icon)
|
||||||
|
buttom.sayMode = sayMode
|
||||||
|
end
|
||||||
|
|
||||||
-- hooked events
|
-- hooked events
|
||||||
local function onCreatureSpeak(name, level, speaktype, message, channelId, creaturePos)
|
local function onCreatureSpeak(name, level, speaktype, message, channelId, creaturePos)
|
||||||
speaktype = SpeakTypes[speaktype]
|
speaktype = SpeakTypes[speaktype]
|
||||||
|
@ -213,7 +269,7 @@ local function onCreatureSpeak(name, level, speaktype, message, channelId, creat
|
||||||
message = applyMessagePrefixies(name, level, message)
|
message = applyMessagePrefixies(name, level, message)
|
||||||
|
|
||||||
if speaktype.private then
|
if speaktype.private then
|
||||||
Console.addPrivateText(message, speaktype, name)
|
Console.addPrivateText(message, speaktype, name, false)
|
||||||
else
|
else
|
||||||
Console.addText(message, speaktype, channels[channelId])
|
Console.addText(message, speaktype, channels[channelId])
|
||||||
end
|
end
|
||||||
|
@ -230,11 +286,9 @@ local function onOpenPrivateChannel(receiver)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function onChannelList(channelList)
|
local function doChannelListSubmit(channelsWindow)
|
||||||
local channelsWindow = displayUI('channelswindow.otui')
|
|
||||||
local channelListPanel = channelsWindow:getChildById('channelList')
|
local channelListPanel = channelsWindow:getChildById('channelList')
|
||||||
channelsWindow.onEnter = function(self)
|
local openPrivateChannelWith = channelsWindow:getChildById('openPrivateChannelWith'):getText()
|
||||||
local openPrivateChannelWith = channelsWindow:getChildById('openPrivateChannelWith'):getText()
|
|
||||||
if openPrivateChannelWith ~= '' then
|
if openPrivateChannelWith ~= '' then
|
||||||
Game.openPrivateChannel(openPrivateChannelWith)
|
Game.openPrivateChannel(openPrivateChannelWith)
|
||||||
else
|
else
|
||||||
|
@ -242,8 +296,14 @@ local function onChannelList(channelList)
|
||||||
if not selectedChannelLabel then return end
|
if not selectedChannelLabel then return end
|
||||||
Game.joinChannel(selectedChannelLabel.channelId)
|
Game.joinChannel(selectedChannelLabel.channelId)
|
||||||
end
|
end
|
||||||
channelsWindow:destroy()
|
channelsWindow:destroy()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function onChannelList(channelList)
|
||||||
|
local channelsWindow = displayUI('channelswindow.otui')
|
||||||
|
local channelListPanel = channelsWindow:getChildById('channelList')
|
||||||
|
connect(channelsWindow, { onEnter = function () doChannelListSubmit(channelsWindow) end } )
|
||||||
|
|
||||||
for k,v in pairs(channelList) do
|
for k,v in pairs(channelList) do
|
||||||
local channelId = v[1]
|
local channelId = v[1]
|
||||||
local channelName = v[2]
|
local channelName = v[2]
|
||||||
|
@ -252,6 +312,9 @@ local function onChannelList(channelList)
|
||||||
local label = createWidget('ChannelListLabel', channelListPanel)
|
local label = createWidget('ChannelListLabel', channelListPanel)
|
||||||
label.channelId = channelId
|
label.channelId = channelId
|
||||||
label:setText(channelName)
|
label:setText(channelName)
|
||||||
|
|
||||||
|
label:setPhantom(false)
|
||||||
|
connect(label, { onMouseDoubleClick = function () doChannelListSubmit(channelsWindow) end } )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -74,11 +74,14 @@ Panel
|
||||||
ConsoleButton
|
ConsoleButton
|
||||||
id: sayModeButton
|
id: sayModeButton
|
||||||
icon: /core_styles/icons/say.png
|
icon: /core_styles/icons/say.png
|
||||||
|
tooltip: Adjust volume
|
||||||
|
&sayMode: 2
|
||||||
size: 20 20
|
size: 20 20
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
margin-left: 6
|
margin-left: 6
|
||||||
margin-bottom: 6
|
margin-bottom: 6
|
||||||
|
@onClick: Console.sayModeChange()
|
||||||
|
|
||||||
LineEdit
|
LineEdit
|
||||||
id: consoleLineEdit
|
id: consoleLineEdit
|
||||||
|
|
|
@ -60,10 +60,6 @@ bool UIGame::onKeyPress(uchar keyCode, int keyboardModifiers, bool wouldFilter)
|
||||||
return true;
|
return true;
|
||||||
} else if(wouldFilter) {
|
} else if(wouldFilter) {
|
||||||
return false;
|
return false;
|
||||||
} else if(keyCode == Fw::KeyReturn || keyCode == Fw::KeyEnter) {
|
|
||||||
g_game.talk(chatLineEdit->getText());
|
|
||||||
chatLineEdit->clearText();
|
|
||||||
return true;
|
|
||||||
} else if(keyCode == Fw::KeyDelete) {
|
} else if(keyCode == Fw::KeyDelete) {
|
||||||
chatLineEdit->removeCharacter(true);
|
chatLineEdit->removeCharacter(true);
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in New Issue