Пример #1
0
        /// <summary>
        /// 安置乐不思蜀的过程
        /// </summary>
        /// <param name="r">子事件的起始节点</param>
        /// <returns></returns>
        private EventRecoard LeBuSiShuProc(EventRecoard r)
        {
            //玩家不能是自己并且对方不能死亡
            if (r.Target != r.Source && !GamePlayers[r.Target].Dead)
            {
                //对方不能有乐不思蜀的buff
                if (!GamePlayers[r.Target].HasDebuff(Card.Effect.LeBuSiShu))
                {
                    //把乐不思蜀从垃圾桶中拿出来
                    PickRubbish(r.Cards);
                    //把乐不思蜀加入到对方的buff列表中
                    GamePlayers[r.Target].Debuff.Push(r.Cards[0]);

                    AsynchronousCore.SendMessage(
                        new Beaver("lbss", r.Source.ChiefName, r.Target.ChiefName, r.SkillName, Card.Cards2Beaver("cards", r.Cards)).ToString());
                    //new XElement("lbss",
                    //    new XElement("from", r.Source.ChiefName),
                    //    new XElement("to", r.Target.ChiefName),
                    //    new XElement("skill", r.SkillName),
                    //    Card.Cards2XML("cards", r.Cards)
                    //    )
                    //);
                }
            }
            return(r);
        }
Пример #2
0
 private EventRecoard WeaponProc(EventRecoard r)
 {
     if (!GamePlayers[r.Source].Dead)
     {
         PickRubbish(r.Cards);
         DropCards(false, CardFrom.None, r.SkillName, r.Cards, r.Cards[0].CardEffect, r.Source, r.Target, null);
         GamePlayers[r.Source].LoadWeapon(r.Cards[0], this, gData);
     }
     return(r);
 }
Пример #3
0
 /// <summary>
 /// 借刀杀人的过程
 /// </summary>
 /// <param name="r">子事件的起始节点</param>
 /// <returns></returns>
 private EventRecoard JieDaoShaRenProc(EventRecoard r)
 {
     //玩家自己和两个目标不能死亡,目标不能没有武器
     if (!GamePlayers[r.Source].Dead && !GamePlayers[r.Target].Dead && !GamePlayers[r.Target2].Dead && GamePlayers[r.Target].Weapon != null)
     {
         //无懈可击
         if (WuXieProc(r.Target, Card.Effect.JieDaoShaRen))
         {
             return(r);
         }
         string msg = new Beaver("askfor.jdsr.sha", r.Target.ChiefName, r.Target2.ChiefName, r.Source.ChiefName).ToString();
         //new XElement("askfor.jdsr.sha",
         //    new XElement("target", r.Target.ChiefName),
         //    new XElement("target2", r.Target2.ChiefName),
         //    new XElement("source", r.Source.ChiefName)
         //);
         //向目标问询杀
         MessageCore.AskForResult res = AsynchronousCore.AskForCards(r.Target, MessageCore.AskForEnum.Sha, new AskForWrapper(msg, this), gData);
         ValidityResult(r.Target, ref res);
         if (res.Effect == Card.Effect.None)
         {
             //获得对方的武器对象
             Card weapon = GamePlayers[r.Target].Weapon;
             Move(r.Target, r.Source, new Card[] { weapon });
             //玩家得到武器牌
             AsynchronousCore.SendMessage(MessageCore.MakeStealMessage(r.Target, r.Source, new Card[] { weapon }));
             //new XElement("steal",
             //    new XElement("from", r.Target.ChiefName),
             //    new XElement("to", r.Source.ChiefName),
             //    Card.Cards2XML("cards", new Card[] { weapon })
             //    )
             //);
         }
         else if (res.Effect == Card.Effect.Sha)
         {
             AsynchronousCore.SendMessage(
                 new Beaver("sha", r.Target.ChiefName, ChiefBase.Chiefs2Beaver("to", new ChiefBase[] { r.Target2 }), res.SkillName, Card.Cards2Beaver("cards", res.Cards)).ToString());
             //new XElement("sha",
             //    new XElement("from", r.Target.ChiefName),
             //    ChiefBase.Chiefs2XML("to", new ChiefBase[] { r.Target2 }),
             //    new XElement("skill", res.SkillName),
             //    Card.Cards2XML("cards", res.Cards)
             //    )
             //    );
             //再此子事件上创建杀的子事件
             DropCards(true, CardFrom.Hand, string.Empty, res.Cards, Card.Effect.Sha, r.Target, r.Target2, null);
             //执行杀的子事件
             ShaProc(lstRecoard.Last());// lstRecoard.ElementAt(lstRecoard.Count - 1)
         }
     }
     return(r);
 }
