mirror of
https://github.com/Ottermandias/Glamourer.git
synced 2025-12-13 12:14:18 +01:00
Fix issues with shared weapon types.
This commit is contained in:
parent
b44a147fdd
commit
525f65e70a
6 changed files with 13 additions and 11 deletions
|
|
@ -77,7 +77,7 @@ public sealed class AutoDesignApplier : IDisposable
|
||||||
{
|
{
|
||||||
case EquipSlot.MainHand:
|
case EquipSlot.MainHand:
|
||||||
{
|
{
|
||||||
if (_jobChangeState.TryGetValue(current.Type, actor.Job, out var data))
|
if (_jobChangeState.TryGetValue(current.Type, actor.Job, false, out var data))
|
||||||
{
|
{
|
||||||
Glamourer.Log.Verbose(
|
Glamourer.Log.Verbose(
|
||||||
$"Changing Mainhand from {state.ModelData.Weapon(EquipSlot.MainHand)} | {state.BaseData.Weapon(EquipSlot.MainHand)} to {data.Item1} for 0x{actor.Address:X}.");
|
$"Changing Mainhand from {state.ModelData.Weapon(EquipSlot.MainHand)} | {state.BaseData.Weapon(EquipSlot.MainHand)} to {data.Item1} for 0x{actor.Address:X}.");
|
||||||
|
|
@ -89,7 +89,7 @@ public sealed class AutoDesignApplier : IDisposable
|
||||||
}
|
}
|
||||||
case EquipSlot.OffHand when current.Type == state.BaseData.MainhandType.Offhand():
|
case EquipSlot.OffHand when current.Type == state.BaseData.MainhandType.Offhand():
|
||||||
{
|
{
|
||||||
if (_jobChangeState.TryGetValue(current.Type, actor.Job, out var data))
|
if (_jobChangeState.TryGetValue(current.Type, actor.Job, false, out var data))
|
||||||
{
|
{
|
||||||
Glamourer.Log.Verbose(
|
Glamourer.Log.Verbose(
|
||||||
$"Changing Offhand from {state.ModelData.Weapon(EquipSlot.OffHand)} | {state.BaseData.Weapon(EquipSlot.OffHand)} to {data.Item1} for 0x{actor.Address:X}.");
|
$"Changing Offhand from {state.ModelData.Weapon(EquipSlot.OffHand)} | {state.BaseData.Weapon(EquipSlot.OffHand)} to {data.Item1} for 0x{actor.Address:X}.");
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using Glamourer.Automation;
|
using Glamourer.Automation;
|
||||||
|
using Glamourer.Designs.Special;
|
||||||
using Glamourer.GameData;
|
using Glamourer.GameData;
|
||||||
using Glamourer.Interop.Material;
|
using Glamourer.Interop.Material;
|
||||||
using Glamourer.Services;
|
using Glamourer.Services;
|
||||||
|
|
@ -23,8 +24,7 @@ public class DesignMerger(
|
||||||
modAssociations);
|
modAssociations);
|
||||||
|
|
||||||
public MergedDesign Merge(IEnumerable<(IDesignStandIn, ApplicationType, JobFlag)> designs, in CustomizeArray currentCustomize,
|
public MergedDesign Merge(IEnumerable<(IDesignStandIn, ApplicationType, JobFlag)> designs, in CustomizeArray currentCustomize,
|
||||||
in DesignData baseRef,
|
in DesignData baseRef, bool respectOwnership, bool modAssociations)
|
||||||
bool respectOwnership, bool modAssociations)
|
|
||||||
{
|
{
|
||||||
var ret = new MergedDesign(designManager);
|
var ret = new MergedDesign(designManager);
|
||||||
ret.Design.SetCustomize(_customize, currentCustomize);
|
ret.Design.SetCustomize(_customize, currentCustomize);
|
||||||
|
|
|
||||||
|
|
@ -23,8 +23,8 @@ public readonly struct WeaponList
|
||||||
_list.Add(type, list);
|
_list.Add(type, list);
|
||||||
}
|
}
|
||||||
|
|
||||||
var remainingFlags = list.Select(t => t.Item3)
|
var existingFlags = list.Count == 0 ? 0 : list.Select(t => t.Item3).Aggregate((t, existing) => t | existing);
|
||||||
.Aggregate(flags, (current, existingFlags) => current & ~existingFlags);
|
var remainingFlags = flags & ~existingFlags;
|
||||||
|
|
||||||
if (remainingFlags == 0)
|
if (remainingFlags == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -33,7 +33,7 @@ public readonly struct WeaponList
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool TryGet(FullEquipType type, JobId id, out (EquipItem, StateSource) ret)
|
public bool TryGet(FullEquipType type, JobId id, bool gameStateAllowed, out (EquipItem, StateSource) ret)
|
||||||
{
|
{
|
||||||
if (!_list.TryGetValue(type, out var list))
|
if (!_list.TryGetValue(type, out var list))
|
||||||
{
|
{
|
||||||
|
|
@ -45,7 +45,7 @@ public readonly struct WeaponList
|
||||||
|
|
||||||
foreach (var (item, source, flags) in list)
|
foreach (var (item, source, flags) in list)
|
||||||
{
|
{
|
||||||
if (flags.HasFlag(flag))
|
if (flags.HasFlag(flag) && (gameStateAllowed || source is not StateSource.Game))
|
||||||
{
|
{
|
||||||
ret = (item, source);
|
ret = (item, source);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -139,6 +139,7 @@ public class Glamourer : IDalamudPlugin
|
||||||
ReadOnlySpan<string> relevantPlugins =
|
ReadOnlySpan<string> relevantPlugins =
|
||||||
[
|
[
|
||||||
"Penumbra", "MareSynchronos", "CustomizePlus", "SimpleHeels", "VfxEditor", "heliosphere-plugin", "Ktisis", "Brio", "DynamicBridge",
|
"Penumbra", "MareSynchronos", "CustomizePlus", "SimpleHeels", "VfxEditor", "heliosphere-plugin", "Ktisis", "Brio", "DynamicBridge",
|
||||||
|
"LoporritSync",
|
||||||
];
|
];
|
||||||
var plugins = _services.GetService<IDalamudPluginInterface>().InstalledPlugins
|
var plugins = _services.GetService<IDalamudPluginInterface>().InstalledPlugins
|
||||||
.GroupBy(p => p.InternalName)
|
.GroupBy(p => p.InternalName)
|
||||||
|
|
|
||||||
|
|
@ -24,11 +24,12 @@ public sealed class JobChangeState : IService
|
||||||
public ActorIdentifier Identifier
|
public ActorIdentifier Identifier
|
||||||
=> State?.Identifier ?? ActorIdentifier.Invalid;
|
=> State?.Identifier ?? ActorIdentifier.Invalid;
|
||||||
|
|
||||||
public bool TryGetValue(FullEquipType slot, JobId jobId, out (EquipItem, StateSource) data)
|
public bool TryGetValue(FullEquipType slot, JobId jobId, bool gameStateAllowed, out (EquipItem, StateSource) data)
|
||||||
=> _weaponList.TryGet(slot, jobId, out data);
|
=> _weaponList.TryGet(slot, jobId, gameStateAllowed, out data);
|
||||||
|
|
||||||
public void Set(ActorState state, IEnumerable<(EquipItem, StateSource, JobFlag)> items)
|
public void Set(ActorState state, IEnumerable<(EquipItem, StateSource, JobFlag)> items)
|
||||||
{
|
{
|
||||||
|
Reset();
|
||||||
foreach (var (item, source, flags) in items.Where(p => p.Item1.Valid))
|
foreach (var (item, source, flags) in items.Where(p => p.Item1.Valid))
|
||||||
_weaponList.TryAdd(item.Type, item, source, flags);
|
_weaponList.TryAdd(item.Type, item, source, flags);
|
||||||
State = state;
|
State = state;
|
||||||
|
|
|
||||||
|
|
@ -359,7 +359,7 @@ public class StateEditor(
|
||||||
}
|
}
|
||||||
|
|
||||||
var currentType = state.BaseData.Item(weaponSlot).Type;
|
var currentType = state.BaseData.Item(weaponSlot).Type;
|
||||||
if (mergedDesign.Weapons.TryGet(currentType, state.LastJob, out var weapon))
|
if (mergedDesign.Weapons.TryGet(currentType, state.LastJob, true, out var weapon))
|
||||||
{
|
{
|
||||||
var source = settings.UseSingleSource ? settings.Source :
|
var source = settings.UseSingleSource ? settings.Source :
|
||||||
weapon.Item2 is StateSource.Game ? StateSource.Game : settings.Source;
|
weapon.Item2 is StateSource.Game ? StateSource.Game : settings.Source;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue