Ejemplo n.º 1
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);
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
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);
        }