virusav
21.12.2010, 21:11
На текущий момент при комплите квеста вспомогательные итемы, указанные в ReqSourceId, перестают выпадать, а должны.
Пример: http://ru.wowhead.com/quest=12068 (также в других квестах цепочки). У квеста стоит требование принести основной итем, но при этом надо собрать 5 вспомогательных итемов, чтобы игрок мог наложить на себя ауру, увидеть квестгивера и сдать квест.
Сейчас при взятии квестового итема нельзя выбить вспомогательные и сдать квест.
Патч:
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 8cf5741..bcaad71 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -14765,36 +14765,37 @@ void Player::ReputationChanged(FactionEntry const* factionEntry )
bool Player::HasQuestForItem( uint32 itemid ) const
{
- for( int i = 0; i < MAX_QUEST_LOG_SIZE; ++i )
+ for (int i = 0; i < MAX_QUEST_LOG_SIZE; ++i)
{
uint32 questid = GetQuestSlotQuestId(i);
- if ( questid == 0 )
+ if (questid == 0)
continue;
QuestStatusMap::const_iterator qs_itr = mQuestStatus.find(questid);
- if(qs_itr == mQuestStatus.end())
+ if (qs_itr == mQuestStatus.end())
continue;
QuestStatusData const& q_status = qs_itr->second;
- if (q_status.m_status == QUEST_STATUS_INCOMPLETE)
+ if (q_status.m_status == QUEST_STATUS_INCOMPLETE || q_status.m_status == QUEST_STATUS_COMPLETE)
{
Quest const* qinfo = sObjectMgr.GetQuestTemplate(questid);
- if(!qinfo)
- continue;
-
- // hide quest if player is in raid-group and quest is no raid quest
- if (GetGroup() && GetGroup()->isRaidGroup() && !qinfo->IsAllowedInRaid() && !InBattleGround())
+ if (!qinfo)
continue;
- // There should be no mixed ReqItem/ReqSource drop
- // This part for ReqItem drop
- for (int j = 0; j < QUEST_ITEM_OBJECTIVES_COUNT; ++j)
+ if (q_status.m_status == QUEST_STATUS_INCOMPLETE)
{
- if(itemid == qinfo->ReqItemId[j] && q_status.m_itemcount[j] < qinfo->ReqItemCount[j] )
- return true;
+ // hide quest if player is in raid-group and quest is no raid quest
+ if (GetGroup() && GetGroup()->isRaidGroup() && !qinfo->IsAllowedInRaid() && !InBattleGround())
+ continue;
+
+ // There should be no mixed ReqItem drop
+ for (int j = 0; j < QUEST_ITEM_OBJECTIVES_COUNT; ++j)
+ {
+ if (itemid == qinfo->ReqItemId[j] && q_status.m_itemcount[j] < qinfo->ReqItemCount[j])
+ return true;
+ }
}
- // This part - for ReqSource
for (int j = 0; j < QUEST_SOURCE_ITEM_IDS_COUNT; ++j)
{
// examined item is a source item
Пример: http://ru.wowhead.com/quest=12068 (также в других квестах цепочки). У квеста стоит требование принести основной итем, но при этом надо собрать 5 вспомогательных итемов, чтобы игрок мог наложить на себя ауру, увидеть квестгивера и сдать квест.
Сейчас при взятии квестового итема нельзя выбить вспомогательные и сдать квест.
Патч:
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 8cf5741..bcaad71 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -14765,36 +14765,37 @@ void Player::ReputationChanged(FactionEntry const* factionEntry )
bool Player::HasQuestForItem( uint32 itemid ) const
{
- for( int i = 0; i < MAX_QUEST_LOG_SIZE; ++i )
+ for (int i = 0; i < MAX_QUEST_LOG_SIZE; ++i)
{
uint32 questid = GetQuestSlotQuestId(i);
- if ( questid == 0 )
+ if (questid == 0)
continue;
QuestStatusMap::const_iterator qs_itr = mQuestStatus.find(questid);
- if(qs_itr == mQuestStatus.end())
+ if (qs_itr == mQuestStatus.end())
continue;
QuestStatusData const& q_status = qs_itr->second;
- if (q_status.m_status == QUEST_STATUS_INCOMPLETE)
+ if (q_status.m_status == QUEST_STATUS_INCOMPLETE || q_status.m_status == QUEST_STATUS_COMPLETE)
{
Quest const* qinfo = sObjectMgr.GetQuestTemplate(questid);
- if(!qinfo)
- continue;
-
- // hide quest if player is in raid-group and quest is no raid quest
- if (GetGroup() && GetGroup()->isRaidGroup() && !qinfo->IsAllowedInRaid() && !InBattleGround())
+ if (!qinfo)
continue;
- // There should be no mixed ReqItem/ReqSource drop
- // This part for ReqItem drop
- for (int j = 0; j < QUEST_ITEM_OBJECTIVES_COUNT; ++j)
+ if (q_status.m_status == QUEST_STATUS_INCOMPLETE)
{
- if(itemid == qinfo->ReqItemId[j] && q_status.m_itemcount[j] < qinfo->ReqItemCount[j] )
- return true;
+ // hide quest if player is in raid-group and quest is no raid quest
+ if (GetGroup() && GetGroup()->isRaidGroup() && !qinfo->IsAllowedInRaid() && !InBattleGround())
+ continue;
+
+ // There should be no mixed ReqItem drop
+ for (int j = 0; j < QUEST_ITEM_OBJECTIVES_COUNT; ++j)
+ {
+ if (itemid == qinfo->ReqItemId[j] && q_status.m_itemcount[j] < qinfo->ReqItemCount[j])
+ return true;
+ }
}
- // This part - for ReqSource
for (int j = 0; j < QUEST_SOURCE_ITEM_IDS_COUNT; ++j)
{
// examined item is a source item