diff options
Diffstat (limited to 'src/game/Player.h')
| -rw-r--r-- | src/game/Player.h | 459 | 
1 files changed, 275 insertions, 184 deletions
diff --git a/src/game/Player.h b/src/game/Player.h index 79380fbbb2c..12a2b5dff62 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1,7 +1,7 @@  /* - * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/> + * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>   * - * Copyright (C) 2008 Trinity <http://www.trinitycore.org/> + * Copyright (C) 2008-2009 Trinity <http://www.trinitycore.org/>   *   * This program is free software; you can redistribute it and/or modify   * it under the terms of the GNU General Public License as published by @@ -35,6 +35,8 @@  #include "Pet.h"  #include "MapReference.h"  #include "Util.h"                                           // for Tokens typedef +#include "AchievementMgr.h" +#include "BattleGround.h"  #include<string>  #include<vector> @@ -47,8 +49,11 @@ class Pet;  class PlayerMenu;  class Transport;  class UpdateMask; +class SpellCastTargets;  class PlayerSocial;  class OutdoorPvP; +class AchievementMgr; +class Vehicle;  typedef std::deque<Mail*> PlayerMails; @@ -62,6 +67,17 @@ enum SpellModType      SPELLMOD_PCT          = 108                             // SPELL_AURA_ADD_PCT_MODIFIER  }; +// 2^n values, Player::m_isunderwater is a bitmask. These are mangos internal values, they are never send to any client +enum PlayerUnderwaterState +{ +    UNDERWATER_NONE                     = 0x00, +    UNDERWATER_INWATER                  = 0x01,             // terrain type is water and player is afflicted by it +    UNDERWATER_WATER_TRIGGER            = 0x02,             // m_breathTimer has been initialized +    UNDERWATER_WATER_BREATHB            = 0x04,             // breathbar has been send to client +    UNDERWATER_WATER_BREATHB_RETRACTING = 0x10,             // breathbar is currently refilling - the player is above water level +    UNDERWATER_INLAVA                   = 0x80              // terrain type is lava and player is afflicted by it +}; +  enum PlayerSpellState  {      PLAYERSPELL_UNCHANGED = 0, @@ -72,27 +88,26 @@ enum PlayerSpellState  struct PlayerSpell  { -    uint16 slotId          : 16;      PlayerSpellState state : 8; -    bool active            : 1; -    bool disabled          : 1; +    bool active            : 1;                             // show in spellbook +    bool dependent         : 1;                             // learned as result another spell learn, skill grow, quest reward, etc +    bool disabled          : 1;                             // first rank has been learned in result talent learn but currently talent unlearned, save max learned ranks  }; -#define SPELL_WITHOUT_SLOT_ID uint16(-1) - +// Spell modifier (used for modify other spells)  struct SpellModifier  { +    SpellModifier() : charges(0), lastAffected(NULL) {}      SpellModOp   op   : 8;      SpellModType type : 8;      int16 charges     : 16;      int32 value; -    uint64 mask; +    flag96 mask;      uint32 spellId; -    uint32 effectId;      Spell const* lastAffected;  }; -typedef UNORDERED_MAP<uint16, PlayerSpell*> PlayerSpellMap; +typedef UNORDERED_MAP<uint32, PlayerSpell*> PlayerSpellMap;  typedef std::list<SpellModifier*> SpellModList;  struct SpellCooldown @@ -141,8 +156,6 @@ enum ActionButtonType  typedef std::map<uint8,ActionButton> ActionButtonList; -typedef std::pair<uint16, uint8> CreateSpellPair; -  struct PlayerCreateInfoItem  {      PlayerCreateInfoItem(uint32 id, uint32 amount) : item_id(id), item_amount(amount) {} @@ -174,6 +187,8 @@ struct PlayerLevelInfo      uint8 stats[MAX_STATS];  }; +typedef std::list<uint32> PlayerCreateInfoSpells; +  struct PlayerInfo  {                                                              // existence checked by displayId != 0             // existence checked by displayId != 0 @@ -189,7 +204,7 @@ struct PlayerInfo      uint16 displayId_m;      uint16 displayId_f;      PlayerCreateInfoItems item; -    std::list<CreateSpellPair> spell; +    PlayerCreateInfoSpells spell;      std::list<uint16> action[4];      PlayerLevelInfo* levelInfo;                             //[level-1] 0..MaxPlayerLevel-1 @@ -224,6 +239,39 @@ struct Areas      float y2;  }; +#define MAX_RUNES       6 +#define RUNE_COOLDOWN   5                                   // 5*2=10 sec + +enum RuneType +{ +    RUNE_BLOOD      = 0, +    RUNE_UNHOLY     = 1, +    RUNE_FROST      = 2, +    RUNE_DEATH      = 3, +    NUM_RUNE_TYPES  = 4 +}; + +struct RuneInfo +{ +    uint8 BaseRune; +    uint8 CurrentRune; +    uint8 Cooldown; +}; + +struct Runes +{ +    RuneInfo runes[MAX_RUNES]; +    uint8 runeState;                                        // mask of available runes + +    void SetRuneState(uint8 index, bool set = true) +    { +        if(set) +            runeState |= (1 << index);                      // usable +        else +            runeState &= ~(1 << index);                     // on cooldown +    } +}; +  enum FactionFlags  {      FACTION_FLAG_VISIBLE            = 0x01,                 // makes visible in client (set or can be set at interaction with target of this faction) @@ -328,52 +376,6 @@ enum DrunkenState      DRUNKEN_SMASHED = 3  }; -enum PlayerStateType -{ -    /* -        PLAYER_STATE_DANCE -        PLAYER_STATE_SLEEP -        PLAYER_STATE_SIT -        PLAYER_STATE_STAND -        PLAYER_STATE_READYUNARMED -        PLAYER_STATE_WORK -        PLAYER_STATE_POINT(DNR) -        PLAYER_STATE_NONE // not used or just no state, just standing there? -        PLAYER_STATE_STUN -        PLAYER_STATE_DEAD -        PLAYER_STATE_KNEEL -        PLAYER_STATE_USESTANDING -        PLAYER_STATE_STUN_NOSHEATHE -        PLAYER_STATE_USESTANDING_NOSHEATHE -        PLAYER_STATE_WORK_NOSHEATHE -        PLAYER_STATE_SPELLPRECAST -        PLAYER_STATE_READYRIFLE -        PLAYER_STATE_WORK_NOSHEATHE_MINING -        PLAYER_STATE_WORK_NOSHEATHE_CHOPWOOD -        PLAYER_STATE_AT_EASE -        PLAYER_STATE_READY1H -        PLAYER_STATE_SPELLKNEELSTART -        PLAYER_STATE_SUBMERGED -    */ - -    PLAYER_STATE_NONE              = 0, -    PLAYER_STATE_SIT               = 1, -    PLAYER_STATE_SIT_CHAIR         = 2, -    PLAYER_STATE_SLEEP             = 3, -    PLAYER_STATE_SIT_LOW_CHAIR     = 4, -    PLAYER_STATE_SIT_MEDIUM_CHAIR  = 5, -    PLAYER_STATE_SIT_HIGH_CHAIR    = 6, -    PLAYER_STATE_DEAD              = 7, -    PLAYER_STATE_KNEEL             = 8, - -    PLAYER_STATE_FORM_ALL          = 0x00FF0000, - -    PLAYER_STATE_FLAG_ALWAYS_STAND = 0x01,                  // byte 4 -    PLAYER_STATE_FLAG_CREEP        = 0x02000000, -    PLAYER_STATE_FLAG_UNTRACKABLE  = 0x04000000, -    PLAYER_STATE_FLAG_ALL          = 0xFF000000, -}; -  enum PlayerFlags  {      PLAYER_FLAGS_GROUP_LEADER   = 0x00000001, @@ -382,17 +384,25 @@ enum PlayerFlags      PLAYER_FLAGS_GM             = 0x00000008,      PLAYER_FLAGS_GHOST          = 0x00000010,      PLAYER_FLAGS_RESTING        = 0x00000020, -    PLAYER_FLAGS_FFA_PVP        = 0x00000080, +    PLAYER_FLAGS_UNK7           = 0x00000040, +    PLAYER_FLAGS_UNK8           = 0x00000080,               // pre-3.0.3 PLAYER_FLAGS_FFA_PVP flag for FFA PVP state      PLAYER_FLAGS_CONTESTED_PVP  = 0x00000100,               // Player has been involved in a PvP combat and will be attacked by contested guards      PLAYER_FLAGS_IN_PVP         = 0x00000200,      PLAYER_FLAGS_HIDE_HELM      = 0x00000400,      PLAYER_FLAGS_HIDE_CLOAK     = 0x00000800, -    PLAYER_FLAGS_UNK1           = 0x00001000,               // played long time -    PLAYER_FLAGS_UNK2           = 0x00002000,               // played too long time -    PLAYER_FLAGS_UNK3           = 0x00008000,               // strange visual effect (2.0.1), looks like PLAYER_FLAGS_GHOST flag -    PLAYER_FLAGS_SANCTUARY      = 0x00010000,               // player entered sanctuary -    PLAYER_FLAGS_UNK4           = 0x00020000,               // taxi benchmark mode (on/off) (2.0.1) -    PLAYER_UNK                  = 0x00040000,               // 2.0.8... +    PLAYER_FLAGS_UNK13          = 0x00001000,               // played long time +    PLAYER_FLAGS_UNK14          = 0x00002000,               // played too long time +    PLAYER_FLAGS_UNK15          = 0x00004000, +    PLAYER_FLAGS_UNK16          = 0x00008000,               // strange visual effect (2.0.1), looks like PLAYER_FLAGS_GHOST flag +    PLAYER_FLAGS_UNK17          = 0x00010000,               // pre-3.0.3 PLAYER_FLAGS_SANCTUARY flag for player entered sanctuary +    PLAYER_FLAGS_UNK18          = 0x00020000,               // taxi benchmark mode (on/off) (2.0.1) +    PLAYER_FLAGS_PVP_TIMER      = 0x00040000,               // 3.0.2, pvp timer active (after you disable pvp manually) +    PLAYER_FLAGS_UNK20          = 0x00080000, +    PLAYER_FLAGS_UNK21          = 0x00100000, +    PLAYER_FLAGS_UNK22          = 0x00200000, +    PLAYER_FLAGS_UNK23          = 0x00400000, +    PLAYER_ALLOW_ONLY_ABILITY   = 0x00800000,                // used by bladestorm and killing spree +    PLAYER_FLAGS_UNK25          = 0x01000000                 // disabled all melee ability on tab include autoattack  };  // used for PLAYER__FIELD_KNOWN_TITLES field (uint64), (1<<bit_index) without (-1) @@ -481,7 +491,8 @@ enum LootType      LOOT_DISENCHANTING          = 5,                        // unsupported by client, sending LOOT_SKINNING instead      LOOT_PROSPECTING            = 6,                        // unsupported by client, sending LOOT_SKINNING instead      LOOT_INSIGNIA               = 7,                        // unsupported by client, sending LOOT_SKINNING instead -    LOOT_FISHINGHOLE            = 8                         // unsupported by client, sending LOOT_FISHING instead +    LOOT_FISHINGHOLE            = 8,                        // unsupported by client, sending LOOT_FISHING instead +    LOOT_MILLING                = 9                         // unsupported by client, sending LOOT_SKINNING instead  };  enum MirrorTimerType @@ -511,7 +522,8 @@ enum AtLoginFlags      AT_LOGIN_NONE          = 0,      AT_LOGIN_RENAME        = 1,      AT_LOGIN_RESET_SPELLS  = 2, -    AT_LOGIN_RESET_TALENTS = 4 +    AT_LOGIN_RESET_TALENTS = 4, +    AT_LOGIN_CUSTOMIZE     = 8  };  typedef std::map<uint32, QuestStatusData> QuestStatusMap; @@ -543,7 +555,7 @@ enum PlayerSlots      // first slot for item stored (in any way in player m_items data)      PLAYER_SLOT_START           = 0,      // last+1 slot for item stored (in any way in player m_items data) -    PLAYER_SLOT_END             = 118, +    PLAYER_SLOT_END             = 200,      PLAYER_SLOTS_COUNT          = (PLAYER_SLOT_END - PLAYER_SLOT_START)  }; @@ -671,12 +683,30 @@ enum KeyRingSlots      KEYRING_SLOT_END            = 118  }; +enum VanityPetSlots +{ +    VANITYPET_SLOT_START        = 118,                      // not use, vanity pets stored as spells +    VANITYPET_SLOT_END          = 136                       // not alloed any content in. +}; + +enum CurrencyTokenSlots +{ +    CURRENCYTOKEN_SLOT_START    = 136, +    CURRENCYTOKEN_SLOT_END      = 168 +}; + +enum QuestBagSlots +{ +    QUESTBAG_SLOT_START         = 168, +    QUESTBAG_SLOT_END           = 200 +}; +  struct ItemPosCount  { -    ItemPosCount(uint16 _pos, uint8 _count) : pos(_pos), count(_count) {} +    ItemPosCount(uint16 _pos, uint32 _count) : pos(_pos), count(_count) {}      bool isContainedIn(std::vector<ItemPosCount> const& vec) const;      uint16 pos; -    uint8 count; +    uint32 count;  };  typedef std::vector<ItemPosCount> ItemPosCountVec; @@ -689,14 +719,15 @@ enum TradeSlots  enum TransferAbortReason  { -    TRANSFER_ABORT_MAX_PLAYERS          = 0x0001,           // Transfer Aborted: instance is full -    TRANSFER_ABORT_NOT_FOUND            = 0x0002,           // Transfer Aborted: instance not found -    TRANSFER_ABORT_TOO_MANY_INSTANCES   = 0x0003,           // You have entered too many instances recently. -    TRANSFER_ABORT_ZONE_IN_COMBAT       = 0x0005,           // Unable to zone in while an encounter is in progress. -    TRANSFER_ABORT_INSUF_EXPAN_LVL1     = 0x0106,           // You must have TBC expansion installed to access this area. -    TRANSFER_ABORT_DIFFICULTY1          = 0x0007,           // Normal difficulty mode is not available for %s. -    TRANSFER_ABORT_DIFFICULTY2          = 0x0107,           // Heroic difficulty mode is not available for %s. -    TRANSFER_ABORT_DIFFICULTY3          = 0x0207            // Epic difficulty mode is not available for %s. +    TRANSFER_ABORT_ERROR                    = 0x00, +    TRANSFER_ABORT_MAX_PLAYERS              = 0x01,         // Transfer Aborted: instance is full +    TRANSFER_ABORT_NOT_FOUND                = 0x02,         // Transfer Aborted: instance not found +    TRANSFER_ABORT_TOO_MANY_INSTANCES       = 0x03,         // You have entered too many instances recently. +    TRANSFER_ABORT_ZONE_IN_COMBAT           = 0x05,         // Unable to zone in while an encounter is in progress. +    TRANSFER_ABORT_INSUF_EXPAN_LVL          = 0x06,         // You must have <TBC,WotLK> expansion installed to access this area. +    TRANSFER_ABORT_DIFFICULTY               = 0x07,         // <Normal,Heroic,Epic> difficulty mode is not available for %s. +    TRANSFER_ABORT_UNIQUE_MESSAGE           = 0x08,         // Until you've escaped TLK's grasp, you cannot leave this place! +    TRANSFER_ABORT_TOO_MANY_REALM_INSTANCES = 0x09          // Additional instances cannot be launched, please try again later.  };  enum InstanceResetWarningType @@ -710,15 +741,16 @@ enum InstanceResetWarningType  struct MovementInfo  {      // common -    //uint32  flags; -    uint8   unk1; +    uint32  flags; +    uint16  unk1;      uint32  time;      float   x, y, z, o;      // transport      uint64  t_guid;      float   t_x, t_y, t_z, t_o;      uint32  t_time; -    // swimming and unk +    int8    t_seat; +    // swimming and unknown      float   s_pitch;      // last fall time      uint32  fallTime; @@ -729,17 +761,17 @@ struct MovementInfo      MovementInfo()      { -        //flags = +        flags = 0;          time = t_time = fallTime = 0;          unk1 = 0;          x = y = z = o = t_x = t_y = t_z = t_o = s_pitch = j_unk = j_sinAngle = j_cosAngle = j_xyspeed = u_unk1 = 0.0f;          t_guid = 0;      } -    /*void SetMovementFlags(uint32 _flags) +    void SetMovementFlags(uint32 _flags)      {          flags = _flags; -    }*/ +    }  };  // flags that use in movement check for example at spell casting @@ -812,10 +844,12 @@ enum PlayerLoginQueryIndex      PLAYER_LOGIN_QUERY_LOADDECLINEDNAMES        = 16,      PLAYER_LOGIN_QUERY_LOADGUILD                = 17,      PLAYER_LOGIN_QUERY_LOADARENAINFO            = 18, - -    MAX_PLAYER_LOGIN_QUERY +    PLAYER_LOGIN_QUERY_LOADACHIEVEMENTS         = 19, +    PLAYER_LOGIN_QUERY_LOADCRITERIAPROGRESS     = 20, +    MAX_PLAYER_LOGIN_QUERY                      = 21  }; +  // Player summoning auto-decline time (in secs)  #define MAX_PLAYER_SUMMON_DELAY                   (2*MINUTE)  #define MAX_MONEY_AMOUNT                       (0x7FFFFFFF-1) @@ -836,11 +870,9 @@ class TRINITY_DLL_SPEC PlayerTaxi          PlayerTaxi();          ~PlayerTaxi() {}          // Nodes -        void InitTaxiNodesForLevel(uint32 race, uint32 level); +        void InitTaxiNodesForLevel(uint32 race, uint32 chrClass, uint32 level);          void LoadTaxiMask(const char* data); -        void SaveTaxiMask(const char* data); -        uint32 GetTaximask( uint8 index ) const { return m_taximask[index]; }          bool IsTaximaskNodeKnown(uint32 nodeidx) const          {              uint8  field   = uint8((nodeidx - 1) / 32); @@ -862,7 +894,7 @@ class TRINITY_DLL_SPEC PlayerTaxi          void AppendTaximaskTo(ByteBuffer& data,bool all);          // Destinations -        bool LoadTaxiDestinationsFromString(const std::string& values); +        bool LoadTaxiDestinationsFromString(const std::string& values, uint32 team);          std::string SaveTaxiDestinationsToString();          void ClearTaxiDestinations() { m_TaxiDestinations.clear(); } @@ -876,11 +908,15 @@ class TRINITY_DLL_SPEC PlayerTaxi              return GetTaxiDestination();          }          bool empty() const { return m_TaxiDestinations.empty(); } + +        friend std::ostringstream& operator<< (std::ostringstream& ss, PlayerTaxi const& taxi);      private:          TaxiMask m_taximask;          std::deque<uint32> m_TaxiDestinations;  }; +std::ostringstream& operator<< (std::ostringstream& ss, PlayerTaxi const& taxi); +  class TRINITY_DLL_SPEC Player : public Unit  {      friend class WorldSession; @@ -898,17 +934,6 @@ class TRINITY_DLL_SPEC Player : public Unit          void AddToWorld();          void RemoveFromWorld(); -        void SetViewport(uint64 guid, bool movable); -        void StopCastingCharm() { Uncharm(); } -        void StopBindSight(); -        WorldObject* GetFarsightTarget() const; -        void ClearFarsight(); -        void StopCastingBindSight(); -        void SetFarsightTarget(WorldObject* target); -        // Controls if vision is currently on farsight object, updated in FAR_SIGHT opcode -        void SetFarsightVision(bool apply) { m_farsightVision = apply; } -        bool HasFarsightVision() const { return m_farsightVision; } -          bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options = 0);          bool TeleportTo(WorldLocation const &loc, uint32 options = 0) @@ -939,7 +964,7 @@ class TRINITY_DLL_SPEC Player : public Unit          void SendInitialPacketsBeforeAddToMap();          void SendInitialPacketsAfterAddToMap(); -        void SendTransferAborted(uint32 mapid, uint16 reason); +        void SendTransferAborted(uint32 mapid, uint8 reason, uint8 arg = 0);          void SendInstanceResetWarning(uint32 mapid, uint32 time);          bool CanInteractWithNPCs(bool alive = true) const; @@ -952,10 +977,12 @@ class TRINITY_DLL_SPEC Player : public Unit          std::string afkMsg;          std::string dndMsg; +        uint32 GetBarberShopCost(uint8 newhairstyle, uint8 newhaircolor, uint8 newfacialhair); +          PlayerSocial *GetSocial() { return m_social; }          PlayerTaxi m_taxi; -        void InitTaxiNodesForLevel() { m_taxi.InitTaxiNodesForLevel(getRace(),getLevel()); } +        void InitTaxiNodesForLevel() { m_taxi.InitTaxiNodesForLevel(getRace(), getClass(), getLevel()); }          bool ActivateTaxiPathTo(std::vector<uint32> const& nodes, uint32 mount_id = 0 , Creature* npc = NULL);                                                              // mount_id can be used in scripting calls          bool isAcceptWhispers() const { return m_ExtraFlags & PLAYER_EXTRA_ACCEPT_WHISPERS; } @@ -1016,6 +1043,7 @@ class TRINITY_DLL_SPEC Player : public Unit          void AddGuardian(Pet* pet) { m_guardianPets.insert(pet->GetGUID()); }          GuardianPetList const& GetGuardians() const { return m_guardianPets; }          void Uncharm(); +        uint32 GetPhaseMaskForSpawn() const;                // used for proper set phase for DB at GM-mode creature/GO spawn          void Say(const std::string& text, const uint32 language);          void Yell(const std::string& text, const uint32 language); @@ -1034,9 +1062,15 @@ class TRINITY_DLL_SPEC Player : public Unit          Item* GetItemByGuid( uint64 guid ) const;          Item* GetItemByPos( uint16 pos ) const;          Item* GetItemByPos( uint8 bag, uint8 slot ) const; +        inline Item* GetUseableItemByPos( uint8 bag, uint8 slot ) const //Does additional check for disarmed weapons +        { +            if (!CanUseAttackType(GetAttackBySlot(slot))) +                return NULL; +            return GetItemByPos(bag, slot); +        }          Item* GetWeaponForAttack(WeaponAttackType attackType, bool useable = false) const;          Item* GetShield(bool useable = false) const; -        static uint32 GetAttackBySlot( uint8 slot );        // MAX_ATTACK if not weapon slot +        static uint8 GetAttackBySlot( uint8 slot );        // MAX_ATTACK if not weapon slot          std::vector<Item *> &GetItemUpdateQueue() { return m_itemUpdateQueue; }          static bool IsInventoryPos( uint16 pos ) { return IsInventoryPos(pos >> 8,pos & 255); }          static bool IsInventoryPos( uint8 bag, uint8 slot ); @@ -1050,7 +1084,9 @@ class TRINITY_DLL_SPEC Player : public Unit          bool HasBankBagSlot( uint8 slot ) const;          bool HasItemCount( uint32 item, uint32 count, bool inBankAlso = false ) const;          bool HasItemFitToSpellReqirements(SpellEntry const* spellInfo, Item const* ignoreItem = NULL); -        Item* GetItemOrItemWithGemEquipped( uint32 item ) const; +        bool CanNoReagentCast(SpellEntry const* spellInfo) const; +        bool HasItemOrGemWithIdEquipped( uint32 item, uint32 count, uint8 except_slot = NULL_SLOT) const; +        bool HasItemOrGemWithLimitCategoryEquipped( uint32 limitCategory, uint32 count, uint8 except_slot = NULL_SLOT) const;          uint8 CanTakeMoreSimilarItems(Item* pItem) const { return _CanTakeMoreSimilarItems(pItem->GetEntry(),pItem->GetCount(),pItem); }          uint8 CanTakeMoreSimilarItems(uint32 entry, uint32 count) const { return _CanTakeMoreSimilarItems(entry,count,NULL); }          uint8 CanStoreNewItem( uint8 bag, uint8 slot, ItemPosCountVec& dest, uint32 item, uint32 count, uint32* no_space_count = NULL ) const @@ -1068,6 +1104,9 @@ class TRINITY_DLL_SPEC Player : public Unit          uint8 CanStoreItems( Item **pItem,int count) const;          uint8 CanEquipNewItem( uint8 slot, uint16 &dest, uint32 item, bool swap ) const;          uint8 CanEquipItem( uint8 slot, uint16 &dest, Item *pItem, bool swap, bool not_loading = true ) const; + +        uint8 CanEquipUniqueItem( Item * pItem, uint8 except_slot = NULL_SLOT, uint32 limit_count = 1 ) const; +        uint8 CanEquipUniqueItem( ItemPrototype const* itemProto, uint8 except_slot = NULL_SLOT, uint32 limit_count = 1 ) const;          uint8 CanUnequipItems( uint32 item, uint32 count ) const;          uint8 CanUnequipItem( uint16 src, bool swap ) const;          uint8 CanBankItem( uint8 bag, uint8 slot, ItemPosCountVec& dest, Item *pItem, bool swap, bool not_loading = true ) const; @@ -1081,6 +1120,8 @@ class TRINITY_DLL_SPEC Player : public Unit          Item* EquipItem( uint16 pos, Item *pItem, bool update );          void AutoUnequipOffhandIfNeed();          bool StoreNewItemInBestSlots(uint32 item_id, uint32 item_count); +        void AutoStoreLoot(uint8 bag, uint8 slot, uint32 loot_id, LootStore const& store, bool broadcast = false); +        void AutoStoreLoot(uint32 loot_id, LootStore const& store, bool broadcast = false) { AutoStoreLoot(NULL_BAG,NULL_SLOT,loot_id,store,broadcast); }          uint8 _CanTakeMoreSimilarItems(uint32 entry, uint32 count, Item* pItem, uint32* no_space_count = NULL) const;          uint8 _CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec& dest, uint32 entry, uint32 count, Item *pItem = NULL, bool swap = false, uint32* no_space_count = NULL ) const; @@ -1123,10 +1164,10 @@ class TRINITY_DLL_SPEC Player : public Unit          uint32 GetWeaponProficiency() const { return m_WeaponProficiency; }          uint32 GetArmorProficiency() const { return m_ArmorProficiency; }          bool IsInFeralForm() const { return m_form == FORM_CAT || m_form == FORM_BEAR || m_form == FORM_DIREBEAR; } -        bool IsUseEquipedWeapon( bool mainhand ) const +        bool IsTwoHandUsed() const          { -            // disarm applied only to mainhand weapon -            return !IsInFeralForm() && (!mainhand || !HasFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_DISARMED) ); +            Item* mainItem = GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND); +            return mainItem && mainItem->GetProto()->InventoryType == INVTYPE_2HWEAPON && !CanTitanGrip();          }          void SendNewItem( Item *item, uint32 count, bool received, bool created, bool broadcast = false );          bool BuyItemFromVendor(uint64 vendorguid, uint32 item, uint8 count, uint64 bagguid, uint8 slot); @@ -1158,6 +1199,8 @@ class TRINITY_DLL_SPEC Player : public Unit          /***                    QUEST SYSTEM                   ***/          /*********************************************************/ +        uint32 GetQuestLevel( Quest const* pQuest ) const { return pQuest && pQuest->GetQuestLevel() ? pQuest->GetQuestLevel() : getLevel(); } +          void PrepareQuestMenu( uint64 guid );          void SendPreparedQuest( uint64 guid );          bool IsActiveQuest( uint32 quest_id ) const; @@ -1225,7 +1268,6 @@ class TRINITY_DLL_SPEC Player : public Unit              }          }          uint32 GetReqKillOrCastCurrentCount(uint32 quest_id, int32 entry); -        void AdjustQuestReqItemCount( Quest const* pQuest );          void AreaExploredOrEventHappens( uint32 questId );          void GroupEventHappens( uint32 questId, WorldObject const* pEventObject );          void ItemAddedQuestCheck( uint32 entry, uint32 count ); @@ -1235,7 +1277,7 @@ class TRINITY_DLL_SPEC Player : public Unit          void TalkedToCreature( uint32 entry, uint64 guid );          void MoneyChanged( uint32 value );          bool HasQuestForItem( uint32 itemid ) const; -        bool HasQuestForGO(int32 GOId); +        bool HasQuestForGO(int32 GOId) const;          void UpdateForQuestsGO();          bool CanShareQuest(uint32 quest_id) const; @@ -1262,6 +1304,7 @@ class TRINITY_DLL_SPEC Player : public Unit          /*********************************************************/          bool LoadFromDB(uint32 guid, SqlQueryHolder *holder); +          bool MinimalLoadFromDB(QueryResult *result, uint32 guid);          static bool   LoadValuesArrayFromDB(Tokens& data,uint64 guid);          static uint32 GetUInt32ValueFromArray(Tokens const& data, uint16 index); @@ -1283,6 +1326,7 @@ class TRINITY_DLL_SPEC Player : public Unit          static void SetFloatValueInArray(Tokens& data,uint16 index, float value);          static void SetUInt32ValueInDB(uint16 index, uint32 value, uint64 guid);          static void SetFloatValueInDB(uint16 index, float value, uint64 guid); +        static void Customize(uint64 guid, uint8 gender, uint8 skin, uint8 face, uint8 hairStyle, uint8 hairColor, uint8 facialHair);          static void SavePositionInDB(uint32 mapid, float x,float y,float z,float o,uint32 zone,uint64 guid);          bool m_mailsLoaded; @@ -1339,7 +1383,7 @@ class TRINITY_DLL_SPEC Player : public Unit          void SetSelection(const uint64 &guid) { m_curSelection = guid; SetUInt64Value(UNIT_FIELD_TARGET, guid); }          uint8 GetComboPoints() { return m_comboPoints; } -        uint64 GetComboTarget() { return m_comboTarget; } +        const uint64& GetComboTarget() const { return m_comboTarget; }          void AddComboPoints(Unit* target, int8 count);          void ClearComboPoints(); @@ -1375,10 +1419,7 @@ class TRINITY_DLL_SPEC Player : public Unit          Item* GetMItem(uint32 id)          {              ItemMap::const_iterator itr = mMitems.find(id); -            if (itr != mMitems.end()) -                return itr->second; - -            return NULL; +            return itr != mMitems.end() ? itr->second : NULL;          }          void AddMItem(Item* it) @@ -1390,30 +1431,28 @@ class TRINITY_DLL_SPEC Player : public Unit          bool RemoveMItem(uint32 id)          { -            ItemMap::iterator i = mMitems.find(id); -            if (i == mMitems.end()) -                return false; - -            mMitems.erase(i); -            return true; +            return mMitems.erase(id) ? true : false;          }          void PetSpellInitialize();          void CharmSpellInitialize();          void PossessSpellInitialize();          bool HasSpell(uint32 spell) const; +        bool HasActiveSpell(uint32 spell) const;            // show in spellbook          TrainerSpellState GetTrainerSpellState(TrainerSpell const* trainer_spell) const;          bool IsSpellFitByClassAndRace( uint32 spell_id ) const; +        bool IsNeedCastPassiveSpellAtLearn(SpellEntry const* spellInfo) const;          void SendProficiency(uint8 pr1, uint32 pr2);          void SendInitialSpells(); -        bool addSpell(uint32 spell_id, bool active, bool learning = true, bool loading = false, uint16 slot_id=SPELL_WITHOUT_SLOT_ID, bool disabled = false); -        void learnSpell(uint32 spell_id); -        void removeSpell(uint32 spell_id, bool disabled = false); +        bool addSpell(uint32 spell_id, bool active, bool learning, bool dependent, bool disabled); +        void learnSpell(uint32 spell_id, bool dependent); +        void removeSpell(uint32 spell_id, bool disabled = false, bool update_action_bar_for_low_rank = false);          void resetSpells(); -        void learnDefaultSpells(bool loading = false); +        void learnDefaultSpells();          void learnQuestRewardedSpells();          void learnQuestRewardedSpells(Quest const* quest); +        void learnSpellHighRank(uint32 spellid);          uint32 GetFreeTalentPoints() const { return GetUInt32Value(PLAYER_CHARACTER_POINTS1); }          void SetFreeTalentPoints(uint32 points) { SetUInt32Value(PLAYER_CHARACTER_POINTS1,points); } @@ -1421,6 +1460,14 @@ class TRINITY_DLL_SPEC Player : public Unit          uint32 resetTalentsCost() const;          void InitTalentForLevel(); +        uint32 CalculateTalentsPoints() const; + +        void InitGlyphsForLevel(); +        void SetGlyphSlot(uint8 slot, uint32 slottype) { SetUInt32Value(PLAYER_FIELD_GLYPH_SLOTS_1 + slot, slottype); } +        uint32 GetGlyphSlot(uint8 slot) { return GetUInt32Value(PLAYER_FIELD_GLYPH_SLOTS_1 + slot); } +        void SetGlyph(uint8 slot, uint32 glyph) { SetUInt32Value(PLAYER_FIELD_GLYPHS_1 + slot, glyph); } +        uint32 GetGlyph(uint8 slot) { return GetUInt32Value(PLAYER_FIELD_GLYPHS_1 + slot); } +          uint32 GetFreePrimaryProffesionPoints() const { return GetUInt32Value(PLAYER_CHARACTER_POINTS2); }          void SetFreePrimaryProffesions(uint16 profs) { SetUInt32Value(PLAYER_CHARACTER_POINTS2,profs); }          void InitPrimaryProffesions(); @@ -1429,8 +1476,6 @@ class TRINITY_DLL_SPEC Player : public Unit          PlayerSpellMap      & GetSpellMap()       { return m_spells; }          void AddSpellMod(SpellModifier* mod, bool apply); -        int32 GetTotalFlatMods(uint32 spellId, SpellModOp op); -        int32 GetTotalPctMods(uint32 spellId, SpellModOp op);          bool IsAffectedBySpellmod(SpellEntry const *spellInfo, SpellModifier *mod, Spell const* spell = NULL);          template <class T> T ApplySpellMod(uint32 spellId, SpellModOp op, T &basevalue, Spell const* spell = NULL);          void RemoveSpellMods(Spell const* spell); @@ -1535,6 +1580,7 @@ class TRINITY_DLL_SPEC Player : public Unit          static uint32 GetArenaTeamIdFromDB(uint64 guid, uint8 slot);          void SetArenaTeamIdInvited(uint32 ArenaTeamId) { m_ArenaTeamIdInvited = ArenaTeamId; }          uint32 GetArenaTeamIdInvited() { return m_ArenaTeamIdInvited; } +        static void LeaveAllArenaTeams(uint64 guid);          void SetDifficulty(uint32 dungeon_difficulty) { m_dungeonDifficulty = dungeon_difficulty; }          uint8 GetDifficulty() { return m_dungeonDifficulty; } @@ -1560,9 +1606,12 @@ class TRINITY_DLL_SPEC Player : public Unit          void UpdateArmor();          void UpdateMaxHealth();          void UpdateMaxPower(Powers power); +        void ApplyFeralAPBonus(int32 amount, bool apply);          void UpdateAttackPowerAndDamage(bool ranged = false);          void UpdateShieldBlockValue();          void UpdateDamagePhysical(WeaponAttackType attType); +        void ApplySpellDamageBonus(int32 amount, bool apply); +        void ApplySpellHealingBonus(int32 amount, bool apply);          void UpdateSpellDamageAndHealingBonus();          void CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, float& min_damage, float& max_damage); @@ -1580,6 +1629,8 @@ class TRINITY_DLL_SPEC Player : public Unit          uint32 GetRangedCritDamageReduction(uint32 damage) const;          uint32 GetSpellCritDamageReduction(uint32 damage) const;          uint32 GetDotDamageReduction(uint32 damage) const; +        uint32 GetBaseSpellDamageBonus() { return m_baseSpellDamage;} +        uint32 GetBaseSpellHealingBonus() { return m_baseSpellHealing;}          float GetExpertiseDodgeOrParryReduction(WeaponAttackType attType) const;          void UpdateBlockPercentage(); @@ -1587,9 +1638,14 @@ class TRINITY_DLL_SPEC Player : public Unit          void UpdateAllCritPercentages();          void UpdateParryPercentage();          void UpdateDodgePercentage(); +        void UpdateMeleeHitChances(); +        void UpdateRangedHitChances(); +        void UpdateSpellHitChances(); +          void UpdateAllSpellCritChances();          void UpdateSpellCritChance(uint32 school);          void UpdateExpertise(WeaponAttackType attType); +        void ApplyManaRegenBonus(int32 amount, bool apply);          void UpdateManaRegen();          const uint64& GetLootGUID() const { return m_lootGuid; } @@ -1666,18 +1722,18 @@ class TRINITY_DLL_SPEC Player : public Unit          void UpdateDefense();          void UpdateWeaponSkill (WeaponAttackType attType); -        void UpdateCombatSkills(Unit *pVictim, WeaponAttackType attType, MeleeHitOutcome outcome, bool defence); +        void UpdateCombatSkills(Unit *pVictim, WeaponAttackType attType, bool defence);          void SetSkill(uint32 id, uint16 currVal, uint16 maxVal); -        uint16 GetMaxSkillValue(uint32 skill) const;        // max + perm. bonus +        uint16 GetMaxSkillValue(uint32 skill) const;        // max + perm. bonus + temp bonus          uint16 GetPureMaxSkillValue(uint32 skill) const;    // max          uint16 GetSkillValue(uint32 skill) const;           // skill value + perm. bonus + temp bonus          uint16 GetBaseSkillValue(uint32 skill) const;       // skill value + perm. bonus          uint16 GetPureSkillValue(uint32 skill) const;       // skill value +        int16 GetSkillPermBonusValue(uint32 skill) const;          int16 GetSkillTempBonusValue(uint32 skill) const;          bool HasSkill(uint32 skill) const; -        void learnSkillRewardedSpells( uint32 id ); -        void learnSkillRewardedSpells(); +        void learnSkillRewardedSpells(uint32 id, uint32 value);          void SetDontMove(bool dontMove);          bool GetDontMove() const { return m_dontMove; } @@ -1691,6 +1747,7 @@ class TRINITY_DLL_SPEC Player : public Unit          bool IsAtGroupRewardDistance(WorldObject const* pRewardSource) const;          bool RewardPlayerAndGroupAtKill(Unit* pVictim); +        bool isHonorOrXPTarget(Unit* pVictim);          FactionStateList m_factions;          ForcedReactions m_forcedReactions; @@ -1757,6 +1814,8 @@ class TRINITY_DLL_SPEC Player : public Unit          void SetCanParry(bool value);          bool CanBlock() const { return m_canBlock; }          void SetCanBlock(bool value); +        bool CanTitanGrip() const { return m_canTitanGrip ; } +        void SetCanTitanGrip(bool value) { m_canTitanGrip = value; }          void SetRegularAttackTime();          void SetBaseModValue(BaseModGroup modGroup, BaseModType modType, float value) { m_auraBaseMod[modGroup][modType] = value; } @@ -1785,12 +1844,13 @@ class TRINITY_DLL_SPEC Player : public Unit          void ApplyEquipSpell(SpellEntry const* spellInfo, Item* item, bool apply, bool form_change = false);          void UpdateEquipSpellsAtFormChange();          void CastItemCombatSpell(Item *item,Unit* Target, WeaponAttackType attType); +        void CastItemUseSpell(Item *item,SpellCastTargets const& targets,uint8 cast_count, uint32 glyphIndex);          void SendInitWorldStates(bool force = false, uint32 forceZoneId = 0);          void SendUpdateWorldState(uint32 Field, uint32 Value);          void SendDirectMessage(WorldPacket *data); -        void SendAuraDurationsForTarget(Unit* target); +        void SendAurasForTarget(Unit *target);          PlayerMenu* PlayerTalkClass;          std::vector<ItemSetEffect *> ItemSetEff; @@ -1804,51 +1864,55 @@ class TRINITY_DLL_SPEC Player : public Unit          /***               BATTLEGROUND SYSTEM                 ***/          /*********************************************************/ -        bool InBattleGround() const { return m_bgBattleGroundID != 0; } -        uint32 GetBattleGroundId() const    { return m_bgBattleGroundID; } +        bool InBattleGround()       const                { return m_bgBattleGroundID != 0; } +        bool InArena()              const; +        uint32 GetBattleGroundId()  const                { return m_bgBattleGroundID; } +        BattleGroundTypeId GetBattleGroundTypeId() const { return m_bgTypeID; }          BattleGround* GetBattleGround() const; -        bool InArena() const; -        static uint32 GetMinLevelForBattleGroundQueueId(uint32 queue_id); -        static uint32 GetMaxLevelForBattleGroundQueueId(uint32 queue_id); -        uint32 GetBattleGroundQueueIdFromLevel() const; + +        BGQueueIdBasedOnLevel GetBattleGroundQueueIdFromLevel(BattleGroundTypeId bgTypeId) const;          bool InBattleGroundQueue() const          {              for (int i=0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; i++) -                if (m_bgBattleGroundQueueID[i].bgQueueType != 0) +                if (m_bgBattleGroundQueueID[i].bgQueueTypeId != BATTLEGROUND_QUEUE_NONE)                      return true;              return false;          } -        uint32 GetBattleGroundQueueId(uint32 index) const { return m_bgBattleGroundQueueID[index].bgQueueType; } -        uint32 GetBattleGroundQueueIndex(uint32 bgQueueType) const +        BattleGroundQueueTypeId GetBattleGroundQueueTypeId(uint32 index) const { return m_bgBattleGroundQueueID[index].bgQueueTypeId; } +        uint32 GetBattleGroundQueueIndex(BattleGroundQueueTypeId bgQueueTypeId) const          {              for (int i=0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; i++) -                if (m_bgBattleGroundQueueID[i].bgQueueType == bgQueueType) +                if (m_bgBattleGroundQueueID[i].bgQueueTypeId == bgQueueTypeId)                      return i;              return PLAYER_MAX_BATTLEGROUND_QUEUES;          } -        bool IsInvitedForBattleGroundQueueType(uint32 bgQueueType) const +        bool IsInvitedForBattleGroundQueueType(BattleGroundQueueTypeId bgQueueTypeId) const          {              for (int i=0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; i++) -                if (m_bgBattleGroundQueueID[i].bgQueueType == bgQueueType) +                if (m_bgBattleGroundQueueID[i].bgQueueTypeId == bgQueueTypeId)                      return m_bgBattleGroundQueueID[i].invitedToInstance != 0;              return PLAYER_MAX_BATTLEGROUND_QUEUES;          } -        bool InBattleGroundQueueForBattleGroundQueueType(uint32 bgQueueType) const +        bool InBattleGroundQueueForBattleGroundQueueType(BattleGroundQueueTypeId bgQueueTypeId) const          { -            return GetBattleGroundQueueIndex(bgQueueType) < PLAYER_MAX_BATTLEGROUND_QUEUES; +            return GetBattleGroundQueueIndex(bgQueueTypeId) < PLAYER_MAX_BATTLEGROUND_QUEUES;          } -        void SetBattleGroundId(uint32 val)  { m_bgBattleGroundID = val; } -        uint32 AddBattleGroundQueueId(uint32 val) +        void SetBattleGroundId(uint32 val, BattleGroundTypeId bgTypeId) +        { +            m_bgBattleGroundID = val; +            m_bgTypeID = bgTypeId; +        } +        uint32 AddBattleGroundQueueId(BattleGroundQueueTypeId val)          {              for (int i=0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; i++)              { -                if (m_bgBattleGroundQueueID[i].bgQueueType == 0 || m_bgBattleGroundQueueID[i].bgQueueType == val) +                if (m_bgBattleGroundQueueID[i].bgQueueTypeId == BATTLEGROUND_QUEUE_NONE || m_bgBattleGroundQueueID[i].bgQueueTypeId == val)                  { -                    m_bgBattleGroundQueueID[i].bgQueueType = val; +                    m_bgBattleGroundQueueID[i].bgQueueTypeId = val;                      m_bgBattleGroundQueueID[i].invitedToInstance = 0;                      return i;                  } @@ -1858,26 +1922,26 @@ class TRINITY_DLL_SPEC Player : public Unit          bool HasFreeBattleGroundQueueId()          {              for (int i=0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; i++) -                if (m_bgBattleGroundQueueID[i].bgQueueType == 0) +                if (m_bgBattleGroundQueueID[i].bgQueueTypeId == BATTLEGROUND_QUEUE_NONE)                      return true;              return false;          } -        void RemoveBattleGroundQueueId(uint32 val) +        void RemoveBattleGroundQueueId(BattleGroundQueueTypeId val)          {              for (int i=0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; i++)              { -                if (m_bgBattleGroundQueueID[i].bgQueueType == val) +                if (m_bgBattleGroundQueueID[i].bgQueueTypeId == val)                  { -                    m_bgBattleGroundQueueID[i].bgQueueType = 0; +                    m_bgBattleGroundQueueID[i].bgQueueTypeId = BATTLEGROUND_QUEUE_NONE;                      m_bgBattleGroundQueueID[i].invitedToInstance = 0;                      return;                  }              }          } -        void SetInviteForBattleGroundQueueType(uint32 bgQueueType, uint32 instanceId) +        void SetInviteForBattleGroundQueueType(BattleGroundQueueTypeId bgQueueTypeId, uint32 instanceId)          {              for (int i=0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; i++) -                if (m_bgBattleGroundQueueID[i].bgQueueType == bgQueueType) +                if (m_bgBattleGroundQueueID[i].bgQueueTypeId == bgQueueTypeId)                      m_bgBattleGroundQueueID[i].invitedToInstance = instanceId;          }          bool IsInvitedForBattleGroundInstance(uint32 instanceId) const @@ -1887,18 +1951,10 @@ class TRINITY_DLL_SPEC Player : public Unit                      return true;              return false;          } -        uint32 GetBattleGroundEntryPointMap() const { return m_bgEntryPointMap; } -        float GetBattleGroundEntryPointX() const { return m_bgEntryPointX; } -        float GetBattleGroundEntryPointY() const { return m_bgEntryPointY; } -        float GetBattleGroundEntryPointZ() const { return m_bgEntryPointZ; } -        float GetBattleGroundEntryPointO() const { return m_bgEntryPointO; } +        WorldLocation const& GetBattleGroundEntryPoint() const { return m_bgEntryPoint; }          void SetBattleGroundEntryPoint(uint32 Map, float PosX, float PosY, float PosZ, float PosO )          { -            m_bgEntryPointMap = Map; -            m_bgEntryPointX = PosX; -            m_bgEntryPointY = PosY; -            m_bgEntryPointZ = PosZ; -            m_bgEntryPointO = PosO; +            m_bgEntryPoint = WorldLocation(Map,PosX,PosY,PosZ,PosO);          }          void SetBGTeam(uint32 team) { m_bgTeam = team; } @@ -1910,7 +1966,7 @@ class TRINITY_DLL_SPEC Player : public Unit          void ReportedAfkBy(Player* reporter);          void ClearAfkReports() { m_bgAfkReporter.clear(); } -        bool GetBGAccessByLevel(uint32 bgTypeId) const; +        bool GetBGAccessByLevel(BattleGroundTypeId bgTypeId) const;          bool isAllowUseBattleGroundObject();          bool isTotalImmunity(); @@ -1951,6 +2007,7 @@ class TRINITY_DLL_SPEC Player : public Unit          MovementInfo m_movementInfo;          uint32 m_lastFallTime;          float  m_lastFallZ; +        Unit *m_mover;          void SetFallInformation(uint32 time, float z)          {              m_lastFallTime = time; @@ -1961,6 +2018,7 @@ class TRINITY_DLL_SPEC Player : public Unit          bool CanFly() const { return HasUnitMovementFlag(MOVEMENTFLAG_CAN_FLY); }          bool IsFlying() const { return HasUnitMovementFlag(MOVEMENTFLAG_FLYING); } +        bool IsAllowUseFlyMountsHere() const;          void HandleDrowning();          void HandleFallDamage(MovementInfo& movementInfo); @@ -1968,8 +2026,20 @@ class TRINITY_DLL_SPEC Player : public Unit          void SetClientControl(Unit* target, uint8 allowMove); -        uint64 GetFarSight() const { return GetUInt64Value(PLAYER_FARSIGHT); } -        void SetFarSight(uint64 guid) { SetUInt64Value(PLAYER_FARSIGHT, guid); } +        void EnterVehicle(Vehicle *vehicle); +        void ExitVehicle(Vehicle *vehicle); + +        void SetMover(Unit* target) { m_mover = target ? target : this; } +        void StopCastingCharm() { Uncharm(); } +        void StopCastingBindSight(); +        uint64 GetFarSightGUID() const { return GetUInt64Value(PLAYER_FARSIGHT); } +        void SetFarSightGUID(uint64 guid) { SetUInt64Value(PLAYER_FARSIGHT, guid); } +        WorldObject* GetFarsightTarget() const; +        void ClearFarsight(); +        void SetFarsightTarget(WorldObject* target); +        // Controls if vision is currently on farsight object, updated in FAR_SIGHT opcode +        void SetFarsightVision(bool apply) { m_farsightVision = apply; } +        bool HasFarsightVision() const { return m_farsightVision; }          // Transports          Transport * GetTransport() const { return m_transport; } @@ -1980,6 +2050,7 @@ class TRINITY_DLL_SPEC Player : public Unit          float GetTransOffsetZ() const { return m_movementInfo.t_z; }          float GetTransOffsetO() const { return m_movementInfo.t_o; }          uint32 GetTransTime() const { return m_movementInfo.t_time; } +        int8 GetTransSeat() const { return m_movementInfo.t_seat; }          uint32 GetSaveTimer() const { return m_nextSave; }          void   SetSaveTimer(uint32 timer) { m_nextSave = timer; } @@ -1998,6 +2069,7 @@ class TRINITY_DLL_SPEC Player : public Unit          float m_homebindX;          float m_homebindY;          float m_homebindZ; +        void RelocateToHomebind() { SetMapId(m_homebindMapId); Relocate(m_homebindX,m_homebindY,m_homebindZ); }          // currently visible objects at player client          typedef std::set<uint64> ClientGUIDs; @@ -2031,7 +2103,6 @@ class TRINITY_DLL_SPEC Player : public Unit          uint32 GetOldPetSpell() const { return m_oldpetspell; }          void SetOldPetSpell(uint32 petspell) { m_oldpetspell = petspell; } -          /*********************************************************/          /***                 INSTANCE SYSTEM                   ***/          /*********************************************************/ @@ -2064,11 +2135,10 @@ class TRINITY_DLL_SPEC Player : public Unit          GroupReference& GetGroupRef() { return m_group; }          void SetGroup(Group *group, int8 subgroup = -1);          uint8 GetSubGroup() const { return m_group.getSubGroup(); } -        uint32 GetGroupUpdateFlag() { return m_groupUpdateMask; } +        uint32 GetGroupUpdateFlag() const { return m_groupUpdateMask; }          void SetGroupUpdateFlag(uint32 flag) { m_groupUpdateMask |= flag; } -        uint64 GetAuraUpdateMask() { return m_auraUpdateMask; } -        void SetAuraUpdateMask(uint8 slot) { m_auraUpdateMask |= (uint64(1) << slot); } -        void UnsetAuraUpdateMask(uint8 slot) { m_auraUpdateMask &= ~(uint64(1) << slot); } +        const uint64& GetAuraUpdateMaskForRaid() const { return m_auraRaidUpdateMask; } +        void SetAuraUpdateMaskForRaid(uint8 slot) { m_auraRaidUpdateMask |= (uint64(1) << slot); }          Player* GetNextRandomRaidMember(float radius);          PartyResult CanUninviteFromGroup() const; @@ -2080,6 +2150,18 @@ class TRINITY_DLL_SPEC Player : public Unit          WorldLocation& GetTeleportDest() { return m_teleport_dest; }          DeclinedName const* GetDeclinedNames() const { return m_declinedname; } +        uint8 GetRunesState() const { return m_runes->runeState; } +        uint8 GetBaseRune(uint8 index) const { return m_runes->runes[index].BaseRune; } +        uint8 GetCurrentRune(uint8 index) const { return m_runes->runes[index].CurrentRune; } +        uint8 GetRuneCooldown(uint8 index) const { return m_runes->runes[index].Cooldown; } +        void SetBaseRune(uint8 index, uint8 baseRune) { m_runes->runes[index].BaseRune = baseRune; } +        void SetCurrentRune(uint8 index, uint8 currentRune) { m_runes->runes[index].CurrentRune = currentRune; } +        void SetRuneCooldown(uint8 index, uint8 cooldown) { m_runes->runes[index].Cooldown = cooldown; m_runes->SetRuneState(index, (cooldown == 0) ? true : false); } +        void ConvertRune(uint8 index, uint8 newType); +        void ResyncRunes(uint8 count); +        void AddRunePower(uint8 index); +        void InitRunes(); +        AchievementMgr& GetAchievementMgr() { return m_achievementMgr; }          bool HasTitle(uint32 bitIndex);          bool HasTitle(CharTitlesEntry const* title) { return HasTitle(title->bit_index); }          void SetTitle(CharTitlesEntry const* title); @@ -2092,20 +2174,17 @@ class TRINITY_DLL_SPEC Player : public Unit          /* this variable is set to bg->m_InstanceID, when player is teleported to BG - (it is battleground's GUID)*/          uint32 m_bgBattleGroundID; +        BattleGroundTypeId m_bgTypeID;          /*          this is an array of BG queues (BgTypeIDs) in which is player          */          struct BgBattleGroundQueueID_Rec          { -            uint32 bgQueueType; +            BattleGroundQueueTypeId bgQueueTypeId;              uint32 invitedToInstance;          };          BgBattleGroundQueueID_Rec m_bgBattleGroundQueueID[PLAYER_MAX_BATTLEGROUND_QUEUES]; -        uint32 m_bgEntryPointMap; -        float m_bgEntryPointX; -        float m_bgEntryPointY; -        float m_bgEntryPointZ; -        float m_bgEntryPointO; +        WorldLocation m_bgEntryPoint;          std::set<uint32> m_bgAfkReporter;          uint8 m_bgAfkReportedCount; @@ -2129,6 +2208,7 @@ class TRINITY_DLL_SPEC Player : public Unit          void _LoadActions(QueryResult *result);          void _LoadAuras(QueryResult *result, uint32 timediff); +        void _LoadGlyphAuras();          void _LoadBoundInstances(QueryResult *result);          void _LoadInventory(QueryResult *result, uint32 timediff);          void _LoadMailInit(QueryResult *resultUnread, QueryResult *resultDelivery); @@ -2138,6 +2218,7 @@ class TRINITY_DLL_SPEC Player : public Unit          void _LoadDailyQuestStatus(QueryResult *result);          void _LoadGroup(QueryResult *result);          void _LoadReputation(QueryResult *result); +        void _LoadSkills();          void _LoadSpells(QueryResult *result);          void _LoadTutorials(QueryResult *result);          void _LoadFriendList(QueryResult *result); @@ -2179,7 +2260,6 @@ class TRINITY_DLL_SPEC Player : public Unit          time_t m_lastHonorUpdateTime;          void outDebugValues() const; -        bool _removeSpell(uint16 spell_id);          uint64 m_lootGuid;          uint32 m_race; @@ -2216,6 +2296,11 @@ class TRINITY_DLL_SPEC Player : public Unit          ActionButtonList m_actionButtons;          float m_auraBaseMod[BASEMOD_END][MOD_END]; +        int16 m_baseRatingValue[MAX_COMBAT_RATING]; +        uint16 m_baseSpellDamage; +        uint16 m_baseSpellHealing; +        uint16 m_baseFeralAP; +        uint16 m_baseManaRegen;          SpellModList m_spellMods[MAX_SPELLMOD];          int32 m_SpellModRemoveCount; @@ -2249,7 +2334,6 @@ class TRINITY_DLL_SPEC Player : public Unit          bool   m_DailyQuestChanged;          time_t m_lastDailyQuestTime; -        uint32 m_regenTimer;          uint32 m_breathTimer;          uint32 m_drunkTimer;          uint16 m_drunk; @@ -2268,8 +2352,10 @@ class TRINITY_DLL_SPEC Player : public Unit          uint32 m_ArmorProficiency;          bool m_canParry;          bool m_canBlock; +        bool m_canTitanGrip;          uint8 m_swingErrorMsg;          float m_ammoDPS; +          ////////////////////Rest System/////////////////////          int time_inn_enter;          uint32 inn_pos_mapid; @@ -2286,6 +2372,7 @@ class TRINITY_DLL_SPEC Player : public Unit          uint32 m_resetTalentsCost;          time_t m_resetTalentsTime;          uint32 m_usedTalentCount; +        uint32 m_questRewardTalentCount;          // Social          PlayerSocial *m_social; @@ -2294,7 +2381,7 @@ class TRINITY_DLL_SPEC Player : public Unit          GroupReference m_group;          Group *m_groupInvite;          uint32 m_groupUpdateMask; -        uint64 m_auraUpdateMask; +        uint64 m_auraRaidUpdateMask;          // Temporarily removed pet cache          uint32 m_temporaryUnsummonedPetNumber; @@ -2316,6 +2403,8 @@ class TRINITY_DLL_SPEC Player : public Unit          bool m_farsightVision;          DeclinedName *m_declinedname; +        Runes *m_runes; +        AchievementMgr m_achievementMgr;      private:          // internal common parts for CanStore/StoreItem functions          uint8 _CanStoreItem_InSpecificSlot( uint8 bag, uint8 slot, ItemPosCountVec& dest, ItemPrototype const *pProto, uint32& count, bool swap, Item *pSrcItem ) const; @@ -2323,6 +2412,8 @@ class TRINITY_DLL_SPEC Player : public Unit          uint8 _CanStoreItem_InInventorySlots( uint8 slot_begin, uint8 slot_end, ItemPosCountVec& dest, ItemPrototype const *pProto, uint32& count, bool merge, Item *pSrcItem, uint8 skip_bag, uint8 skip_slot ) const;          Item* _StoreItem( uint16 pos, Item *pItem, uint32 count, bool clone, bool update ); +        void AdjustQuestReqItemCount( Quest const* pQuest, QuestStatusData& questStatusData ); +          GridReference<Player> m_gridRef;          MapReference m_mapRef;  | 
