Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
ReputationMgr.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef SF_SKYFIRE_REPUTATION_MGR_H
7#define SF_SKYFIRE_REPUTATION_MGR_H
8
9#include "Common.h"
10#include "DBCStructure.h"
11#include "Language.h"
12#include "QueryResult.h"
13#include "SharedDefines.h"
14#include <map>
15
21
23{
24 FACTION_FLAG_NONE = 0x00, // no faction flag
25 FACTION_FLAG_VISIBLE = 0x01, // makes visible in client (set or can be set at interaction with target of this faction)
26 FACTION_FLAG_AT_WAR = 0x02, // enable AtWar-button in client. player controlled (except opposition team always war state), Flag only set on initial creation
27 FACTION_FLAG_HIDDEN = 0x04, // hidden faction from reputation pane in client (player can gain reputation, but this update not sent to client)
28 FACTION_FLAG_INVISIBLE_FORCED = 0x08, // always overwrite FACTION_FLAG_VISIBLE and hide faction in rep.list, used for hide opposite team factions
29 FACTION_FLAG_PEACE_FORCED = 0x10, // always overwrite FACTION_FLAG_AT_WAR, used for prevent war with own team factions
30 FACTION_FLAG_INACTIVE = 0x20, // player controlled, state stored in characters.data (CMSG_SET_FACTION_INACTIVE)
31 FACTION_FLAG_RIVAL = 0x40, // flag for the two competing outland factions
32 FACTION_FLAG_SPECIAL = 0x80 // horde and alliance home cities and their northrend allies have this flag
33};
34
46
47typedef std::map<RepListID, FactionState> FactionStateList;
48typedef std::map<uint32, ReputationRank> ForcedReactions;
49
50class Player;
51
53{
54public: // constructors and global modifiers
58
59 void SaveToDB(SQLTransaction& trans);
61public: // statics
63 static const int32 Reputation_Cap = 42999;
64 static const int32 Reputation_Bottom = -42000;
65
66 static ReputationRank ReputationToRank(int32 standing);
67public: // accessors
72
73 FactionStateList const& GetStateList() const { return _factions; }
74
75 FactionState const* GetState(FactionEntry const* factionEntry) const
76 {
77 return factionEntry->CanHaveReputation() ? GetState(factionEntry->reputationListID) : NULL;
78 }
79
81 {
82 FactionStateList::const_iterator repItr = _factions.find(id);
83 return repItr != _factions.end() ? &repItr->second : NULL;
84 }
85
86 bool IsAtWar(uint32 faction_id) const;
87 bool IsAtWar(FactionEntry const* factionEntry) const;
88
89 int32 GetReputation(uint32 faction_id) const;
90 int32 GetReputation(FactionEntry const* factionEntry) const;
91 int32 GetBaseReputation(FactionEntry const* factionEntry) const;
92
93 ReputationRank GetRank(FactionEntry const* factionEntry) const;
94 ReputationRank GetBaseRank(FactionEntry const* factionEntry) const;
96 {
97 return ReputationRankStrIndex[GetRank(factionEntry)];
98 };
99
100 ReputationRank const* GetForcedRankIfAny(FactionTemplateEntry const* factionTemplateEntry) const
101 {
102 ForcedReactions::const_iterator forceItr = _forcedReactions.find(factionTemplateEntry->faction);
103 return forceItr != _forcedReactions.end() ? &forceItr->second : NULL;
104 }
105
106public: // modifiers
107 bool SetReputation(FactionEntry const* factionEntry, int32 standing)
108 {
109 return SetReputation(factionEntry, standing, false);
110 }
111 bool ModifyReputation(FactionEntry const* factionEntry, int32 standing)
112 {
113 return SetReputation(factionEntry, standing, true);
114 }
115
116 void SetVisible(FactionTemplateEntry const* factionTemplateEntry);
117 void SetVisible(FactionEntry const* factionEntry);
118 void SetAtWar(FactionIndex FactionIndexID);
119 void SetNotAtWar(FactionIndex FactionIndexID);
120 void SetInactive(RepListID repListID, bool on);
121
122 void ApplyForceReaction(uint32 faction_id, ReputationRank rank, bool apply);
123
125 bool SetOneFactionReputation(FactionEntry const* factionEntry, int32 standing, bool incremental);
126
127public: // senders
129 void SendForceReactions();
130 void SendState(FactionState const* faction);
131 void SendStates();
132
133private: // internal helper functions
134 void Initialize();
135 uint32 GetDefaultStateFlags(FactionEntry const* factionEntry) const;
136 bool SetReputation(FactionEntry const* factionEntry, int32 standing, bool incremental);
137 void SetVisible(FactionState* faction);
138 void SetAtWar(FactionState* faction, bool atWar) const;
139 void SetInactive(FactionState* faction, bool inactive) const;
140 void SendVisible(FactionState const* faction) const;
141 void UpdateRankCounters(ReputationRank old_rank, ReputationRank new_rank);
142 float GetLFGBonus(FactionEntry const* factionEntry);
143private:
152};
153
154#endif
std::int32_t int32
Definition Define.h:73
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
@ LANG_REP_FRIENDLY
Definition Language.h:329
@ LANG_REP_HONORED
Definition Language.h:330
@ LANG_REP_NEUTRAL
Definition Language.h:328
@ LANG_REP_REVERED
Definition Language.h:331
@ LANG_REP_HOSTILE
Definition Language.h:326
@ LANG_REP_HATED
Definition Language.h:325
@ LANG_REP_EXALTED
Definition Language.h:332
@ LANG_REP_UNFRIENDLY
Definition Language.h:327
Skyfire::AutoPtr< PreparedResultSet, Skyfire::Mutex > PreparedQueryResult
Definition QueryResult.h:94
uint8 FactionIndex
static uint32 ReputationRankStrIndex[MAX_REPUTATION_RANK]
uint32 RepListID
FactionFlags
@ FACTION_FLAG_INACTIVE
@ FACTION_FLAG_PEACE_FORCED
@ FACTION_FLAG_INVISIBLE_FORCED
@ FACTION_FLAG_HIDDEN
@ FACTION_FLAG_VISIBLE
@ FACTION_FLAG_AT_WAR
@ FACTION_FLAG_SPECIAL
@ FACTION_FLAG_RIVAL
@ FACTION_FLAG_NONE
std::map< uint32, ReputationRank > ForcedReactions
std::map< RepListID, FactionState > FactionStateList
#define MAX_REPUTATION_RANK
ReputationRank
Skyfire::AutoPtr< Transaction, Skyfire::Mutex > SQLTransaction
Definition Transaction.h:42
uint8 _honoredFactionCount
ReputationRank GetBaseRank(FactionEntry const *factionEntry) const
float GetLFGBonus(FactionEntry const *factionEntry)
void SetVisible(FactionTemplateEntry const *factionTemplateEntry)
FactionStateList const & GetStateList() const
int32 GetBaseReputation(FactionEntry const *factionEntry) const
uint8 _visibleFactionCount
void SendVisible(FactionState const *faction) const
uint8 GetHonoredFactionCount() const
uint8 GetReveredFactionCount() const
static const int32 PointsInRank[MAX_REPUTATION_RANK]
void SetAtWar(FactionIndex FactionIndexID)
FactionState const * GetState(RepListID id) const
void SendState(FactionState const *faction)
int32 GetReputation(uint32 faction_id) const
uint32 GetDefaultStateFlags(FactionEntry const *factionEntry) const
void SaveToDB(SQLTransaction &trans)
bool SetReputation(FactionEntry const *factionEntry, int32 standing)
void ApplyForceReaction(uint32 faction_id, ReputationRank rank, bool apply)
ReputationRank GetRank(FactionEntry const *factionEntry) const
void SendInitialReputations()
bool ModifyReputation(FactionEntry const *factionEntry, int32 standing)
uint8 _exaltedFactionCount
FactionState const * GetState(FactionEntry const *factionEntry) const
uint8 _reveredFactionCount
FactionStateList _factions
ForcedReactions _forcedReactions
static const int32 Reputation_Bottom
ReputationMgr(Player *owner)
uint32 GetReputationRankStrIndex(FactionEntry const *factionEntry) const
bool IsAtWar(uint32 faction_id) const
bool SetOneFactionReputation(FactionEntry const *factionEntry, int32 standing, bool incremental)
Public for chat command needs.
bool _sendFactionIncreased
void SetNotAtWar(FactionIndex FactionIndexID)
void SendForceReactions()
static ReputationRank ReputationToRank(int32 standing)
void UpdateRankCounters(ReputationRank old_rank, ReputationRank new_rank)
static const int32 Reputation_Cap
uint8 GetExaltedFactionCount() const
uint8 GetVisibleFactionCount() const
void LoadFromDB(PreparedQueryResult result)
ReputationRank const * GetForcedRankIfAny(FactionTemplateEntry const *factionTemplateEntry) const
void SetInactive(RepListID repListID, bool on)
bool CanHaveReputation() const
int32 reputationListID
RepListID ReputationListID
uint32 faction