summaryrefslogtreecommitdiff
path: root/src/game-server/being.hpp
diff options
context:
space:
mode:
authorGuillaume Melquiond <guillaume.melquiond@gmail.com>2007-01-03 17:10:43 +0000
committerGuillaume Melquiond <guillaume.melquiond@gmail.com>2007-01-03 17:10:43 +0000
commit1673de8b5553f6dcd4898c84b8d44ba8b30740f1 (patch)
tree3dcc47461a6b4914c4e81492e7be885c3a1502ea /src/game-server/being.hpp
parent6b7441516002d6e7cca424416bb67c6bc7d7c9d2 (diff)
downloadmanaserv-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.hpp214
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_