Пример #4
0
        /// <summary>
        /// 南蛮入侵的过程
        /// </summary>
        /// <param name="r">子事件的起始节点</param>
        /// <returns></returns>
        private EventRecoard NanManRuQinProc(EventRecoard r)
        {
            //对方不能死亡
            if (!GamePlayers[r.Target].Dead)
            {
                //无懈可击的执行过程
                if (WuXieProc(r.Target, Card.Effect.NanManRuQin))
                {
                    return(r);
                }

                if (GamePlayers[r.Target].Armor == null || Armor.EnableFor(GamePlayers[r.Target].Armor.CardEffect, r.Cards, Card.Effect.NanManRuQin, r.Target))
                {
                    string msg = new Beaver("askfor.nmrq.sha", r.Target.ChiefName, r.Source.ChiefName).ToString();
                    //new XElement("askfor.nmrq.sha",
                    //    new XElement("target", r.Target.ChiefName),
                    //    new XElement("source", r.Source.ChiefName)
                    //);
                    //问询杀
                    MessageCore.AskForResult resSha = AsynchronousCore.AskForCards(r.Target, MessageCore.AskForEnum.Sha, new AskForWrapper(msg, this), gData);
                    ValidityResult(r.Target, ref resSha);
                    if (resSha.Effect == Card.Effect.Sha)
                    {
                        //将杀放入子事件节点
                        if (resSha.PlayerLead)
                        {
                            DropCards(true, CardFrom.Hand, resSha.SkillName, resSha.Cards, Card.Effect.None, resSha.Leader, r.Source, null);
                            foreach (ASkill s in resSha.Leader.Skills)
                            {
                                s.OnUseEffect(resSha.Leader, Card.Effect.Sha, gData);
                            }
                            AsynchronousCore.SendMessage(
                                new Beaver("nmrq.sha", r.Target.ChiefName, r.Source.ChiefName, resSha.SkillName, Card.Cards2Beaver("cards", resSha.Cards)).ToString());
                            //        new XElement("nmrq.sha",
                            //            new XElement("target", r.Target.ChiefName),
                            //            new XElement("source", r.Source.ChiefName),
                            //            new XElement("skill", resSha.SkillName),
                            //            Card.Cards2XML("cards", resSha.Cards)
                            //        ));
                        }
                    }
                    else
                    {
                        //没有杀,费血
                        DamageHealth(r.Target, 1, r.Source, r);
                    }
                }
            }
            return(r);
        }
Пример #5
0
 /// <summary>
 /// 桃园结义的过程
 /// </summary>
 /// <param name="r">子事件的起始节点</param>
 /// <returns></returns>
 private EventRecoard TaoYuanJieYi(EventRecoard r)
 {
     //玩家不能死亡,并且血没有满
     if (!GamePlayers[r.Target].Dead && GamePlayers[r.Target].Health != GamePlayers[r.Target].MaxHealth)
     {
         //进入无懈可击的过程
         if (WuXieProc(r.Target, Card.Effect.TaoYuanJieYi))
         {
             return(r);
         }
         //玩家血量增加
         RegainHealth(r.Target, 1);
     }
     return(r);
 }
Пример #6
0
        /// <summary>
        /// 顺手牵羊的过程
        /// </summary>
        /// <param name="r">子事件的起始节点</param>
        /// <returns></returns>
        private EventRecoard ShunShouQianYangProc(EventRecoard r)
        {
            //玩家自己和对方不能死亡,并且对方有牌
            if (!GamePlayers[r.Source].Dead && !GamePlayers[r.Target].Dead && GamePlayers[r.Target].HasCardWithJudgementArea)
            {
                //无懈可击的过程
                if (WuXieProc(r.Target, Card.Effect.ShunShouQianYang))
                {
                    return(r);
                }
                AsynchronousCore.SendMessage(
                    new Beaver("askfor.ssqy.select", r.Source.ChiefName, r.Target.ChiefName).ToString());
                //new XElement("askfor.ssqy.select",
                //    new XElement("target", r.Source.ChiefName),
                //    new XElement("target2", r.Target.ChiefName)
                //));
                //问询玩家选择对方一张牌
                MessageCore.AskForResult res = AsynchronousCore.AskForCards(r.Source, MessageCore.AskForEnum.TargetCardWithJudgementArea, r.Target);
                //如果没有选那就自动抽一张
                if (res.Effect == Card.Effect.None || res.Cards.Count() != 1)
                {
                    Card auto = AutoSelect(r.Target);
                    if (auto == null)
                    {
                        res = new MessageCore.AskForResult(false, res.Leader, res.Targets, new Card[0] {
                        }, Card.Effect.ShunShouQianYang, false, true, string.Empty);
                    }
                    else
                    {
                        res = new MessageCore.AskForResult(false, res.Leader, res.Targets, new Card[] { auto }, Card.Effect.ShunShouQianYang, false, true, string.Empty);
                    }
                }

                if (res.Cards.Count() != 0)
                {
                    Move(r.Target, r.Source, res.Cards);
                    ////把牌给玩家
                    //foreach (Card c in res.Cards)
                    //{
                    //    AsynchronousCore.SendStealMessage(r.Target, r.Source, new Card[] { c }, GamePlayers);
                    //    GamePlayers[r.Source].Hands.Add(c.GetOriginalCard());
                    //}
                    ////增加节点:顺手牵羊选择的牌
                    //EventNode(false, CardFrom.HandAndEquipageAndJudgement, res.SkillName, res.Cards, Card.Effect.None, r.Target, r.Source, null);
                }
            }
            return(r);
        }
