feat(config): LoginBonus section with 15-day shipped normal cycle

Rewards copied verbatim from traffic_prod_tutorial.ndjson capture.
This commit is contained in:
gamer147
2026-06-13 15:50:42 -04:00
parent 107ee106a3
commit 6fb73c7a09
2 changed files with 95 additions and 0 deletions

View File

@@ -0,0 +1,58 @@
using SVSim.Database.Enums;
namespace SVSim.Database.Models.Config;
/// <summary>
/// Daily login bonus catalog. The Normal cycle is the always-on N-day streak. Total
/// (continuous milestones) and Campaign (date-bounded specials) are placeholders — wire
/// emits empty arrays for them until a campaign is captured and seeded here.
/// </summary>
[ConfigSection("LoginBonus")]
public class LoginBonusConfig
{
public int CampaignId { get; set; } = 3;
public string Name { get; set; } = "Daily Bonus";
/// <summary>BG image asset key — wire ships as string. Prod captured value is "0".</summary>
public string Img { get; set; } = "0";
/// <summary>
/// Normal-cycle reward entries, 1-based by Day. Defaults to a 15-day cycle copied
/// verbatim from the prod tutorial capture (traffic_prod_tutorial.ndjson).
/// </summary>
public List<NormalBonusEntry> Normal { get; set; } = new();
public static LoginBonusConfig ShippedDefaults() => new()
{
CampaignId = 3,
Name = "Daily Bonus",
Img = "0",
Normal = new List<NormalBonusEntry>
{
new() { Day = 1, EffectId = 1, RewardType = UserGoodsType.Rupy, RewardDetailId = 0, RewardNumber = 20 },
new() { Day = 2, EffectId = 1, RewardType = UserGoodsType.Rupy, RewardDetailId = 0, RewardNumber = 20 },
new() { Day = 3, EffectId = 1, RewardType = UserGoodsType.Rupy, RewardDetailId = 0, RewardNumber = 20 },
new() { Day = 4, EffectId = 1, RewardType = UserGoodsType.Rupy, RewardDetailId = 0, RewardNumber = 20 },
new() { Day = 5, EffectId = 2, RewardType = UserGoodsType.Item, RewardDetailId = 80001, RewardNumber = 1 },
new() { Day = 6, EffectId = 1, RewardType = UserGoodsType.Rupy, RewardDetailId = 0, RewardNumber = 30 },
new() { Day = 7, EffectId = 1, RewardType = UserGoodsType.Rupy, RewardDetailId = 0, RewardNumber = 30 },
new() { Day = 8, EffectId = 1, RewardType = UserGoodsType.Rupy, RewardDetailId = 0, RewardNumber = 30 },
new() { Day = 9, EffectId = 1, RewardType = UserGoodsType.Rupy, RewardDetailId = 0, RewardNumber = 30 },
new() { Day = 10, EffectId = 2, RewardType = UserGoodsType.Item, RewardDetailId = 80001, RewardNumber = 1 },
new() { Day = 11, EffectId = 1, RewardType = UserGoodsType.Rupy, RewardDetailId = 0, RewardNumber = 40 },
new() { Day = 12, EffectId = 1, RewardType = UserGoodsType.Rupy, RewardDetailId = 0, RewardNumber = 40 },
new() { Day = 13, EffectId = 1, RewardType = UserGoodsType.Rupy, RewardDetailId = 0, RewardNumber = 40 },
new() { Day = 14, EffectId = 1, RewardType = UserGoodsType.Rupy, RewardDetailId = 0, RewardNumber = 40 },
new() { Day = 15, EffectId = 2, RewardType = UserGoodsType.Item, RewardDetailId = 1, RewardNumber = 1 },
},
};
}
public class NormalBonusEntry
{
public int Day { get; set; }
public int EffectId { get; set; } = 1;
public UserGoodsType RewardType { get; set; }
public long RewardDetailId { get; set; }
public int RewardNumber { get; set; }
}