NeatElves |
11.06.2012 15:00 |
[patch] Модификация CONDITION_QUEST_NONE
Возможный патч:
Код:
diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp
index 180142b..762372c 100644
--- a/src/game/ObjectMgr.cpp
+++ b/src/game/ObjectMgr.cpp
@@ -7605,8 +7605,12 @@ bool PlayerCondition::Meets(Player const * player) const
}
case CONDITION_QUEST_NONE:
{
- if (!player->IsCurrentQuest(m_value1) && !player->GetQuestRewardStatus(m_value1))
- return true;
+ switch(m_value2)
+ {
+ case 0: return !player->IsCurrentQuest(m_value1) && !player->GetQuestRewardStatus(m_value1);
+ case 1: return !player->IsCurrentQuest(m_value1);
+ case 2: return !player->GetQuestRewardStatus(m_value1);
+ }
return false;
}
case CONDITION_ITEM_WITH_BANK:
@@ -7819,7 +7823,7 @@ bool PlayerCondition::IsValid(uint16 entry, ConditionType condition, uint32 valu
return false;
}
- if (value2 && condition != CONDITION_QUESTTAKEN)
+ if (value2 && (condition == CONDITION_QUESTREWARDED || condition == CONDITION_QUESTAVAILABLE))
sLog.outErrorDb("Quest condition (entry %u, type %u) has useless data in value2 (%u)!", entry, condition, value2);
break;
}
diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h
index 229d9b2..d719c10 100644
--- a/src/game/ObjectMgr.h
+++ b/src/game/ObjectMgr.h
@@ -362,7 +362,7 @@ enum ConditionType
CONDITION_QUESTAVAILABLE = 19, // quest_id 0 for case when loot/gossip possible only if player can start quest
CONDITION_ACHIEVEMENT = 20, // ach_id 0, 1 (0: has achievement, 1: hasn't achievement) for player
CONDITION_ACHIEVEMENT_REALM = 21, // ach_id 0, 1 (0: has achievement, 1: hasn't achievement) for server
- CONDITION_QUEST_NONE = 22, // quest_id 0 (quest did not take and not rewarded)
+ CONDITION_QUEST_NONE = 22, // quest_id 0, 1 or 2 (0: quest did not take and not rewarded, 1: quest did not take, 2: quest did not rewarded)
CONDITION_ITEM_WITH_BANK = 23, // item_id count check present req. amount items in inventory or bank
CONDITION_NOITEM_WITH_BANK = 24, // item_id count check not present req. amount items in inventory or bank
CONDITION_NOT_ACTIVE_GAME_EVENT = 25, // event_id 0
Зачем:
Чтобы можно было создавать цепочки в госсипах, пример:
Цепочка
если игрок сдал(8 кондиция) 11248 и у него нет предмета(24) и он не брал, не выполнял квест 11250(22) или он взял квест 11250(9) и у него нет предмета(24), то
госсип должен быть, но сразу всплыла загадка - если игрок взял квест 11250 и от него отказался то первое условие уже не сработает, а второе еще не сработает.))
поэтому вижу путь проще, модифицировать кондицию так, чтобы получилось:
если игрок сдал(8 кондиция) 11248 и у него нет предмета(24) и он не брал вознаграждение за квест 11250(22-2)
будет грораздо проще и работоспособней.))
|