示例#1
0
 public override void OnChiefHarmed(GlobalEvent.EventRecoard aSourceEvent, ChiefBase aSource, ChiefBase aTarget, GlobalData aData, sbyte aDamage)
 {
     if (aSource != null && aData.Game.GamePlayers[aSource].HasCard)
     {
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aTarget, this));
         MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aTarget);
         if (res.YN == true && aData.Game.GamePlayers[aSource].HasCard)
         {
             aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aTarget, this, new ChiefBase[] { aSource }, new Card[] { }));
             res = aData.Game.AsynchronousCore.AskForCards(aTarget, MessageCore.AskForEnum.TargetCard, aSource);
             if (res.Cards.Count() == 0)
             {
                 if (aData.Game.GamePlayers[aSource].HasCard)
                 {
                     res = new MessageCore.AskForResult(false, aTarget, new ChiefBase[] { }, new Card[] { aData.Game.AutoSelect(aSource) }, Card.Effect.GuoHeChaiQiao, false, false, string.Empty);
                 }
                 else
                 {
                     return;
                 }
             }
             //检查牌的来源知否是正确
             if (!aData.Game.GamePlayers[aSource].HasCardsInHandOrEquipage(res.Cards))
             {
                 return;
             }
             aData.Game.AsynchronousCore.SendStealMessage(aSource, aTarget, res.Cards, aData.Game.GamePlayers);
             aData.Game.Move(aTarget, aSource, res.Cards);
         }
     }
 }
示例#2
0
        public override MessageCore.AskForResult AskFor(ChiefBase aChief, MessageCore.AskForEnum aAskFor, GlobalData aData)
        {
            if (aData.Game.Response.SkillName == SkillName && SkillStatus == SkillEnabled.Enable && aChief.ChiefStatus == ChiefBase.Status.Majesty && aAskFor == MessageCore.AskForEnum.Shan)
            {
                SwitchSkillStatus(aChief, SkillEnabled.Disable, aData);

                aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { }));
                ChiefBase t = aChief.Next;
                while (!t.IsMe(aChief))
                {
                    if (t.ChiefCamp == ChiefBase.Camp.Wei)
                    {
                        string msg = new Beaver("askfor.hujia.shan", t.ChiefName).ToString();
                        //new XElement("askfor.hujia.shan",
                        //    new XElement("target", t.ChiefName)
                        //    );
                        MessageCore.AskForResult res2 = aData.Game.AsynchronousCore.AskForCards(t, MessageCore.AskForEnum.Shan, new AskForWrapper(msg, aData.Game), aData);
                        if (res2.Effect == Card.Effect.Shan)
                        {
                            aData.Game.AsynchronousCore.SendMessage(
                                new Beaver("hujia.shan", t.ChiefName, Card.Cards2Beaver("cards", res2.Cards)).ToString());
                            //new XElement("hujia.shan",
                            //    new XElement("target", t.ChiefName),
                            //    Card.Cards2XML("cards", res2.Cards)
                            //    )
                            //);
                            return(new MessageCore.AskForResult(false, t, new ChiefBase[] { }, res2.Cards, Card.Effect.Shan, false, res2.PlayerLead, SkillName));
                        }
                    }
                    t = t.Next;
                }
            }
            return(null);
        }
示例#3
0
 public override void TakingCards(ChiefBase aChief, GlobalData aData)
 {
     aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aChief, this));
     MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aChief);
     if (res.YN)
     {
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { }));
         res = aData.Game.AsynchronousCore.AskForCardsWithCount(aChief, 0);
         if (res.Targets.Count() > 2 || res.Targets.Count() == 0)
         {
             return;
         }
         else
         {
             foreach (ChiefBase c in res.Targets)
             {
                 if (c.IsMe(aChief) || aData.Game.GamePlayers[c].Dead)
                 {
                     return;
                 }
             }
         }
         aData.TakeCardsCount = 0;
         foreach (ChiefBase c in res.Targets)
         {
             Card item = aData.Game.AutoSelect(c);
             aData.Game.AsynchronousCore.SendStealMessage(c, aChief, new Card[] { item }, aData.Game.GamePlayers);
             aData.Game.Move(c, aChief, new Card[] { item });
             //aData.Game.EventNode(false, GlobalEvent.CardFrom.Hand, SkillName, new Card[] { item }, Card.Effect.None, c, null, null);
             //aData.Game.GamePlayers[aChief].Hands.Add(item.GetOriginalCard());
         }
     }
 }
