加入用户最近100场战绩记录并实现展示

This commit is contained in:
FloatGaming
2026-03-16 23:18:58 +08:00
parent ec42f2e34b
commit f5c6f143c0
106 changed files with 12120 additions and 642 deletions
@@ -32,6 +32,12 @@ public static class StoreExpBottlePurchaseService
return false;
}
if (RequiresSinglePurchase(itemSO) && packageCount > 1)
{
failureMessage = "该物品仅支持单份购买";
return false;
}
if (itemSO.costRequirements == null || itemSO.costRequirements.Count == 0)
{
failureMessage = "不可购买";
@@ -45,13 +51,6 @@ public static class StoreExpBottlePurchaseService
return false;
}
ExpBottleKind kind;
if (!StoreExpBottleGrantResolver.TryResolve(itemSO, out kind))
{
failureMessage = "当前仅支持经验瓶发放";
return false;
}
long longGrantedCount = (long)Mathf.Max(1, itemSO.itemSinglePurchaseQty) * packageCount;
if (longGrantedCount > int.MaxValue)
{
@@ -74,9 +73,13 @@ public static class StoreExpBottlePurchaseService
}
int totalCost = (int)totalCostLong;
if (!ValidateGrantTarget(itemSO, out failureMessage))
{
return false;
}
PlayerEconomyLedger.EnsureInstance().AttachPlayerData(playerData);
ExpBottleLedger.EnsureInstance().AttachPlayerData(playerData);
StoreOwnershipLedger.EnsureInstance().InitializeIfNeeded();
if (!PlayerEconomyLedger.EnsureInstance().HasEnoughCoins(totalCost))
{
@@ -90,14 +93,95 @@ public static class StoreExpBottlePurchaseService
return false;
}
ExpBottleLedger.EnsureInstance().Add(kind, grantedCount);
if (!GrantPurchasedItem(playerData, itemSO, grantedCount, out failureMessage))
{
PlayerEconomyLedger.EnsureInstance().AddCoins(totalCost);
return false;
}
DebugPurchaseSuccess(itemSO, totalCost, grantedCount);
return true;
}
private static bool RequiresSinglePurchase(storeItemSO itemSO)
{
if (itemSO == null)
{
return false;
}
return itemSO.itemType == storeItemSO.ItemType.character
|| itemSO.itemType == storeItemSO.ItemType.song
|| itemSO.itemType == storeItemSO.ItemType.storyPassage;
}
private static bool ValidateGrantTarget(storeItemSO itemSO, out string failureMessage)
{
failureMessage = string.Empty;
if (itemSO == null)
{
failureMessage = "商品数据丢失";
return false;
}
switch (itemSO.itemType)
{
case storeItemSO.ItemType.consumable:
ExpBottleKind bottleKind;
if (!StoreExpBottleGrantResolver.TryResolve(itemSO, out bottleKind))
{
failureMessage = "当前仅支持经验瓶发放";
return false;
}
return true;
case storeItemSO.ItemType.character:
case storeItemSO.ItemType.song:
case storeItemSO.ItemType.storyPassage:
return StoreOwnershipLedger.EnsureInstance().TryGrantOwnershipPreview(itemSO, out failureMessage);
default:
failureMessage = "当前未配置发放逻辑";
return false;
}
}
private static bool GrantPurchasedItem(Player_SO playerData, storeItemSO itemSO, int grantedCount, out string failureMessage)
{
failureMessage = string.Empty;
if (itemSO == null)
{
failureMessage = "商品数据丢失";
return false;
}
switch (itemSO.itemType)
{
case storeItemSO.ItemType.consumable:
ExpBottleKind bottleKind;
if (!StoreExpBottleGrantResolver.TryResolve(itemSO, out bottleKind))
{
failureMessage = "当前仅支持经验瓶发放";
return false;
}
ExpBottleLedger.EnsureInstance().AttachPlayerData(playerData);
ExpBottleLedger.EnsureInstance().Add(bottleKind, grantedCount);
return true;
case storeItemSO.ItemType.character:
case storeItemSO.ItemType.song:
case storeItemSO.ItemType.storyPassage:
return StoreOwnershipLedger.EnsureInstance().TryGrantOwnership(itemSO, out failureMessage);
default:
failureMessage = "当前未配置发放逻辑";
return false;
}
}
private static void DebugPurchaseSuccess(storeItemSO itemSO, int totalCost, int grantedCount)
{
var snapshot = ExpBottleLedger.EnsureInstance().GetSnapshot();
var builder = new StringBuilder();
builder.Append("[StorePurchase] 已成功购买:");
builder.Append(itemSO != null ? itemSO.itemName : "未知物品");
@@ -105,6 +189,15 @@ public static class StoreExpBottlePurchaseService
builder.Append(totalCost);
builder.Append(" | 发放数量=");
builder.Append(grantedCount);
if (itemSO != null && itemSO.itemType != storeItemSO.ItemType.consumable)
{
builder.Append(" | 已写入OwnershipSave");
Debug.Log(builder.ToString());
return;
}
var snapshot = ExpBottleLedger.EnsureInstance().GetSnapshot();
builder.Append(" | 经验瓶库存:");
bool appendedAny = false;