/// <summary> /// 摸一张牌,返回摸到的牌 /// </summary> /// <param name="Player"></param> /// <param name="OnlyShow">是否是展示卡牌(摸到结算区)</param> /// <returns></returns> public PCard GetCard(PPlayer Player, bool OnlyShow = false) { if (Player == null || !Player.IsAlive) { return(null); } if (CardManager.CardHeap.CardNumber == 0 && CardManager.ThrownCardHeap.CardNumber > 0) { CardManager.CardHeap.CardList.AddRange(CardManager.ThrownCardHeap.CardList); CardManager.ThrownCardHeap.CardList.Clear(); CardManager.CardHeap.Wash(); } PCard Got = null; if (CardManager.CardHeap.CardNumber > 0) { CardManager.MoveCard(Got = CardManager.CardHeap.TopCard, CardManager.CardHeap, OnlyShow ? CardManager.SettlingArea : Player.Area.HandCardArea); } if (NowPeriod != null) { if (OnlyShow) { PNetworkManager.NetworkServer.TellClients(new PShowInformationOrder(Player.Name + "展示了" + Got.Name)); } else { PNetworkManager.NetworkServer.TellClients(new PShowInformationOrder(Player.Name + "摸了1张牌")); } } return(Got); }
public override int AIInHandExpectation(PGame Game, PPlayer Player) { PCard Current = Player.GetEquipment(Type); int Exp = AIInEquipExpectation(Game, Player); int Base = 0; int Basic = 0; if (Player.General is P_HuaXiong) { Base += 1000; } if (Player.General is P_TangYin) { Base += 500; } if (Player.General is P_HuaMulan) { Base += 3500; } if (Player.General is P_LvMeng) { Base += 1000; } if (Current != null && Exp <= Current.Model.AIInEquipExpectation(Game, Player)) { Basic = 500 + Base; } else { Basic = Exp + Base; } return(Math.Max(Basic, base.AIInHandExpectation(Game, Player))); }
/// <summary> /// 获得牌行为 /// </summary> /// <param name="Player">获得牌的玩家</param> /// <param name="TargetPlayer">被获得牌的玩家</param> /// <param name="Directly">是否直接转移装备</param> /// <returns>获得的牌</returns> public PCard GetCardFrom(PPlayer Player, PPlayer TargetPlayer, bool AllowHandCards = true, bool AllowEquipment = true, bool AllowJudge = false, bool Directly = false) { string Title = "请选择获得一张" + (AllowHandCards ? "[手牌]" : string.Empty) + (AllowEquipment ? "[装备]" : string.Empty) + (AllowJudge ? "[伏兵]" : string.Empty); PCard TargetCard = ChooseCard(Player, TargetPlayer, Title, AllowHandCards, AllowEquipment, AllowJudge, true); if (TargetCard != null) { PNetworkManager.NetworkServer.TellClients(new PShowInformationOrder(Player.Name + "获得了" + TargetPlayer.Name + "的" + (TargetPlayer.Area.HandCardArea.CardList.Contains(TargetCard) ? "1张手牌" : TargetCard.Name))); if (TargetPlayer.Area.HandCardArea.CardList.Contains(TargetCard)) { CardManager.MoveCard(TargetCard, TargetPlayer.Area.HandCardArea, Player.Area.HandCardArea); } else if (TargetPlayer.Area.EquipmentCardArea.CardList.Contains(TargetCard)) { if (Directly) { CardManager.MoveCard(TargetCard, TargetPlayer.Area.EquipmentCardArea, Player.Area.EquipmentCardArea); } else { CardManager.MoveCard(TargetCard, TargetPlayer.Area.EquipmentCardArea, Player.Area.HandCardArea); } } else if (TargetPlayer.Area.AmbushCardArea.CardList.Contains(TargetCard)) { CardManager.MoveCard(TargetCard, TargetPlayer.Area.AmbushCardArea, Player.Area.HandCardArea); } } return(TargetCard); }
protected static Action <PGame> MakeNormalEffect(PPlayer Player, PCard Card, TargetChooser AITargetChooser, TargetChooser PlayerTargetChooser, EffectFunc Effect, Action <PGame, PPlayer, List <PPlayer> > StartAction = null, Action <PGame, PPlayer, List <PPlayer> > EndAction = null) { return((PGame Game) => { List <PPlayer> Targets = Player.IsAI ? AITargetChooser(Game, Player) : PlayerTargetChooser(Game, Player); Targets.RemoveAll((PPlayer _Player) => _Player == null); if (Targets.Count == 0) { return; } Game.Monitor.CallTime(PTime.Card.AfterEmitTargetTime, new PUseCardTag(Card, Player, Targets)); if (Card.Point > 0) { Game.CardManager.MoveCard(Card, Player.Area.HandCardArea, Game.CardManager.SettlingArea); } Game.Monitor.CallTime(PTime.Card.AfterBecomeTargetTime, new PUseCardTag(Card, Player, Targets)); Targets = ArrangeTargets(Game, Targets, Player); Game.TagManager.CreateTag(new PUseCardTag(Card, Player, Targets)); StartAction?.Invoke(Game, Player, Targets); Targets.ForEach((PPlayer Target) => { if (Target != null && Target.IsAlive) { Effect(Game, Player, Target); } }); EndAction?.Invoke(Game, Player, Targets); Game.TagManager.PopTag <PUseCardTag>(PUseCardTag.TagName); if (Card.Point > 0) { Game.CardManager.MoveCard(Card, Game.CardManager.SettlingArea, Game.CardManager.ThrownCardHeap); } Game.Monitor.CallTime(PTime.Card.EndSettleTime, new PUseCardTag(Card, Player, Targets)); }); }
public override void AnnouceInvokeJudge(PGame Game, PPlayer Player, PCard Card) { base.AnnouceInvokeJudge(Game, Player, Card); int Result = Game.Judge(Player, new Func <int>(() => { if (Game.Enemies(Player).Count > Game.Teammates(Player, false).Count&& !(Game.Teammates(Player, false).Exists((PPlayer _Player) => _Player.Money <= 1000))) { return(6); } return(2); })()); if (Result != 2) { Game.LoseMoney(Player, 1000); if (Game.GetNextPlayer(Player).Area.AmbushCardArea.CardList.Exists((PCard _Card) => _Card.Model is P_WevnI)) { Game.CardManager.MoveCard(Card, Player.Area.AmbushCardArea, Game.GetNextPlayer(Game.GetNextPlayer(Player)).Area.AmbushCardArea); } else { Game.CardManager.MoveCard(Card, Player.Area.AmbushCardArea, Game.GetNextPlayer(Player).Area.AmbushCardArea); } } else { Game.CardManager.MoveCard(Card, Player.Area.AmbushCardArea, Game.CardManager.ThrownCardHeap); } }
public override void AnnouceInvokeJudge(PGame Game, PPlayer Player, PCard Card) { base.AnnouceInvokeJudge(Game, Player, Card); int Result = Game.Judge(Player, new Func <int>(() => { if (Player.Area.EquipmentCardArea.CardNumber > 0) { return(6); } else { return(5); } })()); if (Result != 6) { if (Player.Area.EquipmentCardArea.CardNumber > 0) { Game.ThrowCard(Player, Player, false, true); } if (Game.GetNextPlayer(Player).Area.AmbushCardArea.CardList.Exists((PCard _Card) => _Card.Model is P_HsienChing)) { Game.CardManager.MoveCard(Card, Player.Area.AmbushCardArea, Game.GetNextPlayer(Game.GetNextPlayer(Player)).Area.AmbushCardArea); } else { Game.CardManager.MoveCard(Card, Player.Area.AmbushCardArea, Game.GetNextPlayer(Player).Area.AmbushCardArea); } } else { Game.CardManager.MoveCard(Card, Player.Area.AmbushCardArea, Game.CardManager.ThrownCardHeap); } }
protected static Action <PGame> MakeNormalEffect(PPlayer Player, PCard Card, TargetChooser AITargetChooser, PTrigger.PlayerCondition TargetCondition, EffectFunc Effect) { return(MakeNormalEffect(Player, Card, AITargetChooser, (PGame Game, PPlayer _Player) => { return new List <PPlayer> { PNetworkManager.NetworkServer.ChooseManager.AskForTargetPlayer(_Player, TargetCondition, Card.Name) }; }, Effect)); }
public PChooseCardTag(PPlayer Player, PCard Card, bool AllowHandCards = true, bool AllowEquipment = true, bool AllowJudge = false) : base(TagName) { AppendField(PlayerFieldName, Player); AppendField(CardFieldName, Card); AppendField(AllowHandCardsName, AllowHandCards); AppendField(AllowEquipmentName, AllowEquipment); AppendField(AllowJudgeName, AllowJudge); }
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 P_HsiaoLiTsaangTao() : base(CardName) { Point = 2; Index = 10; foreach (PTime Time in new PTime[] { PPeriod.FirstFreeTime.During, PPeriod.SecondFreeTime.During }) { MoveInHandTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = false, Player = Player, Time = Time, AIPriority = 145, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) && Player.Area.HandCardArea.CardList.Exists((PCard _Card) => _Card.Type.IsEquipment()); }, AICondition = (PGame Game) => { if (Player.General is P_WuZhao && Player.RemainLimit(PSkillInfo.女权.Name)) { return false; } return AIEmitTargets(Game, Player)[0] != null && P_PanYue.XianJuTest(Game, Player); }, Effect = MakeNormalEffect(Player, Card, AIEmitTargets, PTrigger.Except(Player), (PGame Game, PPlayer User, PPlayer Target) => { PCard TargetCard = null; if (User.IsAI) { if (User.TeamIndex == Target.TeamIndex) { TargetCard = TeammateValueCard(Game, User, Target).Key; } else { TargetCard = EnemyValueCard(Game, User, Target).Key; } } else { do { TargetCard = PNetworkManager.NetworkServer.ChooseManager.AskToChooseOwnCard(User, CardName + "[选择一张手牌中的装备牌]", true, false); } while (!TargetCard.Type.IsEquipment()); } if (TargetCard != null) { Game.CardManager.MoveCard(TargetCard, User.Area.HandCardArea, Target.Area.EquipmentCardArea); Game.Injure(User, Target, 500 * Target.Area.EquipmentCardArea.CardNumber, Card); } }) }); }); } }
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 override void AnnouceInvokeJudge(PGame Game, PPlayer Player, PCard Card) { base.AnnouceInvokeJudge(Game, Player, Card); int Result = Game.Judge(Player, new Func<int>(() => { if (Player.HasHouse) { return 4; } return 6; })()); if (Result != 4) { Game.ThrowHouse(Player, Player, CardName); } Game.CardManager.MoveCard(Card, Player.Area.AmbushCardArea, Game.CardManager.ThrownCardHeap); }
/// <summary> /// 洗牌操作 /// </summary> public void Wash() { for (int i = CardList.Count - 1; i > 0; --i) { int t1 = PMath.RandInt(0, i); int t2 = i; if (t1 != t2) { PCard Temp = CardList[t1]; CardList[t1] = CardList[t2]; CardList[t2] = Temp; } } }
public override void AnnouceInvokeJudge(PGame Game, PPlayer Player, PCard Card) { base.AnnouceInvokeJudge(Game, Player, Card); int Result = Game.Judge(Player, new Func <int>(() => { if (AIExpect(Game, Player, Player.Position) < -1000) { return(1); } return(6); })()); if (Result != 1) { PBlock Block = Player.Position; int[] dx = { 1, -1, 0, 0 }; int[] dy = { 0, 0, 1, -1 }; int OriginalX = Block.X; int OriginalY = Block.Y; int x, y; Game.GetHouse(Block, 1); for (int i = 0; i < 4; ++i) { x = OriginalX; y = OriginalY; do { x += dx[i]; y += dy[i]; PBlock TempBlock = Game.Map.FindBlockByCoordinate(x, y); if (TempBlock != null) { if (TempBlock.Lord != null) { Game.GetHouse(TempBlock, 1); } } else { break; } } while (true); } } Game.CardManager.MoveCard(Card, Player.Area.AmbushCardArea, Game.CardManager.ThrownCardHeap); }
public void GiveCardTo(PPlayer Player, PPlayer TargetPlayer, bool AllowHandCards = true, bool AllowEquipment = true, bool AllowJudge = false, bool Directly = false) { string Title = "请选择给出一张" + (AllowHandCards ? "[手牌]" : string.Empty) + (AllowEquipment ? "[装备]" : string.Empty) + (AllowJudge ? "[伏兵]" : string.Empty); PCard Card = null; if (Player.IsAI) { if (Player.TeamIndex == TargetPlayer.TeamIndex) { Card = PAiCardExpectation.FindMostValuable(this, TargetPlayer, Player, AllowHandCards, AllowEquipment, AllowJudge, true).Key; } else { Card = PAiCardExpectation.FindLeastValuable(this, TargetPlayer, Player, AllowHandCards, AllowEquipment, AllowJudge, true).Key; } } else { Card = PNetworkManager.NetworkServer.ChooseManager.AskToChooseOwnCard(Player, Title, AllowHandCards, AllowEquipment, AllowJudge); } if (Card != null) { PNetworkManager.NetworkServer.TellClients(new PShowInformationOrder(Player.Name + "交给了" + TargetPlayer.Name + (Player.Area.HandCardArea.CardList.Contains(Card) ? "1张手牌" : Card.Name))); if (Player.Area.HandCardArea.CardList.Contains(Card)) { CardManager.MoveCard(Card, Player.Area.HandCardArea, TargetPlayer.Area.HandCardArea); } else if (Player.Area.EquipmentCardArea.CardList.Contains(Card)) { if (Directly) { CardManager.MoveCard(Card, Player.Area.EquipmentCardArea, TargetPlayer.Area.EquipmentCardArea); } else { CardManager.MoveCard(Card, Player.Area.EquipmentCardArea, TargetPlayer.Area.HandCardArea); } } else if (Player.Area.AmbushCardArea.CardList.Contains(Card)) { CardManager.MoveCard(Card, Player.Area.AmbushCardArea, TargetPlayer.Area.HandCardArea); } } }
/// <summary> /// 弃牌行为 /// </summary> /// <param name="Player">发起弃牌方</param> /// <param name="TargetPlayer">被弃牌方</param> public PCard ThrowCard(PPlayer Player, PPlayer TargetPlayer, bool AllowHandCards = true, bool AllowEquipment = true, bool AllowJudge = false) { string Title = "请选择弃置一张" + (AllowHandCards ? "[手牌]" : string.Empty) + (AllowEquipment ? "[装备]" : string.Empty) + (AllowJudge ? "[伏兵]" : string.Empty); PCard TargetCard = ChooseCard(Player, TargetPlayer, Title, AllowHandCards, AllowEquipment, AllowJudge); if (TargetCard != null) { PNetworkManager.NetworkServer.TellClients(new PShowInformationOrder(Player.Name + "弃置了" + TargetPlayer.Name + "的" + TargetCard.Name)); if (TargetPlayer.Area.HandCardArea.CardList.Contains(TargetCard)) { CardManager.MoveCard(TargetCard, TargetPlayer.Area.HandCardArea, CardManager.ThrownCardHeap); } else if (TargetPlayer.Area.EquipmentCardArea.CardList.Contains(TargetCard)) { CardManager.MoveCard(TargetCard, TargetPlayer.Area.EquipmentCardArea, CardManager.ThrownCardHeap); } } return(TargetCard); }
public P_IITaiLao() : base(CardName) { Point = 1; Index = 4; foreach (PTime Time in new PTime[] { PPeriod.FirstFreeTime.During, PPeriod.SecondFreeTime.During }) { MoveInHandTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = false, Player = Player, Time = Time, AIPriority = 21, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()); }, AICondition = (PGame Game) => { if (Player.General is P_WuZhao && Player.RemainLimit(PSkillInfo.女权.Name)) { return false; } return PMath.Min(Player.Area.HandCardArea.CardList.FindAll((PCard _Card) => !_Card.Equals(Card)).ConvertAll((PCard _Card) => _Card.AIInHandExpectation(Game, Player))) <= 1000; }, Effect = MakeMultiTargetNormalEffect(Player, Card, AIEmitTargets, PTrigger.NoCondition, (PGame Game, PPlayer User, PPlayer Target) => { PCard Got = Game.GetCard(Target); #region 成就:躺尸 if (Got.Model is P_ChiehShihHuanHun && User.Area.HandCardArea.CardList.Contains(Got)) { PArch.Announce(Game, User, "躺尸"); } #endregion Game.ThrowCard(Target, Target); }) }); }); } }
public PAmbushTriggerInstaller() : base("触发伏兵") { TriggerList.Add(new PTrigger("触发伏兵") { IsLocked = true, Time = PPeriod.AmbushStage.During, Condition = (PGame Game) => { return(Game.NowPlayer.Area.AmbushCardArea.CardNumber > 0); }, Effect = (PGame Game) => { for (int i = Game.NowPlayer.Area.AmbushCardArea.CardNumber - 1; i >= 0; --i) { PCard AmbushCard = Game.NowPlayer.Area.AmbushCardArea.CardList[i]; if (AmbushCard != null) { ((PAmbushCardModel)AmbushCard.Model).AnnouceInvokeJudge(Game, Game.NowPlayer, AmbushCard); } } } }); }
public override void AnnouceInvokeJudge(PGame Game, PPlayer Player, PCard Card) { base.AnnouceInvokeJudge(Game, Player, Card); int Result = Game.Judge(Player, new Func <int>(() => { if (Player.Area.HandCardArea.CardNumber <= 1) { return(6); } return(3); })()); if (Result != 3) { int ThrowNumber = Player.Area.HandCardArea.CardNumber / 2; for (int i = 0; i < ThrowNumber; ++i) { Game.ThrowCard(Player, Player, true, false); } } Game.CardManager.MoveCard(Card, Player.Area.AmbushCardArea, Game.CardManager.ThrownCardHeap); }
public static KeyValuePair <PCard, int> EquipToThrow(PGame Game, PPlayer Player) { Dictionary <PCard, int> Dict = new Dictionary <PCard, int>(); PCard Answer = null; int AnswerValue = -1; foreach (PCardType CardType in new PCardType[] { PCardType.WeaponCard, PCardType.DefensorCard, PCardType.TrafficCard }) { PCard CurrentCard = Player.GetEquipment(CardType); if (CurrentCard != null) { List <PCard> AvailableCardList = Player.Area.HandCardArea.CardList.FindAll((PCard _Card) => _Card.Type.Equals(CardType)); if (AvailableCardList.Count > 0) { KeyValuePair <PCard, int> MinCard = PMath.Min(AvailableCardList, (PCard _Card) => _Card.Model.AIInEquipExpectation(Game, Player)); KeyValuePair <PCard, int> MaxCard = PMath.Max(AvailableCardList, (PCard _Card) => _Card.Model.AIInEquipExpectation(Game, Player)); int CurrentValue = CurrentCard.Model.AIInEquipExpectation(Game, Player); if (CurrentValue > MinCard.Value) { Dict.Add(MinCard.Key, 0); } if (CurrentValue < MaxCard.Value) { Dict.Add(CurrentCard, MaxCard.Value - CurrentValue); } } } } foreach (KeyValuePair <PCard, int> Record in Dict) { if (Record.Value > AnswerValue) { AnswerValue = Record.Value; Answer = Record.Key; } } return(new KeyValuePair <PCard, int>(Answer, AnswerValue)); }
public P_ShunShouChiienYang() : base(CardName) { Point = 2; Index = 12; foreach (PTime Time in new PTime[] { PPeriod.FirstFreeTime.During, PPeriod.SecondFreeTime.During }) { MoveInHandTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = false, Player = Player, Time = Time, AIPriority = 120, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) && Game.PlayerList.Find((PPlayer _Player) => _Player.Area.CardNumber > 0 && !_Player.Equals(Player)) != null; }, AICondition = (PGame Game) => { return AIEmitTargets(Game, Player)[0] != null; }, Effect = MakeNormalEffect(Player, Card, AIEmitTargets, (PGame Game, PPlayer _Player) => { return _Player.Area.CardNumber > 0 && !_Player.Equals(Player); }, (PGame Game, PPlayer User, PPlayer Target) => { PCard Got = Game.GetCardFrom(User, Target, true, true, true); #region 成就:名副其实 if (Got.Model is P_HsiYooYangToow && User.Area.HandCardArea.CardList.Contains(Got)) { PArch.Announce(Game, User, "名副其实"); } #endregion }) }); }); } }
public override void AnnouceInvokeJudge(PGame Game, PPlayer Player, PCard Card) { base.AnnouceInvokeJudge(Game, Player, Card); int Result1 = Game.Judge(Player, 6); int Result2 = Game.Judge(Player, 6); if (Result1 + Result2 <= 5) { Game.Injure(null, Player, 6000, Card); Game.CardManager.MoveCard(Card, Player.Area.AmbushCardArea, Game.CardManager.ThrownCardHeap); } else { if (Game.GetNextPlayer(Player).Area.AmbushCardArea.CardList.Exists((PCard _Card) => _Card.Model is P_ShanTien)) { Game.CardManager.MoveCard(Card, Player.Area.AmbushCardArea, Game.GetNextPlayer(Game.GetNextPlayer(Player)).Area.AmbushCardArea); } else { Game.CardManager.MoveCard(Card, Player.Area.AmbushCardArea, Game.GetNextPlayer(Player).Area.AmbushCardArea); } } }
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 PClickOnCardOrder() : base("click_on_card", (string[] args, string IPAddress) => { int CardIndex = Convert.ToInt32(args[1]); PGame Game = PNetworkManager.Game; PChooseCardTag ChooseCardTag = Game.TagManager.FindPeekTag <PChooseCardTag>(PChooseCardTag.TagName); if (ChooseCardTag != null && ChooseCardTag.Player.IPAddress.Equals(IPAddress)) { ChooseCardTag.Card = ChooseCardTag.Player.Area.GetCard(CardIndex, ChooseCardTag.AllowHandCards, ChooseCardTag.AllowEquipment, ChooseCardTag.AllowJudge); } else if (Game.Logic.WaitingForEndFreeTime() && Game.NowPlayer.IPAddress.Equals(IPAddress) && Game.TagManager.ExistTag(PTag.FreeTimeOperationTag.Name) && Game.NowPlayer.IsAlive) { PCard Card = Game.NowPlayer.Area.GetCard(CardIndex); if (Card != null) { PTrigger Trigger = null; if (Game.NowPlayer.Area.HandCardArea.CardList.Contains(Card)) { Trigger = Card.FindTrigger(Game.NowPeriod.During); } else if (Game.NowPlayer.Area.EquipmentCardArea.CardList.Contains(Card)) { Trigger = Card.FindEquipmentTrigger(Game.NowPeriod.During); } if (Trigger != null) { if (Trigger.Condition(Game)) { PThread.Async(() => { Game.Logic.StartSettle(new PSettle("主动触发" + Trigger.Name, Trigger.Effect)); }); } } } } }, null) { }
public P_TangYin() : base("唐寅") { Sex = PSex.Male; Age = PAge.Industrial; Index = 20; Cost = 25; Tips = "定位:攻击\n" + "难度:简单\n" + "史实:明代画家、书法家、诗人,“明四家”和“吴中四才子”之一。以风流之名传于世,后代有“唐伯虎点秋香”等传说。\n" + "攻略:\n唐寅是一个上手简单的攻击型武将,并且具有一定的防御能力。【风流】作为主要输出技能,能够保持前期的经济压制和后期的装备压制,并可通过伤害类计策触发,因此【浑水摸鱼】【关门捉贼】等牌都是关键牌。【浪子】作为防御技能,能够在后期积累了一定装备的基础上避开关键区域,防止崩盘,因此唐寅对装备牌的需求也较大。唐寅可通过对队友造成伤害以获得装备;反之,【风流】的输出也会受到装备的限制,对手可以通过给唐寅没用的装备,替换唐寅原本的装备,降低【风流】的收益甚至令其变为负收益。"; PSkill LangZi = new PSkill("浪子"); SkillList.Add(LangZi .AddTimeTrigger( new PTime[] { PPeriod.DiceStage.Start }, (PTime Time, PPlayer Player, PSkill Skill) => { return(new PTrigger(LangZi.Name) { IsLocked = false, Player = Player, Time = Time, AIPriority = 10, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer) && Player.HasEquipInArea(); }, AICondition = (PGame Game) => { KeyValuePair <PCard, int> CardValue = PAiCardExpectation.EquipToThrow(Game, Player); KeyValuePair <int, int> SkillValue = LangZiBannedNumber(Game, Player); return CardValue.Key != null && SkillValue.Key > 0 && SkillValue.Value >= 100 && SkillValue.Value + CardValue.Value >= 300; }, Effect = (PGame Game) => { LangZi.AnnouceUseSkill(Player); PCard TargetCard = null; if (Player.IsAI) { TargetCard = PAiCardExpectation.EquipToThrow(Game, Player).Key; } else { do { TargetCard = PNetworkManager.NetworkServer.ChooseManager.AskToChooseOwnCard(Player, LangZi.Name + "[选择一张装备牌]", true, true); } while (!TargetCard.Type.IsEquipment()); } if (TargetCard != null) { int BannedNumber = 0; if (Player.IsAI) { BannedNumber = LangZiBannedNumber(Game, Player).Key; } else { BannedNumber = PNetworkManager.NetworkServer.ChooseManager.Ask1To6(Player, LangZi.Name + "[选择不会被掷出的数字]"); } if (BannedNumber > 0) { Game.CardManager.MoveCard(TargetCard, Player.Area.HandCardArea.CardList.Contains(TargetCard) ? Player.Area.HandCardArea : Player.Area.EquipmentCardArea, Game.CardManager.ThrownCardHeap); Player.Tags.CreateTag(new PNumberedTag(LangZi.Name, BannedNumber)); } } } }); }) .AddTrigger((PPlayer Player, PSkill Skill) => { return(new PTrigger(LangZi.Name + "[掷骰无效触发]") { IsLocked = true, Player = Player, Time = PPeriod.DiceStage.During, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer) && Player.Tags.ExistTag(LangZi.Name); }, Effect = (PGame Game) => { int BannedNumber = Player.Tags.PopTag <PNumberedTag>(LangZi.Name).Value; PDiceResultTag DiceResult = Game.TagManager.FindPeekTag <PDiceResultTag>(PDiceResultTag.TagName); if (BannedNumber == DiceResult.DiceResult) { LangZi.AnnouceUseSkill(Player); int NewNumber = BannedNumber; while (NewNumber == BannedNumber) { NewNumber = PMath.RandInt(1, 6); } PNetworkManager.NetworkServer.TellClients(new PShowInformationOrder("掷骰结果更改为" + NewNumber.ToString())); DiceResult.DiceResult = NewNumber; } } }); }) ); PSkill FengLiu = new PSkill("风流"); const int FengLiuInjure = 600; SkillList.Add(FengLiu .AddTimeTrigger( new PTime[] { PTime.Injure.EmitInjure }, (PTime Time, PPlayer Player, PSkill Skill) => { return(new PTrigger(FengLiu.Name) { IsLocked = false, Player = Player, Time = Time, AIPriority = 150, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return InjureTag.Injure > 0 && Player.Equals(InjureTag.FromPlayer) && InjureTag.ToPlayer != null && !Player.Equals(InjureTag.ToPlayer); }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); PPlayer ToPlayer = InjureTag.ToPlayer; if (ToPlayer.TeamIndex == Player.TeamIndex) { if (ToPlayer.Money > FengLiuInjure + InjureTag.Injure && ToPlayer.Money > Player.Money) { return true; } else if (ToPlayer.Money <= InjureTag.Injure) { return true; } else if (ToPlayer.Area.EquipmentCardArea.CardNumber == 0) { return false; } } foreach (PCardType CardType in new PCardType[] { PCardType.WeaponCard, PCardType.DefensorCard, PCardType.TrafficCard }) { PCard CurrentCard = Player.GetEquipment(CardType); PCard TestCard = ToPlayer.GetEquipment(CardType); if (ToPlayer.TeamIndex == Player.TeamIndex) { if (CurrentCard == null && TestCard != null && TestCard.Model.AIInEquipExpectation(Game, Player) > TestCard.Model.AIInEquipExpectation(Game, ToPlayer)) { return true; } } else if (CurrentCard != null && TestCard != null && CurrentCard.Model.AIInEquipExpectation(Game, Player) >= TestCard.Model.AIInEquipExpectation(Game, Player) + TestCard.Model.AIInEquipExpectation(Game, ToPlayer)) { return false; } } return ToPlayer.TeamIndex != Player.TeamIndex; }, Effect = (PGame Game) => { FengLiu.AnnouceUseSkill(Player); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); PPlayer ToPlayer = InjureTag.ToPlayer; int Answer = 0; PCard TargetCard = null; if (ToPlayer.Area.EquipmentCardArea.CardNumber == 0) { Answer = 1; } else { if (ToPlayer.IsAI) { if (ToPlayer.TeamIndex == Player.TeamIndex) { if (ToPlayer.Money <= InjureTag.Injure) { Answer = 1; } else if (PAiCardExpectation.FindMostValuable(Game, Player, ToPlayer, false, true, false, true).Value > 0) { Answer = 1; } } else { int Value = FengLiuInjure * 2; if (ToPlayer.Money <= InjureTag.Injure) { Value -= FengLiuInjure; } else if (ToPlayer.Money <= InjureTag.Injure + FengLiuInjure) { Value += 30000; } foreach (PCard TestCard in ToPlayer.Area.EquipmentCardArea.CardList) { int NowValue = TestCard.Model.AIInEquipExpectation(Game, ToPlayer); int GiveValue = TestCard.Model.AIInEquipExpectation(Game, Player); int OverrideValue = 0; if (Player.GetEquipment(TestCard.Type) != null) { OverrideValue = Player.GetEquipment(TestCard.Type).Model.AIInEquipExpectation(Game, Player); } int ExtraValue = ToPlayer.General is P_HuaMulan ? 3500 : 0; if (Value > NowValue + GiveValue - OverrideValue - ExtraValue) { Value = NowValue + GiveValue - OverrideValue - ExtraValue; TargetCard = TestCard; } } if (TargetCard == null) { Answer = 1; } } } else { Answer = PNetworkManager.NetworkServer.ChooseManager.Ask(ToPlayer, FengLiu.Name, new string[] { "交给" + Player.Name + "一件装备", "受到的伤害+" + FengLiuInjure.ToString() }); } } if (Answer == 0) { Game.GiveCardTo(ToPlayer, Player, false, true, false, true); } else { InjureTag.Injure += FengLiuInjure; } } }); }) ); }
public P_PaaoChuanYinYoo() : base(CardName) { Point = 3; Index = 17; foreach (PTime Time in new PTime[] { PPeriod.FirstFreeTime.During, PPeriod.SecondFreeTime.During }) { MoveInHandTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = false, Player = Player, Time = Time, AIPriority = 140, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) && Game.Map.BlockList.Exists((PBlock Block) => Player.Equals(Block.Lord)) && (Player.Area.EquipmentCardArea.CardNumber > 0 || Player.Area.HandCardArea.CardList.Exists((PCard _Card) => Card.Type.IsEquipment())) && AIEmitTargets(Game, Player).Count > 0; }, AICondition = (PGame Game) => { if (Player.General is P_WuZhao && Player.RemainLimit(PSkillInfo.女权.Name)) { return false; } return Player.Area.HandCardArea.CardList.Exists((PCard _Card) => Card.Type.IsEquipment()) && AIInHandExpectation(Game, Player) > 2000; }, Effect = MakeNormalEffect(Player, Card, AIEmitTargets, AIEmitTargets, (PGame Game, PPlayer User, PPlayer Target) => { if (Target.HasHouse) { PBlock TargetBlock = null; if (Target.IsAI) { TargetBlock = PAiMapAnalyzer.MinValueHouse(Game, Target).Key; } else { TargetBlock = PNetworkManager.NetworkServer.ChooseManager.AskToChooseBlock(Target, "选择一座房屋以交给" + User.Name, (PBlock Block) => Target.Equals(Block.Lord) && Block.HouseNumber > 0); } if (TargetBlock != null) { Game.LoseHouse(TargetBlock, 1); TargetBlock = null; if (User.IsAI) { TargetBlock = PAiMapAnalyzer.MaxValueHouse(Game, User, true).Key; } else { TargetBlock = PNetworkManager.NetworkServer.ChooseManager.AskToChooseBlock(User, "选择一处你的土地放置房屋", (PBlock Block) => User.Equals(Block.Lord)); } if (TargetBlock != null) { Game.GetHouse(TargetBlock, 1); } } } }, (PGame Game, PPlayer User, List <PPlayer> Targets) => { PCard TargetCard = null; if (User.IsAI) { TargetCard = PMath.Min(User.Area.HandCardArea.CardList.FindAll((PCard _Card) => _Card.Type.IsEquipment()), (PCard _Card) => _Card.Model.AIInHandExpectation(Game, User)).Key; } else { do { TargetCard = PNetworkManager.NetworkServer.ChooseManager.AskToChooseOwnCard(User, CardName + "[选择一张装备牌]", true, true); } while (!TargetCard.Type.IsEquipment()); } Game.CardManager.MoveCard(TargetCard, User.Area.HandCardArea.CardList.Contains(TargetCard) ? User.Area.HandCardArea : User.Area.EquipmentCardArea, Game.CardManager.ThrownCardHeap); }) }); }); } }
public P_ChiehTaoShaJevn() : base(CardName) { Point = 1; Index = 3; foreach (PTime Time in new PTime[] { PPeriod.FirstFreeTime.During, PPeriod.SecondFreeTime.During }) { MoveInHandTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = false, Player = Player, Time = Time, AIPriority = 110, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) && Game.PlayerList.Exists((PPlayer _Player ) => !_Player.Equals(Player) && _Player.Area.EquipmentCardArea.CardNumber > 0); }, AICondition = (PGame Game) => { return AIEmitTargets(Game, Player)[0] != null; }, Effect = MakeNormalEffect(Player, Card, AIEmitTargets, (PGame Game, PPlayer _Player) => { return !_Player.Equals(Player) && _Player.Area.EquipmentCardArea.CardNumber > 0; }, (PGame Game, PPlayer User, PPlayer Target) => { int ChosenResult = -1; if (!Target.HasHouse || User.LandNumber == 0) { if (Target.Area.EquipmentCardArea.CardNumber > 0) { ChosenResult = 1; } } else if (Target.Area.EquipmentCardArea.CardNumber == 0) { ChosenResult = 0; } else { if (Target.IsAI) { ChosenResult = PAiMapAnalyzer.MaxValueHouse(Game, Target).Value > PAiCardExpectation.FindMostValuable(Game, Target, Target, false).Value ? 1 : 0; } else { ChosenResult = PNetworkManager.NetworkServer.ChooseManager.Ask(Target, CardName + "-选择一项", new string[] { "令" + User.Name + "获得你1座房屋", "令" + User.Name + "获得你1张装备" }); } } if (ChosenResult == 0) { PBlock TargetBlock = null; if (User.IsAI) { TargetBlock = PAiMapAnalyzer.MaxValueHouse(Game, Target).Key; } else { TargetBlock = PNetworkManager.NetworkServer.ChooseManager.AskToChooseBlock(User, "选择一座" + Target.Name + "的房屋", (PBlock Block) => Target.Equals(Block.Lord) && Block.HouseNumber > 0); } if (TargetBlock != null) { Game.LoseHouse(TargetBlock, 1); if (User.IsAI) { TargetBlock = PAiMapAnalyzer.MaxValueHouse(Game, User, true).Key; } else { TargetBlock = PNetworkManager.NetworkServer.ChooseManager.AskToChooseBlock(User, "选择一处你的土地放置房屋", (PBlock Block) => User.Equals(Block.Lord)); } if (TargetBlock != null) { Game.GetHouse(TargetBlock, 1); } } } else if (ChosenResult == 1) { PCard Got = Game.GetCardFrom(User, Target, false); #region 成就:老司机 if (Got.Model is P_ToouShihChi && User.Area.HandCardArea.CardList.Contains(Got)) { PArch.Announce(Game, User, "老司机"); } #endregion } }) }); }); } }
public P_WangXu() : base("王诩") { Sex = PSex.Male; Age = PAge.Classic; Index = 5; Tips = "定位:全能\n" + "难度:困难\n" + "史实:战国时期思想家、纵横家,号“鬼谷子”。\n" + "攻略:\n王诩具有两个技能,在免费武将里是一个较为难用的武将,建议对游戏有一定了解之后使用。\n【纵横】可以将牌转化成【远交近攻】,但3和6两个点数里有不少高价值的牌,如【借尸还魂】、【欲擒故纵】、【抛砖引玉】、【走为上计】等,是否将这些牌转化成显性1000收益、隐性收益视队友状况而定的【远交近攻】,需要结合场上形势进行把握。\n【隐居】提高了王诩的生存能力,但【隐居】本身是负收益技能,移出游戏的王诩失去了收取过路费的能力,还会亏一座房屋,如果每回合都使用,必定只能苟延残喘片刻。所以,【隐居】的目的地需要给自己留出几个回合较为安全的空间,让自己在【隐居】的间隙可以造成输出。\n对于新手而言,也可以选择无脑【纵横】给大神队友补牌,后期保持【隐居】牵制敌人的打法。"; PSkill ZongHeng = new PSkill("纵横") { Initiative = true }; SkillList.Add(ZongHeng .AddTimeTrigger( new PTime[] { PPeriod.FirstFreeTime.During, PPeriod.SecondFreeTime.During }, (PTime Time, PPlayer Player, PSkill Skill) => { return(new PTrigger(ZongHeng.Name) { IsLocked = false, Player = Player, Time = Time, AIPriority = 200, CanRepeat = true, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) && Player.Area.HandCardArea.CardList.Exists((PCard Card) => Card.Point % 3 == 0); }, AICondition = (PGame Game) => { return Player.Area.HandCardArea.CardList.Exists((PCard Card) => { return Card.Point % 3 == 0 && Card.Model.AIInHandExpectation(Game, Player) < 3000; }) && P_YooenChiaoChinKung.AIEmitTargets(Game, Player)[0] != null; }, Effect = (PGame Game) => { ZongHeng.AnnouceUseSkill(Player); PCard TargetCard = null; if (Player.IsAI) { TargetCard = PAiCardExpectation.FindLeastValuable(Game, Player, Player, true, false, false, true, (PCard Card) => Card.Point % 3 == 0).Key; } else { List <PCard> Waiting = Player.Area.HandCardArea.CardList.FindAll((PCard Card) => Card.Point % 3 == 0); int Result = PNetworkManager.NetworkServer.ChooseManager.Ask(Player, ZongHeng.Name, Waiting.ConvertAll((PCard Card) => Card.Name).Concat(new List <string> { "取消" }).ToArray()); if (Result >= 0 && Result < Waiting.Count) { TargetCard = Waiting[Result]; } } if (TargetCard != null) { TargetCard.Model = new P_YooenChiaoChinKung(); PTrigger Trigger = TargetCard.Model.MoveInHandTriggerList.Find((Func <PPlayer, PCard, PTrigger> TriggerGenerator) => TriggerGenerator(Player, TargetCard).Time.Equals(PPeriod.FirstFreeTime.During))?.Invoke(Player, TargetCard); if (Trigger != null) { Game.Logic.StartSettle(new PSettle("纵横[远交近攻]", Trigger.Effect)); } } } }); })); PSkill YinJu = new PSkill("隐居") { Initiative = true }; SkillList.Add(YinJu .AnnounceTurnOnce() .AddTimeTrigger( new PTime[] { PPeriod.FirstFreeTime.During, PPeriod.SecondFreeTime.During }, (PTime Time, PPlayer Player, PSkill Skill) => { return(new PTrigger(YinJu.Name) { IsLocked = false, Player = Player, Time = Time, AIPriority = 10, CanRepeat = true, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) && Player.RemainLimit(YinJu.Name) && Player.HasHouse; }, AICondition = (PGame Game) => { if (!Player.CanBeInjured) { return false; } if (Game.NowPeriod.Equals(PPeriod.FirstFreeTime)) { bool CanGo = false; PAiMapAnalyzer.NextBlocks(Game, Player).ForEach((PBlock Block) => { if (Block.Lord != null && Block.Lord.TeamIndex != Player.TeamIndex && Block.Toll >= Player.Money) { CanGo = true; } if (Block.GetMoneyStopSolid < 0 && -Block.GetMoneyStopSolid >= Player.Money) { CanGo = true; } if (Block.GetMoneyStopPercent < 0 && PMath.Percent(Player.Money, -Block.GetMoneyStopPercent) >= Player.Money) { CanGo = true; } }); return CanGo || PAiMapAnalyzer.OutOfGameExpect(Game, Player, true) - PAiMapAnalyzer.MinValueHouse(Game, Player).Value > 0; } else { return false; } }, Effect = (PGame Game) => { YinJu.AnnouceUseSkill(Player); PBlock Block = null; if (Player.IsAI) { Block = PAiMapAnalyzer.MinValueHouse(Game, Player).Key; } else { Block = PNetworkManager.NetworkServer.ChooseManager.AskToChooseBlock(Player, YinJu.Name, (PBlock _Block) => { return Player.Equals(_Block.Lord) && _Block.HouseNumber > 0; }); } if (Block != null) { Game.MovePosition(Player, Player.Position, Block); PNetworkManager.NetworkServer.TellClients(new PHighlightBlockOrder(Block.Index.ToString())); Game.LoseHouse(Block, 1); Player.Tags.CreateTag(PTag.OutOfGameTag); YinJu.DeclareUse(Player); } } }); })); }
public P_HuaMulan() : base("花木兰") { Sex = PSex.Female; Age = PAge.Renaissance; Index = 23; Cost = 20; Tips = "定位:爆发\n" + "难度:简单\n" + "史实:出自经典诗歌《木兰辞》。中国古代替父从军的女英雄。\n" + "攻略:\n花木兰是一名拥有不俗爆发能力的武将。【枭姬】的存在使得花木兰极度依赖装备牌,因此能够与唐寅、时迁等武将配合,同时也能够对这些武将形成强大的威慑力。【枭姬】往往能够提供绝地反杀的能力,或能使花木兰东山再起,因此在针对花木兰时必须注意其队伍的研究所或给牌武将,同时慎用【落凤弓】、【借刀杀人】等牌,从一定程度上来说提供了花木兰一定的防御力。【易装】是一个强大的爆发技能,不仅能与队友交换装备达成爆发,还能抢夺敌方的大量装备,形成局势逆转,因此可在一定程度上克制关羽。【易装】还可用来转换性别,从而使敌方的【百花裙】等装备失效。针对花木兰必须阻止其装备成形,因此吕蒙是一个不错的选择。"; PSkill XiaoJi = new PSkill("枭姬") { SoftLockOpen = true }; SkillList.Add(XiaoJi .AddTrigger((PPlayer Player, PSkill Skill) => { return(new PTrigger(XiaoJi.Name) { IsLocked = false, Player = Player, Time = PTime.Card.LeaveAreaTime, AIPriority = 200, Condition = (PGame Game) => { PMoveCardTag MoveCardTag = Game.TagManager.FindPeekTag <PMoveCardTag>(PMoveCardTag.TagName); return Player.Area.EquipmentCardArea.Equals(MoveCardTag.Source) && !Player.Equals(MoveCardTag.Destination.Owner); }, Effect = (PGame Game) => { XiaoJi.AnnouceUseSkill(Player); Game.GetCard(Player); Game.GetMoney(Player, 1500); } }); })); PPlayer YiZhuangTarget(PGame Game, PPlayer Player) { return(PMath.Max(Game.AlivePlayers(Player), (PPlayer TargetPlayer) => { int Profit = 0; PSex OriginalSex = Player.Sex; Player.Sex = PSex.Male; foreach (PCardType CardType in new PCardType[] { PCardType.WeaponCard, PCardType.DefensorCard, PCardType.TrafficCard }) { PCard Card = Player.GetEquipment(CardType); PCard TargetCard = TargetPlayer.GetEquipment(CardType); if (Card != null) { Profit += 2000; Profit -= Card.Model.AIInEquipExpectation(Game, Player); Profit += Card.Model.AIInEquipExpectation(Game, TargetPlayer) * (Player.TeamIndex == TargetPlayer.TeamIndex ? 1 : -1); } if (TargetCard != null) { Profit += TargetCard.Model.AIInEquipExpectation(Game, Player); Profit -= TargetCard.Model.AIInEquipExpectation(Game, TargetPlayer) * (Player.TeamIndex == TargetPlayer.TeamIndex ? 1 : -1); } } Player.Sex = OriginalSex; return Profit - 7500; }, true).Key); } PSkill YiZhuang = new PSkill("易装") { Initiative = true }; SkillList.Add(YiZhuang .AnnounceGameOnce() .AddTimeTrigger( new PTime[] { PPeriod.FirstFreeTime.During, PPeriod.SecondFreeTime.During }, (PTime Time, PPlayer Player, PSkill Skill) => { return(new PTrigger(YiZhuang.Name) { IsLocked = false, Player = Player, Time = Time, AIPriority = 280, CanRepeat = true, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) && Player.RemainLimit(YiZhuang.Name); }, AICondition = (PGame Game) => { if (Game.Teammates(Player).Exists((PPlayer _Player) => _Player.General is P_WuZhao)) { PPlayer _Player = Game.PlayerList.Find((PPlayer __Player) => __Player.General is P_WuZhao); if (_Player.RemainLimit("女权")) { return false; } else if (Player.Tags.ExistTag(P_WuZhao.NvQuanTag.Name)) { return false; } } return YiZhuangTarget(Game, Player) != null; }, Effect = (PGame Game) => { YiZhuang.AnnouceUseSkill(Player); PPlayer Target = null; if (Player.IsAI) { Target = YiZhuangTarget(Game, Player); } else { Target = PNetworkManager.NetworkServer.ChooseManager.AskForTargetPlayer(Player, PTrigger.Except(Player), YiZhuang.Name); } if (Target != null) { List <PCard> MulanEquipments = new List <PCard>(); foreach (PCard Card in Player.Area.EquipmentCardArea.CardList) { MulanEquipments.Add(Card); } List <PCard> TargetEquipements = new List <PCard>(); foreach (PCard Card in Target.Area.EquipmentCardArea.CardList) { TargetEquipements.Add(Card); } foreach (PCard Card in MulanEquipments) { Game.CardManager.MoveCard(Card, Player.Area.EquipmentCardArea, Game.CardManager.SettlingArea); } foreach (PCard Card in TargetEquipements) { Game.CardManager.MoveCard(Card, Target.Area.EquipmentCardArea, Game.CardManager.SettlingArea); } foreach (PCard Card in MulanEquipments) { Game.CardManager.MoveCard(Card, Game.CardManager.SettlingArea, Target.Area.EquipmentCardArea); } foreach (PCard Card in TargetEquipements) { Game.CardManager.MoveCard(Card, Game.CardManager.SettlingArea, Player.Area.EquipmentCardArea); } Player.Sex = PSex.Male; Player.Tags.CreateTag(new PTag(YiZhuang.Name)); YiZhuang.DeclareUse(Player); } } }); })); }