TrinityCore
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
53{
61};
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
115 {
116 ForcedReactions::const_iterator forceItr = _forcedReactions.find(factionId);
117 return forceItr != _forcedReactions.end() ? &forceItr->second : nullptr;
118 }
119
120 bool IsParagonReputation(FactionEntry const* factionEntry) const;
121 int32 GetParagonLevel(uint32 paragonFactionId) const;
122 int32 GetParagonLevel(FactionEntry const* paragonFactionEntry) const;
123
124 bool HasMaximumRenownReputation(FactionEntry const* factionEntry) const;
125 bool IsRenownReputation(FactionEntry const* factionEntry) const;
126 int32 GetRenownLevel(FactionEntry const* renownFactionEntry) const;
127 int32 GetRenownLevelThreshold(FactionEntry const* renownFactionEntry) const;
128 int32 GetRenownMaxLevel(FactionEntry const* renownFactionEntry) const;
129
130 public: // modifiers
131 bool SetReputation(FactionEntry const* factionEntry, int32 standing)
132 {
133 return SetReputation(factionEntry, standing, false, false, false);
134 }
135 bool ModifyReputation(FactionEntry const* factionEntry, int32 standing, bool spillOverOnly = false, bool noSpillover = false)
136 {
137 return SetReputation(factionEntry, standing, true, spillOverOnly, noSpillover);
138 }
139
140 void SetVisible(FactionTemplateEntry const* factionTemplateEntry);
141 void SetVisible(FactionEntry const* factionEntry);
142 void SetAtWar(RepListID repListID, bool on);
143 void SetInactive(RepListID repListID, bool on);
144
145 void ApplyForceReaction(uint32 faction_id, ReputationRank rank, bool apply);
146
148 bool SetOneFactionReputation(FactionEntry const* factionEntry, int32 standing, bool incremental);
149
150 public: // senders
151 void SendInitialReputations();
152 void SendForceReactions();
153 void SendState(FactionState const* faction);
154
155 private: // internal helper functions
156 void Initialize();
157 ReputationFlags GetDefaultStateFlags(FactionEntry const* factionEntry) const;
158 bool SetReputation(FactionEntry const* factionEntry, int32 standing, bool incremental, bool spillOverOnly, bool noSpillover);
159 void SetVisible(FactionState* faction);
160 void SetAtWar(FactionState* faction, bool atWar) const;
161 void SetInactive(FactionState* faction, bool inactive) const;
162 void SendVisible(FactionState const* faction, bool visible = true) const;
163 void UpdateRankCounters(ReputationRank old_rank, ReputationRank new_rank);
164 int32 GetFactionDataIndexForRaceAndClass(FactionEntry const* factionEntry) const;
165 bool CanGainParagonReputationForFaction(FactionEntry const* factionEntry) const;
166
167 private:
176};
177
178#endif
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
std::shared_ptr< PreparedResultSet > PreparedQueryResult
#define TC_GAME_API
Definition: Define.h:123
uint8_t uint8
Definition: Define.h:144
int32_t int32
Definition: Define.h:138
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
static void SaveToDB(QuestPool const &pool, CharacterDatabaseTransaction trans)
Definition: QuestPools.cpp:50
uint32 RepListID
Definition: ReputationMgr.h:51
std::map< uint32, ReputationRank > ForcedReactions
Definition: ReputationMgr.h:64
ReputationFlags
Definition: ReputationMgr.h:34
TC_GAME_API uint32 const ReputationRankStrIndex[MAX_REPUTATION_RANK]
std::map< RepListID, FactionState > FactionStateList
Definition: ReputationMgr.h:63
DEFINE_ENUM_FLAG(ReputationFlags)
#define MAX_REPUTATION_RANK
ReputationRank
Definition: Guild.h:329
uint8 _honoredFactionCount
ReputationRank const * GetForcedRankIfAny(uint32 factionId) const
FactionStateList const & GetStateList() const
Definition: ReputationMgr.h:89
uint8 _visibleFactionCount
bool ModifyReputation(FactionEntry const *factionEntry, int32 standing, bool spillOverOnly=false, bool noSpillover=false)
uint8 GetHonoredFactionCount() const
Definition: ReputationMgr.h:85
uint8 GetReveredFactionCount() const
Definition: ReputationMgr.h:86
FactionState const * GetState(RepListID id) const
Definition: ReputationMgr.h:93
bool SetReputation(FactionEntry const *factionEntry, int32 standing)
uint8 _exaltedFactionCount
uint8 _reveredFactionCount
FactionStateList _factions
ForcedReactions _forcedReactions
static const int32 Reputation_Bottom
Definition: ReputationMgr.h:80
ReputationMgr(Player *owner)
Definition: ReputationMgr.h:71
bool _sendFactionIncreased
Play visual effect on next SMSG_SET_FACTION_STANDING sent.
static std::set< int32 > const ReputationRankThresholds
Definition: ReputationMgr.h:78
static const int32 Reputation_Cap
Definition: ReputationMgr.h:79
Player * _player
uint8 GetExaltedFactionCount() const
Definition: ReputationMgr.h:87
uint8 GetVisibleFactionCount() const
Definition: ReputationMgr.h:84
void apply(T *val)
Definition: ByteConverter.h:41
RepListID ReputationListID
Definition: ReputationMgr.h:55
EnumFlag< ReputationFlags > Flags
Definition: ReputationMgr.h:58
int32 VisualStandingIncrease
Definition: ReputationMgr.h:57