Пример #7
0
 /// <summary>
 /// 无中生有的过程
 /// </summary>
 /// <param name="r">子事件的起始节点</param>
 /// <returns></returns>
 private EventRecoard WuZhongShengYouProc(EventRecoard r)
 {
     //玩家不能死亡
     if (!GamePlayers[r.Source].Dead)
     {
         //进入无懈可击的过程
         if (WuXieProc(r.Target, Card.Effect.WuZhongShengYou))
         {
             return(r);
         }
         //从牌堆拿出来两张牌
         Card[] ret = TakeingCards(r.Source, 2);
         //加入到子事件中
         DropCards(false, CardFrom.None, r.SkillName, ret, Card.Effect.None, r.Source, r.Source, null);
     }
     return(r);
 }
Пример #8
0
        private EventRecoard HorseProc(EventRecoard r)
        {
            if (!GamePlayers[r.Source].Dead && r.Cards.Count() == 1)
            {
                PickRubbish(r.Cards);
                DropCards(false, CardFrom.None, r.SkillName, r.Cards, r.Cards[0].CardEffect, r.Source, r.Source, null);
                switch (r.Effect)
                {
                case Card.Effect.Jia1:
                    GamePlayers[r.Source].Jia1Ma = r.Cards[0];
                    break;

                case Card.Effect.Jian1:
                    GamePlayers[r.Source].Jian1Ma = r.Cards[0];
                    break;
                }
            }
            return(r);
        }
Пример #9
0
        /// <summary>
        /// 过河拆桥的过程
        /// </summary>
        /// <param name="r">子事件的起始节点</param>
        /// <returns></returns>
        private EventRecoard GuoHeChaiQiaoProc(EventRecoard r)
        {
            //双方不能有任何一方,并且对方有牌可以选择死亡
            if (!GamePlayers[r.Source].Dead && !GamePlayers[r.Target].Dead && GamePlayers[r.Target].HasCardWithJudgementArea)
            {
                //进入无懈可击的过程
                if (WuXieProc(r.Target, Card.Effect.GuoHeChaiQiao))
                {
                    return(r);
                }
                AsynchronousCore.SendMessage(
                    new Beaver("askfor.ghcq.select", r.Source.ChiefName, r.Target.ChiefName).ToString());
                //new XElement("askfor.ghcq.select",
                //    new XElement("target", r.Source.ChiefName),
                //    new XElement("target2", r.Target.ChiefName)
                //));
                //问询玩家选择对方一张牌
                MessageCore.AskForResult res = AsynchronousCore.AskForCards(r.Source, MessageCore.AskForEnum.TargetCardWithJudgementArea, r.Target);
                //如果没有选择那就系统选择一张牌
                if (res.Effect == Card.Effect.None)
                {
                    Card auto = AutoSelect(r.Target);
                    if (auto == null)
                    {
                        res = new MessageCore.AskForResult(false, res.Leader, res.Targets, new Card[0] {
                        }, Card.Effect.GuoHeChaiQiao, false, true, string.Empty);
                    }
                    else
                    {
                        res = new MessageCore.AskForResult(false, res.Leader, res.Targets, new Card[] { auto }, Card.Effect.GuoHeChaiQiao, false, true, string.Empty);
                    }
                }

                if (res.Cards.Count() != 0)
                {
                    //将对方的这张牌加入到子事件节点上并弃置到垃圾桶中
                    DropCards(true, CardFrom.HandAndEquipageAndJudgement, res.SkillName, res.Cards, Card.Effect.None, r.Target, r.Source, null);
                    AsynchronousCore.SendMessage(MessageCore.MakeDropMessage(r.Source, r.Target, res.Cards));
                }
            }
            return(r);
        }
