Quest template
Материал из YTDB DataBase
NeatElves (Обсуждение | вклад) (→Examples) |
NeatElves (Обсуждение | вклад) |
||
(20 промежуточных версий не показаны.) | |||
Строка 96: | Строка 96: | ||
|[[#RequiredSkillValue|RequiredSkillValue]] | |[[#RequiredSkillValue|RequiredSkillValue]] | ||
|smallint(5) | |smallint(5) | ||
+ | |unsigned | ||
+ | |NO | ||
+ | | | ||
+ | |0 | ||
+ | | | ||
+ | |- | ||
+ | |[[#RequiredCondition|RequiredCondition]] | ||
+ | |int(11) | ||
|unsigned | |unsigned | ||
|NO | |NO | ||
Строка 892: | Строка 900: | ||
| | | | ||
|0 | |0 | ||
+ | | | ||
+ | |- | ||
+ | |[[#RewMaxRepValue|RewMaxRepValue1]] | ||
+ | |mediumint(8) | ||
+ | | | ||
+ | |NO | ||
+ | | | ||
+ | |42999 | ||
+ | | | ||
+ | |- | ||
+ | |[[#RewMaxRepValue|RewMaxRepValue2]] | ||
+ | |mediumint(8) | ||
+ | | | ||
+ | |NO | ||
+ | | | ||
+ | |42999 | ||
+ | | | ||
+ | |- | ||
+ | |[[#RewMaxRepValue|RewMaxRepValue3]] | ||
+ | |mediumint(8) | ||
+ | | | ||
+ | |NO | ||
+ | | | ||
+ | |42999 | ||
+ | | | ||
+ | |- | ||
+ | |[[#RewMaxRepValue|RewMaxRepValue4]] | ||
+ | |mediumint(8) | ||
+ | | | ||
+ | |NO | ||
+ | | | ||
+ | |42999 | ||
+ | | | ||
+ | |- | ||
+ | |[[#RewMaxRepValue|RewMaxRepValue5]] | ||
+ | |mediumint(8) | ||
+ | | | ||
+ | |NO | ||
+ | | | ||
+ | |42999 | ||
| | | | ||
|- | |- | ||
Строка 1056: | Строка 1104: | ||
|[[#IncompleteEmote|IncompleteEmote]] | |[[#IncompleteEmote|IncompleteEmote]] | ||
|smallint(5) | |smallint(5) | ||
+ | |unsigned | ||
+ | |NO | ||
+ | | | ||
+ | |0 | ||
+ | | | ||
+ | |- | ||
+ | |[[#IncompleteEmoteDelay|IncompleteEmoteDelay]] | ||
+ | |int(11) | ||
|unsigned | |unsigned | ||
|NO | |NO | ||
Строка 1064: | Строка 1120: | ||
|[[#CompleteEmote|CompleteEmote]] | |[[#CompleteEmote|CompleteEmote]] | ||
|smallint(5) | |smallint(5) | ||
+ | |unsigned | ||
+ | |NO | ||
+ | | | ||
+ | |0 | ||
+ | | | ||
+ | |- | ||
+ | |[[#CompleteEmoteDelay|CompleteEmoteDelay]] | ||
+ | |int(11) | ||
|unsigned | |unsigned | ||
|NO | |NO | ||
Строка 1202: | Строка 1266: | ||
Требуемое значение навыка игрока если в [[quest_template#SkillOrClass|SkillOrClass]] значение > 0 и имеет номер какого либо навыка. | Требуемое значение навыка игрока если в [[quest_template#SkillOrClass|SkillOrClass]] значение > 0 и имеет номер какого либо навыка. | ||
+ | |||
+ | ====RequiredCondition==== | ||
+ | Идентификатор условия [[conditions#condition_entry|conditions.condition_entry]]. | ||
====RepObjectiveFaction==== | ====RepObjectiveFaction==== | ||
Строка 1293: | Строка 1360: | ||
* 0: Нет дополнительных параметров | * 0: Нет дополнительных параметров | ||
* 1: Делает задание повторяемым. | * 1: Делает задание повторяемым. | ||
- | * 2: Делает возможным выполнение задания только при некотором событии (активация [[areatrigger_involvedrelation]], эффект спелла | + | * 2: Делает возможным выполнение задания только при некотором событии (активация [[areatrigger_involvedrelation]], эффект спелла выполнения задания или активация скриптами [[dbscripts_on_*]] с командой 7 как пример) |
* 4: Делает квест ежемесячным. | * 4: Делает квест ежемесячным. | ||
Строка 1344: | Строка 1411: | ||
Смотрите [[#Examples|раздел примеров]] для пояснения. | Смотрите [[#Examples|раздел примеров]] для пояснения. | ||
+ | |||
+ | ====RewXPId==== | ||
+ | Ссылка на поле в QuestExp.dbc. Указывается номер поля (Field1-10). Номер указывается как номер поля -1, т.е. если нам нужно поле Field6, указываем 5 (6-1). | ||
+ | Номер поля id в QuestExp.dbc соответствует уровню квеста (QuestLevel). | ||
====SrcItemId==== | ====SrcItemId==== | ||
Строка 1373: | Строка 1444: | ||
====OfferRewardText==== | ====OfferRewardText==== | ||
- | Первый текст посылаемый игроку NPC'ом при завершении задания. Вы можете использовать определенные метки которые будут преобразованы в игре: $B - конец строки, $N - имя, $R - раса, $C - класс, $Gмужской:женский; (мужской и женский могут быть заменены любыми синонимами какими Вы захотите, но смысл должен остаться тем же самым. То есть: мальчик:девочка / мужчина:женщина / сэр:мадам / dude:chick) | + | Первый текст посылаемый игроку NPC'ом при завершении задания. (Текст под заголовком "Completion" в Wowhead.) Вы можете использовать определенные метки которые будут преобразованы в игре: $B - конец строки, $N - имя, $R - раса, $C - класс, $Gмужской:женский; (мужской и женский могут быть заменены любыми синонимами какими Вы захотите, но смысл должен остаться тем же самым. То есть: мальчик:девочка / мужчина:женщина / сэр:мадам / dude:chick) |
====RequestItemsText==== | ====RequestItemsText==== | ||
Строка 1401: | Строка 1472: | ||
====ReqSourceCount==== | ====ReqSourceCount==== | ||
Максимальное количество копий предмета из [[#ReqSourceID|ReqSourceID]] которое игрок сможет собрать (and dropped by the core). | Максимальное количество копий предмета из [[#ReqSourceID|ReqSourceID]] которое игрок сможет собрать (and dropped by the core). | ||
- | Если [[#ReqSourceID|ReqSourceID]] !=0 и ReqSourceCount = 0, то лимит на количество предметов отсутствует. | + | Если [[#ReqSourceID|ReqSourceID]] !=0 и [[#ReqSourceID|ReqSourceCount]] = 0, то лимит на количество предметов отсутствует. |
====ReqCreatureOrGOId==== | ====ReqCreatureOrGOId==== | ||
Строка 1446: | Строка 1517: | ||
Обычно награда за задание репутацией с фракцией моба вычисляется и добавляется автоматически. | Обычно награда за задание репутацией с фракцией моба вычисляется и добавляется автоматически. | ||
- | ==== | + | ====RewHonorAddition==== |
Число почетных убийств награждаемых очками чести по завершению задания. | Число почетных убийств награждаемых очками чести по завершению задания. | ||
Пример: | Пример: | ||
Возьмем значение 15 для задания 8388: На 70 уровне за почетное убийство начисляется 20.9 очков чести. Умножьте это на 15 и получите 313.5, после умножения, значение округляется в большую сторону. Таким образом на 70 уровне награда за это задание составит 314 очков чести. | Возьмем значение 15 для задания 8388: На 70 уровне за почетное убийство начисляется 20.9 очков чести. Умножьте это на 15 и получите 313.5, после умножения, значение округляется в большую сторону. Таким образом на 70 уровне награда за это задание составит 314 очков чести. | ||
+ | |||
+ | ====RewHonorMultiplier==== | ||
+ | |||
+ | |||
====RewOrReqMoney==== | ====RewOrReqMoney==== | ||
Строка 1502: | Строка 1577: | ||
====StartScript==== | ====StartScript==== | ||
- | Идентификатор скрипта, срабатывающего при взятии задания. См. [[ | + | Идентификатор скрипта, срабатывающего при взятии задания. См. [[dbscripts_on_quest_start#id|dbscripts_on_quest_start.id]] |
====CompleteScript==== | ====CompleteScript==== | ||
- | Идентификатор скрипта, срабатывающего при сдаче задания. См. [[ | + | Идентификатор скрипта, срабатывающего при сдаче задания. См. [[dbscripts_on_quest_end#id|dbscripts_on_quest_end.id]] |
- | ==Examples== | + | ====Examples==== |
Строка 1513: | Строка 1588: | ||
'''The "rules of engagement" dealing with quests''' | '''The "rules of engagement" dealing with quests''' | ||
- | 1. | + | 1. Всегда сначала укажите PrevQuestId перед тем как указывать NextQuestId. NextQuestId является не обязательным параметром и будет использоваться только тогда, когда PrevQuestId недостаточно |
- | + | ||
- | ''' | + | '''Основной принцип''' |
- | '' | + | ''Одиночное заданиеА, без каких либо условий'' |
<pre> | <pre> | ||
*questA* | *questA* | ||
Строка 1525: | Строка 1599: | ||
PrevQuestId = 0 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questA | PrevQuestId = 0 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questA | ||
</pre> | </pre> | ||
- | '' | + | ''Для взятия заданияА необходимо выполнить предыдущее заданиеХ'' |
<pre> | <pre> | ||
*questA* | *questA* | ||
Строка 1533: | Строка 1607: | ||
</pre> | </pre> | ||
- | ''' | + | '''Цепочка квестов''' |
- | '' | + | ''Персонаж должен выполнить цепочку квестов в строго определенном порядке'' |
<pre> | <pre> | ||
Строка 1553: | Строка 1627: | ||
</pre> | </pre> | ||
- | ''' | + | '''Цепочка квестов с несколькими квестами в качестве первого в цепочке.''' |
- | '' | + | ''Игроку достаточно завершить хотя бы один из трёх возможных квестов'' |
<pre> | <pre> | ||
Строка 1573: | Строка 1647: | ||
- | ''' | + | '''Цепочка квестов с несколькими квестами в качестве первого в цепочке.''' |
- | '' | + | ''Игрок должен выполнить все три квеста, прежде чем задание D станет доступным'' |
<pre> | <pre> | ||
Строка 1593: | Строка 1667: | ||
- | ''' | + | '''Квесты с разветвлениями и побочным квестом''' |
- | '' | + | ''Выполнение A разблокирует B и C которые могут выполняться одновременно. Оба должны быть завершены, чтобы квест D стал доступен. Квест X необходим, чтобы получить предмет для квеста C и этот квест должен быть доступен только если квест C находится в процессе выполнения'' |
<pre> | <pre> | ||
Строка 1613: | Строка 1687: | ||
- | ''' | + | '''Несколько цепочек, оканчивающиеся одним финальным квестом''' |
- | '' | + | ''Игрок может выполнить квест X (не обязательно), но должен завершить все три цепочки квестов прежде чем финальный квест станет доступным'' |
<pre> | <pre> | ||
Строка 1640: | Строка 1714: | ||
- | ''' | + | '''Сложные цепочки''' |
- | '' | + | ''Игрок должен выполнить A, чтобы разблокировать B, который разблокирует цепочку квестов от C до E. Другие три квеста также будут разблокированы после выполнения B, они могу выполняться в тоже время, что и цепочка C-E. Три сгруппированнных квеста (F, G, H) должны быть выполнены, чтобы стал доступен I. Выполнение квестов E и I необходимо для того, чтобы финальный квест стал доступен.'' |
<pre> | <pre> | ||
*questA* | *questA* | ||
Строка 1674: | Строка 1748: | ||
- | ''' | + | '''Невероятное - многие квесты могут разблокировать многие квесты =)''' |
- | '' | + | ''Игрок может выбрать между двумя альтернативными цепочками (Цепочка A или B, но не обе). A2 или B2 разблокируют C, D и E когда будут завершены. Когда все три завершены, F станет доступен. Какие квесты будут доступны после выполнения F (A3 или B3), зависит от того, какая цепочка (A или B) была выбрана.'' |
<pre> | <pre> | ||
*questA1* *questB1* | *questA1* *questB1* |
Текущая версия на 06:02, 3 июля 2019
К описанию таблиц базы данных mangos.
Таблица `quest_template`
Содержит все основные определения доступных заданий.
Структура
Field | Type | Attributes | Null | Key | Default | Comments |
entry | mediumint(8) | unsigned | NO | PRI | 0 | |
Method | tinyint(3) | unsigned | NO | 2 | ||
ZoneOrSort | smallint(6) | NO | 0 | |||
MinLevel | tinyint(3) | unsigned | NO | 0 | ||
QuestLevel | smallint(6) | NO | 0 | |||
Type | smallint(5) | unsigned | NO | 0 | ||
RequiredClasses | smallint(5) | unsigned | NO | 0 | ||
RequiredRaces | smallint(5) | unsigned | NO | 0 | ||
RequiredSkill | smallint(5) | unsigned | NO | 0 | ||
RequiredSkillValue | smallint(5) | unsigned | NO | 0 | ||
RequiredCondition | int(11) | unsigned | NO | 0 | ||
RepObjectiveFaction | smallint(5) | unsigned | NO | 0 | ||
RepObjectiveValue | mediumint(9) | NO | 0 | |||
RequiredMinRepFaction | smallint(5) | unsigned | NO | 0 | ||
RequiredMinRepValue | mediumint(9) | NO | 0 | |||
RequiredMaxRepFaction | smallint(5) | unsigned | NO | 0 | ||
RequiredMaxRepValue | mediumint(9) | NO | 0 | |||
SuggestedPlayers | tinyint(3) | unsigned | NO | 0 | ||
LimitTime | int(10) | NO | 0 | |||
QuestFlags | mediumint(8) | 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) | unsigned | NO | 0 | ||
RewXPId | tinyint(3) | unsigned | NO | 0 | ||
SrcItemId | mediumint(8) | unsigned | NO | 0 | ||
SrcItemCount | tinyint(3) | unsigned | NO | 0 | ||
SrcSpell | mediumint(8) | unsigned | NO | 0 | ||
Title | text | |||||
Details | text | |||||
Objectives | text | |||||
OfferRewardText | text | |||||
RequestItemsText | text | |||||
EndText | text | |||||
CompletedText | text | |||||
ObjectiveText1 | text | |||||
ObjectiveText2 | text | |||||
ObjectiveText3 | text | |||||
ObjectiveText4 | text | |||||
ReqItemId1 | mediumint(8) | unsigned | NO | 0 | ||
ReqItemId2 | mediumint(8) | unsigned | NO | 0 | ||
ReqItemId3 | mediumint(8) | unsigned | NO | 0 | ||
ReqItemId4 | mediumint(8) | unsigned | NO | 0 | ||
ReqItemId5 | mediumint(8) | unsigned | NO | 0 | ||
ReqItemId6 | 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 | ||
ReqItemCount5 | smallint(5) | unsigned | NO | 0 | ||
ReqItemCount6 | smallint(5) | unsigned | NO | 0 | ||
ReqSourceId1 | mediumint(8) | unsigned | NO | 0 | ||
ReqSourceId2 | mediumint(8) | unsigned | NO | 0 | ||
ReqSourceId3 | mediumint(8) | unsigned | NO | 0 | ||
ReqSourceId4 | mediumint(8) | unsigned | NO | 0 | ||
ReqSourceCount1 | smallint(5) | unsigned | NO | 0 | ||
ReqSourceCount2 | smallint(5) | unsigned | NO | 0 | ||
ReqSourceCount3 | smallint(5) | unsigned | NO | 0 | ||
ReqSourceCount4 | smallint(5) | unsigned | 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) | unsigned | NO | 0 | ||
ReqSpellCast3 | mediumint(8) | unsigned | NO | 0 | ||
ReqSpellCast4 | mediumint(8) | unsigned | 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) | unsigned | NO | 0 | faction id from Faction.dbc in this case | |
RewRepFaction2 | smallint(5) | unsigned | NO | 0 | faction id from Faction.dbc in this case | |
RewRepFaction3 | smallint(5) | unsigned | NO | 0 | faction id from Faction.dbc in this case | |
RewRepFaction4 | smallint(5) | unsigned | NO | 0 | faction id from Faction.dbc in this case | |
RewRepFaction5 | smallint(5) | unsigned | NO | 0 | faction id from Faction.dbc in this case | |
RewRepValueId1 | tinyint(3) | NO | 0 | |||
RewRepValueId2 | tinyint(3) | NO | 0 | |||
RewRepValueId3 | tinyint(3) | NO | 0 | |||
RewRepValueId4 | tinyint(3) | NO | 0 | |||
RewRepValueId5 | tinyint(3) | 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 | |||
RewMaxRepValue1 | mediumint(8) | NO | 42999 | |||
RewMaxRepValue2 | mediumint(8) | NO | 42999 | |||
RewMaxRepValue3 | mediumint(8) | NO | 42999 | |||
RewMaxRepValue4 | mediumint(8) | NO | 42999 | |||
RewMaxRepValue5 | mediumint(8) | NO | 42999 | |||
RewHonorAddition | int | unsigned | NO | 0 | ||
RewHonorMultiplier | float | 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) | unsigned | 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 | ||
DetailsEmoteDelay1 | int(11) | unsigned | NO | 0 | ||
DetailsEmoteDelay2 | int(11) | unsigned | NO | 0 | ||
DetailsEmoteDelay3 | int(11) | unsigned | NO | 0 | ||
DetailsEmoteDelay4 | int(11) | unsigned | NO | 0 | ||
IncompleteEmote | smallint(5) | unsigned | NO | 0 | ||
IncompleteEmoteDelay | int(11) | unsigned | NO | 0 | ||
CompleteEmote | smallint(5) | unsigned | NO | 0 | ||
CompleteEmoteDelay | int(11) | 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 | ||
OfferRewardEmoteDelay1 | int(11) | unsigned | NO | 0 | ||
OfferRewardEmoteDelay2 | int(11) | unsigned | NO | 0 | ||
OfferRewardEmoteDelay3 | int(11) | unsigned | NO | 0 | ||
OfferRewardEmoteDelay4 | int(11) | 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.
MinLevel
Минимальный уровень, необходимый что бы получить задание.
QuestLevel
Уровень задания. Игрок получает полное количество опыта, только если его уровень меньше или равен 5.
Type
Значение берется из QuestInfo.dbc
Value | Type |
1 | Группа |
21 | Жизнь |
41 | PvP |
62 | Рейд |
81 | Подземелье |
82 | Игровое событие |
83 | Легенда |
84 | Сопровождение |
85 | Героическое |
88 | Рейд (10) |
89 | Рейд (25) |
RequiredClasses
Классы, которым доступен квест. Если 0 - квест доступен для всех классов. Значение вычисляется по формуле: 2^(ID-1),ID берется из ChrClasses.dbc
Значение | Название |
1 | Воин |
2 | Паладин |
4 | Охотник |
8 | Разбойник |
16 | Жрец |
32 | Рыцарь смерти |
64 | Шаман |
128 | Маг |
256 | Чернокнижник |
1024 | Друид |
1535 | Все классы |
Сумма значений для всех классов - 1535
RequiredRaces
Расы, которым доступен квест. Если 0 - квест доступен для всех рас. Значение вычисляется по формуле: 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 ) | Только альянс |
RequiredSkill
Это поле определяет навык или требования класса для задания, что бы оно было доступено только относительно этих требований, учитывается как номер навыка из SkillLine.dbc.
RequiredSkillValue
Требуемое значение навыка игрока если в SkillOrClass значение > 0 и имеет номер какого либо навыка.
RequiredCondition
Идентификатор условия conditions.condition_entry.
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_FLAGS_PVP | Ежедневные PvP задания в зоне Седые Холмы (может быть все таки Озеро Ледяных Оков?)? Задание можно взять только если у игрока включен режим PvP. |
16384 | QUEST_FLAGS_UNK4 | ? Membership Card Renewal. |
32768 | QUEST_FLAGS_WEEKLY | Weekly quest. Can be done once a week. Quests reset at regular intervals for all players. |
65536 | QUEST_FLAGS_AUTOCOMPLETE | Auto complete. |
131072 | QUEST_FLAGS_UNK5 | Has something to do with ReqItemId and SrcItemId. |
262144 | QUEST_FLAGS_UNK6 | Use Objective text as Complete text. |
524288 | QUEST_FLAGS_AUTO_ACCEPT | Quests in starting areas. |
Как и другие флаги, QuestFlags позволяет добавлять несколько типов для задания.
SpecialFlags
Это поле - битовая маска, управляет двумя дополнительными параметрами и может принимать 4 возможных значения.
- 0: Нет дополнительных параметров
- 1: Делает задание повторяемым.
- 2: Делает возможным выполнение задания только при некотором событии (активация areatrigger_involvedrelation, эффект спелла выполнения задания или активация скриптами dbscripts_on_* с командой 7 как пример)
- 4: Делает квест ежемесячным.
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. Результат, если вы заканчиваете задание, новое задание отобразится автоматически.
Смотрите раздел примеров для пояснения.
RewXPId
Ссылка на поле в QuestExp.dbc. Указывается номер поля (Field1-10). Номер указывается как номер поля -1, т.е. если нам нужно поле Field6, указываем 5 (6-1). Номер поля id в QuestExp.dbc соответствует уровню квеста (QuestLevel).
SrcItemId
Идентификатор вещи выдаваемой игроку при взятии задания. Вещь удаляется из инвентаря при отмене задания.
SrcItemCount
Количество выдаваемых вещей из SrcItemId.
SrcSpell
Спелл кастуемый на игрока при взятии задания. Может быть баффом или обучающим спеллом.
Title
Название задания.
Details
Текст задания. Вы можете использовать определенные метки которые будут преобразованы в игре: $B - конец строки, $N - имя, $R - раса, $C - класс, $Gмужской:женский; (мужской и женский могут быть заменены любыми синонимами какими Вы захотите, но смысл должен остаться тем же самым. То есть: мальчик:девочка / мужчина:женщина / сэр:мадам / dude:chick)
Objectives
Цель задания. Если пусто, задание выполняется автоматически и может быть сдано без взятия.
OfferRewardText
Первый текст посылаемый игроку NPC'ом при завершении задания. (Текст под заголовком "Completion" в Wowhead.) Вы можете использовать определенные метки которые будут преобразованы в игре: $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
Уникальный номер(ID) вещи из Item_template необходимой для выполнения задания.
ReqItemCount
Количество требуемых вещей.
ReqSourceID
Это идентификатор (ID) предмета из item_template, являющегося источником для создания ReqItemId или каста ReqSpellCast. Позволяет получать игрокам квестовый дроп который не является предметами, необходимыми для завершения задания (ReqItemId предназначен для этого), но необходимы игроку для создания предмета, доставки или каста ReqSpellCast. Только те предметы у которых есть шанс квестового дропа ChanceOrQuestChance < 0 в Item_loot_template должны использоваться здесь как источники.
Пример: Для задания требуется предмет Х, но единственный способ его получить это использование предмета Y. Поэтому предмет Y тоже требуется для задания и его идентификатор (ID) указывается в этом поле. Это требование не указывается в тексте задания, и требуется ядру для того что бы знать, дроп какого предмета не указанного в ReqItemId необходим для выполнения задания.
ReqSourceCount
Максимальное количество копий предмета из ReqSourceID которое игрок сможет собрать (and dropped by the core). Если ReqSourceID !=0 и ReqSourceCount = 0, то лимит на количество предметов отсутствует.
ReqCreatureOrGOId
Значение > 0: Идентификатор (ID) мобов из creature_template которых игрок должен убить/кастануть для выполнения задания.
Значение < 0: Идентификатор (ID) объектов из gameobject_template которые игрок должен активировать для выполнения задания.
Если ReqSpellCast != 0, то на цель необходимо скастовать спелл, иначе убить.
На заметку: если ReqSpellCast != 0 и спелл имеет эффект "начало эвента" или "выполнение задания", это поле можно оставить пустым.
ReqCreatureOrGOCount
Количество убитых мобов или активированных объектов из поля ReqCreatureOrGOId.
ReqSpellCast
Идентификатор (ID) спелла из Spell.dbc, который должен быть скастован для того что бы выполнить задание. Обычно спеллу нужна цель, которая указывается в ReqCreatureOrGOId
И для спеллов с "SpellEffect ImpliciteTargetA-B == 38" сверяться с таблицей Spell_script_target
На заметку: если спелл имеет эффекты "начало эвента" или "выполнение задания", то можно не указывать его цель ReqCreatureOrGOId и количество ReqCreatureOrGOCount.
RewChoiceItemId, RewChoiceItemCount
Идентификатор (ID) предмета из item_template доступного для выбора в качестве награды.
Количество предметов получаемых в качестве награды.
RewItemId, RewItemCount
Идентификатор (ID) предмета из item_template доступного в качестве награды (не на выбор).
Количество предметов.
RewRepFaction, RewRepValue, RewRepValueId
Идентификатор (Id) фракции (из Faction.dbc) к которой добавятся очки репутации при сдаче задания.
Число на которое увеличится/уменьшится количество репутации с фракцией из RewRepFaction при сдаче задания. Это дополнительная награда репутацией. Если поле RewRepValue пустое, то репутация рассчитывается исходя из указателя(поле RewRepValueId) на значение из QuestFactionReward.dbc, а если поле RewRepValue непустое, то к репутации добавляется(отнимается) его значение. Обычно награда за задание репутацией с фракцией моба вычисляется и добавляется автоматически.
RewHonorAddition
Число почетных убийств награждаемых очками чести по завершению задания.
Пример: Возьмем значение 15 для задания 8388: На 70 уровне за почетное убийство начисляется 20.9 очков чести. Умножьте это на 15 и получите 313.5, после умножения, значение округляется в большую сторону. Таким образом на 70 уровне награда за это задание составит 314 очков чести.
RewHonorMultiplier
RewOrReqMoney
Значение > 0: Деньги получаемые при сдаче задания.
Значение < 0: Деньги требуемые для сдачи задания.
RewMoneyMaxLevel
Деньги получаемые персонажем на 80 уровне при сдаче задания. Это поле так же контролирует получаемый опыт. Если задание повторяемое, опыт дается за него один раз. Количество опыта, получаемого персонажем, зависит от разницы между уровнем персонажа и уровнем задания.
RewSpell
Спелл отображаемый в списке заданий, который будет скастован на чара при сдаче задания. Заметьте что этот спелл не будет скастован если значение в поле RewSpellCast не равно нулю. В этом случае будет скастован спелл обозначенный в другом поле, а спелл из этого поля будет всего лишь визуальным оформлением в списке заданий.
Важно: Это поле заполняется из WDB и не должно изменяться.
RewSpellCast
Заклинание будет произнесено на игрока, когда задание будет завершено. В данном поле так же можно указать обучающее заклинание или баф (пример). Если это поле не равно нулю, то будет кастоваться именно это заклинание, а заклинание из поля RewSpell не будет.
Примечание: значения для данного поля берутся из WDB и не должны изменяться.
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 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
Идентификатор скрипта, срабатывающего при взятии задания. См. dbscripts_on_quest_start.id
CompleteScript
Идентификатор скрипта, срабатывающего при сдаче задания. См. dbscripts_on_quest_end.id
Examples
The "rules of engagement" dealing with quests
1. Всегда сначала укажите PrevQuestId перед тем как указывать NextQuestId. NextQuestId является не обязательным параметром и будет использоваться только тогда, когда PrevQuestId недостаточно
Основной принцип
Одиночное заданиеА, без каких либо условий
*questA*
PrevQuestId = 0 NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questA
Для взятия заданияА необходимо выполнить предыдущее заданиеХ
*questA*
PrevQuestId = questX NextQuestId = 0 ExclusiveGroup = 0 NextQuestInChain = 0 entry = questA
Цепочка квестов
Персонаж должен выполнить цепочку квестов в строго определенном порядке
*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
Цепочка квестов с несколькими квестами в качестве первого в цепочке.
Игроку достаточно завершить хотя бы один из трёх возможных квестов
*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
Цепочка квестов с несколькими квестами в качестве первого в цепочке.
Игрок должен выполнить все три квеста, прежде чем задание D станет доступным
*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
Квесты с разветвлениями и побочным квестом
Выполнение A разблокирует B и C которые могут выполняться одновременно. Оба должны быть завершены, чтобы квест D стал доступен. Квест X необходим, чтобы получить предмет для квеста C и этот квест должен быть доступен только если квест C находится в процессе выполнения
*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
Несколько цепочек, оканчивающиеся одним финальным квестом
Игрок может выполнить квест X (не обязательно), но должен завершить все три цепочки квестов прежде чем финальный квест станет доступным
*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
Сложные цепочки
Игрок должен выполнить A, чтобы разблокировать B, который разблокирует цепочку квестов от C до E. Другие три квеста также будут разблокированы после выполнения B, они могу выполняться в тоже время, что и цепочка C-E. Три сгруппированнных квеста (F, G, H) должны быть выполнены, чтобы стал доступен I. Выполнение квестов E и I необходимо для того, чтобы финальный квест стал доступен.
*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
Невероятное - многие квесты могут разблокировать многие квесты =)
Игрок может выбрать между двумя альтернативными цепочками (Цепочка A или B, но не обе). A2 или B2 разблокируют C, D и E когда будут завершены. Когда все три завершены, F станет доступен. Какие квесты будут доступны после выполнения F (A3 или B3), зависит от того, какая цепочка (A или B) была выбрана.
*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.