From 87b46efdac4355b211effbfa99d886fc4afbc2b7 Mon Sep 17 00:00:00 2001 From: Ranieri Althoff Date: Wed, 17 Apr 2024 11:25:04 -0300 Subject: [PATCH] Move config manager singleton to namespace --- src/actions.cpp | 9 +- src/combat.cpp | 3 +- src/configmanager.cpp | 29 +++-- src/configmanager.h | 261 +++++++++++++++++++--------------------- src/connection.cpp | 5 +- src/container.cpp | 4 +- src/creature.cpp | 7 +- src/database.cpp | 11 +- src/databasemanager.cpp | 8 +- src/game.cpp | 41 +++---- src/globalevent.cpp | 2 - src/house.cpp | 6 +- src/housetile.cpp | 5 +- src/iologindata.cpp | 5 +- src/iomap.h | 6 +- src/iomarket.cpp | 14 +-- src/luascript.cpp | 17 ++- src/main.cpp | 10 +- src/monster.cpp | 7 +- src/monsters.cpp | 3 +- src/otserv.cpp | 28 ++--- src/party.cpp | 3 +- src/player.cpp | 80 ++++++------ src/protocolgame.cpp | 15 ++- src/protocollogin.cpp | 17 ++- src/protocolstatus.cpp | 56 +++++---- src/script.cpp | 7 +- src/server.cpp | 5 +- src/signals.cpp | 3 +- src/spawn.cpp | 3 +- src/spells.cpp | 3 +- src/tile.cpp | 5 +- src/tools.cpp | 2 - src/vocation.h | 4 +- src/weapons.cpp | 5 +- 35 files changed, 315 insertions(+), 374 deletions(-) diff --git a/src/actions.cpp b/src/actions.cpp index e14858addd..bbce10ab9a 100644 --- a/src/actions.cpp +++ b/src/actions.cpp @@ -16,7 +16,6 @@ extern Game g_game; extern Spells* g_spells; extern Actions* g_actions; -extern ConfigManager g_config; Actions::Actions() : scriptInterface("Action Interface") { scriptInterface.initState(); } @@ -403,7 +402,7 @@ static void showUseHotkeyMessage(Player* player, const Item* item, uint32_t coun bool Actions::useItem(Player* player, const Position& pos, uint8_t index, Item* item, bool isHotkey) { - int32_t cooldown = g_config.getNumber(ConfigManager::ACTIONS_DELAY_INTERVAL); + int32_t cooldown = getNumber(ConfigManager::ACTIONS_DELAY_INTERVAL); player->setNextAction(OTSYS_TIME() + cooldown); player->sendUseItemCooldown(cooldown); if (item->isSupply()) { @@ -416,7 +415,7 @@ bool Actions::useItem(Player* player, const Position& pos, uint8_t index, Item* player->getItemTypeCount(item->getID(), subType != item->getItemCount() ? subType : -1)); } - if (g_config.getBoolean(ConfigManager::ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS)) { + if (getBoolean(ConfigManager::ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS)) { if (const HouseTile* const houseTile = dynamic_cast(item->getTile())) { if (!item->getTopParent()->getCreature() && !houseTile->getHouse()->isInvited(player)) { player->sendCancelMessage(RETURNVALUE_PLAYERISNOTINVITED); @@ -442,7 +441,7 @@ bool Actions::useItem(Player* player, const Position& pos, uint8_t index, Item* bool Actions::useItemEx(Player* player, const Position& fromPos, const Position& toPos, uint8_t toStackPos, Item* item, bool isHotkey, Creature* creature /* = nullptr*/) { - int32_t cooldown = g_config.getNumber(ConfigManager::EX_ACTIONS_DELAY_INTERVAL); + int32_t cooldown = getNumber(ConfigManager::EX_ACTIONS_DELAY_INTERVAL); player->setNextAction(OTSYS_TIME() + cooldown); player->sendUseItemCooldown(cooldown); @@ -464,7 +463,7 @@ bool Actions::useItemEx(Player* player, const Position& fromPos, const Position& player->getItemTypeCount(item->getID(), subType != item->getItemCount() ? subType : -1)); } - if (g_config.getBoolean(ConfigManager::ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS)) { + if (getBoolean(ConfigManager::ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS)) { if (const HouseTile* const houseTile = dynamic_cast(item->getTile())) { if (!item->getTopParent()->getCreature() && !houseTile->getHouse()->isInvited(player)) { player->sendCancelMessage(RETURNVALUE_PLAYERISNOTINVITED); diff --git a/src/combat.cpp b/src/combat.cpp index 30525d1382..16ebdb54e5 100644 --- a/src/combat.cpp +++ b/src/combat.cpp @@ -14,7 +14,6 @@ extern Game g_game; extern Weapons* g_weapons; -extern ConfigManager g_config; extern Events* g_events; std::vector getList(const MatrixArea& area, const Position& targetPos, const Direction dir) @@ -272,7 +271,7 @@ bool Combat::isInPvpZone(const Creature* attacker, const Creature* target) bool Combat::isProtected(const Player* attacker, const Player* target) { - uint32_t protectionLevel = g_config.getNumber(ConfigManager::PROTECTION_LEVEL); + uint32_t protectionLevel = getNumber(ConfigManager::PROTECTION_LEVEL); if (target->getLevel() < protectionLevel || attacker->getLevel() < protectionLevel) { return true; } diff --git a/src/configmanager.cpp b/src/configmanager.cpp index 718d7cfbb9..f5461005aa 100644 --- a/src/configmanager.cpp +++ b/src/configmanager.cpp @@ -25,6 +25,15 @@ extern Game g_game; namespace { +std::array string = {}; +std::array integer = {}; +std::array boolean = {}; + +using ExperienceStages = std::vector>; +ExperienceStages expStages; + +bool loaded = false; + template auto getEnv(const char* envVar, T&& defaultValue) { @@ -81,12 +90,6 @@ bool getGlobalBoolean(lua_State* L, const char* identifier, const bool defaultVa return val != 0; } -} // namespace - -ConfigManager::ConfigManager() { string[CONFIG_FILE] = "config.lua"; } - -namespace { - ExperienceStages loadLuaStages(lua_State* L) { ExperienceStages stages; @@ -161,7 +164,8 @@ bool ConfigManager::load() luaL_openlibs(L); - if (luaL_dofile(L, getString(CONFIG_FILE).c_str())) { + string[CONFIG_FILE] = "config.lua"; + if (luaL_dofile(L, string[CONFIG_FILE].data())) { std::cout << "[Error - ConfigManager::load] " << lua_tostring(L, -1) << std::endl; lua_close(L); return false; @@ -302,10 +306,9 @@ bool ConfigManager::load() return true; } -static std::string dummyStr; - -const std::string& ConfigManager::getString(string_config_t what) const +const std::string& ConfigManager::getString(string_config_t what) { + static std::string dummyStr; if (what >= LAST_STRING_CONFIG) { std::cout << "[Warning - ConfigManager::getString] Accessing invalid index: " << what << std::endl; return dummyStr; @@ -313,7 +316,7 @@ const std::string& ConfigManager::getString(string_config_t what) const return string[what]; } -int32_t ConfigManager::getNumber(integer_config_t what) const +int32_t ConfigManager::getNumber(integer_config_t what) { if (what >= LAST_INTEGER_CONFIG) { std::cout << "[Warning - ConfigManager::getNumber] Accessing invalid index: " << what << std::endl; @@ -322,7 +325,7 @@ int32_t ConfigManager::getNumber(integer_config_t what) const return integer[what]; } -bool ConfigManager::getBoolean(boolean_config_t what) const +bool ConfigManager::getBoolean(boolean_config_t what) { if (what >= LAST_BOOLEAN_CONFIG) { std::cout << "[Warning - ConfigManager::getBoolean] Accessing invalid index: " << what << std::endl; @@ -331,7 +334,7 @@ bool ConfigManager::getBoolean(boolean_config_t what) const return boolean[what]; } -float ConfigManager::getExperienceStage(uint32_t level) const +float ConfigManager::getExperienceStage(uint32_t level) { auto it = std::find_if(expStages.begin(), expStages.end(), [level](auto&& stage) { auto&& [minLevel, maxLevel, _] = stage; diff --git a/src/configmanager.h b/src/configmanager.h index d86be2a802..1930fe0b90 100644 --- a/src/configmanager.h +++ b/src/configmanager.h @@ -4,150 +4,137 @@ #ifndef FS_CONFIGMANAGER_H #define FS_CONFIGMANAGER_H -using ExperienceStages = std::vector>; +namespace ConfigManager { -class ConfigManager +enum boolean_config_t { -public: - ConfigManager(); - - enum boolean_config_t - { - ALLOW_CHANGEOUTFIT, - ONE_PLAYER_ON_ACCOUNT, - AIMBOT_HOTKEY_ENABLED, - REMOVE_RUNE_CHARGES, - REMOVE_WEAPON_AMMO, - REMOVE_WEAPON_CHARGES, - REMOVE_POTION_CHARGES, - EXPERIENCE_FROM_PLAYERS, - FREE_PREMIUM, - REPLACE_KICK_ON_LOGIN, - ALLOW_CLONES, - ALLOW_WALKTHROUGH, - BIND_ONLY_GLOBAL_ADDRESS, - OPTIMIZE_DATABASE, - MARKET_PREMIUM, - EMOTE_SPELLS, - STAMINA_SYSTEM, - WARN_UNSAFE_SCRIPTS, - CONVERT_UNSAFE_SCRIPTS, - CLASSIC_EQUIPMENT_SLOTS, - CLASSIC_ATTACK_SPEED, - SCRIPTS_CONSOLE_LOGS, - SERVER_SAVE_NOTIFY_MESSAGE, - SERVER_SAVE_CLEAN_MAP, - SERVER_SAVE_CLOSE, - SERVER_SAVE_SHUTDOWN, - ONLINE_OFFLINE_CHARLIST, - YELL_ALLOW_PREMIUM, - PREMIUM_TO_SEND_PRIVATE, - FORCE_MONSTERTYPE_LOAD, - DEFAULT_WORLD_LIGHT, - HOUSE_OWNED_BY_ACCOUNT, - CLEAN_PROTECTION_ZONES, - HOUSE_DOOR_SHOW_PRICE, - ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS, - REMOVE_ON_DESPAWN, - TWO_FACTOR_AUTH, - MANASHIELD_BREAKABLE, - CHECK_DUPLICATE_STORAGE_KEYS, - MONSTER_OVERSPAWN, - - LAST_BOOLEAN_CONFIG /* this must be the last one */ - }; - - enum string_config_t - { - MAP_NAME, - HOUSE_RENT_PERIOD, - SERVER_NAME, - OWNER_NAME, - OWNER_EMAIL, - URL, - LOCATION, - IP, - WORLD_TYPE, - MYSQL_HOST, - MYSQL_USER, - MYSQL_PASS, - MYSQL_DB, - MYSQL_SOCK, - DEFAULT_PRIORITY, - MAP_AUTHOR, - CONFIG_FILE, - - LAST_STRING_CONFIG /* this must be the last one */ - }; - - enum integer_config_t - { - SQL_PORT, - MAX_PLAYERS, - PZ_LOCKED, - DEFAULT_DESPAWNRANGE, - DEFAULT_DESPAWNRADIUS, - DEFAULT_WALKTOSPAWNRADIUS, - RATE_EXPERIENCE, - RATE_SKILL, - RATE_LOOT, - RATE_MAGIC, - RATE_SPAWN, - HOUSE_PRICE, - KILLS_TO_RED, - KILLS_TO_BLACK, - MAX_MESSAGEBUFFER, - ACTIONS_DELAY_INTERVAL, - EX_ACTIONS_DELAY_INTERVAL, - KICK_AFTER_MINUTES, - PROTECTION_LEVEL, - DEATH_LOSE_PERCENT, - STATUSQUERY_TIMEOUT, - FRAG_TIME, - WHITE_SKULL_TIME, - GAME_PORT, - LOGIN_PORT, - STATUS_PORT, - STAIRHOP_DELAY, - MARKET_OFFER_DURATION, - CHECK_EXPIRED_MARKET_OFFERS_EACH_MINUTES, - MAX_MARKET_OFFERS_AT_A_TIME_PER_PLAYER, - EXP_FROM_PLAYERS_LEVEL_RANGE, - MAX_PACKETS_PER_SECOND, - SERVER_SAVE_NOTIFY_DURATION, - YELL_MINIMUM_LEVEL, - MINIMUM_LEVEL_TO_SEND_PRIVATE, - VIP_FREE_LIMIT, - VIP_PREMIUM_LIMIT, - DEPOT_FREE_LIMIT, - DEPOT_PREMIUM_LIMIT, - QUEST_TRACKER_FREE_LIMIT, - QUEST_TRACKER_PREMIUM_LIMIT, - STAMINA_REGEN_MINUTE, - STAMINA_REGEN_PREMIUM, - - LAST_INTEGER_CONFIG /* this must be the last one */ - }; + ALLOW_CHANGEOUTFIT, + ONE_PLAYER_ON_ACCOUNT, + AIMBOT_HOTKEY_ENABLED, + REMOVE_RUNE_CHARGES, + REMOVE_WEAPON_AMMO, + REMOVE_WEAPON_CHARGES, + REMOVE_POTION_CHARGES, + EXPERIENCE_FROM_PLAYERS, + FREE_PREMIUM, + REPLACE_KICK_ON_LOGIN, + ALLOW_CLONES, + ALLOW_WALKTHROUGH, + BIND_ONLY_GLOBAL_ADDRESS, + OPTIMIZE_DATABASE, + MARKET_PREMIUM, + EMOTE_SPELLS, + STAMINA_SYSTEM, + WARN_UNSAFE_SCRIPTS, + CONVERT_UNSAFE_SCRIPTS, + CLASSIC_EQUIPMENT_SLOTS, + CLASSIC_ATTACK_SPEED, + SCRIPTS_CONSOLE_LOGS, + SERVER_SAVE_NOTIFY_MESSAGE, + SERVER_SAVE_CLEAN_MAP, + SERVER_SAVE_CLOSE, + SERVER_SAVE_SHUTDOWN, + ONLINE_OFFLINE_CHARLIST, + YELL_ALLOW_PREMIUM, + PREMIUM_TO_SEND_PRIVATE, + FORCE_MONSTERTYPE_LOAD, + DEFAULT_WORLD_LIGHT, + HOUSE_OWNED_BY_ACCOUNT, + CLEAN_PROTECTION_ZONES, + HOUSE_DOOR_SHOW_PRICE, + ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS, + REMOVE_ON_DESPAWN, + TWO_FACTOR_AUTH, + MANASHIELD_BREAKABLE, + CHECK_DUPLICATE_STORAGE_KEYS, + MONSTER_OVERSPAWN, + + LAST_BOOLEAN_CONFIG /* this must be the last one */ +}; - bool load(); +enum string_config_t +{ + MAP_NAME, + HOUSE_RENT_PERIOD, + SERVER_NAME, + OWNER_NAME, + OWNER_EMAIL, + URL, + LOCATION, + IP, + WORLD_TYPE, + MYSQL_HOST, + MYSQL_USER, + MYSQL_PASS, + MYSQL_DB, + MYSQL_SOCK, + DEFAULT_PRIORITY, + MAP_AUTHOR, + CONFIG_FILE, + + LAST_STRING_CONFIG /* this must be the last one */ +}; - const std::string& getString(string_config_t what) const; - int32_t getNumber(integer_config_t what) const; - bool getBoolean(boolean_config_t what) const; - float getExperienceStage(uint32_t level) const; +enum integer_config_t +{ + SQL_PORT, + MAX_PLAYERS, + PZ_LOCKED, + DEFAULT_DESPAWNRANGE, + DEFAULT_DESPAWNRADIUS, + DEFAULT_WALKTOSPAWNRADIUS, + RATE_EXPERIENCE, + RATE_SKILL, + RATE_LOOT, + RATE_MAGIC, + RATE_SPAWN, + HOUSE_PRICE, + KILLS_TO_RED, + KILLS_TO_BLACK, + MAX_MESSAGEBUFFER, + ACTIONS_DELAY_INTERVAL, + EX_ACTIONS_DELAY_INTERVAL, + KICK_AFTER_MINUTES, + PROTECTION_LEVEL, + DEATH_LOSE_PERCENT, + STATUSQUERY_TIMEOUT, + FRAG_TIME, + WHITE_SKULL_TIME, + GAME_PORT, + LOGIN_PORT, + STATUS_PORT, + STAIRHOP_DELAY, + MARKET_OFFER_DURATION, + CHECK_EXPIRED_MARKET_OFFERS_EACH_MINUTES, + MAX_MARKET_OFFERS_AT_A_TIME_PER_PLAYER, + EXP_FROM_PLAYERS_LEVEL_RANGE, + MAX_PACKETS_PER_SECOND, + SERVER_SAVE_NOTIFY_DURATION, + YELL_MINIMUM_LEVEL, + MINIMUM_LEVEL_TO_SEND_PRIVATE, + VIP_FREE_LIMIT, + VIP_PREMIUM_LIMIT, + DEPOT_FREE_LIMIT, + DEPOT_PREMIUM_LIMIT, + QUEST_TRACKER_FREE_LIMIT, + QUEST_TRACKER_PREMIUM_LIMIT, + STAMINA_REGEN_MINUTE, + STAMINA_REGEN_PREMIUM, + + LAST_INTEGER_CONFIG /* this must be the last one */ +}; - bool setString(string_config_t what, std::string_view value); - bool setNumber(integer_config_t what, int32_t value); - bool setBoolean(boolean_config_t what, bool value); +bool load(); -private: - std::string string[LAST_STRING_CONFIG] = {}; - int32_t integer[LAST_INTEGER_CONFIG] = {}; - bool boolean[LAST_BOOLEAN_CONFIG] = {}; +const std::string& getString(string_config_t what); +int32_t getNumber(integer_config_t what); +bool getBoolean(boolean_config_t what); +float getExperienceStage(uint32_t level); - ExperienceStages expStages = {}; +bool setString(string_config_t what, std::string_view value); +bool setNumber(integer_config_t what, int32_t value); +bool setBoolean(boolean_config_t what, bool value); - bool loaded = false; -}; +}; // namespace ConfigManager #endif // FS_CONFIGMANAGER_H diff --git a/src/connection.cpp b/src/connection.cpp index dd286b351a..0596f03db8 100644 --- a/src/connection.cpp +++ b/src/connection.cpp @@ -11,8 +11,6 @@ #include "server.h" #include "tasks.h" -extern ConfigManager g_config; - Connection_ptr ConnectionManager::createConnection(boost::asio::io_service& io_service, ConstServicePort_ptr servicePort) { @@ -139,8 +137,7 @@ void Connection::parseHeader(const boost::system::error_code& error) } uint32_t timePassed = std::max(1, (time(nullptr) - timeConnected) + 1); - if ((++packetsSent / timePassed) > - static_cast(g_config.getNumber(ConfigManager::MAX_PACKETS_PER_SECOND))) { + if ((++packetsSent / timePassed) > static_cast(getNumber(ConfigManager::MAX_PACKETS_PER_SECOND))) { std::cout << getIP() << " disconnected for exceeding packet per second limit." << std::endl; close(); return; diff --git a/src/container.cpp b/src/container.cpp index 9cf461c91d..feb6cf3944 100644 --- a/src/container.cpp +++ b/src/container.cpp @@ -297,7 +297,7 @@ ReturnValue Container::queryAdd(int32_t index, const Thing& thing, uint32_t coun } const Cylinder* const topParent = getTopParent(); - if (actor && g_config.getBoolean(ConfigManager::ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS)) { + if (actor && getBoolean(ConfigManager::ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS)) { if (const HouseTile* const houseTile = dynamic_cast(topParent->getTile())) { if (!topParent->getCreature() && !houseTile->getHouse()->isInvited(actor->getPlayer())) { return RETURNVALUE_PLAYERISNOTINVITED; @@ -384,7 +384,7 @@ ReturnValue Container::queryRemove(const Thing& thing, uint32_t count, uint32_t return RETURNVALUE_NOTMOVEABLE; } - if (actor && g_config.getBoolean(ConfigManager::ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS)) { + if (actor && getBoolean(ConfigManager::ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS)) { const Cylinder* const topParent = getTopParent(); if (const HouseTile* const houseTile = dynamic_cast(topParent->getTile())) { if (!topParent->getCreature() && !houseTile->getHouse()->isInvited(actor->getPlayer())) { diff --git a/src/creature.cpp b/src/creature.cpp index 9e21e298a1..0de9665b7b 100644 --- a/src/creature.cpp +++ b/src/creature.cpp @@ -19,7 +19,6 @@ double Creature::speedB = 261.29; double Creature::speedC = -4795.01; extern Game g_game; -extern ConfigManager g_config; extern CreatureEvents* g_creatureEvents; extern Events* g_events; @@ -646,7 +645,7 @@ CreatureVector Creature::getKillers() { CreatureVector killers; const int64_t timeNow = OTSYS_TIME(); - const uint32_t inFightTicks = g_config.getNumber(ConfigManager::PZ_LOCKED); + const uint32_t inFightTicks = getNumber(ConfigManager::PZ_LOCKED); for (const auto& it : damageMap) { Creature* attacker = g_game.getCreatureByID(it.first); if (attacker && attacker != this && timeNow - it.second.ticks <= inFightTicks) { @@ -672,7 +671,7 @@ void Creature::onDeath() Creature* mostDamageCreature = nullptr; const int64_t timeNow = OTSYS_TIME(); - const uint32_t inFightTicks = g_config.getNumber(ConfigManager::PZ_LOCKED); + const uint32_t inFightTicks = getNumber(ConfigManager::PZ_LOCKED); int32_t mostDamage = 0; std::map experienceMap; for (const auto& it : damageMap) { @@ -802,7 +801,7 @@ bool Creature::hasBeenAttacked(uint32_t attackerId) if (it == damageMap.end()) { return false; } - return (OTSYS_TIME() - it->second.ticks) <= g_config.getNumber(ConfigManager::PZ_LOCKED); + return (OTSYS_TIME() - it->second.ticks) <= getNumber(ConfigManager::PZ_LOCKED); } Item* Creature::getCorpse(Creature*, Creature*) { return Item::CreateItem(getLookCorpse()); } diff --git a/src/database.cpp b/src/database.cpp index 7c5f1d298a..6c72ce6f57 100644 --- a/src/database.cpp +++ b/src/database.cpp @@ -9,8 +9,6 @@ #include -extern ConfigManager g_config; - static bool connectToDatabase(MYSQL*& handle, const bool retryIfError) { bool isFirstAttemptToConnect = true; @@ -30,11 +28,10 @@ static bool connectToDatabase(MYSQL*& handle, const bool retryIfError) goto error; } // connects to database - if (!mysql_real_connect( - handle, g_config.getString(ConfigManager::MYSQL_HOST).c_str(), - g_config.getString(ConfigManager::MYSQL_USER).c_str(), - g_config.getString(ConfigManager::MYSQL_PASS).c_str(), g_config.getString(ConfigManager::MYSQL_DB).c_str(), - g_config.getNumber(ConfigManager::SQL_PORT), g_config.getString(ConfigManager::MYSQL_SOCK).c_str(), 0)) { + if (!mysql_real_connect(handle, getString(ConfigManager::MYSQL_HOST).c_str(), + getString(ConfigManager::MYSQL_USER).c_str(), getString(ConfigManager::MYSQL_PASS).c_str(), + getString(ConfigManager::MYSQL_DB).c_str(), getNumber(ConfigManager::SQL_PORT), + getString(ConfigManager::MYSQL_SOCK).c_str(), 0)) { std::cout << std::endl << "MySQL Error Message: " << mysql_error(handle) << std::endl; goto error; } diff --git a/src/databasemanager.cpp b/src/databasemanager.cpp index 304548961b..243c0b97ad 100644 --- a/src/databasemanager.cpp +++ b/src/databasemanager.cpp @@ -8,15 +8,13 @@ #include "configmanager.h" #include "luascript.h" -extern ConfigManager g_config; - bool DatabaseManager::optimizeTables() { Database& db = Database::getInstance(); DBResult_ptr result = db.storeQuery(fmt::format( "SELECT `TABLE_NAME` FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = {:s} AND `DATA_FREE` > 0", - db.escapeString(g_config.getString(ConfigManager::MYSQL_DB)))); + db.escapeString(getString(ConfigManager::MYSQL_DB)))); if (!result) { return false; } @@ -40,7 +38,7 @@ bool DatabaseManager::tableExists(const std::string& tableName) return db .storeQuery(fmt::format( "SELECT `TABLE_NAME` FROM `information_schema`.`tables` WHERE `TABLE_SCHEMA` = {:s} AND `TABLE_NAME` = {:s} LIMIT 1", - db.escapeString(g_config.getString(ConfigManager::MYSQL_DB)), db.escapeString(tableName))) + db.escapeString(getString(ConfigManager::MYSQL_DB)), db.escapeString(tableName))) .get(); } @@ -49,7 +47,7 @@ bool DatabaseManager::isDatabaseSetup() Database& db = Database::getInstance(); return db .storeQuery(fmt::format("SELECT `TABLE_NAME` FROM `information_schema`.`tables` WHERE `TABLE_SCHEMA` = {:s}", - db.escapeString(g_config.getString(ConfigManager::MYSQL_DB)))) + db.escapeString(getString(ConfigManager::MYSQL_DB)))) .get(); } diff --git a/src/game.cpp b/src/game.cpp index 47f9050c9d..dabc1252cd 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -34,7 +34,6 @@ #include "talkaction.h" #include "weapons.h" -extern ConfigManager g_config; extern Actions* g_actions; extern Chat* g_chat; extern TalkActions* g_talkActions; @@ -1265,7 +1264,7 @@ ReturnValue Game::internalMoveItem(Cylinder* fromCylinder, Cylinder* toCylinder, // update quiver if (actorPlayer) { - actorPlayer->sendQuiverUpdate(g_config.getBoolean(ConfigManager::CLASSIC_EQUIPMENT_SLOTS)); + actorPlayer->sendQuiverUpdate(getBoolean(ConfigManager::CLASSIC_EQUIPMENT_SLOTS)); } // we could not move all, inform the player @@ -2089,7 +2088,7 @@ void Game::playerUseItemEx(uint32_t playerId, const Position& fromPos, uint8_t f } bool isHotkey = (fromPos.x == 0xFFFF && fromPos.y == 0 && fromPos.z == 0); - if (isHotkey && !g_config.getBoolean(ConfigManager::AIMBOT_HOTKEY_ENABLED)) { + if (isHotkey && !getBoolean(ConfigManager::AIMBOT_HOTKEY_ENABLED)) { return; } @@ -2176,7 +2175,7 @@ void Game::playerUseItem(uint32_t playerId, const Position& pos, uint8_t stackPo } bool isHotkey = (pos.x == 0xFFFF && pos.y == 0 && pos.z == 0); - if (isHotkey && !g_config.getBoolean(ConfigManager::AIMBOT_HOTKEY_ENABLED)) { + if (isHotkey && !getBoolean(ConfigManager::AIMBOT_HOTKEY_ENABLED)) { return; } @@ -2246,7 +2245,7 @@ void Game::playerUseWithCreature(uint32_t playerId, const Position& fromPos, uin } bool isHotkey = (fromPos.x == 0xFFFF && fromPos.y == 0 && fromPos.z == 0); - if (!g_config.getBoolean(ConfigManager::AIMBOT_HOTKEY_ENABLED)) { + if (!getBoolean(ConfigManager::AIMBOT_HOTKEY_ENABLED)) { if (creature->getPlayer() || isHotkey) { player->sendCancelMessage(RETURNVALUE_DIRECTPLAYERSHOOT); return; @@ -2669,7 +2668,7 @@ void Game::playerRequestTrade(uint32_t playerId, const Position& pos, uint8_t st return; } - if (g_config.getBoolean(ConfigManager::ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS)) { + if (getBoolean(ConfigManager::ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS)) { if (const HouseTile* const houseTile = dynamic_cast(tradeItem->getTile())) { if (!tradeItem->getTopParent()->getCreature() && !houseTile->getHouse()->isInvited(player)) { player->sendCancelMessage(RETURNVALUE_PLAYERISNOTINVITED); @@ -3363,7 +3362,7 @@ void Game::playerTurn(uint32_t playerId, Direction dir) void Game::playerRequestOutfit(uint32_t playerId) { - if (!g_config.getBoolean(ConfigManager::ALLOW_CHANGEOUTFIT)) { + if (!getBoolean(ConfigManager::ALLOW_CHANGEOUTFIT)) { return; } @@ -3459,7 +3458,7 @@ void Game::playerToggleMount(uint32_t playerId, bool mount) void Game::playerChangeOutfit(uint32_t playerId, Outfit_t outfit, bool randomizeMount /* = false*/) { - if (!g_config.getBoolean(ConfigManager::ALLOW_CHANGEOUTFIT)) { + if (!getBoolean(ConfigManager::ALLOW_CHANGEOUTFIT)) { return; } @@ -3598,7 +3597,7 @@ bool Game::playerSaySpell(Player* player, SpeakClasses type, const std::string& result = g_spells->playerSaySpell(player, words); if (result == TALKACTION_BREAK) { - if (!g_config.getBoolean(ConfigManager::EMOTE_SPELLS)) { + if (!getBoolean(ConfigManager::EMOTE_SPELLS)) { return internalCreatureSay(player, TALKTYPE_SPELL, words, false); } return internalCreatureSay(player, TALKTYPE_MONSTER_SAY, words, false); @@ -3640,9 +3639,9 @@ bool Game::playerYell(Player* player, const std::string& text) } if (!player->isAccessPlayer() && !player->hasFlag(PlayerFlag_IgnoreYellCheck)) { - uint32_t minimumLevel = g_config.getNumber(ConfigManager::YELL_MINIMUM_LEVEL); + uint32_t minimumLevel = getNumber(ConfigManager::YELL_MINIMUM_LEVEL); if (player->getLevel() < minimumLevel) { - if (g_config.getBoolean(ConfigManager::YELL_ALLOW_PREMIUM)) { + if (getBoolean(ConfigManager::YELL_ALLOW_PREMIUM)) { if (!player->isPremium()) { player->sendTextMessage( MESSAGE_STATUS_SMALL, @@ -3682,9 +3681,9 @@ bool Game::playerSpeakTo(Player* player, SpeakClasses type, const std::string& r } if (!player->isAccessPlayer() && !player->hasFlag(PlayerFlag_IgnoreSendPrivateCheck)) { - uint32_t minimumLevel = g_config.getNumber(ConfigManager::MINIMUM_LEVEL_TO_SEND_PRIVATE); + uint32_t minimumLevel = getNumber(ConfigManager::MINIMUM_LEVEL_TO_SEND_PRIVATE); if (player->getLevel() < minimumLevel) { - if (g_config.getBoolean(ConfigManager::PREMIUM_TO_SEND_PRIVATE)) { + if (getBoolean(ConfigManager::PREMIUM_TO_SEND_PRIVATE)) { if (!player->isPremium()) { player->sendTextMessage( MESSAGE_STATUS_SMALL, @@ -4282,7 +4281,7 @@ bool Game::combatChangeHealth(Creature* attacker, Creature* target, CombatDamage } } - if (g_config.getBoolean(ConfigManager::MANASHIELD_BREAKABLE) && targetPlayer) { + if (getBoolean(ConfigManager::MANASHIELD_BREAKABLE) && targetPlayer) { if (ConditionManaShield* conditionManaShield = dynamic_cast( targetPlayer->getCondition(CONDITION_MANASHIELD_BREAKABLE))) { if (int32_t remainingManaDamage = @@ -5214,7 +5213,7 @@ void Game::playerCreateMarketOffer(uint32_t playerId, uint8_t type, uint16_t spr return; } - if (g_config.getBoolean(ConfigManager::MARKET_PREMIUM) && !player->isPremium()) { + if (getBoolean(ConfigManager::MARKET_PREMIUM) && !player->isPremium()) { player->sendTextMessage(MESSAGE_MARKET, "Only premium accounts may create offers for that object."); return; } @@ -5233,7 +5232,7 @@ void Game::playerCreateMarketOffer(uint32_t playerId, uint8_t type, uint16_t spr return; } - const uint32_t maxOfferCount = g_config.getNumber(ConfigManager::MAX_MARKET_OFFERS_AT_A_TIME_PER_PLAYER); + const uint32_t maxOfferCount = getNumber(ConfigManager::MAX_MARKET_OFFERS_AT_A_TIME_PER_PLAYER); if (maxOfferCount != 0 && IOMarket::getPlayerOfferCount(player->getGUID()) >= maxOfferCount) { return; } @@ -5354,7 +5353,7 @@ void Game::playerCancelMarketOffer(uint32_t playerId, uint32_t timestamp, uint16 IOMarket::moveOfferToHistory(offer.id, OFFERSTATE_CANCELLED); offer.amount = 0; - offer.timestamp += g_config.getNumber(ConfigManager::MARKET_OFFER_DURATION); + offer.timestamp += getNumber(ConfigManager::MARKET_OFFER_DURATION); player->sendMarketCancelOffer(offer); player->sendMarketEnter(); } @@ -5516,7 +5515,7 @@ void Game::playerAcceptMarketOffer(uint32_t playerId, uint32_t timestamp, uint16 player->onReceiveMail(); } - const int32_t marketOfferDuration = g_config.getNumber(ConfigManager::MARKET_OFFER_DURATION); + const int32_t marketOfferDuration = getNumber(ConfigManager::MARKET_OFFER_DURATION); IOMarket::appendHistory(player->getGUID(), (offer.type == MARKETACTION_BUY ? MARKETACTION_SELL : MARKETACTION_BUY), offer.itemId, amount, offer.price, offer.timestamp + marketOfferDuration, @@ -5821,7 +5820,7 @@ bool Game::reload(ReloadTypes_t reloadType) case RELOAD_TYPE_CHAT: return g_chat->load(); case RELOAD_TYPE_CONFIG: - return g_config.load(); + return ConfigManager::load(); case RELOAD_TYPE_CREATURESCRIPTS: { g_creatureEvents->reload(); g_creatureEvents->removeInvalidEvents(); @@ -5880,7 +5879,7 @@ bool Game::reload(ReloadTypes_t reloadType) Npcs::reload(); Item::items.reload(); mounts.reload(); - g_config.reload(); + ConfigManager::reload(); g_events->load(); g_chat->load(); */ @@ -5897,7 +5896,7 @@ bool Game::reload(ReloadTypes_t reloadType) } g_actions->reload(); - g_config.load(); + ConfigManager::load(); g_creatureEvents->reload(); g_monsters.reload(); g_moveEvents->reload(); diff --git a/src/globalevent.cpp b/src/globalevent.cpp index a164cb3804..91c0ff6d5c 100644 --- a/src/globalevent.cpp +++ b/src/globalevent.cpp @@ -10,8 +10,6 @@ #include "scheduler.h" #include "tools.h" -extern ConfigManager g_config; - GlobalEvents::GlobalEvents() : scriptInterface("GlobalEvent Interface") { scriptInterface.initState(); } GlobalEvents::~GlobalEvents() { clear(false); } diff --git a/src/house.cpp b/src/house.cpp index e712b374a3..0f0bc783b3 100644 --- a/src/house.cpp +++ b/src/house.cpp @@ -13,7 +13,6 @@ #include "iologindata.h" #include "pugicast.h" -extern ConfigManager g_config; extern Game g_game; House::House(uint32_t houseId) : id(houseId) {} @@ -72,8 +71,7 @@ void House::setOwner(uint32_t guid, bool updateDatabase /* = true*/, Player* pla door->setAccessList(""); } } else { - std::string strRentPeriod = - boost::algorithm::to_lower_copy(g_config.getString(ConfigManager::HOUSE_RENT_PERIOD)); + std::string strRentPeriod = boost::algorithm::to_lower_copy(getString(ConfigManager::HOUSE_RENT_PERIOD)); time_t currentTime = time(nullptr); if (strRentPeriod == "yearly") { currentTime += 24 * 60 * 60 * 365; @@ -108,7 +106,7 @@ AccessHouseLevel_t House::getHouseAccessLevel(const Player* player) const return HOUSE_OWNER; } - if (g_config.getBoolean(ConfigManager::HOUSE_OWNED_BY_ACCOUNT)) { + if (getBoolean(ConfigManager::HOUSE_OWNED_BY_ACCOUNT)) { if (ownerAccountId == player->getAccount()) { return HOUSE_OWNER; } diff --git a/src/housetile.cpp b/src/housetile.cpp index 66f4fbc9c9..e5367ce39c 100644 --- a/src/housetile.cpp +++ b/src/housetile.cpp @@ -10,7 +10,6 @@ #include "house.h" extern Game g_game; -extern ConfigManager g_config; HouseTile::HouseTile(int32_t x, int32_t y, int32_t z, House* house) : DynamicTile(x, y, z), house(house) {} @@ -75,7 +74,7 @@ ReturnValue HouseTile::queryAdd(int32_t index, const Thing& thing, uint32_t coun return RETURNVALUE_ITEMCANNOTBEMOVEDTHERE; } - if (actor && g_config.getBoolean(ConfigManager::ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS)) { + if (actor && getBoolean(ConfigManager::ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS)) { if (!house->isInvited(actor->getPlayer())) { return RETURNVALUE_PLAYERISNOTINVITED; } @@ -120,7 +119,7 @@ ReturnValue HouseTile::queryRemove(const Thing& thing, uint32_t count, uint32_t return RETURNVALUE_NOTPOSSIBLE; } - if (actor && g_config.getBoolean(ConfigManager::ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS)) { + if (actor && getBoolean(ConfigManager::ONLY_INVITED_CAN_MOVE_HOUSE_ITEMS)) { if (!house->isInvited(actor->getPlayer())) { return RETURNVALUE_PLAYERISNOTINVITED; } diff --git a/src/iologindata.cpp b/src/iologindata.cpp index 2f826e8434..13491e0747 100644 --- a/src/iologindata.cpp +++ b/src/iologindata.cpp @@ -12,7 +12,6 @@ #include "inbox.h" #include "storeinbox.h" -extern ConfigManager g_config; extern Game g_game; Account IOLoginData::loadAccount(uint32_t accno) @@ -106,7 +105,7 @@ std::pair IOLoginData::gameworldAuthentication(std::string_v } // two-factor auth - if (g_config.getBoolean(ConfigManager::TWO_FACTOR_AUTH)) { + if (getBoolean(ConfigManager::TWO_FACTOR_AUTH)) { std::string secret = decodeSecret(result->getString("secret")); if (!secret.empty()) { if (token.empty()) { @@ -173,7 +172,7 @@ void IOLoginData::setAccountType(uint32_t accountId, AccountType_t accountType) void IOLoginData::updateOnlineStatus(uint32_t guid, bool login) { - if (g_config.getBoolean(ConfigManager::ALLOW_CLONES)) { + if (getBoolean(ConfigManager::ALLOW_CLONES)) { return; } diff --git a/src/iomap.h b/src/iomap.h index acb2ba8794..fceb302680 100644 --- a/src/iomap.h +++ b/src/iomap.h @@ -9,8 +9,6 @@ #include "map.h" #include "spawn.h" -extern ConfigManager g_config; - enum OTBM_AttrTypes_t { OTBM_ATTR_DESCRIPTION = 1, @@ -106,7 +104,7 @@ class IOMap { if (map->spawnfile.empty()) { // OTBM file doesn't tell us about the spawnfile, lets guess it is mapname-spawn.xml. - map->spawnfile = g_config.getString(ConfigManager::MAP_NAME); + map->spawnfile = getString(ConfigManager::MAP_NAME); map->spawnfile += "-spawn.xml"; } @@ -121,7 +119,7 @@ class IOMap { if (map->housefile.empty()) { // OTBM file doesn't tell us about the housefile, lets guess it is mapname-house.xml. - map->housefile = g_config.getString(ConfigManager::MAP_NAME); + map->housefile = getString(ConfigManager::MAP_NAME); map->housefile += "-house.xml"; } diff --git a/src/iomarket.cpp b/src/iomarket.cpp index c2116aff8d..79cb5fb5f0 100644 --- a/src/iomarket.cpp +++ b/src/iomarket.cpp @@ -12,7 +12,6 @@ #include "iologindata.h" #include "scheduler.h" -extern ConfigManager g_config; extern Game g_game; MarketOfferList IOMarket::getActiveOffers(MarketAction_t action, uint16_t itemId) @@ -26,7 +25,7 @@ MarketOfferList IOMarket::getActiveOffers(MarketAction_t action, uint16_t itemId return offerList; } - const int32_t marketOfferDuration = g_config.getNumber(ConfigManager::MARKET_OFFER_DURATION); + const int32_t marketOfferDuration = getNumber(ConfigManager::MARKET_OFFER_DURATION); do { MarketOffer offer; @@ -49,7 +48,7 @@ MarketOfferList IOMarket::getOwnOffers(MarketAction_t action, uint32_t playerId) { MarketOfferList offerList; - const int32_t marketOfferDuration = g_config.getNumber(ConfigManager::MARKET_OFFER_DURATION); + const int32_t marketOfferDuration = getNumber(ConfigManager::MARKET_OFFER_DURATION); DBResult_ptr result = Database::getInstance().storeQuery(fmt::format( "SELECT `id`, `amount`, `price`, `created`, `itemtype` FROM `market_offers` WHERE `player_id` = {:d} AND `sale` = {:d}", @@ -178,7 +177,7 @@ void IOMarket::processExpiredOffers(DBResult_ptr result, bool) void IOMarket::checkExpiredOffers() { - const time_t lastExpireDate = time(nullptr) - g_config.getNumber(ConfigManager::MARKET_OFFER_DURATION); + const time_t lastExpireDate = time(nullptr) - getNumber(ConfigManager::MARKET_OFFER_DURATION); g_databaseTasks.addTask( fmt::format( @@ -186,8 +185,7 @@ void IOMarket::checkExpiredOffers() lastExpireDate), IOMarket::processExpiredOffers, true); - int32_t checkExpiredMarketOffersEachMinutes = - g_config.getNumber(ConfigManager::CHECK_EXPIRED_MARKET_OFFERS_EACH_MINUTES); + int32_t checkExpiredMarketOffersEachMinutes = getNumber(ConfigManager::CHECK_EXPIRED_MARKET_OFFERS_EACH_MINUTES); if (checkExpiredMarketOffersEachMinutes <= 0) { return; } @@ -210,7 +208,7 @@ MarketOfferEx IOMarket::getOfferByCounter(uint32_t timestamp, uint16_t counter) { MarketOfferEx offer; - const int32_t created = timestamp - g_config.getNumber(ConfigManager::MARKET_OFFER_DURATION); + const int32_t created = timestamp - getNumber(ConfigManager::MARKET_OFFER_DURATION); DBResult_ptr result = Database::getInstance().storeQuery(fmt::format( "SELECT `id`, `sale`, `itemtype`, `amount`, `created`, `price`, `player_id`, `anonymous`, (SELECT `name` FROM `players` WHERE `id` = `player_id`) AS `player_name` FROM `market_offers` WHERE `created` = {:d} AND (`id` & 65535) = {:d} LIMIT 1", @@ -267,7 +265,7 @@ void IOMarket::appendHistory(uint32_t playerId, MarketAction_t action, uint16_t bool IOMarket::moveOfferToHistory(uint32_t offerId, MarketOfferState_t state) { - const int32_t marketOfferDuration = g_config.getNumber(ConfigManager::MARKET_OFFER_DURATION); + const int32_t marketOfferDuration = getNumber(ConfigManager::MARKET_OFFER_DURATION); Database& db = Database::getInstance(); diff --git a/src/luascript.cpp b/src/luascript.cpp index e4c0fb35da..a128663af5 100644 --- a/src/luascript.cpp +++ b/src/luascript.cpp @@ -43,7 +43,6 @@ extern Chat* g_chat; extern Game g_game; extern GlobalEvents* g_globalEvents; extern Monsters g_monsters; -extern ConfigManager g_config; extern Vocations g_vocations; extern Spells* g_spells; extern Events* g_events; @@ -3908,8 +3907,8 @@ int LuaScriptInterface::luaAddEvent(lua_State* L) return 1; } - if (g_config.getBoolean(ConfigManager::WARN_UNSAFE_SCRIPTS) || - g_config.getBoolean(ConfigManager::CONVERT_UNSAFE_SCRIPTS)) { + if (ConfigManager::getBoolean(ConfigManager::WARN_UNSAFE_SCRIPTS) || + ConfigManager::getBoolean(ConfigManager::CONVERT_UNSAFE_SCRIPTS)) { std::vector> indexes; for (int i = 3; i <= parameters; ++i) { if (lua_getmetatable(L, i) == 0) { @@ -3925,7 +3924,7 @@ int LuaScriptInterface::luaAddEvent(lua_State* L) } if (!indexes.empty()) { - if (g_config.getBoolean(ConfigManager::WARN_UNSAFE_SCRIPTS)) { + if (ConfigManager::getBoolean(ConfigManager::WARN_UNSAFE_SCRIPTS)) { bool plural = indexes.size() > 1; std::string warningString = "Argument"; @@ -3954,7 +3953,7 @@ int LuaScriptInterface::luaAddEvent(lua_State* L) reportErrorFunc(L, warningString); } - if (g_config.getBoolean(ConfigManager::CONVERT_UNSAFE_SCRIPTS)) { + if (ConfigManager::getBoolean(ConfigManager::CONVERT_UNSAFE_SCRIPTS)) { for (const auto& entry : indexes) { switch (entry.second) { case LuaData_Item: @@ -4192,19 +4191,19 @@ const luaL_Reg LuaScriptInterface::luaConfigManagerTable[] = { int LuaScriptInterface::luaConfigManagerGetString(lua_State* L) { - pushString(L, g_config.getString(getNumber(L, -1))); + pushString(L, ConfigManager::getString(getNumber(L, -1))); return 1; } int LuaScriptInterface::luaConfigManagerGetNumber(lua_State* L) { - lua_pushnumber(L, g_config.getNumber(getNumber(L, -1))); + lua_pushnumber(L, ConfigManager::getNumber(getNumber(L, -1))); return 1; } int LuaScriptInterface::luaConfigManagerGetBoolean(lua_State* L) { - pushBoolean(L, g_config.getBoolean(getNumber(L, -1))); + pushBoolean(L, ConfigManager::getBoolean(getNumber(L, -1))); return 1; } @@ -4649,7 +4648,7 @@ int LuaScriptInterface::luaGameGetExperienceStage(lua_State* L) { // Game.getExperienceStage(level) uint32_t level = getNumber(L, 1); - lua_pushnumber(L, g_config.getExperienceStage(level)); + lua_pushnumber(L, ConfigManager::getExperienceStage(level)); return 1; } diff --git a/src/main.cpp b/src/main.cpp index fd23a867b9..3a0c3e255c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,8 +4,6 @@ #include "otserv.h" #include "tools.h" -extern ConfigManager g_config; - static bool argumentsHandler(const std::vector& args) { for (const auto& arg : args) { @@ -26,13 +24,13 @@ static bool argumentsHandler(const std::vector& args) auto tmp = explodeString(arg, "="); if (tmp[0] == "--config") - g_config.setString(ConfigManager::CONFIG_FILE, tmp[1]); + ConfigManager::setString(ConfigManager::CONFIG_FILE, tmp[1]); else if (tmp[0] == "--ip") - g_config.setString(ConfigManager::IP, tmp[1]); + ConfigManager::setString(ConfigManager::IP, tmp[1]); else if (tmp[0] == "--login-port") - g_config.setNumber(ConfigManager::LOGIN_PORT, std::stoi(tmp[1].data())); + ConfigManager::setNumber(ConfigManager::LOGIN_PORT, std::stoi(tmp[1].data())); else if (tmp[0] == "--game-port") - g_config.setNumber(ConfigManager::GAME_PORT, std::stoi(tmp[1].data())); + ConfigManager::setNumber(ConfigManager::GAME_PORT, std::stoi(tmp[1].data())); } return true; diff --git a/src/monster.cpp b/src/monster.cpp index e2df0fd460..052bce1fdb 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -15,7 +15,6 @@ extern Game g_game; extern Monsters g_monsters; extern Events* g_events; -extern ConfigManager g_config; int32_t Monster::despawnRange; int32_t Monster::despawnRadius; @@ -489,7 +488,7 @@ void Monster::onCreatureLeave(Creature* creature) updateIdleStatus(); if (!isSummon() && targetList.empty()) { - int32_t walkToSpawnRadius = g_config.getNumber(ConfigManager::DEFAULT_WALKTOSPAWNRADIUS); + int32_t walkToSpawnRadius = getNumber(ConfigManager::DEFAULT_WALKTOSPAWNRADIUS); if (walkToSpawnRadius > 0 && !position.isInRange(masterPos, walkToSpawnRadius, walkToSpawnRadius)) { walkToSpawn(); } @@ -732,7 +731,7 @@ void Monster::onThink(uint32_t interval) } if (!isInSpawnRange(position)) { - if (g_config.getBoolean(ConfigManager::MONSTER_OVERSPAWN)) { + if (getBoolean(ConfigManager::MONSTER_OVERSPAWN)) { if (spawn) { spawn->removeMonster(this); spawn->startSpawnCheck(); @@ -740,7 +739,7 @@ void Monster::onThink(uint32_t interval) } } else { g_game.addMagicEffect(this->getPosition(), CONST_ME_POFF); - if (g_config.getBoolean(ConfigManager::REMOVE_ON_DESPAWN)) { + if (getBoolean(ConfigManager::REMOVE_ON_DESPAWN)) { g_game.removeCreature(this, false); } else { g_game.internalTeleport(this, masterPos); diff --git a/src/monsters.cpp b/src/monsters.cpp index 4e1b6218f6..d1024f22fe 100644 --- a/src/monsters.cpp +++ b/src/monsters.cpp @@ -16,7 +16,6 @@ extern Game g_game; extern Spells* g_spells; extern Monsters g_monsters; -extern ConfigManager g_config; spellBlock_t::~spellBlock_t() { @@ -58,7 +57,7 @@ bool Monsters::loadFromXml(bool reloading /*= false*/) unloadedMonsters.emplace(name, file); } - bool forceLoad = g_config.getBoolean(ConfigManager::FORCE_MONSTERTYPE_LOAD); + bool forceLoad = getBoolean(ConfigManager::FORCE_MONSTERTYPE_LOAD); for (auto it : unloadedMonsters) { if (forceLoad || (reloading && monsters.find(it.first) != monsters.end())) { diff --git a/src/otserv.cpp b/src/otserv.cpp index 2d6223740c..ac09ef6ec4 100644 --- a/src/otserv.cpp +++ b/src/otserv.cpp @@ -32,7 +32,6 @@ Dispatcher g_dispatcher; Scheduler g_scheduler; Game g_game; -ConfigManager g_config; Monsters g_monsters; Vocations g_vocations; extern Scripts* g_scripts; @@ -70,7 +69,7 @@ void mainLoader(ServiceManager* services) printServerVersion(); // check if config.lua or config.lua.dist exist - const std::string& configFile = g_config.getString(ConfigManager::CONFIG_FILE); + const std::string& configFile = getString(ConfigManager::CONFIG_FILE); std::ifstream c_test("./" + configFile); if (!c_test.is_open()) { std::ifstream config_lua_dist("./config.lua.dist"); @@ -87,13 +86,13 @@ void mainLoader(ServiceManager* services) // read global config std::cout << ">> Loading config" << std::endl; - if (!g_config.load()) { + if (!ConfigManager::load()) { startupErrorMessage("Unable to load " + configFile + "!"); return; } #ifdef _WIN32 - const std::string& defaultPriority = g_config.getString(ConfigManager::DEFAULT_PRIORITY); + const std::string& defaultPriority = getString(ConfigManager::DEFAULT_PRIORITY); if (caseInsensitiveEqual(defaultPriority, "high")) { SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS); } else if (caseInsensitiveEqual(defaultPriority, "above-normal")) { @@ -131,7 +130,7 @@ void mainLoader(ServiceManager* services) DatabaseManager::updateDatabase(); - if (g_config.getBoolean(ConfigManager::OPTIMIZE_DATABASE) && !DatabaseManager::optimizeTables()) { + if (getBoolean(ConfigManager::OPTIMIZE_DATABASE) && !DatabaseManager::optimizeTables()) { std::cout << "> No tables were optimized." << std::endl; } @@ -188,7 +187,7 @@ void mainLoader(ServiceManager* services) } std::cout << ">> Checking world type... " << std::flush; - std::string worldType = boost::algorithm::to_lower_copy(g_config.getString(ConfigManager::WORLD_TYPE)); + std::string worldType = boost::algorithm::to_lower_copy(getString(ConfigManager::WORLD_TYPE)); if (worldType == "pvp") { g_game.setWorldType(WORLD_TYPE_PVP); } else if (worldType == "no-pvp") { @@ -199,13 +198,13 @@ void mainLoader(ServiceManager* services) std::cout << std::endl; startupErrorMessage( fmt::format("Unknown world type: {:s}, valid world types are: pvp, no-pvp and pvp-enforced.", - g_config.getString(ConfigManager::WORLD_TYPE))); + getString(ConfigManager::WORLD_TYPE))); return; } std::cout << boost::algorithm::to_upper_copy(worldType) << std::endl; std::cout << ">> Loading map" << std::endl; - if (!g_game.loadMainMap(g_config.getString(ConfigManager::MAP_NAME))) { + if (!g_game.loadMainMap(getString(ConfigManager::MAP_NAME))) { startupErrorMessage("Failed to load map"); return; } @@ -214,17 +213,17 @@ void mainLoader(ServiceManager* services) g_game.setGameState(GAME_STATE_INIT); // Game client protocols - services->add(static_cast(g_config.getNumber(ConfigManager::GAME_PORT))); - services->add(static_cast(g_config.getNumber(ConfigManager::LOGIN_PORT))); + services->add(static_cast(getNumber(ConfigManager::GAME_PORT))); + services->add(static_cast(getNumber(ConfigManager::LOGIN_PORT))); // OT protocols - services->add(static_cast(g_config.getNumber(ConfigManager::STATUS_PORT))); + services->add(static_cast(getNumber(ConfigManager::STATUS_PORT))); // Legacy login protocol - services->add(static_cast(g_config.getNumber(ConfigManager::LOGIN_PORT))); + services->add(static_cast(getNumber(ConfigManager::LOGIN_PORT))); RentPeriod_t rentPeriod; - std::string strRentPeriod = boost::algorithm::to_lower_copy(g_config.getString(ConfigManager::HOUSE_RENT_PERIOD)); + std::string strRentPeriod = boost::algorithm::to_lower_copy(getString(ConfigManager::HOUSE_RENT_PERIOD)); if (strRentPeriod == "yearly") { rentPeriod = RENTPERIOD_YEARLY; @@ -282,8 +281,7 @@ void startServer() g_loaderSignal.wait(g_loaderUniqueLock); if (serviceManager.is_running()) { - std::cout << ">> " << g_config.getString(ConfigManager::SERVER_NAME) << " Server Online!" << std::endl - << std::endl; + std::cout << ">> " << getString(ConfigManager::SERVER_NAME) << " Server Online!" << std::endl << std::endl; serviceManager.run(); } else { std::cout << ">> No services running. The server is NOT online." << std::endl; diff --git a/src/party.cpp b/src/party.cpp index ff7e98822a..bc35fd155b 100644 --- a/src/party.cpp +++ b/src/party.cpp @@ -10,7 +10,6 @@ #include "game.h" extern Game g_game; -extern ConfigManager g_config; extern Events* g_events; Party::Party(Player* leader) : leader(leader) { leader->setParty(this); } @@ -425,7 +424,7 @@ SharedExpStatus_t Party::getMemberSharedExperienceStatus(const Player* player) c } uint64_t timeDiff = OTSYS_TIME() - it->second; - if (timeDiff > static_cast(g_config.getNumber(ConfigManager::PZ_LOCKED))) { + if (timeDiff > static_cast(getNumber(ConfigManager::PZ_LOCKED))) { return SHAREDEXP_MEMBERINACTIVE; } } diff --git a/src/player.cpp b/src/player.cpp index 0ec300366f..4141264ee4 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -26,7 +26,6 @@ #include "tools.h" #include "weapons.h" -extern ConfigManager g_config; extern Game g_game; extern Chat* g_chat; extern Vocations g_vocations; @@ -80,7 +79,7 @@ void Player::setID() { if (id == 0) { // allowClones id assignment - if (g_config.getBoolean(ConfigManager::ALLOW_CLONES)) { + if (getBoolean(ConfigManager::ALLOW_CLONES)) { id = playerAutoID++; return; } @@ -745,14 +744,13 @@ bool Player::canWalkthrough(const Creature* creature) const } const Player* player = creature->getPlayer(); - if (!player || !g_config.getBoolean(ConfigManager::ALLOW_WALKTHROUGH)) { + if (!player || !getBoolean(ConfigManager::ALLOW_WALKTHROUGH)) { return false; } const Tile* playerTile = player->getTile(); - if (!playerTile || - (!playerTile->hasFlag(TILESTATE_PROTECTIONZONE) && - player->getLevel() > static_cast(g_config.getNumber(ConfigManager::PROTECTION_LEVEL)))) { + if (!playerTile || (!playerTile->hasFlag(TILESTATE_PROTECTIONZONE) && + player->getLevel() > static_cast(getNumber(ConfigManager::PROTECTION_LEVEL)))) { return false; } @@ -783,14 +781,13 @@ bool Player::canWalkthroughEx(const Creature* creature) const } const Player* player = creature->getPlayer(); - if (!player || !g_config.getBoolean(ConfigManager::ALLOW_WALKTHROUGH)) { + if (!player || !getBoolean(ConfigManager::ALLOW_WALKTHROUGH)) { return false; } const Tile* playerTile = player->getTile(); - return playerTile && - (playerTile->hasFlag(TILESTATE_PROTECTIONZONE) || - player->getLevel() <= static_cast(g_config.getNumber(ConfigManager::PROTECTION_LEVEL))); + return playerTile && (playerTile->hasFlag(TILESTATE_PROTECTIONZONE) || + player->getLevel() <= static_cast(getNumber(ConfigManager::PROTECTION_LEVEL))); } void Player::onReceiveMail() const @@ -1381,7 +1378,7 @@ void Player::onCreatureMove(Creature* creature, const Tile* newTile, const Posit } if (teleport || oldPos.z != newPos.z) { - int32_t ticks = g_config.getNumber(ConfigManager::STAIRHOP_DELAY); + int32_t ticks = getNumber(ConfigManager::STAIRHOP_DELAY); if (ticks > 0) { if (Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_PACIFIED, ticks, 0)) { addCondition(condition); @@ -1534,7 +1531,7 @@ void Player::onThink(uint32_t interval) if (!getTile()->hasFlag(TILESTATE_NOLOGOUT) && !isAccessPlayer()) { idleTime += interval; - const int32_t kickAfterMinutes = g_config.getNumber(ConfigManager::KICK_AFTER_MINUTES); + const int32_t kickAfterMinutes = getNumber(ConfigManager::KICK_AFTER_MINUTES); if (idleTime > (kickAfterMinutes * 60000) + 60000) { kickPlayer(true); } else if (client && idleTime == 60000 * kickAfterMinutes) { @@ -1573,7 +1570,7 @@ uint32_t Player::isMuted() const void Player::addMessageBuffer() { - if (MessageBufferCount > 0 && g_config.getNumber(ConfigManager::MAX_MESSAGEBUFFER) != 0 && + if (MessageBufferCount > 0 && getNumber(ConfigManager::MAX_MESSAGEBUFFER) != 0 && !hasFlag(PlayerFlag_CannotBeMuted)) { --MessageBufferCount; } @@ -1585,7 +1582,7 @@ void Player::removeMessageBuffer() return; } - const int32_t maxMessageBuffer = g_config.getNumber(ConfigManager::MAX_MESSAGEBUFFER); + const int32_t maxMessageBuffer = getNumber(ConfigManager::MAX_MESSAGEBUFFER); if (maxMessageBuffer != 0 && MessageBufferCount <= maxMessageBuffer + 1) { if (++MessageBufferCount > maxMessageBuffer) { uint32_t muteCount = 1; @@ -1762,7 +1759,7 @@ void Player::addExperience(Creature* source, uint64_t exp, bool sendText /* = fa g_game.changeSpeed(this, 0); g_game.addCreatureHealth(this); - const uint32_t protectionLevel = static_cast(g_config.getNumber(ConfigManager::PROTECTION_LEVEL)); + const uint32_t protectionLevel = static_cast(getNumber(ConfigManager::PROTECTION_LEVEL)); if (prevLevel < protectionLevel && level >= protectionLevel) { g_game.updateCreatureWalkthrough(this); } @@ -1784,7 +1781,7 @@ void Player::addExperience(Creature* source, uint64_t exp, bool sendText /* = fa } sendStats(); - sendExperienceTracker(rawExp * g_config.getExperienceStage(getLevel()), exp); + sendExperienceTracker(rawExp * ConfigManager::getExperienceStage(getLevel()), exp); } void Player::removeExperience(uint64_t exp, bool sendText /* = false*/) @@ -1846,7 +1843,7 @@ void Player::removeExperience(uint64_t exp, bool sendText /* = false*/) g_game.changeSpeed(this, 0); g_game.addCreatureHealth(this); - const uint32_t protectionLevel = static_cast(g_config.getNumber(ConfigManager::PROTECTION_LEVEL)); + const uint32_t protectionLevel = static_cast(getNumber(ConfigManager::PROTECTION_LEVEL)); if (oldLevel >= protectionLevel && level < protectionLevel) { g_game.updateCreatureWalkthrough(this); } @@ -2043,7 +2040,7 @@ void Player::death(Creature* lastHitCreature) if (lastHitPlayer) { uint32_t sumLevels = 0; - uint32_t inFightTicks = g_config.getNumber(ConfigManager::PZ_LOCKED); + uint32_t inFightTicks = getNumber(ConfigManager::PZ_LOCKED); for (const auto& it : damageMap) { CountBlock_t cb = it.second; if ((OTSYS_TIME() - cb.ticks) <= inFightTicks) { @@ -2241,8 +2238,8 @@ void Player::addInFightTicks(bool pzlock /*= false*/) pzLocked = true; } - Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_INFIGHT, - g_config.getNumber(ConfigManager::PZ_LOCKED), 0); + Condition* condition = + Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_INFIGHT, getNumber(ConfigManager::PZ_LOCKED), 0); addCondition(condition); } @@ -2420,7 +2417,7 @@ ReturnValue Player::queryAdd(int32_t index, const Thing& thing, uint32_t count, } else if (slotPosition & SLOTP_TWO_HAND) { ret = RETURNVALUE_PUTTHISOBJECTINBOTHHANDS; } else if ((slotPosition & SLOTP_RIGHT) || (slotPosition & SLOTP_LEFT)) { - if (!g_config.getBoolean(ConfigManager::CLASSIC_EQUIPMENT_SLOTS)) { + if (!getBoolean(ConfigManager::CLASSIC_EQUIPMENT_SLOTS)) { ret = RETURNVALUE_CANNOTBEDRESSED; } else { ret = RETURNVALUE_PUTTHISOBJECTINYOURHAND; @@ -2458,7 +2455,7 @@ ReturnValue Player::queryAdd(int32_t index, const Thing& thing, uint32_t count, case CONST_SLOT_RIGHT: { if (slotPosition & SLOTP_RIGHT) { - if (!g_config.getBoolean(ConfigManager::CLASSIC_EQUIPMENT_SLOTS)) { + if (!getBoolean(ConfigManager::CLASSIC_EQUIPMENT_SLOTS)) { if (item->getWeaponType() != WEAPON_SHIELD && item->getWeaponType() != WEAPON_QUIVER) { ret = RETURNVALUE_CANNOTBEDRESSED; } else { @@ -2515,7 +2512,7 @@ ReturnValue Player::queryAdd(int32_t index, const Thing& thing, uint32_t count, case CONST_SLOT_LEFT: { if (slotPosition & SLOTP_LEFT) { - if (!g_config.getBoolean(ConfigManager::CLASSIC_EQUIPMENT_SLOTS)) { + if (!getBoolean(ConfigManager::CLASSIC_EQUIPMENT_SLOTS)) { WeaponType_t type = item->getWeaponType(); const Item* rightItem = inventory[CONST_SLOT_RIGHT]; if (type == WEAPON_NONE || type == WEAPON_SHIELD || type == WEAPON_AMMO || type == WEAPON_QUIVER) { @@ -2590,7 +2587,7 @@ ReturnValue Player::queryAdd(int32_t index, const Thing& thing, uint32_t count, } case CONST_SLOT_AMMO: { - if ((slotPosition & SLOTP_AMMO) || g_config.getBoolean(ConfigManager::CLASSIC_EQUIPMENT_SLOTS)) { + if ((slotPosition & SLOTP_AMMO) || getBoolean(ConfigManager::CLASSIC_EQUIPMENT_SLOTS)) { ret = RETURNVALUE_NOERROR; } break; @@ -2626,7 +2623,7 @@ ReturnValue Player::queryAdd(int32_t index, const Thing& thing, uint32_t count, // need an exchange with source? (destination item is swapped with currently moved item) const Item* inventoryItem = getInventoryItem(static_cast(index)); if (inventoryItem && (!inventoryItem->isStackable() || inventoryItem->getID() != item->getID())) { - if (!g_config.getBoolean(ConfigManager::CLASSIC_EQUIPMENT_SLOTS)) { + if (!getBoolean(ConfigManager::CLASSIC_EQUIPMENT_SLOTS)) { const Cylinder* cylinder = item->getTopParent(); if (cylinder && (dynamic_cast(cylinder) || dynamic_cast(cylinder))) { return RETURNVALUE_NEEDEXCHANGE; @@ -3360,7 +3357,7 @@ void Player::doAttacking(uint32_t) Item* tool = getWeapon(); const Weapon* weapon = g_weapons->getWeapon(tool); uint32_t delay = getAttackSpeed(); - bool classicSpeed = g_config.getBoolean(ConfigManager::CLASSIC_ATTACK_SPEED); + bool classicSpeed = getBoolean(ConfigManager::CLASSIC_ATTACK_SPEED); if (weapon) { if (!weapon->interruptSwing()) { @@ -3390,11 +3387,11 @@ void Player::doAttacking(uint32_t) uint64_t Player::getGainedExperience(Creature* attacker) const { - if (g_config.getBoolean(ConfigManager::EXPERIENCE_FROM_PLAYERS)) { + if (getBoolean(ConfigManager::EXPERIENCE_FROM_PLAYERS)) { Player* attackerPlayer = attacker->getPlayer(); if (attackerPlayer && attackerPlayer != this && skillLoss && std::abs(static_cast(attackerPlayer->getLevel() - level)) <= - g_config.getNumber(ConfigManager::EXP_FROM_PLAYERS_LEVEL_RANGE)) { + getNumber(ConfigManager::EXP_FROM_PLAYERS_LEVEL_RANGE)) { return std::max(0, std::floor(getLostExperience() * getDamageRatio(attacker) * 0.75)); } } @@ -3717,9 +3714,8 @@ bool Player::onKilledCreature(Creature* target, bool lastHit /* = true*/) if (lastHit && hasCondition(CONDITION_INFIGHT)) { pzLocked = true; - Condition* condition = - Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_INFIGHT, - g_config.getNumber(ConfigManager::WHITE_SKULL_TIME) * 1000, 0); + Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_INFIGHT, + getNumber(ConfigManager::WHITE_SKULL_TIME) * 1000, 0); addCondition(condition); } } @@ -4002,16 +3998,16 @@ void Player::addUnjustifiedDead(const Player* attacked) sendTextMessage(MESSAGE_EVENT_ADVANCE, "Warning! The murder of " + attacked->getName() + " was not justified."); - skullTicks += g_config.getNumber(ConfigManager::FRAG_TIME); + skullTicks += getNumber(ConfigManager::FRAG_TIME); if (getSkull() != SKULL_BLACK) { - if (g_config.getNumber(ConfigManager::KILLS_TO_BLACK) != 0 && - skullTicks > (g_config.getNumber(ConfigManager::KILLS_TO_BLACK) - 1) * - static_cast(g_config.getNumber(ConfigManager::FRAG_TIME))) { + if (getNumber(ConfigManager::KILLS_TO_BLACK) != 0 && + skullTicks > (getNumber(ConfigManager::KILLS_TO_BLACK) - 1) * + static_cast(getNumber(ConfigManager::FRAG_TIME))) { setSkull(SKULL_BLACK); - } else if (getSkull() != SKULL_RED && g_config.getNumber(ConfigManager::KILLS_TO_RED) != 0 && - skullTicks > (g_config.getNumber(ConfigManager::KILLS_TO_RED) - 1) * - static_cast(g_config.getNumber(ConfigManager::FRAG_TIME))) { + } else if (getSkull() != SKULL_RED && getNumber(ConfigManager::KILLS_TO_RED) != 0 && + skullTicks > (getNumber(ConfigManager::KILLS_TO_RED) - 1) * + static_cast(getNumber(ConfigManager::FRAG_TIME))) { setSkull(SKULL_RED); } } @@ -4039,7 +4035,7 @@ bool Player::isPromoted() const double Player::getLostPercent() const { - int32_t deathLosePercent = g_config.getNumber(ConfigManager::DEATH_LOSE_PERCENT); + int32_t deathLosePercent = getNumber(ConfigManager::DEATH_LOSE_PERCENT); if (deathLosePercent != -1) { if (isPromoted()) { deathLosePercent -= 3; @@ -4114,7 +4110,7 @@ bool Player::isInWarList(uint32_t guildId) const bool Player::isPremium() const { - if (g_config.getBoolean(ConfigManager::FREE_PREMIUM) || hasFlag(PlayerFlag_IsAlwaysPremium)) { + if (getBoolean(ConfigManager::FREE_PREMIUM) || hasFlag(PlayerFlag_IsAlwaysPremium)) { return true; } @@ -4621,7 +4617,7 @@ size_t Player::getMaxVIPEntries() const return group->maxVipEntries; } - return g_config.getNumber(isPremium() ? ConfigManager::VIP_PREMIUM_LIMIT : ConfigManager::VIP_FREE_LIMIT); + return getNumber(isPremium() ? ConfigManager::VIP_PREMIUM_LIMIT : ConfigManager::VIP_FREE_LIMIT); } size_t Player::getMaxDepotItems() const @@ -4630,7 +4626,7 @@ size_t Player::getMaxDepotItems() const return group->maxDepotItems; } - return g_config.getNumber(isPremium() ? ConfigManager::DEPOT_PREMIUM_LIMIT : ConfigManager::DEPOT_FREE_LIMIT); + return getNumber(isPremium() ? ConfigManager::DEPOT_PREMIUM_LIMIT : ConfigManager::DEPOT_FREE_LIMIT); } std::forward_list Player::getMuteConditions() const diff --git a/src/protocolgame.cpp b/src/protocolgame.cpp index b1bc5d5c3a..33db2d15eb 100644 --- a/src/protocolgame.cpp +++ b/src/protocolgame.cpp @@ -22,7 +22,6 @@ #include "scheduler.h" #include "storeinbox.h" -extern ConfigManager g_config; extern CreatureEvents* g_creatureEvents; extern Chat* g_chat; @@ -68,7 +67,7 @@ std::size_t clientLogin(const Player& player) return 0; } - uint32_t maxPlayers = static_cast(g_config.getNumber(ConfigManager::MAX_PLAYERS)); + uint32_t maxPlayers = static_cast(getNumber(ConfigManager::MAX_PLAYERS)); if (maxPlayers == 0 || (waitList.empty() && g_game.getPlayersOnline() < maxPlayers)) { return 0; } @@ -154,7 +153,7 @@ void ProtocolGame::login(uint32_t characterId, uint32_t accountId, OperatingSyst { // dispatcher thread Player* foundPlayer = g_game.getPlayerByGUID(characterId); - if (!foundPlayer || g_config.getBoolean(ConfigManager::ALLOW_CLONES)) { + if (!foundPlayer || getBoolean(ConfigManager::ALLOW_CLONES)) { player = new Player(getThis()); player->incrementReferenceCounter(); @@ -181,8 +180,8 @@ void ProtocolGame::login(uint32_t characterId, uint32_t accountId, OperatingSyst return; } - if (g_config.getBoolean(ConfigManager::ONE_PLAYER_ON_ACCOUNT) && - player->getAccountType() < ACCOUNT_TYPE_GAMEMASTER && g_game.getPlayerByAccount(player->getAccount())) { + if (getBoolean(ConfigManager::ONE_PLAYER_ON_ACCOUNT) && player->getAccountType() < ACCOUNT_TYPE_GAMEMASTER && + g_game.getPlayerByAccount(player->getAccount())) { disconnectClient("You may only login with one character\nof your account at the same time."); return; } @@ -236,7 +235,7 @@ void ProtocolGame::login(uint32_t characterId, uint32_t accountId, OperatingSyst player->lastLoginSaved = std::max(time(nullptr), player->lastLoginSaved + 1); acceptPackets = true; } else { - if (eventConnect != 0 || !g_config.getBoolean(ConfigManager::REPLACE_KICK_ON_LOGIN)) { + if (eventConnect != 0 || !getBoolean(ConfigManager::REPLACE_KICK_ON_LOGIN)) { // Already trying to connect disconnectClient("You are already logged in."); return; @@ -412,7 +411,7 @@ void ProtocolGame::onRecvFirstMessage(NetworkMessage& msg) uint32_t tokenTime = 0; // two-factor auth - if (g_config.getBoolean(ConfigManager::TWO_FACTOR_AUTH)) { + if (getBoolean(ConfigManager::TWO_FACTOR_AUTH)) { if (sessionArgs.size() < 4) { disconnectClient("Authentication failed. Incomplete session key."); return; @@ -1775,7 +1774,7 @@ void ProtocolGame::sendBasicData() msg.addByte(0x9F); if (player->isPremium()) { msg.addByte(1); - msg.add(g_config.getBoolean(ConfigManager::FREE_PREMIUM) ? 0 : player->premiumEndsAt); + msg.add(getBoolean(ConfigManager::FREE_PREMIUM) ? 0 : player->premiumEndsAt); } else { msg.addByte(0); msg.add(0); diff --git a/src/protocollogin.cpp b/src/protocollogin.cpp index 42497996f3..0761052d15 100644 --- a/src/protocollogin.cpp +++ b/src/protocollogin.cpp @@ -13,7 +13,6 @@ #include "rsa.h" #include "tasks.h" -extern ConfigManager g_config; extern Game g_game; void ProtocolLogin::disconnectClient(const std::string& message, uint16_t version) @@ -62,29 +61,29 @@ void ProtocolLogin::getCharacterList(const std::string& accountName, const std:: uint8_t size = std::min(std::numeric_limits::max(), account.characters.size()); - if (g_config.getBoolean(ConfigManager::ONLINE_OFFLINE_CHARLIST)) { + if (getBoolean(ConfigManager::ONLINE_OFFLINE_CHARLIST)) { output->addByte(2); // number of worlds for (uint8_t i = 0; i < 2; i++) { output->addByte(i); // world id output->addString(i == 0 ? "Offline" : "Online"); - output->addString(g_config.getString(ConfigManager::IP)); - output->add(g_config.getNumber(ConfigManager::GAME_PORT)); + output->addString(getString(ConfigManager::IP)); + output->add(getNumber(ConfigManager::GAME_PORT)); output->addByte(0); } } else { output->addByte(1); // number of worlds output->addByte(0); // world id - output->addString(g_config.getString(ConfigManager::SERVER_NAME)); - output->addString(g_config.getString(ConfigManager::IP)); - output->add(g_config.getNumber(ConfigManager::GAME_PORT)); + output->addString(getString(ConfigManager::SERVER_NAME)); + output->addString(getString(ConfigManager::IP)); + output->add(getNumber(ConfigManager::GAME_PORT)); output->addByte(0); } output->addByte(size); for (uint8_t i = 0; i < size; i++) { const std::string& character = account.characters[i]; - if (g_config.getBoolean(ConfigManager::ONLINE_OFFLINE_CHARLIST)) { + if (getBoolean(ConfigManager::ONLINE_OFFLINE_CHARLIST)) { output->addByte(g_game.getPlayerByName(character) ? 1 : 0); } else { output->addByte(0); @@ -94,7 +93,7 @@ void ProtocolLogin::getCharacterList(const std::string& accountName, const std:: // Add premium days output->addByte(0); - if (g_config.getBoolean(ConfigManager::FREE_PREMIUM)) { + if (getBoolean(ConfigManager::FREE_PREMIUM)) { output->addByte(1); output->add(0); } else { diff --git a/src/protocolstatus.cpp b/src/protocolstatus.cpp index 49a65a908f..04c551d6d3 100644 --- a/src/protocolstatus.cpp +++ b/src/protocolstatus.cpp @@ -9,7 +9,6 @@ #include "game.h" #include "outputmessage.h" -extern ConfigManager g_config; extern Game g_game; std::map ProtocolStatus::ipConnectMap; @@ -29,14 +28,13 @@ enum RequestedInfo_t : uint16_t void ProtocolStatus::onRecvFirstMessage(NetworkMessage& msg) { - const static auto acceptorAddress = Connection::Address::from_string(g_config.getString(ConfigManager::IP)); + const static auto acceptorAddress = Connection::Address::from_string(getString(ConfigManager::IP)); const auto& ip = getIP(); if (!ip.is_loopback() && ip != acceptorAddress) { if (auto it = ipConnectMap.find(ip); - it != ipConnectMap.end() && - (OTSYS_TIME() < (it->second + g_config.getNumber(ConfigManager::STATUSQUERY_TIMEOUT)))) { + it != ipConnectMap.end() && (OTSYS_TIME() < (it->second + getNumber(ConfigManager::STATUSQUERY_TIMEOUT)))) { disconnect(); return; } @@ -92,22 +90,22 @@ void ProtocolStatus::sendStatusString() pugi::xml_node serverinfo = tsqp.append_child("serverinfo"); uint64_t uptime = (OTSYS_TIME() - ProtocolStatus::start) / 1000; serverinfo.append_attribute("uptime") = std::to_string(uptime).c_str(); - serverinfo.append_attribute("ip") = g_config.getString(ConfigManager::IP).c_str(); - serverinfo.append_attribute("servername") = g_config.getString(ConfigManager::SERVER_NAME).c_str(); - serverinfo.append_attribute("port") = std::to_string(g_config.getNumber(ConfigManager::LOGIN_PORT)).c_str(); - serverinfo.append_attribute("location") = g_config.getString(ConfigManager::LOCATION).c_str(); - serverinfo.append_attribute("url") = g_config.getString(ConfigManager::URL).c_str(); + serverinfo.append_attribute("ip") = getString(ConfigManager::IP).c_str(); + serverinfo.append_attribute("servername") = getString(ConfigManager::SERVER_NAME).c_str(); + serverinfo.append_attribute("port") = std::to_string(getNumber(ConfigManager::LOGIN_PORT)).c_str(); + serverinfo.append_attribute("location") = getString(ConfigManager::LOCATION).c_str(); + serverinfo.append_attribute("url") = getString(ConfigManager::URL).c_str(); serverinfo.append_attribute("server") = STATUS_SERVER_NAME; serverinfo.append_attribute("version") = STATUS_SERVER_VERSION; serverinfo.append_attribute("client") = CLIENT_VERSION_STR; pugi::xml_node owner = tsqp.append_child("owner"); - owner.append_attribute("name") = g_config.getString(ConfigManager::OWNER_NAME).c_str(); - owner.append_attribute("email") = g_config.getString(ConfigManager::OWNER_EMAIL).c_str(); + owner.append_attribute("name") = getString(ConfigManager::OWNER_NAME).c_str(); + owner.append_attribute("email") = getString(ConfigManager::OWNER_EMAIL).c_str(); pugi::xml_node players = tsqp.append_child("players"); players.append_attribute("online") = std::to_string(g_game.getPlayersOnline()).c_str(); - players.append_attribute("max") = std::to_string(g_config.getNumber(ConfigManager::MAX_PLAYERS)).c_str(); + players.append_attribute("max") = std::to_string(getNumber(ConfigManager::MAX_PLAYERS)).c_str(); players.append_attribute("peak") = std::to_string(g_game.getPlayersRecord()).c_str(); pugi::xml_node monsters = tsqp.append_child("monsters"); @@ -117,15 +115,15 @@ void ProtocolStatus::sendStatusString() npcs.append_attribute("total") = std::to_string(g_game.getNpcsOnline()).c_str(); pugi::xml_node rates = tsqp.append_child("rates"); - rates.append_attribute("experience") = std::to_string(g_config.getNumber(ConfigManager::RATE_EXPERIENCE)).c_str(); - rates.append_attribute("skill") = std::to_string(g_config.getNumber(ConfigManager::RATE_SKILL)).c_str(); - rates.append_attribute("loot") = std::to_string(g_config.getNumber(ConfigManager::RATE_LOOT)).c_str(); - rates.append_attribute("magic") = std::to_string(g_config.getNumber(ConfigManager::RATE_MAGIC)).c_str(); - rates.append_attribute("spawn") = std::to_string(g_config.getNumber(ConfigManager::RATE_SPAWN)).c_str(); + rates.append_attribute("experience") = std::to_string(getNumber(ConfigManager::RATE_EXPERIENCE)).c_str(); + rates.append_attribute("skill") = std::to_string(getNumber(ConfigManager::RATE_SKILL)).c_str(); + rates.append_attribute("loot") = std::to_string(getNumber(ConfigManager::RATE_LOOT)).c_str(); + rates.append_attribute("magic") = std::to_string(getNumber(ConfigManager::RATE_MAGIC)).c_str(); + rates.append_attribute("spawn") = std::to_string(getNumber(ConfigManager::RATE_SPAWN)).c_str(); pugi::xml_node map = tsqp.append_child("map"); - map.append_attribute("name") = g_config.getString(ConfigManager::MAP_NAME).c_str(); - map.append_attribute("author") = g_config.getString(ConfigManager::MAP_AUTHOR).c_str(); + map.append_attribute("name") = getString(ConfigManager::MAP_NAME).c_str(); + map.append_attribute("author") = getString(ConfigManager::MAP_AUTHOR).c_str(); uint32_t mapWidth, mapHeight; g_game.getMapDimensions(mapWidth, mapHeight); @@ -150,36 +148,36 @@ void ProtocolStatus::sendInfo(uint16_t requestedInfo, const std::string& charact if (requestedInfo & REQUEST_BASIC_SERVER_INFO) { output->addByte(0x10); - output->addString(g_config.getString(ConfigManager::SERVER_NAME)); - output->addString(g_config.getString(ConfigManager::IP)); - output->addString(std::to_string(g_config.getNumber(ConfigManager::LOGIN_PORT))); + output->addString(getString(ConfigManager::SERVER_NAME)); + output->addString(getString(ConfigManager::IP)); + output->addString(std::to_string(getNumber(ConfigManager::LOGIN_PORT))); } if (requestedInfo & REQUEST_OWNER_SERVER_INFO) { output->addByte(0x11); - output->addString(g_config.getString(ConfigManager::OWNER_NAME)); - output->addString(g_config.getString(ConfigManager::OWNER_EMAIL)); + output->addString(getString(ConfigManager::OWNER_NAME)); + output->addString(getString(ConfigManager::OWNER_EMAIL)); } if (requestedInfo & REQUEST_MISC_SERVER_INFO) { output->addByte(0x12); output->addString("N/A"); // MOTD - output->addString(g_config.getString(ConfigManager::LOCATION)); - output->addString(g_config.getString(ConfigManager::URL)); + output->addString(getString(ConfigManager::LOCATION)); + output->addString(getString(ConfigManager::URL)); output->add((OTSYS_TIME() - ProtocolStatus::start) / 1000); } if (requestedInfo & REQUEST_PLAYERS_INFO) { output->addByte(0x20); output->add(g_game.getPlayersOnline()); - output->add(g_config.getNumber(ConfigManager::MAX_PLAYERS)); + output->add(getNumber(ConfigManager::MAX_PLAYERS)); output->add(g_game.getPlayersRecord()); } if (requestedInfo & REQUEST_MAP_INFO) { output->addByte(0x30); - output->addString(g_config.getString(ConfigManager::MAP_NAME)); - output->addString(g_config.getString(ConfigManager::MAP_AUTHOR)); + output->addString(getString(ConfigManager::MAP_NAME)); + output->addString(getString(ConfigManager::MAP_AUTHOR)); uint32_t mapWidth, mapHeight; g_game.getMapDimensions(mapWidth, mapHeight); output->add(mapWidth); diff --git a/src/script.cpp b/src/script.cpp index 457e7c1dfc..ce34d26c2c 100644 --- a/src/script.cpp +++ b/src/script.cpp @@ -8,7 +8,6 @@ #include "configmanager.h" extern LuaEnvironment g_luaEnvironment; -extern ConfigManager g_config; Scripts::Scripts() : scriptInterface("Scripts Interface") { scriptInterface.initState(); } @@ -35,7 +34,7 @@ bool Scripts::loadScripts(std::string folderName, bool isLib, bool reload) if (fs::is_regular_file(*it) && it->path().extension() == ".lua") { size_t found = it->path().filename().string().find(disable); if (found != std::string::npos) { - if (g_config.getBoolean(ConfigManager::SCRIPTS_CONSOLE_LOGS)) { + if (getBoolean(ConfigManager::SCRIPTS_CONSOLE_LOGS)) { std::cout << "> " << it->path().filename().string() << " [disabled]" << std::endl; } continue; @@ -50,7 +49,7 @@ bool Scripts::loadScripts(std::string folderName, bool isLib, bool reload) if (!isLib) { if (redir.empty() || redir != it->parent_path().string()) { auto p = fs::path(it->relative_path()); - if (g_config.getBoolean(ConfigManager::SCRIPTS_CONSOLE_LOGS)) { + if (getBoolean(ConfigManager::SCRIPTS_CONSOLE_LOGS)) { std::cout << ">> [" << p.parent_path().filename() << "]" << std::endl; } redir = it->parent_path().string(); @@ -63,7 +62,7 @@ bool Scripts::loadScripts(std::string folderName, bool isLib, bool reload) continue; } - if (g_config.getBoolean(ConfigManager::SCRIPTS_CONSOLE_LOGS)) { + if (getBoolean(ConfigManager::SCRIPTS_CONSOLE_LOGS)) { if (!reload) { std::cout << "> " << it->filename().string() << " [loaded]" << std::endl; } else { diff --git a/src/server.cpp b/src/server.cpp index 74aa1b21cb..5cda226c84 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -9,15 +9,14 @@ #include "configmanager.h" #include "scheduler.h" -extern ConfigManager g_config; Ban g_bans; namespace { boost::asio::ip::address getListenAddress() { - if (g_config.getBoolean(ConfigManager::BIND_ONLY_GLOBAL_ADDRESS)) { - return boost::asio::ip::address::from_string(g_config.getString(ConfigManager::IP)); + if (getBoolean(ConfigManager::BIND_ONLY_GLOBAL_ADDRESS)) { + return boost::asio::ip::address::from_string(getString(ConfigManager::IP)); } return boost::asio::ip::address_v6::any(); } diff --git a/src/signals.cpp b/src/signals.cpp index 0f1bdabc65..7a8f7e6746 100644 --- a/src/signals.cpp +++ b/src/signals.cpp @@ -27,7 +27,6 @@ extern Scheduler g_scheduler; extern DatabaseTasks g_databaseTasks; extern Dispatcher g_dispatcher; -extern ConfigManager g_config; extern Actions* g_actions; extern Monsters g_monsters; extern TalkActions* g_talkActions; @@ -60,7 +59,7 @@ void sighupHandler() g_actions->reload(); std::cout << "Reloaded actions." << std::endl; - g_config.load(); + ConfigManager::load(); std::cout << "Reloaded config." << std::endl; g_creatureEvents->reload(); diff --git a/src/spawn.cpp b/src/spawn.cpp index fd85e1c67f..a744e58793 100644 --- a/src/spawn.cpp +++ b/src/spawn.cpp @@ -14,7 +14,6 @@ #include "scheduler.h" #include "spectators.h" -extern ConfigManager g_config; extern Monsters g_monsters; extern Game g_game; extern Events* g_events; @@ -375,7 +374,7 @@ void Spawn::checkSpawn() continue; } - if (++spawnCount >= static_cast(g_config.getNumber(ConfigManager::RATE_SPAWN))) { + if (++spawnCount >= static_cast(getNumber(ConfigManager::RATE_SPAWN))) { break; } } diff --git a/src/spells.cpp b/src/spells.cpp index 4fd1b58151..0a06912373 100644 --- a/src/spells.cpp +++ b/src/spells.cpp @@ -17,7 +17,6 @@ extern Game g_game; extern Spells* g_spells; extern Events* g_events; extern Monsters g_monsters; -extern ConfigManager g_config; extern LuaEnvironment g_luaEnvironment; Spells::Spells() { scriptInterface.initState(); } @@ -1166,7 +1165,7 @@ bool RuneSpell::executeUse(Player* player, Item* item, const Position&, Thing* t } } - if (hasCharges && item && g_config.getBoolean(ConfigManager::REMOVE_RUNE_CHARGES)) { + if (hasCharges && item && getBoolean(ConfigManager::REMOVE_RUNE_CHARGES)) { int32_t newCount = std::max(0, item->getItemCount() - 1); player->sendSupplyUsed(item->getClientID()); g_game.transformItem(item, item->getID(), newCount); diff --git a/src/tile.cpp b/src/tile.cpp index 0819850d48..1db0558d2b 100644 --- a/src/tile.cpp +++ b/src/tile.cpp @@ -19,7 +19,6 @@ extern Game g_game; extern MoveEvents* g_moveEvents; -extern ConfigManager g_config; StaticTile real_nullptr_tile(0xFFFF, 0xFFFF, 0xFF); Tile& Tile::nullptr_tile = real_nullptr_tile; @@ -377,7 +376,7 @@ void Tile::onAddTileItem(Item* item) spectator->onAddTileItem(this, cylinderMapPos); } - if ((!hasFlag(TILESTATE_PROTECTIONZONE) || g_config.getBoolean(ConfigManager::CLEAN_PROTECTION_ZONES)) && + if ((!hasFlag(TILESTATE_PROTECTIONZONE) || getBoolean(ConfigManager::CLEAN_PROTECTION_ZONES)) && item->isCleanable()) { if (!dynamic_cast(this)) { g_game.addTileToClean(this); @@ -450,7 +449,7 @@ void Tile::onRemoveTileItem(const SpectatorVec& spectators, const std::vectoronRemoveTileItem(this, cylinderMapPos, iType, item); } - if (!hasFlag(TILESTATE_PROTECTIONZONE) || g_config.getBoolean(ConfigManager::CLEAN_PROTECTION_ZONES)) { + if (!hasFlag(TILESTATE_PROTECTIONZONE) || getBoolean(ConfigManager::CLEAN_PROTECTION_ZONES)) { auto items = getItemList(); if (!items || items->empty()) { g_game.removeTileToClean(this); diff --git a/src/tools.cpp b/src/tools.cpp index 4e3ffc45e6..1beb898fbf 100644 --- a/src/tools.cpp +++ b/src/tools.cpp @@ -10,8 +10,6 @@ #include #include -extern ConfigManager g_config; - void printXMLError(const std::string& where, const std::string& fileName, const pugi::xml_parse_result& result) { std::cout << '[' << where << "] Failed to load " << fileName << ": " << result.description() << std::endl; diff --git a/src/vocation.h b/src/vocation.h index 5cf1db224d..49bfdb386f 100644 --- a/src/vocation.h +++ b/src/vocation.h @@ -7,8 +7,6 @@ #include "configmanager.h" #include "enums.h" -extern ConfigManager g_config; - class Vocation { public: @@ -46,7 +44,7 @@ class Vocation bool getMagicShield() const { - if (!g_config.getBoolean(ConfigManager::MANASHIELD_BREAKABLE)) { + if (!getBoolean(ConfigManager::MANASHIELD_BREAKABLE)) { return false; } return magicShield; diff --git a/src/weapons.cpp b/src/weapons.cpp index 60a5f112b2..84511ce1e7 100644 --- a/src/weapons.cpp +++ b/src/weapons.cpp @@ -13,7 +13,6 @@ extern Game g_game; extern Vocations g_vocations; -extern ConfigManager g_config; extern Weapons* g_weapons; Weapons::Weapons() { scriptInterface.initState(); } @@ -453,7 +452,7 @@ void Weapon::onUsedWeapon(Player* player, Item* item, Tile* destTile) const switch (action) { case WEAPONACTION_REMOVECOUNT: - if (g_config.getBoolean(ConfigManager::REMOVE_WEAPON_AMMO)) { + if (getBoolean(ConfigManager::REMOVE_WEAPON_AMMO)) { player->sendSupplyUsed(item->getClientID()); Weapon::decrementItemCount(item); player->sendQuiverUpdate(); @@ -462,7 +461,7 @@ void Weapon::onUsedWeapon(Player* player, Item* item, Tile* destTile) const case WEAPONACTION_REMOVECHARGE: { uint16_t charges = item->getCharges(); - if (charges != 0 && g_config.getBoolean(ConfigManager::REMOVE_WEAPON_CHARGES)) { + if (charges != 0 && getBoolean(ConfigManager::REMOVE_WEAPON_CHARGES)) { g_game.transformItem(item, item->getID(), charges - 1); } break;