Пример #10
0
 /// <summary>
 /// 五谷丰登的执行过程
 /// </summary>
 /// <param name="r">起始子事件对象</param>
 /// <returns>起始子事件</returns>
 private EventRecoard WuGuFengDengProc(EventRecoard r)
 {
     //子事件的目标必须存在且目标不能死亡
     if (r.Target != null && !GamePlayers[r.Target].Dead)
     {
         //开始无懈可击的处理
         if (WuXieProc(r.Target, Card.Effect.WuGuFengDeng))
         {
             return(r);
         }
         //发送问询
         string msg = new Beaver("askfor.wgfd.select", r.Target.ChiefName).ToString();
         //new XElement("askfor.wgfd.select",
         //    new XElement("target", r.Target.ChiefName)
         //    );
         //获取问询结果
         MessageCore.AskForResult res = AsynchronousCore.AskForCards(r.Target, MessageCore.AskForEnum.WuGuFengDeng, new AskForWrapper(msg, this), gData);
         //回应的牌不正确,则自动选择一张
         if (res.Cards.Count() != 1 || (res.Cards.Count() == 1 && !CardsBuffer[WGFDSlotName].Cards.Contains(res.Cards[0])))
         {
             res = new MessageCore.AskForResult(false, r.Target, new ChiefBase[] { }, new Card[] { CardsBuffer[WGFDSlotName].Cards[GetRandom(CardsBuffer[WGFDSlotName].Cards.Count)] }, Card.Effect.None, false, false, res.SkillName);
         }
         foreach (Card c in res.Cards)
         {
             CardsBuffer[WGFDSlotName].Cards.Remove(c);
             GamePlayers[r.Target].Hands.Add(c);
         }
         //发送消息
         AsynchronousCore.SendMessage(
             new Beaver("wgfd.select", r.Target.ChiefName, Card.Cards2Beaver("cards", res.Cards)).ToString());
         //new XElement("wgfd.select",
         //    new XElement("target", r.Target.ChiefName),
         //    Card.Cards2XML("cards", res.Cards)
         //));
     }
     return(r);
 }
Пример #11
0
 /// <summary>
 /// 安置闪电的过程
 /// </summary>
 /// <param name="r">子事件的起始节点</param>
 /// <returns></returns>
 private EventRecoard ShanDianProc(EventRecoard r)
 {
     //玩家本人不能死亡
     if (!GamePlayers[r.Source].Dead)
     {
         //本人不能有闪电buff
         if (!GamePlayers[r.Source].HasDebuff(Card.Effect.ShanDian))
         {
             //把闪电从垃圾桶中拿出来
             PickRubbish(r.Cards);
             //把闪电放置到自己的buff
             GamePlayers[r.Source].Debuff.Push(r.Cards[0]);
             AsynchronousCore.SendMessage(
                 new Beaver("sd", r.Source.ChiefName, r.SkillName, Card.Cards2Beaver("cards", r.Cards)).ToString());
             //new XElement("sd",
             //    new XElement("from", r.Source.ChiefName),
             //    new XElement("skill", r.SkillName),
             //    Card.Cards2XML("cards", r.Cards)
             //    )
             //);
         }
     }
     return(r);
 }
Пример #12
0
        /// <summary>
        /// 万箭齐发的过程
        /// </summary>
        /// <param name="r">子事件的起始节点</param>
        /// <returns></returns>
        private EventRecoard WanJianQiFaProc(EventRecoard r)
        {
            string msg = null;

            //对方不能死亡
            if (!GamePlayers[r.Target].Dead)
            {
                //进入无懈可击的过程
                if (WuXieProc(r.Target, Card.Effect.WanJianQiFa))
                {
                    return(r);
                }
                if (GamePlayers[r.Target].Armor == null || Armor.EnableFor(GamePlayers[r.Target].Armor.CardEffect, r.Cards, Card.Effect.WanJianQiFa, r.Target))
                {
                    MessageCore.AskForResult resShan = null;
                    msg = new Beaver("askfor.wjqf.shan", r.Target.ChiefName, r.Source.ChiefName).ToString();
                    //new XElement("askfor.wjqf.shan",
                    //    new XElement("target", r.Target.ChiefName),
                    //    new XElement("source", r.Source.ChiefName)
                    //);
                    //问询闪
                    resShan = AsynchronousCore.AskForCards(r.Target, MessageCore.AskForEnum.Shan, new AskForWrapper(msg, this), true, gData);
                    ValidityResult(r.Target, ref resShan);
                    //}
                    if (resShan.PlayerLead)
                    {
                        DropCards(true, CardFrom.Hand, resShan.SkillName, resShan.Cards, resShan.Effect, resShan.Leader, r.Source, null);
                    }
                    else
                    {
                        DropCards(false, CardFrom.None, resShan.SkillName, resShan.Cards, resShan.Effect, resShan.Leader, r.Source, null);
                    }
                    //将问询的牌放入到子事件节点
                    //EventNode(true, CardFrom.Hand, resShan.SkillName , resShan.Cards, resShan.Effect, r.Target, r.Source, null);
                    foreach (ASkill s in resShan.Leader.Skills)
                    {
                        s.OnUseEffect(resShan.Leader, Card.Effect.Shan, gData);
                    }
                    if (resShan.Effect == Card.Effect.Shan)
                    {
                        if (resShan.PlayerLead)
                        {
                            AsynchronousCore.SendMessage(
                                new Beaver("wjqf.shan", r.Target.ChiefName, r.Source.ChiefName, resShan.SkillName, Card.Cards2Beaver("cards", resShan.Cards)).ToString());
                        }
                        //new XElement("wjqf.shan",
                        //    new XElement("target", r.Target.ChiefName),
                        //    new XElement("source", r.Source.ChiefName),
                        //    new XElement("skill", resShan.SkillName),
                        //    Card.Cards2XML("cards", resShan.Cards)
                        //));
                    }
                    else
                    {
                        //没有出闪费血
                        DamageHealth(r.Target, 1, r.Source, r);
                    }
                }
            }
            return(r);
        }
