diff --git a/.gitignore b/.gitignore index fc99e71417..df113d9f66 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ .idea/ .vscode/ .vs/ +vcpkg_installed/ # Build results diff --git a/src/actions.cpp b/src/actions.cpp index feae327e2c..a7a61d84fa 100644 --- a/src/actions.cpp +++ b/src/actions.cpp @@ -10,7 +10,7 @@ #include "game.h" #include "pugicast.h" #include "spells.h" -#include +#include extern Game g_game; extern Spells* g_spells; @@ -394,11 +394,11 @@ static void showUseHotkeyMessage(Player* player, const Item* item, uint32_t coun { const ItemType& it = Item::items[item->getID()]; if (!it.showCount) { - player->sendTextMessage(MESSAGE_INFO_DESCR, fmt::format("Using one of {:s}...", item->getName())); + player->sendTextMessage(MESSAGE_INFO_DESCR, std::format("Using one of {:s}...", item->getName())); } else if (count == 1) { - player->sendTextMessage(MESSAGE_INFO_DESCR, fmt::format("Using the last {:s}...", item->getName())); + player->sendTextMessage(MESSAGE_INFO_DESCR, std::format("Using the last {:s}...", item->getName())); } else { - player->sendTextMessage(MESSAGE_INFO_DESCR, fmt::format("Using one of {:d} {:s}...", count, item->getPluralName())); + player->sendTextMessage(MESSAGE_INFO_DESCR, std::format("Using one of {:d} {:s}...", count, item->getPluralName())); } } diff --git a/src/ban.cpp b/src/ban.cpp index 0bddad299d..04b2623538 100644 --- a/src/ban.cpp +++ b/src/ban.cpp @@ -8,7 +8,7 @@ #include "databasetasks.h" #include "tools.h" -#include +#include bool Ban::acceptConnection(uint32_t clientIP) { @@ -48,7 +48,7 @@ bool IOBan::isAccountBanned(uint32_t accountId, BanInfo& banInfo) { Database& db = Database::getInstance(); - DBResult_ptr result = db.storeQuery(fmt::format("SELECT `reason`, `expires_at`, `banned_at`, `banned_by`, (SELECT `name` FROM `players` WHERE `id` = `banned_by`) AS `name` FROM `account_bans` WHERE `account_id` = {:d}", accountId)); + DBResult_ptr result = db.storeQuery(std::format("SELECT `reason`, `expires_at`, `banned_at`, `banned_by`, (SELECT `name` FROM `players` WHERE `id` = `banned_by`) AS `name` FROM `account_bans` WHERE `account_id` = {:d}", accountId)); if (!result) { return false; } @@ -56,8 +56,8 @@ bool IOBan::isAccountBanned(uint32_t accountId, BanInfo& banInfo) int64_t expiresAt = result->getNumber("expires_at"); if (expiresAt != 0 && time(nullptr) > expiresAt) { // Move the ban to history if it has expired - g_databaseTasks.addTask(fmt::format("INSERT INTO `account_ban_history` (`account_id`, `reason`, `banned_at`, `expired_at`, `banned_by`) VALUES ({:d}, {:s}, {:d}, {:d}, {:d})", accountId, db.escapeString(result->getString("reason")), result->getNumber("banned_at"), expiresAt, result->getNumber("banned_by"))); - g_databaseTasks.addTask(fmt::format("DELETE FROM `account_bans` WHERE `account_id` = {:d}", accountId)); + g_databaseTasks.addTask(std::format("INSERT INTO `account_ban_history` (`account_id`, `reason`, `banned_at`, `expired_at`, `banned_by`) VALUES ({:d}, {:s}, {:d}, {:d}, {:d})", accountId, db.escapeString(result->getString("reason")), result->getNumber("banned_at"), expiresAt, result->getNumber("banned_by"))); + g_databaseTasks.addTask(std::format("DELETE FROM `account_bans` WHERE `account_id` = {:d}", accountId)); return false; } @@ -75,14 +75,14 @@ bool IOBan::isIpBanned(uint32_t clientIP, BanInfo& banInfo) Database& db = Database::getInstance(); - DBResult_ptr result = db.storeQuery(fmt::format("SELECT `reason`, `expires_at`, (SELECT `name` FROM `players` WHERE `id` = `banned_by`) AS `name` FROM `ip_bans` WHERE `ip` = {:d}", clientIP)); + DBResult_ptr result = db.storeQuery(std::format("SELECT `reason`, `expires_at`, (SELECT `name` FROM `players` WHERE `id` = `banned_by`) AS `name` FROM `ip_bans` WHERE `ip` = {:d}", clientIP)); if (!result) { return false; } int64_t expiresAt = result->getNumber("expires_at"); if (expiresAt != 0 && time(nullptr) > expiresAt) { - g_databaseTasks.addTask(fmt::format("DELETE FROM `ip_bans` WHERE `ip` = {:d}", clientIP)); + g_databaseTasks.addTask(std::format("DELETE FROM `ip_bans` WHERE `ip` = {:d}", clientIP)); return false; } @@ -94,5 +94,5 @@ bool IOBan::isIpBanned(uint32_t clientIP, BanInfo& banInfo) bool IOBan::isPlayerNamelocked(uint32_t playerId) { - return Database::getInstance().storeQuery(fmt::format("SELECT 1 FROM `player_namelocks` WHERE `player_id` = {:d}", playerId)).get() != nullptr; + return Database::getInstance().storeQuery(std::format("SELECT 1 FROM `player_namelocks` WHERE `player_id` = {:d}", playerId)).get() != nullptr; } diff --git a/src/chat.cpp b/src/chat.cpp index 19777c97ac..514032ea9f 100644 --- a/src/chat.cpp +++ b/src/chat.cpp @@ -8,7 +8,7 @@ #include "pugicast.h" #include "scheduler.h" -#include +#include extern Chat* g_chat; extern Game g_game; @@ -33,9 +33,9 @@ void PrivateChatChannel::invitePlayer(const Player& player, Player& invitePlayer return; } - invitePlayer.sendTextMessage(MESSAGE_INFO_DESCR, fmt::format("{:s} invites you to {:s} private chat channel.", player.getName(), player.getSex() == PLAYERSEX_FEMALE ? "her" : "his")); + invitePlayer.sendTextMessage(MESSAGE_INFO_DESCR, std::format("{:s} invites you to {:s} private chat channel.", player.getName(), player.getSex() == PLAYERSEX_FEMALE ? "her" : "his")); - player.sendTextMessage(MESSAGE_INFO_DESCR, fmt::format("{:s} has been invited.", invitePlayer.getName())); + player.sendTextMessage(MESSAGE_INFO_DESCR, std::format("{:s} has been invited.", invitePlayer.getName())); for (const auto& it : users) { it.second->sendChannelEvent(id, invitePlayer.getName(), CHANNELEVENT_INVITE); @@ -50,7 +50,7 @@ void PrivateChatChannel::excludePlayer(const Player& player, Player& excludePlay removeUser(excludePlayer); - player.sendTextMessage(MESSAGE_INFO_DESCR, fmt::format("{:s} has been excluded.", excludePlayer.getName())); + player.sendTextMessage(MESSAGE_INFO_DESCR, std::format("{:s} has been excluded.", excludePlayer.getName())); excludePlayer.sendClosePrivate(id); diff --git a/src/connection.cpp b/src/connection.cpp index 4c0cc45d16..1a9c274bb5 100644 --- a/src/connection.cpp +++ b/src/connection.cpp @@ -12,7 +12,7 @@ extern ConfigManager g_config; -Connection_ptr ConnectionManager::createConnection(boost::asio::io_service& io_service, ConstServicePort_ptr servicePort) +Connection_ptr ConnectionManager::createConnection(asio::io_service& io_service, ConstServicePort_ptr servicePort) { std::lock_guard lockClass(connectionManagerLock); @@ -34,10 +34,10 @@ void ConnectionManager::closeAll() for (const auto& connection : connections) { try { - boost::system::error_code error; - connection->socket.shutdown(boost::asio::ip::tcp::socket::shutdown_both, error); + std::error_code error; + connection->socket.shutdown(asio::ip::tcp::socket::shutdown_both, error); connection->socket.close(error); - } catch (boost::system::system_error&) { + } catch (std::error_code&) { } } connections.clear(); @@ -74,10 +74,10 @@ void Connection::closeSocket() try { readTimer.cancel(); writeTimer.cancel(); - boost::system::error_code error; - socket.shutdown(boost::asio::ip::tcp::socket::shutdown_both, error); + std::error_code error; + socket.shutdown(asio::ip::tcp::socket::shutdown_both, error); socket.close(error); - } catch (boost::system::system_error& e) { + } catch (std::system_error& e) { std::cout << "[Network error - Connection::closeSocket] " << e.what() << std::endl; } } @@ -104,16 +104,16 @@ void Connection::accept() readTimer.async_wait(std::bind(&Connection::handleTimeout, std::weak_ptr(shared_from_this()), std::placeholders::_1)); // Read size of the first packet - boost::asio::async_read(socket, - boost::asio::buffer(msg.getBuffer(), NetworkMessage::HEADER_LENGTH), + asio::async_read(socket, + asio::buffer(msg.getBuffer(), NetworkMessage::HEADER_LENGTH), std::bind(&Connection::parseHeader, shared_from_this(), std::placeholders::_1)); - } catch (boost::system::system_error& e) { + } catch (std::system_error& e) { std::cout << "[Network error - Connection::accept] " << e.what() << std::endl; close(FORCE_CLOSE); } } -void Connection::parseHeader(const boost::system::error_code& error) +void Connection::parseHeader(const std::error_code& error) { std::lock_guard lockClass(connectionLock); readTimer.cancel(); @@ -150,15 +150,15 @@ void Connection::parseHeader(const boost::system::error_code& error) // Read packet content msg.setLength(size + NetworkMessage::HEADER_LENGTH); - boost::asio::async_read(socket, boost::asio::buffer(msg.getBodyBuffer(), size), + asio::async_read(socket, asio::buffer(msg.getBodyBuffer(), size), std::bind(&Connection::parsePacket, shared_from_this(), std::placeholders::_1)); - } catch (boost::system::system_error& e) { + } catch (std::system_error& e) { std::cout << "[Network error - Connection::parseHeader] " << e.what() << std::endl; close(FORCE_CLOSE); } } -void Connection::parsePacket(const boost::system::error_code& error) +void Connection::parsePacket(const std::error_code& error) { std::lock_guard lockClass(connectionLock); readTimer.cancel(); @@ -211,10 +211,10 @@ void Connection::parsePacket(const boost::system::error_code& error) std::placeholders::_1)); // Wait to the next packet - boost::asio::async_read(socket, - boost::asio::buffer(msg.getBuffer(), NetworkMessage::HEADER_LENGTH), + asio::async_read(socket, + asio::buffer(msg.getBuffer(), NetworkMessage::HEADER_LENGTH), std::bind(&Connection::parseHeader, shared_from_this(), std::placeholders::_1)); - } catch (boost::system::system_error& e) { + } catch (std::system_error& e) { std::cout << "[Network error - Connection::parsePacket] " << e.what() << std::endl; close(FORCE_CLOSE); } @@ -242,10 +242,10 @@ void Connection::internalSend(const OutputMessage_ptr& msg) writeTimer.async_wait(std::bind(&Connection::handleTimeout, std::weak_ptr(shared_from_this()), std::placeholders::_1)); - boost::asio::async_write(socket, - boost::asio::buffer(msg->getOutputBuffer(), msg->getLength()), + asio::async_write(socket, + asio::buffer(msg->getOutputBuffer(), msg->getLength()), std::bind(&Connection::onWriteOperation, shared_from_this(), std::placeholders::_1)); - } catch (boost::system::system_error& e) { + } catch (std::system_error& e) { std::cout << "[Network error - Connection::internalSend] " << e.what() << std::endl; close(FORCE_CLOSE); } @@ -256,8 +256,8 @@ uint32_t Connection::getIP() std::lock_guard lockClass(connectionLock); // IP-address is expressed in network byte order - boost::system::error_code error; - const boost::asio::ip::tcp::endpoint endpoint = socket.remote_endpoint(error); + std::error_code error; + const asio::ip::tcp::endpoint endpoint = socket.remote_endpoint(error); if (error) { return 0; } @@ -265,7 +265,7 @@ uint32_t Connection::getIP() return htonl(endpoint.address().to_v4().to_ulong()); } -void Connection::onWriteOperation(const boost::system::error_code& error) +void Connection::onWriteOperation(const std::error_code& error) { std::lock_guard lockClass(connectionLock); writeTimer.cancel(); @@ -284,9 +284,9 @@ void Connection::onWriteOperation(const boost::system::error_code& error) } } -void Connection::handleTimeout(ConnectionWeak_ptr connectionWeak, const boost::system::error_code& error) +void Connection::handleTimeout(ConnectionWeak_ptr connectionWeak, const std::error_code& error) { - if (error == boost::asio::error::operation_aborted) { + if (error == asio::error::operation_aborted) { //The timer has been manually canceled return; } diff --git a/src/connection.h b/src/connection.h index 8ac7ad0d27..28894b2ffe 100644 --- a/src/connection.h +++ b/src/connection.h @@ -32,7 +32,7 @@ class ConnectionManager return instance; } - Connection_ptr createConnection(boost::asio::io_service& io_service, ConstServicePort_ptr servicePort); + Connection_ptr createConnection(asio::io_service& io_service, ConstServicePort_ptr servicePort); void releaseConnection(const Connection_ptr& connection); void closeAll(); @@ -52,7 +52,7 @@ class Connection : public std::enable_shared_from_this enum { FORCE_CLOSE = true }; - Connection(boost::asio::io_service& io_service, + Connection(asio::io_service& io_service, ConstServicePort_ptr service_port) : readTimer(io_service), writeTimer(io_service), @@ -73,25 +73,25 @@ class Connection : public std::enable_shared_from_this uint32_t getIP(); private: - void parseHeader(const boost::system::error_code& error); - void parsePacket(const boost::system::error_code& error); + void parseHeader(const std::error_code& error); + void parsePacket(const std::error_code& error); - void onWriteOperation(const boost::system::error_code& error); + void onWriteOperation(const std::error_code& error); - static void handleTimeout(ConnectionWeak_ptr connectionWeak, const boost::system::error_code& error); + static void handleTimeout(ConnectionWeak_ptr connectionWeak, const std::error_code& error); void closeSocket(); void internalSend(const OutputMessage_ptr& msg); - boost::asio::ip::tcp::socket& getSocket() { + asio::ip::tcp::socket& getSocket() { return socket; } friend class ServicePort; NetworkMessage msg; - boost::asio::steady_timer readTimer; - boost::asio::steady_timer writeTimer; + asio::steady_timer readTimer; + asio::steady_timer writeTimer; std::recursive_mutex connectionLock; @@ -100,7 +100,7 @@ class Connection : public std::enable_shared_from_this ConstServicePort_ptr service_port; Protocol_ptr protocol; - boost::asio::ip::tcp::socket socket; + asio::ip::tcp::socket socket; time_t timeConnected; uint32_t packetsSent = 0; diff --git a/src/databasemanager.cpp b/src/databasemanager.cpp index 30c1ccf323..e0a65cdee2 100644 --- a/src/databasemanager.cpp +++ b/src/databasemanager.cpp @@ -7,7 +7,7 @@ #include "databasemanager.h" #include "luascript.h" -#include +#include extern ConfigManager g_config; @@ -15,7 +15,7 @@ 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)))); + DBResult_ptr result = db.storeQuery(std::format("SELECT `TABLE_NAME` FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = {:s} AND `DATA_FREE` > 0", db.escapeString(g_config.getString(ConfigManager::MYSQL_DB)))); if (!result) { return false; } @@ -24,7 +24,7 @@ bool DatabaseManager::optimizeTables() std::string tableName = result->getString("TABLE_NAME"); std::cout << "> Optimizing table " << tableName << "..." << std::flush; - if (db.executeQuery(fmt::format("OPTIMIZE TABLE `{:s}`", tableName))) { + if (db.executeQuery(std::format("OPTIMIZE TABLE `{:s}`", tableName))) { std::cout << " [success]" << std::endl; } else { std::cout << " [failed]" << std::endl; @@ -36,13 +36,13 @@ bool DatabaseManager::optimizeTables() bool DatabaseManager::tableExists(const std::string& tableName) { Database& db = Database::getInstance(); - 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))).get() != nullptr; + return db.storeQuery(std::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))).get() != nullptr; } 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)))).get() != nullptr; + return db.storeQuery(std::format("SELECT `TABLE_NAME` FROM `information_schema`.`tables` WHERE `TABLE_SCHEMA` = {:s}", db.escapeString(g_config.getString(ConfigManager::MYSQL_DB)))).get() != nullptr; } int32_t DatabaseManager::getDatabaseVersion() @@ -84,7 +84,7 @@ void DatabaseManager::updateDatabase() int32_t version = getDatabaseVersion(); do { - if (luaL_dofile(L, fmt::format("data/migrations/{:d}.lua", version).c_str()) != 0) { + if (luaL_dofile(L, std::format("data/migrations/{:d}.lua", version).c_str()) != 0) { std::cout << "[Error - DatabaseManager::updateDatabase - Version: " << version << "] " << lua_tostring(L, -1) << std::endl; break; } @@ -118,7 +118,7 @@ bool DatabaseManager::getDatabaseConfig(const std::string& config, int32_t& valu { Database& db = Database::getInstance(); - DBResult_ptr result = db.storeQuery(fmt::format("SELECT `value` FROM `server_config` WHERE `config` = {:s}", db.escapeString(config))); + DBResult_ptr result = db.storeQuery(std::format("SELECT `value` FROM `server_config` WHERE `config` = {:s}", db.escapeString(config))); if (!result) { return false; } @@ -134,8 +134,8 @@ void DatabaseManager::registerDatabaseConfig(const std::string& config, int32_t int32_t tmp; if (!getDatabaseConfig(config, tmp)) { - db.executeQuery(fmt::format("INSERT INTO `server_config` VALUES ({:s}, '{:d}')", db.escapeString(config), value)); + db.executeQuery(std::format("INSERT INTO `server_config` VALUES ({:s}, '{:d}')", db.escapeString(config), value)); } else { - db.executeQuery(fmt::format("UPDATE `server_config` SET `value` = '{:d}' WHERE `config` = {:s}", value, db.escapeString(config))); + db.executeQuery(std::format("UPDATE `server_config` SET `value` = '{:d}' WHERE `config` = {:s}", value, db.escapeString(config))); } } diff --git a/src/fileloader.cpp b/src/fileloader.cpp index e4f158efce..4b115bd088 100644 --- a/src/fileloader.cpp +++ b/src/fileloader.cpp @@ -4,6 +4,7 @@ #include "otpch.h" #include + #include "fileloader.h" namespace OTB { diff --git a/src/fileloader.h b/src/fileloader.h index abfd8f6311..1e713e5485 100644 --- a/src/fileloader.h +++ b/src/fileloader.h @@ -4,14 +4,77 @@ #ifndef FS_FILELOADER_H_9B663D19E58D42E6BFACFE5B09D7A05E #define FS_FILELOADER_H_9B663D19E58D42E6BFACFE5B09D7A05E +#include +#include #include #include -#include class PropStream; namespace OTB { -using MappedFile = boost::iostreams::mapped_file_source; + +class MappedFile +{ +public: + using container_type = std::vector; + using iterator = container_type::const_iterator; + + MappedFile() = default; + + explicit MappedFile(const std::filesystem::path& path) + { + open(path); + } + + bool open(const std::filesystem::path& path) + { + std::ifstream file(path, std::ios::binary); + if (!file) { + return false; + } + + data_ = { + std::istreambuf_iterator(file), + std::istreambuf_iterator() + }; + + return true; + } + + [[nodiscard]] + bool is_open() const noexcept + { + return !data_.empty(); + } + + [[nodiscard]] + iterator begin() const noexcept + { + return data_.begin(); + } + + [[nodiscard]] + iterator end() const noexcept + { + return data_.end(); + } + + [[nodiscard]] + const char* data() const noexcept + { + return data_.data(); + } + + [[nodiscard]] + std::size_t size() const noexcept + { + return data_.size(); + } + +private: + container_type data_; +}; + using ContentIt = MappedFile::iterator; using Identifier = std::array; diff --git a/src/game.cpp b/src/game.cpp index ef17fccbc4..151bb87e62 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -26,7 +26,7 @@ #include "weapons.h" #include "script.h" -#include +#include extern ConfigManager g_config; extern Actions* g_actions; @@ -2728,7 +2728,7 @@ bool Game::internalStartTrade(Player* player, Player* tradePartner, Item* tradeI player->sendTradeItemRequest(player->getName(), tradeItem, true); if (tradePartner->tradeState == TRADE_NONE) { - tradePartner->sendTextMessage(MESSAGE_EVENT_ADVANCE, fmt::format("{:s} wants to trade with you.", player->getName())); + tradePartner->sendTextMessage(MESSAGE_EVENT_ADVANCE, std::format("{:s} wants to trade with you.", player->getName())); tradePartner->tradeState = TRADE_ACKNOWLEDGE; tradePartner->tradePartner = player; } else { @@ -2860,9 +2860,9 @@ std::string Game::getTradeErrorDescription(ReturnValue ret, Item* item) { if (item) { if (ret == RETURNVALUE_NOTENOUGHCAPACITY) { - return fmt::format("You do not have enough capacity to carry {:s}.\n {:s}", item->isStackable() && item->getItemCount() > 1 ? "these objects" : "this object", item->getWeightDescription()); + return std::format("You do not have enough capacity to carry {:s}.\n {:s}", item->isStackable() && item->getItemCount() > 1 ? "these objects" : "this object", item->getWeightDescription()); } else if (ret == RETURNVALUE_NOTENOUGHROOM || ret == RETURNVALUE_CONTAINERNOTENOUGHROOM) { - return fmt::format("You do not have enough room to carry {:s}.", item->isStackable() && item->getItemCount() > 1 ? "these objects" : "this object"); + return std::format("You do not have enough room to carry {:s}.", item->isStackable() && item->getItemCount() > 1 ? "these objects" : "this object"); } } return "Trade could not be completed."; @@ -3432,7 +3432,7 @@ void Game::playerSay(uint32_t playerId, uint16_t channelId, SpeakClasses type, uint32_t muteTime = player->isMuted(); if (muteTime > 0) { - player->sendTextMessage(MESSAGE_STATUS_SMALL, fmt::format("You are still muted for {:d} seconds.", muteTime)); + player->sendTextMessage(MESSAGE_STATUS_SMALL, std::format("You are still muted for {:d} seconds.", muteTime)); return; } @@ -3537,10 +3537,10 @@ bool Game::playerYell(Player* player, const std::string& text) internalCreatureSay(player, TALKTYPE_YELL, asUpperCaseString(text), false); return true; } else { - player->sendTextMessage(MESSAGE_STATUS_SMALL, fmt::format("You may not yell unless you have reached level {:d} or have a premium account.", minimumLevel)); + player->sendTextMessage(MESSAGE_STATUS_SMALL, std::format("You may not yell unless you have reached level {:d} or have a premium account.", minimumLevel)); } } else { - player->sendTextMessage(MESSAGE_STATUS_SMALL, fmt::format("You may not yell unless you have reached level {:d}.", minimumLevel)); + player->sendTextMessage(MESSAGE_STATUS_SMALL, std::format("You may not yell unless you have reached level {:d}.", minimumLevel)); } return false; } @@ -3575,7 +3575,7 @@ bool Game::playerSpeakTo(Player* player, SpeakClasses type, const std::string& r if (toPlayer->isInGhostMode() && !player->canSeeGhostMode(toPlayer)) { player->sendTextMessage(MESSAGE_STATUS_SMALL, "A player with this name is not online."); } else { - player->sendTextMessage(MESSAGE_STATUS_SMALL, fmt::format("Message sent to {:s}.", toPlayer->getName())); + player->sendTextMessage(MESSAGE_STATUS_SMALL, std::format("Message sent to {:s}.", toPlayer->getName())); } return true; } @@ -4003,7 +4003,7 @@ bool Game::combatChangeHealth(Creature* attacker, Creature* target, CombatDamage realHealthChange = target->getHealth() - realHealthChange; if (realHealthChange > 0 && !target->isInGhostMode()) { - auto damageString = fmt::format("{:d} hitpoint{:s}", realHealthChange, realHealthChange != 1 ? "s" : ""); + auto damageString = std::format("{:d} hitpoint{:s}", realHealthChange, realHealthChange != 1 ? "s" : ""); std::string spectatorMessage; @@ -4018,25 +4018,25 @@ bool Game::combatChangeHealth(Creature* attacker, Creature* target, CombatDamage Player* tmpPlayer = spectator->getPlayer(); if (tmpPlayer == attackerPlayer && attackerPlayer != targetPlayer) { message.type = MESSAGE_HEALED; - message.text = fmt::format("You heal {:s} for {:s}.", target->getNameDescription(), damageString); + message.text = std::format("You heal {:s} for {:s}.", target->getNameDescription(), damageString); } else if (tmpPlayer == targetPlayer) { message.type = MESSAGE_HEALED; if (!attacker) { - message.text = fmt::format("You were healed for {:s}.", damageString); + message.text = std::format("You were healed for {:s}.", damageString); } else if (targetPlayer == attackerPlayer) { - message.text = fmt::format("You healed yourself for {:s}.", damageString); + message.text = std::format("You healed yourself for {:s}.", damageString); } else { - message.text = fmt::format("You were healed by {:s} for {:s}.", attacker->getNameDescription(), damageString); + message.text = std::format("You were healed by {:s} for {:s}.", attacker->getNameDescription(), damageString); } } else { message.type = MESSAGE_HEALED_OTHERS; if (spectatorMessage.empty()) { if (!attacker) { - spectatorMessage = fmt::format("{:s} was healed for {:s}.", target->getNameDescription(), damageString); + spectatorMessage = std::format("{:s} was healed for {:s}.", target->getNameDescription(), damageString); } else if (attacker == target) { - spectatorMessage = fmt::format("{:s} healed {:s}self for {:s}.", attacker->getNameDescription(), targetPlayer ? (targetPlayer->getSex() == PLAYERSEX_FEMALE ? "her" : "him") : "it", damageString); + spectatorMessage = std::format("{:s} healed {:s}self for {:s}.", attacker->getNameDescription(), targetPlayer ? (targetPlayer->getSex() == PLAYERSEX_FEMALE ? "her" : "him") : "it", damageString); } else { - spectatorMessage = fmt::format("{:s} healed {:s} for {:s}.", attacker->getNameDescription(), target->getNameDescription(), damageString); + spectatorMessage = std::format("{:s} healed {:s} for {:s}.", attacker->getNameDescription(), target->getNameDescription(), damageString); } spectatorMessage[0] = std::toupper(spectatorMessage[0]); } @@ -4111,26 +4111,26 @@ bool Game::combatChangeHealth(Creature* attacker, Creature* target, CombatDamage if (tmpPlayer == attackerPlayer && attackerPlayer != targetPlayer) { message.type = MESSAGE_DAMAGE_DEALT; - message.text = fmt::format("{:s} loses {:d} mana due to your attack.", target->getNameDescription(), manaDamage); + message.text = std::format("{:s} loses {:d} mana due to your attack.", target->getNameDescription(), manaDamage); message.text[0] = std::toupper(message.text[0]); } else if (tmpPlayer == targetPlayer) { message.type = MESSAGE_DAMAGE_RECEIVED; if (!attacker) { - message.text = fmt::format("You lose {:d} mana.", manaDamage); + message.text = std::format("You lose {:d} mana.", manaDamage); } else if (targetPlayer == attackerPlayer) { - message.text = fmt::format("You lose {:d} mana due to your own attack.", manaDamage); + message.text = std::format("You lose {:d} mana due to your own attack.", manaDamage); } else { - message.text = fmt::format("You lose {:d} mana due to an attack by {:s}.", manaDamage, attacker->getNameDescription()); + message.text = std::format("You lose {:d} mana due to an attack by {:s}.", manaDamage, attacker->getNameDescription()); } } else { message.type = MESSAGE_DAMAGE_OTHERS; if (spectatorMessage.empty()) { if (!attacker) { - spectatorMessage = fmt::format("{:s} loses {:d} mana.", target->getNameDescription(), manaDamage); + spectatorMessage = std::format("{:s} loses {:d} mana.", target->getNameDescription(), manaDamage); } else if (attacker == target) { - spectatorMessage = fmt::format("{:s} loses {:d} mana due to {:s} own attack.", target->getNameDescription(), manaDamage, targetPlayer->getSex() == PLAYERSEX_FEMALE ? "her" : "his"); + spectatorMessage = std::format("{:s} loses {:d} mana due to {:s} own attack.", target->getNameDescription(), manaDamage, targetPlayer->getSex() == PLAYERSEX_FEMALE ? "her" : "his"); } else { - spectatorMessage = fmt::format("{:s} loses {:d} mana due to an attack by {:s}.", target->getNameDescription(), manaDamage, attacker->getNameDescription()); + spectatorMessage = std::format("{:s} loses {:d} mana due to an attack by {:s}.", target->getNameDescription(), manaDamage, attacker->getNameDescription()); } spectatorMessage[0] = std::toupper(spectatorMessage[0]); } @@ -4199,7 +4199,7 @@ bool Game::combatChangeHealth(Creature* attacker, Creature* target, CombatDamage } if (message.primary.color != TEXTCOLOR_NONE || message.secondary.color != TEXTCOLOR_NONE) { - auto damageString = fmt::format("{:d} hitpoint{:s}", realDamage, realDamage != 1 ? "s" : ""); + auto damageString = std::format("{:d} hitpoint{:s}", realDamage, realDamage != 1 ? "s" : ""); std::string spectatorMessage; @@ -4211,26 +4211,26 @@ bool Game::combatChangeHealth(Creature* attacker, Creature* target, CombatDamage if (tmpPlayer == attackerPlayer && attackerPlayer != targetPlayer) { message.type = MESSAGE_DAMAGE_DEALT; - message.text = fmt::format("{:s} loses {:s} due to your attack.", target->getNameDescription(), damageString); + message.text = std::format("{:s} loses {:s} due to your attack.", target->getNameDescription(), damageString); message.text[0] = std::toupper(message.text[0]); } else if (tmpPlayer == targetPlayer) { message.type = MESSAGE_DAMAGE_RECEIVED; if (!attacker) { - message.text = fmt::format("You lose {:s}.", damageString); + message.text = std::format("You lose {:s}.", damageString); } else if (targetPlayer == attackerPlayer) { - message.text = fmt::format("You lose {:s} due to your own attack.", damageString); + message.text = std::format("You lose {:s} due to your own attack.", damageString); } else { - message.text = fmt::format("You lose {:s} due to an attack by {:s}.", damageString, attacker->getNameDescription()); + message.text = std::format("You lose {:s} due to an attack by {:s}.", damageString, attacker->getNameDescription()); } } else { message.type = MESSAGE_DAMAGE_OTHERS; if (spectatorMessage.empty()) { if (!attacker) { - spectatorMessage = fmt::format("{:s} loses {:s}.", target->getNameDescription(), damageString); + spectatorMessage = std::format("{:s} loses {:s}.", target->getNameDescription(), damageString); } else if (attacker == target) { - spectatorMessage = fmt::format("{:s} loses {:s} due to {:s} own attack.", target->getNameDescription(), damageString, targetPlayer ? (targetPlayer->getSex() == PLAYERSEX_FEMALE ? "her" : "his") : "its"); + spectatorMessage = std::format("{:s} loses {:s} due to {:s} own attack.", target->getNameDescription(), damageString, targetPlayer ? (targetPlayer->getSex() == PLAYERSEX_FEMALE ? "her" : "his") : "its"); } else { - spectatorMessage = fmt::format("{:s} loses {:s} due to an attack by {:s}.", target->getNameDescription(), damageString, attacker->getNameDescription()); + spectatorMessage = std::format("{:s} loses {:s} due to an attack by {:s}.", target->getNameDescription(), damageString, attacker->getNameDescription()); } spectatorMessage[0] = std::toupper(spectatorMessage[0]); } @@ -4350,26 +4350,26 @@ bool Game::combatChangeMana(Creature* attacker, Creature* target, CombatDamage& Player* tmpPlayer = spectator->getPlayer(); if (tmpPlayer == attackerPlayer && attackerPlayer != targetPlayer) { message.type = MESSAGE_DAMAGE_DEALT; - message.text = fmt::format("{:s} loses {:d} mana due to your attack.", target->getNameDescription(), manaLoss); + message.text = std::format("{:s} loses {:d} mana due to your attack.", target->getNameDescription(), manaLoss); message.text[0] = std::toupper(message.text[0]); } else if (tmpPlayer == targetPlayer) { message.type = MESSAGE_DAMAGE_RECEIVED; if (!attacker) { - message.text = fmt::format("You lose {:d} mana.", manaLoss); + message.text = std::format("You lose {:d} mana.", manaLoss); } else if (targetPlayer == attackerPlayer) { - message.text = fmt::format("You lose {:d} mana due to your own attack.", manaLoss); + message.text = std::format("You lose {:d} mana due to your own attack.", manaLoss); } else { - message.text = fmt::format("You lose {:d} mana due to an attack by {:s}.", manaLoss, attacker->getNameDescription()); + message.text = std::format("You lose {:d} mana due to an attack by {:s}.", manaLoss, attacker->getNameDescription()); } } else { message.type = MESSAGE_DAMAGE_OTHERS; if (spectatorMessage.empty()) { if (!attacker) { - spectatorMessage = fmt::format("{:s} loses {:d} mana.", target->getNameDescription(), manaLoss); + spectatorMessage = std::format("{:s} loses {:d} mana.", target->getNameDescription(), manaLoss); } else if (attacker == target) { - spectatorMessage = fmt::format("{:s} loses {:d} mana due to {:s} own attack.", target->getNameDescription(), manaLoss, targetPlayer->getSex() == PLAYERSEX_FEMALE ? "her" : "his"); + spectatorMessage = std::format("{:s} loses {:d} mana due to {:s} own attack.", target->getNameDescription(), manaLoss, targetPlayer->getSex() == PLAYERSEX_FEMALE ? "her" : "his"); } else { - spectatorMessage = fmt::format("{:s} loses {:d} mana due to an attack by {:s}.", target->getNameDescription(), manaLoss, attacker->getNameDescription()); + spectatorMessage = std::format("{:s} loses {:d} mana due to an attack by {:s}.", target->getNameDescription(), manaLoss, attacker->getNameDescription()); } spectatorMessage[0] = std::toupper(spectatorMessage[0]); } @@ -4487,7 +4487,7 @@ bool Game::saveAccountStorageValues() const DBInsert accountStorageQuery("INSERT INTO `account_storage` (`account_id`, `key`, `value`) VALUES"); for (const auto& storageIt : accountIt.second) { - if (!accountStorageQuery.addRow(fmt::format("{:d}, {:d}, {:d}", accountIt.first, storageIt.first, storageIt.second))) { + if (!accountStorageQuery.addRow(std::format("{:d}, {:d}, {:d}", accountIt.first, storageIt.first, storageIt.second))) { return false; } } @@ -4783,8 +4783,8 @@ void Game::loadMotdNum() void Game::saveMotdNum() const { Database& db = Database::getInstance(); - db.executeQuery(fmt::format("UPDATE `server_config` SET `value` = '{:d}' WHERE `config` = 'motd_num'", motdNum)); - db.executeQuery(fmt::format("UPDATE `server_config` SET `value` = '{:s}' WHERE `config` = 'motd_hash'", transformToSHA1(g_config.getString(ConfigManager::MOTD)))); + db.executeQuery(std::format("UPDATE `server_config` SET `value` = '{:d}' WHERE `config` = 'motd_num'", motdNum)); + db.executeQuery(std::format("UPDATE `server_config` SET `value` = '{:s}' WHERE `config` = 'motd_hash'", transformToSHA1(g_config.getString(ConfigManager::MOTD)))); } void Game::checkPlayersRecord() @@ -4804,7 +4804,7 @@ void Game::checkPlayersRecord() void Game::updatePlayersRecord() const { Database& db = Database::getInstance(); - db.executeQuery(fmt::format("UPDATE `server_config` SET `value` = '{:d}' WHERE `config` = 'players_record'", playersRecord)); + db.executeQuery(std::format("UPDATE `server_config` SET `value` = '{:d}' WHERE `config` = 'players_record'", playersRecord)); } void Game::loadPlayersRecord() @@ -4836,7 +4836,7 @@ void Game::playerInviteToParty(uint32_t playerId, uint32_t invitedId) } if (invitedPlayer->getParty()) { - player->sendTextMessage(MESSAGE_INFO_DESCR, fmt::format("{:s} is already in a party.", invitedPlayer->getName())); + player->sendTextMessage(MESSAGE_INFO_DESCR, std::format("{:s} is already in a party.", invitedPlayer->getName())); return; } diff --git a/src/guild.cpp b/src/guild.cpp index 475c25725b..044ec8533e 100644 --- a/src/guild.cpp +++ b/src/guild.cpp @@ -69,10 +69,10 @@ void Guild::addRank(uint32_t rankId, const std::string& rankName, uint8_t level) Guild* IOGuild::loadGuild(uint32_t guildId) { Database& db = Database::getInstance(); - if (DBResult_ptr result = db.storeQuery(fmt::format("SELECT `name` FROM `guilds` WHERE `id` = {:d}", guildId))) { + if (DBResult_ptr result = db.storeQuery(std::format("SELECT `name` FROM `guilds` WHERE `id` = {:d}", guildId))) { Guild* guild = new Guild(guildId, result->getString("name")); - if ((result = db.storeQuery(fmt::format("SELECT `id`, `name`, `level` FROM `guild_ranks` WHERE `guild_id` = {:d}", guildId)))) { + if ((result = db.storeQuery(std::format("SELECT `id`, `name`, `level` FROM `guild_ranks` WHERE `guild_id` = {:d}", guildId)))) { do { guild->addRank(result->getNumber("id"), result->getString("name"), result->getNumber("level")); } while (result->next()); @@ -86,7 +86,7 @@ uint32_t IOGuild::getGuildIdByName(const std::string& name) { Database& db = Database::getInstance(); - DBResult_ptr result = db.storeQuery(fmt::format("SELECT `id` FROM `guilds` WHERE `name` = {:s}", db.escapeString(name))); + DBResult_ptr result = db.storeQuery(std::format("SELECT `id` FROM `guilds` WHERE `name` = {:s}", db.escapeString(name))); if (!result) { return 0; } diff --git a/src/house.cpp b/src/house.cpp index 1895439328..179d6f9300 100644 --- a/src/house.cpp +++ b/src/house.cpp @@ -11,7 +11,7 @@ #include "configmanager.h" #include "bed.h" -#include +#include extern ConfigManager g_config; extern Game g_game; @@ -28,7 +28,7 @@ void House::setOwner(uint32_t guid, bool updateDatabase/* = true*/, Player* play { if (updateDatabase && owner != guid) { Database& db = Database::getInstance(); - db.executeQuery(fmt::format("UPDATE `houses` SET `owner` = {:d}, `bid` = 0, `bid_end` = 0, `last_bid` = 0, `highest_bidder` = 0 WHERE `id` = {:d}", guid, id)); + db.executeQuery(std::format("UPDATE `houses` SET `owner` = {:d}, `bid` = 0, `bid_end` = 0, `last_bid` = 0, `highest_bidder` = 0 WHERE `id` = {:d}", guid, id)); } if (isLoaded && owner == guid) { @@ -105,7 +105,7 @@ void House::updateDoorDescription() const { const int32_t housePrice = g_config.getNumber(ConfigManager::HOUSE_PRICE); for (const auto& it : doorSet) { - it->setSpecialDescription(fmt::format("It belongs to house '{:s}'. {:s} owns this house.{:s}", houseName, (owner != 0) ? ownerName : "Nobody", g_config.getBoolean(ConfigManager::HOUSE_DOOR_SHOW_PRICE) && (housePrice != -1) && (owner == 0) ? fmt::format(" It costs {:d} gold coins.", (houseTiles.size() * housePrice)) : "")); + it->setSpecialDescription(std::format("It belongs to house '{:s}'. {:s} owns this house.{:s}", houseName, (owner != 0) ? ownerName : "Nobody", g_config.getBoolean(ConfigManager::HOUSE_DOOR_SHOW_PRICE) && (housePrice != -1) && (owner == 0) ? std::format(" It costs {:d} gold coins.", (houseTiles.size() * housePrice)) : "")); } } @@ -353,7 +353,7 @@ HouseTransferItem* HouseTransferItem::createHouseTransferItem(House* house) transferItem->incrementReferenceCounter(); transferItem->setID(ITEM_DOCUMENT_RO); transferItem->setSubType(1); - transferItem->setSpecialDescription(fmt::format("It is a house transfer document for '{:s}'.", house->getName())); + transferItem->setSpecialDescription(std::format("It is a house transfer document for '{:s}'.", house->getName())); return transferItem; } @@ -709,7 +709,7 @@ void Houses::payHouses(RentPeriod_t rentPeriod) const break; } - letter->setText(fmt::format("Warning! \nThe {:s} rent of {:d} gold for your house \"{:s}\" is payable. Have it within {:d} days or you will lose this house.", period, house->getRent(), house->getName(), daysLeft)); + letter->setText(std::format("Warning! \nThe {:s} rent of {:d} gold for your house \"{:s}\" is payable. Have it within {:d} days or you will lose this house.", period, house->getRent(), house->getName(), daysLeft)); g_game.internalAddItem(player.getInbox(), letter, INDEX_WHEREEVER, FLAG_NOLIMIT); house->setPayRentWarnings(house->getPayRentWarnings() + 1); } else { diff --git a/src/house.h b/src/house.h index 8e7c748e14..934f85c0fa 100644 --- a/src/house.h +++ b/src/house.h @@ -80,7 +80,7 @@ class Door final : public Item friend class House; }; -enum AccessList_t { +enum AccessList_t : uint16_t { GUEST_LIST = 0x100, SUBOWNER_LIST = 0x101, }; diff --git a/src/iologindata.cpp b/src/iologindata.cpp index d9e982e34e..a035ee6bd5 100644 --- a/src/iologindata.cpp +++ b/src/iologindata.cpp @@ -7,7 +7,7 @@ #include "configmanager.h" #include "game.h" -#include +#include extern ConfigManager g_config; extern Game g_game; @@ -16,7 +16,7 @@ Account IOLoginData::loadAccount(uint32_t accno) { Account account; - DBResult_ptr result = Database::getInstance().storeQuery(fmt::format("SELECT `id`, `name`, `password`, `type`, `premium_ends_at` FROM `accounts` WHERE `id` = {:d}", accno)); + DBResult_ptr result = Database::getInstance().storeQuery(std::format("SELECT `id`, `name`, `password`, `type`, `premium_ends_at` FROM `accounts` WHERE `id` = {:d}", accno)); if (!result) { return account; } @@ -61,7 +61,7 @@ bool IOLoginData::loginserverAuthentication(const std::string& name, const std:: { Database& db = Database::getInstance(); - DBResult_ptr result = db.storeQuery(fmt::format("SELECT `id`, `name`, `password`, `secret`, `type`, `premium_ends_at` FROM `accounts` WHERE `name` = {:s}", db.escapeString(name))); + DBResult_ptr result = db.storeQuery(std::format("SELECT `id`, `name`, `password`, `secret`, `type`, `premium_ends_at` FROM `accounts` WHERE `name` = {:s}", db.escapeString(name))); if (!result) { return false; } @@ -76,7 +76,7 @@ bool IOLoginData::loginserverAuthentication(const std::string& name, const std:: account.accountType = static_cast(result->getNumber("type")); account.premiumEndsAt = result->getNumber("premium_ends_at"); - result = db.storeQuery(fmt::format("SELECT `name` FROM `players` WHERE `account_id` = {:d} AND `deletion` = 0 ORDER BY `name` ASC", account.id)); + result = db.storeQuery(std::format("SELECT `name` FROM `players` WHERE `account_id` = {:d} AND `deletion` = 0 ORDER BY `name` ASC", account.id)); if (result) { do { account.characters.push_back(result->getString("name")); @@ -89,7 +89,7 @@ uint32_t IOLoginData::gameworldAuthentication(const std::string& accountName, co { Database& db = Database::getInstance(); - DBResult_ptr result = db.storeQuery(fmt::format("SELECT `id`, `password`, `secret` FROM `accounts` WHERE `name` = {:s}", db.escapeString(accountName))); + DBResult_ptr result = db.storeQuery(std::format("SELECT `id`, `password`, `secret` FROM `accounts` WHERE `name` = {:s}", db.escapeString(accountName))); if (!result) { return 0; } @@ -112,7 +112,7 @@ uint32_t IOLoginData::gameworldAuthentication(const std::string& accountName, co uint32_t accountId = result->getNumber("id"); - result = db.storeQuery(fmt::format("SELECT `name` FROM `players` WHERE `name` = {:s} AND `account_id` = {:d} AND `deletion` = 0", db.escapeString(characterName), accountId)); + result = db.storeQuery(std::format("SELECT `name` FROM `players` WHERE `name` = {:s} AND `account_id` = {:d} AND `deletion` = 0", db.escapeString(characterName), accountId)); if (!result) { return 0; } @@ -125,7 +125,7 @@ uint32_t IOLoginData::getAccountIdByPlayerName(const std::string& playerName) { Database& db = Database::getInstance(); - DBResult_ptr result = db.storeQuery(fmt::format("SELECT `account_id` FROM `players` WHERE `name` = {:s}", db.escapeString(playerName))); + DBResult_ptr result = db.storeQuery(std::format("SELECT `account_id` FROM `players` WHERE `name` = {:s}", db.escapeString(playerName))); if (!result) { return 0; } @@ -136,7 +136,7 @@ uint32_t IOLoginData::getAccountIdByPlayerId(uint32_t playerId) { Database& db = Database::getInstance(); - DBResult_ptr result = db.storeQuery(fmt::format("SELECT `account_id` FROM `players` WHERE `id` = {:d}", playerId)); + DBResult_ptr result = db.storeQuery(std::format("SELECT `account_id` FROM `players` WHERE `id` = {:d}", playerId)); if (!result) { return 0; } @@ -145,7 +145,7 @@ uint32_t IOLoginData::getAccountIdByPlayerId(uint32_t playerId) AccountType_t IOLoginData::getAccountType(uint32_t accountId) { - DBResult_ptr result = Database::getInstance().storeQuery(fmt::format("SELECT `type` FROM `accounts` WHERE `id` = {:d}", accountId)); + DBResult_ptr result = Database::getInstance().storeQuery(std::format("SELECT `type` FROM `accounts` WHERE `id` = {:d}", accountId)); if (!result) { return ACCOUNT_TYPE_NORMAL; } @@ -154,7 +154,7 @@ AccountType_t IOLoginData::getAccountType(uint32_t accountId) void IOLoginData::setAccountType(uint32_t accountId, AccountType_t accountType) { - Database::getInstance().executeQuery(fmt::format("UPDATE `accounts` SET `type` = {:d} WHERE `id` = {:d}", static_cast(accountType), accountId)); + Database::getInstance().executeQuery(std::format("UPDATE `accounts` SET `type` = {:d} WHERE `id` = {:d}", static_cast(accountType), accountId)); } void IOLoginData::updateOnlineStatus(uint32_t guid, bool login) @@ -164,9 +164,9 @@ void IOLoginData::updateOnlineStatus(uint32_t guid, bool login) } if (login) { - Database::getInstance().executeQuery(fmt::format("INSERT INTO `players_online` VALUES ({:d})", guid)); + Database::getInstance().executeQuery(std::format("INSERT INTO `players_online` VALUES ({:d})", guid)); } else { - Database::getInstance().executeQuery(fmt::format("DELETE FROM `players_online` WHERE `player_id` = {:d}", guid)); + Database::getInstance().executeQuery(std::format("DELETE FROM `players_online` WHERE `player_id` = {:d}", guid)); } } @@ -174,7 +174,7 @@ bool IOLoginData::preloadPlayer(Player* player, const std::string& name) { Database& db = Database::getInstance(); - DBResult_ptr result = db.storeQuery(fmt::format("SELECT `p`.`id`, `p`.`account_id`, `p`.`group_id`, `a`.`type`, `a`.`premium_ends_at` FROM `players` as `p` JOIN `accounts` as `a` ON `a`.`id` = `p`.`account_id` WHERE `p`.`name` = {:s} AND `p`.`deletion` = 0", db.escapeString(name))); + DBResult_ptr result = db.storeQuery(std::format("SELECT `p`.`id`, `p`.`account_id`, `p`.`group_id`, `a`.`type`, `a`.`premium_ends_at` FROM `players` as `p` JOIN `accounts` as `a` ON `a`.`id` = `p`.`account_id` WHERE `p`.`name` = {:s} AND `p`.`deletion` = 0", db.escapeString(name))); if (!result) { return false; } @@ -195,18 +195,18 @@ bool IOLoginData::preloadPlayer(Player* player, const std::string& name) bool IOLoginData::loadPlayerById(Player* player, uint32_t id) { Database& db = Database::getInstance(); - return loadPlayer(player, db.storeQuery(fmt::format("SELECT `id`, `name`, `account_id`, `group_id`, `sex`, `vocation`, `experience`, `level`, `maglevel`, `health`, `healthmax`, `blessings`, `mana`, `manamax`, `manaspent`, `soul`, `lookbody`, `lookfeet`, `lookhead`, `looklegs`, `looktype`, `lookaddons`, `posx`, `posy`, `posz`, `cap`, `lastlogin`, `lastlogout`, `lastip`, `conditions`, `skulltime`, `skull`, `town_id`, `balance`, `offlinetraining_time`, `offlinetraining_skill`, `stamina`, `skill_fist`, `skill_fist_tries`, `skill_club`, `skill_club_tries`, `skill_sword`, `skill_sword_tries`, `skill_axe`, `skill_axe_tries`, `skill_dist`, `skill_dist_tries`, `skill_shielding`, `skill_shielding_tries`, `skill_fishing`, `skill_fishing_tries`, `direction` FROM `players` WHERE `id` = {:d}", id))); + return loadPlayer(player, db.storeQuery(std::format("SELECT `id`, `name`, `account_id`, `group_id`, `sex`, `vocation`, `experience`, `level`, `maglevel`, `health`, `healthmax`, `blessings`, `mana`, `manamax`, `manaspent`, `soul`, `lookbody`, `lookfeet`, `lookhead`, `looklegs`, `looktype`, `lookaddons`, `posx`, `posy`, `posz`, `cap`, `lastlogin`, `lastlogout`, `lastip`, `conditions`, `skulltime`, `skull`, `town_id`, `balance`, `offlinetraining_time`, `offlinetraining_skill`, `stamina`, `skill_fist`, `skill_fist_tries`, `skill_club`, `skill_club_tries`, `skill_sword`, `skill_sword_tries`, `skill_axe`, `skill_axe_tries`, `skill_dist`, `skill_dist_tries`, `skill_shielding`, `skill_shielding_tries`, `skill_fishing`, `skill_fishing_tries`, `direction` FROM `players` WHERE `id` = {:d}", id))); } bool IOLoginData::loadPlayerByName(Player* player, const std::string& name) { Database& db = Database::getInstance(); - return loadPlayer(player, db.storeQuery(fmt::format("SELECT `id`, `name`, `account_id`, `group_id`, `sex`, `vocation`, `experience`, `level`, `maglevel`, `health`, `healthmax`, `blessings`, `mana`, `manamax`, `manaspent`, `soul`, `lookbody`, `lookfeet`, `lookhead`, `looklegs`, `looktype`, `lookaddons`, `posx`, `posy`, `posz`, `cap`, `lastlogin`, `lastlogout`, `lastip`, `conditions`, `skulltime`, `skull`, `town_id`, `balance`, `offlinetraining_time`, `offlinetraining_skill`, `stamina`, `skill_fist`, `skill_fist_tries`, `skill_club`, `skill_club_tries`, `skill_sword`, `skill_sword_tries`, `skill_axe`, `skill_axe_tries`, `skill_dist`, `skill_dist_tries`, `skill_shielding`, `skill_shielding_tries`, `skill_fishing`, `skill_fishing_tries`, `direction` FROM `players` WHERE `name` = {:s}", db.escapeString(name)))); + return loadPlayer(player, db.storeQuery(std::format("SELECT `id`, `name`, `account_id`, `group_id`, `sex`, `vocation`, `experience`, `level`, `maglevel`, `health`, `healthmax`, `blessings`, `mana`, `manamax`, `manaspent`, `soul`, `lookbody`, `lookfeet`, `lookhead`, `looklegs`, `looktype`, `lookaddons`, `posx`, `posy`, `posz`, `cap`, `lastlogin`, `lastlogout`, `lastip`, `conditions`, `skulltime`, `skull`, `town_id`, `balance`, `offlinetraining_time`, `offlinetraining_skill`, `stamina`, `skill_fist`, `skill_fist_tries`, `skill_club`, `skill_club_tries`, `skill_sword`, `skill_sword_tries`, `skill_axe`, `skill_axe_tries`, `skill_dist`, `skill_dist_tries`, `skill_shielding`, `skill_shielding_tries`, `skill_fishing`, `skill_fishing_tries`, `direction` FROM `players` WHERE `name` = {:s}", db.escapeString(name)))); } static GuildWarVector getWarList(uint32_t guildId) { - DBResult_ptr result = Database::getInstance().storeQuery(fmt::format("SELECT `guild1`, `guild2` FROM `guild_wars` WHERE (`guild1` = {:d} OR `guild2` = {:d}) AND `ended` = 0 AND `status` = 1", guildId, guildId)); + DBResult_ptr result = Database::getInstance().storeQuery(std::format("SELECT `guild1`, `guild2` FROM `guild_wars` WHERE (`guild1` = {:d} OR `guild2` = {:d}) AND `ended` = 0 AND `status` = 1", guildId, guildId)); if (!result) { return {}; } @@ -375,7 +375,7 @@ bool IOLoginData::loadPlayer(Player* player, DBResult_ptr result) player->skills[i].percent = Player::getPercentLevel(skillTries, nextSkillTries); } - if ((result = db.storeQuery(fmt::format("SELECT `guild_id`, `rank_id`, `nick` FROM `guild_membership` WHERE `player_id` = {:d}", player->getGUID())))) { + if ((result = db.storeQuery(std::format("SELECT `guild_id`, `rank_id`, `nick` FROM `guild_membership` WHERE `player_id` = {:d}", player->getGUID())))) { uint32_t guildId = result->getNumber("guild_id"); uint32_t playerRankId = result->getNumber("rank_id"); player->guildNick = result->getString("nick"); @@ -394,7 +394,7 @@ bool IOLoginData::loadPlayer(Player* player, DBResult_ptr result) player->guild = guild; GuildRank_ptr rank = guild->getRankById(playerRankId); if (!rank) { - if ((result = db.storeQuery(fmt::format("SELECT `id`, `name`, `level` FROM `guild_ranks` WHERE `id` = {:d}", playerRankId)))) { + if ((result = db.storeQuery(std::format("SELECT `id`, `name`, `level` FROM `guild_ranks` WHERE `id` = {:d}", playerRankId)))) { guild->addRank(result->getNumber("id"), result->getString("name"), result->getNumber("level")); } @@ -407,13 +407,13 @@ bool IOLoginData::loadPlayer(Player* player, DBResult_ptr result) player->guildRank = rank; player->guildWarVector = getWarList(guildId); - if ((result = db.storeQuery(fmt::format("SELECT COUNT(*) AS `members` FROM `guild_membership` WHERE `guild_id` = {:d}", guildId)))) { + if ((result = db.storeQuery(std::format("SELECT COUNT(*) AS `members` FROM `guild_membership` WHERE `guild_id` = {:d}", guildId)))) { guild->setMemberCount(result->getNumber("members")); } } } - if ((result = db.storeQuery(fmt::format("SELECT `player_id`, `name` FROM `player_spells` WHERE `player_id` = {:d}", player->getGUID())))) { + if ((result = db.storeQuery(std::format("SELECT `player_id`, `name` FROM `player_spells` WHERE `player_id` = {:d}", player->getGUID())))) { do { player->learnedInstantSpellList.emplace_front(result->getString("name")); } while (result->next()); @@ -422,7 +422,7 @@ bool IOLoginData::loadPlayer(Player* player, DBResult_ptr result) //load inventory items ItemMap itemMap; - if ((result = db.storeQuery(fmt::format("SELECT `pid`, `sid`, `itemtype`, `count`, `attributes` FROM `player_items` WHERE `player_id` = {:d} ORDER BY `sid` DESC", player->getGUID())))) { + if ((result = db.storeQuery(std::format("SELECT `pid`, `sid`, `itemtype`, `count`, `attributes` FROM `player_items` WHERE `player_id` = {:d} ORDER BY `sid` DESC", player->getGUID())))) { loadItems(itemMap, result); for (ItemMap::const_reverse_iterator it = itemMap.rbegin(), end = itemMap.rend(); it != end; ++it) { @@ -448,7 +448,7 @@ bool IOLoginData::loadPlayer(Player* player, DBResult_ptr result) //load depot items itemMap.clear(); - if ((result = db.storeQuery(fmt::format("SELECT `pid`, `sid`, `itemtype`, `count`, `attributes` FROM `player_depotitems` WHERE `player_id` = {:d} ORDER BY `sid` DESC", player->getGUID())))) { + if ((result = db.storeQuery(std::format("SELECT `pid`, `sid`, `itemtype`, `count`, `attributes` FROM `player_depotitems` WHERE `player_id` = {:d} ORDER BY `sid` DESC", player->getGUID())))) { loadItems(itemMap, result); for (ItemMap::const_reverse_iterator it = itemMap.rbegin(), end = itemMap.rend(); it != end; ++it) { @@ -478,7 +478,7 @@ bool IOLoginData::loadPlayer(Player* player, DBResult_ptr result) //load inbox items itemMap.clear(); - if ((result = db.storeQuery(fmt::format("SELECT `pid`, `sid`, `itemtype`, `count`, `attributes` FROM `player_inboxitems` WHERE `player_id` = {:d} ORDER BY `sid` DESC", player->getGUID())))) { + if ((result = db.storeQuery(std::format("SELECT `pid`, `sid`, `itemtype`, `count`, `attributes` FROM `player_inboxitems` WHERE `player_id` = {:d} ORDER BY `sid` DESC", player->getGUID())))) { loadItems(itemMap, result); for (ItemMap::const_reverse_iterator it = itemMap.rbegin(), end = itemMap.rend(); it != end; ++it) { @@ -506,7 +506,7 @@ bool IOLoginData::loadPlayer(Player* player, DBResult_ptr result) //load store inbox items itemMap.clear(); - if ((result = db.storeQuery(fmt::format("SELECT `pid`, `sid`, `itemtype`, `count`, `attributes` FROM `player_storeinboxitems` WHERE `player_id` = {:d} ORDER BY `sid` DESC", player->getGUID())))) { + if ((result = db.storeQuery(std::format("SELECT `pid`, `sid`, `itemtype`, `count`, `attributes` FROM `player_storeinboxitems` WHERE `player_id` = {:d} ORDER BY `sid` DESC", player->getGUID())))) { loadItems(itemMap, result); for (ItemMap::const_reverse_iterator it = itemMap.rbegin(), end = itemMap.rend(); it != end; ++it) { @@ -532,14 +532,14 @@ bool IOLoginData::loadPlayer(Player* player, DBResult_ptr result) } //load storage map - if ((result = db.storeQuery(fmt::format("SELECT `key`, `value` FROM `player_storage` WHERE `player_id` = {:d}", player->getGUID())))) { + if ((result = db.storeQuery(std::format("SELECT `key`, `value` FROM `player_storage` WHERE `player_id` = {:d}", player->getGUID())))) { do { player->addStorageValue(result->getNumber("key"), result->getNumber("value"), true); } while (result->next()); } //load vip list - if ((result = db.storeQuery(fmt::format("SELECT `player_id` FROM `account_viplist` WHERE `account_id` = {:d}", player->getAccount())))) { + if ((result = db.storeQuery(std::format("SELECT `player_id` FROM `account_viplist` WHERE `account_id` = {:d}", player->getAccount())))) { do { player->addVIPInternal(result->getNumber("player_id")); } while (result->next()); @@ -570,7 +570,7 @@ bool IOLoginData::saveItems(const Player* player, const ItemBlockList& itemList, size_t attributesSize; const char* attributes = propWriteStream.getStream(attributesSize); - if (!query_insert.addRow(fmt::format("{:d}, {:d}, {:d}, {:d}, {:d}, {:s}", player->getGUID(), pid, runningId, item->getID(), item->getSubType(), db.escapeBlob(attributes, attributesSize)))) { + if (!query_insert.addRow(std::format("{:d}, {:d}, {:d}, {:d}, {:d}, {:s}", player->getGUID(), pid, runningId, item->getID(), item->getSubType(), db.escapeBlob(attributes, attributesSize)))) { return false; } @@ -599,7 +599,7 @@ bool IOLoginData::saveItems(const Player* player, const ItemBlockList& itemList, size_t attributesSize; const char* attributes = propWriteStream.getStream(attributesSize); - if (!query_insert.addRow(fmt::format("{:d}, {:d}, {:d}, {:d}, {:d}, {:s}", player->getGUID(), parentId, runningId, item->getID(), item->getSubType(), db.escapeBlob(attributes, attributesSize)))) { + if (!query_insert.addRow(std::format("{:d}, {:d}, {:d}, {:d}, {:d}, {:s}", player->getGUID(), parentId, runningId, item->getID(), item->getSubType(), db.escapeBlob(attributes, attributesSize)))) { return false; } } @@ -615,13 +615,13 @@ bool IOLoginData::savePlayer(Player* player) Database& db = Database::getInstance(); - DBResult_ptr result = db.storeQuery(fmt::format("SELECT `save` FROM `players` WHERE `id` = {:d}", player->getGUID())); + DBResult_ptr result = db.storeQuery(std::format("SELECT `save` FROM `players` WHERE `id` = {:d}", player->getGUID())); if (!result) { return false; } if (result->getNumber("save") == 0) { - return db.executeQuery(fmt::format("UPDATE `players` SET `lastlogin` = {:d}, `lastip` = {:d} WHERE `id` = {:d}", player->lastLoginSaved, player->lastIP, player->getGUID())); + return db.executeQuery(std::format("UPDATE `players` SET `lastlogin` = {:d}, `lastip` = {:d} WHERE `id` = {:d}", player->lastLoginSaved, player->lastIP, player->getGUID())); } //serialize conditions @@ -731,13 +731,13 @@ bool IOLoginData::savePlayer(Player* player) } // learned spells - if (!db.executeQuery(fmt::format("DELETE FROM `player_spells` WHERE `player_id` = {:d}", player->getGUID()))) { + if (!db.executeQuery(std::format("DELETE FROM `player_spells` WHERE `player_id` = {:d}", player->getGUID()))) { return false; } DBInsert spellsQuery("INSERT INTO `player_spells` (`player_id`, `name` ) VALUES "); for (const std::string& spellName : player->learnedInstantSpellList) { - if (!spellsQuery.addRow(fmt::format("{:d}, {:s}", player->getGUID(), db.escapeString(spellName)))) { + if (!spellsQuery.addRow(std::format("{:d}, {:s}", player->getGUID(), db.escapeString(spellName)))) { return false; } } @@ -747,7 +747,7 @@ bool IOLoginData::savePlayer(Player* player) } //item saving - if (!db.executeQuery(fmt::format("DELETE FROM `player_items` WHERE `player_id` = {:d}", player->getGUID()))) { + if (!db.executeQuery(std::format("DELETE FROM `player_items` WHERE `player_id` = {:d}", player->getGUID()))) { return false; } @@ -767,7 +767,7 @@ bool IOLoginData::savePlayer(Player* player) if (player->lastDepotId != -1) { //save depot items - if (!db.executeQuery(fmt::format("DELETE FROM `player_depotitems` WHERE `player_id` = {:d}", player->getGUID()))) { + if (!db.executeQuery(std::format("DELETE FROM `player_depotitems` WHERE `player_id` = {:d}", player->getGUID()))) { return false; } @@ -786,7 +786,7 @@ bool IOLoginData::savePlayer(Player* player) } //save inbox items - if (!db.executeQuery(fmt::format("DELETE FROM `player_inboxitems` WHERE `player_id` = {:d}", player->getGUID()))) { + if (!db.executeQuery(std::format("DELETE FROM `player_inboxitems` WHERE `player_id` = {:d}", player->getGUID()))) { return false; } @@ -802,7 +802,7 @@ bool IOLoginData::savePlayer(Player* player) } //save store inbox items - if (!db.executeQuery(fmt::format("DELETE FROM `player_storeinboxitems` WHERE `player_id` = {:d}", player->getGUID()))) { + if (!db.executeQuery(std::format("DELETE FROM `player_storeinboxitems` WHERE `player_id` = {:d}", player->getGUID()))) { return false; } @@ -817,7 +817,7 @@ bool IOLoginData::savePlayer(Player* player) return false; } - if (!db.executeQuery(fmt::format("DELETE FROM `player_storage` WHERE `player_id` = {:d}", player->getGUID()))) { + if (!db.executeQuery(std::format("DELETE FROM `player_storage` WHERE `player_id` = {:d}", player->getGUID()))) { return false; } @@ -825,7 +825,7 @@ bool IOLoginData::savePlayer(Player* player) player->genReservedStorageRange(); for (const auto& it : player->storageMap) { - if (!storageQuery.addRow(fmt::format("{:d}, {:d}, {:d}", player->getGUID(), it.first, it.second))) { + if (!storageQuery.addRow(std::format("{:d}, {:d}, {:d}", player->getGUID(), it.first, it.second))) { return false; } } @@ -840,7 +840,7 @@ bool IOLoginData::savePlayer(Player* player) std::string IOLoginData::getNameByGuid(uint32_t guid) { - DBResult_ptr result = Database::getInstance().storeQuery(fmt::format("SELECT `name` FROM `players` WHERE `id` = {:d}", guid)); + DBResult_ptr result = Database::getInstance().storeQuery(std::format("SELECT `name` FROM `players` WHERE `id` = {:d}", guid)); if (!result) { return std::string(); } @@ -851,7 +851,7 @@ uint32_t IOLoginData::getGuidByName(const std::string& name) { Database& db = Database::getInstance(); - DBResult_ptr result = db.storeQuery(fmt::format("SELECT `id` FROM `players` WHERE `name` = {:s}", db.escapeString(name))); + DBResult_ptr result = db.storeQuery(std::format("SELECT `id` FROM `players` WHERE `name` = {:s}", db.escapeString(name))); if (!result) { return 0; } @@ -862,7 +862,7 @@ bool IOLoginData::getGuidByNameEx(uint32_t& guid, bool& specialVip, std::string& { Database& db = Database::getInstance(); - DBResult_ptr result = db.storeQuery(fmt::format("SELECT `name`, `id`, `group_id`, `account_id` FROM `players` WHERE `name` = {:s}", db.escapeString(name))); + DBResult_ptr result = db.storeQuery(std::format("SELECT `name`, `id`, `group_id`, `account_id` FROM `players` WHERE `name` = {:s}", db.escapeString(name))); if (!result) { return false; } @@ -886,7 +886,7 @@ bool IOLoginData::formatPlayerName(std::string& name) { Database& db = Database::getInstance(); - DBResult_ptr result = db.storeQuery(fmt::format("SELECT `name` FROM `players` WHERE `name` = {:s}", db.escapeString(name))); + DBResult_ptr result = db.storeQuery(std::format("SELECT `name` FROM `players` WHERE `name` = {:s}", db.escapeString(name))); if (!result) { return false; } @@ -923,20 +923,20 @@ void IOLoginData::loadItems(ItemMap& itemMap, DBResult_ptr result) void IOLoginData::increaseBankBalance(uint32_t guid, uint64_t bankBalance) { - Database::getInstance().executeQuery(fmt::format("UPDATE `players` SET `balance` = `balance` + {:d} WHERE `id` = {:d}", bankBalance, guid)); + Database::getInstance().executeQuery(std::format("UPDATE `players` SET `balance` = `balance` + {:d} WHERE `id` = {:d}", bankBalance, guid)); } bool IOLoginData::hasBiddedOnHouse(uint32_t guid) { Database& db = Database::getInstance(); - return db.storeQuery(fmt::format("SELECT `id` FROM `houses` WHERE `highest_bidder` = {:d} LIMIT 1", guid)).get() != nullptr; + return db.storeQuery(std::format("SELECT `id` FROM `houses` WHERE `highest_bidder` = {:d} LIMIT 1", guid)).get() != nullptr; } std::forward_list IOLoginData::getVIPEntries(uint32_t accountId) { std::forward_list entries; - DBResult_ptr result = Database::getInstance().storeQuery(fmt::format("SELECT `player_id`, (SELECT `name` FROM `players` WHERE `id` = `player_id`) AS `name`, `description`, `icon`, `notify` FROM `account_viplist` WHERE `account_id` = {:d}", accountId)); + DBResult_ptr result = Database::getInstance().storeQuery(std::format("SELECT `player_id`, (SELECT `name` FROM `players` WHERE `id` = `player_id`) AS `name`, `description`, `icon`, `notify` FROM `account_viplist` WHERE `account_id` = {:d}", accountId)); if (result) { do { entries.emplace_front( @@ -954,21 +954,21 @@ std::forward_list IOLoginData::getVIPEntries(uint32_t accountId) void IOLoginData::addVIPEntry(uint32_t accountId, uint32_t guid, const std::string& description, uint32_t icon, bool notify) { Database& db = Database::getInstance(); - db.executeQuery(fmt::format("INSERT INTO `account_viplist` (`account_id`, `player_id`, `description`, `icon`, `notify`) VALUES ({:d}, {:d}, {:s}, {:d}, {:d})", accountId, guid, db.escapeString(description), icon, notify)); + db.executeQuery(std::format("INSERT INTO `account_viplist` (`account_id`, `player_id`, `description`, `icon`, `notify`) VALUES ({:d}, {:d}, {:s}, {:d}, {:d})", accountId, guid, db.escapeString(description), icon, notify)); } void IOLoginData::editVIPEntry(uint32_t accountId, uint32_t guid, const std::string& description, uint32_t icon, bool notify) { Database& db = Database::getInstance(); - db.executeQuery(fmt::format("UPDATE `account_viplist` SET `description` = {:s}, `icon` = {:d}, `notify` = {:d} WHERE `account_id` = {:d} AND `player_id` = {:d}", db.escapeString(description), icon, notify, accountId, guid)); + db.executeQuery(std::format("UPDATE `account_viplist` SET `description` = {:s}, `icon` = {:d}, `notify` = {:d} WHERE `account_id` = {:d} AND `player_id` = {:d}", db.escapeString(description), icon, notify, accountId, guid)); } void IOLoginData::removeVIPEntry(uint32_t accountId, uint32_t guid) { - Database::getInstance().executeQuery(fmt::format("DELETE FROM `account_viplist` WHERE `account_id` = {:d} AND `player_id` = {:d}", accountId, guid)); + Database::getInstance().executeQuery(std::format("DELETE FROM `account_viplist` WHERE `account_id` = {:d} AND `player_id` = {:d}", accountId, guid)); } void IOLoginData::updatePremiumTime(uint32_t accountId, time_t endTime) { - Database::getInstance().executeQuery(fmt::format("UPDATE `accounts` SET `premium_ends_at` = {:d} WHERE `id` = {:d}", endTime, accountId)); + Database::getInstance().executeQuery(std::format("UPDATE `accounts` SET `premium_ends_at` = {:d} WHERE `id` = {:d}", endTime, accountId)); } diff --git a/src/iomap.cpp b/src/iomap.cpp index cd747964b7..f936e28dd6 100644 --- a/src/iomap.cpp +++ b/src/iomap.cpp @@ -7,7 +7,7 @@ #include "bed.h" -#include +#include /* OTBM_ROOTV1 @@ -241,13 +241,13 @@ bool IOMap::parseTileArea(OTB::Loader& loader, const OTB::Node& tileAreaNode, Ma if (tileNode.type == OTBM_HOUSETILE) { uint32_t houseId; if (!propStream.read(houseId)) { - setLastErrorString(fmt::format("[x:{:d}, y:{:d}, z:{:d}] Could not read house id.", x, y, z)); + setLastErrorString(std::format("[x:{:d}, y:{:d}, z:{:d}] Could not read house id.", x, y, z)); return false; } house = map.houses.addHouse(houseId); if (!house) { - setLastErrorString(fmt::format("[x:{:d}, y:{:d}, z:{:d}] Could not create house id: {:d}", x, y, z, houseId)); + setLastErrorString(std::format("[x:{:d}, y:{:d}, z:{:d}] Could not create house id: {:d}", x, y, z, houseId)); return false; } @@ -263,7 +263,7 @@ bool IOMap::parseTileArea(OTB::Loader& loader, const OTB::Node& tileAreaNode, Ma case OTBM_ATTR_TILE_FLAGS: { uint32_t flags; if (!propStream.read(flags)) { - setLastErrorString(fmt::format("[x:{:d}, y:{:d}, z:{:d}] Failed to read tile flags.", x, y, z)); + setLastErrorString(std::format("[x:{:d}, y:{:d}, z:{:d}] Failed to read tile flags.", x, y, z)); return false; } @@ -284,7 +284,7 @@ bool IOMap::parseTileArea(OTB::Loader& loader, const OTB::Node& tileAreaNode, Ma case OTBM_ATTR_ITEM: { Item* item = Item::CreateItem(propStream); if (!item) { - setLastErrorString(fmt::format("[x:{:d}, y:{:d}, z:{:d}] Failed to create item.", x, y, z)); + setLastErrorString(std::format("[x:{:d}, y:{:d}, z:{:d}] Failed to create item.", x, y, z)); return false; } @@ -314,14 +314,14 @@ bool IOMap::parseTileArea(OTB::Loader& loader, const OTB::Node& tileAreaNode, Ma } default: - setLastErrorString(fmt::format("[x:{:d}, y:{:d}, z:{:d}] Unknown tile attribute.", x, y, z)); + setLastErrorString(std::format("[x:{:d}, y:{:d}, z:{:d}] Unknown tile attribute.", x, y, z)); return false; } } for (auto& itemNode : tileNode.children) { if (itemNode.type != OTBM_ITEM) { - setLastErrorString(fmt::format("[x:{:d}, y:{:d}, z:{:d}] Unknown node type.", x, y, z)); + setLastErrorString(std::format("[x:{:d}, y:{:d}, z:{:d}] Unknown node type.", x, y, z)); return false; } @@ -333,12 +333,12 @@ bool IOMap::parseTileArea(OTB::Loader& loader, const OTB::Node& tileAreaNode, Ma Item* item = Item::CreateItem(stream); if (!item) { - setLastErrorString(fmt::format("[x:{:d}, y:{:d}, z:{:d}] Failed to create item.", x, y, z)); + setLastErrorString(std::format("[x:{:d}, y:{:d}, z:{:d}] Failed to create item.", x, y, z)); return false; } if (!item->unserializeItemNode(loader, itemNode, stream)) { - setLastErrorString(fmt::format("[x:{:d}, y:{:d}, z:{:d}] Failed to load item {:d}.", x, y, z, item->getID())); + setLastErrorString(std::format("[x:{:d}, y:{:d}, z:{:d}] Failed to load item {:d}.", x, y, z, item->getID())); delete item; return false; } diff --git a/src/iomapserialize.cpp b/src/iomapserialize.cpp index 176a97e39f..877efcdd9a 100644 --- a/src/iomapserialize.cpp +++ b/src/iomapserialize.cpp @@ -7,7 +7,7 @@ #include "game.h" #include "bed.h" -#include +#include extern Game g_game; @@ -78,7 +78,7 @@ bool IOMapSerialize::saveHouseItems() size_t attributesSize; const char* attributes = stream.getStream(attributesSize); if (attributesSize > 0) { - if (!stmt.addRow(fmt::format("{:d}, {:s}", house->getId(), db.escapeBlob(attributes, attributesSize)))) { + if (!stmt.addRow(std::format("{:d}, {:s}", house->getId(), db.escapeBlob(attributes, attributesSize)))) { return false; } stream.clear(); @@ -297,11 +297,11 @@ bool IOMapSerialize::saveHouseInfo() for (const auto& it : g_game.map.houses.getHouses()) { House* house = it.second; - DBResult_ptr result = db.storeQuery(fmt::format("SELECT `id` FROM `houses` WHERE `id` = {:d}", house->getId())); + DBResult_ptr result = db.storeQuery(std::format("SELECT `id` FROM `houses` WHERE `id` = {:d}", house->getId())); if (result) { - db.executeQuery(fmt::format("UPDATE `houses` SET `owner` = {:d}, `paid` = {:d}, `warnings` = {:d}, `name` = {:s}, `town_id` = {:d}, `rent` = {:d}, `size` = {:d}, `beds` = {:d} WHERE `id` = {:d}", house->getOwner(), house->getPaidUntil(), house->getPayRentWarnings(), db.escapeString(house->getName()), house->getTownId(), house->getRent(), house->getTiles().size(), house->getBedCount(), house->getId())); + db.executeQuery(std::format("UPDATE `houses` SET `owner` = {:d}, `paid` = {:d}, `warnings` = {:d}, `name` = {:s}, `town_id` = {:d}, `rent` = {:d}, `size` = {:d}, `beds` = {:d} WHERE `id` = {:d}", house->getOwner(), house->getPaidUntil(), house->getPayRentWarnings(), db.escapeString(house->getName()), house->getTownId(), house->getRent(), house->getTiles().size(), house->getBedCount(), house->getId())); } else { - db.executeQuery(fmt::format("INSERT INTO `houses` (`id`, `owner`, `paid`, `warnings`, `name`, `town_id`, `rent`, `size`, `beds`) VALUES ({:d}, {:d}, {:d}, {:d}, {:s}, {:d}, {:d}, {:d}, {:d})", house->getId(), house->getOwner(), house->getPaidUntil(), house->getPayRentWarnings(), db.escapeString(house->getName()), house->getTownId(), house->getRent(), house->getTiles().size(), house->getBedCount())); + db.executeQuery(std::format("INSERT INTO `houses` (`id`, `owner`, `paid`, `warnings`, `name`, `town_id`, `rent`, `size`, `beds`) VALUES ({:d}, {:d}, {:d}, {:d}, {:s}, {:d}, {:d}, {:d}, {:d})", house->getId(), house->getOwner(), house->getPaidUntil(), house->getPayRentWarnings(), db.escapeString(house->getName()), house->getTownId(), house->getRent(), house->getTiles().size(), house->getBedCount())); } } @@ -312,7 +312,7 @@ bool IOMapSerialize::saveHouseInfo() std::string listText; if (house->getAccessList(GUEST_LIST, listText) && !listText.empty()) { - if (!stmt.addRow(fmt::format("{:d}, {}, {:s}", house->getId(), GUEST_LIST, db.escapeString(listText)))) { + if (!stmt.addRow(std::format("{:d}, {:d}, {:s}", house->getId(), std::to_underlying(GUEST_LIST), db.escapeString(listText)))) { return false; } @@ -320,7 +320,7 @@ bool IOMapSerialize::saveHouseInfo() } if (house->getAccessList(SUBOWNER_LIST, listText) && !listText.empty()) { - if (!stmt.addRow(fmt::format("{:d}, {}, {:s}", house->getId(), SUBOWNER_LIST, db.escapeString(listText)))) { + if (!stmt.addRow(std::format("{:d}, {:d}, {:s}", house->getId(), std::to_underlying(SUBOWNER_LIST), db.escapeString(listText)))) { return false; } @@ -329,7 +329,7 @@ bool IOMapSerialize::saveHouseInfo() for (Door* door : house->getDoors()) { if (door->getAccessList(listText) && !listText.empty()) { - if (!stmt.addRow(fmt::format("{:d}, {:d}, {:s}", house->getId(), door->getDoorId(), db.escapeString(listText)))) { + if (!stmt.addRow(std::format("{:d}, {:d}, {:s}", house->getId(), door->getDoorId(), db.escapeString(listText)))) { return false; } @@ -358,7 +358,7 @@ bool IOMapSerialize::saveHouse(House* house) uint32_t houseId = house->getId(); //clear old tile data - if (!db.executeQuery(fmt::format("DELETE FROM `tile_store` WHERE `house_id` = {:d}", houseId))) { + if (!db.executeQuery(std::format("DELETE FROM `tile_store` WHERE `house_id` = {:d}", houseId))) { return false; } @@ -371,7 +371,7 @@ bool IOMapSerialize::saveHouse(House* house) size_t attributesSize; const char* attributes = stream.getStream(attributesSize); if (attributesSize > 0) { - if (!stmt.addRow(fmt::format("{:d}, {:s}", houseId, db.escapeBlob(attributes, attributesSize)))) { + if (!stmt.addRow(std::format("{:d}, {:s}", houseId, db.escapeBlob(attributes, attributesSize)))) { return false; } stream.clear(); diff --git a/src/iomarket.cpp b/src/iomarket.cpp index b10dcf4ef6..ea1cce08fb 100644 --- a/src/iomarket.cpp +++ b/src/iomarket.cpp @@ -11,7 +11,7 @@ #include "game.h" #include "scheduler.h" -#include +#include extern ConfigManager g_config; extern Game g_game; @@ -20,7 +20,7 @@ MarketOfferList IOMarket::getActiveOffers(MarketAction_t action, uint16_t itemId { MarketOfferList offerList; - DBResult_ptr result = Database::getInstance().storeQuery(fmt::format("SELECT `id`, `amount`, `price`, `created`, `anonymous`, (SELECT `name` FROM `players` WHERE `id` = `player_id`) AS `player_name` FROM `market_offers` WHERE `sale` = {:d} AND `itemtype` = {:d}", action, itemId)); + DBResult_ptr result = Database::getInstance().storeQuery(std::format("SELECT `id`, `amount`, `price`, `created`, `anonymous`, (SELECT `name` FROM `players` WHERE `id` = `player_id`) AS `player_name` FROM `market_offers` WHERE `sale` = {:d} AND `itemtype` = {:d}", std::to_underlying(action), itemId)); if (!result) { return offerList; } @@ -49,7 +49,7 @@ MarketOfferList IOMarket::getOwnOffers(MarketAction_t action, uint32_t playerId) const int32_t marketOfferDuration = g_config.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}", playerId, action)); + DBResult_ptr result = Database::getInstance().storeQuery(std::format("SELECT `id`, `amount`, `price`, `created`, `itemtype` FROM `market_offers` WHERE `player_id` = {:d} AND `sale` = {:d}", playerId, std::to_underlying(action))); if (!result) { return offerList; } @@ -70,7 +70,7 @@ HistoryMarketOfferList IOMarket::getOwnHistory(MarketAction_t action, uint32_t p { HistoryMarketOfferList offerList; - DBResult_ptr result = Database::getInstance().storeQuery(fmt::format("SELECT `itemtype`, `amount`, `price`, `expires_at`, `state` FROM `market_history` WHERE `player_id` = {:d} AND `sale` = {:d}", playerId, action)); + DBResult_ptr result = Database::getInstance().storeQuery(std::format("SELECT `itemtype`, `amount`, `price`, `expires_at`, `state` FROM `market_history` WHERE `player_id` = {:d} AND `sale` = {:d}", playerId, std::to_underlying(action))); if (!result) { return offerList; } @@ -172,7 +172,7 @@ void IOMarket::checkExpiredOffers() { const time_t lastExpireDate = time(nullptr) - g_config.getNumber(ConfigManager::MARKET_OFFER_DURATION); - g_databaseTasks.addTask(fmt::format("SELECT `id`, `amount`, `price`, `itemtype`, `player_id`, `sale` FROM `market_offers` WHERE `created` <= {:d}", lastExpireDate), IOMarket::processExpiredOffers, true); + g_databaseTasks.addTask(std::format("SELECT `id`, `amount`, `price`, `itemtype`, `player_id`, `sale` FROM `market_offers` WHERE `created` <= {:d}", lastExpireDate), IOMarket::processExpiredOffers, true); int32_t checkExpiredMarketOffersEachMinutes = g_config.getNumber(ConfigManager::CHECK_EXPIRED_MARKET_OFFERS_EACH_MINUTES); if (checkExpiredMarketOffersEachMinutes <= 0) { @@ -184,7 +184,7 @@ void IOMarket::checkExpiredOffers() uint32_t IOMarket::getPlayerOfferCount(uint32_t playerId) { - DBResult_ptr result = Database::getInstance().storeQuery(fmt::format("SELECT COUNT(*) AS `count` FROM `market_offers` WHERE `player_id` = {:d}", playerId)); + DBResult_ptr result = Database::getInstance().storeQuery(std::format("SELECT COUNT(*) AS `count` FROM `market_offers` WHERE `player_id` = {:d}", playerId)); if (!result) { return 0; } @@ -197,7 +197,7 @@ MarketOfferEx IOMarket::getOfferByCounter(uint32_t timestamp, uint16_t counter) const int32_t created = timestamp - g_config.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", created, counter)); + DBResult_ptr result = Database::getInstance().storeQuery(std::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", created, counter)); if (!result) { offer.id = 0; offer.playerId = 0; @@ -222,22 +222,22 @@ MarketOfferEx IOMarket::getOfferByCounter(uint32_t timestamp, uint16_t counter) void IOMarket::createOffer(uint32_t playerId, MarketAction_t action, uint32_t itemId, uint16_t amount, uint32_t price, bool anonymous) { - Database::getInstance().executeQuery(fmt::format("INSERT INTO `market_offers` (`player_id`, `sale`, `itemtype`, `amount`, `price`, `created`, `anonymous`) VALUES ({:d}, {:d}, {:d}, {:d}, {:d}, {:d}, {:d})", playerId, action, itemId, amount, price, time(nullptr), anonymous)); + Database::getInstance().executeQuery(std::format("INSERT INTO `market_offers` (`player_id`, `sale`, `itemtype`, `amount`, `price`, `created`, `anonymous`) VALUES ({:d}, {:d}, {:d}, {:d}, {:d}, {:d}, {:d})", playerId, std::to_underlying(action), itemId, amount, price, time(nullptr), anonymous)); } void IOMarket::acceptOffer(uint32_t offerId, uint16_t amount) { - Database::getInstance().executeQuery(fmt::format("UPDATE `market_offers` SET `amount` = `amount` - {:d} WHERE `id` = {:d}", amount, offerId)); + Database::getInstance().executeQuery(std::format("UPDATE `market_offers` SET `amount` = `amount` - {:d} WHERE `id` = {:d}", amount, offerId)); } void IOMarket::deleteOffer(uint32_t offerId) { - Database::getInstance().executeQuery(fmt::format("DELETE FROM `market_offers` WHERE `id` = {:d}", offerId)); + Database::getInstance().executeQuery(std::format("DELETE FROM `market_offers` WHERE `id` = {:d}", offerId)); } void IOMarket::appendHistory(uint32_t playerId, MarketAction_t type, uint16_t itemId, uint16_t amount, uint32_t price, time_t timestamp, MarketOfferState_t state) { - g_databaseTasks.addTask(fmt::format("INSERT INTO `market_history` (`player_id`, `sale`, `itemtype`, `amount`, `price`, `expires_at`, `inserted`, `state`) VALUES ({:d}, {:d}, {:d}, {:d}, {:d}, {:d}, {:d}, {:d})", playerId, type, itemId, amount, price, timestamp, time(nullptr), state)); + g_databaseTasks.addTask(std::format("INSERT INTO `market_history` (`player_id`, `sale`, `itemtype`, `amount`, `price`, `expires_at`, `inserted`, `state`) VALUES ({:d}, {:d}, {:d}, {:d}, {:d}, {:d}, {:d}, {:d})", playerId, std::to_underlying(type), itemId, amount, price, timestamp, time(nullptr), std::to_underlying(state))); } bool IOMarket::moveOfferToHistory(uint32_t offerId, MarketOfferState_t state) @@ -246,12 +246,12 @@ bool IOMarket::moveOfferToHistory(uint32_t offerId, MarketOfferState_t state) Database& db = Database::getInstance(); - DBResult_ptr result = db.storeQuery(fmt::format("SELECT `player_id`, `sale`, `itemtype`, `amount`, `price`, `created` FROM `market_offers` WHERE `id` = {:d}", offerId)); + DBResult_ptr result = db.storeQuery(std::format("SELECT `player_id`, `sale`, `itemtype`, `amount`, `price`, `created` FROM `market_offers` WHERE `id` = {:d}", offerId)); if (!result) { return false; } - if (!db.executeQuery(fmt::format("DELETE FROM `market_offers` WHERE `id` = {:d}", offerId))) { + if (!db.executeQuery(std::format("DELETE FROM `market_offers` WHERE `id` = {:d}", offerId))) { return false; } @@ -261,7 +261,7 @@ bool IOMarket::moveOfferToHistory(uint32_t offerId, MarketOfferState_t state) void IOMarket::updateStatistics() { - DBResult_ptr result = Database::getInstance().storeQuery(fmt::format("SELECT `sale` AS `sale`, `itemtype` AS `itemtype`, COUNT(`price`) AS `num`, MIN(`price`) AS `min`, MAX(`price`) AS `max`, SUM(`price`) AS `sum` FROM `market_history` WHERE `state` = {:d} GROUP BY `itemtype`, `sale`", OFFERSTATE_ACCEPTED)); + DBResult_ptr result = Database::getInstance().storeQuery(std::format("SELECT `sale` AS `sale`, `itemtype` AS `itemtype`, COUNT(`price`) AS `num`, MIN(`price`) AS `min`, MAX(`price`) AS `max`, SUM(`price`) AS `sum` FROM `market_history` WHERE `state` = {:d} GROUP BY `itemtype`, `sale`", std::to_underlying(OFFERSTATE_ACCEPTED))); if (!result) { return; } diff --git a/src/lockfree.h b/src/lockfree.h index 6b5d32f304..31b7cf1316 100644 --- a/src/lockfree.h +++ b/src/lockfree.h @@ -4,64 +4,94 @@ #ifndef FS_LOCKFREE_H_8C707AEB7C7235A2FBC5D4EDDF03B008 #define FS_LOCKFREE_H_8C707AEB7C7235A2FBC5D4EDDF03B008 -#if _MSC_FULL_VER >= 190023918 // Workaround for VS2015 Update 2. Boost.Lockfree is a header-only library, so this should be safe to do. -#define _ENABLE_ATOMIC_ALIGNMENT_FIX -#endif - -#include +#include +#include +#include -/* - * we use this to avoid instantiating multiple free lists for objects of the - * same size and it can be replaced by a variable template in C++14 - * - * template - * boost::lockfree::stack lockfreeFreeList; - */ template struct LockfreeFreeList { - using FreeList = boost::lockfree::stack>; - static FreeList& get() - { - static FreeList freeList; - return freeList; - } + class FreeList + { + public: + bool pop(void*& p) + { + std::lock_guard lock(mutex_); + + if (storage_.empty()) { + return false; + } + + p = storage_.back(); + storage_.pop_back(); + return true; + } + + bool bounded_push(void* p) + { + std::lock_guard lock(mutex_); + + if (storage_.size() >= Capacity) { + return false; + } + + storage_.push_back(p); + return true; + } + + private: + std::vector storage_; + std::mutex mutex_; + }; + + static FreeList& get() + { + static FreeList freeList; + return freeList; + } }; template class LockfreePoolingAllocator { - public: - template - struct rebind - { - using other = LockfreePoolingAllocator; - }; - - LockfreePoolingAllocator() = default; - - template - explicit constexpr LockfreePoolingAllocator(const LockfreePoolingAllocator&) {} - using value_type = T; - - T* allocate(size_t) const { - auto& inst = LockfreeFreeList::get(); - void* p; // NOTE: p doesn't have to be initialized - if (!inst.pop(p)) { - //Acquire memory without calling the constructor of T - p = operator new (sizeof(T)); - } - return static_cast(p); - } - - void deallocate(T* p, size_t) const { - auto& inst = LockfreeFreeList::get(); - if (!inst.bounded_push(p)) { - //Release memory without calling the destructor of T - //(it has already been called at this point) - operator delete(p); - } - } +public: + template + struct rebind + { + using other = LockfreePoolingAllocator; + }; + + LockfreePoolingAllocator() = default; + + template + explicit constexpr LockfreePoolingAllocator( + const LockfreePoolingAllocator&) + { + } + + using value_type = T; + + T* allocate(size_t) const + { + auto& inst = LockfreeFreeList::get(); + + void* p; + + if (!inst.pop(p)) { + p = ::operator new(sizeof(T)); + } + + return static_cast(p); + } + + void deallocate(T* p, size_t) const + { + auto& inst = LockfreeFreeList::get(); + + if (!inst.bounded_push(p)) { + ::operator delete(p); + } + } }; #endif diff --git a/src/luascript.cpp b/src/luascript.cpp index f46b1a808d..598b598045 100644 --- a/src/luascript.cpp +++ b/src/luascript.cpp @@ -3,8 +3,7 @@ #include "otpch.h" -#include -#include +#include #include "luascript.h" #include "chat.h" @@ -3623,7 +3622,7 @@ int LuaScriptInterface::luaAddEvent(lua_State* L) //addEvent(callback, delay, ...) int parameters = lua_gettop(L); if (parameters < 2) { - reportErrorFunc(L, fmt::format("Not enough parameters: {:d}.", parameters)); + reportErrorFunc(L, std::format("Not enough parameters: {:d}.", parameters)); pushBoolean(L, false); return 1; } @@ -9185,7 +9184,7 @@ int LuaScriptInterface::luaPlayerSetStorageValue(lua_State* L) uint32_t key = getNumber(L, 2); Player* player = getUserdata(L, 1); if (IS_IN_KEYRANGE(key, RESERVED_RANGE)) { - reportErrorFunc(L, fmt::format("Accessing reserved range: {:d}", key)); + reportErrorFunc(L, std::format("Accessing reserved range: {:d}", key)); pushBoolean(L, false); return 1; } @@ -17238,7 +17237,7 @@ void LuaEnvironment::executeTimerEvent(uint32_t eventIndex) lua_rawgeti(luaState, LUA_REGISTRYINDEX, timerEventDesc.function); //push parameters - for (auto parameter : boost::adaptors::reverse(timerEventDesc.parameters)) { + for (auto parameter : std::views::reverse(timerEventDesc.parameters)) { lua_rawgeti(luaState, LUA_REGISTRYINDEX, parameter); } diff --git a/src/luascript.h b/src/luascript.h index fea060bf9d..d296aa7bd9 100644 --- a/src/luascript.h +++ b/src/luascript.h @@ -10,6 +10,8 @@ #include #endif +#include + #if LUA_VERSION_NUM >= 502 #ifndef LUA_COMPAT_ALL #ifndef LUA_COMPAT_MODULE @@ -24,7 +26,6 @@ #include "enums.h" #include "position.h" #include "outfit.h" -#include class Thing; class Creature; @@ -284,7 +285,7 @@ class LuaScriptInterface { double num = lua_tonumber(L, arg); if (num < static_cast(std::numeric_limits::lowest()) || num > static_cast(std::numeric_limits::max())) { - reportErrorFunc(L, fmt::format("Argument {} has out-of-range value for {}: {}", arg, typeid(T).name(), num)); + reportErrorFunc(L, std::format("Argument {} has out-of-range value for {}: {}", arg, typeid(T).name(), num)); } return static_cast(num); @@ -296,7 +297,7 @@ class LuaScriptInterface { double num = lua_tonumber(L, arg); if (num < static_cast(std::numeric_limits::lowest()) || num > static_cast(std::numeric_limits::max())) { - reportErrorFunc(L, fmt::format("Argument {} has out-of-range value for {}: {}", arg, typeid(T).name(), num)); + reportErrorFunc(L, std::format("Argument {} has out-of-range value for {}: {}", arg, typeid(T).name(), num)); } return static_cast(num); diff --git a/src/otpch.h b/src/otpch.h index d551467c64..aae95a6260 100644 --- a/src/otpch.h +++ b/src/otpch.h @@ -23,6 +23,6 @@ #include #include -#include +#include #include diff --git a/src/otserv.cpp b/src/otserv.cpp index 4cbda33dc1..4446694259 100644 --- a/src/otserv.cpp +++ b/src/otserv.cpp @@ -20,7 +20,6 @@ #include "databasetasks.h" #include "script.h" #include -#include #if __has_include("gitmetadata.h") #include "gitmetadata.h" #endif @@ -42,7 +41,7 @@ std::unique_lock g_loaderUniqueLock(g_loaderLock); void startupErrorMessage(const std::string& errorStr) { - fmt::print(fg(fmt::color::crimson) | fmt::emphasis::bold, "> ERROR: {:s}\n", errorStr); + std::cout << "> ERROR: \n" << errorStr << std::endl; g_loaderSignal.notify_all(); } @@ -264,7 +263,7 @@ void mainLoader(int, char*[], ServiceManager* services) g_game.setWorldType(WORLD_TYPE_PVP_ENFORCED); } else { 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))); + startupErrorMessage(std::format("Unknown world type: {:s}, valid world types are: pvp, no-pvp and pvp-enforced.", g_config.getString(ConfigManager::WORLD_TYPE))); return; } std::cout << asUpperCaseString(worldType) << std::endl; diff --git a/src/party.cpp b/src/party.cpp index a395fb012b..d82357a2e1 100644 --- a/src/party.cpp +++ b/src/party.cpp @@ -8,7 +8,7 @@ #include "configmanager.h" #include "events.h" -#include +#include extern Game g_game; extern ConfigManager g_config; @@ -116,7 +116,7 @@ bool Party::leaveParty(Player* player) clearPlayerPoints(player); - broadcastPartyMessage(MESSAGE_INFO_DESCR, fmt::format("{:s} has left the party.", player->getName())); + broadcastPartyMessage(MESSAGE_INFO_DESCR, std::format("{:s} has left the party.", player->getName())); if (missingLeader || empty()) { disband(); @@ -137,7 +137,7 @@ bool Party::passPartyLeadership(Player* player) memberList.erase(it); } - broadcastPartyMessage(MESSAGE_INFO_DESCR, fmt::format("{:s} is now the leader of the party.", player->getName()), true); + broadcastPartyMessage(MESSAGE_INFO_DESCR, std::format("{:s} is now the leader of the party.", player->getName()), true); Player* oldLeader = leader; leader = player; @@ -176,7 +176,7 @@ bool Party::joinParty(Player& player) inviteList.erase(it); - broadcastPartyMessage(MESSAGE_INFO_DESCR, fmt::format("{:s} has joined the party.", player.getName())); + broadcastPartyMessage(MESSAGE_INFO_DESCR, std::format("{:s} has joined the party.", player.getName())); player.setParty(this); @@ -199,7 +199,7 @@ bool Party::joinParty(Player& player) updateSharedExperience(); const std::string& leaderName = leader->getName(); - player.sendTextMessage(MESSAGE_INFO_DESCR, fmt::format("You have joined {:s}'{:s} party. Open the party channel to communicate with your companions.", leaderName, leaderName.back() == 's' ? "" : "s")); + player.sendTextMessage(MESSAGE_INFO_DESCR, std::format("You have joined {:s}'{:s} party. Open the party channel to communicate with your companions.", leaderName, leaderName.back() == 's' ? "" : "s")); return true; } @@ -234,8 +234,8 @@ bool Party::removeInvite(Player& player, bool removeFromPlayer/* = true*/) void Party::revokeInvitation(Player& player) { - player.sendTextMessage(MESSAGE_INFO_DESCR, fmt::format("{:s} has revoked {:s} invitation.", leader->getName(), leader->getSex() == PLAYERSEX_FEMALE ? "her" : "his")); - leader->sendTextMessage(MESSAGE_INFO_DESCR, fmt::format("Invitation for {:s} has been revoked.", player.getName())); + player.sendTextMessage(MESSAGE_INFO_DESCR, std::format("{:s} has revoked {:s} invitation.", leader->getName(), leader->getSex() == PLAYERSEX_FEMALE ? "her" : "his")); + leader->sendTextMessage(MESSAGE_INFO_DESCR, std::format("Invitation for {:s} has been revoked.", player.getName())); removeInvite(player); } @@ -246,11 +246,11 @@ bool Party::invitePlayer(Player& player) } if (empty()) { - leader->sendTextMessage(MESSAGE_INFO_DESCR, fmt::format("{:s} has been invited. Open the party channel to communicate with your members.", player.getName())); + leader->sendTextMessage(MESSAGE_INFO_DESCR, std::format("{:s} has been invited. Open the party channel to communicate with your members.", player.getName())); g_game.updatePlayerShield(leader); leader->sendCreatureSkull(leader); } else { - leader->sendTextMessage(MESSAGE_INFO_DESCR, fmt::format("{:s} has been invited.", player.getName())); + leader->sendTextMessage(MESSAGE_INFO_DESCR, std::format("{:s} has been invited.", player.getName())); } inviteList.push_back(&player); @@ -265,7 +265,7 @@ bool Party::invitePlayer(Player& player) player.addPartyInvitation(this); - player.sendTextMessage(MESSAGE_INFO_DESCR, fmt::format("{:s} has invited you to {:s} party.", leader->getName(), leader->getSex() == PLAYERSEX_FEMALE ? "her" : "his")); + player.sendTextMessage(MESSAGE_INFO_DESCR, std::format("{:s} has invited you to {:s} party.", leader->getName(), leader->getSex() == PLAYERSEX_FEMALE ? "her" : "his")); return true; } diff --git a/src/player.cpp b/src/player.cpp index 879e8f80c4..06b97daf23 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -16,7 +16,7 @@ #include "scheduler.h" #include "weapons.h" -#include +#include extern ConfigManager g_config; extern Game g_game; @@ -450,7 +450,7 @@ void Player::addSkillAdvance(skills_t skill, uint64_t count) skills[skill].tries = 0; skills[skill].percent = 0; - sendTextMessage(MESSAGE_EVENT_ADVANCE, fmt::format("You advanced to {:s} level {:d}.", getSkillName(skill), skills[skill].level)); + sendTextMessage(MESSAGE_EVENT_ADVANCE, std::format("You advanced to {:s} level {:d}.", getSkillName(skill), skills[skill].level)); g_creatureEvents->playerAdvance(this, skill, (skills[skill].level - 1), skills[skill].level); @@ -507,7 +507,7 @@ void Player::removeSkillTries(skills_t skill, uint64_t count, bool notify/* = fa if (notify) { bool sendUpdateSkills = false; if (oldLevel != skills[skill].level) { - sendTextMessage(MESSAGE_EVENT_ADVANCE, fmt::format("You were downgraded to {:s} level {:d}.", getSkillName(skill), skills[skill].level)); + sendTextMessage(MESSAGE_EVENT_ADVANCE, std::format("You were downgraded to {:s} level {:d}.", getSkillName(skill), skills[skill].level)); sendUpdateSkills = true; } @@ -1488,7 +1488,7 @@ void Player::onThink(uint32_t interval) if (idleTime > (kickAfterMinutes * 60000) + 60000) { kickPlayer(true); } else if (client && idleTime == 60000 * kickAfterMinutes) { - client->sendTextMessage(TextMessage(MESSAGE_STATUS_WARNING, fmt::format("There was no variation in your behaviour for {:d} minutes. You will be disconnected in one minute if there is no change in your actions until then.", kickAfterMinutes))); + client->sendTextMessage(TextMessage(MESSAGE_STATUS_WARNING, std::format("There was no variation in your behaviour for {:d} minutes. You will be disconnected in one minute if there is no change in your actions until then.", kickAfterMinutes))); } } @@ -1544,7 +1544,7 @@ void Player::removeMessageBuffer() Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_MUTED, muteTime * 1000, 0); addCondition(condition); - sendTextMessage(MESSAGE_STATUS_SMALL, fmt::format("You are muted for {:d} seconds.", muteTime)); + sendTextMessage(MESSAGE_STATUS_SMALL, std::format("You are muted for {:d} seconds.", muteTime)); } } } @@ -1592,7 +1592,7 @@ void Player::addManaSpent(uint64_t amount) magLevel++; manaSpent = 0; - sendTextMessage(MESSAGE_EVENT_ADVANCE, fmt::format("You advanced to magic level {:d}.", magLevel)); + sendTextMessage(MESSAGE_EVENT_ADVANCE, std::format("You advanced to magic level {:d}.", magLevel)); g_creatureEvents->playerAdvance(this, SKILL_MAGLEVEL, magLevel - 1, magLevel); @@ -1649,7 +1649,7 @@ void Player::removeManaSpent(uint64_t amount, bool notify/* = false*/) if (notify) { bool sendUpdateStats = false; if (oldLevel != magLevel) { - sendTextMessage(MESSAGE_EVENT_ADVANCE, fmt::format("You were downgraded to magic level {:d}.", magLevel)); + sendTextMessage(MESSAGE_EVENT_ADVANCE, std::format("You were downgraded to magic level {:d}.", magLevel)); sendUpdateStats = true; } @@ -1737,7 +1737,7 @@ void Player::addExperience(Creature* source, uint64_t exp, bool sendText/* = fal g_creatureEvents->playerAdvance(this, SKILL_LEVEL, prevLevel, level); - sendTextMessage(MESSAGE_EVENT_ADVANCE, fmt::format("You advanced from Level {:d} to Level {:d}.", prevLevel, level)); + sendTextMessage(MESSAGE_EVENT_ADVANCE, std::format("You advanced from Level {:d} to Level {:d}.", prevLevel, level)); } if (nextLevelExp > currLevelExp) { @@ -1815,7 +1815,7 @@ void Player::removeExperience(uint64_t exp, bool sendText/* = false*/) party->updateSharedExperience(); } - sendTextMessage(MESSAGE_EVENT_ADVANCE, fmt::format("You were downgraded from Level {:d} to Level {:d}.", oldLevel, level)); + sendTextMessage(MESSAGE_EVENT_ADVANCE, std::format("You were downgraded from Level {:d} to Level {:d}.", oldLevel, level)); } uint64_t nextLevelExp = Player::getExpForLevel(level + 1); @@ -2042,7 +2042,7 @@ void Player::death(Creature* lastHitCreature) } if (oldLevel != level) { - sendTextMessage(MESSAGE_EVENT_ADVANCE, fmt::format("You were downgraded from Level {:d} to Level {:d}.", oldLevel, level)); + sendTextMessage(MESSAGE_EVENT_ADVANCE, std::format("You were downgraded from Level {:d} to Level {:d}.", oldLevel, level)); } uint64_t currLevelExp = Player::getExpForLevel(level); @@ -2137,20 +2137,20 @@ Item* Player::getCorpse(Creature* lastHitCreature, Creature* mostDamageCreature) if (lastHitCreature) { if (!mostDamageCreature) { - corpse->setSpecialDescription(fmt::format("You recognize {:s}. {:s} was killed by {:s}{:s}", getNameDescription(), getSex() == PLAYERSEX_FEMALE ? "She" : "He", lastHitCreature->getNameDescription(), names.size() > 1 ? " and others." : ".")); + corpse->setSpecialDescription(std::format("You recognize {:s}. {:s} was killed by {:s}{:s}", getNameDescription(), getSex() == PLAYERSEX_FEMALE ? "She" : "He", lastHitCreature->getNameDescription(), names.size() > 1 ? " and others." : ".")); } else if (lastHitCreature != mostDamageCreature && names[lastHitCreature->getName()] == 1) { - corpse->setSpecialDescription(fmt::format("You recognize {:s}. {:s} was killed by {:s}, {:s}{:s}", getNameDescription(), getSex() == PLAYERSEX_FEMALE ? "She" : "He", mostDamageCreature->getNameDescription(), lastHitCreature->getNameDescription(), names.size() > 2 ? " and others." : ".")); + corpse->setSpecialDescription(std::format("You recognize {:s}. {:s} was killed by {:s}, {:s}{:s}", getNameDescription(), getSex() == PLAYERSEX_FEMALE ? "She" : "He", mostDamageCreature->getNameDescription(), lastHitCreature->getNameDescription(), names.size() > 2 ? " and others." : ".")); } else { - corpse->setSpecialDescription(fmt::format("You recognize {:s}. {:s} was killed by {:s} and others.", getNameDescription(), getSex() == PLAYERSEX_FEMALE ? "She" : "He", mostDamageCreature->getNameDescription())); + corpse->setSpecialDescription(std::format("You recognize {:s}. {:s} was killed by {:s} and others.", getNameDescription(), getSex() == PLAYERSEX_FEMALE ? "She" : "He", mostDamageCreature->getNameDescription())); } } else if (mostDamageCreature) { if (names.size() > 1) { - corpse->setSpecialDescription(fmt::format("You recognize {:s}. {:s} was killed by something evil, {:s}, and others", getNameDescription(), getSex() == PLAYERSEX_FEMALE ? "She" : "He", mostDamageCreature->getNameDescription())); + corpse->setSpecialDescription(std::format("You recognize {:s}. {:s} was killed by something evil, {:s}, and others", getNameDescription(), getSex() == PLAYERSEX_FEMALE ? "She" : "He", mostDamageCreature->getNameDescription())); } else { - corpse->setSpecialDescription(fmt::format("You recognize {:s}. {:s} was killed by something evil and others", getNameDescription(), getSex() == PLAYERSEX_FEMALE ? "She" : "He", mostDamageCreature->getNameDescription())); + corpse->setSpecialDescription(std::format("You recognize {:s}. {:s} was killed by something evil and others", getNameDescription(), getSex() == PLAYERSEX_FEMALE ? "She" : "He", mostDamageCreature->getNameDescription())); } } else { - corpse->setSpecialDescription(fmt::format("You recognize {:s}. {:s} was killed by something evil {:s}", getNameDescription(), getSex() == PLAYERSEX_FEMALE ? "She" : "He", names.size() ? " and others." : ".")); + corpse->setSpecialDescription(std::format("You recognize {:s}. {:s} was killed by something evil {:s}", getNameDescription(), getSex() == PLAYERSEX_FEMALE ? "She" : "He", names.size() ? " and others." : ".")); } } return corpse; @@ -4355,7 +4355,7 @@ bool Player::addOfflineTrainingTries(skills_t skill, uint64_t tries) manaSpent += tries; if (magLevel != currMagLevel) { - sendTextMessage(MESSAGE_EVENT_ADVANCE, fmt::format("You advanced to magic level {:d}.", magLevel)); + sendTextMessage(MESSAGE_EVENT_ADVANCE, std::format("You advanced to magic level {:d}.", magLevel)); } uint8_t newPercent; @@ -4408,7 +4408,7 @@ bool Player::addOfflineTrainingTries(skills_t skill, uint64_t tries) skills[skill].tries += tries; if (currSkillLevel != skills[skill].level) { - sendTextMessage(MESSAGE_EVENT_ADVANCE, fmt::format("You advanced to {:s} level {:d}.", getSkillName(skill), skills[skill].level)); + sendTextMessage(MESSAGE_EVENT_ADVANCE, std::format("You advanced to {:s} level {:d}.", getSkillName(skill), skills[skill].level)); } uint8_t newPercent; @@ -4432,7 +4432,7 @@ bool Player::addOfflineTrainingTries(skills_t skill, uint64_t tries) sendSkills(); } - sendTextMessage(MESSAGE_EVENT_ADVANCE, fmt::format("Your {:s} skill changed from level {:d} (with {:.2f}% progress towards level {:d}) to level {:d} (with {:.2f}% progress towards level {:d})", ucwords(getSkillName(skill)), oldSkillValue, oldPercentToNextLevel, (oldSkillValue + 1), newSkillValue, newPercentToNextLevel, (newSkillValue + 1))); + sendTextMessage(MESSAGE_EVENT_ADVANCE, std::format("Your {:s} skill changed from level {:d} (with {:.2f}% progress towards level {:d}) to level {:d} (with {:.2f}% progress towards level {:d})", ucwords(getSkillName(skill)), oldSkillValue, oldPercentToNextLevel, (oldSkillValue + 1), newSkillValue, newPercentToNextLevel, (newSkillValue + 1))); return sendUpdate; } diff --git a/src/protocolgame.cpp b/src/protocolgame.cpp index 86d1fb1f46..6e6b652056 100644 --- a/src/protocolgame.cpp +++ b/src/protocolgame.cpp @@ -3,7 +3,7 @@ #include "otpch.h" -#include +#include #include "protocolgame.h" @@ -19,7 +19,7 @@ #include "ban.h" #include "scheduler.h" -#include +#include extern ConfigManager g_config; extern Actions actions; @@ -181,9 +181,9 @@ void ProtocolGame::login(const std::string& name, uint32_t accountId, OperatingS } if (banInfo.expiresAt > 0) { - disconnectClient(fmt::format("Your account has been banned until {:s} by {:s}.\n\nReason specified:\n{:s}", formatDateShort(banInfo.expiresAt), banInfo.bannedBy, banInfo.reason)); + disconnectClient(std::format("Your account has been banned until {:s} by {:s}.\n\nReason specified:\n{:s}", formatDateShort(banInfo.expiresAt), banInfo.bannedBy, banInfo.reason)); } else { - disconnectClient(fmt::format("Your account has been permanently banned by {:s}.\n\nReason specified:\n{:s}", banInfo.bannedBy, banInfo.reason)); + disconnectClient(std::format("Your account has been permanently banned by {:s}.\n\nReason specified:\n{:s}", banInfo.bannedBy, banInfo.reason)); } return; } @@ -193,7 +193,7 @@ void ProtocolGame::login(const std::string& name, uint32_t accountId, OperatingS uint8_t retryTime = getWaitTime(currentSlot); auto output = OutputMessagePool::getOutputMessage(); output->addByte(0x16); - output->addString(fmt::format("Too many players online.\nYou are at place {:d} on the waiting list.", currentSlot)); + output->addString(std::format("Too many players online.\nYou are at place {:d} on the waiting list.", currentSlot)); output->addByte(retryTime); send(output); disconnect(); @@ -382,7 +382,7 @@ void ProtocolGame::onRecvFirstMessage(NetworkMessage& msg) } if (version < CLIENT_VERSION_MIN || version > CLIENT_VERSION_MAX) { - disconnectClient(fmt::format("Only clients with protocol {:s} allowed!", CLIENT_VERSION_STR)); + disconnectClient(std::format("Only clients with protocol {:s} allowed!", CLIENT_VERSION_STR)); return; } @@ -402,7 +402,7 @@ void ProtocolGame::onRecvFirstMessage(NetworkMessage& msg) banInfo.reason = "(none)"; } - disconnectClient(fmt::format("Your IP has been banned until {:s} by {:s}.\n\nReason specified:\n{:s}", formatDateShort(banInfo.expiresAt), banInfo.bannedBy, banInfo.reason)); + disconnectClient(std::format("Your IP has been banned until {:s} by {:s}.\n\nReason specified:\n{:s}", formatDateShort(banInfo.expiresAt), banInfo.bannedBy, banInfo.reason)); return; } @@ -606,7 +606,7 @@ void ProtocolGame::GetTileDescription(const Tile* tile, NetworkMessage& msg) const CreatureVector* creatures = tile->getCreatures(); if (creatures) { - for (const Creature* creature : boost::adaptors::reverse(*creatures)) { + for (const Creature* creature : std::views::reverse(*creatures)) { if (!player->canSeeCreature(creature)) { continue; } @@ -1904,7 +1904,7 @@ void ProtocolGame::sendMarketDetail(uint16_t itemId) // example: // "attack +x, chance to hit +y%, z fields" if (it.abilities && it.abilities->elementType != COMBAT_NONE && it.abilities->elementDamage != 0) { - msg.addString(fmt::format("{:d} physical +{:d} {:s}", it.attack, it.abilities->elementDamage, getCombatName(it.abilities->elementType))); + msg.addString(std::format("{:d} physical +{:d} {:s}", it.attack, it.abilities->elementDamage, getCombatName(it.abilities->elementType))); } else { msg.addString(std::to_string(it.attack)); } @@ -1920,7 +1920,7 @@ void ProtocolGame::sendMarketDetail(uint16_t itemId) if (it.defense != 0) { if (it.extraDefense != 0) { - msg.addString(fmt::format("{:d} {:+d}", it.defense, it.extraDefense)); + msg.addString(std::format("{:d} {:+d}", it.defense, it.extraDefense)); } else { msg.addString(std::to_string(it.defense)); } @@ -1940,7 +1940,7 @@ void ProtocolGame::sendMarketDetail(uint16_t itemId) } if (it.decayTime != 0) { - msg.addString(fmt::format("{:d} seconds", it.decayTime)); + msg.addString(std::format("{:d} seconds", it.decayTime)); } else { msg.add(0x00); } diff --git a/src/protocollogin.cpp b/src/protocollogin.cpp index 45ea7a2b98..a6a759a055 100644 --- a/src/protocollogin.cpp +++ b/src/protocollogin.cpp @@ -13,7 +13,7 @@ #include "ban.h" #include "game.h" -#include +#include extern ConfigManager g_config; extern Game g_game; @@ -56,7 +56,7 @@ void ProtocolLogin::getCharacterList(const std::string& accountName, const std:: if (!motd.empty()) { //Add MOTD output->addByte(0x14); - output->addString(fmt::format("{:d}\n{:s}", g_game.getMotdNum(), motd)); + output->addString(std::format("{:d}\n{:s}", g_game.getMotdNum(), motd)); } //Add session key @@ -136,7 +136,7 @@ void ProtocolLogin::onRecvFirstMessage(NetworkMessage& msg) */ if (version <= 760) { - disconnectClient(fmt::format("Only clients with protocol {:s} allowed!", CLIENT_VERSION_STR), version); + disconnectClient(std::format("Only clients with protocol {:s} allowed!", CLIENT_VERSION_STR), version); return; } @@ -154,7 +154,7 @@ void ProtocolLogin::onRecvFirstMessage(NetworkMessage& msg) setXTEAKey(std::move(key)); if (version < CLIENT_VERSION_MIN || version > CLIENT_VERSION_MAX) { - disconnectClient(fmt::format("Only clients with protocol {:s} allowed!", CLIENT_VERSION_STR), version); + disconnectClient(std::format("Only clients with protocol {:s} allowed!", CLIENT_VERSION_STR), version); return; } @@ -179,7 +179,7 @@ void ProtocolLogin::onRecvFirstMessage(NetworkMessage& msg) banInfo.reason = "(none)"; } - disconnectClient(fmt::format("Your IP has been banned until {:s} by {:s}.\n\nReason specified:\n{:s}", formatDateShort(banInfo.expiresAt), banInfo.bannedBy, banInfo.reason), version); + disconnectClient(std::format("Your IP has been banned until {:s} by {:s}.\n\nReason specified:\n{:s}", formatDateShort(banInfo.expiresAt), banInfo.bannedBy, banInfo.reason), version); return; } diff --git a/src/protocolold.cpp b/src/protocolold.cpp index 5f132a7cc6..752e3cba95 100644 --- a/src/protocolold.cpp +++ b/src/protocolold.cpp @@ -8,7 +8,7 @@ #include "game.h" -#include +#include extern Game g_game; @@ -34,7 +34,7 @@ void ProtocolOld::onRecvFirstMessage(NetworkMessage& msg) msg.skipBytes(12); if (version <= 760) { - disconnectClient(fmt::format("Only clients with protocol {:s} allowed!", CLIENT_VERSION_STR)); + disconnectClient(std::format("Only clients with protocol {:s} allowed!", CLIENT_VERSION_STR)); return; } @@ -55,5 +55,5 @@ void ProtocolOld::onRecvFirstMessage(NetworkMessage& msg) disableChecksum(); } - disconnectClient(fmt::format("Only clients with protocol {:s} allowed!", CLIENT_VERSION_STR)); + disconnectClient(std::format("Only clients with protocol {:s} allowed!", CLIENT_VERSION_STR)); } diff --git a/src/raids.cpp b/src/raids.cpp index 860e61b2de..14a4833a82 100644 --- a/src/raids.cpp +++ b/src/raids.cpp @@ -12,7 +12,7 @@ #include "scheduler.h" #include "monster.h" -#include +#include extern Game g_game; extern ConfigManager g_config; @@ -57,7 +57,7 @@ bool Raids::loadFromXml() if ((attr = raidNode.attribute("file"))) { file = attr.as_string(); } else { - file = fmt::format("raids/{:s}.xml", name); + file = std::format("raids/{:s}.xml", name); std::cout << "[Warning - Raids::loadFromXml] File tag missing for raid " << name << ". Using default: " << file << std::endl; } diff --git a/src/rsa.cpp b/src/rsa.cpp index 92d0998389..4c3d8b09c1 100644 --- a/src/rsa.cpp +++ b/src/rsa.cpp @@ -7,7 +7,6 @@ #include #include -#include #include #include @@ -21,7 +20,7 @@ void RSA::decrypt(char* msg) const auto c = pk.CalculateInverse(prng, m); c.Encode(reinterpret_cast(msg), 128); } catch (const CryptoPP::Exception& e) { - fmt::print(fg(fmt::color::crimson) | fmt::emphasis::bold, e.what(), "\n"); + std::cout << e.what() << std::endl; } } diff --git a/src/scheduler.cpp b/src/scheduler.cpp index ae1fbba816..e7c09dad90 100644 --- a/src/scheduler.cpp +++ b/src/scheduler.cpp @@ -4,7 +4,7 @@ #include "otpch.h" #include "scheduler.h" -#include +#include #include uint32_t Scheduler::addEvent(SchedulerTask* task) @@ -14,16 +14,16 @@ uint32_t Scheduler::addEvent(SchedulerTask* task) task->setEventId(++lastEventId); } - boost::asio::post(io_context, [this, task]() { + asio::post(io_context, [this, task]() { // insert the event id in the list of active events - auto it = eventIdTimerMap.emplace(task->getEventId(), boost::asio::steady_timer{io_context}); + auto it = eventIdTimerMap.emplace(task->getEventId(), asio::steady_timer{io_context}); auto& timer = it.first->second; timer.expires_from_now(std::chrono::milliseconds(task->getDelay())); - timer.async_wait([this, task](const boost::system::error_code& error) { + timer.async_wait([this, task](const std::error_code& error) { eventIdTimerMap.erase(task->getEventId()); - if (error == boost::asio::error::operation_aborted || getState() == THREAD_STATE_TERMINATED) { + if (error == asio::error::operation_aborted || getState() == THREAD_STATE_TERMINATED) { // the timer has been manually canceled(timer->cancel()) or Scheduler::shutdown has been called delete task; return; @@ -42,7 +42,7 @@ void Scheduler::stopEvent(uint32_t eventId) return; } - boost::asio::post(io_context, [this, eventId]() { + asio::post(io_context, [this, eventId]() { // search the event id auto it = eventIdTimerMap.find(eventId); if (it != eventIdTimerMap.end()) { @@ -54,7 +54,7 @@ void Scheduler::stopEvent(uint32_t eventId) void Scheduler::shutdown() { setState(THREAD_STATE_TERMINATED); - boost::asio::post(io_context, [this]() { + asio::post(io_context, [this]() { // cancel all active timers for (auto& it : eventIdTimerMap) { it.second.cancel(); diff --git a/src/scheduler.h b/src/scheduler.h index a43b33ea17..47696413c1 100644 --- a/src/scheduler.h +++ b/src/scheduler.h @@ -46,9 +46,9 @@ class Scheduler : public ThreadHolder void threadMain() { io_context.run(); } private: std::atomic lastEventId{0}; - std::unordered_map eventIdTimerMap; - boost::asio::io_context io_context; - boost::asio::io_context::work work{io_context}; + std::unordered_map eventIdTimerMap; + asio::io_context io_context; + asio::io_context::work work{io_context}; }; extern Scheduler g_scheduler; diff --git a/src/script.cpp b/src/script.cpp index 5568d282f4..eee20b341c 100644 --- a/src/script.cpp +++ b/src/script.cpp @@ -4,9 +4,10 @@ #include "otpch.h" #include "script.h" -#include #include "configmanager.h" +#include + extern LuaEnvironment g_luaEnvironment; extern ConfigManager g_config; @@ -23,7 +24,7 @@ Scripts::~Scripts() bool Scripts::loadScripts(std::string folderName, bool isLib, bool reload) { - namespace fs = boost::filesystem; + namespace fs = std::filesystem; const auto dir = fs::current_path() / "data" / folderName; if(!fs::exists(dir) || !fs::is_directory(dir)) { diff --git a/src/server.cpp b/src/server.cpp index 0712c9d5b5..3b7a7ea443 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -40,7 +40,7 @@ void ServiceManager::stop() for (auto& servicePortIt : acceptors) { try { io_service.post(std::bind(&ServicePort::onStopServer, servicePortIt.second)); - } catch (boost::system::system_error& e) { + } catch (std::system_error& e) { std::cout << "[ServiceManager::stop] Network Error: " << e.what() << std::endl; } } @@ -86,7 +86,7 @@ void ServicePort::accept() acceptor->async_accept(connection->getSocket(), std::bind(&ServicePort::onAccept, shared_from_this(), connection, std::placeholders::_1)); } -void ServicePort::onAccept(Connection_ptr connection, const boost::system::error_code& error) +void ServicePort::onAccept(Connection_ptr connection, const std::error_code& error) { if (!error) { if (services.empty()) { @@ -106,7 +106,7 @@ void ServicePort::onAccept(Connection_ptr connection, const boost::system::error } accept(); - } else if (error != boost::asio::error::operation_aborted) { + } else if (error != asio::error::operation_aborted) { if (!pendingStart) { close(); pendingStart = true; @@ -152,17 +152,17 @@ void ServicePort::open(uint16_t port) try { if (g_config.getBoolean(ConfigManager::BIND_ONLY_GLOBAL_ADDRESS)) { - acceptor.reset(new boost::asio::ip::tcp::acceptor(io_service, boost::asio::ip::tcp::endpoint( - boost::asio::ip::address(boost::asio::ip::address_v4::from_string(g_config.getString(ConfigManager::IP))), serverPort))); + acceptor.reset(new asio::ip::tcp::acceptor(io_service, asio::ip::tcp::endpoint( + asio::ip::address(asio::ip::address_v4::from_string(g_config.getString(ConfigManager::IP))), serverPort))); } else { - acceptor.reset(new boost::asio::ip::tcp::acceptor(io_service, boost::asio::ip::tcp::endpoint( - boost::asio::ip::address(boost::asio::ip::address_v4(INADDR_ANY)), serverPort))); + acceptor.reset(new asio::ip::tcp::acceptor(io_service, asio::ip::tcp::endpoint( + asio::ip::address(asio::ip::address_v4(INADDR_ANY)), serverPort))); } - acceptor->set_option(boost::asio::ip::tcp::no_delay(true)); + acceptor->set_option(asio::ip::tcp::no_delay(true)); accept(); - } catch (boost::system::system_error& e) { + } catch (std::system_error& e) { std::cout << "[ServicePort::open] Error: " << e.what() << std::endl; pendingStart = true; @@ -174,7 +174,7 @@ void ServicePort::open(uint16_t port) void ServicePort::close() { if (acceptor && acceptor->is_open()) { - boost::system::error_code error; + std::error_code error; acceptor->close(error); } } diff --git a/src/server.h b/src/server.h index b1e752eabb..a393b5cae2 100644 --- a/src/server.h +++ b/src/server.h @@ -46,7 +46,7 @@ class Service final : public ServiceBase class ServicePort : public std::enable_shared_from_this { public: - explicit ServicePort(boost::asio::io_service& io_service) : io_service(io_service) {} + explicit ServicePort(asio::io_service& io_service) : io_service(io_service) {} ~ServicePort(); // non-copyable @@ -63,13 +63,13 @@ class ServicePort : public std::enable_shared_from_this Protocol_ptr make_protocol(bool checksummed, NetworkMessage& msg, const Connection_ptr& connection) const; void onStopServer(); - void onAccept(Connection_ptr connection, const boost::system::error_code& error); + void onAccept(Connection_ptr connection, const std::error_code& error); private: void accept(); - boost::asio::io_service& io_service; - std::unique_ptr acceptor; + asio::io_service& io_service; + std::unique_ptr acceptor; std::vector services; uint16_t serverPort = 0; @@ -101,9 +101,9 @@ class ServiceManager std::unordered_map acceptors; - boost::asio::io_service io_service; + asio::io_service io_service; Signals signals{io_service}; - boost::asio::steady_timer death_timer { io_service }; + asio::steady_timer death_timer { io_service }; bool running = false; }; diff --git a/src/signals.cpp b/src/signals.cpp index bd2f2dc966..5537a2cede 100644 --- a/src/signals.cpp +++ b/src/signals.cpp @@ -168,7 +168,7 @@ void dispatchSignalHandler(int signal) } -Signals::Signals(boost::asio::io_service& service): set(service) +Signals::Signals(asio::io_service& service): set(service) { set.add(SIGINT); set.add(SIGTERM); @@ -187,7 +187,7 @@ Signals::Signals(boost::asio::io_service& service): set(service) void Signals::asyncWait() { - set.async_wait([this](const boost::system::error_code& err, int signal) { + set.async_wait([this](const std::error_code& err, int signal) { if (err) { std::cerr << "Signal handling error: " << err.message() << std::endl; return; diff --git a/src/signals.h b/src/signals.h index 1ec23478d7..579885a426 100644 --- a/src/signals.h +++ b/src/signals.h @@ -4,13 +4,13 @@ #ifndef FS_SIGNALHANDLINGTHREAD_H_01C6BF08B0EFE9E200175D108CF0B35F #define FS_SIGNALHANDLINGTHREAD_H_01C6BF08B0EFE9E200175D108CF0B35F -#include +#include class Signals { - boost::asio::signal_set set; + asio::signal_set set; public: - explicit Signals(boost::asio::io_service& service); + explicit Signals(asio::io_service& service); private: void asyncWait(); diff --git a/src/tile.cpp b/src/tile.cpp index 05fbd651e6..6b8cbdde48 100644 --- a/src/tile.cpp +++ b/src/tile.cpp @@ -3,7 +3,7 @@ #include "otpch.h" -#include +#include #include "tile.h" @@ -1202,7 +1202,7 @@ int32_t Tile::getClientIndexOfCreature(const Player* player, const Creature* cre } if (const CreatureVector* creatures = getCreatures()) { - for (const Creature* c : boost::adaptors::reverse(*creatures)) { + for (const Creature* c : std::views::reverse(*creatures)) { if (c == creature) { return n; } else if (player->canSeeCreature(c)) { diff --git a/vc17/theforgottenserver.vcxproj b/vc17/theforgottenserver.vcxproj index bda892612c..826da3cfb1 100644 --- a/vc17/theforgottenserver.vcxproj +++ b/vc17/theforgottenserver.vcxproj @@ -28,22 +28,22 @@ Application true - v143 + v145 Application true - v143 + v145 Application false - v143 + v145 Application false - v143 + v145 @@ -86,6 +86,9 @@ $(ProjectName)-$(Platform) $(VC_IncludePath);$(WindowsSDK_IncludePath); + + true + _CONSOLE;$(PREPROCESSOR_DEFS);%(PreprocessorDefinitions) @@ -94,7 +97,7 @@ true AdvancedVectorExtensions $(VcpkgRoot)include\luajit;%(AdditionalIncludeDirectories) - stdcpp17 + stdcpp23 MachineX86 @@ -109,7 +112,7 @@ true AdvancedVectorExtensions $(VcpkgRoot)include\luajit;%(AdditionalIncludeDirectories) - stdcpp17 + stdcpp23 true @@ -127,7 +130,7 @@ true AdvancedVectorExtensions $(VcpkgRoot)include\luajit;%(AdditionalIncludeDirectories) - stdcpp17 + stdcpp23 MachineX86 @@ -149,7 +152,7 @@ true AdvancedVectorExtensions $(VcpkgRoot)include\luajit;%(AdditionalIncludeDirectories) - stdcpp17 + stdcpp23 true @@ -335,4 +338,4 @@ - + \ No newline at end of file diff --git a/vcpkg.json b/vcpkg.json new file mode 100644 index 0000000000..f008b7e77d --- /dev/null +++ b/vcpkg.json @@ -0,0 +1,16 @@ +{ + "name": "forgottenserver", + "version": "1.0.0", + "description": "project dependencies", + "dependencies": [ + "asio", + "atomic-queue", + "cryptopp", + "libmysql", + "luajit", + "nlohmann-json", + "openssl", + "pugixml" + ], + "builtin-baseline": "1e199d32ad53aab1defda61ce41c380302e3f95c" +}