示例#4
0
 public static MessageCore.AskForResult AskFor(Card.Effect aAskFor, Card.Effect aCardEffect, ChiefBase aOwner, GlobalData aData)
 {
     switch (aCardEffect)
     {
     //八卦阵
     case  Card.Effect.BaGuaZhen:
         if (aAskFor == Card.Effect.Shan)
         {
             aData.Game.AsynchronousCore.SendMessage(
                 new Beaver("askfor.armor.effect", aOwner.ChiefName).ToString()
                 //new XElement("askfor.armor.effect",
                 //    new XElement("target" , aOwner.ChiefName ))
                 );
             MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aOwner);
             if (res.YN == true)
             {
                 Card ret = aData.Game.popJudgementCard(aOwner, Card.Effect.BaGuaZhen);
                 aData.Game.DropCards(true, GlobalEvent.CardFrom.JudgementCard, res.SkillName, new Card[] { ret }, Card.Effect.None, aOwner, null, null);
                 if (ret.CardHuaSe == Card.Suit.FangPian || ret.CardHuaSe == Card.Suit.HongTao)
                 {
                     return(new MessageCore.AskForResult(false, aOwner, new ChiefBase[0] {
                     }, new Card[] { ret }, Card.Effect.Shan, false, false, string.Empty));
                 }
                 else
                 {
                     return(new MessageCore.AskForResult(false, aOwner, new ChiefBase[0] {
                     }, new Card[] { ret }, Card.Effect.None, false, false, string.Empty));
                 }
             }
         }
         break;
     }
     return(new MessageCore.AskForResult(false, aOwner, new ChiefBase[0] {
     }, new Card[] { }, Card.Effect.None, false, false, string.Empty));
 }
示例#5
0
        /// <summary>
        /// 在游戏事件层对出牌进行调整的方法
        /// </summary>
        /// <param name="aWeaponEffect"></param>
        /// <param name="aCardsEffect"></param>
        /// <param name="aCards"></param>
        /// <param name="aData"></param>
        /// <param name="aSource"></param>
        /// <param name="aTarget"></param>
        /// <returns></returns>
        public static Card[] Lead(Card.Effect aWeaponEffect, Card.Effect aCardsEffect, Card[] aCards, GlobalData aData, ChiefBase aSource, ChiefBase aTarget)
        {
            switch (aWeaponEffect)
            {
            case Card.Effect.ZhuQueYuShan:
                if (aCardsEffect == Card.Effect.Sha && aCards.Count() == 1 && aCards[0].Element == Card.ElementType.None)
                {
                    aData.Game.AsynchronousCore.SendMessage(
                        new Beaver("askfor.weapon.effect", aSource.ChiefName).ToString());
                    //new XElement("askfor.weapon.effect",
                    //    new XElement("target" , aSource.ChiefName)
                    //    )
                    //);
                    MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aSource);
                    if (res.YN == true)
                    {
                        aCards[0].Element = Card.ElementType.Fire;
                    }
                }
                break;

            case Card.Effect.CiXiongShuangGuJian:
                if (aCardsEffect == Card.Effect.Sha && aSource != null && aTarget != null && (aSource.Sex != aTarget.Sex))
                {
                    aData.Game.AsynchronousCore.SendMessage(
                        new Beaver("askfor.weapon.effect", aSource.ChiefName).ToString());
                    //new XElement("askfor.weapon.effect",
                    //    new XElement("target", aSource.ChiefName)
                    //    )
                    //);
                    MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aSource);
                    if (res.YN == true)
                    {
                        if (aData.Game.GamePlayers[aTarget].Hands.Count != 0)
                        {
                            aData.Game.AsynchronousCore.SendMessage(
                                new Beaver("askfor.cxsgj.select", aTarget.ChiefName).ToString());
                            //new XElement("askfor.cxsgj.select",
                            //    new XElement("target", aTarget.ChiefName)
                            //    )
                            //);
                            res = aData.Game.AsynchronousCore.AskForCards(aTarget, MessageCore.AskForEnum.TargetHand, aTarget);
                            aData.Game.AsynchronousCore.LeadingValid(aTarget);
                        }
                        if (aData.Game.GamePlayers[aTarget].Hands.Count == 0 || res.Effect == Card.Effect.None)
                        {
                            aData.Game.TakeingCards(aSource, 1);
                        }
                        else
                        {
                            aData.Game.DropCards(true, GlobalEvent.CardFrom.Hand, string.Empty, res.Cards, Card.Effect.None, aTarget, aSource, null);
                            //aData.Game.RemoveHand(aTarget, res.Cards);
                        }
                    }
                }
                break;
            }
            return(aCards);
        }
