Fix wildcard on retainers triggering automations on mannequins

This commit is contained in:
MTVirux 2025-11-22 14:07:54 +00:00
parent 03cdc1224e
commit 9c616f1242
2 changed files with 19 additions and 1 deletions

View file

@ -167,6 +167,12 @@ public sealed class AutoDesignApplier : IDisposable
if (key.Type != id.Type) if (key.Type != id.Type)
continue; continue;
if (key.Type == IdentifierType.Retainer)
{
if (id.Retainer != ActorIdentifier.RetainerType.Both && key.Retainer != ActorIdentifier.RetainerType.Both && id.Retainer != key.Retainer)
continue;
}
var worldMatches = key.Type switch var worldMatches = key.Type switch
{ {
IdentifierType.Player => key.HomeWorld == id.HomeWorld || key.HomeWorld == Penumbra.GameData.Structs.WorldId.AnyWorld || id.HomeWorld == Penumbra.GameData.Structs.WorldId.AnyWorld, IdentifierType.Player => key.HomeWorld == id.HomeWorld || key.HomeWorld == Penumbra.GameData.Structs.WorldId.AnyWorld || id.HomeWorld == Penumbra.GameData.Structs.WorldId.AnyWorld,

View file

@ -7,6 +7,8 @@ using OtterGui;
using OtterGui.Classes; using OtterGui.Classes;
using OtterGui.Extensions; using OtterGui.Extensions;
using OtterGui.Raii; using OtterGui.Raii;
using Penumbra.GameData.Actors;
using Penumbra.GameData.Enums;
using Penumbra.GameData.Interop; using Penumbra.GameData.Interop;
using Penumbra.String; using Penumbra.String;
using ImGuiClip = OtterGui.ImGuiClip; using ImGuiClip = OtterGui.ImGuiClip;
@ -225,7 +227,17 @@ public class SetSelector : IDisposable
foreach (var (actorId, _) in _objects) foreach (var (actorId, _) in _objects)
{ {
if (actorId.Type == id.Type && actorId.DataId == id.DataId) if (actorId.Type != id.Type)
continue;
// For retainers, also check the RetainerType to avoid matching Bell retainers with Mannequins
if (actorId.Type == IdentifierType.Retainer)
{
if (id.Retainer != ActorIdentifier.RetainerType.Both && actorId.Retainer != ActorIdentifier.RetainerType.Both && id.Retainer != actorId.Retainer)
continue;
}
if (actorId.DataId == id.DataId)
{ {
var actorNameStr = actorId.PlayerName.ToString(); var actorNameStr = actorId.PlayerName.ToString();
if (regex.IsMatch(actorNameStr)) if (regex.IsMatch(actorNameStr))