diff --git a/modules/client/client.lua b/modules/client/client.lua index bbfb1e2a..27310144 100644 --- a/modules/client/client.lua +++ b/modules/client/client.lua @@ -37,11 +37,6 @@ function Client.init() g_window.setIcon(resolvepath('clienticon.png')) g_keyboard.bindKeyDown('Ctrl+Shift+R', Client.reloadScripts) - local clientVersion = g_settings.getInteger('client-version') - if clientVersion ~= 0 then - g_game.setClientVersion(clientVersion) - end - connect(g_app, { onRun = function() -- Play startup music (The Silver Tree, by Mattias Westlund) @@ -58,6 +53,11 @@ 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()) + + local clientVersion = g_game.getClientVersion() + if clientVersion ~= 0 then + g_settings.set('client-version', clientVersion) + end + Client = nil end diff --git a/modules/client_entergame/entergame.lua b/modules/client_entergame/entergame.lua index 69c7efb2..ddaed89f 100644 --- a/modules/client_entergame/entergame.lua +++ b/modules/client_entergame/entergame.lua @@ -169,7 +169,14 @@ function EnterGame.doLogin() g_game.chooseRsa(G.host) g_game.setClientVersion(clientVersion) - protocolLogin:login(G.host, G.port, G.account, G.password) + + if modules.game_tibiafiles.isLoaded() then + protocolLogin:login(G.host, G.port, G.account, G.password) + else + loadBox:destroy() + loadBox = nil + EnterGame.show() + end end function EnterGame.displayMotd() diff --git a/modules/game_tibiafiles/tibiafiles.lua b/modules/game_tibiafiles/tibiafiles.lua index c2d4689d..32148504 100644 --- a/modules/game_tibiafiles/tibiafiles.lua +++ b/modules/game_tibiafiles/tibiafiles.lua @@ -1,4 +1,5 @@ filename = 'Tibia' +loaded = false function init() connect(g_game, { onClientVersionChange = load }) @@ -12,6 +13,10 @@ function setFileName(name) filename = name end +function isLoaded() + return loaded +end + function load() local version = g_game.getClientVersion() local datPath = resolvepath(version .. '/' .. filename .. '.dat') @@ -22,10 +27,17 @@ function load() errorMessage = errorMessage .. tr("Unable to load dat file, please place a valid dat in '%s'", datPath) .. '\n' end if not g_sprites.loadSpr(sprPath) then - errorMessage = errorMessage .. tr("Unable to load spr file, please place a valid spr in '%s'", sprPath) .. '\n' + errorMessage = errorMessage .. tr("Unable to load spr file, please place a valid spr in '%s'", sprPath) end + loaded = (errorMessage:len() == 0) + if errorMessage:len() > 0 then - displayErrorBox(tr('Error'), errorMessage) + local messageBox = displayErrorBox(tr('Error'), errorMessage) + addEvent(function() messageBox:raise() messageBox:focus() end) + + disconnect(g_game, { onClientVersionChange = load }) + g_game.setClientVersion(0) + connect(g_game, { onClientVersionChange = load }) end end diff --git a/src/otclient/const.h b/src/otclient/const.h index 1339b89f..19a55460 100644 --- a/src/otclient/const.h +++ b/src/otclient/const.h @@ -333,6 +333,7 @@ namespace Otc GameChargeableItems = 25, GameOfflineTrainingTime = 26, GamePurseSlot = 27, + GameFormatCreatureName = 28, // 23-50 unused yet // 51-100 reserved to be defined in lua LastGameFeature = 101 diff --git a/src/otclient/game.cpp b/src/otclient/game.cpp index 24efaa5a..d3b6308f 100644 --- a/src/otclient/game.cpp +++ b/src/otclient/game.cpp @@ -1128,10 +1128,11 @@ void Game::setClientVersion(int version) if(isOnline()) stdext::throw_exception("Unable to change client version while online"); - if(version < 810 || version > 961) + if(version != 0 && (version < 810 || version > 961)) stdext::throw_exception(stdext::format("Protocol version %d not supported", version)); m_features.reset(); + enableFeature(Otc::GameFormatCreatureName); if(version <= 810) { enableFeature(Otc::GameChargeableItems); @@ -1203,7 +1204,7 @@ void Game::setFollowingCreature(const CreaturePtr& creature) std::string Game::formatCreatureName(const std::string& name) { std::string formatedName = name; - if(m_isCreatureNameFormatEnabled && name.length() > 0) + if(getFeature(Otc::GameFormatCreatureName) && name.length() > 0) formatedName[0] = stdext::upchar(formatedName[0]); return formatedName; } diff --git a/src/otclient/game.h b/src/otclient/game.h index d468d02b..cffadf98 100644 --- a/src/otclient/game.h +++ b/src/otclient/game.h @@ -269,8 +269,6 @@ public: std::vector getGMActions() { return m_gmActions; } std::string formatCreatureName(const std::string &name); - void enableCreatureNameFormat() { m_isCreatureNameFormatEnabled = true; } - void disableCreatureNameFormat() { m_isCreatureNameFormatEnabled = false; } protected: void enableBotCall() { m_denyBotCall = false; } @@ -287,7 +285,6 @@ private: std::map m_containers; std::map m_vips; - stdext::boolean m_isCreatureNameFormatEnabled; bool m_online; bool m_denyBotCall; bool m_dead; diff --git a/src/otclient/luafunctions.cpp b/src/otclient/luafunctions.cpp index ff9b3fa6..8496077d 100644 --- a/src/otclient/luafunctions.cpp +++ b/src/otclient/luafunctions.cpp @@ -206,8 +206,6 @@ void OTClient::registerLuaFunctions() g_lua.bindSingletonFunction("g_game", "getFeature", &Game::getFeature, &g_game); g_lua.bindSingletonFunction("g_game", "setFeature", &Game::setFeature, &g_game); g_lua.bindSingletonFunction("g_game", "enableFeature", &Game::enableFeature, &g_game); - g_lua.bindSingletonFunction("g_game", "enableCreatureNameFormat", &Game::enableCreatureNameFormat, &g_game); - g_lua.bindSingletonFunction("g_game", "disableCreatureNameFormat", &Game::disableCreatureNameFormat, &g_game); g_lua.registerSingletonClass("g_shaders"); g_lua.bindSingletonFunction("g_shaders", "createShader", &ShaderManager::createShader, &g_shaders);