summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game-server/mapcomposite.cpp57
-rw-r--r--src/game-server/mapcomposite.h4
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 &);