TrinityCore
Loading...
Searching...
No Matches
ReputationMgr.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef __TRINITY_REPUTATION_MGR_H
19#define __TRINITY_REPUTATION_MGR_H
20
21#include "Common.h"
22#include "EnumFlag.h"
23#include "DatabaseEnvFwd.h"
24#include "SharedDefines.h"
25#include <set>
26#include <map>
27
28struct FactionEntry;
30
32
34{
35 None = 0x0000,
36 Visible = 0x0001, // makes visible in client (set or can be set at interaction with target of this faction)
37 AtWar = 0x0002, // enable AtWar-button in client. player controlled (except opposition team always war state), Flag only set on initial creation
38 Hidden = 0x0004, // hidden faction from reputation pane in client (player can gain reputation, but this update not sent to client)
39 Header = 0x0008, // Display as header in UI
40 Peaceful = 0x0010,
41 Inactive = 0x0020, // player controlled (CMSG_SET_FACTION_INACTIVE)
42 ShowPropagated = 0x0040,
43 HeaderShowsBar = 0x0080, // Header has its own reputation bar
45 Guild = 0x0200,
46 GarrisonInvasion = 0x0400
47};
48
50
62
63typedef std::map<RepListID, FactionState> FactionStateList;
64typedef std::map<uint32, ReputationRank> ForcedReactions;
65
66class Player;
67
69{
70 public: // constructors and global modifiers
71 explicit ReputationMgr(Player* owner) : _player(owner),
72 _visibleFactionCount(0), _honoredFactionCount(0), _reveredFactionCount(0), _exaltedFactionCount(0), _sendFactionIncreased(false) { }
74
76 void LoadFromDB(PreparedQueryResult result);
77 public: // statics
78 static std::set<int32> const ReputationRankThresholds;
79 static const int32 Reputation_Cap;
81
82 static ReputationRank ReputationToRank(FactionEntry const* factionEntry, int32 standing);
83 public: // accessors
84 uint8 GetVisibleFactionCount() const { return _visibleFactionCount; }
85 uint8 GetHonoredFactionCount() const { return _honoredFactionCount; }
86 uint8 GetReveredFactionCount() const { return _reveredFactionCount; }
87 uint8 GetExaltedFactionCount() const { return _exaltedFactionCount; }
88
89 FactionStateList const& GetStateList() const { return _factions; }
90
91 FactionState const* GetState(FactionEntry const* factionEntry) const;
92
94 {
95 FactionStateList::const_iterator repItr = _factions.find (id);
96 return repItr != _factions.end() ? &repItr->second : nullptr;
97 }
98
99 bool IsAtWar(uint32 faction_id) const;
100 bool IsAtWar(FactionEntry const* factionEntry) const;
101
102 int32 GetReputation(uint32 faction_id) const;
103 int32 GetReputation(FactionEntry const* factionEntry) const;
104 int32 GetBaseReputation(FactionEntry const* factionEntry) const;
105 int32 GetMinReputation(FactionEntry const* factionEntry) const;
106 int32 GetMaxReputation(FactionEntry const* factionEntry) const;
107
108 ReputationRank GetRank(FactionEntry const* factionEntry) const;
109 ReputationRank GetBaseRank(FactionEntry const* factionEntry) const;
110 std::string GetReputationRankName(FactionEntry const* factionEntry) const;
111
112 ReputationRank const* GetForcedRankIfAny(FactionTemplateEntry const* factionTemplateEntry) const;
113 ReputationRank const* GetForcedRankIfAny(uint32 factionId) const;
114
115 bool IsParagonReputation(FactionEntry const* factionEntry) const;
116 int32 GetParagonLevel(uint32 paragonFactionId) const;
117 int32 GetParagonLevel(FactionEntry const* paragonFactionEntry) const;
118
119 bool HasMaximumRenownReputation(FactionEntry const* factionEntry) const;
120 bool IsRenownReputation(FactionEntry const* factionEntry) const;
121 int32 GetRenownLevel(FactionEntry const* renownFactionEntry) const;
122 int32 GetRenownLevelThreshold(FactionEntry const* renownFactionEntry) const;
123 int32 GetRenownMaxLevel(FactionEntry const* renownFactionEntry) const;
124
125 public: // modifiers
126 bool SetReputation(FactionEntry const* factionEntry, int32 standing)
127 {
128 return SetReputation(factionEntry, standing, false, false, false);
129 }
130 bool ModifyReputation(FactionEntry const* factionEntry, int32 standing, bool spillOverOnly = false, bool noSpillover = false)
131 {
132 return SetReputation(factionEntry, standing, true, spillOverOnly, noSpillover);
133 }
134
135 void SetVisible(FactionTemplateEntry const* factionTemplateEntry);
136 void SetVisible(FactionEntry const* factionEntry);
137 void SetAtWar(RepListID repListID, bool on);
138 void SetInactive(RepListID repListID, bool on);
139
140 void ApplyForceReaction(uint32 faction_id, ReputationRank rank, bool apply);
141
143 bool SetOneFactionReputation(FactionEntry const* factionEntry, int32 standing, bool incremental);
144
145 public: // senders
146 void SendInitialReputations();
147 void SendState(FactionState const* faction);
148
149 private: // internal helper functions
150 void Initialize();
151 ReputationFlags GetDefaultStateFlags(FactionEntry const* factionEntry) const;
152 bool SetReputation(FactionEntry const* factionEntry, int32 standing, bool incremental, bool spillOverOnly, bool noSpillover);
153 void SetVisible(FactionState* faction);
154 void SetAtWar(FactionState* faction, bool atWar) const;
155 void SetInactive(FactionState* faction, bool inactive) const;
156 void SendVisible(FactionState const* faction, bool visible = true) const;
157 void UpdateRankCounters(ReputationRank old_rank, ReputationRank new_rank);
158 int32 GetFactionDataIndexForRaceAndClass(FactionEntry const* factionEntry) const;
159 bool CanGainParagonReputationForFaction(FactionEntry const* factionEntry) const;
160
161 private:
170};
171
172#endif
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
std::shared_ptr< PreparedResultSet > PreparedQueryResult
#define TC_GAME_API
Definition Define.h:129
uint8_t uint8
Definition Define.h:156
int32_t int32
Definition Define.h:150
uint16_t uint16
Definition Define.h:155
uint32_t uint32
Definition Define.h:154
#define DEFINE_ENUM_FLAG(enumType)
Definition EnumFlag.h:26
static void SaveToDB(QuestPool const &pool, CharacterDatabaseTransaction trans)
uint32 RepListID
std::map< uint32, ReputationRank > ForcedReactions
ReputationFlags
TC_GAME_API uint32 const ReputationRankStrIndex[MAX_REPUTATION_RANK]
std::map< RepListID, FactionState > FactionStateList
#define MAX_REPUTATION_RANK
ReputationRank
Definition Guild.h:329
uint8 _honoredFactionCount
FactionStateList const & GetStateList() const
uint8 _visibleFactionCount
bool ModifyReputation(FactionEntry const *factionEntry, int32 standing, bool spillOverOnly=false, bool noSpillover=false)
uint8 GetHonoredFactionCount() const
uint8 GetReveredFactionCount() const
FactionState const * GetState(RepListID id) const
bool SetReputation(FactionEntry const *factionEntry, int32 standing)
uint8 _exaltedFactionCount
uint8 _reveredFactionCount
FactionStateList _factions
ForcedReactions _forcedReactions
static const int32 Reputation_Bottom
ReputationMgr(Player *owner)
bool _sendFactionIncreased
Play visual effect on next SMSG_SET_FACTION_STANDING sent.
static const int32 Reputation_Cap
uint8 GetExaltedFactionCount() const
uint8 GetVisibleFactionCount() const
RepListID ReputationListID
EnumFlag< ReputationFlags > Flags
int32 VisualStandingIncrease