示例#6
0
        public override void OnChiefHarmed(GlobalEvent.EventRecoard aSourceEvent, ChiefBase aSource, ChiefBase aTarget, GlobalData aData, sbyte aDamage)
        {
            int i = 0;

            for (i = 0; i < aDamage; i++)
            {
                aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aTarget, this));
                MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aTarget);
                if (res.YN)
                {
                    aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aTarget, this, new ChiefBase[] { }, new Card[] { }));
                    Card[] cards = aData.Game.TakeingCards(aTarget, 2);
                    aTarget.SlotsBuffer[SkillName].Cards.Clear();
                    aTarget.SlotsBuffer[SkillName].Cards.AddRange(cards);
                    int times = 0;
                    while (aTarget.SlotsBuffer[SkillName].Cards.Count > 0 && times < 2)
                    {
                        aData.Game.AsynchronousCore.SendPrivateMessageWithOpenMessage(aTarget,
                                                                                      new Beaver("askfor.yiji.cards", aTarget.ChiefName, Card.Cards2Beaver("cards", aTarget.SlotsBuffer[SkillName].Cards.ToArray())).ToString(),
                                                                                      //new XElement("askfor.yiji.cards",
                                                                                      //    new XElement("target", aTarget.ChiefName),
                                                                                      //    Card.Cards2XML("cards", aTarget.SlotsBuffer[SkillName].Cards.ToArray())
                                                                                      //    ),
                                                                                      new Beaver("askfor.yiji.cards", aTarget.ChiefName).ToString(),
                                                                                      //new XElement("askfor.yiji.cards",
                                                                                      //    new XElement("target", aTarget.ChiefName)
                                                                                      //    ),
                                                                                      aData.Game.GamePlayers);
                        res = aData.Game.AsynchronousCore.AskForCardsWithCount(aTarget, -1);
                        if (res.Targets.Count() != 1 || res.Targets[0] == aTarget || aData.Game.GamePlayers[res.Targets[0]].Dead)
                        {
                            break;
                        }
                        foreach (Card c in res.Cards)
                        {
                            if (!aTarget.SlotsBuffer[SkillName].Cards.Contains(c))
                            {
                                break;
                            }
                        }
                        aData.Game.AsynchronousCore.SendGiveMessage(aTarget, res.Targets[0], res.Cards, aData.Game.GamePlayers);
                        aData.Game.DropCards(false, GlobalEvent.CardFrom.Hand, SkillName, res.Cards, Card.Effect.None, aTarget, null, null);
                        aData.Game.GamePlayers[res.Targets[0]].Hands.AddRange(res.Cards);
                        foreach (Card c in res.Cards)
                        {
                            aTarget.SlotsBuffer[SkillName].Cards.Remove(c);
                        }
                        times++;
                    }
                    aTarget.SlotsBuffer[SkillName].Cards.Clear();
                }
                else
                {
                    break;
                }
            }
        }
示例#7
0
 public override void BeforeTurnStart(ChiefBase aChief, GlobalData aData)
 {
     aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aChief, this));
     MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aChief);
     if (res.YN)
     {
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { }));
         Active = true;
         aData.TakeCardsCount--;
     }
 }
示例#8
0
 public override void BeforeAbandonment(ChiefBase aChief, GlobalData aData)
 {
     OnLeading = false;
     if (!UseShaEffect)
     {
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aChief, this));
         MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aChief);
         if (res.YN)
         {
             aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { }));
             aData.Abandonment = false;
         }
     }
 }
