{
"Sequence": 2,
"Steps": [
- {
- "DataId": 1000465,
- "Position": {
- "X": 298.63428,
- "Y": 9.999997,
- "Z": 119.035645
- },
- "TerritoryId": 148,
- "InteractionType": "WaitForManualProgress",
- "Comment": "Manual Quest Progress (very combat heavy)",
- "$": "TODO Remove later"
- },
{
"DataId": 1000512,
"Position": {
},
"TerritoryId": 148,
"InteractionType": "Interact",
- "Disabled": true,
"CompletionQuestVariablesFlags": [
null,
null,
},
"TerritoryId": 148,
"InteractionType": "Interact",
- "Disabled": true,
"CompletionQuestVariablesFlags": [
null,
null,
},
"TerritoryId": 148,
"InteractionType": "Interact",
- "Disabled": true,
"CompletionQuestVariablesFlags": [
null,
null,
},
"TerritoryId": 148,
"InteractionType": "Interact",
- "Disabled": true,
"CompletionQuestVariablesFlags": [
null,
null,
},
"TerritoryId": 148,
"InteractionType": "Interact",
- "Disabled": true,
"CompletionQuestVariablesFlags": [
null,
null,
"Sequence": 1,
"Comment": "Very likely this needs manual combat and/or manual continues",
"Steps": [
+ {
+ "Position": {
+ "X": 192.07129,
+ "Y": -12.000001,
+ "Z": 38.204
+ },
+ "TerritoryId": 148,
+ "InteractionType": "WalkTo"
+ },
+ {
+ "Position": {
+ "X": 190.28528,
+ "Y": -12,
+ "Z": 77.53861
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Combat",
+ "EnemySpawnType": "FinishCombatIfAny",
+ "KillEnemyDataIds": []
+ },
{
"DataId": 2000141,
"Position": {
"TerritoryId": 148,
"InteractionType": "EquipRecommended"
},
+ {
+ "DataId": 1000396,
+ "Position": {
+ "X": 82.597046,
+ "Y": -7.893894,
+ "Z": -103.349365
+ },
+ "TerritoryId": 148,
+ "InteractionType": "PurchaseItem",
+ "PurchaseMenu": {
+ "ExcelSheet": "GilShop",
+ "Key": 262186
+ },
+ "ItemId": 2653,
+ "ItemCount": 1,
+ "RequiredCurrentJob": [
+ "DoW"
+ ],
+ "SkipConditions": {
+ "StepIf": {
+ "Item": {
+ "NotInInventory": false
+ }
+ }
+ }
+ },
+ {
+ "DataId": 1000396,
+ "Position": {
+ "X": 82.597046,
+ "Y": -7.893894,
+ "Z": -103.349365
+ },
+ "TerritoryId": 148,
+ "InteractionType": "PurchaseItem",
+ "PurchaseMenu": {
+ "ExcelSheet": "GilShop",
+ "Key": 262186
+ },
+ "ItemId": 2655,
+ "ItemCount": 1,
+ "RequiredCurrentJob": [
+ "DoM"
+ ]
+ },
+ {
+ "TerritoryId": 148,
+ "InteractionType": "EquipItem",
+ "ItemId": 2653,
+ "SkipConditions": {
+ "StepIf": {
+ "Item": {
+ "NotInInventory": true
+ }
+ }
+ }
+ },
+ {
+ "TerritoryId": 148,
+ "InteractionType": "EquipItem",
+ "ItemId": 2655,
+ "SkipConditions": {
+ "StepIf": {
+ "Item": {
+ "NotInInventory": true
+ }
+ }
+ }
+ },
{
"DataId": 1000421,
"Position": {
{
"Sequence": 1,
"Steps": [
+ {
+ "Position": {
+ "X": 486.40424,
+ "Y": 24.968294,
+ "Z": -88.684456
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Combat",
+ "EnemySpawnType": "FinishCombatIfAny",
+ "KillEnemyDataIds": []
+ },
{
"DataId": 2000010,
"Position": {
"TerritoryId": 134,
"InteractionType": "EquipRecommended"
},
+ {
+ "DataId": 1003257,
+ "Position": {
+ "X": 201.70898,
+ "Y": 98.422874,
+ "Z": -206.10364
+ },
+ "TerritoryId": 134,
+ "InteractionType": "PurchaseItem",
+ "PurchaseMenu": {
+ "ExcelSheet": "GilShop",
+ "Key": 262186
+ },
+ "ItemId": 2653,
+ "ItemCount": 1,
+ "RequiredCurrentJob": [
+ "DoW"
+ ],
+ "SkipConditions": {
+ "StepIf": {
+ "Item": {
+ "NotInInventory": false
+ }
+ }
+ }
+ },
+ {
+ "DataId": 1003257,
+ "Position": {
+ "X": 201.70898,
+ "Y": 98.422874,
+ "Z": -206.10364
+ },
+ "TerritoryId": 134,
+ "InteractionType": "PurchaseItem",
+ "PurchaseMenu": {
+ "ExcelSheet": "GilShop",
+ "Key": 262186
+ },
+ "ItemId": 2655,
+ "ItemCount": 1,
+ "RequiredCurrentJob": [
+ "DoM"
+ ]
+ },
+ {
+ "TerritoryId": 134,
+ "InteractionType": "EquipItem",
+ "ItemId": 2653,
+ "SkipConditions": {
+ "StepIf": {
+ "Item": {
+ "NotInInventory": true
+ }
+ }
+ }
+ },
+ {
+ "TerritoryId": 134,
+ "InteractionType": "EquipItem",
+ "ItemId": 2655,
+ "SkipConditions": {
+ "StepIf": {
+ "Item": {
+ "NotInInventory": true
+ }
+ }
+ }
+ },
{
"DataId": 1002626,
"Position": {
"AfterAction",
"AfterEmote",
"OverworldEnemies",
- "FateEnemies"
+ "FateEnemies",
+ "FinishCombatIfAny"
]
},
"KillEnemyDataIds": {
{ EEnemySpawnType.AutoOnEnterArea, "AutoOnEnterArea" },
{ EEnemySpawnType.OverworldEnemies, "OverworldEnemies" },
{ EEnemySpawnType.FateEnemies, "FateEnemies" },
+ { EEnemySpawnType.FinishCombatIfAny, "FinishCombatIfAny" }
};
}
AutoOnEnterArea,
OverworldEnemies,
FateEnemies,
+ FinishCombatIfAny,
QuestInterruption,
}
Module = combatModule,
Data = combatData,
};
- _wasInCombat = combatData.SpawnType == EEnemySpawnType.QuestInterruption;
+ _wasInCombat = combatData.SpawnType is EEnemySpawnType.QuestInterruption or EEnemySpawnType.FinishCombatIfAny;
return true;
}
else
private readonly ShopController _shopController;
private readonly ILogger<InteractionUiController> _logger;
private readonly Regex _returnRegex;
+ private readonly Regex _purchaseItemRegex;
private bool _isInitialCheck;
_logger = logger;
_returnRegex = _dataManager.GetExcelSheet<Addon>().GetRow(196).GetRegex(addon => addon.Text, pluginLog)!;
+ _purchaseItemRegex = _dataManager.GetRegex<Addon>(3406, addon => addon.Text, pluginLog)!;
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "SelectString", SelectStringPostSetup);
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "CutSceneSelectString", CutsceneSelectStringPostSetup);
return;
_logger.LogTrace("Prompt: '{Prompt}'", actualPrompt);
- if (_shopController.IsAutoBuyEnabled && _shopController.IsAwaitingYesNo)
+ if (_shopController.IsAwaitingYesNo && _purchaseItemRegex.IsMatch(actualPrompt))
{
addonSelectYesno->AtkUnitBase.FireCallbackInt(0);
_shopController.IsAwaitingYesNo = false;
case EEnemySpawnType.OverworldEnemies:
case EEnemySpawnType.FateEnemies:
+ case EEnemySpawnType.FinishCombatIfAny:
yield return CreateTask(quest, sequence, step);
break;
{
public override string ToString()
{
+ if (CombatData.SpawnType == EEnemySpawnType.FinishCombatIfAny)
+ return "HandleCombat(wait: not in combat, optional)";
if (QuestWorkUtils.HasCompletionFlags(CompletionQuestVariableFlags))
- return $"HandleCombat(wait: QW flags)";
+ return "HandleCombat(wait: QW flags)";
else if (IsLastStep)
- return $"HandleCombat(wait: next sequence)";
+ return "HandleCombat(wait: next sequence)";
else
- return $"HandleCombat(wait: not in combat)";
+ return "HandleCombat(wait: not in combat)";
}
}
internal sealed class HandleCombat(
-
CombatController combatController,
QuestFunctions questFunctions) : TaskExecutor<Task>
{
{
private static readonly Dictionary<ushort, MountConfiguration> AlliedSocietyMountConfiguration = new()
{
- { 369, new(1051798, EAetheryteLocation.KozamaukaDockPoga) }
+ { 79, new(1017031, EAetheryteLocation.DravanianForelandsAnyxTrine) },
+ { 369, new(1051798, EAetheryteLocation.KozamaukaDockPoga) },
};
internal sealed class CheckAlliedSocietyMount(GameFunctions gameFunctions, AetheryteData aetheryteData, ILogger<CheckAlliedSocietyMount> logger) : SimpleTaskFactory
{
return questId.Value switch
{
+ >= 2171 and <= 2200 => EAlliedSociety.VanuVanu,
+ >= 2261 and <= 2280 => EAlliedSociety.Vath,
>= 5199 and <= 5226 => EAlliedSociety.Pelupelu,
_ => EAlliedSociety.None,
};