diff options
Diffstat (limited to 'src/game-server')
-rw-r--r-- | src/game-server/attribute.cpp | 2 | ||||
-rw-r--r-- | src/game-server/attribute.h | 2 | ||||
-rw-r--r-- | src/game-server/being.cpp | 15 | ||||
-rw-r--r-- | src/game-server/commandhandler.cpp | 23 | ||||
-rw-r--r-- | src/game-server/main-game.cpp | 5 | ||||
-rw-r--r-- | src/game-server/mapmanager.cpp | 121 | ||||
-rw-r--r-- | src/game-server/mapmanager.h | 17 | ||||
-rw-r--r-- | src/game-server/settingsmanager.cpp | 9 | ||||
-rw-r--r-- | src/game-server/spawnareacomponent.cpp | 2 | ||||
-rw-r--r-- | src/game-server/state.cpp | 2 |
10 files changed, 101 insertions, 97 deletions
diff --git a/src/game-server/attribute.cpp b/src/game-server/attribute.cpp index 71e5d944..f898b6e8 100644 --- a/src/game-server/attribute.cpp +++ b/src/game-server/attribute.cpp @@ -394,7 +394,7 @@ void AttributeModifiersEffect::clearMods(double baseValue) mMod = mEffectType == Additive ? 0 : 1; } -double Attribute::checkBounds(double baseValue) +double Attribute::checkBounds(double baseValue) const { LOG_DEBUG("Checking bounds for value: " << baseValue); if (baseValue > mMaxValue) diff --git a/src/game-server/attribute.h b/src/game-server/attribute.h index 736e54a6..2ac1378c 100644 --- a/src/game-server/attribute.h +++ b/src/game-server/attribute.h @@ -195,7 +195,7 @@ class Attribute * Checks the min and max permitted values for the given base value * and return the adjusted value. */ - double checkBounds(double baseValue); + double checkBounds(double baseValue) const; double mBase; // The attribute base value double mMinValue; // The min authorized base and derived attribute value diff --git a/src/game-server/being.cpp b/src/game-server/being.cpp index 4ddec981..f3d45305 100644 --- a/src/game-server/being.cpp +++ b/src/game-server/being.cpp @@ -234,12 +234,11 @@ void BeingComponent::move(Entity &entity) * class has been used, because that seems to be the most logical * place extra functionality will be added. */ - for (Path::iterator pathIterator = mPath.begin(); - pathIterator != mPath.end(); pathIterator++) + for (Point &point : mPath) { const unsigned char walkmask = entity.getComponent<ActorComponent>()->getWalkMask(); - if (!map->getWalk(pathIterator->x, pathIterator->y, walkmask)) + if (!map->getWalk(point.x, point.y, walkmask)) { mPath.clear(); break; @@ -498,12 +497,10 @@ void BeingComponent::removeStatusEffect(int id) bool BeingComponent::hasStatusEffect(int id) const { - StatusEffects::const_iterator it = mStatus.begin(); - while (it != mStatus.end()) + for (auto &statusIt : mStatus) { - if (it->second.status->getId() == id) + if (statusIt.second.status->getId() == id) return true; - it++; } return false; } @@ -566,12 +563,12 @@ void BeingComponent::update(Entity &entity) if (it->second.time <= 0 || mAction == DEAD) { StatusEffects::iterator removeIt = it; - it++; // bring this iterator to the safety of the next element + ++it; // bring this iterator to the safety of the next element mStatus.erase(removeIt); } else { - it++; + ++it; } } diff --git a/src/game-server/commandhandler.cpp b/src/game-server/commandhandler.cpp index dcdd8c6a..4c210bf0 100644 --- a/src/game-server/commandhandler.cpp +++ b/src/game-server/commandhandler.cpp @@ -198,13 +198,11 @@ static std::string playerRights(Entity *ch) std::stringstream str; str << (unsigned)ch->getComponent<CharacterComponent>()->getAccountLevel(); str << " ( "; - std::list<std::string> classes = - PermissionManager::getClassList(ch); - for (std::list<std::string>::iterator i = classes.begin(); - i != classes.end(); - i++) + std::list<std::string> classes = PermissionManager::getClassList(ch); + + for (std::string &permission : classes) { - str << (*i) << " "; + str << permission << " "; } str << ")"; return str.str(); @@ -257,7 +255,7 @@ static std::string getArgument(std::string &args) } else { - argument = args.substr(0); + argument = args; args = std::string(); } return argument; @@ -269,12 +267,10 @@ static void handleHelp(Entity *player, std::string &args) { // short list of all commands say("=Available Commands=", player); - std::list<std::string> commands = PermissionManager::getPermissionList(player); - for (std::list<std::string>::iterator i = commands.begin(); - i != commands.end(); - i++) + for (std::string &command : + PermissionManager::getPermissionList(player)) { - say((*i), player); + say(command, player); } } else { // don't show help for commands the player may not use @@ -909,7 +905,7 @@ static void handleBan(Entity *player, std::string &args) // feedback for command user std::string otherName = other->getComponent<BeingComponent>()->getName(); std::string msg = "You've banned " + otherName + " for " + utils::toString(length) + " minutes"; - say(msg.c_str(), player); + say(msg, player); // log transaction msg = "User banned " + otherName + " for " + utils::toString(length) + " minutes"; accountHandler->sendTransaction(characterComponent->getDatabaseID(), @@ -1423,7 +1419,6 @@ static void handleCraft(Entity *player, std::string &args) std::stringstream errMsg; std::list<InventoryItem> recipe; Inventory playerInventory(player); - std::map<int, int> totalAmountOfItem; while (true) { diff --git a/src/game-server/main-game.cpp b/src/game-server/main-game.cpp index e21b1ddf..894af5f9 100644 --- a/src/game-server/main-game.cpp +++ b/src/game-server/main-game.cpp @@ -128,11 +128,6 @@ static void initializeServer() ResourceManager::initialize(); ScriptManager::initialize(); // Depends on ResourceManager - if (MapManager::initialize(DEFAULT_MAPSDB_FILE) < 1) - { - LOG_FATAL("The Game Server can't find any valid/available maps."); - exit(EXIT_MAP_FILE_NOT_FOUND); - } // load game settings files settingsManager->initialize(); diff --git a/src/game-server/mapmanager.cpp b/src/game-server/mapmanager.cpp index 50f79cd0..f3e9fcf2 100644 --- a/src/game-server/mapmanager.cpp +++ b/src/game-server/mapmanager.cpp @@ -22,10 +22,10 @@ #include "game-server/mapmanager.h" #include "common/resourcemanager.h" +#include "common/defines.h" #include "game-server/map.h" #include "game-server/mapcomposite.h" #include "utils/logger.h" -#include "utils/xml.h" #include <cassert> @@ -39,80 +39,87 @@ const MapManager::Maps &MapManager::getMaps() return maps; } -int MapManager::initialize(const std::string &mapReferenceFile) +void MapManager::initialize() { - // Indicates the number of maps loaded successfully - int loadedMaps = 0; - XML::Document doc(mapReferenceFile); - xmlNodePtr rootNode = doc.rootNode(); +} - if (!rootNode || !xmlStrEqual(rootNode->name, BAD_CAST "maps")) +/** + * Destroys all maps. + */ +void MapManager::deinitialize() +{ + for (Maps::iterator i = maps.begin(), i_end = maps.end(); i != i_end; ++i) { - LOG_ERROR("Item Manager: Error while parsing map database (" - << mapReferenceFile << ")!"); - return loadedMaps; + delete i->second; } + maps.clear(); +} - LOG_INFO("Loading map reference: " << mapReferenceFile); - for_each_xml_child_node(node, rootNode) - { - if (!xmlStrEqual(node->name, BAD_CAST "map")) - continue; +/** + * Prepare map manager for a reload. + */ +void MapManager::reload() +{ + // TODO: this method needs proper map reloading + LOG_ERROR("MapManager::reload() not implemented yet"); +} + +/** + * Read a <map> node from settings + */ +void MapManager::readMapNode(xmlNodePtr node) +{ + int id = XML::getProperty(node, "id", 0); + std::string name = XML::getProperty(node, "name", std::string()); - int id = XML::getProperty(node, "id", 0); - std::string name = XML::getProperty(node, "name", std::string()); - // Test id and map name - if (id > 0 && !name.empty()) + if (id <= 0) + { + LOG_WARN("Invalid map Id: " << id << " for map: " + << name << '.'); + } + else if (name.empty()) + { + LOG_WARN("Invalid unnamed map Id: " << id << '.'); + } + else + { + // Testing if the file is actually in the maps folder + std::string file = std::string("maps/") + name + ".tmx"; + bool mapFileExists = ResourceManager::exists(file); + + // Try to fall back on fully compressed map + if (!mapFileExists) { - // Testing if the file is actually in the maps folder - std::string file = std::string("maps/") + name + ".tmx"; - bool mapFileExists = ResourceManager::exists(file); - - // Try to fall back on fully compressed map - if (!mapFileExists) - { - file += ".gz"; - mapFileExists = ResourceManager::exists(file); - } - - if (mapFileExists) - { - maps[id] = new MapComposite(id, name); - if (!maps[id]->readMap()) - LOG_FATAL("Failed to load map \"" << name << "\"!"); - - ++loadedMaps; - } + file += ".gz"; + mapFileExists = ResourceManager::exists(file); } - else + + if (mapFileExists) { - if (name.empty()) - { - LOG_WARN("Invalid unnamed map Id: " << id << '.'); - } - else - { - LOG_WARN("Invalid map Id: " << id << " for map: " - << name << '.'); - } + maps[id] = new MapComposite(id, name); + if (!maps[id]->readMap()) + LOG_FATAL("Failed to load map \"" << name << "\"!"); } } - - if (loadedMaps > 0) - LOG_INFO(loadedMaps << " valid map file references were loaded."); - - return loadedMaps; } -void MapManager::deinitialize() +/** + * Check the status of recently loaded configuration. + */ +void MapManager::checkStatus() { - for (Maps::iterator i = maps.begin(), i_end = maps.end(); i != i_end; ++i) + int loadedMaps = maps.size(); + if (loadedMaps > 0) { - delete i->second; + LOG_INFO(loadedMaps << " valid map file references were loaded."); + } + else + { + LOG_FATAL("The Game Server can't find any valid/available maps."); + exit(EXIT_MAP_FILE_NOT_FOUND); } - maps.clear(); } MapComposite *MapManager::getMap(int mapId) diff --git a/src/game-server/mapmanager.h b/src/game-server/mapmanager.h index 12cbc342..b1b47591 100644 --- a/src/game-server/mapmanager.h +++ b/src/game-server/mapmanager.h @@ -25,23 +25,24 @@ #include <map> #include <string> +#include "utils/xml.h" + class MapComposite; namespace MapManager { typedef std::map< int, MapComposite * > Maps; - /** - * Loads map reference file and prepares maps. - * @return the number of maps loaded succesfully - */ - int initialize(const std::string &mapReferenceFile); + void initialize(); - /** - * Destroy loaded maps. - */ void deinitialize(); + void reload(); + + void readMapNode(xmlNodePtr node); + + void checkStatus(); + /** * Returns the requested map. * diff --git a/src/game-server/settingsmanager.cpp b/src/game-server/settingsmanager.cpp index 79aade1b..b45ef932 100644 --- a/src/game-server/settingsmanager.cpp +++ b/src/game-server/settingsmanager.cpp @@ -25,6 +25,7 @@ #include "common/resourcemanager.h" +#include "game-server/mapmanager.h" #include "game-server/attributemanager.h" #include "game-server/skillmanager.h" #include "game-server/specialmanager.h" @@ -41,6 +42,7 @@ void SettingsManager::initialize() { // initialize all managers in correct order + MapManager::initialize(); attributeManager->initialize(); skillManager->initialize(); specialManager->initialize(); @@ -61,6 +63,7 @@ void SettingsManager::initialize() */ void SettingsManager::reload() { + MapManager::reload(); attributeManager->reload(); skillManager->reload(); specialManager->reload(); @@ -125,6 +128,11 @@ void SettingsManager::loadFile(const std::string &filename) } } } + else if (xmlStrEqual(childNode->name, BAD_CAST "map")) + { + // map config + MapManager::readMapNode(childNode); + } else if (xmlStrEqual(childNode->name, BAD_CAST "attribute")) { // attribute config @@ -181,6 +189,7 @@ void SettingsManager::loadFile(const std::string &filename) */ void SettingsManager::checkStatus() { + MapManager::checkStatus(); attributeManager->checkStatus(); skillManager->checkStatus(); specialManager->checkStatus(); diff --git a/src/game-server/spawnareacomponent.cpp b/src/game-server/spawnareacomponent.cpp index 54cb017f..33bd5acd 100644 --- a/src/game-server/spawnareacomponent.cpp +++ b/src/game-server/spawnareacomponent.cpp @@ -58,7 +58,6 @@ void SpawnAreaComponent::update(Entity &entity) } // Find a free spawn location. Give up after 10 tries - int triesLeft = 10; Point position; const int x = mZone.x; const int y = mZone.y; @@ -81,6 +80,7 @@ void SpawnAreaComponent::update(Entity &entity) if (being) { + int triesLeft = 10; do { position = Point(x + rand() % width, y + rand() % height); diff --git a/src/game-server/state.cpp b/src/game-server/state.cpp index db224b84..0b97ec07 100644 --- a/src/game-server/state.cpp +++ b/src/game-server/state.cpp @@ -110,7 +110,7 @@ static void serializeLooks(Entity *ch, MessageOut &msg) } } - if (lookChanges.size() > 0) + if (!lookChanges.empty()) { // Number of look changes to send msg.writeInt8(lookChanges.size()); |