Пример #13
0
        /// <summary>
        /// 子事件处理方法
        /// </summary>
        private void EventProc()
        {
            if (queRecoard.Count < 1)
            {
                return;
            }
            //清除子事件处理列表
            lstRecoard.Clear();
            //取子事件队列的事件放置到子事件处理列表中
            EventRecoard r = queRecoard.Dequeue();

            lstRecoard.Add(r);

            //根据首事件的性质开始处理
            switch (r.Effect)
            {
            //...None效果一般是说,某些技能已经处理过了,也不想让这个事件走一般过程,于是有了None来跳过子事件的处理
            case Card.Effect.None:

                break;

            //杀
            case Card.Effect.Sha:
                r = ShaProc(r);
                break;

            //决斗
            case Card.Effect.JueDou:
                r = JueDouProc(r);
                break;

            //桃
            case Card.Effect.Tao:
                r = TaoProc(r);
                break;

            //南蛮入侵
            case Card.Effect.NanManRuQin:
                r = NanManRuQinProc(r);
                break;

            //万箭齐发
            case Card.Effect.WanJianQiFa:
                r = WanJianQiFaProc(r);
                break;

            //桃园结义
            case Card.Effect.TaoYuanJieYi:
                r = TaoYuanJieYi(r);
                break;

            //无中生有
            case Card.Effect.WuZhongShengYou:
                r = WuZhongShengYouProc(r);
                break;

            //过河拆桥
            case Card.Effect.GuoHeChaiQiao:
                r = GuoHeChaiQiaoProc(r);
                break;

            //顺手牵羊
            case Card.Effect.ShunShouQianYang:
                r = ShunShouQianYangProc(r);
                break;

            //借刀杀人
            case Card.Effect.JieDaoShaRen:
                r = JieDaoShaRenProc(r);
                break;

            //乐不思蜀
            case Card.Effect.LeBuSiShu:
                r = LeBuSiShuProc(r);
                break;

            //闪电
            case Card.Effect.ShanDian:
                r = ShanDianProc(r);
                break;

            //五谷丰登
            case Card.Effect.WuGuFengDeng:
                r = WuGuFengDengProc(r);
                break;

            //防具的过程统一用一个方法
            case Card.Effect.BaGuaZhen:
            case Card.Effect.TengJia:
            case Card.Effect.RenWangDun:
            case Card.Effect.BaiYinShiZi:
                r = ArmorProc(r);
                break;

            //武器的过程统一用一个方法
            case Card.Effect.ZhangBaSheMao:
            case Card.Effect.ZhuGeLianNu:
            case Card.Effect.FangTianHuaJi:
            case Card.Effect.HanBingJian:
            case Card.Effect.GuDianDao:
            case Card.Effect.QiLinGong:
            case Card.Effect.GuanShiFu:
            case Card.Effect.QingLongYanYueDao:
            case Card.Effect.QingGangJian:
            case Card.Effect.CiXiongShuangGuJian:
            case Card.Effect.ZhuQueYuShan:
                r = WeaponProc(r);
                break;

            //各种马的过程用一个方法
            case Card.Effect.Jian1:
            case Card.Effect.Jia1:
                r = HorseProc(r);
                break;
            }
        }
Пример #14
0
 /// <summary>
 /// 桃的过程
 /// </summary>
 /// <param name="r">子事件的起始节点</param>
 /// <returns></returns>
 private EventRecoard TaoProc(EventRecoard r)
 {
     //加血
     RegainHealth(r.Source, 1);
     return(r);
 }
