muffin v7.38.5
This commit is contained in:
parent
7177a5440c
commit
ac85eea230
3 changed files with 966 additions and 420 deletions
|
|
@ -6,6 +6,8 @@ using System.Numerics;
|
|||
using System.Runtime.InteropServices;
|
||||
using Dalamud.Plugin;
|
||||
using Dalamud.Plugin.Ipc;
|
||||
using FFXIVClientStructs.FFXIV.Client.Game;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Questionable.Controller;
|
||||
using Questionable.Controller.Steps;
|
||||
using Questionable.Data;
|
||||
|
|
@ -13,6 +15,7 @@ using Questionable.Functions;
|
|||
using Questionable.Model;
|
||||
using Questionable.Model.Questing;
|
||||
using Questionable.Windows;
|
||||
using Questionable.Windows.JournalComponents;
|
||||
using Questionable.Windows.QuestComponents;
|
||||
|
||||
namespace Questionable.External;
|
||||
|
|
@ -134,6 +137,20 @@ internal sealed class QuestionableIpc : IDisposable
|
|||
|
||||
private const string IpcSetSequenceStopCondition = "Questionable.SetSequenceStopCondition";
|
||||
|
||||
private const string IpcGetAlliedSocietyRemainingAllowances = "Questionable.AlliedSociety.GetRemainingAllowances";
|
||||
|
||||
private const string IpcGetAlliedSocietyTimeUntilReset = "Questionable.AlliedSociety.GetTimeUntilReset";
|
||||
|
||||
private const string IpcGetAlliedSocietyAvailableQuestIds = "Questionable.AlliedSociety.GetAvailableQuestIds";
|
||||
|
||||
private const string IpcGetAlliedSocietyAllAvailableQuestCounts = "Questionable.AlliedSociety.GetAllAvailableQuestCounts";
|
||||
|
||||
private const string IpcGetAlliedSocietyIsMaxRank = "Questionable.AlliedSociety.IsMaxRank";
|
||||
|
||||
private const string IpcGetAlliedSocietyCurrentRank = "Questionable.AlliedSociety.GetCurrentRank";
|
||||
|
||||
private const string IpcGetAlliedSocietiesWithAvailableQuests = "Questionable.AlliedSociety.GetSocietiesWithAvailableQuests";
|
||||
|
||||
private readonly QuestController _questController;
|
||||
|
||||
private readonly QuestRegistry _questRegistry;
|
||||
|
|
@ -150,6 +167,8 @@ internal sealed class QuestionableIpc : IDisposable
|
|||
|
||||
private readonly IDalamudPluginInterface _pluginInterface;
|
||||
|
||||
private readonly IServiceProvider _serviceProvider;
|
||||
|
||||
private readonly ICallGateProvider<bool> _isRunning;
|
||||
|
||||
private readonly ICallGateProvider<string?> _getCurrentQuestId;
|
||||
|
|
@ -236,7 +255,21 @@ internal sealed class QuestionableIpc : IDisposable
|
|||
|
||||
private readonly ICallGateProvider<bool, int, bool> _setSequenceStopCondition;
|
||||
|
||||
public QuestionableIpc(QuestController questController, EventInfoComponent eventInfoComponent, QuestRegistry questRegistry, QuestFunctions questFunctions, QuestData questData, ManualPriorityComponent manualPriorityComponent, PresetBuilderComponent presetBuilderComponent, Configuration configuration, IDalamudPluginInterface pluginInterface)
|
||||
private readonly ICallGateProvider<int> _getAlliedSocietyRemainingAllowances;
|
||||
|
||||
private readonly ICallGateProvider<long> _getAlliedSocietyTimeUntilReset;
|
||||
|
||||
private readonly ICallGateProvider<byte, List<string>> _getAlliedSocietyAvailableQuestIds;
|
||||
|
||||
private readonly ICallGateProvider<Dictionary<byte, int>> _getAlliedSocietyAllAvailableQuestCounts;
|
||||
|
||||
private readonly ICallGateProvider<byte, bool> _getAlliedSocietyIsMaxRank;
|
||||
|
||||
private readonly ICallGateProvider<byte, int> _getAlliedSocietyCurrentRank;
|
||||
|
||||
private readonly ICallGateProvider<List<byte>> _getAlliedSocietiesWithAvailableQuests;
|
||||
|
||||
public QuestionableIpc(QuestController questController, EventInfoComponent eventInfoComponent, QuestRegistry questRegistry, QuestFunctions questFunctions, QuestData questData, ManualPriorityComponent manualPriorityComponent, PresetBuilderComponent presetBuilderComponent, Configuration configuration, IDalamudPluginInterface pluginInterface, IServiceProvider serviceProvider)
|
||||
{
|
||||
QuestionableIpc questionableIpc = this;
|
||||
_questController = questController;
|
||||
|
|
@ -247,6 +280,7 @@ internal sealed class QuestionableIpc : IDisposable
|
|||
_presetBuilderComponent = presetBuilderComponent;
|
||||
_configuration = configuration;
|
||||
_pluginInterface = pluginInterface;
|
||||
_serviceProvider = serviceProvider;
|
||||
_isRunning = pluginInterface.GetIpcProvider<bool>("Questionable.IsRunning");
|
||||
_isRunning.RegisterFunc(() => questController.AutomationType != QuestController.EAutomationType.Manual || questController.IsRunning);
|
||||
_getCurrentQuestId = pluginInterface.GetIpcProvider<string>("Questionable.GetCurrentQuestId");
|
||||
|
|
@ -334,6 +368,20 @@ internal sealed class QuestionableIpc : IDisposable
|
|||
_getSequenceStopCondition.RegisterFunc(GetSequenceStopCondition);
|
||||
_setSequenceStopCondition = pluginInterface.GetIpcProvider<bool, int, bool>("Questionable.SetSequenceStopCondition");
|
||||
_setSequenceStopCondition.RegisterFunc(SetSequenceStopCondition);
|
||||
_getAlliedSocietyRemainingAllowances = pluginInterface.GetIpcProvider<int>("Questionable.AlliedSociety.GetRemainingAllowances");
|
||||
_getAlliedSocietyRemainingAllowances.RegisterFunc(GetAlliedSocietyRemainingAllowances);
|
||||
_getAlliedSocietyTimeUntilReset = pluginInterface.GetIpcProvider<long>("Questionable.AlliedSociety.GetTimeUntilReset");
|
||||
_getAlliedSocietyTimeUntilReset.RegisterFunc(GetAlliedSocietyTimeUntilReset);
|
||||
_getAlliedSocietyAvailableQuestIds = pluginInterface.GetIpcProvider<byte, List<string>>("Questionable.AlliedSociety.GetAvailableQuestIds");
|
||||
_getAlliedSocietyAvailableQuestIds.RegisterFunc(GetAlliedSocietyAvailableQuestIds);
|
||||
_getAlliedSocietyAllAvailableQuestCounts = pluginInterface.GetIpcProvider<Dictionary<byte, int>>("Questionable.AlliedSociety.GetAllAvailableQuestCounts");
|
||||
_getAlliedSocietyAllAvailableQuestCounts.RegisterFunc(GetAlliedSocietyAllAvailableQuestCounts);
|
||||
_getAlliedSocietyIsMaxRank = pluginInterface.GetIpcProvider<byte, bool>("Questionable.AlliedSociety.IsMaxRank");
|
||||
_getAlliedSocietyIsMaxRank.RegisterFunc(GetAlliedSocietyIsMaxRank);
|
||||
_getAlliedSocietyCurrentRank = pluginInterface.GetIpcProvider<byte, int>("Questionable.AlliedSociety.GetCurrentRank");
|
||||
_getAlliedSocietyCurrentRank.RegisterFunc(GetAlliedSocietyCurrentRank);
|
||||
_getAlliedSocietiesWithAvailableQuests = pluginInterface.GetIpcProvider<List<byte>>("Questionable.AlliedSociety.GetSocietiesWithAvailableQuests");
|
||||
_getAlliedSocietiesWithAvailableQuests.RegisterFunc(GetAlliedSocietiesWithAvailableQuests);
|
||||
}
|
||||
|
||||
private bool StartQuest(string questId, bool single)
|
||||
|
|
@ -921,6 +969,97 @@ internal sealed class QuestionableIpc : IDisposable
|
|||
return true;
|
||||
}
|
||||
|
||||
private unsafe int GetAlliedSocietyRemainingAllowances()
|
||||
{
|
||||
QuestManager* ptr = QuestManager.Instance();
|
||||
if (ptr == null)
|
||||
{
|
||||
return 12;
|
||||
}
|
||||
return (int)ptr->GetBeastTribeAllowance();
|
||||
}
|
||||
|
||||
private long GetAlliedSocietyTimeUntilReset()
|
||||
{
|
||||
TimeSpan item = AlliedSocietyJournalComponent.CalculateTimeUntilReset().TimeUntilReset;
|
||||
return item.Ticks;
|
||||
}
|
||||
|
||||
private List<string> GetAlliedSocietyAvailableQuestIds(byte alliedSocietyId)
|
||||
{
|
||||
if (!Enum.IsDefined(typeof(EAlliedSociety), alliedSocietyId))
|
||||
{
|
||||
return new List<string>();
|
||||
}
|
||||
EAlliedSociety alliedSociety = (EAlliedSociety)alliedSocietyId;
|
||||
return (from q in _serviceProvider.GetRequiredService<AlliedSocietyQuestFunctions>().GetAvailableAlliedSocietyQuests(alliedSociety)
|
||||
select q.ToString()).ToList();
|
||||
}
|
||||
|
||||
private Dictionary<byte, int> GetAlliedSocietyAllAvailableQuestCounts()
|
||||
{
|
||||
Dictionary<byte, int> dictionary = new Dictionary<byte, int>();
|
||||
AlliedSocietyQuestFunctions requiredService = _serviceProvider.GetRequiredService<AlliedSocietyQuestFunctions>();
|
||||
EAlliedSociety[] values = Enum.GetValues<EAlliedSociety>();
|
||||
foreach (EAlliedSociety eAlliedSociety in values)
|
||||
{
|
||||
if (eAlliedSociety != EAlliedSociety.None)
|
||||
{
|
||||
int count = requiredService.GetAvailableAlliedSocietyQuests(eAlliedSociety).Count;
|
||||
if (count > 0)
|
||||
{
|
||||
dictionary[(byte)eAlliedSociety] = count;
|
||||
}
|
||||
}
|
||||
}
|
||||
return dictionary;
|
||||
}
|
||||
|
||||
private unsafe bool GetAlliedSocietyIsMaxRank(byte alliedSocietyId)
|
||||
{
|
||||
if (!Enum.IsDefined(typeof(EAlliedSociety), alliedSocietyId) || alliedSocietyId == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
QuestManager* ptr = QuestManager.Instance();
|
||||
if (ptr == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
byte num = (byte)(ptr->BeastReputation[alliedSocietyId - 1].Rank & 0x7F);
|
||||
byte b = (byte)((alliedSocietyId <= 5) ? 8 : 3);
|
||||
return num >= b;
|
||||
}
|
||||
|
||||
private unsafe int GetAlliedSocietyCurrentRank(byte alliedSocietyId)
|
||||
{
|
||||
if (!Enum.IsDefined(typeof(EAlliedSociety), alliedSocietyId) || alliedSocietyId == 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
QuestManager* ptr = QuestManager.Instance();
|
||||
if (ptr == null)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
return (byte)(ptr->BeastReputation[alliedSocietyId - 1].Rank & 0x7F);
|
||||
}
|
||||
|
||||
private List<byte> GetAlliedSocietiesWithAvailableQuests()
|
||||
{
|
||||
List<byte> list = new List<byte>();
|
||||
AlliedSocietyQuestFunctions requiredService = _serviceProvider.GetRequiredService<AlliedSocietyQuestFunctions>();
|
||||
EAlliedSociety[] values = Enum.GetValues<EAlliedSociety>();
|
||||
foreach (EAlliedSociety eAlliedSociety in values)
|
||||
{
|
||||
if (eAlliedSociety != EAlliedSociety.None && requiredService.GetAvailableAlliedSocietyQuests(eAlliedSociety).Count > 0)
|
||||
{
|
||||
list.Add((byte)eAlliedSociety);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_exportQuestPriority.UnregisterFunc();
|
||||
|
|
@ -966,5 +1105,12 @@ internal sealed class QuestionableIpc : IDisposable
|
|||
_getStopQuestList.UnregisterFunc();
|
||||
_setStopConditionsEnabled.UnregisterFunc();
|
||||
_getStopConditionsEnabled.UnregisterFunc();
|
||||
_getAlliedSocietiesWithAvailableQuests.UnregisterFunc();
|
||||
_getAlliedSocietyCurrentRank.UnregisterFunc();
|
||||
_getAlliedSocietyIsMaxRank.UnregisterFunc();
|
||||
_getAlliedSocietyAllAvailableQuestCounts.UnregisterFunc();
|
||||
_getAlliedSocietyAvailableQuestIds.UnregisterFunc();
|
||||
_getAlliedSocietyTimeUntilReset.UnregisterFunc();
|
||||
_getAlliedSocietyRemainingAllowances.UnregisterFunc();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue