summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPhilipp Sehmisch <tmw@crushnet.org>2007-03-30 17:27:11 +0000
committerPhilipp Sehmisch <tmw@crushnet.org>2007-03-30 17:27:11 +0000
commitdc054c19aefcc9ca20aa0d4104386886a912a9d7 (patch)
tree4faf4a5bc26ac85d1300ca2f3346d4838807013c /src
parent24dd2d0a7878f3e1e72a4d857a57bd9c7ea5a25e (diff)
downloadmanaserv-dc054c19aefcc9ca20aa0d4104386886a912a9d7.tar.gz
manaserv-dc054c19aefcc9ca20aa0d4104386886a912a9d7.tar.bz2
manaserv-dc054c19aefcc9ca20aa0d4104386886a912a9d7.tar.xz
manaserv-dc054c19aefcc9ca20aa0d4104386886a912a9d7.zip
Renamed "Controlled" to "Monster" and moved it into the game-server directory.
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am6
-rw-r--r--src/controller.cpp89
-rw-r--r--src/controller.h66
-rw-r--r--src/game-server/monster.cpp195
-rw-r--r--src/game-server/monster.hpp149
-rw-r--r--src/game-server/testing.cpp5
6 files changed, 349 insertions, 161 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 3298bdf0..c8a9037f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -70,8 +70,6 @@ tmwserv_game_SOURCES = \
abstractcharacterdata.cpp \
configuration.h \
configuration.cpp \
- controller.h \
- controller.cpp \
defines.h \
point.h \
resourcemanager.h \
@@ -102,6 +100,8 @@ tmwserv_game_SOURCES = \
game-server/mapmanager.cpp \
game-server/mapreader.hpp \
game-server/mapreader.cpp \
+ game-server/monster.hpp \
+ game-server/monster.cpp \
game-server/object.hpp \
game-server/object.cpp \
game-server/state.hpp \
@@ -170,4 +170,4 @@ bindings_wrap.cpp: bindings.i
$(SWIG) $(SWIGFLAGS) -o bindings_wrap.cpp bindings.i
tmwserv_game_SOURCES += \
bindings_wrap.cpp
-endif
+endif \ No newline at end of file
diff --git a/src/controller.cpp b/src/controller.cpp
index 1b8313d1..e69de29b 100644
--- a/src/controller.cpp
+++ b/src/controller.cpp
@@ -1,89 +0,0 @@
-/*
- * The Mana World Server
- * Copyright 2004 The Mana World Development Team
- *
- * This file is part of The Mana World.
- *
- * The Mana World is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or any later version.
- *
- * The Mana World is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with The Mana World; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id$
- */
-
-#include "controller.h"
-
-#include "utils/logger.h"
-
-Controlled::Controlled(int type):
- Being(type, 65535),
- mCountDown(0)
-{
- mAttributes.resize(NB_ATTRIBUTES_CONTROLLED, 1); // TODO: fill with the real attributes
-}
-
-void Controlled::update()
-{
- /* Temporary "AI" behaviour that is purely artificial and not at all
- * intelligent.
- */
- if (mCountDown == 0)
- {
- if (mAction != DEAD)
- {
- Point randomPos( rand() % 320 + 720,
- rand() % 320 + 840 );
- setDestination(randomPos);
- mCountDown = 10 + rand() % 10;
-
- LOG_DEBUG("Setting new random destination " << randomPos.x << ","
- << randomPos.y << " for being " << getPublicID());
- }
- else
- {
- raiseUpdateFlags(UPDATEFLAG_REMOVE);
- }
- }
- else
- {
- mCountDown--;
- }
-}
-
-void Controlled::die()
-{
- mCountDown = 50; //sets remove time to 5 seconds
- Being::die();
-}
-
-WeaponStats Controlled::getWeaponStats()
-{
-
- WeaponStats weaponStats;
-
- /*
- * TODO: This should all be set by the monster database
- */
- weaponStats.piercing = 1;
- weaponStats.element = ELEMENT_NEUTRAL;
- weaponStats.skill = MONSTER_SKILL_WEAPON;
-
- return weaponStats;
-}
-
-void Controlled::calculateDerivedAttributes()
-{
- Being::calculateDerivedAttributes();
- /*
- * Do any monster specific attribute calculation here
- */
-}
diff --git a/src/controller.h b/src/controller.h
index 327faa5f..e69de29b 100644
--- a/src/controller.h
+++ b/src/controller.h
@@ -1,66 +0,0 @@
-/*
- * The Mana World Server
- * Copyright 2004 The Mana World Development Team
- *
- * This file is part of The Mana World.
- *
- * The Mana World is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or any later version.
- *
- * The Mana World is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with The Mana World; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id$
- */
-
-#ifndef _TMWSERV_CONTROLLER_H_
-#define _TMWSERV_CONTROLLER_H_
-
-#include "game-server/being.hpp"
-
-/**
- * A controller can take control of a being.
- */
-class Controlled: public Being
-{
- public:
- /**
- * Constructor.
- */
- Controlled(int type);
-
- /**
- * Performs one step of controller logic.
- */
- void update();
-
- /**
- * Kills the being
- */
- virtual void die();
-
- protected:
- /**
- * Gets the stats of the currently equipped weapon that are relevant
- * for damage calculation
- */
- virtual WeaponStats getWeaponStats();
-
- /**
- * Calculates all derived attributes
- */
- void calculateDerivedAttributes();
-
- private:
- /** Count down till next random movement (temporary). */
- unsigned int mCountDown;
-};
-
-#endif // _TMWSERV_CONTROLLER_H_
diff --git a/src/game-server/monster.cpp b/src/game-server/monster.cpp
new file mode 100644
index 00000000..9d75e6fa
--- /dev/null
+++ b/src/game-server/monster.cpp
@@ -0,0 +1,195 @@
+/*
+ * The Mana World Server
+ * Copyright 2004 The Mana World Development Team
+ *
+ * This file is part of The Mana World.
+ *
+ * The Mana World is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or any later version.
+ *
+ * The Mana World is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with The Mana World; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id: controller.cpp 3191 2007-03-15 23:47:13Z crush_tmw $
+ */
+
+#include "game-server/monster.hpp"
+
+#include "utils/logger.h"
+
+Monster::Monster():
+ Being(OBJECT_MONSTER, 65535),
+ mCountDown(0)
+{
+ mAttributes.resize(NB_ATTRIBUTES_CONTROLLED, 1); // TODO: fill with the real attributes
+}
+
+void Monster::update()
+{
+ /* Temporary "AI" behaviour that is purely artificial and not at all
+ * intelligent.
+ */
+ if (mCountDown == 0)
+ {
+ if (mAction != DEAD)
+ {
+ Point randomPos( rand() % 320 + 720,
+ rand() % 320 + 840 );
+ setDestination(randomPos);
+ mCountDown = 10 + rand() % 10;
+
+ LOG_DEBUG("Setting new random destination " << randomPos.x << ","
+ << randomPos.y << " for being " << getPublicID());
+ }
+ else
+ {
+ raiseUpdateFlags(UPDATEFLAG_REMOVE);
+ }
+ }
+ else
+ {
+ mCountDown--;
+ }
+}
+
+void Monster::die()
+{
+ mCountDown = 50; //sets remove time to 5 seconds
+ Being::die();
+}
+
+WeaponStats Monster::getWeaponStats()
+{
+
+ WeaponStats weaponStats;
+
+ /*
+ * TODO: This should all be set by the monster database
+ */
+ weaponStats.piercing = 1;
+ weaponStats.element = ELEMENT_NEUTRAL;
+ weaponStats.skill = MONSTER_SKILL_WEAPON;
+
+ return weaponStats;
+}
+
+void Monster::calculateDerivedAttributes()
+{
+ Being::calculateDerivedAttributes();
+ /*
+ * Do any monster specific attribute calculation here
+ */
+}
+/*
+ * The Mana World Server
+ * Copyright 2004 The Mana World Development Team
+ *
+ * This file is part of The Mana World.
+ *
+ * The Mana World is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or any later version.
+ *
+ * The Mana World is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with The Mana World; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id: controller.cpp 3191 2007-03-15 23:47:13Z crush_tmw $
+ */
+
+#include "game-server/monster.hpp"
+
+#include "utils/logger.h"
+
+extern int worldTime;
+
+Monster::Monster():
+ Being(OBJECT_MONSTER, 65535),
+ mCountDown(0)
+{
+ mAttributes.resize(NB_ATTRIBUTES_CONTROLLED, 1); // TODO: fill with the real attributes
+}
+
+void Monster::update()
+{
+ /* Temporary "AI" behaviour that is purely artificial and not at all
+ * intelligent.
+ */
+ if (mCountDown == 0)
+ {
+ if (mAction != DEAD)
+ {
+ Point randomPos( rand() % 320 + 720,
+ rand() % 320 + 840 );
+ setDestination(randomPos);
+ mCountDown = 10 + rand() % 10;
+
+ LOG_DEBUG("Setting new random destination " << randomPos.x << ","
+ << randomPos.y << " for being " << getPublicID());
+ }
+ else
+ {
+ raiseUpdateFlags(UPDATEFLAG_REMOVE);
+ }
+ }
+ else
+ {
+ mCountDown--;
+ }
+}
+
+int Monster::damage(Damage damage)
+{
+ int damageValue = Being::damage(damage);
+
+ BattleLogEntry newEntry;
+
+ newEntry.timestamp = worldTime;
+ newEntry.attacker = damage.source;
+ newEntry.skill = damage.skill;
+ newEntry.value = damageValue;
+ battleLog.push_back(newEntry);
+
+ return damageValue;
+};
+
+void Monster::die()
+{
+ mCountDown = 50; //sets remove time to 5 seconds
+ Being::die();
+}
+
+WeaponStats Monster::getWeaponStats()
+{
+
+ WeaponStats weaponStats;
+
+ /*
+ * TODO: This should all be set by the monster database
+ */
+ weaponStats.piercing = 1;
+ weaponStats.element = ELEMENT_NEUTRAL;
+ weaponStats.skill = MONSTER_SKILL_WEAPON;
+
+ return weaponStats;
+}
+
+void Monster::calculateDerivedAttributes()
+{
+ Being::calculateDerivedAttributes();
+ /*
+ * Do any monster specific attribute calculation here
+ */
+}
diff --git a/src/game-server/monster.hpp b/src/game-server/monster.hpp
new file mode 100644
index 00000000..cc8df0bc
--- /dev/null
+++ b/src/game-server/monster.hpp
@@ -0,0 +1,149 @@
+/*
+ * The Mana World Server
+ * Copyright 2004 The Mana World Development Team
+ *
+ * This file is part of The Mana World.
+ *
+ * The Mana World is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or any later version.
+ *
+ * The Mana World is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with The Mana World; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id: controller.h 3191 2007-03-15 23:47:13Z crush_tmw $
+ */
+
+#ifndef _TMWSERV_CONTROLLER_H_
+#define _TMWSERV_CONTROLLER_H_
+
+#include "game-server/being.hpp"
+
+/**
+ * The class for a fightable monster with its own AI
+ */
+class Monster: public Being
+{
+ public:
+ /**
+ * Constructor.
+ */
+ Monster();
+
+ /**
+ * Performs one step of controller logic.
+ */
+ void update();
+
+ /**
+ * Kills the being
+ */
+ virtual void die();
+
+ protected:
+ /**
+ * Gets the stats of the currently equipped weapon that are relevant
+ * for damage calculation
+ */
+ virtual WeaponStats getWeaponStats();
+
+ /**
+ * Calculates all derived attributes
+ */
+ void calculateDerivedAttributes();
+
+ private:
+ /** Count down till next random movement (temporary). */
+ unsigned int mCountDown;
+};
+
+#endif // _TMWSERV_CONTROLLER_H_
+/*
+ * The Mana World Server
+ * Copyright 2004 The Mana World Development Team
+ *
+ * This file is part of The Mana World.
+ *
+ * The Mana World is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or any later version.
+ *
+ * The Mana World is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with The Mana World; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id: controller.h 3191 2007-03-15 23:47:13Z crush_tmw $
+ */
+
+#ifndef _TMWSERV_CONTROLLER_H_
+#define _TMWSERV_CONTROLLER_H_
+
+#include "game-server/being.hpp"
+
+#include "utils/safeptr.hpp"
+
+/**
+ * The class for a fightable monster with its own AI
+ */
+class Monster: public Being
+{
+ public:
+ /**
+ * Constructor.
+ */
+ Monster();
+
+ /**
+ * Performs one step of controller logic.
+ */
+ void update();
+
+ /**
+ * Kills the being
+ */
+ virtual void die();
+
+ /**
+ *
+ */
+ virtual int damage(Damage);
+
+ protected:
+ /**
+ * Gets the stats of the currently equipped weapon that are relevant
+ * for damage calculation
+ */
+ virtual WeaponStats getWeaponStats();
+
+ /**
+ * Calculates all derived attributes
+ */
+ void calculateDerivedAttributes();
+
+ private:
+ /** Count down till next random movement (temporary). */
+ unsigned int mCountDown;
+
+ /** List of targets and how much priority they have */
+ struct BattleLogEntry
+ {
+ int timestamp;
+ SafePtr attacker;
+ int skill;
+ int value;
+ };
+ std::list<BattleLogEntry> battleLog;
+};
+
+#endif // _TMWSERV_CONTROLLER_H_
diff --git a/src/game-server/testing.cpp b/src/game-server/testing.cpp
index 7243793a..5db3557c 100644
--- a/src/game-server/testing.cpp
+++ b/src/game-server/testing.cpp
@@ -4,9 +4,8 @@
#include <cassert>
-#include "controller.h"
-
#include "defines.h"
+#include "game-server/monster.hpp"
#include "game-server/itemmanager.hpp"
#include "game-server/state.hpp"
#include "game-server/trigger.hpp"
@@ -36,7 +35,7 @@ void testingMap(int id)
gameState->insert(new TriggerArea(1, rectA, &warpA));
for (int i = 0; i < 10; i++)
{
- Being *being = new Controlled(OBJECT_MONSTER);
+ Being *being = new Monster();
being->setSpeed(150);
being->setSize(8);