diff options
author | Guillaume Melquiond <guillaume.melquiond@gmail.com> | 2007-01-03 17:10:43 +0000 |
---|---|---|
committer | Guillaume Melquiond <guillaume.melquiond@gmail.com> | 2007-01-03 17:10:43 +0000 |
commit | 1673de8b5553f6dcd4898c84b8d44ba8b30740f1 (patch) | |
tree | 3dcc47461a6b4914c4e81492e7be885c3a1502ea /src/game-server/being.hpp | |
parent | 6b7441516002d6e7cca424416bb67c6bc7d7c9d2 (diff) | |
download | manaserv-1673de8b5553f6dcd4898c84b8d44ba8b30740f1.tar.gz manaserv-1673de8b5553f6dcd4898c84b8d44ba8b30740f1.tar.bz2 manaserv-1673de8b5553f6dcd4898c84b8d44ba8b30740f1.tar.xz manaserv-1673de8b5553f6dcd4898c84b8d44ba8b30740f1.zip |
Split persistent player data from game server data. Enabled inventory code back.
Diffstat (limited to 'src/game-server/being.hpp')
-rw-r--r-- | src/game-server/being.hpp | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/src/game-server/being.hpp b/src/game-server/being.hpp new file mode 100644 index 00000000..32b30b1e --- /dev/null +++ b/src/game-server/being.hpp @@ -0,0 +1,214 @@ +/* + * 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_BEING_H_ +#define _TMWSERV_BEING_H_ + +#include <list> +#include <string> +#include <vector> + +#include "defines.h" +#include "game-server/object.hpp" +#include "utils/countedptr.h" + +class MapComposite; + +/** + * Element attribute for beings, actors and items. + */ +enum +{ + ELEMENT_NEUTRAL = 0, + ELEMENT_FIRE, + ELEMENT_WATER, + ELEMENT_EARTH, + ELEMENT_AIR, + ELEMENT_SACRED, + ELEMENT_DEATH +}; + +/** + * States attribute for beings, and actors. + * States can be multiple for the same being. + */ +struct BeingState +{ + bool STATE_NORMAL; + bool STATE_POISONED; + bool STATE_STONED; + bool STATE_STUNNED; + bool STATE_SLOWED; + bool STATE_TIRED; + bool STATE_MAD; + bool STATE_BERSERK; + bool STATE_HASTED; + bool STATE_FLOATING; +}; + +/** + * Moves enum for beings and actors for others players vision. + */ +enum +{ + ACTION_DEFAULT = 0, + ACTION_STAND, + ACTION_WALK, + ACTION_RUN, + ACTION_JUMP, + ACTION_CRAWL, + ACTION_ATTACK, + ACTION_ATTACK_SWING, + ACTION_ATTACK_STAB, + ACTION_ATTACK_BOW, + ACTION_ATTACK_THROW, + ACTION_CAST_MAGIC, + ACTION_USE_ITEM, + ACTION_SIT, + ACTION_SLEEP, + ACTION_HURT, + ACTION_DEAD, + ACTION_INVALID +}; + +/** + * Beings and actors directions + */ +enum +{ + DIRECTION_DOWN = 1, + DIRECTION_UP, + DIRECTION_LEFT, + DIRECTION_RIGHT +}; + + +/** + * Computed statistics of a Being. + */ +enum +{ + STAT_HEAT = 0, + STAT_ATTACK, + STAT_DEFENCE, + STAT_MAGIC, + STAT_ACCURACY, + STAT_SPEED, + NB_CSTAT +}; + +/** + * Structure type for the computed statistics of a Being. + */ +struct Statistics +{ + unsigned short stats[NB_CSTAT]; +}; + +/** + * Placeholder for a more complex damage structure + */ +typedef unsigned short Damage; + +/** + * Type definition for a list of hits + */ +typedef std::list<unsigned int> Hits; + +/** + * Generic Being (living object). + * Used for players & monsters (all animated objects). + */ +class Being : public MovingObject +{ + public: + /** + * Proxy constructor. + */ + Being(int type, int id) + : MovingObject(type, id) + {} + + /** + * Sets a computed statistic. + * + * @param numStat the statistic number. + * @param value the new value. + */ + void setStat(int numStat, unsigned short value) + { mStats.stats[numStat] = value; } + + /** + * Gets a computed statistic. + * + * @param numStat the statistic number. + * @return the statistic value. + */ + unsigned short getStat(int numStat) + { return mStats.stats[numStat]; } + + /** + * Takes a damage structure, computes the real damage based on the + * stats, deducts the result from the hitpoints and adds the result to + * the HitsTaken list. + */ + void damage(Damage); + + /** + * Gets the damage list. + */ + Hits const &getHitsTaken() const + { return mHitsTaken; } + + /** + * Clears the damage list. + */ + void clearHitsTaken() + { mHitsTaken.clear(); } + + /** + * Performs an attack. + */ + void performAttack(MapComposite *); + + private: + Being(Being const &rhs); + Being &operator=(Being const &rhs); + + Statistics mStats; /**< stats modifiers or computed stats */ + + int mHitpoints; /**< Hitpoints of the being */ + + Hits mHitsTaken; /**< List of punches taken since last update */ +}; + +/** + * Type definition for a smart pointer to Being. + */ +typedef utils::CountedPtr<Being> BeingPtr; + +/** + * Type definition for a list of Beings. + */ +typedef std::vector<BeingPtr> Beings; + +#endif // _TMWSERV_BEING_H_ |