示例#9
0
 public override MessageCore.AskForResult AskFor(ChiefBase aChief, MessageCore.AskForEnum aAskFor, GlobalData aData)
 {
     if (aData.Game.Response.SkillName == SkillName)
     {
         if (SkillStatus == SkillEnabled.Enable && aData.Game.GamePlayers[aChief].HasHand)
         {
             SwitchSkillStatus(aChief, SkillEnabled.Disable, aData);
             aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, Player.Players2Chiefs(aData.Game.Response.Targets), new Card[] { }));
             ChiefBase target = aData.Game.Response.Targets[0].Chief;
             aData.Game.AsynchronousCore.SendMessage(new Beaver("askfor.fanjian.suit", target.ChiefName).ToString()); // new XElement("askfor.fanjian.suit", new XElement("target", target.ChiefName)));
             MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForCards(target, MessageCore.AskForEnum.Suit, target);
             if (res.Cards.Count() == 0)
             {
                 aData.Game.AsynchronousCore.SendMessage(new Beaver("fanjian.suit", target.ChiefName, Card.Cards2Beaver("cards", new Card[] { CardHeap.HeiTao })).ToString()); // new XElement("fanjian.suit", new XElement("target", target.ChiefName), Card.Cards2XML("cards", new Card[] { CardHeap.HeiTao })));
             }
             else
             {
                 aData.Game.AsynchronousCore.SendMessage(new Beaver("fanjian.suit", target.ChiefName, Card.Cards2Beaver("cards", res.Cards)).ToString());   // new XElement("fanjian.suit", new XElement("target", target.ChiefName), Card.Cards2XML("cards", res.Cards)));
             }
             System.Threading.Thread.Sleep(10);
             aData.Game.AsynchronousCore.SendMessage(new Beaver("askfor.fanjian.card", target.ChiefName, aChief.ChiefName).ToString()); //  new XElement("askfor.fanjian.card", new XElement("target", target.ChiefName), new XElement("target2", aChief)));
             MessageCore.AskForResult res2 = aData.Game.AsynchronousCore.AskForCards(target, MessageCore.AskForEnum.TargetCard, aChief);
             Card c = aData.Game.AutoSelect(aChief);
             aData.Game.AsynchronousCore.SendMessage(new Beaver("fanjian.card", target.ChiefName, aChief.ChiefName, Card.Cards2Beaver("cards", new Card[] { c })).ToString()); // new XElement("fanjian.card", new XElement("target", target.ChiefName), new XElement("target2", aChief.ChiefName), Card.Cards2XML("cards", new Card[] { c })));
             if (c.CardHuaSe != res.Cards[0].CardHuaSe)
             {
                 aData.Game.DamageHealth(target, 1, aChief, new GlobalEvent.EventRecoard(aChief, target, new Card[] { }, Card.Effect.Skill, SkillName));
             }
             if (!aData.Game.GamePlayers[target].Dead)
             {
                 if (aData.Game.GamePlayers[aChief].HasCardsInHand(new Card[] { c }))
                 {
                     aData.Game.AsynchronousCore.SendGiveMessage(aChief, target, new Card[] { c }, aData.Game.GamePlayers);
                     aData.Game.Move(aChief, target, new Card[] { c });
                 }
                 else if (aData.Game.HasCardsInBin(new Card[] { c }))
                 {
                     if (aData.Game.PickRubbish(new Card[] { c }))
                     {
                         aData.Game.AsynchronousCore.SendPickMessage(target, new Card[] { c });
                         aData.Game.GamePlayers[aChief].Hands.Add(c.GetOriginalCard());
                     }
                 }
             }
             return(new MessageCore.AskForResult(false, aChief, new ChiefBase[] { }, new Card[] { }, Card.Effect.Skill, false, false, SkillName));
         }
     }
     return(null);
 }
示例#10
0
        public override void BeforeTurnStart(ChiefBase aChief, GlobalData aData)
        {
            Card c = null;

            do
            {
                aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aChief, this));
                MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aChief);
                if (res.YN)
                {
                    aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { }));
                    c = aData.Game.popJudgementCard(aChief, Card.Effect.LuoShen);
                    aData.Game.DropCards(true, GlobalEvent.CardFrom.JudgementCard, res.SkillName, new Card[] { c }, Card.Effect.None, aChief, null, null);
                }
            } while (c != null && (c.CardHuaSe == Card.Suit.HeiTao || c.CardHuaSe == Card.Suit.CaoHua));
        }
示例#11
0
 public override int CalcAskforTimes(ChiefBase aChief, ChiefBase aTarget, Card.Effect aEffect, int aOldTimes, GlobalData aData)
 {
     if (aEffect == Card.Effect.Sha)
     {
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aChief, this));
         MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aChief);
         if (res.YN)
         {
             aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { }));
             Card c = aData.Game.popJudgementCard(aChief, Card.Effect.TieQi);
             aData.Game.DropCards(true, GlobalEvent.CardFrom.JudgementCard, SkillName, new Card[] { c }, Card.Effect.TieQi, aChief, null, null);
             if (c.CardHuaSe == Card.Suit.HongTao || c.CardHuaSe == Card.Suit.FangPian)
             {
                 return(0);
             }
         }
     }
     return(aOldTimes);
 }
