public QuestData(IDataManager dataManager)
{
+ JournalGenreOverrides journalGenreOverrides = new()
+ {
+ RadzAtHanSideQuests = dataManager.GetExcelSheet<Quest>().GetRow(69805).JournalGenre.RowId,
+ ThavnairSideQuests = dataManager.GetExcelSheet<Quest>().GetRow(70025).JournalGenre.RowId,
+ };
+
Dictionary<uint, uint> questChapters =
dataManager.GetExcelSheet<QuestChapter>()
.Where(x => x.RowId > 0 && x.Quest.RowId > 0)
.Where(x => x.RowId > 0)
.Where(x => x.IssuerLocation.RowId > 0)
.Select(x => new QuestInfo(x, questChapters.GetValueOrDefault(x.RowId),
- startingCities.GetValueOrDefault(x.RowId))),
+ startingCities.GetValueOrDefault(x.RowId), journalGenreOverrides)),
..dataManager.GetExcelSheet<SatisfactionNpc>()
.Where(x => x is { RowId: > 0, Npc.RowId: > 0 })
.Select(x => new SatisfactionSupplyInfo(x)),
--- /dev/null
+namespace Questionable.Model;
+
+internal sealed class JournalGenreOverrides
+{
+ public required uint ThavnairSideQuests { get; init; }
+ public required uint RadzAtHanSideQuests { get; init; }
+}
internal sealed class QuestInfo : IQuestInfo
{
- public QuestInfo(ExcelQuest quest, uint newGamePlusChapter, byte startingCity)
+ public QuestInfo(ExcelQuest quest, uint newGamePlusChapter, byte startingCity, JournalGenreOverrides journalGenreOverrides)
{
QuestId = new QuestId((ushort)(quest.RowId & 0xFFFF));
.Where(x => x.Value != 0)
.ToImmutableList();
QuestLockJoin = (EQuestJoin)quest.QuestLockJoin;
- JournalGenre = quest.JournalGenre.ValueNullable?.RowId;
+ JournalGenre = QuestId.Value switch
+ {
+ >= 4196 and <= 4209 => journalGenreOverrides.ThavnairSideQuests,
+ 4173 => journalGenreOverrides.RadzAtHanSideQuests,
+ _ => quest.JournalGenre.ValueNullable?.RowId,
+ };
SortKey = quest.SortKey;
IsMainScenarioQuest = quest.JournalGenre.ValueNullable?.JournalCategory.ValueNullable?.JournalSection
.ValueNullable?.RowId is 0 or 1;