Пример #15
0
        /// <summary>
        /// 要求武将消耗体力值
        /// </summary>
        /// <param name="aChief">受伤害的武将</param>
        /// <param name="aDamage">伤害量</param>
        /// <param name="aSource">伤害来源,非玩家操作置null</param>
        /// <param name="aSourceEvent">伤害来源事件</param>
        internal void DamageHealth(ChiefBase aChief, sbyte aDamage, ChiefBase aSource, EventRecoard aSourceEvent)
        {
            if (GamePlayers[aChief].Health - aDamage < 1)
            {
                AsynchronousCore.SendMessage(
                    new Beaver("health", aChief.ChiefName, GamePlayers[aChief].MaxHealth.ToString(), "0").ToString());
                //new XElement("health",
                //new XElement("target", aChief.ChiefName),
                //new XElement("max", GamePlayers[aChief].MaxHealth),
                //new XElement("current", 0)
                //));

                if (Cry4HelpProc(aSource, aChief, (sbyte)Math.Abs(GamePlayers[aChief].Health - aDamage - 1)))
                {
                    //GamePlayers[aChief].Health = 0;
                    GamePlayers[aChief].Dead = true;
                    //drop all cards
                    List <Card> lstDrop = new List <Card>();
                    lstDrop.AddRange(GamePlayers[aChief].Hands);
                    lstDrop.AddRange(GamePlayers[aChief].Debuff);
                    if (GamePlayers[aChief].Weapon != null)
                    {
                        lstDrop.Add(GamePlayers[aChief].Weapon);
                    }
                    if (GamePlayers[aChief].Armor != null)
                    {
                        lstDrop.Add(GamePlayers[aChief].Armor);
                    }
                    if (GamePlayers[aChief].Jia1Ma != null)
                    {
                        lstDrop.Add(GamePlayers[aChief].Jia1Ma);
                    }
                    if (GamePlayers[aChief].Jian1Ma != null)
                    {
                        lstDrop.Add(GamePlayers[aChief].Jian1Ma);
                    }
                    AsynchronousCore.SendMessage(
                        new Beaver("fall", aChief.ChiefName, aChief.ChiefStatus).ToString());
                    //new XElement("fall",
                    //    new XElement("target", aChief.ChiefName),
                    //    new XElement("status", aChief.ChiefStatus)
                    //    )
                    //);
                    AsynchronousCore.SendMessage(MessageCore.MakeDropMessage(aChief, aChief, lstDrop.ToArray()));
                    DropCards(true, CardFrom.HandAndEquipageAndJudgement, string.Empty, lstDrop.ToArray(), Card.Effect.None, aChief, null, null);
                    RefereeProc();
                    if (aChief.ChiefStatus == ChiefBase.Status.Insurgent && aSource != null && !GamePlayers[aSource].Dead)
                    {
                        TakeingCards(aSource, 3);
                    }
                    return;
                }
            }
            else
            {
                AsynchronousCore.SendMessage(new Beaver("health", aChief.ChiefName, GamePlayers[aChief].MaxHealth.ToString(), (GamePlayers[aChief].Health - aDamage).ToString()).ToString());
                //new XElement("health",
                //new XElement("target", aChief.ChiefName),
                //new XElement("max", GamePlayers[aChief].MaxHealth),
                //new XElement("current", GamePlayers[aChief].Health - aDamage)
                //));
                GamePlayers[aChief].Health -= aDamage;
            }
            foreach (ASkill s in GamePlayers[aChief].Chief.Skills)
            {
                s.OnChiefHarmed(aSourceEvent, aSource, aChief, gData, aDamage);
            }
        }
