summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game-server/monster.cpp17
-rw-r--r--src/game-server/monster.hpp13
-rw-r--r--src/game-server/monstermanager.cpp6
3 files changed, 33 insertions, 3 deletions
diff --git a/src/game-server/monster.cpp b/src/game-server/monster.cpp
index f7d2bac6..1cb6806b 100644
--- a/src/game-server/monster.cpp
+++ b/src/game-server/monster.cpp
@@ -93,6 +93,9 @@ Monster::Monster(MonsterClass *specy):
mAttackPositions.push_back(AttackPosition(-dist, 0, DIRECTION_RIGHT));
mAttackPositions.push_back(AttackPosition(0, dist, DIRECTION_DOWN));
mAttackPositions.push_back(AttackPosition(0, -dist, DIRECTION_UP));
+
+ //load default script
+ loadScript(specy->getScript());
}
Monster::~Monster()
@@ -293,7 +296,19 @@ void Monster::update()
void Monster::loadScript(std::string &scriptName)
{
if (mScript)
- return; // A script has already been loaded for this monster
+ {
+ delete mScript;// A script has already been loaded for this monster
+ }
+
+ if (scriptName.length() == 0)
+ {
+ if (mScript)
+ {
+ delete mScript;
+ mScript = NULL;
+ }
+ return;
+ }
std::stringstream filename;
filename << "scripts/monster/" << scriptName;
diff --git a/src/game-server/monster.hpp b/src/game-server/monster.hpp
index 8dc2102b..d99f77d3 100644
--- a/src/game-server/monster.hpp
+++ b/src/game-server/monster.hpp
@@ -76,7 +76,8 @@ class MonsterClass
mTrackRange(1),
mStrollRange(0),
mMutation(0),
- mAttackDistance(0)
+ mAttackDistance(0),
+ mScript("")
{}
/**
@@ -163,6 +164,12 @@ class MonsterClass
/** Returns all attacks of the monster. */
const MonsterAttacks &getAttacks() const { return mAttacks; }
+ /** sets the script file for the monster */
+ void setScript(std::string& filename) { mScript = filename; }
+
+ /** Returns script filename */
+ std::string &getScript() { return mScript; }
+
/**
* Randomly selects a monster drop (may return NULL).
*/
@@ -182,6 +189,7 @@ class MonsterClass
unsigned mMutation;
unsigned mAttackDistance;
MonsterAttacks mAttacks;
+ std::string mScript;
};
/**
@@ -284,7 +292,8 @@ class Monster : public Being
MonsterClass *mSpecy;
/**
- * Stores script for the monster, null if no script exist
+ * Stores individual script for the monster, when NULL the script
+ * from mSpecy is used.
*/
Script *mScript;
diff --git a/src/game-server/monstermanager.cpp b/src/game-server/monstermanager.cpp
index 426a2249..080dcbfc 100644
--- a/src/game-server/monstermanager.cpp
+++ b/src/game-server/monstermanager.cpp
@@ -259,6 +259,12 @@ void MonsterManager::reload()
}
}
+ else if (xmlStrEqual(subnode->name, BAD_CAST "script"))
+ {
+ xmlChar *filename = subnode->xmlChildrenNode->content;
+ std::string val = (char *)filename;
+ monster->setScript(val);
+ }
}
monster->setDrops(drops);