PDA

Просмотр полной версии : [patch][ReqSourceId]Дроп вспомогательных итемов


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

Vladimir
22.12.2010, 13:32
Насколько следует из комментриев дроп этой вещи вообще не связанна должна быть с квестом - да она используется при создании квестового итема, но и только.

Фикс базы (для UDB) от NoFantasy:
UPDATE creature_loot_template SET ChanceOrQuestChance=33 WHERE entry IN (26795,26797) and item=36758;

virusav
22.12.2010, 14:01
В кеше квеста ReqSourceId итемы указаны.
Итемы выпадают при наличии квеста, поэтому шанс квестовый.

Если шанс неквестовый, как в удб, то зачем в кеше указывается ReqSourdeCount?
Получается, что при наличии квеста можно собрать намного меньше итемов, чем без него.
Зачем тогда вообще поля ReqSourceId?

Или речь идет о condition_value1 и condition_value2 в `creature_loot_template`?

В таком случае на каждое сочетание итем-нпц надо создавать по 2 строки:
8 CONDITION_QUESTREWARDED Player must have completed a quest first
9 CONDITION_QUESTTAKEN Players must have the quest in the quest log and not completed yet
?

Vladimir
22.12.2010, 17:28
В кеше квеста ReqSourceId итемы указаны.
Это совершенно не значит что итемы должны выпадать только при квесте.
Он требуется для квеста, но выпадает когда попало.
Не ставте ему квестовый шанс как предлагает NoFantasy и все...

KiriX
22.12.2010, 18:42
Это совершенно не значит что итемы должны выпадать только при квесте.
Он требуется для квеста, но выпадает когда попало.
Не ставте ему квестовый шанс как предлагает NoFantasy и все...
А доказано, что данный итем падает и без квеста???
Скоро точно скажу, падает ли без квеста ;)

Vladimir
22.12.2010, 20:30
ну в коментах английских к нему это написано.