Updated Pelupelu quests to allow for multiple quests to be turned in at once
This commit is contained in:
parent
a540fd8b86
commit
0d7263604b
@ -53,7 +53,21 @@
|
|||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
null
|
null
|
||||||
]
|
],
|
||||||
|
"AetheryteShortcut": "Kozama'uka - Dock Poga",
|
||||||
|
"SkipConditions": {
|
||||||
|
"AetheryteShortcutIf": {
|
||||||
|
"NearPosition": {
|
||||||
|
"Position": {
|
||||||
|
"X": 770.7179,
|
||||||
|
"Y": 12.84657,
|
||||||
|
"Z": -263.99634
|
||||||
|
},
|
||||||
|
"TerritoryId": 1188,
|
||||||
|
"MaximumDistance": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"DataId": 2014481,
|
"DataId": 2014481,
|
||||||
|
@ -39,7 +39,21 @@
|
|||||||
},
|
},
|
||||||
"TerritoryId": 1188,
|
"TerritoryId": 1188,
|
||||||
"InteractionType": "Interact",
|
"InteractionType": "Interact",
|
||||||
"Fly": true
|
"Fly": true,
|
||||||
|
"AetheryteShortcut": "Kozama'uka - Dock Poga",
|
||||||
|
"SkipConditions": {
|
||||||
|
"AetheryteShortcutIf": {
|
||||||
|
"NearPosition": {
|
||||||
|
"Position": {
|
||||||
|
"X": 770.7179,
|
||||||
|
"Y": 12.84657,
|
||||||
|
"Z": -263.99634
|
||||||
|
},
|
||||||
|
"TerritoryId": 1188,
|
||||||
|
"MaximumDistance": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -48,7 +48,21 @@
|
|||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
64
|
64
|
||||||
]
|
],
|
||||||
|
"AetheryteShortcut": "Kozama'uka - Dock Poga",
|
||||||
|
"SkipConditions": {
|
||||||
|
"AetheryteShortcutIf": {
|
||||||
|
"NearPosition": {
|
||||||
|
"Position": {
|
||||||
|
"X": 770.7179,
|
||||||
|
"Y": 12.84657,
|
||||||
|
"Z": -263.99634
|
||||||
|
},
|
||||||
|
"TerritoryId": 1188,
|
||||||
|
"MaximumDistance": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"DataId": 2014485,
|
"DataId": 2014485,
|
||||||
@ -101,7 +115,21 @@
|
|||||||
},
|
},
|
||||||
"TerritoryId": 1188,
|
"TerritoryId": 1188,
|
||||||
"InteractionType": "WalkTo",
|
"InteractionType": "WalkTo",
|
||||||
"Fly": true
|
"Fly": true,
|
||||||
|
"AetheryteShortcut": "Kozama'uka - Dock Poga",
|
||||||
|
"SkipConditions": {
|
||||||
|
"AetheryteShortcutIf": {
|
||||||
|
"NearPosition": {
|
||||||
|
"Position": {
|
||||||
|
"X": 770.7179,
|
||||||
|
"Y": 12.84657,
|
||||||
|
"Z": -263.99634
|
||||||
|
},
|
||||||
|
"TerritoryId": 1188,
|
||||||
|
"MaximumDistance": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"DataId": 1051711,
|
"DataId": 1051711,
|
||||||
|
@ -39,7 +39,21 @@
|
|||||||
},
|
},
|
||||||
"TerritoryId": 1188,
|
"TerritoryId": 1188,
|
||||||
"InteractionType": "Interact",
|
"InteractionType": "Interact",
|
||||||
"Fly": true
|
"Fly": true,
|
||||||
|
"AetheryteShortcut": "Kozama'uka - Dock Poga",
|
||||||
|
"SkipConditions": {
|
||||||
|
"AetheryteShortcutIf": {
|
||||||
|
"NearPosition": {
|
||||||
|
"Position": {
|
||||||
|
"X": 770.7179,
|
||||||
|
"Y": 12.84657,
|
||||||
|
"Z": -263.99634
|
||||||
|
},
|
||||||
|
"TerritoryId": 1188,
|
||||||
|
"MaximumDistance": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -85,7 +99,21 @@
|
|||||||
},
|
},
|
||||||
"TerritoryId": 1188,
|
"TerritoryId": 1188,
|
||||||
"InteractionType": "WalkTo",
|
"InteractionType": "WalkTo",
|
||||||
"Fly": true
|
"Fly": true,
|
||||||
|
"AetheryteShortcut": "Kozama'uka - Dock Poga",
|
||||||
|
"SkipConditions": {
|
||||||
|
"AetheryteShortcutIf": {
|
||||||
|
"NearPosition": {
|
||||||
|
"Position": {
|
||||||
|
"X": 770.7179,
|
||||||
|
"Y": 12.84657,
|
||||||
|
"Z": -263.99634
|
||||||
|
},
|
||||||
|
"TerritoryId": 1188,
|
||||||
|
"MaximumDistance": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"DataId": 1051711,
|
"DataId": 1051711,
|
||||||
|
@ -40,7 +40,21 @@
|
|||||||
},
|
},
|
||||||
"TerritoryId": 1188,
|
"TerritoryId": 1188,
|
||||||
"InteractionType": "Interact",
|
"InteractionType": "Interact",
|
||||||
"Fly": true
|
"Fly": true,
|
||||||
|
"AetheryteShortcut": "Kozama'uka - Dock Poga",
|
||||||
|
"SkipConditions": {
|
||||||
|
"AetheryteShortcutIf": {
|
||||||
|
"NearPosition": {
|
||||||
|
"Position": {
|
||||||
|
"X": 770.7179,
|
||||||
|
"Y": 12.84657,
|
||||||
|
"Z": -263.99634
|
||||||
|
},
|
||||||
|
"TerritoryId": 1188,
|
||||||
|
"MaximumDistance": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -47,7 +47,21 @@
|
|||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
128
|
128
|
||||||
]
|
],
|
||||||
|
"AetheryteShortcut": "Kozama'uka - Dock Poga",
|
||||||
|
"SkipConditions": {
|
||||||
|
"AetheryteShortcutIf": {
|
||||||
|
"NearPosition": {
|
||||||
|
"Position": {
|
||||||
|
"X": 770.7179,
|
||||||
|
"Y": 12.84657,
|
||||||
|
"Z": -263.99634
|
||||||
|
},
|
||||||
|
"TerritoryId": 1188,
|
||||||
|
"MaximumDistance": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"DataId": 2014495,
|
"DataId": 2014495,
|
||||||
|
@ -38,7 +38,21 @@
|
|||||||
},
|
},
|
||||||
"TerritoryId": 1188,
|
"TerritoryId": 1188,
|
||||||
"InteractionType": "WalkTo",
|
"InteractionType": "WalkTo",
|
||||||
"Fly": true
|
"Fly": true,
|
||||||
|
"AetheryteShortcut": "Kozama'uka - Dock Poga",
|
||||||
|
"SkipConditions": {
|
||||||
|
"AetheryteShortcutIf": {
|
||||||
|
"NearPosition": {
|
||||||
|
"Position": {
|
||||||
|
"X": 770.7179,
|
||||||
|
"Y": 12.84657,
|
||||||
|
"Z": -263.99634
|
||||||
|
},
|
||||||
|
"TerritoryId": 1188,
|
||||||
|
"MaximumDistance": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"DataId": 1052331,
|
"DataId": 1052331,
|
||||||
|
@ -122,6 +122,7 @@ internal sealed unsafe class QuestFunctions
|
|||||||
// do the MSQ; if a side quest is the first item do that side quest.
|
// do the MSQ; if a side quest is the first item do that side quest.
|
||||||
//
|
//
|
||||||
// If no quests are marked as 'priority', accepting a new quest adds it to the top of the list.
|
// If no quests are marked as 'priority', accepting a new quest adds it to the top of the list.
|
||||||
|
List<(ElementId Quest, byte Sequence)> trackedQuests = [];
|
||||||
for (int i = questManager->TrackedQuests.Length - 1; i >= 0; --i)
|
for (int i = questManager->TrackedQuests.Length - 1; i >= 0; --i)
|
||||||
{
|
{
|
||||||
ElementId currentQuest;
|
ElementId currentQuest;
|
||||||
@ -129,22 +130,40 @@ internal sealed unsafe class QuestFunctions
|
|||||||
switch (trackedQuest.QuestType)
|
switch (trackedQuest.QuestType)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
continue;
|
break;
|
||||||
|
|
||||||
case 1: // normal quest
|
case 1: // normal quest
|
||||||
currentQuest = new QuestId(questManager->NormalQuests[trackedQuest.Index].QuestId);
|
currentQuest = new QuestId(questManager->NormalQuests[trackedQuest.Index].QuestId);
|
||||||
if (_questRegistry.IsKnownQuest(currentQuest))
|
if (_questRegistry.IsKnownQuest(currentQuest))
|
||||||
return (currentQuest, QuestManager.GetQuestSequence(currentQuest.Value));
|
trackedQuests.Add((currentQuest, QuestManager.GetQuestSequence(currentQuest.Value)));
|
||||||
continue;
|
break;
|
||||||
|
|
||||||
case 2: // leve
|
case 2: // leve
|
||||||
currentQuest = new LeveId(questManager->LeveQuests[trackedQuest.Index].LeveId);
|
currentQuest = new LeveId(questManager->LeveQuests[trackedQuest.Index].LeveId);
|
||||||
if (_questRegistry.IsKnownQuest(currentQuest))
|
if (_questRegistry.IsKnownQuest(currentQuest))
|
||||||
return (currentQuest, questManager->GetLeveQuestById(currentQuest.Value)->Sequence);
|
trackedQuests.Add((currentQuest, questManager->GetLeveQuestById(currentQuest.Value)->Sequence));
|
||||||
continue;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (trackedQuests.Count > 0)
|
||||||
|
{
|
||||||
|
// if we have multiple quests to turn in for an allied society, try and complete all of them
|
||||||
|
var (firstTrackedQuest, firstTrackedSequence) = trackedQuests.First();
|
||||||
|
EAlliedSociety firstTrackedAlliedSociety = GetCommonAlliedSocietyTurnIn(firstTrackedQuest);
|
||||||
|
if (firstTrackedAlliedSociety != EAlliedSociety.None && firstTrackedSequence == 255)
|
||||||
|
{
|
||||||
|
foreach (var (quest, sequence) in trackedQuests.Skip(1))
|
||||||
|
{
|
||||||
|
// only if the other quest isn't ready to be turned in
|
||||||
|
if (GetCommonAlliedSocietyTurnIn(quest) == firstTrackedAlliedSociety && sequence != 255)
|
||||||
|
return (quest, sequence);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (firstTrackedQuest, firstTrackedSequence);
|
||||||
|
}
|
||||||
|
|
||||||
ElementId? priorityQuest = GetNextPriorityQuestThatCanBeAccepted();
|
ElementId? priorityQuest = GetNextPriorityQuestThatCanBeAccepted();
|
||||||
if (priorityQuest != null)
|
if (priorityQuest != null)
|
||||||
{
|
{
|
||||||
@ -221,6 +240,20 @@ internal sealed unsafe class QuestFunctions
|
|||||||
return (currentQuest, QuestManager.GetQuestSequence(currentQuest.Value));
|
return (currentQuest, QuestManager.GetQuestSequence(currentQuest.Value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static EAlliedSociety GetCommonAlliedSocietyTurnIn(ElementId elementId)
|
||||||
|
{
|
||||||
|
if (elementId is QuestId questId)
|
||||||
|
{
|
||||||
|
return questId.Value switch
|
||||||
|
{
|
||||||
|
>= 5199 and <= 5226 => EAlliedSociety.Pelupelu,
|
||||||
|
_ => EAlliedSociety.None,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return EAlliedSociety.None;
|
||||||
|
}
|
||||||
|
|
||||||
public QuestProgressInfo? GetQuestProgressInfo(ElementId elementId)
|
public QuestProgressInfo? GetQuestProgressInfo(ElementId elementId)
|
||||||
{
|
{
|
||||||
if (elementId is QuestId questId)
|
if (elementId is QuestId questId)
|
||||||
|
Loading…
Reference in New Issue
Block a user