From f8e816d9185c09d1c17d921b775e483d132982e5 Mon Sep 17 00:00:00 2001 From: Erik Schilling Date: Tue, 3 Apr 2012 13:29:05 +0200 Subject: Enhanced special support - Made the current charge being saved. - Added script binds: - chr_set_special_recharge_speed - chr_get_special_recharge_speed - chr_set_special_mana - chr_get_special_mana - get_special_info - Added special info lua class. Functions: - name - needed_mana - rechargeable - on_use - on_recharged - category Further the engine no longer sets charge to 0 after using of specials this allows more flexbilillity (like failing specials). Changes on the xml database: - recharge renamed to rechargeable (needed by client and server) - needed - the needed mana to trigger a special (server only) - rechargespeed - the defailt recharge speed in mana per tick (server only) - target - the type of target (either being or point) (server and client) I also made the lua engine pushing nil instead of a 0 light userdata when the pointer was 0. Database update needed. Change is tested. Mana-Mantis: #167, #156 Reviewed-by: bjorn. --- src/account-server/character.h | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) (limited to 'src/account-server/character.h') diff --git a/src/account-server/character.h b/src/account-server/character.h index 74fe923c..5e6bd3b3 100644 --- a/src/account-server/character.h +++ b/src/account-server/character.h @@ -49,13 +49,28 @@ struct AttributeValue double modified; /**< Value after various modifiers have been applied. */ }; +struct SpecialValue +{ + SpecialValue() + : currentMana(0) + {} + + SpecialValue(unsigned int currentMana) + : currentMana(currentMana) + {} + + unsigned int currentMana; +}; + /** * Stores attributes by their id. */ -typedef std::map< unsigned int, AttributeValue > AttributeMap; +typedef std::map AttributeMap; -/** placeholder type needed for include compatibility with game server*/ -typedef void Special; +/** + * Stores specials by their id. + */ +typedef std::map SpecialMap; class Character { @@ -193,17 +208,17 @@ class Character int getSpecialSize() const { return mSpecials.size(); } - const std::map::const_iterator getSpecialBegin() const + SpecialMap::const_iterator getSpecialBegin() const { return mSpecials.begin(); } - const std::map::const_iterator getSpecialEnd() const + SpecialMap::const_iterator getSpecialEnd() const { return mSpecials.end(); } + void clearSpecials() { mSpecials.clear(); } - void giveSpecial(int id) - { mSpecials[id] = NULL; } + void giveSpecial(int id, int currentMana); /** * Gets the Id of the map that the character is on. @@ -270,7 +285,7 @@ class Character std::map mExperience; //!< Skill Experience. std::map mStatusEffects; //!< Status Effects std::map mKillCount; //!< Kill Count - std::map mSpecials; + SpecialMap mSpecials; unsigned short mMapId; //!< Map the being is on. unsigned char mGender; //!< Gender of the being. unsigned char mHairStyle; //!< Hair style of the being. -- cgit v1.2.3-60-g2f50