Пример #16
0
        /// <summary>
        /// 杀的过程
        /// </summary>
        /// <param name="r"></param>
        /// <returns></returns>
        internal EventRecoard ShaProc(EventRecoard r)
        {
            foreach (ASkill s in r.Target.Skills)
            {
                s.PreprocessingSubEvent(r.Target, ref r, gData);
            }
            //这里再检查一次玩家是否死亡是怕玩家在以前的子事件中挂掉了,如果真挂了就忽略掉这次事件
            if (!GamePlayers[r.Target].Dead)
            {
                if (GamePlayers[r.Source].Weapon != null)
                {
                    Weapon.Lead(GamePlayers[r.Source].Weapon.CardEffect, r.Effect, r.Cards, gData, r.Source, r.Target);
                }
                if (GamePlayers[r.Target].Armor == null || (GamePlayers[r.Source].Weapon != null && Weapon.EnableTargetArmorWithMessage(GamePlayers[r.Source].Weapon.CardEffect, r.Source, r.Target, gData) && Armor.EnableFor(GamePlayers[r.Target].Armor.CardEffect, r.Cards, Card.Effect.Sha, r.Target)) || !(GamePlayers[r.Source].Weapon != null && Weapon.EnableTargetArmor(GamePlayers[r.Source].Weapon.CardEffect, r.Source, r.Target)))
                {
                    MessageCore.AskForResult res = null;
                    bool EnableDamage            = false;
                    int  times = 1;
                    foreach (ASkill s in r.Source.Skills)
                    {
                        times = s.CalcAskforTimes(r.Source, r.Target, Card.Effect.Sha, times, gData);
                    }
                    for (int i = 0; i < times; i++)
                    {
                        res          = null;
                        EnableDamage = false;
                        string msg = new Beaver("askfor.sha.shan", r.Target.ChiefName, r.Source.ChiefName).ToString();
                        //new XElement("askfor.sha.shan",
                        //            new XElement("target", r.Target.ChiefName),
                        //            new XElement("source", r.Source.ChiefName)
                        //            );
                        if (GamePlayers[r.Target].Armor != null && (GamePlayers[r.Source].Weapon == null || Weapon.EnableTargetArmor(GamePlayers[r.Source].Weapon.CardEffect, r.Source, r.Target)))
                        {
                            //问询 闪
                            res = AsynchronousCore.AskForCards(r.Target, MessageCore.AskForEnum.Shan, new AskForWrapper(msg, this), gData);
                        }
                        else
                        {
                            //问询 闪
                            res = AsynchronousCore.AskForCards(r.Target, MessageCore.AskForEnum.Shan, new AskForWrapper(msg, this), false, gData);
                        }
                        //检验出牌合法性
                        ValidityResult(r.Target, ref res);

                        //问询结果放入子事件处理列表
                        if (res.PlayerLead)
                        {
                            DropCards(true, CardFrom.Hand, res.SkillName, res.Cards, res.Effect, res.Leader, r.Source, null);
                        }
                        else
                        {
                            DropCards(false, CardFrom.None, res.SkillName, res.Cards, res.Effect, res.Leader, r.Source, null);
                        }

                        if (res.Effect == Card.Effect.Shan)
                        {
                            if (res.PlayerLead)
                            {
                                AsynchronousCore.LeadingValid(r.Target);
                                AsynchronousCore.SendMessage(
                                    new Beaver("sha.shan", r.Target.ChiefName, r.Source.ChiefName, res.SkillName, Card.Cards2Beaver("cards", res.Cards)).ToString());
                                //new XElement("sha.shan",
                                //    new XElement("from", r.Target.ChiefName),
                                //    new XElement("to", r.Source.ChiefName),
                                //    new XElement("skill", res.SkillName),
                                //    Card.Cards2XML("cards", res.Cards)
                                //    )
                                //);
                            }
                            foreach (ASkill s in res.Leader.Skills)
                            {
                                s.OnUseEffect(res.Leader, Card.Effect.Shan, gData);
                            }
                            if (GamePlayers[r.Source].Weapon != null)
                            {
                                EnableDamage = Weapon.TargetShan(GamePlayers[r.Source].Weapon.CardEffect, r.Source, r.Target, gData, r);
                            }
                        }
                        if (res.Effect == Card.Effect.None || EnableDamage)
                        {
                            break;
                        }
                    }
                    if (res == null || res.Effect == Card.Effect.None || EnableDamage)
                    {
                        sbyte cost = 1;
                        if (GamePlayers[r.Source].Weapon != null)
                        {
                            cost = Weapon.CalcDamage(GamePlayers[r.Source].Weapon.CardEffect, r.Source, r.Target, Card.Effect.Sha, cost, gData);
                        }
                        foreach (ASkill s in r.Source.Skills)
                        {
                            cost = s.CalcDamage(r.Source, r.Effect, cost, gData);
                        }
                        if (GamePlayers[r.Target].Armor != null && GamePlayers[r.Source].Weapon != null && Weapon.EnableTargetArmor(GamePlayers[r.Source].Weapon.CardEffect, r.Source, r.Target))
                        {
                            cost = Armor.CalcDamage(1, r.Cards, GamePlayers[r.Target].Armor.CardEffect);
                        }
                        DamageHealth(r.Target, cost, r.Source, r);
                    }
                }
            }
            return(r);
        }