示例#12
0
 public override void OnChiefHarmed(GlobalEvent.EventRecoard aSourceEvent, ChiefBase aSource, ChiefBase aTarget, GlobalData aData, sbyte aDamage)
 {
     //不能有牌存在,且伤害事件的牌在垃圾桶中
     if (aSourceEvent.Cards.Count() != 0 && aData.Game.HasCardsInBin(aSourceEvent.Cards))
     {
         //问询是否发动技能
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aTarget, this));
         MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aTarget);
         if (res.YN == true && aData.Game.HasCardsInBin(aSourceEvent.Cards))
         {
             aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aTarget, this, new ChiefBase[] { }, aSourceEvent.Cards));
             aData.Game.PickRubbish(aSourceEvent.Cards);
             foreach (Card c in aSourceEvent.Cards)
             {
                 aData.Game.GamePlayers[aTarget].Hands.Add(c.GetOriginalCard());
             }
         }
     }
 }
示例#13
0
 public override Card OnChiefJudgementCardShow_Turn(ChiefBase aJudgeChief, Card aJudgementCard, ChiefBase aThisChief, GlobalData aData)
 {
     if (aData.Game.GamePlayers[aThisChief].HasHand)
     {
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aThisChief, this));
         MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForCards(aThisChief, MessageCore.AskForEnum.TargetHand, aThisChief);
         if (res.Cards.Count() == 1)
         {
             //旧的判定牌删去
             aData.Game.DropCards(true, GlobalEvent.CardFrom.None, res.SkillName, new Card[] { aJudgementCard }, Card.Effect.None, aJudgeChief, null, null);
             //将自己的这张手牌除去
             aData.Game.DropCards(false, GlobalEvent.CardFrom.Hand, res.SkillName, res.Cards, Card.Effect.None, aThisChief, null, null);
             //触发技能的消息
             aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aThisChief, this, new ChiefBase[] { aJudgeChief }, res.Cards));
             //返回新的判定牌
             return(res.Cards[0]);
         }
     }
     return(aJudgementCard);
 }
示例#14
0
        public override MessageCore.AskForResult AskFor(ChiefBase aChief, MessageCore.AskForEnum aAskFor, GlobalData aData)
        {
            if (aData.Game.Response.SkillName == SkillName && aChief.ChiefStatus == ChiefBase.Status.Majesty && (aAskFor == MessageCore.AskForEnum.Sha || aAskFor == MessageCore.AskForEnum.Aggressive) && SkillStatus == SkillEnabled.Enable)
            {
                SwitchSkillStatus(aChief, SkillEnabled.Disable, aData);
                ChiefBase[] targets = Player.Players2Chiefs(aData.Game.Response.Targets);
                aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, targets, new Card[] { }));
                ChiefBase t = aChief.Next;

                while (!t.IsMe(aChief))
                {
                    if (t.ChiefCamp == ChiefBase.Camp.Shu)
                    {
                        string msg = new Beaver("askfor.jijiang.sha", t.ChiefName).ToString();
                        new XElement("askfor.jijiang.sha",
                                     new XElement("target", t.ChiefName)
                                     );
                        MessageCore.AskForResult res2 = aData.Game.AsynchronousCore.AskForCards(t, MessageCore.AskForEnum.Sha, new AskForWrapper(msg, aData.Game), aData);
                        if (res2.Effect == Card.Effect.Sha)
                        {
                            aData.Game.AsynchronousCore.SendMessage(
                                new Beaver("jijiang.sha", t.ChiefName, Card.Cards2Beaver("cards", res2.Cards), res2.SkillName).ToString());
                            //new XElement("jijiang.sha",
                            //    new XElement("target", t.ChiefName),
                            //    Card.Cards2XML("cards", res2.Cards),
                            //    new XElement("skill" , res2.SkillName)
                            //    )
                            //);
                            if (res2.PlayerLead)
                            {
                                aData.Game.DropCards(true, GlobalEvent.CardFrom.Hand, string.Empty, res2.Cards, Card.Effect.Sha, t, null, null);
                            }
                            return(new MessageCore.AskForResult(false, aChief, targets, res2.Cards, Card.Effect.Sha, false, false, SkillName));
                        }
                    }
                    t = t.Next;
                }
            }
            return(null);
        }
