From 90312965bc8533f2c54d8eb2b548cb228d866cc9 Mon Sep 17 00:00:00 2001 From: Eduardo Bart Date: Tue, 31 Jul 2012 01:09:55 -0300 Subject: [PATCH] Avoid spr loading freeze when logging --- modules/client/client.lua | 6 ++++++ modules/client_entergame/entergame.lua | 14 +++++--------- modules/corelib/settings.lua | 4 ++-- modules/game_tibiafiles/tibiafiles.lua | 8 +++++--- modules/game_tibiafiles/tibiafiles.otmod | 1 + src/otclient/game.cpp | 9 ++++++--- src/otclient/game.h | 4 ++-- 7 files changed, 27 insertions(+), 19 deletions(-) diff --git a/modules/client/client.lua b/modules/client/client.lua index 0c5cd450..d5489fd1 100644 --- a/modules/client/client.lua +++ b/modules/client/client.lua @@ -37,6 +37,11 @@ function Client.init() g_window.setIcon(resolvepath('clienticon.png')) g_keyboard.bindKeyDown('Ctrl+Shift+R', Client.reloadScripts) + -- load default client version + local clientVersion = g_settings.getInteger('client-version') + if not clientVersion or clientVersion == 0 then clientVersion = 960 end + g_game.setClientVersion(clientVersion) + connect(g_app, { onRun = function() -- Play startup music (The Silver Tree, by Mattias Westlund) @@ -53,5 +58,6 @@ function Client.terminate() g_settings.set('window-size', g_window.getUnmaximizedSize()) g_settings.set('window-pos', g_window.getUnmaximizedPos()) g_settings.set('window-maximized', g_window.isMaximized()) + g_settings.set('client-version', g_game.getClientVersion()) Client = nil end diff --git a/modules/client_entergame/entergame.lua b/modules/client_entergame/entergame.lua index 09ef796e..b259b296 100644 --- a/modules/client_entergame/entergame.lua +++ b/modules/client_entergame/entergame.lua @@ -67,11 +67,9 @@ function EnterGame.init() local host = g_settings.get('host') local port = g_settings.get('port') local autologin = g_settings.getBoolean('autologin') - local protocol = g_settings.getInteger('protocol', 860) + local clientVersion = g_game.getClientVersion() - if not protocol or protocol == 0 then - protocol = 860 - end + if not clientVersion or clientVersion == 0 then clientVersion = 960 end if port == nil or port == 0 then port = 7171 end @@ -87,7 +85,7 @@ function EnterGame.init() for _i, proto in pairs(g_game.getSupportedProtocols()) do protocolBox:addOption(proto) end - protocolBox:setCurrentOption(protocol) + protocolBox:setCurrentOption(clientVersion) -- only open entergame when app starts if not g_app.isRunning() then @@ -142,7 +140,7 @@ function EnterGame.doLogin() G.password = enterGame:getChildById('accountPasswordTextEdit'):getText() G.host = enterGame:getChildById('serverHostTextEdit'):getText() G.port = tonumber(enterGame:getChildById('serverPortTextEdit'):getText()) - local protocol = tonumber(protocolBox:getText()) + local clientVersion = tonumber(protocolBox:getText()) EnterGame.hide() if g_game.isOnline() then @@ -153,7 +151,6 @@ function EnterGame.doLogin() g_settings.set('host', G.host) g_settings.set('port', G.port) - g_settings.set('protocol', protocol) local protocolLogin = ProtocolLogin.create() protocolLogin.onError = onError @@ -168,8 +165,7 @@ function EnterGame.doLogin() end }) g_game.chooseRsa(G.host) - g_game.setClientVersion(protocol) - modules.game_tibiafiles.load() + g_game.setClientVersion(clientVersion) protocolLogin:login(G.host, G.port, G.account, G.password) end diff --git a/modules/corelib/settings.lua b/modules/corelib/settings.lua index 62ebafb5..adabc111 100644 --- a/modules/corelib/settings.lua +++ b/modules/corelib/settings.lua @@ -51,12 +51,12 @@ function g_settings.getString(key, default) end function g_settings.getInteger(key, default) - local v = tonumber(g_settings.get(key, default)) or 1 + local v = tonumber(g_settings.get(key, default)) or 0 return v end function g_settings.getNumber(key, default) - local v = tonumber(g_settings.get(key, default)) or 1 + local v = tonumber(g_settings.get(key, default)) or 0 return v end diff --git a/modules/game_tibiafiles/tibiafiles.lua b/modules/game_tibiafiles/tibiafiles.lua index 2fcddefc..6ec5677f 100644 --- a/modules/game_tibiafiles/tibiafiles.lua +++ b/modules/game_tibiafiles/tibiafiles.lua @@ -1,7 +1,9 @@ function init() - if g_game.getClientVersion() ~= 0 then - load() - end + connect(g_game, { onClientVersionChange = load }) +end + +function terminate() + disconnect(g_game, { onClientVersionChange = load }) end function load() diff --git a/modules/game_tibiafiles/tibiafiles.otmod b/modules/game_tibiafiles/tibiafiles.otmod index e15d9480..a91ffd70 100644 --- a/modules/game_tibiafiles/tibiafiles.otmod +++ b/modules/game_tibiafiles/tibiafiles.otmod @@ -5,3 +5,4 @@ Module sandboxed: true scripts: [tibiafiles.lua] @onLoad: init() + @onUnload: terminate() diff --git a/src/otclient/game.cpp b/src/otclient/game.cpp index a8f5516f..2803bfff 100644 --- a/src/otclient/game.cpp +++ b/src/otclient/game.cpp @@ -39,7 +39,7 @@ Game g_game; Game::Game() { resetGameStates(); - m_protocolVersion = 0; + m_clientVersion = 0; } void Game::terminate() @@ -430,7 +430,7 @@ void Game::loginWorld(const std::string& account, const std::string& password, c if(m_protocolGame || isOnline()) stdext::throw_exception("Unable to login into a world while already online or logging."); - if(m_protocolVersion == 0) + if(m_clientVersion == 0) stdext::throw_exception("Must set a valid game protocol version before logging."); // reset the new game state @@ -1123,6 +1123,9 @@ bool Game::canPerformGameAction() void Game::setClientVersion(int version) { + if(m_clientVersion == version) + return; + if(isOnline()) stdext::throw_exception("Unable to change client version while online"); @@ -1175,7 +1178,7 @@ void Game::setClientVersion(int version) enableFeature(Otc::GameOfflineTrainingTime); } - m_protocolVersion = version; + m_clientVersion = version; Proto::buildMessageModesMap(version); diff --git a/src/otclient/game.h b/src/otclient/game.h index 7252fc02..a440687c 100644 --- a/src/otclient/game.h +++ b/src/otclient/game.h @@ -242,7 +242,7 @@ public: bool getFeature(Otc::GameFeature feature) { return m_features.test(feature); } void setClientVersion(int version); - int getClientVersion() { return m_protocolVersion; } + int getClientVersion() { return m_clientVersion; } bool canPerformGameAction(); bool checkBotProtection(); @@ -297,7 +297,7 @@ private: std::string m_characterName; std::string m_worldName; std::bitset m_features; - int m_protocolVersion; + int m_clientVersion; }; extern Game g_game;