38 lines
1.6 KiB
C#
38 lines
1.6 KiB
C#
namespace BlueLaminate.Core.Tradeups;
|
|
|
|
/// <summary>
|
|
/// A skin that can come OUT of a tradeup, carrying the float bounds needed to map an
|
|
/// input average float onto this skin's own wear range. <see cref="StatTrakAvailable"/>
|
|
/// is recorded so the listing-side query (Phase C) can filter ST vs non-ST outputs;
|
|
/// the graph itself is ST-agnostic.
|
|
/// </summary>
|
|
public sealed record TradeupOutputSkin(
|
|
int SkinId,
|
|
string Name,
|
|
decimal FloatMin,
|
|
decimal FloatMax,
|
|
bool StatTrakAvailable);
|
|
|
|
/// <summary>
|
|
/// One tradeup "recipe slot": all eligible input skins of a single rarity within one
|
|
/// collection, and the set of output skins they produce (the next rarity tier present
|
|
/// in that collection). For a single-collection contract, ten inputs are drawn from
|
|
/// <see cref="InputSkinIds"/> and each of <see cref="OutputSkins"/> is an equally likely
|
|
/// outcome, so k_C = <c>OutputSkins.Count</c>.
|
|
/// </summary>
|
|
public sealed record TradeupInputGroup(
|
|
int CollectionId,
|
|
string CollectionName,
|
|
WeaponRarity InputRarity,
|
|
WeaponRarity OutputRarity,
|
|
IReadOnlyList<int> InputSkinIds,
|
|
IReadOnlyList<TradeupOutputSkin> OutputSkins);
|
|
|
|
/// <summary>
|
|
/// The full tradeup reference graph derived from the static catalogue: every
|
|
/// (collection, input rarity) → (output rarity, output skins) edge that yields a
|
|
/// 10-input weapon tradeup. Built once per process from the monthly-synced catalogue
|
|
/// (see <see cref="TradeupGraphBuilder"/>); contains no pricing or listing data.
|
|
/// </summary>
|
|
public sealed record TradeupGraph(IReadOnlyList<TradeupInputGroup> Groups);
|