示例#15
0
        /// <summary>
        /// 对方对杀出闪时候的处理方法
        /// </summary>
        /// <param name="aWeaponEffect"></param>
        /// <param name="aSource"></param>
        /// <param name="aTarget"></param>
        /// <param name="aData"></param>
        /// <param name="aShaEvent"></param>
        /// <returns></returns>
        public static bool TargetShan(Card.Effect aWeaponEffect, ChiefBase aSource, ChiefBase aTarget, GlobalData aData, GlobalEvent.EventRecoard aShaEvent)
        {
            string msg = null;

            MessageCore.AskForResult res = null;
            switch (aWeaponEffect)
            {
            case Card.Effect.GuanShiFu:
                msg = new Beaver("askfor.gsf.cards", aSource.ChiefName).ToString();
                //new XElement("askfor.gsf.cards",
                //    new XElement("target", aSource.ChiefName)
                //    );
                res = aData.Game.AsynchronousCore.AskForCards(aSource, MessageCore.AskForEnum.TargetTwoCardsWithoutWeaponAndJudgement, new AskForWrapper(msg, aData.Game), aData);
                aData.Game.AsynchronousCore.LeadingValid(aSource);
                if (res.Effect != Card.Effect.None)
                {
                    aData.Game.DropCards(true, GlobalEvent.CardFrom.HandAndEquipage, res.SkillName, res.Cards, Card.Effect.None, aSource, aTarget, null);
                    return(true);
                }
                break;

            case Card.Effect.QingLongYanYueDao:
                msg = new Beaver("askfor.qlyy.sha", aSource.ChiefName).ToString();
                //new XElement("askfor.qlyy.sha",
                //    new XElement("target", aSource.ChiefName)
                //    );
                res = aData.Game.AsynchronousCore.AskForCards(aSource, MessageCore.AskForEnum.Sha, new AskForWrapper(msg, aData.Game), aData);
                aData.Game.AsynchronousCore.LeadingValid(aSource);
                if (res.Effect == Card.Effect.Sha)
                {
                    aData.Game.DropCards(true, GlobalEvent.CardFrom.Hand, res.SkillName, res.Cards, Card.Effect.Sha, aSource, aTarget, null);
                    aData.Game.ShaProc(aData.Game.lstRecoard[aData.Game.lstRecoard.Count - 1]);
                }
                break;
            }
            return(false);
        }
示例#16
0
        public override void OnChiefHarmed(GlobalEvent.EventRecoard aSourceEvent, ChiefBase aSource, ChiefBase aTarget, GlobalData aData, sbyte aDamage)
        {
            if (aSource != null)
            {
                aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aTarget, this));
                MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aTarget);
                if (res.YN == true)
                {
                    aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aTarget, this, new ChiefBase[] { aSource }, new Card[] { }));
                    Card judgement = aData.Game.popJudgementCard(aTarget, Card.Effect.GangLie);
                    aData.Game.DropCards(true, GlobalEvent.CardFrom.JudgementCard, res.SkillName, new Card[] { judgement }, Card.Effect.GangLie, aTarget, aSource, null);

                    if (judgement.CardHuaSe != Card.Suit.HongTao)
                    {
                        if (aData.Game.GamePlayers[aSource].Hands.Count < 2)
                        {
                            aData.Game.DamageHealth(aSource, 1, aTarget, new GlobalEvent.EventRecoard(aTarget, aSource, new Card[] { }, Card.Effect.None, res.SkillName));
                        }
                        else
                        {
                            aData.Game.AsynchronousCore.SendMessage(new Beaver("askfor.ganglie.cards", aTarget.ChiefName, aSource.ChiefName).ToString());  // new XElement("askfor.ganglie.cards", new XElement("target", aTarget.ChiefName), new XElement("target2", aSource.ChiefName)));
                            res = aData.Game.AsynchronousCore.AskForCardsWithCount(aSource, 2);
                            if (res.Cards.Count() != 2)
                            {
                                aData.Game.DamageHealth(aSource, 1, aTarget, new GlobalEvent.EventRecoard(aTarget, aSource, new Card[] { }, Card.Effect.None, res.SkillName));
                            }
                            else
                            {
                                aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeDropMessage(aSource, aSource, res.Cards));
                                aData.Game.DropCards(true, GlobalEvent.CardFrom.Hand, res.SkillName, res.Cards, Card.Effect.None, aSource, null, null);
                            }
                        }
                    }
                }
            }
        }
