Quest template
Материал из YTDB DataBase
Back to world database list of tables.
The `quest_template` table
Contains all basic definitions of quests available.
Structure
Field | Type | Null | Key | Default | Extra |
entry | int(10) unsigned | NO | PRI | 0 | |
Method | tinyint(3) | NO | 2 | ||
ZoneOrSort | smallint(6) | NO | 0 | ||
SkillOrClass | smallint(6) | NO | 0 | ||
MinLevel | tinyint(3) unsigned | NO | 0 | ||
QuestLevel | tinyint(3) unsigned | NO | 0 | ||
Type | smallint(5) unsigned | NO | 0 | ||
RequiredRaces | smallint(5) | NO | 0 | ||
RequiredSkillValue | smallint(5) unsigned | NO | 0 | ||
RepObjectiveFaction | smallint(5) unsigned | NO | 0 | ||
RepObjectiveValue | mediumint(9) | NO | 0 | ||
RequiredMinRepFaction | mediumint(5) unsigned | NO | 0 | ||
RequiredMinRepValue | mediumint(9) | NO | 0 | ||
RequiredMaxRepFaction | mediumint(5) unsigned | NO | 0 | ||
RequiredMaxRepValue | mediumint(9) | NO | 0 | ||
SuggestedPlayers | mediumint(3) unsigned | NO | 0 | ||
LimitTime | int(10) | NO | 0 | ||
QuestFlags | smallint(5) unsigned | NO | 0 | ||
SpecialFlags | tinyint(3) unsigned | NO | 0 | ||
CharTitleId | tinyint(3) unsigned | NO | 0 | ||
PlayersSlain | tinyint(3) unsigned | NO | 0 | ||
BonusTalents | tinyint(3) unsigned | NO | 0 | ||
PrevQuestId | mediumint(9) | NO | 0 | ||
NextQuestId | mediumint(9) | NO | 0 | ||
ExclusiveGroup | mediumint(9) | NO | 0 | ||
NextQuestInChain | mediumint(8) | NO | 0 | ||
SrcItemId | mediumint(8) unsigned | NO | 0 | ||
SrcItemCount | tinyint(3) | NO | 0 | ||
SrcSpell | mediumint(8) | NO | 0 | ||
Title | text | YES | |||
Details | text | YES | |||
Objectives | text | YES | |||
OfferRewardText | text | YES | |||
RequestItemsText | text | YES | |||
EndText | text | YES | |||
ObjectiveText1 | text | YES | |||
ObjectiveText2 | text | YES | |||
ObjectiveText3 | text | YES | |||
ObjectiveText4 | text | YES | |||
ReqItemId1 | mediumint(8) unsigned | NO | 0 | ||
ReqItemId2 | mediumint(8) unsigned | NO | 0 | ||
ReqItemId3 | mediumint(8) unsigned | NO | 0 | ||
ReqItemId4 | mediumint(8) unsigned | NO | 0 | ||
ReqItemCount1 | smallint(5) unsigned | NO | 0 | ||
ReqItemCount2 | smallint(5) unsigned | NO | 0 | ||
ReqItemCount3 | smallint(5) unsigned | NO | 0 | ||
ReqItemCount4 | smallint(5) unsigned | NO | 0 | ||
ReqSourceId1 | mediumint(8) | NO | 0 | ||
ReqSourceId2 | mediumint(8) | NO | 0 | ||
ReqSourceId3 | mediumint(8) | NO | 0 | ||
ReqSourceId4 | mediumint(8) | NO | 0 | ||
ReqSourceCount1 | smallint(5) | NO | 0 | ||
ReqSourceCount2 | smallint(5) | NO | 0 | ||
ReqSourceCount3 | smallint(5) | NO | 0 | ||
ReqSourceCount4 | smallint(5) | NO | 0 | ||
ReqCreatureOrGOId1 | mediumint(9) | NO | 0 | ||
ReqCreatureOrGOId2 | mediumint(9) | NO | 0 | ||
ReqCreatureOrGOId3 | mediumint(9) | NO | 0 | ||
ReqCreatureOrGOId4 | mediumint(9) | NO | 0 | ||
ReqCreatureOrGOCount1 | int(10) unsigned | NO | 0 | ||
ReqCreatureOrGOCount2 | smallint(5) unsigned | NO | 0 | ||
ReqCreatureOrGOCount3 | smallint(5) unsigned | NO | 0 | ||
ReqCreatureOrGOCount4 | smallint(5) unsigned | NO | 0 | ||
ReqSpellCast1 | mediumint(8) unsigned | NO | 0 | ||
ReqSpellCast2 | mediumint(8) | NO | 0 | ||
ReqSpellCast3 | mediumint(8) | NO | 0 | ||
ReqSpellCast4 | mediumint(8) | NO | 0 | ||
RewChoiceItemId1 | mediumint(8) unsigned | NO | 0 | ||
RewChoiceItemId2 | mediumint(8) unsigned | NO | 0 | ||
RewChoiceItemId3 | mediumint(8) unsigned | NO | 0 | ||
RewChoiceItemId4 | mediumint(8) unsigned | NO | 0 | ||
RewChoiceItemId5 | mediumint(8) unsigned | NO | 0 | ||
RewChoiceItemId6 | mediumint(8) unsigned | NO | 0 | ||
RewChoiceItemCount1 | smallint(5) unsigned | NO | 0 | ||
RewChoiceItemCount2 | smallint(5) unsigned | NO | 0 | ||
RewChoiceItemCount3 | smallint(5) unsigned | NO | 0 | ||
RewChoiceItemCount4 | smallint(5) unsigned | NO | 0 | ||
RewChoiceItemCount5 | smallint(5) unsigned | NO | 0 | ||
RewChoiceItemCount6 | smallint(5) unsigned | NO | 0 | ||
RewItemId1 | mediumint(8) unsigned | NO | 0 | ||
RewItemId2 | mediumint(8) unsigned | NO | 0 | ||
RewItemId3 | mediumint(8) unsigned | NO | 0 | ||
RewItemId4 | mediumint(8) unsigned | NO | 0 | ||
RewItemCount1 | smallint(5) unsigned | NO | 0 | ||
RewItemCount2 | smallint(5) unsigned | NO | 0 | ||
RewItemCount3 | smallint(5) unsigned | NO | 0 | ||
RewItemCount4 | smallint(5) unsigned | NO | 0 | ||
RewRepFaction1 | smallint(5) | NO | 0 | ||
RewRepFaction2 | smallint(5) | NO | 0 | ||
RewRepFaction3 | smallint(5) | NO | 0 | ||
RewRepFaction4 | smallint(5) | NO | 0 | ||
RewRepFaction5 | smallint(5) | NO | 0 | ||
RewRepValue1 | mediumint(9) | NO | 0 | ||
RewRepValue2 | mediumint(9) | NO | 0 | ||
RewRepValue3 | mediumint(9) | NO | 0 | ||
RewRepValue4 | mediumint(9) | NO | 0 | ||
RewRepValue5 | mediumint(9) | NO | 0 | ||
RewHonorableKills | int(11) | NO | 0 | ||
RewOrReqMoney | int(11) | NO | 0 | ||
RewMoneyMaxLevel | int(10) unsigned | NO | 0 | ||
RewSpell | mediumint(8) unsigned | NO | 0 | ||
RewSpellCast | mediumint(8) unsigned | NO | 0 | ||
RewMailTemplateId | mediumint(8) unsigned | NO | 0 | ||
RewMailDelaySecs | int(11) unsigned | NO | 0 | ||
PointMapId | smallint(5) unsigned | NO | 0 | ||
PointX | float | NO | 0 | ||
PointY | float | NO | 0 | ||
PointOpt | mediumint(8) | NO | |||
DetailsEmote1 | smallint(5) unsigned | NO | 0 | ||
DetailsEmote2 | smallint(5) unsigned | NO | 0 | ||
DetailsEmote3 | smallint(5) unsigned | NO | 0 | ||
DetailsEmote4 | smallint(5) unsigned | NO | 0 | ||
IncompleteEmote | smallint(5) unsigned | NO | 0 | ||
CompleteEmote | smallint(5) unsigned | NO | 0 | ||
OfferRewardEmote1 | smallint(5) unsigned | NO | 0 | ||
OfferRewardEmote2 | smallint(5) unsigned | NO | 0 | ||
OfferRewardEmote3 | smallint(5) unsigned | NO | 0 | ||
OfferRewardEmote4 | smallint(5) unsigned | NO | 0 | ||
StartScript | mediumint(8) unsigned | NO | 0 | ||
CompleteScript | mediumint(8) unsigned | NO | 0 |
entry
Номер(id) квеста. Номер квеста должен быть уникальным.
Method
Доступные значения: 0, 1 или 2. Если значение = 0 то при получении квест уже будет завершен (если убраны условия для завершения квеста).
ZoneOrSort
Это поле определяет, под какой категорией задания заносятся в журнал (список) заданий.
Если значение > 0, то значение представляет номер зоны и берется из AreaTable.dbc.
Если значение < 0 (отрицательное) то учитывается как номер вида задания (задание для определенной професии или класса. Смотри также RequiredSkillValue). Значение берется из QuestSort.dbc.
SkillOrClass
Это поле определяет навык или требования класса для задания, что бы оно было доступено только относительно этих требований.
Если значение > 0 то учитывается как номер навыка из SkillLine.dbc
Если значение < 0 (отрицательное) - номер класса из ChrClasses.dbc
MinLevel
Минимальный уровень, необходимый что бы получить задание.
QuestLevel
Уровень задания. Игрок получает полное количество опыта, только если его уровень меньше или равен 5.
Type
Значение берется из QuestInfo.dbc
Value | Type |
1 | Группа |
21 | Жизнь |
41 | PvP |
62 | Рейд |
81 | Подземелье |
82 | Игровое событие |
83 | Легенда |
84 | Сопровождение |
85 | Героическое |
88 | Рейд (10) |
89 | Рейд (25) |
RequiredRaces
Расы, которым доступен квест. Если 0 - квест доступен для всех рас.
Race
Значение вычисляется по формуле: 2^(ID-1),ID берется из ChrRaces.dbc
Значение | Название |
1 | Человек |
2 | Орк |
4 | Дворф |
8 | Ночной эльф |
16 | Нежить |
32 | Таурен |
64 | Гном |
128 | Тролль |
256 | Гоблин |
512 | Кровавый эльф |
1024 | Дреней |
2097152 | Ворген |
0, 1791 (2099199 ) | Все расы |
690 (946 ) | Только орда |
1101 (2098253 ) | Только альянс |
Пример
0,1791 = Все Расы
690 (2 + 16 + 32 + 128 + 512) = Квест только для Орды
1101 (1 + 4 + 8 + 64 + 1024) = Квест только для Альянса
RequiredSkillValue
Требуемое значение навыка игрока если в SkillOrClass значение > 0 и имеет номер какого либо навыка.
RepObjectiveFaction
Идентификатор фракции для задания достигнуть определенного значения репутации. Берется из Faction.dbc
RepObjectiveValue
Значение репутации, которого игрок должен достигнуть с фракцией в RepObjectiveFaction, как часть задания.
RequiredMinRepFaction
Идентификатор фракции, минимальное значение репутации которой требуется для получения задания. Берется из Faction.dbc
RequiredMinRepValue
Игрок должен иметь данное значение репутации или выше с фракцией в RequiredMinRepFaction для того что бы получить задание.
Нейтральное | Neutral | 1 |
Дружественное | Friendly | 3000 |
Уважение | Honored | 9000 |
Почтение | Revered | 21000 |
Превознесение | Exalted | 42000 |
RequiredMaxRepFaction
Идентификатор фракции, превышение максимального значения репутации которой не позволит игроку получить задание. Берется из Faction.dbc
RequiredMaxRepValue
Максимальное значение репутации с фракцией в RequiredMaxRepFaction получив которое игрок не сможет взять задание. Если у игрока будет боьше репутации чем значение в этом поле, то он потеряет возможность взять задание.
Нейтральное | Neutral | 1 |
Дружественное | Friendly | 3000 |
Уважение | Honored | 9000 |
Почтение | Revered | 21000 |
Превознесение | Exalted | 42000 |
SuggestedPlayers
Информация о том, сколько игроков должно объединиться, для выполнения задания.
LimitTime
Время в секундах, в течении которого игрок должен завершить задание.
QuestFlags
Это поле позволяет дополнительно разделить задания по типам. Помимо флагов ежедневный и передача другим, это поле используется для группировки заданий и не является требованием для выполнения задания. Требования задания формируются не нулевыми значениями в других полях таблицы. Кроме того, в то время как действие одних флагов известно, действие других не известно, и комментарии ниже являются всего лишь догадками.
В данный момент (rev 6055), ядро не обрабатывает эти флаги (за исключением флагов ежедневный и передача другим).
Bit | Наименование | Коментарий |
---|---|---|
0 | QUEST_FLAGS_NONE | Нет флага, задание не входит ни в одну из групп. |
1 | QUEST_FLAGS_STAY_ALIVE | Если игрок умрет, задание будет провалено. (?) |
2 | QUEST_FLAGS_EVENT | Задания эскорта или любые задания основанные на событиях. Если игрок в группе, все игроки группы которые могут взять задание, увидят окно подтверждения получения задания. |
4 | QUEST_FLAGS_EXPLORATION | Требует активацию areatrigger. |
8 | QUEST_FLAGS_SHARABLE | Позволяет делиться заданием с другими игроками. |
16 | QUEST_FLAGS_NONE2 | Неизвестно и не используется в данный момент. |
32 | QUEST_FLAGS_EPIC | Эпические классовые задания (охотник) (??) |
64 | QUEST_FLAGS_RAID | Рейд или несколько групп необходимы для выполнения задания. |
128 | QUEST_FLAGS_TBC | Добавлено с или после выхода TBC. |
256 | QUEST_FLAGS_UNK2 | Задание требует дропа вещей которые не требуются для завершения задания (возможно для поля ReqSourceID) (?) |
512 | QUEST_FLAGS_HIDDEN_REWARDS | Награда в виде вещей и денег скрыта в описании задания при его взятии и списке заданий, но получается при выполнении задания. |
1024 | QUEST_FLAGS_AUTO_REWARDED | Эти задания автоматически вознаграждаются при выполнении и не отображается в списке заданий. |
2048 | QUEST_FLAGS_TBC_RACES | Задания стартовой зоны Blood elf/draenei. |
4096 | QUEST_FLAGS_DAILY | Ежедневные повторяемые задания (only flag that the core applies specific behavior for) |
8192 | QUEST_FLAGS_UNK5 | Ежедневные PvP задания в зоне Седые Холмы (может быть все таки Озеро Ледяных Оков?)? Задание можно взять только если у игрока включен режим PvP. |
Как и другие флаги, QuestFlags позволяет добавлять несколько типов для задания.
SpecialFlags
Это поле - битовая маска, управляет двумя дополнительными параметрами и может принимать 4 возможных значения.
- 0: Нет дополнительных параметров
- 1: Делает задание повторяемым.
- 2: Делает возможным выполнение задания только при некотором событии (активация areatrigger_involvedrelation, эффект спелла выполнение задания или активация spell_scripts с командой 7 как пример)
- 3: Делает задание одновременно и повторяемым и выполняемым при некотором событии.
CharTitleId
Идентификатор титула персонажа, который он получает после выполнения задания. Берется из CharTitles.dbc
PlayersSlain
Количество убийств игроков необходимое для выполнения задания.(?)
BonusTalents
Количество очков талантов получаемое игроком при выполнении задания.(?)
PrevQuestId
Если значение > 0: Содержит идентификатор предыдущего задания, которое должно быть выполнено для того что бы взять это задание.
Если значение < 0: Содержит идентификатор родительского задания, которое должно быть активно для того что бы взять это задание.
Смотрите раздел примеров для примера.
NextQuestId
Если значение > 0: Содержит идентификатор следующего задания, если поля PrevQuestId этого задания недостаточно.
Если значение < 0: Содержит идентификатор суб задания, если поля PrevQuestId этого задания недостаточно.
Если задание имеет много альтернативных следующих заданий (специфичные классовые задания идущие после одного общего задания) то должно использоваться поле PrevQuestId этих заданий.
Смотри раздел примеров для примера.
ExclusiveGroup
если ExclusiveGroup > 0
Позволяет создать группу заданий из которых только одно может быть взято и выполнено.
Например, если из заданий 1200, 1201 и 1202 нужно позволить взять только одно, вставьте 1200 в поле ExclusiveGroup всех 3 заданий.
если ExclusiveGroup < 0
Позволяет создать группу заданий в которой все задания должны быть выполнены для того что бы взять следующее.
Например, если задание 1000 является продолжением одного из заданий 1200, 1201 и 1202 и все эти задания имеют одинаковое отрицательное значение ExclusiveGroup, все эти задания должны быть завершены для того что бы взять задание 1000.
Смотрите раздел примеров для примера.
NextQuestInChain
Идентификатор следующего задания если принимает это и выдает следующее одно и то же существо или gameobject. Результат, если вы заканчиваете задание, новое задание отобразится автоматически.
Смотрите раздел примеров для пояснения.
SrcItemId
Идентификатор вещи выдаваемой игроку при взятии задания. Вещь удаляется из инвентаря при отмене задания.
SrcItemCount
Количество выдаваемых вещей из SrcItemId.
SrcSpell
Спелл кастуемый на игрока при взятии задания. Может быть баффом или обучающим спеллом.
Title
Название задания.
Details
Текст задания. Вы можете использовать определенные метки которые будут преобразованы в игре: $B - конец строки, $N - имя, $R - раса, $C - класс, $Gмужской:женский; (мужской и женский могут быть заменены любыми синонимами какими Вы захотите, но смысл должен остаться тем же самым. То есть: мальчик:девочка / мужчина:женщина / сэр:мадам / dude:chick)
Objectives
Цель задания. Если пусто, задание выполняется автоматически и может быть сдано без взятия.
OfferRewardText
Первый текст посылаемый игроку NPC'ом при завершении задания. Вы можете использовать определенные метки которые будут преобразованы в игре: $B - конец строки, $N - имя, $R - раса, $C - класс, $Gмужской:женский; (мужской и женский могут быть заменены любыми синонимами какими Вы захотите, но смысл должен остаться тем же самым. То есть: мальчик:девочка / мужчина:женщина / сэр:мадам / dude:chick)
RequestItemsText
Текст посылаемый игроку при разговоре с NPC, при условии активного но не выполненного задания. (Текст под заголовком "Progress" в Wowhead.) Вы можете использовать определенные метки которые будут преобразованы в игре: $B - конец строки, $N - имя, $R - раса, $C - класс, $Gмужской:женский; (мужской и женский могут быть заменены любыми синонимами какими Вы захотите, но смысл должен остаться тем же самым. То есть: мальчик:девочка / мужчина:женщина / сэр:мадам / dude:chick)
EndText
Used only when SpecialFlags 2 is active. This is the objective text sent to the player describing the external event that is required to complete the quest.
ObjectiveText
Используется для нестандартных текстов, которые отображаются в списке заданий. Пример, "Излечи павшего воина".
ReqItemId
Item_template Id of required item to complete the quest.
ReqItemCount
Amount of required items
ReqSourceID
Item ID that is needed indirectly by the quest. For example, the quests asks for item X but the only way to get item X is by activating item Y; however, item Y is also a quest item. Therefore you set item Y's ID in this field. This requirement will not appear in the quest text, it is just for the core to know when to drop a quest item that isn't in the ReqItemID field but is still needed by the quest.
ReqSourceCount
The maximum number of copies of the item in ReqSourceID that can be picked up (and dropped by the core). Having ReqSourceId !=0 and ReqSourceCount for that = 0, there is no limit for the items to drop.
ReqCreatureOrGOId
Value > 0: required creature_template ID the player needs to kill/cast on in order to complete the quest.
Value < 0: required gameobject_template ID the player needs to cast on in order to complete the quest.
If ReqSpellCast is != 0, the objective is to cast on target, else kill.
NOTE: If ReqSpellCast is != 0 and the spell has effects Send Event or Quest Complete, this field may be left empty.
ReqCreatureOrGOCount
The number of times the creature or gameobject must be killed or casted upon.
ReqSpellCast
Spell ID of Spell that needs to be cast in order to fulfill a quest objective. A spell normally needs a target which is ReqCreatureOrGOId
And for spells with "SpellEffect with ImpliciteTargetA-B == 38" check table Spell_script_target
NOTE: If the spell has spell effects Send Event or Quest Complete, it can be entered here WITHOUT the need for a target and count.
RewChoiceItemId, RewChoiceItemCount
Id of item available for reward choice.
Number of Charges in rewarded item available.
RewItemId, RewItemCount
Number of RewItem
item Id given for reward (no choice).
RewRepFaction, RewRepValue
Faction Id (from Faction.dbc) for which the quest give reputation points.
Number of gain or lost reputation points for Faction at quest completion. This is special reputation rewarding. Normal reputation reward to quest rewarding creature faction calculated and added automatically.
RewHonorableKills
Number of honorable kill honor rewarded for completing this quest.
Example: An example value is 15 for quest 8388: At level 70 an honorable kill is 20.9 honor worth. Multiply this with 15 and you receive 313.5, after the multiplication the value is rounded up. So the honor rewarded at level 70 is 314 for this quest.
RewOrReqMoney
Money earned by completing the quest (if value > 0). Money quest requirement (if value < 0).
RewMoneyMaxLevel
The money a character at level 70 would get when they complete this quest. This field also controls the XP given as the XP is calculated from the value in this field by the following formula. If the quest is repeatable, XP will be given only once. The total XP that a character will receive is also affected by the level difference between the character's level and the quest's level.
The formula for calculating XP from the value in this field:
QuestLevel >= 65: XP = RewMoneyMaxLevel / 6.0
QuestLevel == 64: XP = RewMoneyMaxLevel / 4.8
QuestLevel == 63: XP = RewMoneyMaxLevel / 3.6
QuestLevel == 62: XP = RewMoneyMaxLevel / 2.4
QuestLevel == 61: XP = RewMoneyMaxLevel / 1.2
QuestLevel <= 60: XP = RewMoneyMaxLevel / 0.6
RewSpell
Spell that is shown to be casted on quest completion in the quest log. Note that this spell will NOT be casted if RewSpellCast is non-zero. The spell in the other field will be casted instead, in which case the spell here only serves as the visual in the quest log.
NOTE: This field comes straight from the WDB and should not be changed.
RewSpellCast
Spell that will always be casted at player when completing the quest. This can be learn spell and player learned some spell in result, or buff spell, for example. If this field is non-zero then this spell will ALWAYS be casted and the spell in RewSpell will not.
NOTE: This field comes straight from the WDB and should not be changed.
RewMailTemplateId
If the quest gives as a reward an item from a possible list of items, the ID here corresponds to the proper loot template in quest_mail_loot_template. According to the rules in that loot template, items "looted" will be sent by mail at the completion of the quest.
RewMailDelaySecs
How many seconds to wait until the mail is sent to the character that turned in a quest rewarding items from a loot template defined in RewMailTemplateId
PointMapId
MapId of a quest point of interest (POI - Point Of Interest). POI will be shown on the map when quest is active.
PointX
X coordinate of quest POI.
PointY
Y coordinate of quest POI.
PointOpt
DetailsEmote
CompleteEmote
Emote played by the related NPC at the time all quest objects are completed.
OfferRewardEmote
Emote played by the NPC at the time the character is rewarded for the quest.
StartScript
ID of the start script. See quest_start_scripts.id
CompleteScript
ID of the end script. See quest_end_scripts.id
Examples
The "rules of engagement" dealing with quests
1. Always use PrevQuestId before using NextQuestId. NextQuestId is considered optional and to be used only when PrevQuestId is not sufficient
Basic quest
Single, stand-alone quest with no prerequisites
*questA*
PrevQuestId = 0 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questA
When this quest require another quest to be rewarded
*questA*
PrevQuestId = questX NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questA
Chain of quests
Player get quests in a strict chain that must be completed in a specific order.
*questA* | *questB* | *questC* | *questD*
PrevQuestId = 0 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = questB entry = questA PrevQuestId = questA NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = questC entry = questB PrevQuestId = questB NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = questD entry = questC PrevQuestId = questC NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questD
Chain of quests with multiple start quests.
Player should only be allowed to complete one of three possible
*questA* *questB* *questC* \ | / ------ *questD* ----- | *questE*
PrevQuestId = 0 NextQuestId = questD ExclusiveGroup = questA NextQuestInChain = questD entry = questA PrevQuestId = 0 NextQuestId = questD ExclusiveGroup = questA NextQuestInChain = questD entry = questB PrevQuestId = 0 NextQuestId = questD ExclusiveGroup = questA NextQuestInChain = questD entry = questC PrevQuestId = 0 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = questE entry = questD PrevQuestId = questD NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questE
Chain of quests with multiple start quests.
Player must complete all three initial quests before D becomes available
*questA* *questB* *questC* \ | / ------ *questD* ----- | *questE*
PrevQuestId = 0 NextQuestId = questD ExclusiveGroup = -questA NextQuestInChain = questD entry = questA PrevQuestId = 0 NextQuestId = questD ExclusiveGroup = -questA NextQuestInChain = questD entry = questB PrevQuestId = 0 NextQuestId = questD ExclusiveGroup = -questA NextQuestInChain = questD entry = questC PrevQuestId = 0 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = questE entry = questD PrevQuestId = questD NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questE
Quests with split and a child quest
Completing A unlocks B and C that can be done at the same time. They both need to be completed before D becomes available. X is needed to obtain item for C and this quest should only be available if C is active
*questA* / \ *questB *questC* - *questX* \ / *questD*
PrevQuestId = 0 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questA PrevQuestId = questA NextQuestId = questD ExclusiveGroup = -questB NextQuestInChain = 0 entry = questB PrevQuestId = questA NextQuestId = questD ExclusiveGroup = -questB NextQuestInChain = 0 entry = questC PrevQuestId = -questC NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questX PrevQuestId = 0 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questD
Multiple quest chains, leading to one final quest
Player may complete (not required to) X, but has to complete all three quest chains before final quest becomes available
*questX* | *questA* *questC* *questE* | | | *questB* *questD* *questF* \ | / ------ *questG* -----
PrevQuestId = 0 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = questC entry = questX PrevQuestId = 0 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = questB entry = questA PrevQuestId = questA NextQuestId = questG ExclusiveGroup = -questB NextQuestInChain = 0 entry = questB PrevQuestId = 0 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = questD entry = questC PrevQuestId = questC NextQuestId = questG ExclusiveGroup = -questB NextQuestInChain = 0 entry = questD PrevQuestId = 0 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = questF entry = questE PrevQuestId = questE NextQuestId = questG ExclusiveGroup = -questB NextQuestInChain = 0 entry = questF PrevQuestId = 0 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questG
Complicated
Player must first complete A, then B to unlock the chain from C to E. Three other quests in a group will also be unlocked, those can be done at the same time. The three grouped quests must all be completed before I becomes available. Completion of E and I is required to obtain the final quest.
*questA* | *questB* / \ *questC* *questF* | *questG* *questD* *questH* | | *questE* *questI* \ / *questJ*
PrevQuestId = 0 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = questB entry = questA PrevQuestId = questA NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questB PrevQuestId = questB NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = questD entry = questC PrevQuestId = questC NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = questE entry = questD PrevQuestId = questD NextQuestId = questJ ExclusiveGroup = -questE NextQuestInChain = 0 entry = questE PrevQuestId = questB NextQuestId = questI ExclusiveGroup = -questF NextQuestInChain = 0 entry = questF PrevQuestId = questB NextQuestId = questI ExclusiveGroup = -questF NextQuestInChain = 0 entry = questG PrevQuestId = questB NextQuestId = questI ExclusiveGroup = -questF NextQuestInChain = 0 entry = questH PrevQuestId = 0 NextQuestId = questJ ExclusiveGroup = -questE NextQuestInChain = 0 entry = questI PrevQuestId = 0 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questJ
Impossible - many quests may unlock many
Player can choose between two alternative chains (Chain A or B, but not both chains). A2 or B2 should unlock C, D and E when complete. When all three complete, F should be unlocked. If player get A3 or B3 after complete F, depends on if chain A or B was chosen.
*questA1* *questB1* | | *questA2* *questB2* \ / ---- *questC* ---- *questD* *questE* | *questF* / \ *questA3* *questB3*
PrevQuestId = 0 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = questA2 entry = questA1 PrevQuestId = questA1 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questA2 PrevQuestId = 0 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = questB2 entry = questB1 PrevQuestId = questB1 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questB2 PrevQuestId = 0 NextQuestId = questF ExclusiveGroup = -questC NextQuestInChain = 0 entry = questC PrevQuestId = 0 NextQuestId = questF ExclusiveGroup = -questC NextQuestInChain = 0 entry = questD PrevQuestId = 0 NextQuestId = questF ExclusiveGroup = -questC NextQuestInChain = 0 entry = questE PrevQuestId = 0 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questF PrevQuestId = questF NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questA3 PrevQuestId = questF NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questB3
Note: if player can choose between chain A or B may be determined by faction status (aldor or scryer), using ReqMinRepFaction = 1. Player should not be able to be neutral+1 with both at the same time. This may be the common threshold to obtain aldor or scryer quests (this is unsure). If that is the case, only the unlock of C, D and E after complete A2 _or_ B2 is the impossible part.