summaryrefslogtreecommitdiff
path: root/src/game-server
diff options
context:
space:
mode:
Diffstat (limited to 'src/game-server')
-rw-r--r--src/game-server/attribute.cpp2
-rw-r--r--src/game-server/attribute.h2
-rw-r--r--src/game-server/being.cpp15
-rw-r--r--src/game-server/commandhandler.cpp23
-rw-r--r--src/game-server/main-game.cpp5
-rw-r--r--src/game-server/mapmanager.cpp121
-rw-r--r--src/game-server/mapmanager.h17
-rw-r--r--src/game-server/settingsmanager.cpp9
-rw-r--r--src/game-server/spawnareacomponent.cpp2
-rw-r--r--src/game-server/state.cpp2
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());