aboutsummaryrefslogtreecommitdiff
path: root/src/game/Player.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Player.cpp')
-rw-r--r--src/game/Player.cpp122
1 files changed, 83 insertions, 39 deletions
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 )