Fixes! Closes #235 and more:

* Hotkeys now save by server & player rather than just player
* Added double clicking to module dialog options
* Fixed a bug in the modal dialog for > pv970 (protocol changed)
* Fixed a login bug for pv970.
WARNING: Will remove all your current hotkeys.
This commit is contained in:
BeniS 2013-01-23 13:15:46 +13:00
parent 27d5506262
commit caf86a9fc6
5 changed files with 30 additions and 12 deletions

View File

@ -53,6 +53,8 @@ function show()
if g_game.getFeature(GameSpellList) then if g_game.getFeature(GameSpellList) then
cooldownWindow:show() cooldownWindow:show()
cooldownButton:show() cooldownButton:show()
else
hide()
end end
end end

View File

@ -91,10 +91,14 @@ function load()
local hotkeySettings = g_settings.getNode('HotkeysManager') local hotkeySettings = g_settings.getNode('HotkeysManager')
local hasCombos = false local hasCombos = false
if not table.empty(hotkeySettings) then if not table.empty(hotkeySettings) then
local playerHotkeySettings = hotkeySettings[g_game.getLocalPlayer():getName()] local serverHotkeys = hotkeySettings[G.host]
if not table.empty(playerHotkeySettings) then local hotkeys
for k, setting in pairs(playerHotkeySettings) do if not table.empty(serverHotkeys) then
hotkeys = serverHotkeys[g_game.getLocalPlayer():getName()]
end
if not table.empty(hotkeys) then
for k, setting in pairs(hotkeys) do
addKeyCombo(nil, setting.keyCombo, setting) addKeyCombo(nil, setting.keyCombo, setting)
hasCombos = true hasCombos = true
end end
@ -109,11 +113,15 @@ end
function save() function save()
local char = g_game.getLocalPlayer():getName() local char = g_game.getLocalPlayer():getName()
local server = G.host
local hotkeySettings = g_settings.getNode('HotkeysManager') or {} local hotkeySettings = g_settings.getNode('HotkeysManager') or {}
hotkeySettings[char] = {} hotkeySettings[server] = {}
hotkeySettings[server][char] = {}
for i=1, currentHotkeysList:getChildCount() do for i=1, currentHotkeysList:getChildCount() do
local child = currentHotkeysList:getChildByIndex(i) local child = currentHotkeysList:getChildByIndex(i)
table.insert(hotkeySettings[char], { table.insert(hotkeySettings[server][char], {
keyCombo = child.keyCombo, keyCombo = child.keyCombo,
autoSend = child.autoSend, autoSend = child.autoSend,
itemId = child.itemId, itemId = child.itemId,

View File

@ -59,6 +59,8 @@ function onModalDialog(id, title, message, enterId, enterText, escapeId, escapeT
g_game.answerModalDialog(id, escapeId, choiceList:getFocusedChild().choiceId) g_game.answerModalDialog(id, escapeId, choiceList:getFocusedChild().choiceId)
destroy() destroy()
end end
choiceList.onDoubleClick = enterFunc
enterButton.onClick = enterFunc enterButton.onClick = enterFunc
modalDialog.onEnter = enterFunc modalDialog.onEnter = enterFunc

View File

@ -1500,20 +1500,26 @@ void ProtocolGame::parseShowModalDialog(const InputMessagePtr& msg)
choiceList.push_back(std::make_tuple(id, value)); choiceList.push_back(std::make_tuple(id, value));
} }
int enterButton = msg->getU8(); int enterButton, escapeButton;
int escapeButton = msg->getU8(); if(g_game.getProtocolVersion() > 970) {
escapeButton = msg->getU8();
enterButton = msg->getU8();
}
else {
enterButton = msg->getU8();
escapeButton = msg->getU8();
}
msg->getU8(); // popup value (no clue what it is for) msg->getU8(); // popup value (no clue what it is for)
std::map<int, std::string>::iterator itEnter = buttonList.find(enterButton); std::map<int, std::string>::iterator itEnter = buttonList.find(enterButton);
if(itEnter == buttonList.end()) if(itEnter == buttonList.end()) {
{
g_logger.info(stdext::format("Enter button does not exist for dialog id: %d", id)); g_logger.info(stdext::format("Enter button does not exist for dialog id: %d", id));
return; return;
} }
std::map<int, std::string >::iterator itEscape = buttonList.find(escapeButton); std::map<int, std::string >::iterator itEscape = buttonList.find(escapeButton);
if(itEscape == buttonList.end()) if(itEscape == buttonList.end()) {
{
g_logger.info(stdext::format("Escape button does not exist for dialog id: %d", id)); g_logger.info(stdext::format("Escape button does not exist for dialog id: %d", id));
return; return;
} }

View File

@ -64,7 +64,7 @@ void ProtocolGame::sendLoginPacket(uint challengeTimestamp, uint8 challengeRando
msg->addU16(g_game.getProtocolVersion()); msg->addU16(g_game.getProtocolVersion());
if(g_game.getProtocolVersion() >= 970) { if(g_game.getProtocolVersion() >= 971) {
msg->addU32(g_game.getClientVersion()); msg->addU32(g_game.getClientVersion());
msg->addU8(0); // clientType msg->addU8(0); // clientType
} }