private KeyValuePair <PCard, int> TeammateValueCard(PGame Game, PPlayer Player, PPlayer _Player) { return(PMath.Max(Player.Area.HandCardArea.CardList.FindAll((PCard Card) => Card.Type.IsEquipment()), (PCard Card) => { int New = Card.Model.AIInEquipExpectation(Game, _Player); PCard CurrentEquip = _Player.GetEquipment(Card.Type); int Current = CurrentEquip == null ? 0 : CurrentEquip.Model.AIInEquipExpectation(Game, _Player); int Delta = (_Player.Area.EquipmentCardArea.CardNumber + (CurrentEquip == null ? 1 : 0)) * 500; return New - Current + PAiTargetChooser.InjureExpect(Game, Player, Player, _Player, Delta, Instantiate()) + Math.Max(0, PAiCardExpectation.FindMostValuableToGet(Game, Player, _Player).Value); })); }
private PCard ChooseCard(PPlayer Player, PPlayer TargetPlayer, string Title, bool AllowHandCards = true, bool AllowEquipment = true, bool AllowAmbush = false, bool IsGet = false) { PCard TargetCard = null; if (Player.IsUser) { if (Player.Equals(TargetPlayer)) { TargetCard = PNetworkManager.NetworkServer.ChooseManager.AskToChooseOwnCard(Player, Title, AllowHandCards, AllowEquipment, AllowAmbush); } else { if (!AllowEquipment) { if (AllowHandCards) { TargetCard = TargetPlayer.Area.HandCardArea.RandomCard(); } } else { TargetCard = PNetworkManager.NetworkServer.ChooseManager.AskToChooseOthersCard(Player, TargetPlayer, Title, AllowHandCards, AllowAmbush); } } } else { if (IsGet) { if (!Player.Age.Equals(TargetPlayer.Age) && TargetPlayer.HasEquipment <P_HsiYooYangToow>() && AllowEquipment) { TargetCard = TargetPlayer.GetEquipment(PCardType.TrafficCard); } else { TargetCard = PAiCardExpectation.FindMostValuableToGet(this, Player, TargetPlayer, AllowHandCards, AllowEquipment, AllowAmbush, Player.Equals(TargetPlayer)).Key; } } else { if (Player.TeamIndex == TargetPlayer.TeamIndex) { TargetCard = PAiCardExpectation.FindLeastValuable(this, Player, TargetPlayer, AllowHandCards, AllowEquipment, AllowAmbush, Player.Equals(TargetPlayer)).Key; } else { TargetCard = PAiCardExpectation.FindMostValuable(this, Player, TargetPlayer, AllowHandCards, AllowEquipment, AllowAmbush).Key; } } } return(TargetCard); }
public P_CheevnHuoTaChieh() : base(CardName) { Point = 1; Index = 5; foreach (PTime Time in new PTime[] { PTime.Injure.AcceptInjure }) { MoveInHandTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = false, Player = Player, Time = Time, AIPriority = 10, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return !Player.Equals(InjureTag.ToPlayer) && InjureTag.Injure > 0 && InjureTag.ToPlayer != null && InjureTag.ToPlayer.Area.HandCardArea.CardNumber + InjureTag.ToPlayer.Area.EquipmentCardArea.CardNumber > 0; }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.TeamIndex != InjureTag.ToPlayer.TeamIndex && PAiCardExpectation.FindMostValuableToGet(Game, Player, InjureTag.ToPlayer).Value > 3000; }, Effect = MakeNormalEffect(Player, Card, AIEmitTargets, AIEmitTargets, (PGame Game, PPlayer User, PPlayer Target) => { PCard Got = Game.GetCardFrom(User, Target); #region 成就:分一杯羹 if (Got.Model is P_MuNiuLiuMa && User.Area.HandCardArea.CardList.Contains(Got)) { PArch.Announce(Game, User, "分一杯羹"); } #endregion }) }); }); } }
public P_YooChiinKuTsung() : base(CardName) { Point = 3; Index = 16; foreach (PTime Time in new PTime[] { PTime.Injure.EmitInjure }) { MoveInHandTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = false, Player = Player, Time = Time, AIPriority = 10, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.Equals(InjureTag.FromPlayer) && InjureTag.Injure > 0 && InjureTag.ToPlayer != null && InjureTag.ToPlayer.Area.HandCardArea.CardNumber > 0; }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); if (Player.TeamIndex == InjureTag.ToPlayer.TeamIndex) { if (Player.General is P_IzayoiMiku && InjureTag.ToPlayer.General is P_Gabriel) { return false; } return InjureTag.Injure >= InjureTag.ToPlayer.Money || (InjureTag.Injure >= 6000 && InjureTag.Injure + Player.Money >= 2 * (InjureTag.ToPlayer.Money - InjureTag.Injure)); } else { return InjureTag.Injure < InjureTag.ToPlayer.Money && InjureTag.Injure <= 1000 && InjureTag.ToPlayer.Area.HandCardArea.CardNumber >= 2 && PAiCardExpectation.FindMostValuableToGet(Game, Player, InjureTag.ToPlayer).Value > 3000; } }, Effect = MakeNormalEffect(Player, Card, AIEmitTargets, AIEmitTargets, (PGame Game, PPlayer User, PPlayer Target) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); PNetworkManager.NetworkServer.TellClients(new PPushTextOrder(User.Index.ToString(), "欲擒故纵:防止伤害", PPushType.Information.Name)); InjureTag.Injure = 0; for (int i = 0; i < 2; ++i) { if (Target.Area.HandCardArea.CardNumber > 0) { PCard Got = Game.GetCardFrom(User, Target, true, false); #region 成就:七擒七纵 if (Got.Model is P_NanManHsiang && User.Area.HandCardArea.CardList.Contains(Got)) { PArch.Announce(Game, User, "七擒七纵"); } #endregion } } }) }); }); } }
public static KeyValuePair <PPlayer, int> AIExpect(PGame Game, PPlayer Player, int BaseValue = 4000) { return(PMath.Max(Game.PlayerList.FindAll((PPlayer TargetPlayer) => TargetPlayer.IsAlive && !TargetPlayer.Equals(Player) /* && !(TargetPlayer.General is P_ShiQian)*/), (PPlayer TargetPlayer) => { return PAiCardExpectation.FindMostValuableToGet(Game, Player, TargetPlayer, true, true, true).Value - BaseValue; }, true)); }