Summary
A custom dealer configured as locked is inserted into the Messages app immediately as an empty conversation. The relationship remains locked, but the visible thread makes the dealer appear discovered before recommendation/unlock.
Verified against origin/stable at 0e84659 and S1API.Forked 3.1.15.
Reproduction
builder
.EnsureDealer()
.WithRelationshipDefaults(relationship => relationship
.SetUnlocked(false)
.SetUnlockType(NPCRelationship.UnlockType.Recommendation));
Load a save before the custom dealer has been unlocked, then open Messages.
Observed
The dealer has a visible, empty Messages entry even though Relationship.IsUnlocked is false.
NPCDealer.EnsureDealerCategory() calls NPC.SetConversationCategory(Dealer) with the default ensureUi: true. That calls MSGConversation.EnsureUIExists() during dealer initialization. ConversationCanBeHidden only controls whether a created entry may be hidden; it does not keep the entry hidden, and the public messaging wrapper does not expose entry visibility.
Expected
- The conversation may be categorized as
Dealer before unlock.
- A locked dealer should not have a visible Messages entry.
- Unlocking/recommending the dealer or receiving their first message should create/show the entry with the correct dealer category.
- Existing unlocked/saved dealers should remain visible.
Suggested direction
Avoid eagerly ensuring UI when categorizing a locked dealer, then ensure/show the conversation when the relationship unlocks. Please cover both Mono and IL2CPP, including save/load hydration and the dealer category badge.
Summary
A custom dealer configured as locked is inserted into the Messages app immediately as an empty conversation. The relationship remains locked, but the visible thread makes the dealer appear discovered before recommendation/unlock.
Verified against
origin/stableat0e84659and S1API.Forked 3.1.15.Reproduction
Load a save before the custom dealer has been unlocked, then open Messages.
Observed
The dealer has a visible, empty Messages entry even though
Relationship.IsUnlockedis false.NPCDealer.EnsureDealerCategory()callsNPC.SetConversationCategory(Dealer)with the defaultensureUi: true. That callsMSGConversation.EnsureUIExists()during dealer initialization.ConversationCanBeHiddenonly controls whether a created entry may be hidden; it does not keep the entry hidden, and the public messaging wrapper does not expose entry visibility.Expected
Dealerbefore unlock.Suggested direction
Avoid eagerly ensuring UI when categorizing a locked dealer, then ensure/show the conversation when the relationship unlocks. Please cover both Mono and IL2CPP, including save/load hydration and the dealer category badge.