示例#17
0
 public override void PreprocessingSubEvent(ChiefBase aTargetChief, ref GlobalEvent.EventRecoard aEvent, GlobalData aData)
 {
     if (aEvent.Effect == Card.Effect.Sha)
     {
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aTargetChief, this));
         MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aTargetChief);
         if (res.YN)
         {
             aData.Game.AsynchronousCore.SendMessage(new Beaver("askfor.liuli.args", aTargetChief.ChiefName).ToString()); // new XElement("askfor.liuli.args", new XElement("target", aTargetChief.ChiefName)));
             res = aData.Game.AsynchronousCore.AskForCards(aTargetChief, MessageCore.AskForEnum.TargetHand, aTargetChief);
             if (res.Targets.Count() != 1)
             {
                 return;
             }
             if (res.Targets[0] == aTargetChief)
             {
                 return;
             }
             if (res.Targets[0] == aEvent.Source)
             {
                 return;
             }
             if (aData.Game.GamePlayers[res.Targets[0]].Dead)
             {
                 return;
             }
             if (!aData.Game.WithinShaRange(aTargetChief, res.Targets[0]))
             {
                 return;
             }
             aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aTargetChief, this, res.Targets, res.Cards));
             aData.Game.DropCards(true, GlobalEvent.CardFrom.Hand, SkillName, aData.Game.Response.Cards, Card.Effect.Skill, aTargetChief, null, null);
             aEvent.Target = res.Targets[0];
         }
     }
 }
示例#18
0
        /// <summary>
        /// 是否允许执行伤害
        /// </summary>
        /// <param name="aWeaponEffect">务求效果</param>
        /// <param name="aSource">伤害来源</param>
        /// <param name="aTarget">伤害目标</param>
        /// <param name="aData">游戏数据</param>
        /// <returns>返回是表示允许伤害(默认),返回false系统将不执行伤害</returns>
        public static bool EnableShaDamage(Card.Effect aWeaponEffect, ChiefBase aSource, ChiefBase aTarget, GlobalData aData)
        {
            bool ret = true;

            if (aSource != null && aTarget != null)
            {
                switch (aWeaponEffect)
                {
                case Card.Effect.HanBingJian:
                    if (aData.Game.GamePlayers[aTarget].HasCard)
                    {
                        aData.Game.AsynchronousCore.SendMessage(
                            new Beaver("askfor.hbj.select", aSource.ChiefName, aTarget.ChiefName).ToString());
                        //new XElement("askfor.hbj.select",
                        //    new XElement("target", aSource.ChiefName),
                        //    new XElement("target2" , aTarget.ChiefName)
                        //    )
                        //);
                        MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForCards(aSource, MessageCore.AskForEnum.TargetCard, aTarget);
                        if (res.Effect != Card.Effect.None)
                        {
                            ret = false;
                            aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeDropMessage(aSource, aTarget, res.Cards));
                            //new XElement("drop",
                            //    new XElement("from", aSource.ChiefName),
                            //    new XElement("to", aTarget.ChiefName),
                            //    Card.Cards2XML("cards", res.Cards)
                            //    )
                            //);
                            aData.Game.DropCards(false, GlobalEvent.CardFrom.HandAndEquipage, string.Empty, res.Cards, Card.Effect.None, aTarget, aSource, null);
                            aData.Game.GamePlayers[aSource].Hands.AddRange(res.Cards);
                            if (aData.Game.GamePlayers[aTarget].HasCard)
                            {
                                res = aData.Game.AsynchronousCore.AskForCards(aSource, MessageCore.AskForEnum.TargetCard, aTarget);
                                if (res.Effect == Card.Effect.None)
                                {
                                    res = new MessageCore.AskForResult(false, null, new ChiefBase[] { }, new Card[] { aData.Game.AutoSelect(aTarget) }, Card.Effect.GuoHeChaiQiao, false, true, string.Empty);
                                }
                                aData.Game.AsynchronousCore.SendMessage(
                                    MessageCore.MakeDropMessage(aSource, aTarget, res.Cards));
                                //new XElement("drop",
                                //    new XElement("from", aSource.ChiefName),
                                //    new XElement("to", aTarget.ChiefName),
                                //    Card.Cards2XML("cards", res.Cards)
                                //    )
                                //);
                                aData.Game.DropCards(false, GlobalEvent.CardFrom.HandAndEquipage, string.Empty, res.Cards, Card.Effect.None, aTarget, aSource, null);
                                aData.Game.GamePlayers[aSource].Hands.AddRange(res.Cards);
                            }
                        }
                    }
                    break;

                case Card.Effect.QiLinGong:
                    if (aData.Game.GamePlayers[aTarget].Jia1Ma != null || aData.Game.GamePlayers[aTarget].Jian1Ma != null)
                    {
                        aData.Game.AsynchronousCore.SendMessage(new Beaver("askfor.qlg.select", aSource.ChiefName, aTarget.ChiefName).ToString());
                        //new XElement("askfor.qlg.select" ,
                        //    new XElement("target", aSource.ChiefName),
                        //    new XElement("target2" , aTarget.ChiefName )
                        //    )
                        //);
                        MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForCards(aSource, MessageCore.AskForEnum.TargetHorse, aTarget);
                        if (res.Effect != Card.Effect.None)
                        {
                            aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeDropMessage(aSource, aTarget, res.Cards));
                            //new XElement("drop",
                            //    new XElement("from", aSource.ChiefName),
                            //    new XElement("to", aTarget.ChiefName),
                            //    Card.Cards2XML("cards", res.Cards)
                            //    )
                            //);
                            aData.Game.DropCards(false, GlobalEvent.CardFrom.Equipage, string.Empty, res.Cards, Card.Effect.None, aTarget, aSource, null);
                            aData.Game.GamePlayers[aSource].Hands.AddRange(res.Cards);
                        }
                    }
                    break;
                }
            }
            return(ret);
        }
