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 "Language.h"
24#include "DatabaseEnvFwd.h"
25#include "DBCStructure.h"
26#include "SharedDefines.h"
27#include <set>
28#include <map>
29
31
33{
34 None = 0x0000,
35 Visible = 0x0001, // makes visible in client (set or can be set at interaction with target of this faction)
36 AtWar = 0x0002, // enable AtWar-button in client. player controlled (except opposition team always war state), Flag only set on initial creation
37 Hidden = 0x0004, // hidden faction from reputation pane in client (player can gain reputation, but this update not sent to client)
38 Header = 0x0008, // Display as header in UI
39 Peaceful = 0x0010,
40 Inactive = 0x0020, // player controlled (CMSG_SET_FACTION_INACTIVE)
41 ShowPropagated = 0x0040,
42 HeaderShowsBar = 0x0080 // Header has its own reputation bar
43};
44
46
57
58typedef std::map<RepListID, FactionState> FactionStateList;
59typedef std::map<uint32, ReputationRank> ForcedReactions;
60
61class Player;
62
64{
65 public: // constructors and global modifiers
66 explicit ReputationMgr(Player* owner) : _player(owner),
67 _visibleFactionCount(0), _honoredFactionCount(0), _reveredFactionCount(0), _exaltedFactionCount(0), _sendFactionIncreased(false) { }
69
71 void LoadFromDB(PreparedQueryResult result);
72 public: // statics
73 static std::set<int32> const ReputationRankThresholds;
74 static const int32 Reputation_Cap;
76
77 static ReputationRank ReputationToRank(FactionEntry const* factionEntry, int32 standing);
78 public: // accessors
79 uint8 GetVisibleFactionCount() const { return _visibleFactionCount; }
80 uint8 GetHonoredFactionCount() const { return _honoredFactionCount; }
81 uint8 GetReveredFactionCount() const { return _reveredFactionCount; }
82 uint8 GetExaltedFactionCount() const { return _exaltedFactionCount; }
83
84 FactionStateList const& GetStateList() const { return _factions; }
85
86 FactionState const* GetState(FactionEntry const* factionEntry) const;
87
89 {
90 FactionStateList::const_iterator repItr = _factions.find (id);
91 return repItr != _factions.end() ? &repItr->second : nullptr;
92 }
93
94 bool IsAtWar(uint32 faction_id) const;
95 bool IsAtWar(FactionEntry const* factionEntry) const;
96 bool IsReputationAllowedForTeam(TeamId team, uint32 factionId) const;
97
98 int32 GetReputation(uint32 faction_id) const;
99 int32 GetReputation(FactionEntry const* factionEntry) const;
100 int32 GetBaseReputation(FactionEntry const* factionEntry) const;
101 int32 GetMinReputation(FactionEntry const* factionEntry) const;
102 int32 GetMaxReputation(FactionEntry const* factionEntry) const;
103
104 ReputationRank GetRank(FactionEntry const* factionEntry) const;
105 ReputationRank GetBaseRank(FactionEntry const* factionEntry) const;
106 std::string GetReputationRankName(FactionEntry const* factionEntry) const;;
107
108 ReputationRank const* GetForcedRankIfAny(FactionTemplateEntry const* factionTemplateEntry) const;
109 ReputationRank const* GetForcedRankIfAny(uint32 factionId) const;
110
111 public: // modifiers
112 bool SetReputation(FactionEntry const* factionEntry, int32 standing)
113 {
114 return SetReputation(factionEntry, standing, false, false);
115 }
116 bool ModifyReputation(FactionEntry const* factionEntry, int32 standing, bool spillOverOnly = false)
117 {
118 return SetReputation(factionEntry, standing, true, spillOverOnly);
119 }
120
121 void SetVisible(FactionTemplateEntry const* factionTemplateEntry);
122 void SetVisible(FactionEntry const* factionEntry);
123 void SetAtWar(RepListID repListID, bool on);
124 void SetInactive(RepListID repListID, bool on);
125
126 void ApplyForceReaction(uint32 faction_id, ReputationRank rank, bool apply);
127
129 bool SetOneFactionReputation(FactionEntry const* factionEntry, int32 standing, bool incremental);
130
131 public: // senders
132 void SendInitialReputations();
133 void SendForceReactions();
134 void SendState(FactionState const* faction);
135
136 private: // internal helper functions
137 void Initialize();
138 ReputationFlags GetDefaultStateFlags(FactionEntry const* factionEntry) const;
139 bool SetReputation(FactionEntry const* factionEntry, int32 standing, bool incremental, bool spillOverOnly);
140 void SetVisible(FactionState* faction);
141 void SetAtWar(FactionState* faction, bool atWar) const;
142 void SetInactive(FactionState* faction, bool inactive) const;
143 void SendVisible(FactionState const* faction) const;
144 void UpdateRankCounters(ReputationRank old_rank, ReputationRank new_rank);
145 int32 GetFactionDataIndexForRaceAndClass(FactionEntry const* factionEntry) const;
146
147 private:
156};
157
158#endif
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
std::shared_ptr< PreparedResultSet > PreparedQueryResult
#define TC_GAME_API
Definition Define.h:114
uint8_t uint8
Definition Define.h:135
int32_t int32
Definition Define.h:129
uint32_t uint32
Definition Define.h:133
#define DEFINE_ENUM_FLAG(enumType)
Definition EnumFlag.h:26
static void SaveToDB(QuestPool const &pool, CharacterDatabaseTransaction trans)
uint32 RepListID
std::map< uint32, ReputationRank > ForcedReactions
TC_GAME_API uint32 const ReputationRankStrIndex[MAX_REPUTATION_RANK]
std::map< RepListID, FactionState > FactionStateList
ReputationFlags
#define MAX_REPUTATION_RANK
TeamId
ReputationRank
uint8 _honoredFactionCount
bool ModifyReputation(FactionEntry const *factionEntry, int32 standing, bool spillOverOnly=false)
FactionStateList const & GetStateList() const
uint8 _visibleFactionCount
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
static const int32 Reputation_Cap
uint8 GetExaltedFactionCount() const
uint8 GetVisibleFactionCount() const
RepListID ReputationListID
EnumFlag< ReputationFlags > Flags