Ejemplo n.º 1
0
 public override void BeforeAskfor(ChiefBase aChief, MessageCore.AskForEnum aEffect, GlobalData aData)
 {
     if (aEffect == MessageCore.AskForEnum.Sha || aEffect == MessageCore.AskForEnum.Shan || (aEffect == MessageCore.AskForEnum.Aggressive && (aData.ShaNoLimit || aData.KillRemain > 0)))
     {
         SwitchSkillStatus(aChief, SkillEnabled.Enable, aData);
     }
 }
Ejemplo n.º 2
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);
         }
     }
 }
Ejemplo n.º 3
0
 public override void Leading(ChiefBase aChief, GlobalData aData)
 {
     if (aData.Game.GamePlayers[aChief].Hands.Count != 0)
     {
         SwitchSkillStatus(aChief, SkillEnabled.Enable, aData);
     }
 }
Ejemplo n.º 4
0
 public override void BeforeAskfor(ChiefBase aChief, MessageCore.AskForEnum aEffect, GlobalData aData)
 {
     if (aEffect == MessageCore.AskForEnum.Aggressive && aData.Game.GamePlayers[aChief].HasHand)
     {
         SwitchSkillStatus(aChief, SkillEnabled.Enable, aData);
     }
 }
Ejemplo n.º 5
0
 public override bool ActiveSkill(string aSkillName, Card[] aCards, ChiefBase aChief, ChiefBase[] aTargets, MessageCore.AskForEnum aAskFor, ref Card.Effect aEffect, GlobalData aData)
 {
     if (aSkillName == SkillName)
     {
         if (SkillStatus == SkillEnabled.Disable)
         {
             return(false);
         }
         if (aAskFor != MessageCore.AskForEnum.AskForTao && aAskFor != MessageCore.AskForEnum.AskForTaoOrJiu)
         {
             return(false);
         }
         if (aCards.Count() != 1)
         {
             return(false);
         }
         if (!aData.Game.GamePlayers[aChief].HasCardsInHandOrEquipage(aCards))
         {
             return(false);
         }
         if (aCards[0].CardHuaSe != Card.Suit.HongTao && aCards[0].CardHuaSe != Card.Suit.FangPian)
         {
             return(false);
         }
     }
     return(true);
 }
Ejemplo n.º 6
0
 public override void OnUseEffect(ChiefBase aChief, Card.Effect aEffect, GlobalData aData)
 {
     if (aEffect == Card.Effect.Sha && OnLeading)
     {
         UseShaEffect = true;
     }
 }
Ejemplo n.º 7
0
 public override void FinishAskfor(ChiefBase aChief, MessageCore.AskForEnum aEffect, GlobalData aData)
 {
     if (aEffect == MessageCore.AskForEnum.Aggressive && SkillStatus == SkillEnabled.Disable)
     {
         SwitchSkillStatus(aChief, SkillEnabled.Disable, aData);
     }
 }
Ejemplo n.º 8
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());
         }
     }
 }
Ejemplo n.º 9
0
 public override void BeforeAbandonment(ChiefBase aChief, GlobalData aData)
 {
     if (SkillStatus == SkillEnabled.Enable)
     {
         SwitchSkillStatus(aChief, SkillEnabled.Disable, aData);
     }
 }
Ejemplo n.º 10
0
 public override bool ActiveSkill(string aSkillName, Card[] aCards, ChiefBase aChief, ChiefBase[] aTargets, MessageCore.AskForEnum aAskFor, ref Card.Effect aEffect, GlobalData aData)
 {
     if (aSkillName == SkillName)
     {
         if (SkillStatus == SkillEnabled.Disable)
         {
             return(false);
         }
         if (aCards.Count() != 1 || !aData.Game.GamePlayers[aChief].HasCardsInHand(aCards))
         {
             return(false);
         }
         if (aTargets.Count() != 2)
         {
             return(false);
         }
         if (aData.Game.GamePlayers[aTargets[0]].Chief.Sex != ChiefBase.SexType.Male || aData.Game.GamePlayers[aTargets[1]].Chief.Sex != ChiefBase.SexType.Male)
         {
             return(false);
         }
         if (aData.Game.GamePlayers[aTargets[0]].Dead || aData.Game.GamePlayers[aTargets[1]].Dead)
         {
             return(false);
         }
         if (aTargets[0] == aTargets[1])
         {
             return(false);
         }
         if (aTargets[0] == aChief || aTargets[1] == aChief)
         {
             return(false);
         }
     }
     return(true);
 }
Ejemplo n.º 11
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);
        }
Ejemplo n.º 12
0
 /// <summary>
 /// 根据武将的名称判断两个武将对象是否相等
 /// </summary>
 /// <param name="aChief">另一个武将对象</param>
 /// <returns>若名称相等,返回true.参数为null返回false</returns>
 public bool IsMe(ChiefBase aChief)
 {
     if (aChief == null)
     {
         return(false);
     }
     return(aChief.ChiefName == ChiefName);
 }
