diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/AchievementMgr.cpp | 2 | ||||
-rw-r--r-- | src/game/CharacterHandler.cpp | 20 | ||||
-rw-r--r-- | src/game/Level2.cpp | 17 | ||||
-rw-r--r-- | src/game/MiscHandler.cpp | 6 | ||||
-rw-r--r-- | src/game/ObjectAccessor.cpp | 12 | ||||
-rw-r--r-- | src/game/Player.cpp | 122 | ||||
-rw-r--r-- | src/game/Player.h | 48 | ||||
-rw-r--r-- | src/game/SpellAuras.cpp | 16 | ||||
-rw-r--r-- | src/game/Unit.cpp | 20 |
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)) |