Skip to content

Commit e624550

Browse files
authored
Fix invalid liege entries in title history (#2166)
1 parent ad375fe commit e624550

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

ImperatorToCK3/CK3/Characters/CharacterCollection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -535,7 +535,7 @@ public void PurgeUnneededCharacters(Title.LandedTitles titles, DynastyCollection
535535
dynasties.FlattenDynastiesWithNoFounders(this, houses, ck3BookmarkDate);
536536

537537
// Clean up title history.
538-
titles.RemoveInvalidHoldersFromHistory(this);
538+
titles.CleanUpHistory(this, ck3BookmarkDate);
539539
}
540540

541541
public void RemoveEmployerIdFromLandedCharacters(Title.LandedTitles titles, Date conversionDate) {

ImperatorToCK3/CK3/Titles/LandedTitles.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ public ImmutableHashSet<string> GetAllHolderIds() {
257257
return this.SelectMany(t => t.GetAllHolderIds()).ToImmutableHashSet();
258258
}
259259

260-
public void RemoveInvalidHoldersFromHistory(CharacterCollection characters) {
260+
public void CleanUpHistory(CharacterCollection characters, Date ck3BookmarkDate) {
261261
Logger.Debug("Removing invalid holders from history...");
262262

263263
var validIds = characters.Select(c => c.Id).ToImmutableHashSet();
@@ -270,6 +270,31 @@ public void RemoveInvalidHoldersFromHistory(CharacterCollection characters) {
270270
value => value.ToString() is string valStr && valStr != "0" && !validIds.Contains(valStr)
271271
);
272272
}
273+
274+
// Remove liege entries that are not valid (liege title is not held at the entry date).
275+
foreach (var title in this) {
276+
if (!title.History.Fields.TryGetValue("liege", out var liegeField)) {
277+
continue;
278+
}
279+
280+
foreach (var (date, entriesList) in liegeField.DateToEntriesDict.ToArray()) {
281+
if (entriesList.Count == 0) {
282+
continue;
283+
}
284+
285+
var lastEntry = entriesList.Last();
286+
var liegeTitleId = lastEntry.Value.ToString();
287+
if (liegeTitleId is null || liegeTitleId == "0") {
288+
continue;
289+
}
290+
291+
if (!TryGetValue(liegeTitleId, out var liegeTitle)) {
292+
liegeField.DateToEntriesDict.Remove(date);
293+
} else if (liegeTitle.GetHolderId(date) == "0") {
294+
liegeField.DateToEntriesDict.Remove(date);
295+
}
296+
}
297+
}
273298
}
274299

275300
public void ImportImperatorCountries(

0 commit comments

Comments
 (0)