diff options
Diffstat (limited to 'src/localplayer.h')
-rw-r--r-- | src/localplayer.h | 313 |
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; |