diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game-server/mapcomposite.cpp | 57 | ||||
-rw-r--r-- | src/game-server/mapcomposite.h | 4 |
2 files changed, 41 insertions, 20 deletions
diff --git a/src/game-server/mapcomposite.cpp b/src/game-server/mapcomposite.cpp index d684fd70..cdea12a8 100644 --- a/src/game-server/mapcomposite.cpp +++ b/src/game-server/mapcomposite.cpp @@ -500,6 +500,8 @@ bool MapComposite::activate() else mPvPRules = PVP_NONE; + mActive = true; + if (!mInitializeCallback.isValid()) { LOG_WARN("No callback for map initialization found"); @@ -512,8 +514,6 @@ bool MapComposite::activate() s->execute(); } - mActive = true; - return true; } @@ -729,6 +729,28 @@ void MapComposite::callWorldVariableCallback(const std::string &key, } /** + * Finds a map object by its name and type. + * Name and type are case insensitive. + */ +const MapObject *MapComposite::findMapObject(const std::string &name, + const std::string &type) const +{ + const std::vector<MapObject *> &destObjects = mMap->getObjects(); + std::vector<MapObject *>::const_iterator it, it_end; + for (it = destObjects.begin(), it_end = destObjects.end(); + it != it_end; ++it) + { + const MapObject *obj = *it; + if (utils::compareStrI(obj->getType(), type) == 0 && + utils::compareStrI(obj->getName(), name) == 0) + { + return obj; + } + } + return 0; // nothing found +} + +/** * Initializes the map content. This creates the warps, spawn areas, npcs and * other scripts. */ @@ -754,24 +776,19 @@ void MapComposite::initializeContent() if (destMap && !destMapObjectName.empty()) { - const std::vector<MapObject *> &destObjects = - destMap->getMap()->getObjects(); - - std::vector<MapObject *>::const_iterator it, it_end; - for (it = destObjects.begin(), it_end = destObjects.end(); - it != it_end; ++it) + const MapObject *obj = + destMap->findMapObject(destMapObjectName, "WARP"); + if (obj) + { + const Rectangle &rect = obj->getBounds(); + destX = rect.x + rect.w / 2; + destY = rect.y + rect.h / 2; + } + else { - const MapObject *destObject = *it; - if (utils::compareStrI(destObject->getType(), - "WARP_DEST") == 0 && - utils::compareStrI(destObject->getName(), - destMapObjectName) == 0) - { - const Rectangle &rect = destObject->getBounds(); - destX = rect.x + rect.w / 2; - destY = rect.y + rect.h / 2; - break; - } + LOG_ERROR("Warp target \"" << destMapObjectName << "\" " + << "was not found on the map " + << destMap->getName()); } } else @@ -789,7 +806,7 @@ void MapComposite::initializeContent() } else { - LOG_WARN("Unrecognized warp format"); + LOG_WARN("Unrecognized warp format on map " << mName); } } else if (utils::compareStrI(type, "SPAWN") == 0) diff --git a/src/game-server/mapcomposite.h b/src/game-server/mapcomposite.h index d61f8ce6..ba76ddc8 100644 --- a/src/game-server/mapcomposite.h +++ b/src/game-server/mapcomposite.h @@ -27,6 +27,7 @@ #include <map> #include "scripting/script.h" +#include "game-server/map.h" class Actor; class Being; @@ -361,6 +362,9 @@ class MapComposite static void setUpdateCallback(Script *script) { script->assignCallback(mUpdateCallback); } + const MapObject *findMapObject(const std::string &name, + const std::string &type) const; + private: MapComposite(const MapComposite &); |