Ejemplo n.º 13
0
 public override void OnRemoveCards(ChiefBase aChief, GlobalData aData)
 {
     if (aData.Game.GamePlayers[aChief].Hands.Count == 0)
     {
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] {}, new Card[] {}));
         aData.Game.TakeingCards(aChief, 1);
     }
 }
Ejemplo n.º 14
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;
                }
            }
        }
Ejemplo n.º 15
0
 public override MessageCore.AskForResult AskFor(ChiefBase aChief, MessageCore.AskForEnum aAskFor, GlobalData aData)
 {
     if (aAskFor == MessageCore.AskForEnum.Aggressive && SkillStatus == SkillEnabled.Enable)
     {
         SwitchSkillStatus(aChief, SkillEnabled.Disable, aData);
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, Player.Players2Chiefs(aData.Game.Response.Targets), aData.Game.Response.Cards));
         return(new MessageCore.AskForResult(false, aChief, Player.Players2Chiefs(aData.Game.Response.Targets), aData.Game.Response.Cards, Card.Effect.GuoHeChaiQiao, false, true, SkillName));
     }
     return(null);
 }
Ejemplo n.º 16
0
 public override MessageCore.AskForResult AskFor(ChiefBase aChief, MessageCore.AskForEnum aAskFor, GlobalData aData)
 {
     if (SkillName == aData.Game.Response.SkillName && SkillStatus == SkillEnabled.Enable)
     {
         SwitchSkillStatus(aChief, SkillEnabled.Disable, aData);
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, aData.Game.Response.Cards));
         return(new MessageCore.AskForResult(false, aChief, new ChiefBase[] { }, aData.Game.Response.Cards, Card.Effect.Shan, false, true, SkillName));
     }
     return(null);
 }
Ejemplo n.º 17
0
 public override bool EffectFeasible(Card[] aCards, Card.Effect aEffect, ChiefBase aTarget, bool aFeasible, GlobalData aData)
 {
     switch (aEffect)
     {
     case Card.Effect.ShunShouQianYang:
     case Card.Effect.LeBuSiShu:
         return(false);
     }
     return(aFeasible);
 }
Ejemplo n.º 18
0
 public override bool ActiveSkill(string aSkillName, Card[] aCards, ChiefBase aChief, ChiefBase[] aTargets, MessageCore.AskForEnum aAskFor, ref Card.Effect aEffect, GlobalData aData)
 {
     if (aSkillName == SkillName && aChief.ChiefStatus == ChiefBase.Status.Majesty) //要求
     {
         if (SkillStatus != SkillEnabled.Enable || aAskFor != MessageCore.AskForEnum.Shan || aCards.Count() != 0)
         {
             return(false);                                                                                                     //不满足的条件
         }
     }
     return(true);
 }
Ejemplo n.º 19
0
 /// <summary>
 /// 通过玩家选择的武将来获取或设置玩家
 /// </summary>
 /// <param name="aChief">武将对象</param>
 /// <returns>玩家对象</returns>
 public Player this[ChiefBase aChief]
 {
     get
     {
         return(this[aChief.ChiefName]);
     }
     set
     {
         this[aChief.ChiefName] = value;
     }
 }
Ejemplo n.º 20
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--;
     }
 }
Ejemplo n.º 21
0
 /// <summary>
 /// 构造玩家,此方法仅用于测试
 /// </summary>
 /// <param name="aGame">游戏对象</param>
 /// <param name="aCallback">回调接口</param>
 /// <param name="aService">服务接口</param>
 public Player(GameBase aGame, ICallback aCallback, IService aService)
 {
     Messages        = new List <string>();
     Hands           = new List <Card>();
     Debuff          = new Stack <Card>();
     Callback        = aCallback;
     Service         = aService;
     HorizontalSet   = false;
     TurnSet         = false;
     AvailableChiefs = new ChiefBase[0] {
     };
 }
Ejemplo n.º 22
0
 /// <summary>
 /// 设置技能状态
 /// </summary>
 /// <param name="aChief">武将对象</param>
 /// <param name="aStatus">新的状态</param>
 /// <param name="aData">全局数据对象</param>
 protected void SwitchSkillStatus(ChiefBase aChief, SkillEnabled aStatus, GlobalData aData)
 {
     SkillStatus = aStatus;
     aData.Game.AsynchronousCore.SendMessage(new ChiefBase[] { aChief },
                                             new Beaver("skill.status", SkillName, SkillStatus.ToString()).ToString()
                                             //new XElement("skill.status",
                                             //    new XElement("name" , SkillName ),
                                             //    new XElement("status" , SkillStatus )
                                             //    )
                                             , false
                                             );
 }
