Update collectable logic for items above your level/low collectability increase
This commit is contained in:
parent
a11dd11424
commit
8a011bb1f4
@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using Dalamud.Game.Text;
|
||||
using Dalamud.Plugin.Services;
|
||||
@ -25,7 +26,10 @@ internal sealed class DoGatherCollectable(
|
||||
private bool _revisitTriggered;
|
||||
private Queue<EAction>? _actionQueue;
|
||||
|
||||
public ITask With(GatheringController.GatheringRequest currentRequest, GatheringNode currentNode, bool revisitRequired)
|
||||
private bool? _expectedScrutiny;
|
||||
|
||||
public ITask With(GatheringController.GatheringRequest currentRequest, GatheringNode currentNode,
|
||||
bool revisitRequired)
|
||||
{
|
||||
_currentRequest = currentRequest;
|
||||
_currentNode = currentNode;
|
||||
@ -71,10 +75,27 @@ internal sealed class DoGatherCollectable(
|
||||
if (nodeCondition == null)
|
||||
return ETaskResult.TaskComplete;
|
||||
|
||||
if (_expectedScrutiny != null)
|
||||
{
|
||||
if (nodeCondition.ScrutinyActive != _expectedScrutiny)
|
||||
return ETaskResult.StillRunning;
|
||||
|
||||
// continue on next frame
|
||||
_expectedScrutiny = null;
|
||||
return ETaskResult.StillRunning;
|
||||
}
|
||||
|
||||
if (_actionQueue != null && _actionQueue.TryPeek(out EAction nextAction))
|
||||
{
|
||||
if (gameFunctions.UseAction(nextAction))
|
||||
{
|
||||
_expectedScrutiny = nextAction switch
|
||||
{
|
||||
EAction.ScrutinyMiner or EAction.ScrutinyBotanist => true,
|
||||
EAction.ScourMiner or EAction.ScourBotanist or EAction.MeticulousMiner
|
||||
or EAction.MeticulousBotanist => false,
|
||||
_ => null
|
||||
};
|
||||
logger.LogInformation("Used action {Action} on node", nextAction);
|
||||
_actionQueue.Dequeue();
|
||||
}
|
||||
@ -108,7 +129,7 @@ internal sealed class DoGatherCollectable(
|
||||
MaxCollectability: atkValues[14].UInt,
|
||||
CurrentIntegrity: atkValues[62].UInt,
|
||||
MaxIntegrity: atkValues[63].UInt,
|
||||
ScrutinyActive: atkValues[80].Bool,
|
||||
ScrutinyActive: atkValues[54].Bool,
|
||||
CollectabilityFromScour: atkValues[48].UInt,
|
||||
CollectabilityFromMeticulous: atkValues[51].UInt
|
||||
);
|
||||
@ -120,17 +141,25 @@ internal sealed class DoGatherCollectable(
|
||||
private Queue<EAction> GetNextActions(NodeCondition nodeCondition)
|
||||
{
|
||||
uint gp = clientState.LocalPlayer!.CurrentGp;
|
||||
logger.LogTrace(
|
||||
"Getting next actions (with {GP} GP, {MeticulousCollectability}~ meticulous, {ScourCollectability}~ scour)",
|
||||
gp, nodeCondition.CollectabilityFromMeticulous, nodeCondition.CollectabilityFromScour);
|
||||
|
||||
Queue<EAction> actions = new();
|
||||
|
||||
uint neededCollectability = nodeCondition.CollectabilityToGoal(_currentRequest.Collectability);
|
||||
if (neededCollectability <= nodeCondition.CollectabilityFromMeticulous)
|
||||
{
|
||||
logger.LogTrace("Can get all needed {NeededCollectability} from {Collectability}~ meticulous",
|
||||
neededCollectability, nodeCondition.CollectabilityFromMeticulous);
|
||||
actions.Enqueue(PickAction(EAction.MeticulousMiner, EAction.MeticulousBotanist));
|
||||
return actions;
|
||||
}
|
||||
|
||||
if (neededCollectability <= nodeCondition.CollectabilityFromScour)
|
||||
{
|
||||
logger.LogTrace("Can get all needed {NeededCollectability} from {Collectability}~ scour",
|
||||
neededCollectability, nodeCondition.CollectabilityFromScour);
|
||||
actions.Enqueue(PickAction(EAction.ScourMiner, EAction.ScourBotanist));
|
||||
return actions;
|
||||
}
|
||||
@ -138,17 +167,23 @@ internal sealed class DoGatherCollectable(
|
||||
// neither action directly solves our problem
|
||||
if (!nodeCondition.ScrutinyActive && gp >= 200)
|
||||
{
|
||||
logger.LogTrace("Still missing {NeededCollectability} collectability, scrutiny inactive",
|
||||
neededCollectability);
|
||||
actions.Enqueue(PickAction(EAction.ScrutinyMiner, EAction.ScrutinyBotanist));
|
||||
return actions;
|
||||
}
|
||||
|
||||
if (nodeCondition.ScrutinyActive)
|
||||
{
|
||||
logger.LogTrace("Scrutiny active, need {NeededCollectability} and we expect {Collectability}~ meticulous",
|
||||
neededCollectability, nodeCondition.CollectabilityFromMeticulous);
|
||||
actions.Enqueue(PickAction(EAction.MeticulousMiner, EAction.MeticulousBotanist));
|
||||
return actions;
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogTrace("Scrutiny active, need {NeededCollectability} and we expect {Collectability}~ scour",
|
||||
neededCollectability, nodeCondition.CollectabilityFromScour);
|
||||
actions.Enqueue(PickAction(EAction.ScourMiner, EAction.ScourBotanist));
|
||||
return actions;
|
||||
}
|
||||
@ -168,7 +203,7 @@ internal sealed class DoGatherCollectable(
|
||||
}
|
||||
|
||||
public override string ToString() =>
|
||||
$"DoGatherCollectable({SeIconChar.Collectible.ToIconString()} {_currentRequest.Collectability}){(_revisitRequired ? " if revist" : "")}";
|
||||
$"DoGatherCollectable({SeIconChar.Collectible.ToIconString()}/{_expectedScrutiny} {_currentRequest.Collectability}){(_revisitRequired ? " if revist" : "")}";
|
||||
|
||||
[SuppressMessage("ReSharper", "NotAccessedPositionalProperty.Local")]
|
||||
private sealed record NodeCondition(
|
||||
|
Loading…
Reference in New Issue
Block a user