From dc054c19aefcc9ca20aa0d4104386886a912a9d7 Mon Sep 17 00:00:00 2001 From: Philipp Sehmisch Date: Fri, 30 Mar 2007 17:27:11 +0000 Subject: Renamed "Controlled" to "Monster" and moved it into the game-server directory. --- src/Makefile.am | 6 +- src/controller.cpp | 89 -------------------- src/controller.h | 66 --------------- src/game-server/monster.cpp | 195 ++++++++++++++++++++++++++++++++++++++++++++ src/game-server/monster.hpp | 149 +++++++++++++++++++++++++++++++++ src/game-server/testing.cpp | 5 +- 6 files changed, 349 insertions(+), 161 deletions(-) create mode 100644 src/game-server/monster.cpp create mode 100644 src/game-server/monster.hpp (limited to 'src') 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 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 -#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); -- cgit v1.2.3-70-g09d2