65 while (itr != end && standing >= *itr)
85 TC_LOG_ERROR(
"misc",
"ReputationMgr::IsAtWar: Can't get AtWar flag of {} for unknown faction (faction id) #{}.",
_player->
GetName(), faction_id);
123 TC_LOG_ERROR(
"misc",
"ReputationMgr::GetReputation: Can't get reputation of {} for unknown faction (faction id) #{}.",
_player->
GetName(), faction_id);
213 data <<
uint32(itr->first);
214 data <<
uint32(itr->second);
221 uint32 count = faction ? 1 : 0;
228 size_t p_count = data.
wpos();
237 for (FactionStateList::iterator itr =
_factions.begin(); itr !=
_factions.end(); ++itr)
239 if (itr->second.needSend)
241 itr->second.needSend =
false;
244 data <<
uint32(itr->second.ReputationListID);
245 data <<
uint32(itr->second.Standing);
263 for (FactionStateList::iterator itr =
_factions.begin(); itr !=
_factions.end(); ++itr)
266 for (; a != itr->first; ++a)
273 data <<
uint8(itr->second.Flags.AsUnderlyingType());
274 data <<
uint32(itr->second.Standing);
276 itr->second.needSend =
false;
282 for (; a != count; ++a)
311 for (
unsigned int i = 1; i <
sFactionStore.GetNumRows(); i++)
318 newFaction.
ID = factionEntry->
ID;
344 if (repTemplate->faction[i])
349 int32 spilloverRep =
int32(standing * repTemplate->faction_rate[i]);
357 float spillOverRepOut = float(standing);
366 FactionStateList::iterator parentState =
_factions.find(parent->ReputationIndex);
381 for (SimpleFactionsList::const_iterator itr = flist->begin(); itr != flist->end(); ++itr)
385 if (factionEntryCalc == factionEntry ||
GetRank(factionEntryCalc) >
ReputationRank(factionEntryCalc->ParentFactionCap[0]))
387 int32 spilloverRep =
int32(spillOverRepOut * factionEntryCalc->ParentFactionMod[0]);
388 if (spilloverRep != 0 || !incremental)
420 standing += itr->second.Standing + BaseRep;
431 itr->second.Standing = standing - BaseRep;
432 itr->second.needSend =
true;
433 itr->second.needSave =
true;
439 else if (new_rank > old_rank)
442 if (new_rank > old_rank)
461 if (!factionTemplateEntry->
Faction)
506 FactionStateList::iterator itr =
_factions.find(repListID);
538 FactionStateList::iterator itr =
_factions.find(repListID);
575 Field* fields = result->Fetch();
613 if (faction->
Flags == dbFactionFlags)
620 while (result->NextRow());
626 for (FactionStateList::iterator itr =
_factions.begin(); itr !=
_factions.end(); ++itr)
628 if (itr->second.needSave)
638 stmt->
setInt32(2, itr->second.Standing);
639 stmt->
setUInt16(3, itr->second.Flags.AsUnderlyingType());
642 itr->second.needSave =
false;
671 for (
int32 i = 0; i < 4; i++)
@ CHAR_INS_CHAR_REPUTATION_BY_FACTION
@ CHAR_DEL_CHAR_REPUTATION_BY_FACTION
@ ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION
@ ACHIEVEMENT_CRITERIA_TYPE_GAIN_REVERED_REPUTATION
@ ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION
@ ACHIEVEMENT_CRITERIA_TYPE_KNOWN_FACTIONS
@ ACHIEVEMENT_CRITERIA_TYPE_GAIN_HONORED_REPUTATION
DBCStorage< FactionEntry > sFactionStore(FactionEntryfmt)
SimpleFactionsList const * GetFactionTeamList(uint32 faction)
std::list< uint32 > SimpleFactionsList
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
std::shared_ptr< PreparedResultSet > PreparedQueryResult
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
#define TC_LOG_ERROR(filterType__,...)
uint32 const ReputationRankStrIndex[MAX_REPUTATION_RANK]
TC_GAME_API uint32 const ReputationRankStrIndex[MAX_REPUTATION_RANK]
#define MAX_REPUTATION_RANK
#define MAX_SPILLOVER_FACTIONS
void put(std::size_t pos, T value)
constexpr bool HasFlag(T flag) const
Class used to access individual fields of database query result.
LowType GetCounter() const
static ObjectGuid GetGUID(Object const *o)
void ReputationChanged(FactionEntry const *factionEntry)
void SendDirectMessage(WorldPacket const *data) const
void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1=0, uint32 miscValue2=0, WorldObject *ref=nullptr)
WorldSession * GetSession() const
ReputationRank GetReputationRank(uint32 faction_id) const
void setUInt16(uint8 index, uint16 value)
void setUInt32(uint8 index, uint32 value)
void setInt32(uint8 index, int32 value)
std::string GetReputationRankName(FactionEntry const *factionEntry) const
uint8 _honoredFactionCount
ReputationRank GetBaseRank(FactionEntry const *factionEntry) const
int32 GetFactionDataIndexForRaceAndClass(FactionEntry const *factionEntry) const
void SetVisible(FactionTemplateEntry const *factionTemplateEntry)
int32 GetBaseReputation(FactionEntry const *factionEntry) const
int32 GetMaxReputation(FactionEntry const *factionEntry) const
uint8 _visibleFactionCount
void SendVisible(FactionState const *faction) const
ReputationFlags GetDefaultStateFlags(FactionEntry const *factionEntry) const
void SetAtWar(RepListID repListID, bool on)
void SendState(FactionState const *faction)
int32 GetReputation(uint32 faction_id) const
bool SetReputation(FactionEntry const *factionEntry, int32 standing)
void ApplyForceReaction(uint32 faction_id, ReputationRank rank, bool apply)
ReputationRank GetRank(FactionEntry const *factionEntry) const
int32 GetMinReputation(FactionEntry const *factionEntry) const
void SendInitialReputations()
static ReputationRank ReputationToRank(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
bool IsAtWar(uint32 faction_id) const
bool SetOneFactionReputation(FactionEntry const *factionEntry, int32 standing, bool incremental)
Public for chat command needs.
bool _sendFactionIncreased
static std::set< int32 > const ReputationRankThresholds
void SendForceReactions()
void UpdateRankCounters(ReputationRank old_rank, ReputationRank new_rank)
static const int32 Reputation_Cap
bool IsReputationAllowedForTeam(TeamId team, uint32 factionId) const
void LoadFromDB(PreparedQueryResult result)
ReputationRank const * GetForcedRankIfAny(FactionTemplateEntry const *factionTemplateEntry) const
void SetInactive(RepListID repListID, bool on)
void SaveToDB(CharacterDatabaseTransaction trans)
uint32 GetRaceMask() const
uint32 GetClassMask() const
std::string const & GetName() const
void Initialize(uint16 opcode, size_t newres=200)
LocaleConstant GetSessionDbcLocale() const
bool PlayerLoading() const
@ SMSG_SET_FACTION_VISIBLE
@ SMSG_SET_FACTION_STANDING
@ SMSG_INITIALIZE_FACTIONS
@ SMSG_SET_FORCED_REACTIONS
auto MapGetValuePtr(M &map, typename M::key_type const &key)
uint32 ReputationClassMask[4]
uint32 ReputationRaceMask[4]
bool CanHaveReputation() const
float ParentFactionMod[2]
uint32 ReputationFlags[4]
RepListID ReputationListID
EnumFlag< ReputationFlags > Flags