复制牌,保护buff显示调整
This commit is contained in:
@@ -146,6 +146,20 @@ namespace Continentis.MainGame.Card
|
||||
{
|
||||
return ModManager.GetData<CardData>(cardData.derivativeCardDataRefs[index]);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取衍生卡牌数据
|
||||
/// </summary>
|
||||
public CardData GetDerivativeCardData(string dataName)
|
||||
{
|
||||
if (cardData.derivativeCardDataRefs.Contains(dataName))
|
||||
{
|
||||
return ModManager.GetData<CardData>(dataName);
|
||||
}
|
||||
|
||||
Debug.LogError($"Card {cardData.className} does not contain derivative card data '{dataName}'.");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -63,7 +63,7 @@ namespace Continentis.MainGame.Card
|
||||
public virtual void DetectTargetsValidity(out List<CharacterBase> valid, out List<CharacterBase> notMet, out List<CharacterBase> invalid)
|
||||
{
|
||||
List<CharacterBase> characters = CombatMainManager.Instance.characterController.characters;
|
||||
invalid = new List<CharacterBase>();
|
||||
invalid = new List<CharacterBase>(characters);
|
||||
notMet = new List<CharacterBase>();
|
||||
valid = new List<CharacterBase>();
|
||||
|
||||
@@ -71,98 +71,48 @@ namespace Continentis.MainGame.Card
|
||||
|
||||
if (targetCount <= -2)
|
||||
{
|
||||
Debug.LogError("Invalid target count setting on card: " + contentSubmodule.cardName);
|
||||
return;
|
||||
}
|
||||
|
||||
if (targetCount == 0 || HasKeyword("TargetSelf")) // 卡牌目标为自身
|
||||
{
|
||||
valid.Add(user);
|
||||
invalid.AddRange(characters);
|
||||
invalid.Remove(user);
|
||||
}
|
||||
else if (HasKeyword("TargetAllies")) // 卡牌目标为友方单位
|
||||
{
|
||||
if(user.fraction is Fraction.Ally or Fraction.Player)
|
||||
{
|
||||
foreach (CharacterBase character in characters)
|
||||
{
|
||||
if (character.fraction is Fraction.Ally or Fraction.Player)
|
||||
{
|
||||
valid.Add(character);
|
||||
}
|
||||
else
|
||||
{
|
||||
invalid.Add(character);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (CharacterBase character in characters)
|
||||
{
|
||||
if (character.fraction == user.fraction)
|
||||
{
|
||||
valid.Add(character);
|
||||
}
|
||||
else
|
||||
{
|
||||
invalid.Add(character);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (HasKeyword("TargetEnemies")) // 卡牌目标为敌人
|
||||
{
|
||||
if (user.fraction is Fraction.Ally or Fraction.Player)
|
||||
{
|
||||
foreach (CharacterBase character in characters)
|
||||
{
|
||||
if (character.fraction is Fraction.Enemy or Fraction.Neutral)
|
||||
{
|
||||
valid.Add(character);
|
||||
}
|
||||
else
|
||||
{
|
||||
invalid.Add(character);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (CharacterBase character in characters)
|
||||
{
|
||||
if (character.fraction != user.fraction)
|
||||
{
|
||||
valid.Add(character);
|
||||
}
|
||||
else
|
||||
{
|
||||
invalid.Add(character);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (targetCount != -1)
|
||||
{
|
||||
if (valid.Any(target => target.statusSubmodule.HasStatus(StatusType.Taunt)))
|
||||
{
|
||||
List<CharacterBase> protectedTargets = valid
|
||||
.Where(target => !target.statusSubmodule.HasStatus(StatusType.Taunt))
|
||||
.ToList();
|
||||
|
||||
notMet.AddRange(protectedTargets);
|
||||
valid.RemoveAll(target => !target.statusSubmodule.HasStatus(StatusType.Taunt));
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(HasKeyword("TargetAll")) // 卡牌目标为全体
|
||||
if (HasKeyword("TargetAll"))
|
||||
{
|
||||
valid.AddRange(characters);
|
||||
}
|
||||
else
|
||||
{
|
||||
valid.AddRange(characters);// 默认卡牌目标为所有单位
|
||||
Debug.Log("No valid target found");
|
||||
if (HasKeyword("TargetAllies"))
|
||||
{
|
||||
valid.AddRange(user.fraction is Fraction.Ally or Fraction.Player
|
||||
? characters.Where(character => character.fraction is Fraction.Ally or Fraction.Player)
|
||||
: characters.Where(character => character.fraction == user.fraction));
|
||||
valid.Remove(user);
|
||||
}
|
||||
|
||||
if (HasKeyword("TargetSelf"))
|
||||
{
|
||||
valid.Add(user);
|
||||
}
|
||||
|
||||
if (HasKeyword("TargetEnemies"))
|
||||
{
|
||||
valid.AddRange(user.fraction is Fraction.Ally or Fraction.Player
|
||||
? characters.Where(character => character.fraction is Fraction.Enemy or Fraction.Neutral)
|
||||
: characters.Where(character => character.fraction != user.fraction));
|
||||
|
||||
//处理保护,嘲讽等
|
||||
if (targetCount != -1)
|
||||
{
|
||||
List<CharacterBase> protectedTargets = valid.Where(target => target.statusSubmodule.HasStatus(StatusType.Protected)).ToList();
|
||||
notMet.AddRange(protectedTargets);
|
||||
valid.RemoveRange(protectedTargets);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach (CharacterBase validTarget in valid)
|
||||
{
|
||||
invalid.Remove(validTarget);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -260,6 +210,7 @@ namespace Continentis.MainGame.Card
|
||||
});
|
||||
AfterPlayEffect(targetList);
|
||||
playSubmodule.isDuringPlayEffect = false;
|
||||
handCardView.isDuringPlaying = false;
|
||||
}));
|
||||
return true;
|
||||
}
|
||||
@@ -287,7 +238,7 @@ namespace Continentis.MainGame.Card
|
||||
{
|
||||
playerHero.deckSubmodule.ExhaustCard(cardInstance);
|
||||
}
|
||||
else
|
||||
else if(!HasKeyword("Reuse"))
|
||||
{
|
||||
playerHero.deckSubmodule.DiscardCard(cardInstance);
|
||||
CommandQueueManager.Instance.AddCommand(new Cmd_Function(() =>
|
||||
|
||||
@@ -116,6 +116,10 @@ namespace Continentis.MainGame.Combat
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
character.eventSubmodule.onRoundStart.Invoke();
|
||||
character.equipmentSubmodule.currentEquipments.ForEach(equipment => equipment.eventSubmodule.onRoundStart.Invoke());
|
||||
character.combatBuffSubmodule.RoundStart();
|
||||
}
|
||||
|
||||
NextAction();
|
||||
@@ -126,6 +130,13 @@ namespace Continentis.MainGame.Combat
|
||||
{
|
||||
if (characterController.actionOrderList.Count == 0)
|
||||
{
|
||||
foreach (CharacterBase character in characterController.characters)
|
||||
{
|
||||
character.eventSubmodule.onRoundEnd.Invoke();
|
||||
character.equipmentSubmodule.currentEquipments.ForEach(equipment => equipment.eventSubmodule.onRoundEnd.Invoke());
|
||||
character.combatBuffSubmodule.RoundEnd();
|
||||
}
|
||||
|
||||
NextRound();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -103,6 +103,14 @@ namespace SLSFramework.General
|
||||
return newList;
|
||||
}
|
||||
|
||||
public static void RemoveRange<T>(this IList<T> list, IEnumerable<T> elements)
|
||||
{
|
||||
foreach (T element in elements)
|
||||
{
|
||||
list.Remove(element);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据指定的过滤器函数,返回一个新的列表,包含符合条件的元素
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user