Only mark 'Close to Home' as unobtainable once one of them has been picked up or completed
This commit is contained in:
parent
3a7c877a68
commit
c49a388d53
@ -1,5 +1,5 @@
|
|||||||
<Project>
|
<Project>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Version>3.0</Version>
|
<Version>3.1</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -476,34 +476,40 @@ internal sealed unsafe class QuestFunctions
|
|||||||
if (_questData.GetLockedClassQuests().Contains(questId))
|
if (_questData.GetLockedClassQuests().Contains(questId))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
unsafe
|
var startingCity = PlayerState.Instance()->StartTown;
|
||||||
|
if (questInfo.StartingCity > 0 && questInfo.StartingCity != startingCity)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (questId.Value == 674 && startingCity == 3)
|
||||||
|
return true;
|
||||||
|
if (questId.Value == 673 && startingCity != 3)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
Dictionary<ushort, EClassJob> closeToHomeQuests = new()
|
||||||
{
|
{
|
||||||
var startingCity = PlayerState.Instance()->StartTown;
|
{ 108, EClassJob.Marauder },
|
||||||
if (questInfo.StartingCity > 0 && questInfo.StartingCity != startingCity)
|
{ 109, EClassJob.Arcanist },
|
||||||
return true;
|
{ 85, EClassJob.Lancer },
|
||||||
|
{ 123, EClassJob.Archer },
|
||||||
|
{ 124, EClassJob.Conjurer },
|
||||||
|
{ 568, EClassJob.Gladiator },
|
||||||
|
{ 569, EClassJob.Pugilist },
|
||||||
|
{ 570, EClassJob.Thaumaturge }
|
||||||
|
};
|
||||||
|
|
||||||
if (questId.Value == 674 && startingCity == 3)
|
// The starting class experience is a bit confusing. If you start in Gridania, the MSQ next quest data will
|
||||||
|
// always select 'Close to Home (Lancer)' even if starting as Conjurer/Archer. However, if we always mark the
|
||||||
|
// Lancer quest as unobtainable, it'll not get picked up as Conjurer/Archer, and thus will stop questing.
|
||||||
|
//
|
||||||
|
// While the NPC offers all 3 quests, there's no manual selection, and interacting will automatically select the
|
||||||
|
// quest for your current class, then switch you from a dead-ish intro zone to the actual starting city
|
||||||
|
// (so that you can't come back later to pick up another quest).
|
||||||
|
if (closeToHomeQuests.TryGetValue(questId.Value, out EClassJob neededStartingClass) &&
|
||||||
|
closeToHomeQuests.Any(x => IsQuestAcceptedOrComplete(new QuestId(x.Key))))
|
||||||
|
{
|
||||||
|
EClassJob actualStartingClass = (EClassJob)PlayerState.Instance()->FirstClass;
|
||||||
|
if (actualStartingClass != neededStartingClass)
|
||||||
return true;
|
return true;
|
||||||
if (questId.Value == 673 && startingCity != 3)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
Dictionary<ushort, EClassJob> closeToHomeQuests = new()
|
|
||||||
{
|
|
||||||
{ 108, EClassJob.Marauder },
|
|
||||||
{ 109, EClassJob.Arcanist },
|
|
||||||
{ 85, EClassJob.Lancer },
|
|
||||||
{ 123, EClassJob.Archer },
|
|
||||||
{ 124, EClassJob.Conjurer },
|
|
||||||
{ 568, EClassJob.Gladiator },
|
|
||||||
{ 569, EClassJob.Pugilist },
|
|
||||||
{ 570, EClassJob.Thaumaturge }
|
|
||||||
};
|
|
||||||
if (closeToHomeQuests.TryGetValue(questId.Value, out EClassJob neededStartingClass))
|
|
||||||
{
|
|
||||||
EClassJob actualStartingClass = (EClassJob)PlayerState.Instance()->FirstClass;
|
|
||||||
if (actualStartingClass != neededStartingClass)
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user