forked from aly/qstbak
qstcompanion v1.0.1
This commit is contained in:
parent
3e10cbbbf2
commit
44c67ab71b
79 changed files with 21148 additions and 0 deletions
|
|
@ -0,0 +1,168 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using Dalamud.Game.ClientState.Conditions;
|
||||
using Dalamud.Game.ClientState.Objects.SubKinds;
|
||||
using Dalamud.Plugin.Services;
|
||||
|
||||
namespace QuestionableCompanion.Services;
|
||||
|
||||
public class StepsOfFaithHandler : IDisposable
|
||||
{
|
||||
private readonly ICondition condition;
|
||||
|
||||
private readonly IPluginLog log;
|
||||
|
||||
private readonly IClientState clientState;
|
||||
|
||||
private readonly ICommandManager commandManager;
|
||||
|
||||
private readonly IFramework framework;
|
||||
|
||||
private readonly Configuration config;
|
||||
|
||||
private bool isActive;
|
||||
|
||||
private readonly Dictionary<string, bool> characterHandledStatus = new Dictionary<string, bool>();
|
||||
|
||||
private const uint StepsOfFaithQuestId = 4591u;
|
||||
|
||||
public bool IsActive => isActive;
|
||||
|
||||
public bool IsStepsOfFaithQuest(uint questId)
|
||||
{
|
||||
return questId == 4591;
|
||||
}
|
||||
|
||||
public StepsOfFaithHandler(ICondition condition, IPluginLog log, IClientState clientState, ICommandManager commandManager, IFramework framework, Configuration config)
|
||||
{
|
||||
this.condition = condition;
|
||||
this.log = log;
|
||||
this.clientState = clientState;
|
||||
this.commandManager = commandManager;
|
||||
this.framework = framework;
|
||||
this.config = config;
|
||||
log.Information("[StepsOfFaith] Handler initialized");
|
||||
}
|
||||
|
||||
public bool ShouldActivate(uint questId, bool isInSoloDuty)
|
||||
{
|
||||
if (!config.EnableAutoDutyUnsynced)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (isActive)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (questId != 4591)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!isInSoloDuty)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
string characterName = GetCurrentCharacterName();
|
||||
if (string.IsNullOrEmpty(characterName))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (characterHandledStatus.GetValueOrDefault(characterName, defaultValue: false))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void Execute(string characterName)
|
||||
{
|
||||
isActive = true;
|
||||
if (!string.IsNullOrEmpty(characterName))
|
||||
{
|
||||
characterHandledStatus[characterName] = true;
|
||||
log.Information("[StepsOfFaith] Marked " + characterName + " as handled");
|
||||
}
|
||||
log.Information("[StepsOfFaith] ========================================");
|
||||
log.Information("[StepsOfFaith] === STEPS OF FAITH HANDLER ACTIVATED ===");
|
||||
log.Information("[StepsOfFaith] ========================================");
|
||||
try
|
||||
{
|
||||
log.Information("[StepsOfFaith] Waiting for conditions to clear...");
|
||||
DateTime startTime = DateTime.Now;
|
||||
TimeSpan maxWaitTime = TimeSpan.FromSeconds(6000L);
|
||||
while (DateTime.Now - startTime < maxWaitTime)
|
||||
{
|
||||
bool hasCondition29 = condition[ConditionFlag.Occupied];
|
||||
bool hasCondition63 = condition[ConditionFlag.SufferingStatusAffliction63];
|
||||
if (!hasCondition29 && !hasCondition63)
|
||||
{
|
||||
log.Information("[StepsOfFaith] Conditions cleared!");
|
||||
break;
|
||||
}
|
||||
if ((DateTime.Now - startTime).TotalSeconds % 5.0 < 0.1)
|
||||
{
|
||||
log.Information($"[StepsOfFaith] Waiting... (29: {hasCondition29}, 63: {hasCondition63})");
|
||||
}
|
||||
Thread.Sleep(200);
|
||||
}
|
||||
log.Information("[StepsOfFaith] Waiting 25s for stabilization...");
|
||||
Thread.Sleep(25000);
|
||||
log.Information("[StepsOfFaith] Disabling Bossmod Rotation...");
|
||||
framework.RunOnFrameworkThread(delegate
|
||||
{
|
||||
commandManager.ProcessCommand("/vbm ar disable");
|
||||
});
|
||||
log.Information("[StepsOfFaith] Moving to target position...");
|
||||
framework.RunOnFrameworkThread(delegate
|
||||
{
|
||||
commandManager.ProcessCommand("/vnav moveto 2.8788917064667 0.0 293.36273193359");
|
||||
});
|
||||
log.Information("[StepsOfFaith] Enabling combat commands...");
|
||||
framework.RunOnFrameworkThread(delegate
|
||||
{
|
||||
commandManager.ProcessCommand("/rsr auto");
|
||||
Thread.Sleep(100);
|
||||
commandManager.ProcessCommand("/vbmai on");
|
||||
Thread.Sleep(100);
|
||||
commandManager.ProcessCommand("/bmrai on");
|
||||
});
|
||||
log.Information("[StepsOfFaith] === HANDLER COMPLETE ===");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.Error("[StepsOfFaith] Error: " + ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
isActive = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
isActive = false;
|
||||
log.Information("[StepsOfFaith] Active state reset (character completion status preserved)");
|
||||
}
|
||||
|
||||
private string GetCurrentCharacterName()
|
||||
{
|
||||
try
|
||||
{
|
||||
IPlayerCharacter player = clientState.LocalPlayer;
|
||||
if (player != null)
|
||||
{
|
||||
return $"{player.Name}@{player.HomeWorld.Value.Name}";
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.Error("[StepsOfFaith] Failed to get character name: " + ex.Message);
|
||||
}
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue