Validate culture card purchase limits

This commit is contained in:
wuwenbo 2026-07-02 14:26:40 +08:00
parent 15593c487b
commit 37164ea62d

View File

@ -2301,10 +2301,7 @@ namespace RuntimeData
// 购买文化卡
public bool TryBuyCultureCard(MapData map, PlayerData player, CultureCardType cardType)
{
if (!Table.Instance.CultureCardDataAssets.GetCultureCardInfo(cardType, out var info)) return false;
if (!info.CheckEmpireCanUseCard(player.Empire)) return false;
if (!info.CheckPrerequisiteCardsOwned(player)) return false;
if (!info.CheckPlayerCanAfford(player)) return false;
if (!CheckCanBuyCultureCard(map, player, cardType, out var info)) return false;
info.SpendCost(player);
CultureCardList.Add(cardType);
var card = CultureCardFactory.GetCultureCardBase(cardType);
@ -2316,12 +2313,35 @@ namespace RuntimeData
// 能否购买文化卡
public bool CheckCanBuyCultureCard(MapData map, PlayerData player, CultureCardType cardType)
{
if (!Table.Instance.CultureCardDataAssets.GetCultureCardInfo(cardType, out var info)) return false;
return CheckCanBuyCultureCard(map, player, cardType, out _);
}
private bool CheckCanBuyCultureCard(MapData map, PlayerData player, CultureCardType cardType, out CultureCardInfo info)
{
info = null;
var dataAssets = Table.Instance?.CultureCardDataAssets;
if (dataAssets == null || !dataAssets.GetCultureCardInfo(cardType, out info)) return false;
if (player == null) return false;
if (info.NotShow) return false;
var ownedCount = GetCultureCardOwnedCount(cardType);
if (info.MaxCount > 0 && ownedCount >= info.MaxCount) return false;
if (!info.CheckEmpireCanUseCard(player.Empire)) return false;
if (!info.CheckPrerequisiteCardsOwned(player)) return false;
if (!info.CheckPlayerCanAfford(player)) return false;
return true;
}
private int GetCultureCardOwnedCount(CultureCardType cardType)
{
var count = 0;
if (CultureCardList == null) return count;
foreach (var ownedCardType in CultureCardList)
{
if (ownedCardType == cardType) count++;
}
return count;
}
public void OnTurnStart(MapData map, PlayerData player)
{