Update check for class/jobs to make one shb role quest mandatory, and ew/dt role quests optional
This commit is contained in:
parent
3a1f525b0f
commit
bb4ab53b21
@ -310,7 +310,8 @@ internal sealed class QuestController : MiniTaskController<QuestController>, IDi
|
|||||||
|
|
||||||
if (_clientState.LocalPlayer!.Level < quest.Info.Level)
|
if (_clientState.LocalPlayer!.Level < quest.Info.Level)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("Stopping automation, player level ({PlayerLevel}) < quest level ({QuestLevel}",
|
_logger.LogInformation(
|
||||||
|
"Stopping automation, player level ({PlayerLevel}) < quest level ({QuestLevel}",
|
||||||
_clientState.LocalPlayer!.Level, quest.Info.Level);
|
_clientState.LocalPlayer!.Level, quest.Info.Level);
|
||||||
Stop("Quest level too high");
|
Stop("Quest level too high");
|
||||||
}
|
}
|
||||||
@ -364,7 +365,8 @@ internal sealed class QuestController : MiniTaskController<QuestController>, IDi
|
|||||||
if (questToRun.Sequence != currentSequence)
|
if (questToRun.Sequence != currentSequence)
|
||||||
{
|
{
|
||||||
questToRun.SetSequence(currentSequence);
|
questToRun.SetSequence(currentSequence);
|
||||||
CheckNextTasks($"New sequence {questToRun == _startedQuest}/{_questFunctions.GetCurrentQuestInternal()}");
|
CheckNextTasks(
|
||||||
|
$"New sequence {questToRun == _startedQuest}/{_questFunctions.GetCurrentQuestInternal()}");
|
||||||
}
|
}
|
||||||
|
|
||||||
var q = questToRun.Quest;
|
var q = questToRun.Quest;
|
||||||
@ -760,13 +762,28 @@ internal sealed class QuestController : MiniTaskController<QuestController>, IDi
|
|||||||
];
|
];
|
||||||
|
|
||||||
EClassJob classJob = (EClassJob?)_clientState.LocalPlayer?.ClassJob.Id ?? EClassJob.Adventurer;
|
EClassJob classJob = (EClassJob?)_clientState.LocalPlayer?.ClassJob.Id ?? EClassJob.Adventurer;
|
||||||
|
ushort[] shadowbringersRoleQuestChapters = QuestData.AllRoleQuestChapters.Select(x => x[0]).ToArray();
|
||||||
if (classJob != EClassJob.Adventurer)
|
if (classJob != EClassJob.Adventurer)
|
||||||
{
|
{
|
||||||
priorityQuests.AddRange(_questRegistry.GetKnownClassJobQuests(classJob)
|
priorityQuests.AddRange(_questRegistry.GetKnownClassJobQuests(classJob)
|
||||||
.Where(x => _questRegistry.TryGetQuest(x.QuestId, out Quest? quest) && quest.Info is QuestInfo
|
.Where(x =>
|
||||||
{
|
{
|
||||||
// ignore Endwalker/Dawntrail, as the class quests are optional
|
if (!_questRegistry.TryGetQuest(x.QuestId, out Quest? quest) ||
|
||||||
Expansion: EExpansionVersion.ARealmReborn or EExpansionVersion.Heavensward or EExpansionVersion.Stormblood or EExpansionVersion.Shadowbringers
|
quest.Info is not QuestInfo questInfo)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// if no shadowbringers role quest is complete, (at least one) is required
|
||||||
|
if (shadowbringersRoleQuestChapters.Contains(questInfo.NewGamePlusChapter))
|
||||||
|
return !QuestData.FinalShadowbringersRoleQuests.Any(_questFunctions.IsQuestComplete);
|
||||||
|
|
||||||
|
// ignore all other role quests
|
||||||
|
if (QuestData.AllRoleQuestChapters.Any(y => y.Contains(questInfo.NewGamePlusChapter)))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// even job quests for the later expacs (after role quests were introduced) might have skills locked
|
||||||
|
// behind them, e.g. reaper and sage
|
||||||
|
|
||||||
|
return true;
|
||||||
})
|
})
|
||||||
.Select(x => x.QuestId));
|
.Select(x => x.QuestId));
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,24 @@ internal sealed class QuestData
|
|||||||
{
|
{
|
||||||
public static readonly IReadOnlyList<QuestId> CrystalTowerQuests =
|
public static readonly IReadOnlyList<QuestId> CrystalTowerQuests =
|
||||||
[new(1709), new(1200), new(1201), new(1202), new(1203), new(1474), new(494), new(495)];
|
[new(1709), new(1200), new(1201), new(1202), new(1203), new(1474), new(494), new(495)];
|
||||||
|
|
||||||
|
public static readonly IReadOnlyList<ushort> TankRoleQuests = [136, 154, 178];
|
||||||
|
public static readonly IReadOnlyList<ushort> HealerRoleQuests = [137, 155, 179];
|
||||||
|
public static readonly IReadOnlyList<ushort> MeleeRoleQuests = [138, 156, 180];
|
||||||
|
public static readonly IReadOnlyList<ushort> PhysicalRangedRoleQuests = [138, 157, 181];
|
||||||
|
public static readonly IReadOnlyList<ushort> CasterRoleQuests = [139, 158, 182];
|
||||||
|
public static readonly IReadOnlyList<IReadOnlyList<ushort>> AllRoleQuestChapters =
|
||||||
|
[
|
||||||
|
TankRoleQuests,
|
||||||
|
HealerRoleQuests,
|
||||||
|
MeleeRoleQuests,
|
||||||
|
PhysicalRangedRoleQuests,
|
||||||
|
CasterRoleQuests
|
||||||
|
];
|
||||||
|
|
||||||
|
public static readonly IReadOnlyList<QuestId> FinalShadowbringersRoleQuests =
|
||||||
|
[new(3248), new(3272), new(3278), new(3628)];
|
||||||
|
|
||||||
private readonly Dictionary<ElementId, IQuestInfo> _quests;
|
private readonly Dictionary<ElementId, IQuestInfo> _quests;
|
||||||
|
|
||||||
public QuestData(IDataManager dataManager)
|
public QuestData(IDataManager dataManager)
|
||||||
@ -134,11 +152,11 @@ internal sealed class QuestData
|
|||||||
|
|
||||||
chapterIds.AddRange(classJob switch
|
chapterIds.AddRange(classJob switch
|
||||||
{
|
{
|
||||||
_ when classJob.IsTank() => [136, 154, 178],
|
_ when classJob.IsTank() => TankRoleQuests,
|
||||||
_ when classJob.IsHealer() => [137, 155, 179],
|
_ when classJob.IsHealer() => HealerRoleQuests,
|
||||||
_ when classJob.IsMelee() => [138, 156, 180],
|
_ when classJob.IsMelee() => MeleeRoleQuests,
|
||||||
_ when classJob.IsPhysicalRanged() => [138, 157, 181],
|
_ when classJob.IsPhysicalRanged() => PhysicalRangedRoleQuests,
|
||||||
_ when classJob.IsCaster() && classJob != EClassJob.BlueMage => [139, 158, 182],
|
_ when classJob.IsCaster() && classJob != EClassJob.BlueMage => CasterRoleQuests,
|
||||||
_ => []
|
_ => []
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user