示例#19
0
        public override void BeforeTurnStart(ChiefBase aChief, GlobalData aData)
        {
            aChief.SlotsBuffer[Top].Cards.Clear();
            aChief.SlotsBuffer[Bottom].Cards.Clear();
            aChief.SlotsBuffer[Total].Cards.Clear();
            aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aChief, this));
            MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aChief);
            if (res.YN)
            {
                int alive = aData.Game.GamePlayers.PeoplealiveCount;
                alive = alive > 5 ? 5 : alive;
                Card[] cards = aData.Game.CardsHeap.Pop(alive);
                aChief.SlotsBuffer[Total].Cards.AddRange(cards);
                aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { }));
                aData.Game.AsynchronousCore.SendPrivateMessageWithOpenMessage(aChief,
                                                                              new Beaver("askfor.guanxing.cards", aChief.ChiefName, Card.Cards2Beaver("cards", cards)).ToString().ToString(),
                                                                              new Beaver("askfor.guanxing.cards", aChief.ChiefName).ToString(),
                                                                              aData.Game.GamePlayers);
                //new XElement("askfor.guanxing.cards", new XElement("target", aChief.ChiefName), Card.Cards2XML("cards", cards)),
                //new XElement("askfor.guanxing.cards", new XElement("target", aChief.ChiefName)),
                //aData.Game.GamePlayers
                //);
                res = aData.Game.AsynchronousCore.AskForCards(aChief, MessageCore.AskForEnum.SlotCards, aChief);
                List <Card> target = aChief.SlotsBuffer[Top].Cards;
                foreach (Card c in  res.Cards)
                {
                    if (!cards.Contains(c))
                    {
                        if (c.ID == 0)
                        {
                            target = aChief.SlotsBuffer[Bottom].Cards;
                        }
                        else
                        {
                            aChief.SlotsBuffer[Top].Cards.Clear();
                            aChief.SlotsBuffer[Bottom].Cards.AddRange(cards);
                            break;
                        }
                    }
                    else
                    {
                        target.Add(c);
                    }
                }
                if ((aChief.SlotsBuffer[Top].Cards.Count + aChief.SlotsBuffer[Bottom].Cards.Count) != cards.Count())
                {
                    aChief.SlotsBuffer[Top].Cards.Clear();
                    aChief.SlotsBuffer[Bottom].Cards.AddRange(cards);
                }

                aData.Game.AsynchronousCore.SendMessage(
                    new Beaver("guanxing.info", aChief.SlotsBuffer[Top].Cards.Count.ToString(), aChief.SlotsBuffer[Bottom].Cards.Count.ToString()).ToString());
                //new XElement("guanxing.info",
                //    new XElement("up", aChief.SlotsBuffer[Top].Cards.Count),
                //    new XElement("down", aChief.SlotsBuffer[Bottom].Cards.Count)
                //    )
                //    );
                aData.Game.CardsHeap.PutOnTop(aChief.SlotsBuffer[Top].Cards.ToArray());
                aData.Game.CardsHeap.PutOnBottom(aChief.SlotsBuffer[Bottom].Cards.ToArray());
                aChief.SlotsBuffer[Top].Cards.Clear();
                aChief.SlotsBuffer[Bottom].Cards.Clear();
                aChief.SlotsBuffer[Total].Cards.Clear();
            }
        }