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 static int32 GetBaseReputation(FactionEntry const* factionEntry, uint8 race, uint8 playerClass);
106 int32 GetMinReputation(FactionEntry const* factionEntry) const;
107 int32 GetMaxReputation(FactionEntry const* factionEntry) const;
108
109 ReputationRank GetRank(FactionEntry const* factionEntry) const;
110 ReputationRank GetBaseRank(FactionEntry const* factionEntry) const;
111 std::string GetReputationRankName(FactionEntry const* factionEntry) const;
112
113 ReputationRank const* GetForcedRankIfAny(FactionTemplateEntry const* factionTemplateEntry) const;
114 ReputationRank const* GetForcedRankIfAny(uint32 factionId) const;
115
116 bool IsParagonReputation(FactionEntry const* factionEntry) const;
117 int32 GetParagonLevel(uint32 paragonFactionId) const;
118 int32 GetParagonLevel(FactionEntry const* paragonFactionEntry) const;
119
120 bool HasMaximumRenownReputation(FactionEntry const* factionEntry) const;
121 bool IsRenownReputation(FactionEntry const* factionEntry) const;
122 int32 GetRenownLevel(FactionEntry const* renownFactionEntry) const;
123 int32 GetRenownLevelThreshold(FactionEntry const* renownFactionEntry) const;
124 int32 GetRenownMaxLevel(FactionEntry const* renownFactionEntry) const;
125
126 public: // modifiers
127 bool SetReputation(FactionEntry const* factionEntry, int32 standing)
128 {
129 return SetReputation(factionEntry, standing, false, false, false);
130 }
131 bool ModifyReputation(FactionEntry const* factionEntry, int32 standing, bool spillOverOnly = false, bool noSpillover = false)
132 {
133 return SetReputation(factionEntry, standing, true, spillOverOnly, noSpillover);
134 }
135
136 void SetVisible(FactionTemplateEntry const* factionTemplateEntry);
137 void SetVisible(FactionEntry const* factionEntry);
138 void SetAtWar(RepListID repListID, bool on);
139 void SetInactive(RepListID repListID, bool on);
140
141 void ApplyForceReaction(uint32 faction_id, ReputationRank rank, bool apply);
142
144 bool SetOneFactionReputation(FactionEntry const* factionEntry, int32 standing, bool incremental);
145
146 public: // senders
147 void SendInitialReputations();
148 void SendState(FactionState const* faction);
149
150 private: // internal helper functions
151 void Initialize();
152 ReputationFlags GetDefaultStateFlags(FactionEntry const* factionEntry) const;
153 bool SetReputation(FactionEntry const* factionEntry, int32 standing, bool incremental, bool spillOverOnly, bool noSpillover);
154 void SetVisible(FactionState* faction);
155 void SetAtWar(FactionState* faction, bool atWar) const;
156 void SetInactive(FactionState* faction, bool inactive) const;
157 void SendVisible(FactionState const* faction, bool visible = true) const;
158 void UpdateRankCounters(ReputationRank old_rank, ReputationRank new_rank);
159 int32 GetFactionDataIndexForRaceAndClass(FactionEntry const* factionEntry) const;
160 static int32 GetFactionDataIndexForRaceAndClass(FactionEntry const* factionEntry, uint8 race, uint8 playerClass);
161 bool CanGainParagonReputationForFaction(FactionEntry const* factionEntry) const;
162
163 private:
172};
173
174#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