Ejemplo n.º 23
0
 public override void OnChiefJudgementCardTakeEffect(ChiefBase aChief, Card aCard, ref bool aEnableSendToBin, GlobalData aData)
 {
     if (aCard.CardEffect == Card.Effect.LuoShen)
     {
         if (aCard.CardHuaSe == Card.Suit.CaoHua || aCard.CardHuaSe == Card.Suit.HeiTao)
         {
             aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { aCard }));
             aEnableSendToBin = false;
             aData.Game.GamePlayers[aChief].Hands.Add(aCard.GetOriginalCard());
         }
     }
 }
Ejemplo n.º 24
0
 public override bool ActiveSkill(string aSkillName, Card[] aCards, ChiefBase aChief, ChiefBase[] aTargets, MessageCore.AskForEnum aAskFor, ref Card.Effect aEffect, GlobalData aData)
 {
     if (aSkillName == SkillName)
     {
         if (SkillStatus == SkillEnabled.Enable && (aAskFor == MessageCore.AskForEnum.Sha || aAskFor == MessageCore.AskForEnum.Aggressive) && aCards.Count() == 0)
         {
             if (aAskFor == MessageCore.AskForEnum.Aggressive)
             {
                 //若出杀有限制且已经没有机会杀了不能执行
                 if (!aData.ShaNoLimit && aData.KillRemain < 1)
                 {
                     return(false);                                           //false
                 }
                 //杀的目标数量高于最大值不能执行
                 if (aData.Game.CalcMaxShaTargets(aChief, aCards) < aTargets.Count())
                 {
                     return(false);                                                                  //false
                 }
                 //没有目标不能执行
                 if (aTargets.Count() == 0)
                 {
                     return(false);                       //false
                 }
                 //遍历目标集合,如果目标有自己或者目标已死亡或者 够不到对方不能执行
                 foreach (ChiefBase c in aTargets)
                 {
                     if (c.IsMe(aChief) || aData.Game.GamePlayers[c].Dead || !aData.Game.WithinShaRange(aChief, c))
                     {
                         return(false); //false
                     }
                     bool Enable = true;
                     foreach (ASkill s in c.Skills)
                     {
                         Enable = s.EffectFeasible(aCards, aEffect, c, Enable, aData);
                     }
                     if (!Enable)
                     {
                         return(false);
                     }
                 }
             }
             return(true);
         }
         else
         {
             return(false); //false
         }
     }
     else
     {
         return(true);
     }
 }
Ejemplo n.º 25
0
 public override sbyte CalcRescuePoint(ChiefBase aChief, ChiefBase aRescuer, Card.Effect aEffect, sbyte aOldPoint, GlobalData aData)
 {
     if (aRescuer != null && aData.Game.GamePlayers[aRescuer].Chief.ChiefCamp == ChiefBase.Camp.Wu && aEffect == Card.Effect.Tao)
     {
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { }));
         return(++aOldPoint);
     }
     else
     {
         return(aOldPoint);
     }
 }
Ejemplo n.º 26
0
 public override MessageCore.AskForResult AskFor(ChiefBase aChief, MessageCore.AskForEnum aAskFor, GlobalData aData)
 {
     if (aAskFor == MessageCore.AskForEnum.Aggressive && SkillStatus == SkillEnabled.Enable)
     {
         SwitchSkillStatus(aChief, SkillEnabled.Disable, aData);
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { }));
         aData.Game.DamageHealth(aChief, 1, null, new GlobalEvent.EventRecoard(aChief, aChief, new Card[] { }, Card.Effect.Skill, SkillName));
         aData.Game.TakeingCards(aChief, 2);
         return(new MessageCore.AskForResult(false, aChief, new ChiefBase[] { }, new Card[] { }, Card.Effect.Skill, false, false, SkillName));
     }
     return(null);
 }
Ejemplo n.º 27
0
        public override int CalcAskforTimes(ChiefBase aChief, ChiefBase aTarget, Card.Effect aEffect, int aOldTimes, GlobalData aData)
        {
            switch (aEffect)
            {
            case Card.Effect.Sha:
            case Card.Effect.JueDou:
                aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { aTarget }, new Card[] { }));
                return(2);

            default:
                return(aOldTimes);
            }
        }
Ejemplo n.º 28
0
 public override sbyte CalcDamage(ChiefBase aChief, Card.Effect aEffect, sbyte aDamage, GlobalData aData)
 {
     if (Active)
     {
         switch (aEffect)
         {
         case Card.Effect.Sha:
         case Card.Effect.JueDou:
             return(++aDamage);
         }
     }
     return(aDamage);
 }
Ejemplo n.º 29
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;
         }
     }
 }
Ejemplo n.º 30
0
 public override bool EffectFeasible(Card[] aCards, Card.Effect aEffect, ChiefBase aTarget, bool aFeasible, GlobalData aData)
 {
     switch (aEffect)
     {
     case Card.Effect.Sha:
     case  Card.Effect.JueDou:
         if (aData.Game.GamePlayers[aTarget].Hands.Count == 0)
         {
             return(false);
         }
         break;
     }
     return(aFeasible);
 }