summaryrefslogtreecommitdiff
path: root/src/localplayer.h
diff options
context:
space:
mode:
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;