aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/AchievementMgr.cpp2
-rw-r--r--src/game/CharacterHandler.cpp20
-rw-r--r--src/game/Level2.cpp17
-rw-r--r--src/game/MiscHandler.cpp6
-rw-r--r--src/game/ObjectAccessor.cpp12
-rw-r--r--src/game/Player.cpp122
-rw-r--r--src/game/Player.h48
-rw-r--r--src/game/SpellAuras.cpp16
-rw-r--r--src/game/Unit.cpp20
9 files changed, 147 insertions, 116 deletions
diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp
index 5e8078de0b1..7190519d70c 100644
--- a/src/game/AchievementMgr.cpp
+++ b/src/game/AchievementMgr.cpp
@@ -757,7 +757,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
continue;
uint32 counter = 0;
- const FactionStateList factionStateList = GetPlayer()->GetFactionStateList();
+ FactionStateList const& factionStateList = GetPlayer()->GetFactionStateList();
for (FactionStateList::const_iterator iter = factionStateList.begin(); iter!= factionStateList.end(); ++iter)
{
FactionEntry const *factionEntry = sFactionStore.LookupEntry(iter->second.ID);
diff --git a/src/game/CharacterHandler.cpp b/src/game/CharacterHandler.cpp
index 26223b2b0af..39ce8a13f87 100644
--- a/src/game/CharacterHandler.cpp
+++ b/src/game/CharacterHandler.cpp
@@ -876,15 +876,7 @@ void WorldSession::HandleSetFactionAtWar( WorldPacket & recv_data )
recv_data >> repListID;
recv_data >> flag;
- FactionStateList::iterator itr = GetPlayer()->m_factions.find(repListID);
- if (itr == GetPlayer()->m_factions.end())
- return;
-
- // always invisible or hidden faction can't change war state
- if(itr->second.Flags & (FACTION_FLAG_INVISIBLE_FORCED|FACTION_FLAG_HIDDEN) )
- return;
-
- GetPlayer()->SetFactionAtWar(&itr->second,flag);
+ GetPlayer()->SetFactionAtWar(repListID,flag);
}
//I think this function is never used :/ I dunno, but i guess this opcode not exists
@@ -892,7 +884,7 @@ void WorldSession::HandleSetFactionCheat( WorldPacket & /*recv_data*/ )
{
//CHECK_PACKET_SIZE(recv_data,4+4);
- //sLog.outDebug("WORLD SESSION: HandleSetFactionCheat");
+ sLog.outError("WORLD SESSION: HandleSetFactionCheat, not expected call, please report.");
/*
uint32 FactionID;
uint32 Standing;
@@ -912,7 +904,7 @@ void WorldSession::HandleSetFactionCheat( WorldPacket & /*recv_data*/ )
}
}
*/
- GetPlayer()->UpdateReputation();
+ GetPlayer()->SendFactionStates();
}
void WorldSession::HandleMeetingStoneInfo( WorldPacket & /*recv_data*/ )
@@ -977,11 +969,7 @@ void WorldSession::HandleSetWatchedFactionInactiveOpcode(WorldPacket & recv_data
uint8 inactive;
recv_data >> replistid >> inactive;
- FactionStateList::iterator itr = _player->m_factions.find(replistid);
- if (itr == _player->m_factions.end())
- return;
-
- _player->SetFactionInactive(&itr->second, inactive);
+ _player->SetFactionInactive(replistid, inactive);
}
void WorldSession::HandleToggleHelmOpcode( WorldPacket & /*recv_data*/ )
diff --git a/src/game/Level2.cpp b/src/game/Level2.cpp
index b8c861b697f..6dcdaf34bda 100644
--- a/src/game/Level2.cpp
+++ b/src/game/Level2.cpp
@@ -895,14 +895,7 @@ bool ChatHandler::HandleLookupFactionCommand(const char* args)
FactionEntry const *factionEntry = sFactionStore.LookupEntry (id);
if (factionEntry)
{
- FactionState const* repState = NULL;
- if(target)
- {
- FactionStateList::const_iterator repItr = target->m_factions.find (factionEntry->reputationListID);
- if(repItr != target->m_factions.end())
- repState = &repItr->second;
- }
-
+ FactionState const* repState = target ? target->GetFactionState(factionEntry) : NULL;
int loc = m_session ? m_session->GetSessionDbcLocale() : sWorld.GetDefaultDbcLocale();
std::string name = factionEntry->name[loc];
@@ -1065,7 +1058,7 @@ bool ChatHandler::HandleModifyRepCommand(const char * args)
}
target->SetFactionReputation(factionEntry,amount);
- PSendSysMessage(LANG_COMMAND_MODIFY_REP, factionEntry->name[m_session->GetSessionDbcLocale()], factionId, GetNameLink(target).c_str(), target->GetReputation(factionId));
+ PSendSysMessage(LANG_COMMAND_MODIFY_REP, factionEntry->name[m_session->GetSessionDbcLocale()], factionId, GetNameLink(target).c_str(), target->GetReputation(factionEntry));
return true;
}
@@ -2345,14 +2338,16 @@ bool ChatHandler::HandlePInfoCommand(const char* args)
return false;
}
- for(FactionStateList::const_iterator itr = target->m_factions.begin(); itr != target->m_factions.end(); ++itr)
+ FactionStateList const& targetFSL = target->GetFactionStateList();
+ for(FactionStateList::const_iterator itr = targetFSL.begin(); itr != targetFSL.end(); ++itr)
{
FactionEntry const *factionEntry = sFactionStore.LookupEntry(itr->second.ID);
char const* factionName = factionEntry ? factionEntry->name[m_session->GetSessionDbcLocale()] : "#Not found#";
ReputationRank rank = target->GetReputationRank(factionEntry);
std::string rankName = GetTrinityString(ReputationRankStrIndex[rank]);
std::ostringstream ss;
- ss << itr->second.ID << ": |cffffffff|Hfaction:" << itr->second.ID << "|h[" << factionName << "]|h|r " << rankName << "|h|r (" << target->GetReputation(factionEntry) << ")";
+ ss << itr->second.ID << ": |cffffffff|Hfaction:" << itr->second.ID << "|h[" << factionName << "]|h|r " << rankName << "|h|r ("
+ << target->GetReputation(factionEntry) << ")";
if(itr->second.Flags & FACTION_FLAG_VISIBLE)
ss << GetTrinityString(LANG_FACTION_VISIBLE);
diff --git a/src/game/MiscHandler.cpp b/src/game/MiscHandler.cpp
index 7dc3154bec7..8faeeee9010 100644
--- a/src/game/MiscHandler.cpp
+++ b/src/game/MiscHandler.cpp
@@ -417,7 +417,8 @@ void WorldSession::HandleSetTargetOpcode( WorldPacket & recv_data )
if(!unit)
return;
- _player->SetFactionVisibleForFactionTemplateId(unit->getFaction());
+ if(FactionTemplateEntry const* factionTemplateEntry = sFactionTemplateStore.LookupEntry(unit->getFaction()))
+ _player->SetFactionVisible(factionTemplateEntry);
}
void WorldSession::HandleSetSelectionOpcode( WorldPacket & recv_data )
@@ -434,7 +435,8 @@ void WorldSession::HandleSetSelectionOpcode( WorldPacket & recv_data )
if(!unit)
return;
- _player->SetFactionVisibleForFactionTemplateId(unit->getFaction());
+ if(FactionTemplateEntry const* factionTemplateEntry = sFactionTemplateStore.LookupEntry(unit->getFaction()))
+ _player->SetFactionVisible(factionTemplateEntry);
}
void WorldSession::HandleStandStateChangeOpcode( WorldPacket & recv_data )
diff --git a/src/game/ObjectAccessor.cpp b/src/game/ObjectAccessor.cpp
index c245b09f410..14ee90ef3e5 100644
--- a/src/game/ObjectAccessor.cpp
+++ b/src/game/ObjectAccessor.cpp
@@ -81,13 +81,11 @@ ObjectAccessor::GetNPCIfCanInteractWith(Player const &player, uint64 guid, uint3
return NULL;
// not unfriendly
- FactionTemplateEntry const* factionTemplate = sFactionTemplateStore.LookupEntry(unit->getFaction());
- if(factionTemplate)
- {
- FactionEntry const* faction = sFactionStore.LookupEntry(factionTemplate->faction);
- if( faction && faction->reputationListID >= 0 && player.GetReputationRank(faction) <= REP_UNFRIENDLY)
- return NULL;
- }
+ if(FactionTemplateEntry const* factionTemplate = sFactionTemplateStore.LookupEntry(unit->getFaction()))
+ if(factionTemplate->faction)
+ if(FactionEntry const* faction = sFactionStore.LookupEntry(factionTemplate->faction))
+ if(faction->reputationListID >= 0 && player.GetReputationRank(faction) <= REP_UNFRIENDLY)
+ return NULL;
// not too far
if(!unit->IsWithinDistInMap(&player,INTERACTION_DISTANCE))
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 85d03fc2fd1..608ad81f7a9 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -5723,6 +5723,12 @@ void Player::SendFactionState(FactionState const* faction) const
}
}
+void Player::SendFactionStates() const
+{
+ for(FactionStateList::const_iterator itr = m_factions.begin(); itr != m_factions.end(); ++itr)
+ SendFactionState(&(itr->second));
+}
+
void Player::SendInitialReputations()
{
WorldPacket data(SMSG_INITIALIZE_FACTIONS, (4+128*5));
@@ -5756,13 +5762,17 @@ void Player::SendInitialReputations()
GetSession()->SendPacket(&data);
}
-FactionState const* Player::GetFactionState( FactionEntry const* factionEntry) const
+void Player::SetFactionAtWar( RepListID repListID, bool on )
{
- FactionStateList::const_iterator itr = m_factions.find(factionEntry->reputationListID);
- if (itr != m_factions.end())
- return &itr->second;
+ FactionStateList::iterator itr = m_factions.find(repListID);
+ if (itr == m_factions.end())
+ return;
- return NULL;
+ // always invisible or hidden faction can't change war state
+ if(itr->second.Flags & (FACTION_FLAG_INVISIBLE_FORCED|FACTION_FLAG_HIDDEN) )
+ return;
+
+ SetFactionAtWar(&itr->second,on);
}
void Player::SetFactionAtWar(FactionState* faction, bool atWar)
@@ -5783,6 +5793,15 @@ void Player::SetFactionAtWar(FactionState* faction, bool atWar)
faction->Changed = true;
}
+void Player::SetFactionInactive( RepListID repListID, bool on )
+{
+ FactionStateList::iterator itr = m_factions.find(repListID);
+ if (itr == m_factions.end())
+ return;
+
+ SetFactionInactive(&itr->second,on);
+}
+
void Player::SetFactionInactive(FactionState* faction, bool inactive)
{
// always invisible or hidden faction can't be inactive
@@ -5801,23 +5820,17 @@ void Player::SetFactionInactive(FactionState* faction, bool inactive)
faction->Changed = true;
}
-void Player::SetFactionVisibleForFactionTemplateId(uint32 FactionTemplateId)
+void Player::SetFactionVisible(FactionTemplateEntry const*factionTemplateEntry)
{
- FactionTemplateEntry const*factionTemplateEntry = sFactionTemplateStore.LookupEntry(FactionTemplateId);
-
- if(!factionTemplateEntry)
+ if(!factionTemplateEntry->faction)
return;
- if(factionTemplateEntry->faction)
- SetFactionVisibleForFactionId(factionTemplateEntry->faction);
+ if(FactionEntry const *factionEntry = sFactionStore.LookupEntry(factionTemplateEntry->faction))
+ SetFactionVisible(factionEntry);
}
-void Player::SetFactionVisibleForFactionId(uint32 FactionId)
+void Player::SetFactionVisible(FactionEntry const *factionEntry)
{
- FactionEntry const *factionEntry = sFactionStore.LookupEntry(FactionId);
- if(!factionEntry)
- return;
-
if(factionEntry->reputationListID < 0)
return;
@@ -6024,30 +6037,11 @@ bool Player::ModifyOneFactionReputation(FactionEntry const* factionEntry, int32
SetFactionVisible(&itr->second);
- for( int i = 0; i < MAX_QUEST_LOG_SIZE; ++i )
- {
- if(uint32 questid = GetQuestSlotQuestId(i))
- {
- Quest const* qInfo = objmgr.GetQuestTemplate(questid);
- if( qInfo && qInfo->GetRepObjectiveFaction() == factionEntry->ID )
- {
- QuestStatusData& q_status = mQuestStatus[questid];
- if( q_status.m_status == QUEST_STATUS_INCOMPLETE )
- {
- if(GetReputation(factionEntry) >= qInfo->GetRepObjectiveValue())
- if ( CanCompleteQuest( questid ) )
- CompleteQuest( questid );
- }
- else if( q_status.m_status == QUEST_STATUS_COMPLETE )
- {
- if(GetReputation(factionEntry) < qInfo->GetRepObjectiveValue())
- IncompleteQuest( questid );
- }
- }
- }
- }
+ ReputationChanged(factionEntry);
+
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION,factionEntry->ID);
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION,factionEntry->ID);
+
SendFactionState(&(itr->second));
return true;
@@ -6120,6 +6114,27 @@ bool Player::SetOneFactionReputation(FactionEntry const* factionEntry, int32 sta
return false;
}
+void Player::ApplyForceReaction( uint32 faction_id,ReputationRank rank,bool apply )
+{
+ if(apply)
+ m_forcedReactions[faction_id] = rank;
+ else
+ m_forcedReactions.erase(faction_id);
+}
+
+void Player::SendForceReactions()
+{
+ WorldPacket data;
+ data.Initialize(SMSG_SET_FORCED_REACTIONS, 4+m_forcedReactions.size()*(4+4));
+ data << uint32(m_forcedReactions.size());
+ for(ForcedReactions::const_iterator itr = m_forcedReactions.begin(); itr != m_forcedReactions.end(); ++itr)
+ {
+ data << uint32(itr->first); // faction_id (Faction.dbc)
+ data << uint32(itr->second); // reputation rank
+ }
+ SendDirectMessage(&data);
+}
+
//Calculate total reputation percent player gain with quest/creature level
int32 Player::CalculateReputationGain(uint32 creatureOrQuestLevel, int32 rep, bool for_quest)
{
@@ -12941,7 +12956,8 @@ void Player::AddQuest( Quest const *pQuest, Object *questGiver )
AdjustQuestReqItemCount( pQuest, questStatusData );
if( pQuest->GetRepObjectiveFaction() )
- SetFactionVisibleForFactionId(pQuest->GetRepObjectiveFaction());
+ if(FactionEntry const* factionEntry = sFactionStore.LookupEntry(pQuest->GetRepObjectiveFaction()))
+ SetFactionVisible(factionEntry);
uint32 qtime = 0;
if( pQuest->HasFlag( QUEST_TRINITY_FLAGS_TIMED ) )
@@ -14086,6 +14102,34 @@ void Player::MoneyChanged( uint32 count )
}
}
+void Player::ReputationChanged(FactionEntry const* factionEntry )
+{
+ for( int i = 0; i < MAX_QUEST_LOG_SIZE; ++i )
+ {
+ if(uint32 questid = GetQuestSlotQuestId(i))
+ {
+ if(Quest const* qInfo = objmgr.GetQuestTemplate(questid))
+ {
+ if(qInfo->GetRepObjectiveFaction() == factionEntry->ID )
+ {
+ QuestStatusData& q_status = mQuestStatus[questid];
+ if( q_status.m_status == QUEST_STATUS_INCOMPLETE )
+ {
+ if(GetReputation(factionEntry) >= qInfo->GetRepObjectiveValue())
+ if ( CanCompleteQuest( questid ) )
+ CompleteQuest( questid );
+ }
+ else if( q_status.m_status == QUEST_STATUS_COMPLETE )
+ {
+ if(GetReputation(factionEntry) < qInfo->GetRepObjectiveValue())
+ IncompleteQuest( questid );
+ }
+ }
+ }
+ }
+ }
+}
+
bool Player::HasQuestForItem( uint32 itemid ) const
{
for( int i = 0; i < MAX_QUEST_LOG_SIZE; ++i )
diff --git a/src/game/Player.h b/src/game/Player.h
index f2cefec9649..ed480f578de 100644
--- a/src/game/Player.h
+++ b/src/game/Player.h
@@ -52,7 +52,6 @@ class UpdateMask;
class SpellCastTargets;
class PlayerSocial;
class OutdoorPvP;
-class AchievementMgr;
class Vehicle;
typedef std::deque<Mail*> PlayerMails;
@@ -1221,6 +1220,7 @@ class TRINITY_DLL_SPEC Player : public Unit
void CastedCreatureOrGO( uint32 entry, uint64 guid, uint32 spell_id );
void TalkedToCreature( uint32 entry, uint64 guid );
void MoneyChanged( uint32 value );
+ void ReputationChanged(FactionEntry const* factionEntry );
bool HasQuestForItem( uint32 itemid ) const;
bool HasQuestForGO(int32 GOId) const;
void UpdateForQuestsGO();
@@ -1700,9 +1700,16 @@ class TRINITY_DLL_SPEC Player : public Unit
bool RewardPlayerAndGroupAtKill(Unit* pVictim);
bool isHonorOrXPTarget(Unit* pVictim);
- FactionStateList m_factions;
- ForcedReactions m_forcedReactions;
FactionStateList const& GetFactionStateList() { return m_factions; }
+ FactionState const* GetFactionState(RepListID id) const
+ {
+ FactionStateList::const_iterator repItr = m_factions.find (id);
+ return repItr != m_factions.end() ? &repItr->second : NULL;
+ }
+ FactionState const* GetFactionState(FactionEntry const* factionEntry) const
+ {
+ return factionEntry->reputationListID >= 0 ? GetFactionState(factionEntry->reputationListID) : NULL;
+ }
uint32 GetDefaultReputationFlags(const FactionEntry *factionEntry) const;
int32 GetBaseReputation(const FactionEntry *factionEntry) const;
int32 GetReputation(uint32 faction_id) const;
@@ -1716,23 +1723,27 @@ class TRINITY_DLL_SPEC Player : public Unit
const static int32 Reputation_Bottom = -42000;
bool ModifyFactionReputation(uint32 FactionTemplateId, int32 DeltaReputation);
bool ModifyFactionReputation(FactionEntry const* factionEntry, int32 standing);
- bool ModifyOneFactionReputation(FactionEntry const* factionEntry, int32 standing);
bool SetFactionReputation(uint32 FactionTemplateId, int32 standing);
bool SetFactionReputation(FactionEntry const* factionEntry, int32 standing);
- bool SetOneFactionReputation(FactionEntry const* factionEntry, int32 standing);
- int32 CalculateReputationGain(uint32 creatureOrQuestLevel, int32 rep, bool for_quest);
void RewardReputation(Unit *pVictim, float rate);
void RewardReputation(Quest const *pQuest);
void SetInitialFactions();
void UpdateReputation() const;
void SendFactionState(FactionState const* faction) const;
void SendInitialReputations();
- FactionState const* GetFactionState( FactionEntry const* factionEntry) const;
- void SetFactionAtWar(FactionState* faction, bool atWar);
- void SetFactionInactive(FactionState* faction, bool inactive);
- void SetFactionVisible(FactionState* faction);
- void SetFactionVisibleForFactionTemplateId(uint32 FactionTemplateId);
- void SetFactionVisibleForFactionId(uint32 FactionId);
+ void SetFactionAtWar(RepListID repListID, bool atWar);
+ void SetFactionInactive(RepListID repListID, bool inactive);
+ void SetFactionVisible(FactionTemplateEntry const* factionTemplateEntry);
+ void SetFactionVisible(FactionEntry const* factionEntry);
+ ReputationRank const* GetForcedRankIfAny(FactionTemplateEntry const* factionTemplateEntry) const
+ {
+ ForcedReactions::const_iterator forceItr = m_forcedReactions.find(factionTemplateEntry->faction);
+ return forceItr != m_forcedReactions.end() ? &forceItr->second : NULL;
+ }
+ void ApplyForceReaction(uint32 faction_id,ReputationRank rank,bool apply);
+ void SendForceReactions();
+ void SendFactionStates() const;
+
void UpdateSkillsForLevel();
void UpdateSkillsToMaxSkillsForLevel(); // for .levelup
void ModifySkillBonus(uint32 skillid,int32 val, bool talent);
@@ -2356,15 +2367,20 @@ class TRINITY_DLL_SPEC Player : public Unit
DeclinedName *m_declinedname;
Runes *m_runes;
- AchievementMgr m_achievementMgr;
private:
// internal common parts for CanStore/StoreItem functions
uint8 _CanStoreItem_InSpecificSlot( uint8 bag, uint8 slot, ItemPosCountVec& dest, ItemPrototype const *pProto, uint32& count, bool swap, Item *pSrcItem ) const;
uint8 _CanStoreItem_InBag( uint8 bag, ItemPosCountVec& dest, ItemPrototype const *pProto, uint32& count, bool merge, bool non_specialized, Item *pSrcItem, uint8 skip_bag, uint8 skip_slot ) const;
uint8 _CanStoreItem_InInventorySlots( uint8 slot_begin, uint8 slot_end, ItemPosCountVec& dest, ItemPrototype const *pProto, uint32& count, bool merge, Item *pSrcItem, uint8 skip_bag, uint8 skip_slot ) const;
Item* _StoreItem( uint16 pos, Item *pItem, uint32 count, bool clone, bool update );
- void UpdateKnownCurrencies(uint32 itemId, bool apply);
+ void UpdateKnownCurrencies(uint32 itemId, bool apply);
+ int32 CalculateReputationGain(uint32 creatureOrQuestLevel, int32 rep, bool for_quest);
+ void SetFactionVisible(FactionState* faction);
+ void SetFactionAtWar(FactionState* faction, bool atWar);
+ void SetFactionInactive(FactionState* faction, bool inactive);
+ bool ModifyOneFactionReputation(FactionEntry const* factionEntry, int32 standing);
+ bool SetOneFactionReputation(FactionEntry const* factionEntry, int32 standing);
void AdjustQuestReqItemCount( Quest const* pQuest, QuestStatusData& questStatusData );
GridReference<Player> m_gridRef;
@@ -2380,6 +2396,10 @@ class TRINITY_DLL_SPEC Player : public Unit
uint8 m_MirrorTimerFlags;
uint8 m_MirrorTimerFlagsLast;
bool m_isInWater;
+
+ AchievementMgr m_achievementMgr;
+ FactionStateList m_factions;
+ ForcedReactions m_forcedReactions;
};
void AddItemsSetItem(Player*player,Item *item);
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index 45e573a2cb8..f939e4bc481 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -2933,20 +2933,8 @@ void Aura::HandleForceReaction(bool apply, bool Real)
uint32 faction_id = m_modifier.m_miscvalue;
uint32 faction_rank = m_modifier.m_amount;
- if(apply)
- player->m_forcedReactions[faction_id] = ReputationRank(faction_rank);
- else
- player->m_forcedReactions.erase(faction_id);
-
- WorldPacket data;
- data.Initialize(SMSG_SET_FORCED_REACTIONS, 4+player->m_forcedReactions.size()*(4+4));
- data << uint32(player->m_forcedReactions.size());
- for(ForcedReactions::const_iterator itr = player->m_forcedReactions.begin(); itr != player->m_forcedReactions.end(); ++itr)
- {
- data << uint32(itr->first); // faction_id (Faction.dbc)
- data << uint32(itr->second); // reputation rank
- }
- player->SendDirectMessage(&data);
+ player->ApplyForceReaction(faction_id,ReputationRank(faction_rank),apply);
+ player->SendForceReactions();
}
void Aura::HandleAuraModSkill(bool apply, bool Real)
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index c32004d647e..3f628146607 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -7875,9 +7875,8 @@ bool Unit::IsHostileTo(Unit const* unit) const
// forced reaction
if(target_faction->faction)
{
- ForcedReactions::const_iterator forceItr = ((Player*)tester)->m_forcedReactions.find(target_faction->faction);
- if(forceItr!=((Player*)tester)->m_forcedReactions.end())
- return forceItr->second <= REP_HOSTILE;
+ if(ReputationRank const* force =((Player*)tester)->GetForcedRankIfAny(target_faction))
+ return *force <= REP_HOSTILE;
// if faction have reputation then hostile state for tester at 100% dependent from at_war state
if(FactionEntry const* raw_target_faction = sFactionStore.LookupEntry(target_faction->faction))
@@ -7892,9 +7891,8 @@ bool Unit::IsHostileTo(Unit const* unit) const
// forced reaction
if(tester_faction->faction)
{
- ForcedReactions::const_iterator forceItr = ((Player const*)target)->m_forcedReactions.find(tester_faction->faction);
- if(forceItr!=((Player const*)target)->m_forcedReactions.end())
- return forceItr->second <= REP_HOSTILE;
+ if(ReputationRank const* force = ((Player*)target)->GetForcedRankIfAny(tester_faction))
+ return *force <= REP_HOSTILE;
// apply reputation state
FactionEntry const* raw_tester_faction = sFactionStore.LookupEntry(tester_faction->faction);
@@ -7990,9 +7988,8 @@ bool Unit::IsFriendlyTo(Unit const* unit) const
// forced reaction
if(target_faction->faction)
{
- ForcedReactions::const_iterator forceItr = ((Player const*)tester)->m_forcedReactions.find(target_faction->faction);
- if(forceItr!=((Player const*)tester)->m_forcedReactions.end())
- return forceItr->second >= REP_FRIENDLY;
+ if(ReputationRank const* force =((Player*)tester)->GetForcedRankIfAny(target_faction))
+ return *force >= REP_FRIENDLY;
// if faction have reputation then friendly state for tester at 100% dependent from at_war state
if(FactionEntry const* raw_target_faction = sFactionStore.LookupEntry(target_faction->faction))
@@ -8007,9 +8004,8 @@ bool Unit::IsFriendlyTo(Unit const* unit) const
// forced reaction
if(tester_faction->faction)
{
- ForcedReactions::const_iterator forceItr = ((Player const*)target)->m_forcedReactions.find(tester_faction->faction);
- if(forceItr!=((Player const*)target)->m_forcedReactions.end())
- return forceItr->second >= REP_FRIENDLY;
+ if(ReputationRank const* force =((Player*)target)->GetForcedRankIfAny(tester_faction))
+ return *force >= REP_FRIENDLY;
// apply reputation state
if(FactionEntry const* raw_tester_faction = sFactionStore.LookupEntry(tester_faction->faction))