muffin v7.38.9

This commit is contained in:
alydev 2025-12-07 10:55:56 +10:00
parent ada27cf05b
commit 8a7847ff37
21 changed files with 1296 additions and 689 deletions

View file

@ -257,6 +257,7 @@ internal sealed class QuestController : MiniTaskController<QuestController>
_toastGui.Toast += OnNormalToast;
_condition.ConditionChange += OnConditionChange;
_clientState.Logout += OnLogout;
_movementController.PlayerInputDetected += OnPlayerInputDetected;
}
public void Reload()
@ -683,55 +684,71 @@ internal sealed class QuestController : MiniTaskController<QuestController>
{
DebugState = "No quest active";
Stop("No quest active");
return;
}
if (_gameFunctions.IsOccupied() && !_gameFunctions.IsOccupiedWithCustomDeliveryNpc(questProgress.Quest))
else if (questProgress.Step == 255)
{
DebugState = $"Waiting for sequence update (current: {questProgress.Sequence})";
if (!_taskQueue.AllTasksComplete)
{
DebugState = "Step 255 - processing interrupted tasks";
}
else
{
if (this.CurrentQuest == null)
{
return;
}
TimeSpan timeSpan = DateTime.Now - this.CurrentQuest.StepProgress.StartedAt;
if (timeSpan > TimeSpan.FromSeconds(3L))
{
_logger.LogWarning("Step 255 with no tasks for {WaitTime:F1}s, retrying step to ensure completion (quest: {QuestId}, sequence: {Sequence})", timeSpan.TotalSeconds, questProgress.Quest.Id, questProgress.Sequence);
QuestSequence questSequence = questProgress.Quest.FindSequence(questProgress.Sequence);
if (questSequence != null && questSequence.Steps.Count > 0)
{
this.CurrentQuest.SetStep(questSequence.Steps.Count - 1);
CheckNextTasks("Retry last step at 255");
}
}
}
}
else if (_gameFunctions.IsOccupied() && !_gameFunctions.IsOccupiedWithCustomDeliveryNpc(questProgress.Quest))
{
DebugState = "Occupied";
return;
}
if (_movementController.IsPathfinding)
else if (_movementController.IsPathfinding)
{
DebugState = "Pathfinding is running";
return;
}
if (_movementController.IsPathRunning)
else if (_movementController.IsPathRunning)
{
DebugState = "Path is running";
return;
}
if (DateTime.Now < _safeAnimationEnd)
else if (DateTime.Now < _safeAnimationEnd)
{
DebugState = "Waiting for Animation";
return;
}
if (questProgress.Sequence != b)
else if (questProgress.Sequence != b)
{
questProgress.SetSequence(b);
CheckNextTasks($"New sequence {questProgress == _startedQuest}/{_questFunctions.GetCurrentQuestInternal(allowNewMsq: true)}");
}
QuestSequence questSequence = questProgress.Quest.FindSequence(questProgress.Sequence);
if (questSequence == null)
{
DebugState = $"Sequence {questProgress.Sequence} not found";
Stop("Unknown sequence");
}
else if (questProgress.Step == 255)
{
DebugState = "Step completed";
if (!_taskQueue.AllTasksComplete)
{
CheckNextTasks("Step complete");
}
}
else if (questSequence.Steps.Count > 0 && questProgress.Step >= questSequence.Steps.Count)
{
DebugState = "Step not found";
Stop("Unknown step");
}
else
{
DebugState = null;
QuestSequence questSequence2 = questProgress.Quest.FindSequence(questProgress.Sequence);
if (questSequence2 == null)
{
DebugState = $"Sequence {questProgress.Sequence} not found";
Stop("Unknown sequence");
}
else if (questSequence2.Steps.Count > 0 && questProgress.Step >= questSequence2.Steps.Count)
{
DebugState = "Step not found";
Stop("Unknown step");
}
else
{
DebugState = null;
}
}
}
}
@ -778,15 +795,21 @@ internal sealed class QuestController : MiniTaskController<QuestController>
_logger.LogWarning("Ignoring 'increase step count' for different sequence (expected {ExpectedSequence}, but we are at {CurrentSequence}", sequence, questSequence.Sequence);
}
_logger.LogInformation("Increasing step count from {CurrentValue}", CurrentQuest.Step);
if (CurrentQuest.Step + 1 < questSequence.Steps.Count)
{
CurrentQuest.SetStep(CurrentQuest.Step + 1);
}
else
bool num = CurrentQuest.Step + 1 >= questSequence.Steps.Count;
if (num)
{
CurrentQuest.SetStep(255);
}
else
{
CurrentQuest.SetStep(CurrentQuest.Step + 1);
}
ResetAutoRefreshState();
if (num)
{
_logger.LogInformation("Completed last step in sequence, waiting for game to update sequence");
return;
}
}
using (_logger.BeginScope("IncStepCt"))
{
@ -1291,12 +1314,23 @@ internal sealed class QuestController : MiniTaskController<QuestController>
}
}
private void OnPlayerInputDetected(object? sender, EventArgs e)
{
if (AutomationType != EAutomationType.Manual && IsRunning)
{
_logger.LogInformation("Player input detected during movement, stopping quest automation");
_chatGui.Print("Player input detected - stopping quest automation.", "Questionable", 576);
Stop("Player input detected");
}
}
public override void Dispose()
{
_toastGui.ErrorToast -= base.OnErrorToast;
_toastGui.Toast -= OnNormalToast;
_condition.ConditionChange -= OnConditionChange;
_clientState.Logout -= OnLogout;
_movementController.PlayerInputDetected -= OnPlayerInputDetected;
base.Dispose();
}
}