diff options
Diffstat (limited to 'src/game/Player.h')
-rw-r--r-- | src/game/Player.h | 92 |
1 files changed, 61 insertions, 31 deletions
diff --git a/src/game/Player.h b/src/game/Player.h index a6f1b37f2ab..cc0cc83b3b0 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -789,14 +789,17 @@ enum PlayerLoginQueryIndex PLAYER_LOGIN_QUERY_LOADACHIEVEMENTS = 18, PLAYER_LOGIN_QUERY_LOADCRITERIAPROGRESS = 19, PLAYER_LOGIN_QUERY_LOADEQUIPMENTSETS = 20, - MAX_PLAYER_LOGIN_QUERY = 21 + PLAYER_LOGIN_QUERY_LOADBGDATA = 21, + MAX_PLAYER_LOGIN_QUERY = 22 }; enum PlayerDelayedOperations { - DELAYED_SAVE_PLAYER = 1, - DELAYED_RESURRECT_PLAYER = 2, - DELAYED_SPELL_CAST_DESERTER = 4, + DELAYED_SAVE_PLAYER = 0x01, + DELAYED_RESURRECT_PLAYER = 0x02, + DELAYED_SPELL_CAST_DESERTER = 0x04, + DELAYED_BG_MOUNT_RESTORE = 0x08, ///< Flag to restore mount state after teleport from BG + DELAYED_BG_TAXI_RESTORE = 0x10, ///< Flag to restore taxi state after teleport from BG DELAYED_END }; @@ -882,7 +885,36 @@ class TRINITY_DLL_SPEC PlayerTaxi std::ostringstream& operator<< (std::ostringstream& ss, PlayerTaxi const& taxi); -class TRINITY_DLL_SPEC Player : public Unit +class Player; + +/// Holder for BattleGround data +struct BGData +{ + BGData() : bgInstanceID(0), bgTypeID(BATTLEGROUND_TYPE_NONE), bgAfkReportedCount(0), bgAfkReportedTimer(0), + bgTeam(0), mountSpell(0) { ClearTaxiPath(); } + + + uint32 bgInstanceID; ///< This variable is set to bg->m_InstanceID, + /// when player is teleported to BG - (it is battleground's GUID) + BattleGroundTypeId bgTypeID; + + std::set<uint32> bgAfkReporter; + uint8 bgAfkReportedCount; + time_t bgAfkReportedTimer; + + uint32 bgTeam; ///< What side the player will be added to + + + uint32 mountSpell; + uint32 taxiPath[2]; + + WorldLocation joinPos; ///< From where player entered BG + + void ClearTaxiPath() { taxiPath[0] = taxiPath[1] = 0; } + bool HasTaxiPath() const { return taxiPath[0] && taxiPath[1]; } +}; + +class MANGOS_DLL_SPEC Player : public Unit { friend class WorldSession; friend void Item::AddToUpdateQueueOf(Player *player); @@ -907,6 +939,8 @@ class TRINITY_DLL_SPEC Player : public Unit return TeleportTo(loc.mapid, loc.coord_x, loc.coord_y, loc.coord_z, loc.orientation, options); } + bool TeleportToBGEntryPoint(); + void SetSummonPoint(uint32 mapid, float x, float y, float z) { m_summon_expire = time(NULL) + MAX_PLAYER_SUMMON_DELAY; @@ -954,6 +988,7 @@ class TRINITY_DLL_SPEC Player : public Unit bool ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc = NULL, uint32 spellid = 0); bool ActivateTaxiPathTo(uint32 taxi_path_id, uint32 spellid = 0); void CleanupAfterTaxiFlight(); + void ContinueTaxiFlight(); // mount_id can be used in scripting calls bool isAcceptWhispers() const { return m_ExtraFlags & PLAYER_EXTRA_ACCEPT_WHISPERS; } void SetAcceptWhispers(bool on) { if(on) m_ExtraFlags |= PLAYER_EXTRA_ACCEPT_WHISPERS; else m_ExtraFlags &= ~PLAYER_EXTRA_ACCEPT_WHISPERS; } @@ -1855,10 +1890,10 @@ class TRINITY_DLL_SPEC Player : public Unit /*** BATTLEGROUND SYSTEM ***/ /*********************************************************/ - bool InBattleGround() const { return m_bgBattleGroundID != 0; } + bool InBattleGround() const { return m_bgData.bgInstanceID != 0; } bool InArena() const; - uint32 GetBattleGroundId() const { return m_bgBattleGroundID; } - BattleGroundTypeId GetBattleGroundTypeId() const { return m_bgTypeID; } + uint32 GetBattleGroundId() const { return m_bgData.bgInstanceID; } + BattleGroundTypeId GetBattleGroundTypeId() const { return m_bgData.bgTypeID; } BattleGround* GetBattleGround() const; @@ -1894,8 +1929,8 @@ class TRINITY_DLL_SPEC Player : public Unit void SetBattleGroundId(uint32 val, BattleGroundTypeId bgTypeId) { - m_bgBattleGroundID = val; - m_bgTypeID = bgTypeId; + m_bgData.bgInstanceID = val; + m_bgData.bgTypeID = bgTypeId; } uint32 AddBattleGroundQueueId(BattleGroundQueueTypeId val) { @@ -1942,20 +1977,17 @@ class TRINITY_DLL_SPEC Player : public Unit return true; return false; } - WorldLocation const& GetBattleGroundEntryPoint() const { return m_bgEntryPoint; } - void SetBattleGroundEntryPoint(uint32 Map, float PosX, float PosY, float PosZ, float PosO ) - { - m_bgEntryPoint = WorldLocation(Map,PosX,PosY,PosZ,PosO); - } + WorldLocation const& GetBattleGroundEntryPoint() const { return m_bgData.joinPos; } + void SetBattleGroundEntryPoint(); - void SetBGTeam(uint32 team) { m_bgTeam = team; } - uint32 GetBGTeam() const { return m_bgTeam ? m_bgTeam : GetTeam(); } + void SetBGTeam(uint32 team) { m_bgData.bgTeam = team; } + uint32 GetBGTeam() const { return m_bgData.bgTeam ? m_bgData.bgTeam : GetTeam(); } void LeaveBattleground(bool teleportToEntryPoint = true); bool CanJoinToBattleground() const; bool CanReportAfkDueToLimit(); void ReportedAfkBy(Player* reporter); - void ClearAfkReports() { m_bgAfkReporter.clear(); } + void ClearAfkReports() { m_bgData.bgAfkReporter.clear(); } bool GetBGAccessByLevel(BattleGroundTypeId bgTypeId) const; bool isTotalImmunity(); @@ -2035,7 +2067,6 @@ class TRINITY_DLL_SPEC Player : public Unit float m_homebindX; float m_homebindY; float m_homebindZ; - void RelocateToHomebind(uint32 & newMap) { newMap = m_homebindMapId; Relocate(m_homebindX,m_homebindY,m_homebindZ); } // currently visible objects at player client typedef std::set<uint64> ClientGUIDs; @@ -2158,13 +2189,12 @@ class TRINITY_DLL_SPEC Player : public Unit bool canSeeSpellClickOn(Creature const* creature) const; protected: + uint32 m_contestedPvPTimer; + /*********************************************************/ /*** BATTLEGROUND SYSTEM ***/ /*********************************************************/ - /* 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 */ @@ -2173,15 +2203,9 @@ class TRINITY_DLL_SPEC Player : public Unit BattleGroundQueueTypeId bgQueueTypeId; uint32 invitedToInstance; }; - BgBattleGroundQueueID_Rec m_bgBattleGroundQueueID[PLAYER_MAX_BATTLEGROUND_QUEUES]; - WorldLocation m_bgEntryPoint; - std::set<uint32> m_bgAfkReporter; - uint8 m_bgAfkReportedCount; - time_t m_bgAfkReportedTimer; - uint32 m_contestedPvPTimer; - - uint32 m_bgTeam; // what side the player will be added to + BgBattleGroundQueueID_Rec m_bgBattleGroundQueueID[PLAYER_MAX_BATTLEGROUND_QUEUES]; + BGData m_bgData; /*********************************************************/ /*** QUEST SYSTEM ***/ @@ -2214,6 +2238,7 @@ class TRINITY_DLL_SPEC Player : public Unit void _LoadDeclinedNames(QueryResult *result); void _LoadArenaTeamInfo(QueryResult *result); void _LoadEquipmentSets(QueryResult *result); + void _LoadBGData(QueryResult* result); /*********************************************************/ /*** SAVE SYSTEM ***/ @@ -2227,6 +2252,7 @@ class TRINITY_DLL_SPEC Player : public Unit void _SaveDailyQuestStatus(); void _SaveSpells(); void _SaveEquipmentSets(); + void _SaveBGData(); void _SetCreateBits(UpdateMask *updateMask, Player *target) const; void _SetUpdateBits(UpdateMask *updateMask, Player *target) const; @@ -2389,7 +2415,11 @@ class TRINITY_DLL_SPEC Player : public Unit bool IsHasDelayedTeleport() const { return m_bHasDelayedTeleport; } void SetDelayedTeleportFlag(bool setting) { m_bHasDelayedTeleport = setting; } - void ScheduleDelayedOperation(uint32 operation); + void ScheduleDelayedOperation(uint32 operation) + { + if(operation < DELAYED_END) + m_DelayedOperations |= operation; + } GridReference<Player> m_gridRef; MapReference m_mapRef; |