Avoid spr loading freeze when logging

This commit is contained in:
Eduardo Bart 2012-07-31 01:09:55 -03:00
parent 49a8c750f9
commit 90312965bc
7 changed files with 27 additions and 19 deletions

View File

@ -37,6 +37,11 @@ function Client.init()
g_window.setIcon(resolvepath('clienticon.png')) g_window.setIcon(resolvepath('clienticon.png'))
g_keyboard.bindKeyDown('Ctrl+Shift+R', Client.reloadScripts) 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 = connect(g_app, { onRun =
function() function()
-- Play startup music (The Silver Tree, by Mattias Westlund) -- 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-size', g_window.getUnmaximizedSize())
g_settings.set('window-pos', g_window.getUnmaximizedPos()) g_settings.set('window-pos', g_window.getUnmaximizedPos())
g_settings.set('window-maximized', g_window.isMaximized()) g_settings.set('window-maximized', g_window.isMaximized())
g_settings.set('client-version', g_game.getClientVersion())
Client = nil Client = nil
end end

View File

@ -67,11 +67,9 @@ function EnterGame.init()
local host = g_settings.get('host') local host = g_settings.get('host')
local port = g_settings.get('port') local port = g_settings.get('port')
local autologin = g_settings.getBoolean('autologin') 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 if not clientVersion or clientVersion == 0 then clientVersion = 960 end
protocol = 860
end
if port == nil or port == 0 then port = 7171 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 for _i, proto in pairs(g_game.getSupportedProtocols()) do
protocolBox:addOption(proto) protocolBox:addOption(proto)
end end
protocolBox:setCurrentOption(protocol) protocolBox:setCurrentOption(clientVersion)
-- only open entergame when app starts -- only open entergame when app starts
if not g_app.isRunning() then if not g_app.isRunning() then
@ -142,7 +140,7 @@ function EnterGame.doLogin()
G.password = enterGame:getChildById('accountPasswordTextEdit'):getText() G.password = enterGame:getChildById('accountPasswordTextEdit'):getText()
G.host = enterGame:getChildById('serverHostTextEdit'):getText() G.host = enterGame:getChildById('serverHostTextEdit'):getText()
G.port = tonumber(enterGame:getChildById('serverPortTextEdit'):getText()) G.port = tonumber(enterGame:getChildById('serverPortTextEdit'):getText())
local protocol = tonumber(protocolBox:getText()) local clientVersion = tonumber(protocolBox:getText())
EnterGame.hide() EnterGame.hide()
if g_game.isOnline() then if g_game.isOnline() then
@ -153,7 +151,6 @@ function EnterGame.doLogin()
g_settings.set('host', G.host) g_settings.set('host', G.host)
g_settings.set('port', G.port) g_settings.set('port', G.port)
g_settings.set('protocol', protocol)
local protocolLogin = ProtocolLogin.create() local protocolLogin = ProtocolLogin.create()
protocolLogin.onError = onError protocolLogin.onError = onError
@ -168,8 +165,7 @@ function EnterGame.doLogin()
end }) end })
g_game.chooseRsa(G.host) g_game.chooseRsa(G.host)
g_game.setClientVersion(protocol) g_game.setClientVersion(clientVersion)
modules.game_tibiafiles.load()
protocolLogin:login(G.host, G.port, G.account, G.password) protocolLogin:login(G.host, G.port, G.account, G.password)
end end

View File

@ -51,12 +51,12 @@ function g_settings.getString(key, default)
end end
function g_settings.getInteger(key, default) 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 return v
end end
function g_settings.getNumber(key, default) 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 return v
end end

View File

@ -1,7 +1,9 @@
function init() function init()
if g_game.getClientVersion() ~= 0 then connect(g_game, { onClientVersionChange = load })
load()
end end
function terminate()
disconnect(g_game, { onClientVersionChange = load })
end end
function load() function load()

View File

@ -5,3 +5,4 @@ Module
sandboxed: true sandboxed: true
scripts: [tibiafiles.lua] scripts: [tibiafiles.lua]
@onLoad: init() @onLoad: init()
@onUnload: terminate()

View File

@ -39,7 +39,7 @@ Game g_game;
Game::Game() Game::Game()
{ {
resetGameStates(); resetGameStates();
m_protocolVersion = 0; m_clientVersion = 0;
} }
void Game::terminate() void Game::terminate()
@ -430,7 +430,7 @@ void Game::loginWorld(const std::string& account, const std::string& password, c
if(m_protocolGame || isOnline()) if(m_protocolGame || isOnline())
stdext::throw_exception("Unable to login into a world while already online or logging."); 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."); stdext::throw_exception("Must set a valid game protocol version before logging.");
// reset the new game state // reset the new game state
@ -1123,6 +1123,9 @@ bool Game::canPerformGameAction()
void Game::setClientVersion(int version) void Game::setClientVersion(int version)
{ {
if(m_clientVersion == version)
return;
if(isOnline()) if(isOnline())
stdext::throw_exception("Unable to change client version while online"); stdext::throw_exception("Unable to change client version while online");
@ -1175,7 +1178,7 @@ void Game::setClientVersion(int version)
enableFeature(Otc::GameOfflineTrainingTime); enableFeature(Otc::GameOfflineTrainingTime);
} }
m_protocolVersion = version; m_clientVersion = version;
Proto::buildMessageModesMap(version); Proto::buildMessageModesMap(version);

View File

@ -242,7 +242,7 @@ public:
bool getFeature(Otc::GameFeature feature) { return m_features.test(feature); } bool getFeature(Otc::GameFeature feature) { return m_features.test(feature); }
void setClientVersion(int version); void setClientVersion(int version);
int getClientVersion() { return m_protocolVersion; } int getClientVersion() { return m_clientVersion; }
bool canPerformGameAction(); bool canPerformGameAction();
bool checkBotProtection(); bool checkBotProtection();
@ -297,7 +297,7 @@ private:
std::string m_characterName; std::string m_characterName;
std::string m_worldName; std::string m_worldName;
std::bitset<Otc::LastGameFeature> m_features; std::bitset<Otc::LastGameFeature> m_features;
int m_protocolVersion; int m_clientVersion;
}; };
extern Game g_game; extern Game g_game;