diff --git a/Penumbra/Api/PenumbraApi.cs b/Penumbra/Api/PenumbraApi.cs index 3c666dc4..913deaf3 100644 --- a/Penumbra/Api/PenumbraApi.cs +++ b/Penumbra/Api/PenumbraApi.cs @@ -848,10 +848,16 @@ public class PenumbraApi : IDisposable, IPenumbraApi if (!_tempCollections.CollectionByName(collectionName, out var collection)) return PenumbraApiEc.CollectionMissing; - if (!forceAssignment - && (_tempCollections.Collections.Individuals.ContainsKey(identifier) - || _collectionManager.Individuals.Individuals.ContainsKey(identifier))) + if (forceAssignment) + { + if (_tempCollections.Collections.Individuals.ContainsKey(identifier) && !_tempCollections.Collections.Delete(identifier)) + return PenumbraApiEc.AssignmentDeletionFailed; + } + else if (_tempCollections.Collections.Individuals.ContainsKey(identifier) + || _collectionManager.Individuals.Individuals.ContainsKey(identifier)) + { return PenumbraApiEc.CharacterCollectionExists; + } var group = _tempCollections.Collections.GetGroup(identifier); return _tempCollections.AddIdentifier(collection, group) diff --git a/Penumbra/Api/TempCollectionManager.cs b/Penumbra/Api/TempCollectionManager.cs index fab7eace..18a7e43f 100644 --- a/Penumbra/Api/TempCollectionManager.cs +++ b/Penumbra/Api/TempCollectionManager.cs @@ -67,11 +67,11 @@ public class TempCollectionManager : IDisposable collection.ClearCache(); for (var i = 0; i < Collections.Count; ++i) { - if (Collections[i].Collection == collection) - { - _communicator.CollectionChange.Invoke(CollectionType.Temporary, collection, null, Collections[i].DisplayName); - Collections.Delete(i); - } + if (Collections[i].Collection != collection) + continue; + + _communicator.CollectionChange.Invoke(CollectionType.Temporary, collection, null, Collections[i].DisplayName); + Collections.Delete(i--); } return true;