1
0
forked from liza/Deliveroo
This commit is contained in:
Liza 2023-10-04 10:49:39 +02:00
parent 51d1d6f9a3
commit 67b6981f7b
Signed by: liza
GPG Key ID: 7199F8D727D55F67
10 changed files with 66 additions and 75 deletions

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0-windows</TargetFramework>
<Version>1.0</Version>
<Version>2.0</Version>
<LangVersion>11.0</LangVersion>
<Nullable>enable</Nullable>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
@ -22,7 +22,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="DalamudPackager" Version="2.1.11"/>
<PackageReference Include="DalamudPackager" Version="2.1.12"/>
</ItemGroup>
<ItemGroup>
@ -34,10 +34,6 @@
<HintPath>$(DalamudLibPath)ImGui.NET.dll</HintPath>
<Private>false</Private>
</Reference>
<Reference Include="ImGuiScene">
<HintPath>$(DalamudLibPath)ImGuiScene.dll</HintPath>
<Private>false</Private>
</Reference>
<Reference Include="Lumina">
<HintPath>$(DalamudLibPath)Lumina.dll</HintPath>
<Private>false</Private>

View File

@ -1,6 +1,5 @@
using System;
using Dalamud.Game.ClientState.Objects.Types;
using Dalamud.Logging;
using Deliveroo.GameData;
using FFXIVClientStructs.FFXIV.Component.GUI;
using ValueType = FFXIVClientStructs.FFXIV.Component.GUI.ValueType;
@ -51,7 +50,7 @@ partial class DeliverooPlugin
if (TryGetAddonByName<AtkUnitBase>("GrandCompanyExchange", out var addonExchange) &&
IsAddonReady(addonExchange))
{
PluginLog.Information($"Selecting tier 1, {(int)item.Tier - 1}");
_pluginLog.Information($"Selecting tier 1, {(int)item.Tier - 1}");
var selectRank = stackalloc AtkValue[]
{
new() { Type = ValueType.Int, Int = 1 },
@ -82,7 +81,7 @@ partial class DeliverooPlugin
if (TryGetAddonByName<AtkUnitBase>("GrandCompanyExchange", out var addonExchange) &&
IsAddonReady(addonExchange))
{
PluginLog.Information($"Selecting subcategory 2, {(int)item.SubCategory}");
_pluginLog.Information($"Selecting subcategory 2, {(int)item.SubCategory}");
var selectType = stackalloc AtkValue[]
{
new() { Type = ValueType.Int, Int = 2 },
@ -131,7 +130,7 @@ partial class DeliverooPlugin
uint itemId = addonExchange->AtkValues[317 + i].UInt;
if (itemId == item.ItemId)
{
PluginLog.Information($"Selecting item {itemId}, {i}");
_pluginLog.Information($"Selecting item {itemId}, {i}");
long toBuy = (GetCurrentSealCount() - _configuration.ReservedSealCount) / item.SealCost;
toBuy = Math.Min(toBuy, item.EffectiveLimit - GetItemCount(item.ItemId));
@ -140,7 +139,7 @@ partial class DeliverooPlugin
if (toBuy <= 0)
{
PluginLog.Information($"Items to buy = {toBuy}");
_pluginLog.Information($"Items to buy = {toBuy}");
return false;
}
@ -162,7 +161,7 @@ partial class DeliverooPlugin
}
}
PluginLog.Warning("Could not find selected reward item");
_pluginLog.Warning("Could not find selected reward item");
return false;
}

View File

@ -4,7 +4,6 @@ using System.Linq;
using System.Runtime.InteropServices;
using Dalamud.Game.ClientState.Objects.Enums;
using Dalamud.Game.ClientState.Objects.Types;
using Dalamud.Logging;
using Dalamud.Memory;
using Deliveroo.GameData;
using FFXIVClientStructs.FFXIV.Client.Game;
@ -21,7 +20,7 @@ partial class DeliverooPlugin
{
private unsafe void InteractWithTarget(GameObject obj)
{
PluginLog.Information($"Setting target to {obj}");
_pluginLog.Information($"Setting target to {obj}");
if (_targetManager.Target == null || _targetManager.Target != obj)
{
_targetManager.Target = obj;
@ -165,12 +164,9 @@ partial class DeliverooPlugin
var unitManagers = &AtkStage.GetSingleton()->RaptureAtkUnitManager->AtkUnitManager.DepthLayerOneList;
for (var i = 0; i < 18; i++)
{
var unitManager = &unitManagers[i];
var unitBaseArray = &(unitManager->AtkUnitEntries);
for (var j = 0; j < unitManager->Count; j++)
foreach (AtkUnitBase* unitBase in unitManagers[i].EntriesSpan)
{
var unitBase = unitBaseArray[j];
if (unitBase->ID == id)
if (unitBase != null && unitBase->ID == id)
{
return unitBase;
}
@ -219,7 +215,7 @@ partial class DeliverooPlugin
IsAddonReady(&addonSelectYesno->AtkUnitBase) &&
predicate(MemoryHelper.ReadSeString(&addonSelectYesno->PromptText->NodeText).ToString()))
{
PluginLog.Information(
_pluginLog.Information(
$"Selecting choice={choice} for '{MemoryHelper.ReadSeString(&addonSelectYesno->PromptText->NodeText)}'");
addonSelectYesno->AtkUnitBase.FireCallbackInt(choice);

View File

@ -1,9 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Dalamud.Game.ClientState.Objects.Types;
using Dalamud.Logging;
using Dalamud.Memory;
using Deliveroo.GameData;
using FFXIVClientStructs.FFXIV.Client.UI;
using FFXIVClientStructs.FFXIV.Client.UI.Agent;
@ -46,12 +43,12 @@ partial class DeliverooPlugin
var addonGc = (AddonGrandCompanySupplyList*)addon;
if (addonGc->SelectedTab == 2)
{
PluginLog.Information("Tab already selected, probably due to haseltweaks");
_pluginLog.Information("Tab already selected, probably due to haseltweaks");
CurrentStage = Stage.SelectItemToTurnIn;
return;
}
PluginLog.Information("Switching to expert deliveries");
_pluginLog.Information("Switching to expert deliveries");
var selectExpertDeliveryTab = stackalloc AtkValue[]
{
new() { Type = ValueType.Int, Int = 0 },

View File

@ -1,24 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Dalamud.Data;
using Dalamud.Game;
using Dalamud.Game.ClientState;
using Dalamud.Game.ClientState.Conditions;
using Dalamud.Game.ClientState.Objects;
using Dalamud.Game.ClientState.Objects.Types;
using Dalamud.Game.Command;
using Dalamud.Game.Gui;
using Dalamud.Interface.Windowing;
using Dalamud.Logging;
using Dalamud.Plugin;
using Dalamud.Plugin.Services;
using Deliveroo.External;
using Deliveroo.GameData;
using Deliveroo.Windows;
using FFXIVClientStructs.FFXIV.Client.UI;
using FFXIVClientStructs.FFXIV.Component.GUI;
using Lumina.Excel.GeneratedSheets;
using Condition = Dalamud.Game.ClientState.Conditions.Condition;
namespace Deliveroo;
@ -27,14 +22,15 @@ public sealed partial class DeliverooPlugin : IDalamudPlugin
private readonly WindowSystem _windowSystem = new(typeof(DeliverooPlugin).AssemblyQualifiedName);
private readonly DalamudPluginInterface _pluginInterface;
private readonly ChatGui _chatGui;
private readonly GameGui _gameGui;
private readonly Framework _framework;
private readonly ClientState _clientState;
private readonly ObjectTable _objectTable;
private readonly TargetManager _targetManager;
private readonly Condition _condition;
private readonly CommandManager _commandManager;
private readonly IChatGui _chatGui;
private readonly IGameGui _gameGui;
private readonly IFramework _framework;
private readonly IClientState _clientState;
private readonly IObjectTable _objectTable;
private readonly ITargetManager _targetManager;
private readonly ICondition _condition;
private readonly ICommandManager _commandManager;
private readonly IPluginLog _pluginLog;
// ReSharper disable once PrivateFieldCanBeConvertedToLocalVariable
private readonly Configuration _configuration;
@ -53,9 +49,9 @@ public sealed partial class DeliverooPlugin : IDalamudPlugin
private List<PurchaseItemRequest> _itemsToPurchaseNow = new();
private (bool Saved, bool? PreviousState) _yesAlreadyState = (false, null);
public DeliverooPlugin(DalamudPluginInterface pluginInterface, ChatGui chatGui, GameGui gameGui,
Framework framework, ClientState clientState, ObjectTable objectTable, TargetManager targetManager,
DataManager dataManager, Condition condition, CommandManager commandManager)
public DeliverooPlugin(DalamudPluginInterface pluginInterface, IChatGui chatGui, IGameGui gameGui,
IFramework framework, IClientState clientState, IObjectTable objectTable, ITargetManager targetManager,
IDataManager dataManager, ICondition condition, ICommandManager commandManager, IPluginLog pluginLog)
{
_pluginInterface = pluginInterface;
_chatGui = chatGui;
@ -66,12 +62,13 @@ public sealed partial class DeliverooPlugin : IDalamudPlugin
_targetManager = targetManager;
_condition = condition;
_commandManager = commandManager;
_pluginLog = pluginLog;
var dalamudReflector = new DalamudReflector(_pluginInterface, _framework);
var dalamudReflector = new DalamudReflector(_pluginInterface, _framework, _pluginLog);
_yesAlreadyIpc = new YesAlreadyIpc(dalamudReflector);
_configuration = (Configuration?)_pluginInterface.GetPluginConfig() ?? new Configuration();
_gcRewardsCache = new GcRewardsCache(dataManager);
_configWindow = new ConfigWindow(_pluginInterface, this, _configuration, _gcRewardsCache, _clientState);
_configWindow = new ConfigWindow(_pluginInterface, this, _configuration, _gcRewardsCache, _clientState, _pluginLog);
_windowSystem.AddWindow(_configWindow);
_turnInWindow = new TurnInWindow(this, _pluginInterface, _configuration, _gcRewardsCache, _configWindow);
_windowSystem.AddWindow(_turnInWindow);
@ -89,7 +86,7 @@ public sealed partial class DeliverooPlugin : IDalamudPlugin
});
if (_clientState.IsLoggedIn)
Login(this, EventArgs.Empty);
Login();
if (_configuration.AddVentureIfNoItemToPurchaseSelected())
_pluginInterface.SavePluginConfig(_configuration);
@ -107,13 +104,13 @@ public sealed partial class DeliverooPlugin : IDalamudPlugin
{
if (_currentStageInternal != value)
{
PluginLog.Information($"Changing stage from {_currentStageInternal} to {value}");
_pluginLog.Information($"Changing stage from {_currentStageInternal} to {value}");
_currentStageInternal = value;
}
}
}
private void Login(object? sender, EventArgs e)
private void Login()
{
try
{
@ -131,27 +128,27 @@ public sealed partial class DeliverooPlugin : IDalamudPlugin
CharacterConfiguration.Save(_pluginInterface);
}
PluginLog.Information($"Loaded character-specific information for {_clientState.LocalContentId}");
_pluginLog.Information($"Loaded character-specific information for {_clientState.LocalContentId}");
}
else
{
PluginLog.Verbose(
_pluginLog.Verbose(
$"No character-specific information for {_clientState.LocalContentId}");
}
}
catch (Exception ex)
{
PluginLog.Error(ex, "Unable to load character configuration");
_pluginLog.Error(ex, "Unable to load character configuration");
CharacterConfiguration = null;
}
}
private void Logout(object? sender, EventArgs e)
private void Logout()
{
CharacterConfiguration = null;
}
private unsafe void FrameworkUpdate(Framework f)
private unsafe void FrameworkUpdate(IFramework f)
{
_turnInWindow.Error = string.Empty;
if (!_clientState.IsLoggedIn ||
@ -191,12 +188,12 @@ public sealed partial class DeliverooPlugin : IDalamudPlugin
_itemsToPurchaseNow = _turnInWindow.SelectedItems;
if (_itemsToPurchaseNow.Count > 0)
{
PluginLog.Information("Items to purchase:");
_pluginLog.Information("Items to purchase:");
foreach (var item in _itemsToPurchaseNow)
PluginLog.Information($" {item.Name} (limit = {item.EffectiveLimit})");
_pluginLog.Information($" {item.Name} (limit = {item.EffectiveLimit})");
}
else
PluginLog.Information("No items to purchase configured or available");
_pluginLog.Information("No items to purchase configured or available");
var nextItem = GetNextItemToPurchase();
@ -282,7 +279,7 @@ public sealed partial class DeliverooPlugin : IDalamudPlugin
break;
default:
PluginLog.Warning($"Unknown stage {CurrentStage}");
_pluginLog.Warning($"Unknown stage {CurrentStage}");
break;
}
}
@ -307,19 +304,19 @@ public sealed partial class DeliverooPlugin : IDalamudPlugin
{
if (_yesAlreadyState.Saved)
{
PluginLog.Information("Not overwriting yesalready state");
_pluginLog.Information("Not overwriting yesalready state");
return;
}
_yesAlreadyState = (true, _yesAlreadyIpc.DisableIfNecessary());
PluginLog.Information($"Previous yesalready state: {_yesAlreadyState.PreviousState}");
_pluginLog.Information($"Previous yesalready state: {_yesAlreadyState.PreviousState}");
}
private void RestoreYesAlready()
{
if (_yesAlreadyState.Saved)
{
PluginLog.Information($"Restoring previous yesalready state: {_yesAlreadyState.PreviousState}");
_pluginLog.Information($"Restoring previous yesalready state: {_yesAlreadyState.PreviousState}");
if (_yesAlreadyState.PreviousState == true)
_yesAlreadyIpc.Enable();
}

View File

@ -6,6 +6,7 @@ using Dalamud.Plugin;
using System;
using System.Collections.Generic;
using System.Reflection;
using Dalamud.Plugin.Services;
namespace Deliveroo.External;
@ -17,14 +18,16 @@ namespace Deliveroo.External;
internal sealed class DalamudReflector : IDisposable
{
private readonly DalamudPluginInterface _pluginInterface;
private readonly Framework _framework;
private readonly IFramework _framework;
private readonly IPluginLog _pluginLog;
private readonly Dictionary<string, IDalamudPlugin> _pluginCache = new();
private bool _pluginsChanged = false;
public DalamudReflector(DalamudPluginInterface pluginInterface, Framework framework)
public DalamudReflector(DalamudPluginInterface pluginInterface, IFramework framework, IPluginLog pluginLog)
{
_pluginInterface = pluginInterface;
_framework = framework;
_pluginLog = pluginLog;
var pm = GetPluginManager();
pm.GetType().GetEvent("OnInstalledPluginsChanged")!.AddEventHandler(pm, OnInstalledPluginsChanged);
@ -39,7 +42,7 @@ internal sealed class DalamudReflector : IDisposable
pm.GetType().GetEvent("OnInstalledPluginsChanged")!.RemoveEventHandler(pm, OnInstalledPluginsChanged);
}
private void FrameworkUpdate(Framework framework)
private void FrameworkUpdate(IFramework framework)
{
if (_pluginsChanged)
{
@ -80,7 +83,7 @@ internal sealed class DalamudReflector : IDisposable
.GetField("instance", BindingFlags.NonPublic | BindingFlags.Instance)!.GetValue(t);
if (plugin == null)
{
PluginLog.Warning($"[DalamudReflector] Found requested plugin {internalName} but it was null");
_pluginLog.Warning($"[DalamudReflector] Found requested plugin {internalName} but it was null");
}
else
{
@ -98,7 +101,7 @@ internal sealed class DalamudReflector : IDisposable
{
if (!suppressErrors)
{
PluginLog.Error(e, $"Can't find {internalName} plugin: {e.Message}");
_pluginLog.Error(e, $"Can't find {internalName} plugin: {e.Message}");
}
instance = null;
@ -108,7 +111,7 @@ internal sealed class DalamudReflector : IDisposable
private void OnInstalledPluginsChanged()
{
PluginLog.Verbose("Installed plugins changed event fired");
_pluginLog.Verbose("Installed plugins changed event fired");
_pluginsChanged = true;
}
}

View File

@ -1,6 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using Dalamud.Data;
using Dalamud.Plugin.Services;
using Lumina.Excel.GeneratedSheets;
using GrandCompany = FFXIVClientStructs.FFXIV.Client.UI.Agent.GrandCompany;
@ -8,7 +8,7 @@ namespace Deliveroo.GameData;
internal sealed class GcRewardsCache
{
public GcRewardsCache(DataManager dataManager)
public GcRewardsCache(IDataManager dataManager)
{
var categories = dataManager.GetExcelSheet<GCScripShopCategory>()!
.Where(x => x.RowId > 0)

View File

@ -2,12 +2,12 @@
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using Dalamud.Game.ClientState;
using Dalamud.Interface;
using Dalamud.Interface.Components;
using Dalamud.Interface.Utility;
using Dalamud.Interface.Windowing;
using Dalamud.Logging;
using Dalamud.Plugin;
using Dalamud.Plugin.Services;
using Deliveroo.GameData;
using FFXIVClientStructs.FFXIV.Client.UI.Agent;
using ImGuiNET;
@ -20,13 +20,14 @@ internal sealed class ConfigWindow : Window
private readonly DeliverooPlugin _plugin;
private readonly Configuration _configuration;
private readonly GcRewardsCache _gcRewardsCache;
private readonly ClientState _clientState;
private readonly IClientState _clientState;
private readonly IPluginLog _pluginLog;
private readonly Dictionary<uint, GcRewardItem> _itemLookup;
private uint _dragDropSource = 0;
public ConfigWindow(DalamudPluginInterface pluginInterface, DeliverooPlugin plugin, Configuration configuration,
GcRewardsCache gcRewardsCache, ClientState clientState)
GcRewardsCache gcRewardsCache, IClientState clientState, IPluginLog pluginLog)
: base("Deliveroo - Configuration###DeliverooConfig")
{
_pluginInterface = pluginInterface;
@ -34,6 +35,7 @@ internal sealed class ConfigWindow : Window
_configuration = configuration;
_gcRewardsCache = gcRewardsCache;
_clientState = clientState;
_pluginLog = pluginLog;
_itemLookup = _gcRewardsCache.Rewards.Values
.SelectMany(x => x)
@ -251,7 +253,7 @@ internal sealed class ConfigWindow : Window
CachedWorldName = currentWorldName,
};
_plugin.CharacterConfiguration.Save(_pluginInterface);
PluginLog.Information(
_pluginLog.Information(
$"Created character-specific configuration for {_clientState.LocalContentId}");
}
}

View File

@ -5,6 +5,7 @@ using System.Numerics;
using Dalamud.Interface;
using Dalamud.Interface.Colors;
using Dalamud.Interface.Components;
using Dalamud.Interface.Utility;
using Dalamud.Interface.Windowing;
using Dalamud.Plugin;
using Deliveroo.GameData;

View File

@ -4,9 +4,9 @@
"net7.0-windows7.0": {
"DalamudPackager": {
"type": "Direct",
"requested": "[2.1.11, )",
"resolved": "2.1.11",
"contentHash": "9qlAWoRRTiL/geAvuwR/g6Bcbrd/bJJgVnB/RurBiyKs6srsP0bvpoo8IK+Eg8EA6jWeM6/YJWs66w4FIAzqPw=="
"requested": "[2.1.12, )",
"resolved": "2.1.12",
"contentHash": "Sc0PVxvgg4NQjcI8n10/VfUQBAS4O+Fw2pZrAqBdRMbthYGeogzu5+xmIGCGmsEZ/ukMOBuAqiNiB5qA3MRalg=="
}
}
}