mirror of
https://github.com/Ottermandias/Glamourer.git
synced 2025-12-22 16:39:29 +01:00
Fix some context menu things.
This commit is contained in:
parent
40a684ff46
commit
22c7e32760
1 changed files with 37 additions and 10 deletions
|
|
@ -11,27 +11,24 @@ namespace Glamourer.Interop;
|
||||||
|
|
||||||
public class ContextMenuService : IDisposable
|
public class ContextMenuService : IDisposable
|
||||||
{
|
{
|
||||||
public const int ItemSearchContextItemId = 0x1738;
|
public const int ChatLogContextItemId = 0x958;
|
||||||
public const int ChatLogContextItemId = 0x950;
|
|
||||||
|
|
||||||
private readonly ItemManager _items;
|
private readonly ItemManager _items;
|
||||||
private readonly IContextMenu _contextMenu;
|
private readonly IContextMenu _contextMenu;
|
||||||
private readonly StateManager _state;
|
private readonly StateManager _state;
|
||||||
private readonly ObjectManager _objects;
|
private readonly ObjectManager _objects;
|
||||||
private readonly IGameGui _gameGui;
|
|
||||||
private EquipItem _lastItem;
|
private EquipItem _lastItem;
|
||||||
private readonly StainId[] _lastStains = new StainId[StainId.NumStains];
|
private readonly StainId[] _lastStains = new StainId[StainId.NumStains];
|
||||||
|
|
||||||
private readonly MenuItem _inventoryItem;
|
private readonly MenuItem _inventoryItem;
|
||||||
|
|
||||||
public ContextMenuService(ItemManager items, StateManager state, ObjectManager objects, IGameGui gameGui, Configuration config,
|
public ContextMenuService(ItemManager items, StateManager state, ObjectManager objects, Configuration config,
|
||||||
IContextMenu context)
|
IContextMenu context)
|
||||||
{
|
{
|
||||||
_contextMenu = context;
|
_contextMenu = context;
|
||||||
_items = items;
|
_items = items;
|
||||||
_state = state;
|
_state = state;
|
||||||
_objects = objects;
|
_objects = objects;
|
||||||
_gameGui = gameGui;
|
|
||||||
if (config.EnableGameContextMenu)
|
if (config.EnableGameContextMenu)
|
||||||
Enable();
|
Enable();
|
||||||
|
|
||||||
|
|
@ -55,7 +52,7 @@ public class ContextMenuService : IDisposable
|
||||||
if (arg.TargetItem.HasValue && HandleItem(arg.TargetItem.Value.ItemId))
|
if (arg.TargetItem.HasValue && HandleItem(arg.TargetItem.Value.ItemId))
|
||||||
{
|
{
|
||||||
for (var i = 0; i < arg.TargetItem.Value.Stains.Length; ++i)
|
for (var i = 0; i < arg.TargetItem.Value.Stains.Length; ++i)
|
||||||
_lastStains[i] = (StainId)arg.TargetItem.Value.Stains[i];
|
_lastStains[i] = arg.TargetItem.Value.Stains[i];
|
||||||
args.AddMenuItem(_inventoryItem);
|
args.AddMenuItem(_inventoryItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -72,8 +69,8 @@ public class ContextMenuService : IDisposable
|
||||||
}
|
}
|
||||||
case "ChatLog":
|
case "ChatLog":
|
||||||
{
|
{
|
||||||
var agent = _gameGui.FindAgentInterface("ChatLog");
|
var agent = AgentChatLog.Instance();
|
||||||
if (agent == nint.Zero || !ValidateChatLogContext(agent))
|
if (agent == null || !ValidateChatLogContext(agent))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (HandleItem(*(ItemId*)(agent + ChatLogContextItemId)))
|
if (HandleItem(*(ItemId*)(agent + ChatLogContextItemId)))
|
||||||
|
|
@ -83,6 +80,36 @@ public class ContextMenuService : IDisposable
|
||||||
args.AddMenuItem(_inventoryItem);
|
args.AddMenuItem(_inventoryItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "RecipeNote":
|
||||||
|
{
|
||||||
|
var agent = AgentRecipeNote.Instance();
|
||||||
|
if (agent == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (HandleItem(agent->ContextMenuResultItemId))
|
||||||
|
{
|
||||||
|
for (var i = 0; i < _lastStains.Length; ++i)
|
||||||
|
_lastStains[i] = 0;
|
||||||
|
args.AddMenuItem(_inventoryItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "InclusionShop":
|
||||||
|
{
|
||||||
|
var agent = AgentRecipeItemContext.Instance();
|
||||||
|
if (agent == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (HandleItem(agent->ResultItemId))
|
||||||
|
{
|
||||||
|
for (var i = 0; i < _lastStains.Length; ++i)
|
||||||
|
_lastStains[i] = 0;
|
||||||
|
args.AddMenuItem(_inventoryItem);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -125,6 +152,6 @@ public class ContextMenuService : IDisposable
|
||||||
return _items.ItemData.TryGetValue(itemId, EquipSlot.MainHand, out _lastItem);
|
return _items.ItemData.TryGetValue(itemId, EquipSlot.MainHand, out _lastItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static unsafe bool ValidateChatLogContext(nint agent)
|
private static unsafe bool ValidateChatLogContext(AgentChatLog* agent)
|
||||||
=> *(uint*)(agent + ChatLogContextItemId + 8) == 3;
|
=> *(&agent->ContextItemId + 8) == 3;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue