66 while (itr != end && standing >= *itr)
86 TC_LOG_ERROR(
"misc",
"ReputationMgr::IsAtWar: Can't get AtWar flag of {} for unknown faction (faction id) #{}.",
_player->
GetName(), faction_id);
124 TC_LOG_ERROR(
"misc",
"ReputationMgr::GetReputation: Can't get reputation of {} for unknown faction (faction id) #{}.",
_player->
GetName(), faction_id);
214 data <<
uint32(itr->first);
215 data <<
uint32(itr->second);
222 uint32 count = faction ? 1 : 0;
229 size_t p_count = data.
wpos();
238 for (FactionStateList::iterator itr =
_factions.begin(); itr !=
_factions.end(); ++itr)
240 if (itr->second.needSend)
242 itr->second.needSend =
false;
245 data <<
uint32(itr->second.ReputationListID);
246 data <<
uint32(itr->second.Standing);
260 for (FactionStateList::iterator itr =
_factions.begin(); itr !=
_factions.end(); ++itr)
263 factionData.
Flags = itr->second.Flags.AsUnderlyingType();
264 factionData.
Standing = itr->second.Standing;
265 itr->second.needSend =
false;
291 for (
unsigned int i = 1; i <
sFactionStore.GetNumRows(); i++)
298 newFaction.
ID = factionEntry->
ID;
324 if (repTemplate->faction[i])
329 int32 spilloverRep =
int32(standing * repTemplate->faction_rate[i]);
337 float spillOverRepOut = float(standing);
346 FactionStateList::iterator parentState =
_factions.find(parent->ReputationIndex);
361 for (SimpleFactionsList::const_iterator itr = flist->begin(); itr != flist->end(); ++itr)
365 if (factionEntryCalc == factionEntry ||
GetRank(factionEntryCalc) >
ReputationRank(factionEntryCalc->ParentFactionCap[0]))
367 int32 spilloverRep =
int32(spillOverRepOut * factionEntryCalc->ParentFactionMod[0]);
368 if (spilloverRep != 0 || !incremental)
400 standing += itr->second.Standing + BaseRep;
411 itr->second.Standing = standing - BaseRep;
412 itr->second.needSend =
true;
413 itr->second.needSave =
true;
419 else if (new_rank > old_rank)
422 if (new_rank > old_rank)
441 if (!factionTemplateEntry->
Faction)
486 FactionStateList::iterator itr =
_factions.find(repListID);
518 FactionStateList::iterator itr =
_factions.find(repListID);
555 Field* fields = result->Fetch();
593 if (faction->
Flags == dbFactionFlags)
600 while (result->NextRow());
606 for (FactionStateList::iterator itr =
_factions.begin(); itr !=
_factions.end(); ++itr)
608 if (itr->second.needSave)
618 stmt->
setInt32(2, itr->second.Standing);
619 stmt->
setUInt16(3, itr->second.Flags.AsUnderlyingType());
622 itr->second.needSave =
false;
651 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)
WorldPacket const * Write() override
std::array< FactionData, FactionCount > Factions
LocaleConstant GetSessionDbcLocale() const
bool PlayerLoading() const
@ SMSG_SET_FACTION_VISIBLE
@ SMSG_SET_FACTION_STANDING
@ 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