Пример #17
0
        /// <summary>
        /// 决斗的执行过程
        /// </summary>
        /// <param name="r">子事件起始节点</param>
        /// <returns></returns>
        internal EventRecoard JueDouProc(EventRecoard r)
        {
            string msg = null;

            if (r.Target2 != null)
            {
                r.Source = r.Target;
                r.Target = r.Target2;
            }
            //玩家双方都不能死亡
            if (!GamePlayers[r.Target].Dead && !GamePlayers[r.Source].Dead)
            {
                if (r.Target2 == null)
                {
                    //无懈可击的过程
                    if (WuXieProc(r.Target, Card.Effect.JueDou))
                    {
                        return(r);
                    }
                }
                while (true)
                {
                    int times = 1;
                    foreach (ASkill s in r.Source.Skills)
                    {
                        times = s.CalcAskforTimes(r.Source, r.Target, Card.Effect.JueDou, times, gData);
                    }
                    for (int i = 0; i < times; i++)
                    {
                        //先询问对方要出杀
                        MessageCore.AskForResult res = null;
                        msg = new Beaver("askfor.jd.sha", r.Target.ChiefName, r.Source.ChiefName).ToString();
                        //new XElement("askfor.jd.sha",
                        //new XElement("target", r.Target.ChiefName),
                        //new XElement("opponent", r.Source.ChiefName)
                        //);
                        res = AsynchronousCore.AskForCards(r.Target, MessageCore.AskForEnum.Sha, new AskForWrapper(msg, this), gData);
                        ValidityResult(r.Target, ref res);
                        if (res.Effect != Card.Effect.Sha)
                        {
                            //不出杀费血
                            sbyte cost = 1;
                            foreach (ASkill s in r.Source.Skills)
                            {
                                cost = s.CalcDamage(r.Source, Card.Effect.JueDou, cost, gData);
                            }
                            if (GamePlayers[r.Target].Armor != null)
                            {
                                cost = Armor.CalcDamage(cost, r.Cards, GamePlayers[r.Target].Armor.CardEffect);
                            }
                            DamageHealth(r.Target, cost, r.Source, r);
                            return(r);
                        }
                        else
                        {
                            //出杀加入子事件节点
                            if (res.PlayerLead)
                            {
                                DropCards(true, CardFrom.Hand, res.SkillName, res.Cards, Card.Effect.Sha, res.Leader, r.Source, null);
                            }
                            foreach (ASkill s in res.Leader.Skills)
                            {
                                s.OnUseEffect(res.Leader, Card.Effect.Sha, gData);
                            }
                            AsynchronousCore.SendMessage(
                                new Beaver("jd.sha", r.Target.ChiefName, r.Source.ChiefName, Card.Cards2Beaver("cards", res.Cards)).ToString());
                            //new XElement("jd.sha",
                            //    new XElement("target", r.Target.ChiefName),
                            //    new XElement("opponent", r.Source.ChiefName),
                            //    Card.Cards2XML("cards", res.Cards)
                            //));
                        }
                    }
                    times = 1;
                    foreach (ASkill s in r.Target.Skills)
                    {
                        times = s.CalcAskforTimes(r.Target, r.Source, Card.Effect.JueDou, times, gData);
                    }
                    for (int i = 0; i < times; i++)
                    {
                        msg = new Beaver("askfor.jd.sha", r.Source.ChiefName, r.Target.ChiefName).ToString();
                        //new XElement("askfor.jd.sha",
                        //new XElement("target", r.Source.ChiefName),
                        //new XElement("opponent", r.Target.ChiefName)
                        //);
                        //问询自己出杀
                        MessageCore.AskForResult res2 = AsynchronousCore.AskForCards(r.Source, MessageCore.AskForEnum.Sha, new AskForWrapper(msg, this), gData);
                        ValidityResult(r.Source, ref res2);
                        if (res2.Effect != Card.Effect.Sha)
                        {
                            //不出杀费血
                            sbyte cost = 1;
                            foreach (ASkill s in r.Target.Skills)
                            {
                                cost = s.CalcDamage(r.Target, r.Effect, cost, gData);
                            }
                            if (GamePlayers[r.Source].Armor != null)
                            {
                                cost = Armor.CalcDamage(cost, r.Cards, GamePlayers[r.Source].Armor.CardEffect);
                            }
                            DamageHealth(r.Source, cost, r.Target, r);
                            return(r);
                        }
                        else
                        {
                            //出杀加入子事件节点
                            if (res2.PlayerLead)
                            {
                                DropCards(true, CardFrom.Hand, res2.SkillName, res2.Cards, Card.Effect.Sha, res2.Leader, r.Target, null);
                            }
                            foreach (ASkill s in res2.Leader.Skills)
                            {
                                s.OnUseEffect(res2.Leader, Card.Effect.Sha, gData);
                            }
                            AsynchronousCore.SendMessage(
                                new Beaver("jd.sha", r.Source.ChiefName, r.Target.ChiefName, Card.Cards2Beaver("cards", res2.Cards)).ToString());
                            //new XElement("jd.sha",
                            //    new XElement("target", r.Source.ChiefName),
                            //    new XElement("opponent", r.Target.ChiefName),
                            //    Card.Cards2XML("cards", res2.Cards)
                            //));
                        }
                    }
                }
            }
            return(r);
        }