diff options
Diffstat (limited to 'src/client.cpp')
-rw-r--r-- | src/client.cpp | 86 |
1 files changed, 52 insertions, 34 deletions
diff --git a/src/client.cpp b/src/client.cpp index b63550e6..1e1d17a9 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -22,8 +22,10 @@ #include "client.h" #include "main.h" +#include "chatlog.h" #include "configuration.h" #include "emoteshortcut.h" +#include "event.h" #include "game.h" #include "itemshortcut.h" #include "keyboardconfig.h" @@ -47,10 +49,8 @@ #include "gui/sdlinput.h" #include "gui/serverdialog.h" #include "gui/setup.h" -#include "gui/theme.h" #include "gui/unregisterdialog.h" #include "gui/updatewindow.h" -#include "gui/userpalette.h" #include "gui/worldselectdialog.h" #include "gui/widgets/button.h" @@ -69,8 +69,11 @@ #include "resources/image.h" #include "resources/itemdb.h" #include "resources/monsterdb.h" +#include "resources/specialdb.h" #include "resources/npcdb.h" #include "resources/resourcemanager.h" +#include "resources/theme.h" +#include "resources/userpalette.h" #include "utils/gettext.h" #include "utils/mkdir.h" @@ -111,6 +114,7 @@ Configuration config; /**< XML file configuration reader */ Configuration branding; /**< XML branding information reader */ Configuration paths; /**< XML default paths information reader */ Logger *logger; /**< Log object */ +ChatLogger *chatLogger; /**< Chat log object */ KeyboardConfig keyboard; UserPalette *userPalette; @@ -215,14 +219,21 @@ Client::Client(const Options &options): if (!options.brandingPath.empty()) { branding.init(options.brandingPath); + branding.setDefaultValues(getBrandingDefaults()); } initHomeDir(); initConfiguration(); + chatLogger = new ChatLogger; + if (options.chatLogDir == "") + chatLogger->setLogDir(mLocalDataDir + std::string("/logs/")); + else + chatLogger->setLogDir(options.chatLogDir); + // Configure logger logger->setLogFile(mLocalDataDir + std::string("/mana.log")); - logger->setLogToStandardOut(config.getValue("logToStandardOut", 0)); + logger->setLogToStandardOut(config.getBoolValue("logToStandardOut")); // Log the mana version logger->log("Mana %s", FULL_VERSION); @@ -326,11 +337,11 @@ Client::Client(const Options &options): graphics = new Graphics; #endif - const int width = (int) config.getValue("screenwidth", defaultScreenWidth); - const int height = (int) config.getValue("screenheight", defaultScreenHeight); + const int width = config.getIntValue("screenwidth"); + const int height = config.getIntValue("screenheight"); const int bpp = 0; - const bool fullscreen = ((int) config.getValue("screen", 0) == 1); - const bool hwaccel = ((int) config.getValue("hwaccel", 0) == 1); + const bool fullscreen = config.getBoolValue("screen"); + const bool hwaccel = config.getBoolValue("hwaccel"); // Try to set the desired video mode if (!graphics->setVideoMode(width, height, bpp, fullscreen, hwaccel)) @@ -353,13 +364,11 @@ Client::Client(const Options &options): // Initialize sound engine try { - if (config.getValue("sound", 0) == 1) + if (config.getBoolValue("sound")) sound.init(); - sound.setSfxVolume((int) config.getValue("sfxVolume", - defaultSfxVolume)); - sound.setMusicVolume((int) config.getValue("musicVolume", - defaultMusicVolume)); + sound.setSfxVolume(config.getIntValue("sfxVolume")); + sound.setMusicVolume(config.getIntValue("musicVolume")); } catch (const char *err) { @@ -384,25 +393,25 @@ Client::Client(const Options &options): mCurrentServer.port = options.serverPort; loginData.username = options.username; loginData.password = options.password; - loginData.remember = config.getValue("remember", 0); + loginData.remember = config.getBoolValue("remember"); loginData.registerLogin = false; if (mCurrentServer.hostname.empty()) - { - mCurrentServer.hostname = branding.getValue("defaultServer", - "").c_str(); - } + mCurrentServer.hostname = branding.getValue("defaultServer","").c_str(); if (mCurrentServer.port == 0) { mCurrentServer.port = (short) branding.getValue("defaultPort", - DEFAULT_PORT); + DEFAULT_PORT); mCurrentServer.type = ServerInfo::parseType( - branding.getValue("defaultServerType", "tmwathena")); + branding.getValue("defaultServerType", "tmwathena")); } + if (chatLogger) + chatLogger->setServerName(mCurrentServer.hostname); + if (loginData.username.empty() && loginData.remember) - loginData.username = config.getValue("username", ""); + loginData.username = config.getStringValue("username"); if (mState != STATE_ERROR) mState = STATE_CHOOSE_SERVER; @@ -416,6 +425,9 @@ Client::Client(const Options &options): SDL_initFramerate(&mFpsManager); config.addListener("fpslimit", this); optionChanged("fpslimit"); + + // Initialize PlayerInfo + PlayerInfo::init(); } Client::~Client() @@ -561,10 +573,8 @@ int Client::exec() - 3, 3); top->add(mSetupButton); - int screenWidth = (int) config.getValue("screenwidth", - defaultScreenWidth); - int screenHeight = (int) config.getValue("screenheight", - defaultScreenHeight); + int screenWidth = config.getIntValue("screenwidth"); + int screenHeight = config.getIntValue("screenheight"); mDesktop->setSize(screenWidth, screenHeight); } @@ -576,9 +586,12 @@ int Client::exec() if (mState != mOldState) { - Net::GeneralHandler *generalHandler = Net::getGeneralHandler(); - if (generalHandler) - generalHandler->stateChanged(mOldState, mState); + { + Mana::Event event("StateChange"); + event.setInt("oldState", mOldState); + event.setInt("newState", mState); + event.trigger("Client"); + } if (mOldState == STATE_GAME) { @@ -730,17 +743,21 @@ int Client::exec() // Read default paths file 'data/paths.xml' paths.init("paths.xml", true); + paths.setDefaultValues(getPathsDefaults()); // Load XML databases ColorDB::load(); ItemDB::load(); Being::load(); // Hairstyles MonsterDB::load(); + SpecialDB::load(); NPCDB::load(); EmoteDB::load(); StatusEffect::load(); Units::loadUnits(); + ActorSprite::load(); + mDesktop->reloadWallpaper(); mState = STATE_GET_CHARACTERS; @@ -766,7 +783,7 @@ int Client::exec() mOptions.character, CharSelectDialog::Choose)) { ((CharSelectDialog*) mCurrentDialog)->selectByName( - config.getValue("lastCharacter", ""), + config.getStringValue("lastCharacter"), mOptions.chooseDefault ? CharSelectDialog::Choose : CharSelectDialog::Focus); @@ -978,7 +995,7 @@ int Client::exec() void Client::optionChanged(const std::string &name) { - const int fpsLimit = (int) config.getValue("fpslimit", 60); + const int fpsLimit = config.getIntValue("fpslimit"); mLimitFps = fpsLimit > 0; if (mLimitFps) SDL_setFramerate(&mFpsManager, fpsLimit); @@ -1129,6 +1146,7 @@ void Client::initConfiguration() { fclose(configFile); config.init(configPath); + config.setDefaultValues(getConfigDefaults()); } } @@ -1143,7 +1161,7 @@ void Client::initUpdatesDir() // If updatesHost is currently empty, fill it from config file if (mUpdateHost.empty()) { - mUpdateHost = config.getValue("updatehost", ""); + mUpdateHost = config.getStringValue("updatehost"); } // Don't go out of range int he next check @@ -1151,7 +1169,7 @@ void Client::initUpdatesDir() return; // Remove any trailing slash at the end of the update host - if (mUpdateHost.at(mUpdateHost.size() - 1) == '/') + if (!mUpdateHost.empty() && mUpdateHost.at(mUpdateHost.size() - 1) == '/') mUpdateHost.resize(mUpdateHost.size() - 1); // Parse out any "http://" or "ftp://", and set the updates directory @@ -1159,7 +1177,7 @@ void Client::initUpdatesDir() pos = mUpdateHost.find("://"); if (pos != mUpdateHost.npos) { - if (pos + 3 < mUpdateHost.length()) + if (pos + 3 < mUpdateHost.length() && !mUpdateHost.empty()) { updates << "updates/" << mUpdateHost.substr(pos + 3); mUpdatesDir = updates.str(); @@ -1221,7 +1239,7 @@ void Client::initScreenshotDir() else { std::string configScreenshotDir = - config.getValue("screenshotDirectory", ""); + config.getStringValue("screenshotDirectory"); if (!configScreenshotDir.empty()) mScreenshotDir = configScreenshotDir; else @@ -1236,7 +1254,7 @@ void Client::initScreenshotDir() } config.setValue("screenshotDirectory", mScreenshotDir); - if (config.getValue("useScreenshotDirectorySuffix", true)) + if (config.getBoolValue("useScreenshotDirectorySuffix")) { std::string configScreenshotSuffix = config.getValue("screenshotDirectorySuffix", |