summaryrefslogtreecommitdiff
path: root/src/localplayer.h
diff options
context:
space:
mode:
authorBjørn Lindeijer <bjorn@lindeijer.nl>2009-03-22 19:45:03 +0100
committerBjørn Lindeijer <bjorn@lindeijer.nl>2009-03-22 19:45:56 +0100
commit0c43d04b438d41c277ae80402d4b4888db1a0b64 (patch)
tree3aaeb75ecd1bcbe85decedab5f1fa426fe0411e3 /src/localplayer.h
parenta7f5eaeb7f643658d356533a608f0f18d85b6d32 (diff)
parent401802c1d7a1b3d659bdc53a45d9a6292fc1121e (diff)
downloadmana-0c43d04b438d41c277ae80402d4b4888db1a0b64.tar.gz
mana-0c43d04b438d41c277ae80402d4b4888db1a0b64.tar.bz2
mana-0c43d04b438d41c277ae80402d4b4888db1a0b64.tar.xz
mana-0c43d04b438d41c277ae80402d4b4888db1a0b64.zip
Merged the tmwserv client with the eAthena client
This merge involved major changes on both sides, and as such took several weeks. Lots of things are expected to be broken now, however, we now have a single code base to improve and extend, which can be compiled to support either eAthena or tmwserv. In the coming months, the plan is to work towards a client that supports both eAthena and tmwserv, without needing to be recompiled. Conflicts: Everywhere!
Diffstat (limited to 'src/localplayer.h')
-rw-r--r--src/localplayer.h313
1 files changed, 303 insertions, 10 deletions
diff --git a/src/localplayer.h b/src/localplayer.h
index 5f02de4f..7ced3fdf 100644
--- a/src/localplayer.h
+++ b/src/localplayer.h
@@ -27,11 +27,15 @@
#include "player.h"
+#ifdef EATHENA_SUPPORT
// TODO move into some sane place...
#define MAX_SLOT 2
#define INVENTORY_SIZE 102
#define STORAGE_SIZE 301
+#else
+#define INVENTORY_SIZE 50
+#endif
class Equipment;
class FloorItem;
@@ -39,7 +43,96 @@ class ImageSet;
class Inventory;
class Item;
class Map;
+#ifdef EATHENA_SUPPORT
class Network;
+#endif
+
+#ifdef TMWSERV_SUPPORT
+
+/**
+ * Attributes used during combat. Available to all the beings.
+ */
+enum
+{
+BASE_ATTR_BEGIN = 0,
+ BASE_ATTR_PHY_ATK_MIN = BASE_ATTR_BEGIN,
+ BASE_ATTR_PHY_ATK_DELTA,
+ /**< Physical attack power. */
+ BASE_ATTR_MAG_ATK, /**< Magical attack power. */
+ BASE_ATTR_PHY_RES, /**< Resistance to physical damage. */
+ BASE_ATTR_MAG_RES, /**< Resistance to magical damage. */
+ BASE_ATTR_EVADE, /**< Ability to avoid hits. */
+ BASE_ATTR_HIT, /**< Ability to hit stuff. */
+ BASE_ATTR_HP, /**< Hit Points (Base value: maximum, Modded value: current) */
+ BASE_ATTR_HP_REGEN,/**< number of HP regenerated every 10 game ticks */
+ BASE_ATTR_END,
+ BASE_ATTR_NB = BASE_ATTR_END - BASE_ATTR_BEGIN,
+
+ BASE_ELEM_BEGIN = BASE_ATTR_END,
+ BASE_ELEM_NEUTRAL = BASE_ELEM_BEGIN,
+ BASE_ELEM_FIRE,
+ BASE_ELEM_WATER,
+ BASE_ELEM_EARTH,
+ BASE_ELEM_AIR,
+ BASE_ELEM_SACRED,
+ BASE_ELEM_DEATH,
+ BASE_ELEM_END,
+ BASE_ELEM_NB = BASE_ELEM_END - BASE_ELEM_BEGIN,
+
+ NB_BEING_ATTRIBUTES = BASE_ELEM_END
+};
+
+/**
+ * Attributes of characters. Used to derive being attributes.
+ */
+enum
+{
+ CHAR_ATTR_BEGIN = NB_BEING_ATTRIBUTES,
+ CHAR_ATTR_STRENGTH = CHAR_ATTR_BEGIN,
+ CHAR_ATTR_AGILITY,
+ CHAR_ATTR_DEXTERITY,
+ CHAR_ATTR_VITALITY,
+ CHAR_ATTR_INTELLIGENCE,
+ CHAR_ATTR_WILLPOWER,
+ CHAR_ATTR_END,
+ CHAR_ATTR_NB = CHAR_ATTR_END - CHAR_ATTR_BEGIN,
+
+ CHAR_SKILL_BEGIN = CHAR_ATTR_END,
+
+ CHAR_SKILL_WEAPON_BEGIN = CHAR_SKILL_BEGIN,
+ CHAR_SKILL_WEAPON_NONE = CHAR_SKILL_WEAPON_BEGIN,
+ CHAR_SKILL_WEAPON_KNIFE,
+ CHAR_SKILL_WEAPON_SWORD,
+ CHAR_SKILL_WEAPON_POLEARM,
+ CHAR_SKILL_WEAPON_STAFF,
+ CHAR_SKILL_WEAPON_WHIP,
+ CHAR_SKILL_WEAPON_BOW,
+ CHAR_SKILL_WEAPON_SHOOTING,
+ CHAR_SKILL_WEAPON_MACE,
+ CHAR_SKILL_WEAPON_AXE,
+ CHAR_SKILL_WEAPON_THROWN,
+ CHAR_SKILL_WEAPON_END,
+ CHAR_SKILL_WEAPON_NB = CHAR_SKILL_WEAPON_END - CHAR_SKILL_WEAPON_BEGIN,
+
+ CHAR_SKILL_MAGIC_BEGIN = CHAR_SKILL_WEAPON_END,
+ CHAR_SKILL_MAGIC_IAMJUSTAPLACEHOLDER = CHAR_SKILL_MAGIC_BEGIN,
+ // add magic skills here
+ CHAR_SKILL_MAGIC_END,
+ CHAR_SKILL_MAGIC_NB = CHAR_SKILL_MAGIC_END - CHAR_SKILL_MAGIC_BEGIN,
+
+ CHAR_SKILL_CRAFT_BEGIN = CHAR_SKILL_MAGIC_END,
+ CHAR_SKILL_CRAFT_IAMJUSTAPLACEHOLDER = CHAR_SKILL_CRAFT_BEGIN,
+ // add crafting skills here
+ CHAR_SKILL_CRAFT_END,
+ CHAR_SKILL_CRAFT_NB = CHAR_SKILL_CRAFT_END - CHAR_SKILL_CRAFT_BEGIN,
+
+ CHAR_SKILL_END = CHAR_SKILL_CRAFT_END,
+ CHAR_SKILL_NB = CHAR_SKILL_END - CHAR_SKILL_BEGIN,
+
+ NB_CHARACTER_ATTRIBUTES = CHAR_SKILL_END
+};
+
+#endif
/**
* The local player character.
@@ -49,13 +142,21 @@ class LocalPlayer : public Player
public:
enum Attribute
{
+#ifdef TMWSERV_SUPPORT
+ STR = 0, AGI, DEX, VIT, INT, WIL, CHR
+#else
STR = 0, AGI, VIT, INT, DEX, LUK
+#endif
};
/**
* Constructor.
*/
+#ifdef TMWSERV_SUPPORT
+ LocalPlayer();
+#else
LocalPlayer(Uint32 id, Uint16 job, Map *map);
+#endif
/**
* Destructor.
@@ -63,8 +164,11 @@ class LocalPlayer : public Player
~LocalPlayer();
virtual void setName(const std::string &name);
+
+#ifdef EATHENA_SUPPORT
void setNetwork(Network *network) { mNetwork = network; }
Network *getNetwork() {return mNetwork; }
+#endif
virtual void logic();
/**
@@ -78,10 +182,37 @@ class LocalPlayer : public Player
*/
Inventory* getInventory() const { return mInventory; }
+#ifdef EATHENA_SUPPORT
/**
* Returns the player's storage
*/
Inventory* getStorage() const { return mStorage; }
+#endif
+
+#ifdef TMWSERV_SUPPORT
+ /**
+ * Check the player has permission to invite users to specific guild
+ */
+ bool checkInviteRights(const std::string &guildName);
+
+ /**
+ * Invite a player to join guild
+ */
+ void inviteToGuild(Being *being);
+
+ /**
+ * Invite a player to join their party
+ */
+ void inviteToParty(const std::string &name);
+
+ void clearInventory();
+ void setInvItem(int index, int id, int amount);
+#endif
+
+ /**
+ * Move the Inventory item from the old slot to the new slot.
+ */
+ void moveInvItem(Item *item, int newIndex);
/**
* Equips an item.
@@ -91,21 +222,37 @@ class LocalPlayer : public Player
/**
* Unequips an item.
*/
+#ifdef TMWSERV_SUPPORT
+ void unequipItem(int slot);
+#else
void unequipItem(Item *item);
+#endif
+#ifdef TMWSERV_SUPPORT
+ void useItem(int slot);
+#else
void useItem(Item *item);
+#endif
+
void dropItem(Item *item, int quantity);
+
+#ifdef TMWSERV_SUPPORT
+ void splitItem(Item *item, int quantity);
+#endif
+
void pickUp(FloorItem *item);
+#ifdef EATHENA_SUPPORT
/**
* Sets the attack range.
*/
void setAttackRange(int range) { mAttackRange = range; }
+#endif
/**
* Gets the attack range.
*/
- int getAttackRange() const { return mAttackRange; }
+ int getAttackRange();
/**
* Sents a trade request to the given being.
@@ -129,7 +276,12 @@ class LocalPlayer : public Player
*/
void setTrading(bool trading) { mTrading = trading; }
+#ifdef TMWSERV_SUPPORT
+ void attack();
+ void useSpecial(int id);
+#else
void attack(Being *target = NULL, bool keep = false);
+#endif
/**
* Triggers whether or not to show the name as a GM name.
@@ -139,7 +291,9 @@ class LocalPlayer : public Player
*/
virtual void setGM();
+#ifdef EATHENA_SUPPORT
void stopAttack();
+#endif
/**
* Overridden to do nothing. The attacks of the local player are
@@ -150,6 +304,7 @@ class LocalPlayer : public Player
* @param damage The amount of damage dealt (0 means miss).
*/
virtual void handleAttack(Being *victim, int damage) {}
+ virtual void handleAttack() {}
/**
* Returns the current target of the player. Returns 0 if no being is
@@ -157,6 +312,7 @@ class LocalPlayer : public Player
*/
Being* getTarget() const;
+
/**
* Sets the target being of the player.
*/
@@ -165,7 +321,11 @@ class LocalPlayer : public Player
/**
* Sets a new destination for this being to walk to.
*/
+#ifdef TMWSERV_SUPPORT
+ void setDestination(int x, int y);
+#else
virtual void setDestination(Uint16 x, Uint16 y);
+#endif
/**
* Sets a new direction to keep walking in.
@@ -173,6 +333,12 @@ class LocalPlayer : public Player
void setWalkingDir(int dir);
/**
+ * Gets the walking direction
+ */
+ int getWalkingDir() const
+ { return mWalkingDir; }
+
+ /**
* Sets going to being to attack
*/
void setGotoTarget(Being *target);
@@ -182,14 +348,33 @@ class LocalPlayer : public Player
*/
bool withinAttackRange(Being *target);
+#ifdef EATHENA_SUPPORT
void raiseAttribute(Attribute attr);
void raiseSkill(Uint16 skillId);
+#else
+
+ /**
+ * Stops the player dead in his tracks
+ */
+ void stopWalking(bool sendToServer = true);
+
+ /**
+ * Uses a character point to raise an attribute
+ */
+ void raiseAttribute(size_t attr);
+
+ /**
+ * Uses a correction point to lower an attribute
+ */
+ void lowerAttribute(size_t attr);
+#endif
void toggleSit();
void emote(Uint8 emotion);
void revive();
+#ifdef EATHENA_SUPPORT
/**
* Accessors for mInStorage
*/
@@ -210,16 +395,12 @@ class LocalPlayer : public Player
Uint32 mCharId; /**< Used only during character selection. */
Uint32 mJobXp;
- Uint16 mLevel;
Uint32 mJobLevel;
Uint32 mXpForNextLevel, mJobXpForNextLevel;
- Uint16 mHp, mMaxHp, mMp, mMaxMp;
- Uint32 mGp;
+ Uint16 mMp, mMaxMp;
Uint16 mAttackRange;
- Uint32 mTotalWeight, mMaxWeight;
-
Uint8 mAttr[6];
Uint8 mAttrUp[6];
@@ -228,6 +409,88 @@ class LocalPlayer : public Player
Uint16 mStatPoint, mSkillPoint;
Uint16 mStatsPointsToAttribute;
+#endif
+
+ int getHp() const
+ { return mHp; }
+
+ int getMaxHp() const
+ { return mMaxHp; }
+
+ void setHp(int value)
+ { mHp = value; }
+
+ void setMaxHp(int value)
+ { mMaxHp = value; }
+
+ int getLevel() const
+ { return mLevel; }
+
+ void setLevel(int value)
+ { mLevel = value; }
+
+#ifdef TMWSERV_SUPPORT
+ void setLevelProgress(int percent)
+ { mLevelProgress = percent; }
+
+ int getLevelProgress() const
+ { return mLevelProgress; }
+#endif
+
+ int getMoney() const
+ { return mMoney; }
+
+ void setMoney(int value)
+ { mMoney = value; }
+
+ int getTotalWeight() const
+ { return mTotalWeight; }
+
+ void setTotalWeight(int value)
+ { mTotalWeight = value; }
+
+ int getMaxWeight() const
+ { return mMaxWeight; }
+
+ void setMaxWeight(int value)
+ { mMaxWeight = value; }
+
+#ifdef TMWSERV_SUPPORT
+ int getAttributeBase(int num) const
+ { return mAttributeBase[num]; }
+
+ void setAttributeBase(int num, int value)
+ { mAttributeBase[num] = value; }
+
+ int getAttributeEffective(int num) const
+ { return mAttributeEffective[num]; }
+
+ void setAttributeEffective(int num, int value)
+ { mAttributeEffective[num] = value; }
+
+ int getCharacterPoints() const
+ { return mCharacterPoints; }
+
+ void setCharacterPoints(int n)
+ { mCharacterPoints = n; }
+
+ int getCorrectionPoints() const
+ { return mCorrectionPoints; }
+
+ void setCorrectionPoints(int n)
+ { mCorrectionPoints = n; }
+
+ void setExperience(int skill, int current, int next);
+
+ struct SkillInfo {
+ std::string name;
+ std::string icon;
+ };
+
+ static const SkillInfo& getSkillInfo(int skill);
+
+ std::pair<int, int> getExperience(int skill);
+#endif
bool mUpdateName; /** Whether or not the name settings have changed */
@@ -243,27 +506,52 @@ class LocalPlayer : public Player
void walk(unsigned char dir);
+#ifdef EATHENA_SUPPORT
+ Network *mNetwork;
int mXp; /**< Experience points. */
+ bool mInStorage; /**< Whether storage is currently accessible */
+ int mTargetTime; /** How long the being has been targeted **/
+ int mLastTarget; /** Time stamp of last targeting action, -1 if none. */
+#endif
+
+#ifdef TMWSERV_SUPPORT
+ // Character status:
+ std::vector<int> mAttributeBase;
+ std::vector<int> mAttributeEffective;
+ std::vector<int> mExpCurrent;
+ std::vector<int> mExpNext;
+ int mCharacterPoints;
+ int mCorrectionPoints;
+ int mLevelProgress;
+#endif
+ int mLevel;
+ int mMoney;
+ int mTotalWeight;
+ int mMaxWeight;
+ int mHp;
+ int mMaxHp;
- Network *mNetwork;
Being *mTarget;
FloorItem *mPickUpTarget;
bool mTrading;
- bool mInStorage; /**< Whether storage is currently accessible */
bool mGoingToTarget;
bool mKeepAttacking; /** Whether or not to continue to attack */
- int mTargetTime; /** How long the being has been targeted **/
int mLastAction; /**< Time stamp of the last action, -1 if none. */
- int mLastTarget; /** Time stamp of last targeting action, -1 if none. */
int mWalkingDir; /**< The direction the player is walking in. */
int mDestX; /**< X coordinate of destination. */
int mDestY; /**< Y coordinate of destination. */
+#ifdef TMWSERV_SUPPORT
+ int mLocalWalkTime; /**< Timestamp used to control keyboard walk
+ messages flooding */
+#endif
std::vector<int> mStatusEffectIcons;
Inventory *mInventory;
+#ifdef EATHENA_SUPPORT
Inventory *mStorage;
+#endif
// Load the target cursors into memory
void initTargetCursor();
@@ -279,6 +567,11 @@ class LocalPlayer : public Player
/** Animated target cursors. */
SimpleAnimation *mTargetCursor[2][NUM_TC];
+
+#ifdef TMWSERV_SUPPORT
+ std::list<std::string> mExpMessages; /**< Queued exp messages*/
+ int mExpMessageTime;
+#endif
};
extern LocalPlayer *player_node;