示例#1
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);
        }
    //private void Start()
    //{
    //player = GameObject.FindGameObjectWithTag("Beaver").GetComponent<Beaver>(); ;
    //}

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.tag == "Beaver")
        {
            player = collision.gameObject.GetComponent <Beaver>();
            //Debug.Log("Collision with player.");
            player.TakeDamage(damage);
        }
    }
示例#3
0
 // Start is called before the first frame update
 void Start()
 {
     beaver         = GameObject.Find("Beaver").GetComponent <Beaver>();
     timer          = GetComponent <Text>();
     timer.text     = "Time Remaining: " + (int)startTime;
     playerHasMoved = false;
     showGoal.gameObject.SetActive(true);
     showGoal.text = "Collect all items and destroy them at the dam before time runs out.";
 }
示例#4
0
        /// <summary>
        /// 将该武将的技能和相应的技能状态以消息的方式传送给所有玩家
        /// </summary>
        /// <param name="aData">游戏数据</param>
        public void ReportSkills(GlobalData aData)
        {
            Beaver root = new Beaver("skills", ChiefName);

            foreach (SkillBase s in Skills)
            {
                root.Add(string.Empty, new Beaver("skill", s.SkillName, s.SkillStatus.ToString()));
            }
            aData.Game.AsynchronousCore.SendMessage(root.ToString());
        }
示例#5
0
        public IActionResult Edit(Beaver beaver)
        {
            if (ModelState.IsValid)
            {
                _beaversRepository.UpdateBeaver(beaver);
                return(RedirectToAction("EditComplete"));
            }

            return(View(beaver));
        }
 void removeBeaver(Beaver beav)
 {
     beav.destroyListener -= removeBeaver;
     m_listBeavers.Remove(beav);
     m_beaverKilledTotal++;
     if (onBeaverKilledListener != null)
     {
         onBeaverKilledListener(m_beaverKilledTotal);
     }
 }
示例#7
0
        /// <summary>
        /// 产生某个玩家手牌序列Beaver消息
        /// </summary>
        /// <param name="aPlayer">玩家对象</param>
        /// <returns>Beaver对象</returns>
        private Beaver MakeHandMessage(Player aPlayer)
        {
            Beaver ret = new Beaver();

            foreach (Card c in aPlayer.Hands)
            {
                ret.Add(string.Empty, c.ID);
            }
            ret.SetHeaderElementName("hands");
            return(ret);
        }
示例#8
0
        internal static BeaverMarkupLanguage.Beaver Chiefs2Beaver(string aNodeName, ChiefBase[] aChiefs)
        {
            Beaver ret = new Beaver();

            foreach (ChiefBase c in aChiefs)
            {
                ret.Add(string.Empty, c.ChiefName);
            }
            ret.SetHeaderElementName(aNodeName);
            return(ret);
            //return new BeaverMarkupLanguage.Beaver(aNodeName, aChiefs.Select(i => i.ChiefName.ToString()));
        }
示例#9
0
        internal static BeaverMarkupLanguage.Beaver Cards2Beaver(string aNodeName, Card[] aCards)
        {
            Beaver ret = new Beaver();

            foreach (Card c in aCards)
            {
                ret.Add(string.Empty, c.ID);
            }
            ret.SetHeaderElementName(aNodeName);
            return(ret);
            //return new BeaverMarkupLanguage.Beaver(aNodeName, aCards.Select(i => i.CardNumber).ToArray());
        }
示例#10
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);
 }
示例#11
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);
        }
    void CreateBeaver()
    {
        m_beaverCreated++;
        GameObject plop = Instantiate(m_beaverPrefab);

        plop.transform.SetParent(m_beaverContainer.transform);
        plop.transform.localPosition = Vector3.zero;
        plop.name = "Beaver_" + m_beaverCreated.ToString();

        Beaver beav = plop.gameObject.GetComponent <Beaver> ();

        beav.destroyListener += removeBeaver;
        beav.Initialize(m_treeManager);


        m_listBeavers.Add(plop.gameObject.GetComponent <Beaver> ());
    }
示例#13
0
        private Beaver Chiefs2Beaver(int aIndex)
        {
            Beaver ret = new Beaver();

            foreach (ChiefBase c in GamePlayers[aIndex].AvailableChiefs)
            {
                ret.Add(string.Empty, c.ChiefName);
            }
            ret.SetHeaderElementName("chiefs");
            return(ret);
            //Beaver r = null;
            //foreach (ChiefBase c in GamePlayers[aIndex].AvailableChiefs)
            //    if (r == null)
            //        r = new Beaver("chiefs", c.ChiefName);
            //    else
            //        r.Add(string.Empty, c.ChiefName);
            //if (r == null)
            //    r = new Beaver("chiefs");
            //return r;
        }
示例#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
文件: Doctor.g.cs 项目: toitware/api
        public override int GetHashCode()
        {
            int hash = 1;

            if (Beaver != false)
            {
                hash ^= Beaver.GetHashCode();
            }
            if (Grass != false)
            {
                hash ^= Grass.GetHashCode();
            }
            if (Oak != false)
            {
                hash ^= Oak.GetHashCode();
            }
            if (_unknownFields != null)
            {
                hash ^= _unknownFields.GetHashCode();
            }
            return(hash);
        }
示例#16
0
        static void Main(string[] args)
        {
            Beaver beaver = new Beaver(true, 4, "Cheap", "Beaver1", 10, 2);

            Console.WriteLine(beaver.Name);
            Console.WriteLine($"The dog is {beaver.Age} years old");
            Console.WriteLine($"Has a {beaver.Fur} Fur");
            Console.WriteLine($"Has a {beaver.Legs} Legs");
            Console.WriteLine($"Speed is {beaver.Speed}");
            Console.WriteLine($"{beaver.Name} eats {beaver.Eat()}");
            Console.WriteLine(beaver.Sleep(true));
            Console.WriteLine(new string('*', 50));


            Rabbit rabbit = new Rabbit(true, 4, "Expencive", "Rabbit1", 30, 1);

            Console.WriteLine(rabbit.Name);
            Console.WriteLine($"The dog is {rabbit.Age} years old");
            Console.WriteLine($"Has a {rabbit.Fur} Fur");
            Console.WriteLine($"Has a {rabbit.Legs} Legs");
            Console.WriteLine($"Speed is {rabbit.Speed}");
            Console.WriteLine($"{rabbit.Name} eats {rabbit.Eat()}");
            Console.WriteLine(rabbit.Sleep(true));
            Console.WriteLine(new string('*', 50));



            Tiger tiger = new Tiger(true, 4, "Very Expencive", "Tiger1", 50, 8);

            Console.WriteLine(tiger.Name);
            Console.WriteLine($"The dog is {tiger.Age} years old");
            Console.WriteLine($"Has a {tiger.Fur} Fur");
            Console.WriteLine($"Has a {tiger.Legs} Legs");
            Console.WriteLine($"Speed is {tiger.Speed}");
            Console.WriteLine($"{tiger.Name} eats {tiger.Eat()}");
            Console.WriteLine(tiger.Sleep(true));
            Console.WriteLine(new string('*', 50));
        }
示例#17
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);
        }
示例#18
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);
 }
示例#19
0
        /// <summary>
        /// 开始玩家的选将过程,要求玩家数量必须等于游戏模式中指定的数量
        /// </summary>
        /// <returns>若该过程无误,则返回true</returns>
        public bool SelectChiefs()
        {
            if (GamePlayers.All.Count() < 2)
            {
                return(false);
            }
            foreach (Player p in GamePlayers.All)
            {
                p.Chief           = null;
                p.AvailableChiefs = new ChiefBase[0] {
                };
            }
            //发送游戏环境数据给所有玩家
            AsynchronousCore.SendEnvironmentMessage();
            int m  = 0;
            int l1 = 0;
            int l2 = 0;
            int i1 = 0;
            int i2 = 0;
            int i3 = 0;
            int i4 = 0;
            int s1 = 0;
            int s2 = 0;
            //获取场上玩家数量
            int max = GamePlayers.All.Count();

            //重置牌堆
            CardsHeap = new CardHeap(this);
            //一个用来放置可选武将的列表
            List <ChiefBase> heap = new List <ChiefBase>();

            //根据模式设置牌堆里面的牌
            switch (Mode)
            {
            case GameMode.FiveJunZheng:
            case GameMode.EightJunZheng:
                CardsHeap.FillOriginCards();
                CardsHeap.FillExCards();
                CardsHeap.FillShenCards();
                break;

            case GameMode.FiveSTD:
            case GameMode.EightSTD:
                CardsHeap.FillOriginCards();
                CardsHeap.FillExCards();
                break;
            }
            //根据扩展包情况加入武将
            heap = ChiefHeap.GetOriginChiefs();
            //主公可选武将列表
            List <ChiefBase> mLst = new List <ChiefBase>();

            mLst.AddRange(heap.Where(c => c.ChiefName == "刘备" || c.ChiefName == "孙权" || c.ChiefName == "曹操"));
            if (GamePacks.Contains(GamePack.Feng))
            {
                heap.AddRange(ChiefHeap.GetFengPackChiefs());
                mLst.AddRange(heap.Where(c => c.ChiefName == "张角"));
            }
            if (GamePacks.Contains(GamePack.Huo))
            {
                heap.AddRange(ChiefHeap.GetHuoPackChiefs());
                mLst.AddRange(heap.Where(c => c.ChiefName == "袁绍"));
            }
            if (GamePacks.Contains(GamePack.Lin))
            {
                heap.AddRange(ChiefHeap.GetLinPackChiefs());
                mLst.AddRange(heap.Where(c => c.ChiefName == "董卓"));
            }
            //乱序可选武将
            heap = ShuffleList <ChiefBase>(heap);
            //将非主公武将从heap中找到放置到heap2
            ChiefBase[] heap2 = heap.Where(c => c.ChiefName != "刘备" && c.ChiefName != "孙权" && c.ChiefName != "曹操" && c.ChiefName != "张角" && c.ChiefName != "袁绍" && c.ChiefName != "董卓").ToArray();
            //加入两个非主公武将到主公可选武将列表中
            mLst.Add(heap2[0]);
            mLst.Add(heap2[1]);
            //把主公可选武将写成XML格式
            Beaver r = null;

            foreach (ChiefBase c in mLst)
            {
                if (r == null)
                {
                    r = new Beaver("chiefs", c.ChiefName);
                }
                else
                {
                    r.Add(string.Empty, c.ChiefName);
                }
            }
            if (r == null)
            {
                r = new Beaver("chiefs");
            }
            //表决字典
            Dictionary <Player, bool> Abstention = new Dictionary <Player, bool>();
            //这个列表用来产生身份序列
            List <int> l = null;

            //按照人数开始配置角色
            switch (Mode)
            {
            case GameMode.FiveSTD:
            case GameMode.FiveJunZheng:
                //五人场人数必须为5
                if (GamePlayers.All.Count() != 5)
                {
                    return(false);
                }
                l  = new List <int>(new int[] { 0, 1, 2, 3, 4 });
                l  = ShuffleList <int>(l);
                m  = l[0];      //主
                l1 = l[1];      //忠
                s1 = l[2];      //内
                i1 = l[3];      //反
                i2 = l[4];      //反
                //给所有玩家群发主公是谁
                AsynchronousCore.SendMessage(new Player[] { GamePlayers[m] }, new Beaver("ChiefStatus", ChiefBase.Status.Majesty.ToString(), GamePlayers[m].UID).ToString(), true);
                //new XElement("ChiefStatus",
                //    new XElement("Status", ChiefBase.Status.Majesty),
                //    new XElement("UID", GamePlayers[m].UID)
                //    ), true);
                //给其他角色发送自己身份是什么
                AsynchronousCore.SendMessage(new Player[] { GamePlayers[l1] }, new Beaver("ChiefStatus", ChiefBase.Status.Loyalist.ToString(), GamePlayers[l1].UID).ToString(), false);
                //new Player[] { GamePlayers[l1] },
                //new XElement("ChiefStatus",
                //    new XElement("Status", ChiefBase.Status.Loyalist),
                //    new XElement("UID", GamePlayers[l1].UID)
                //    ), false);
                AsynchronousCore.SendMessage(new Player[] { GamePlayers[s1] }, new Beaver("ChiefStatus", ChiefBase.Status.Spy.ToString(), GamePlayers[s1].UID).ToString(), false);
                //new Player[] { GamePlayers[s1] },
                //new XElement("ChiefStatus",
                //    new XElement("Status", ChiefBase.Status.Spy),
                //    new XElement("UID", GamePlayers[s1].UID)
                //    ), false);
                AsynchronousCore.SendMessage(new Player[] { GamePlayers[i1] }, new Beaver("ChiefStatus", ChiefBase.Status.Insurgent.ToString(), GamePlayers[i1].UID).ToString(), false);
                //new Player[] { GamePlayers[i1] },
                //new XElement("ChiefStatus",
                //    new XElement("Status", ChiefBase.Status.Insurgent),
                //    new XElement("UID", GamePlayers[i1].UID)
                //    ), false);
                AsynchronousCore.SendMessage(new Player[] { GamePlayers[i2] }, new Beaver("ChiefStatus", ChiefBase.Status.Insurgent.ToString(), GamePlayers[i2].UID).ToString(), false);
                //new Player[] { GamePlayers[i2] },
                //new XElement("ChiefStatus",
                //    new XElement("Status", ChiefBase.Status.Insurgent),
                //    new XElement("UID", GamePlayers[i2].UID)
                //    ), false);
                //设置主公可选武将列表
                GamePlayers[m].AvailableChiefs = mLst.ToArray();
                //通知主公选武将
                AsynchronousCore.SendMessage(
                    new Player[] { GamePlayers[m] },
                    new Beaver("askfor.selectchief", GamePlayers[m].UID, r).ToString()
                    //new XElement("askfor.selectchief",
                    //    new XElement("UID", GamePlayers[m].UID),
                    //    r)
                    , false);
                //通知其他玩家主公正在选武将
                AsynchronousCore.SendMessage(
                    GamePlayers.All.Where(c => c.UID != GamePlayers[m].UID).ToArray(),
                    new Beaver("askfor.selectchief", GamePlayers[m].UID).ToString()
                    //new XElement("askfor.selectchief",
                    //    new XElement("UID", GamePlayers[m].UID))
                    , true);

                //设置表决字典,除了主公玩家置false,其他玩家置true
                foreach (Player p in GamePlayers.All)
                {
                    if (GamePlayers[m] == p && !p.IsEscaped && !p.IsOffline)
                    {
                        Abstention.Add(p, false);
                    }
                    else
                    {
                        Abstention.Add(p, true);
                    }
                }

                //等待问询结果
                AsynchronousCore.AskForChief(Abstention);
                //主公没选择武将的话,随机配置一个
                if (GamePlayers[m].Chief == null)
                {
                    GamePlayers[m].Chief = mLst[GetRandom(mLst.Count)];
                }
                //设置主公的一些属性
                GamePlayers[m].Chief.ChiefStatus   = ChiefBase.Status.Majesty;
                GamePlayers[m].Chief.playersObject = GamePlayers;
                GamePlayers[m].MaxHealth           = GamePlayers[m].Chief.Health;
                GamePlayers[m].MaxHealth++;
                GamePlayers[m].Health = GamePlayers[m].MaxHealth;
                //通知玩家主公选择了谁
                AsynchronousCore.SendMessage(
                    new Beaver("selectchief", GamePlayers[m].UID, GamePlayers[m].Chief.ChiefName, GamePlayers[m].MaxHealth.ToString()).ToString());
                //new XElement("selectchief",
                //    new XElement("UID", GamePlayers[m].UID),
                //    new XElement("chief_name", GamePlayers[m].Chief.ChiefName),
                //    new XElement("max_health", GamePlayers[m].MaxHealth)
                //    )
                //);
                //heap中去除掉主公选择的武将并重新乱序排列
                heap = ShuffleList <ChiefBase>(heap.Where(c => c != GamePlayers[m].Chief).ToList());
                //其他玩家每人抽三个武将到自己的可选武将中
                GamePlayers[l1].AvailableChiefs = heap.GetRange(0, 3).ToArray();
                GamePlayers[s1].AvailableChiefs = heap.GetRange(3, 3).ToArray();
                GamePlayers[i1].AvailableChiefs = heap.GetRange(6, 3).ToArray();
                GamePlayers[i2].AvailableChiefs = heap.GetRange(9, 3).ToArray();
                //重新设置表决字典,除了主公,其他人都置false
                Abstention = new Dictionary <Player, bool>();
                foreach (Player p in GamePlayers.All)
                {
                    if (GamePlayers[m] == p)
                    {
                        Abstention.Add(p, true);
                    }
                    else
                    {
                        Abstention.Add(p, false);
                    }
                }
                //通知非主公玩家去选自己的武将
                r = Chiefs2Beaver(l1);
                AsynchronousCore.SendMessage(
                    new Player[] { GamePlayers[l1] },
                    new Beaver("askfor.selectchief", GamePlayers[l1].UID, r).ToString()
                    //new XElement("askfor.selectchief",
                    //    new XElement("UID", GamePlayers[l1].UID),
                    //    r)
                    , false);
                r = Chiefs2Beaver(s1);
                AsynchronousCore.SendMessage(
                    new Player[] { GamePlayers[s1] },
                    new Beaver("askfor.selectchief", GamePlayers[s1].UID, r).ToString()
                    //new XElement("askfor.selectchief",
                    //    new XElement("UID", GamePlayers[s1].UID),
                    //    new XElement("chiefs",
                    //        new XElement("chief", GamePlayers[s1].AvailableChiefs[0].ChiefName),
                    //        new XElement("chief", GamePlayers[s1].AvailableChiefs[1].ChiefName),
                    //        new XElement("chief", GamePlayers[s1].AvailableChiefs[2].ChiefName)
                    //        ))
                    , false);
                r = Chiefs2Beaver(i1);
                AsynchronousCore.SendMessage(
                    new Player[] { GamePlayers[i1] },
                    new Beaver("askfor.selectchief", GamePlayers[i1].UID, r).ToString()
                    //new XElement("askfor.selectchief",
                    //    new XElement("UID", GamePlayers[i1].UID),
                    //    new XElement("chiefs",
                    //        new XElement("chief", GamePlayers[i1].AvailableChiefs[0].ChiefName),
                    //        new XElement("chief", GamePlayers[i1].AvailableChiefs[1].ChiefName),
                    //        new XElement("chief", GamePlayers[i1].AvailableChiefs[2].ChiefName)
                    //        ))
                    , false);
                r = Chiefs2Beaver(i2);
                AsynchronousCore.SendMessage(
                    new Player[] { GamePlayers[i2] },
                    new Beaver("askfor.selectchief", GamePlayers[i2].UID, r).ToString()
                    //new XElement("askfor.selectchief",
                    //    new XElement("UID", GamePlayers[i2].UID),
                    //    new XElement("chiefs",
                    //        new XElement("chief", GamePlayers[i2].AvailableChiefs[0].ChiefName),
                    //        new XElement("chief", GamePlayers[i2].AvailableChiefs[1].ChiefName),
                    //        new XElement("chief", GamePlayers[i2].AvailableChiefs[2].ChiefName)
                    //        ))
                    , false);
                //问询玩家选择武将
                AsynchronousCore.AskForChief(Abstention);
                //针对非主公玩家配置数据
                foreach (Player p in GamePlayers.All)
                {
                    p.Score = 0;
                    if (GamePlayers[m] == p)
                    {
                        continue;
                    }
                    if (p.Chief == null)
                    {
                        //没选武将随机配置一个
                        p.Chief = p.AvailableChiefs[GetRandom(p.AvailableChiefs.Count())];
                    }
                    p.Chief.playersObject = GamePlayers;
                    p.MaxHealth           = p.Chief.Health;
                    p.Health = p.MaxHealth;
                    //通知所有玩家该玩家选择的武将
                    AsynchronousCore.SendMessage(
                        new Beaver("selectchief", p.UID, p.Chief.ChiefName, p.MaxHealth).ToString()
                        //new XElement("selectchief",
                        //    new XElement("UID", p.UID),
                        //    new XElement("chief_name", p.Chief.ChiefName),
                        //    new XElement("max_health", p.MaxHealth)
                        //    )
                        );
                }
                ////开始分配武将的技能
                //foreach (Player p in GamePlayers.All)
                //{
                //    //再发送出去
                //    p.Chief.ReportSkills(gData);
                //}
                //设置非主公武将的身份
                GamePlayers[l1].Chief.ChiefStatus = Data.ChiefBase.Status.Loyalist;
                GamePlayers[s1].Chief.ChiefStatus = Data.ChiefBase.Status.Spy;
                GamePlayers[i1].Chief.ChiefStatus = Data.ChiefBase.Status.Insurgent;
                GamePlayers[i2].Chief.ChiefStatus = Data.ChiefBase.Status.Insurgent;
                //事件结束
                AsynchronousCore.SendClearMessage();
                return(true);

            case GameMode.EightSTD:
            case GameMode.EightJunZheng:
                //玩家人数不为8则不能执行
                if (GamePlayers.All.Count() != 8)
                {
                    return(false);
                }
                l  = new List <int>(new int[] { 0, 1, 2, 3, 4, 5, 6, 7 });
                l  = ShuffleList <int>(l);
                m  = l[0];      //主
                l1 = l[1];      //忠
                l2 = l[2];      //忠
                s1 = l[3];      //内
                i1 = l[4];      //反
                i2 = l[5];      //反
                i3 = l[6];      //反
                i4 = l[7];      //反
                //给所有玩家通知主公是谁
                AsynchronousCore.SendMessage(
                    new Beaver("ChiefStatus", ChiefBase.Status.Majesty.ToString(), GamePlayers[m].UID).ToString());
                //new XElement("ChiefStatus",
                //    new XElement("Status", ChiefBase.Status.Majesty),
                //    new XElement("UID", GamePlayers[m].UID)
                //    ));
                //其他玩家自己收到自己的身份
                AsynchronousCore.SendMessage(new Player[] { GamePlayers[l1] },
                                             new Beaver("ChiefStatus", ChiefBase.Status.Loyalist.ToString(), GamePlayers[l1].UID).ToString()
                                             //new XElement("ChiefStatus",
                                             //    new XElement("Status", ChiefBase.Status.Loyalist),
                                             //    new XElement("UID", GamePlayers[l1].UID))
                                             , false);
                AsynchronousCore.SendMessage(new Player[] { GamePlayers[l2] },
                                             new Beaver("ChiefStatus", ChiefBase.Status.Loyalist.ToString(), GamePlayers[l2].UID).ToString()
                                             //new XElement("ChiefStatus",
                                             //    new XElement("Status", ChiefBase.Status.Loyalist),
                                             //    new XElement("UID", GamePlayers[l2].UID))
                                             , false);
                AsynchronousCore.SendMessage(new Player[] { GamePlayers[s1] },
                                             new Beaver("ChiefStatus", ChiefBase.Status.Spy.ToString(), GamePlayers[s1].UID).ToString()
                                             //new XElement("ChiefStatus",
                                             //    new XElement("Status", ChiefBase.Status.Spy),
                                             //    new XElement("UID", GamePlayers[s1].UID))
                                             , false);
                AsynchronousCore.SendMessage(new Player[] { GamePlayers[i1] },
                                             new Beaver("ChiefStatus", ChiefBase.Status.Insurgent.ToString(), GamePlayers[i1].UID).ToString()
                                             //new XElement("ChiefStatus",
                                             //    new XElement("Status", ChiefBase.Status.Insurgent),
                                             //    new XElement("UID", GamePlayers[i1].UID))
                                             , false);
                AsynchronousCore.SendMessage(new Player[] { GamePlayers[i2] },
                                             new Beaver("ChiefStatus", ChiefBase.Status.Insurgent.ToString(), GamePlayers[i2].UID).ToString()
                                             //new XElement("ChiefStatus",
                                             //    new XElement("Status", ChiefBase.Status.Insurgent),
                                             //    new XElement("UID", GamePlayers[i2].UID))
                                             , false);
                AsynchronousCore.SendMessage(new Player[] { GamePlayers[i3] },
                                             new Beaver("ChiefStatus", ChiefBase.Status.Insurgent.ToString(), GamePlayers[i3].UID).ToString()
                                             //new XElement("ChiefStatus",
                                             //    new XElement("Status", ChiefBase.Status.Insurgent),
                                             //    new XElement("UID", GamePlayers[i3].UID))
                                             , false);
                AsynchronousCore.SendMessage(new Player[] { GamePlayers[i4] },
                                             new Beaver("ChiefStatus", ChiefBase.Status.Insurgent.ToString(), GamePlayers[i4].UID).ToString()
                                             //new XElement("ChiefStatus",
                                             //    new XElement("Status", ChiefBase.Status.Insurgent),
                                             //    new XElement("UID", GamePlayers[i4].UID))
                                             , false);
                //设置主公可选的武将列表
                GamePlayers[m].AvailableChiefs = mLst.ToArray();
                //给主公私下发送的选将事件
                AsynchronousCore.SendMessage(
                    new Player[] { GamePlayers[m] },
                    new Beaver("askfor.selectchief", GamePlayers[m].UID, r).ToString()
                    //new XElement("askfor.selectchief",
                    //    new XElement("UID", GamePlayers[m].UID),
                    //    r)
                    , false);
                //给所有非主公玩家通知主公在选将
                AsynchronousCore.SendMessage(
                    GamePlayers.All.Where(c => c.UID != GamePlayers[m].UID).ToArray(),
                    new Beaver("askfor.selectchief", GamePlayers[m].UID).ToString()
                    //new XElement("askfor.selectchief",
                    //    new XElement("UID", GamePlayers[m].UID))
                    , true);
                //设置表决字典,让主公玩家未表决
                Abstention = new Dictionary <Player, bool>();
                foreach (Player p in GamePlayers.All)
                {
                    if (GamePlayers[m] == p)
                    {
                        Abstention.Add(p, false);
                    }
                    else
                    {
                        Abstention.Add(p, true);
                    }
                }
                //开始问询
                AsynchronousCore.AskForChief(Abstention);
                //没有选将设置随机选择武将
                if (GamePlayers[m].Chief == null)
                {
                    GamePlayers[m].Chief = mLst[GetRandom(mLst.Count)];
                }
                //设置主公玩家的一些属性
                GamePlayers[m].Chief.ChiefStatus   = ChiefBase.Status.Majesty;
                GamePlayers[m].Chief.playersObject = GamePlayers;
                GamePlayers[m].MaxHealth           = GamePlayers[m].Chief.Health;
                GamePlayers[m].MaxHealth++;
                GamePlayers[m].Health = GamePlayers[m].MaxHealth;
                //通知玩家主公选择了什么以及血量
                AsynchronousCore.SendMessage(
                    new Beaver("selectchief", GamePlayers[m].UID, GamePlayers[m].Chief.ChiefName, GamePlayers[m].MaxHealth.ToString()).ToString());
                //new XElement("selectchief",
                //    new XElement("UID", GamePlayers[m].UID),
                //    new XElement("chief_name", GamePlayers[m].Chief.ChiefName),
                //    new XElement("max_health", GamePlayers[m].MaxHealth)
                //    )
                //);
                //武将堆排除掉主公选择的武将之后重新排序
                heap = ShuffleList <ChiefBase>(heap.Where(c => c != GamePlayers[m].Chief).ToList());
                //其他玩家从heap抽3个武将作为可选武将
                GamePlayers[l1].AvailableChiefs = heap.GetRange(0, 3).ToArray();
                GamePlayers[l2].AvailableChiefs = heap.GetRange(3, 3).ToArray();
                GamePlayers[s1].AvailableChiefs = heap.GetRange(6, 3).ToArray();
                GamePlayers[i1].AvailableChiefs = heap.GetRange(9, 3).ToArray();
                GamePlayers[i2].AvailableChiefs = heap.GetRange(12, 3).ToArray();
                GamePlayers[i3].AvailableChiefs = heap.GetRange(15, 3).ToArray();
                GamePlayers[i4].AvailableChiefs = heap.GetRange(18, 3).ToArray();
                //设置表决字典,让非主公玩家选将
                Abstention = new Dictionary <Player, bool>();
                foreach (Player p in GamePlayers.All)
                {
                    if (GamePlayers[m] == p)
                    {
                        Abstention.Add(p, true);
                    }
                    else
                    {
                        Abstention.Add(p, false);
                    }
                }
                AsynchronousCore.SendMessage(
                    new Beaver("askfor.selectchief").ToString());
                //new XElement("askfor.selectchief")
                //);
                r = Chiefs2Beaver(l1);
                AsynchronousCore.SendMessage(
                    new Player[] { GamePlayers[l1] },
                    new Beaver("askfor.selectchief", GamePlayers[l1].UID, r).ToString()
                    //new XElement("askfor.selectchief",
                    //    new XElement("UID", GamePlayers[l1].UID),
                    //    r)
                    , false);
                r = Chiefs2Beaver(l2);
                AsynchronousCore.SendMessage(
                    new Player[] { GamePlayers[l2] },
                    new Beaver("askfor.selectchief", GamePlayers[l2].UID, r).ToString()
                    //new XElement("askfor.selectchief",
                    //    new XElement("UID", GamePlayers[l2].UID),
                    //    r)
                    , false);
                r = Chiefs2Beaver(s1);
                AsynchronousCore.SendMessage(
                    new Player[] { GamePlayers[s1] },
                    new Beaver("askfor.selectchief", GamePlayers[s1].UID, r).ToString()
                    //new XElement("askfor.selectchief",
                    //    new XElement("UID", GamePlayers[s1].UID),
                    //    r)
                    , false);
                r = Chiefs2Beaver(i1);
                AsynchronousCore.SendMessage(
                    new Player[] { GamePlayers[i1] },
                    new Beaver("askfor.selectchief", GamePlayers[i1].UID, r).ToString()
                    //new XElement("askfor.selectchief",
                    //    new XElement("UID", GamePlayers[i1].UID),
                    //    r)
                    , false);
                r = Chiefs2Beaver(i2);
                AsynchronousCore.SendMessage(
                    new Player[] { GamePlayers[i2] },
                    new Beaver("askfor.selectchief", GamePlayers[i2].UID, r).ToString()
                    //new XElement("askfor.selectchief",
                    //    new XElement("UID", GamePlayers[i2].UID),
                    //    r)
                    , false);
                r = Chiefs2Beaver(i3);
                AsynchronousCore.SendMessage(
                    new Player[] { GamePlayers[i3] },
                    new Beaver("askfor.selectchief", GamePlayers[i3].UID, r).ToString()
                    //new XElement("askfor.selectchief",
                    //    new XElement("UID", GamePlayers[i3].UID),
                    //    r)
                    , false);
                r = Chiefs2Beaver(i4);
                AsynchronousCore.SendMessage(
                    new Player[] { GamePlayers[i4] },
                    new Beaver("askfor.selectchief", GamePlayers[i4].UID, r).ToString()
                    //new XElement("askfor.selectchief",
                    //    new XElement("UID", GamePlayers[i4].UID),
                    //    r)
                    , false);
                AsynchronousCore.AskForChief(Abstention);
                foreach (Player p in GamePlayers.All)
                {
                    p.Score = 0;
                    if (GamePlayers[m] == p)
                    {
                        continue;
                    }
                    if (p.Chief == null)
                    {
                        p.Chief = p.AvailableChiefs[GetRandom(p.AvailableChiefs.Count())];
                    }
                    p.Chief.playersObject = GamePlayers;
                    p.MaxHealth           = p.Chief.Health;
                    p.Health = p.MaxHealth;
                    p.Dead   = false;
                    AsynchronousCore.SendMessage(
                        new Beaver("selectchief", p.UID, p.Chief.ChiefName, p.MaxHealth.ToString()).ToString());
                    //new XElement("selectchief",
                    //    new XElement("UID", p.UID),
                    //    new XElement("chief_name", p.Chief.ChiefName),
                    //    new XElement("max_health", p.MaxHealth)
                    //    )
                    //);
                }
                ////开始分配武将的技能
                //foreach (Player p in GamePlayers.All)
                //{
                //    //再发送出去
                //    p.Chief.ReportSkills(gData);
                //}
                GamePlayers[l1].Chief.ChiefStatus = Data.ChiefBase.Status.Loyalist;
                GamePlayers[l2].Chief.ChiefStatus = ChiefBase.Status.Loyalist;
                GamePlayers[s1].Chief.ChiefStatus = Data.ChiefBase.Status.Spy;
                GamePlayers[i1].Chief.ChiefStatus = Data.ChiefBase.Status.Insurgent;
                GamePlayers[i2].Chief.ChiefStatus = Data.ChiefBase.Status.Insurgent;
                GamePlayers[i3].Chief.ChiefStatus = Data.ChiefBase.Status.Insurgent;
                GamePlayers[i4].Chief.ChiefStatus = Data.ChiefBase.Status.Insurgent;
                AsynchronousCore.SendClearMessage();
                return(true);
            }
            return(false);
        }
示例#20
0
        /// <summary>弃牌问询,注意该方法仅用于弃牌阶段
        /// </summary>
        /// <param name="aChief">需要弃牌的武将</param>
        /// <returns>返回true表示弃牌正常</returns>
        private bool Abandonment(ChiefBase aChief)
        {
            bool first = true;

            //确定玩家弃牌的要求是否达到
            while (GamePlayers[aChief].Hands.Count > (GamePlayers[aChief].Health < 0 ? 0 : GamePlayers[aChief].Health))
            {
                //问询武将出牌
                string msg = new Beaver("askfor.abandonment", aChief.ChiefName).ToString();
                //new XElement("askfor.abandonment",
                //    new XElement("target", aChief.ChiefName)
                //);
                MessageCore.AskForResult res = null;
                if (first)
                {
                    first = false;
                    //弃牌问询
                    res = AsynchronousCore.AskForCards(aChief, MessageCore.AskForEnum.Abandonment, new AskForWrapper(msg, this), gData);
                }
                else
                {
                    //弃牌问询
                    res = AsynchronousCore.AskForCards(aChief, MessageCore.AskForEnum.AbandonmentNext, new AskForWrapper(msg, this), gData);
                }

                if (res.TimeOut || res.Cards.Count() == 0)
                {
                    res = new MessageCore.AskForResult(false, aChief, new ChiefBase[0], AutoAbandonment(aChief), Card.Effect.None, false, true, string.Empty);
                }
                //是否超过弃牌数
                if (GamePlayers[aChief].Hands.Count - res.Cards.Count() < (GamePlayers[aChief].Health < 0 ? 0 : GamePlayers[aChief].Health))
                {
                    //超过了,不合法,自动选择
                    Card[] cards = AutoAbandonment(aChief);
                    if (!RemoveHand(aChief, cards))
                    {
                        return(false);
                    }
                    CardsHeap.AddCards(cards);
                    AsynchronousCore.SendMessage(new Beaver("abandonment", aChief.ChiefName, GamePlayers[aChief].Hands.Count.ToString(), Card.Cards2Beaver("cards", res.Cards)).ToString());
                    //new XElement("abandonment",
                    //    new XElement("target", aChief.ChiefName),
                    //    new XElement("count", GamePlayers[aChief].Hands.Count),
                    //    Card.Cards2XML("cards", res.Cards)
                    //));
                }
                else
                {
                    if (!RemoveHand(aChief, res.Cards))
                    {
                        return(false);
                    }
                    //EventNode(true, CardFrom.Hand, res.Cards, Card.Effect.None, aChief, null, null);
                    CardsHeap.AddCards(res.Cards);
                    AsynchronousCore.SendMessage(
                        new Beaver("abandonment", aChief.ChiefName, GamePlayers[aChief].Hands.Count, Card.Cards2Beaver("cards", res.Cards)).ToString());
                    //new XElement("abandonment",
                    //    new XElement("target", aChief.ChiefName),
                    //    new XElement("count", GamePlayers[aChief].Hands.Count),
                    //    Card.Cards2XML("cards", res.Cards)
                    //));
                }
                //若牌数满足上限,弃牌完成
                if (GamePlayers[aChief].Hands.Count == GamePlayers[aChief].Health)
                {
                    return(true);
                }
            }
            //牌数小于限制,跳过弃牌
            return(true);
        }
示例#21
0
        private static void SeedDb()
        {
            using var context = new AnimalContext();

            context.SavedChanges += (sender, args) =>
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(
                    $"Saved {args.EntitiesSavedCount} changes for {((DbContext) sender)?.Database.GetConnectionString()}");
                Console.ForegroundColor = ConsoleColor.White;
            };

            context.Database.EnsureDeleted();
            context.Database.EnsureCreated();

            #region Seed TPT (Animal)

            var beaver1 = new Beaver
            {
                Name       = "SomeBeavers1",
                Age        = 27,
                Fluffiness = FluffinessEnum.VeryFluffy,
                Size       = 15,
                IpAddress  = IPAddress.Parse("127.0.0.1")
            };
            var beaver2 = new Beaver
            {
                Name       = "SomeBeavers2",
                Age        = 26,
                Fluffiness = FluffinessEnum.Fluffy,
                Size       = 14,
                IpAddress  = IPAddress.Parse("127.0.0.1")
            };
            var beaver3 = new Beaver
            {
                Name       = "SomeBeavers3",
                Age        = 25,
                Fluffiness = FluffinessEnum.NotFluffy,
                Size       = 13,
                IpAddress  = IPAddress.Parse("127.0.0.1")
            };
            var beaver4 = new Beaver
            {
                Name       = "SomeBeavers4",
                Age        = 24,
                Fluffiness = FluffinessEnum.Fluffy,
                Size       = 12,
                IpAddress  = IPAddress.Parse("127.0.0.1")
            };
            var beaver5 = new Beaver
            {
                Name       = "SomeBeavers5",
                Age        = 23,
                Fluffiness = FluffinessEnum.VeryFluffy,
                Size       = 11,
                IpAddress  = IPAddress.Parse("127.0.0.1")
            };

            var crow1 = new Crow
            {
                Name      = "Crowly",
                Age       = 5,
                Color     = "black",
                Size      = 1,
                IpAddress = IPAddress.Parse("127.0.0.1")
            };
            var crow2 = new Crow
            {
                Name      = "Crowly1",
                Age       = 5,
                Color     = "black",
                Size      = 1,
                IpAddress = IPAddress.Parse("127.0.0.1")
            };
            var crow3 = new Crow
            {
                Name      = "Crowly2",
                Age       = 22,
                Color     = "black",
                Size      = 4,
                IpAddress = IPAddress.Parse("127.0.0.1")
            };
            var crow4 = new Crow
            {
                Name      = "Crowly3",
                Age       = 50,
                Color     = "white",
                Size      = 10,
                IpAddress = IPAddress.Parse("127.0.0.1")
            };
            var crow5 = new Crow
            {
                Name      = "Crowly4",
                Age       = 5,
                Color     = "pink",
                Size      = 1,
                IpAddress = IPAddress.Parse("127.0.0.1")
            };

            var deer1 = new Deer
            {
                Name      = "Dasher",
                Age       = 1,
                Horns     = true,
                IpAddress = IPAddress.Parse("127.0.0.1")
            };
            var deer2 = new Deer
            {
                Name      = "Dancer",
                Age       = 2,
                Horns     = true,
                IpAddress = IPAddress.Parse("127.0.0.1")
            };
            var deer3 = new Deer
            {
                Name      = "Prancer",
                Age       = 1,
                Horns     = false,
                IpAddress = IPAddress.Parse("127.0.0.1")
            };
            var deer4 = new Deer
            {
                Name      = "Vixen",
                Age       = 1,
                Horns     = true,
                IpAddress = IPAddress.Parse("127.0.0.1")
            };
            var deer5 = new Deer
            {
                Name      = "Comet",
                Age       = 1,
                Horns     = true,
                IpAddress = IPAddress.Parse("127.0.0.1")
            };
            var deer6 = new Deer
            {
                Name      = "Cupid",
                Age       = 1,
                Horns     = false,
                IpAddress = IPAddress.Parse("127.0.0.1")
            };
            var deer7 = new Deer
            {
                Name      = "Donder ",
                Age       = 1,
                Horns     = true,
                IpAddress = IPAddress.Parse("127.0.0.1")
            };
            var deer8 = new Deer
            {
                Name      = "Blitzen",
                Age       = 1,
                Horns     = true,
                IpAddress = IPAddress.Parse("127.0.0.1")
            };

            context.Beavers.Add(beaver1);
            context.Beavers.Add(beaver2);
            context.Beavers.Add(beaver3);
            context.Beavers.Add(beaver4);
            context.Beavers.Add(beaver5);

            context.Crows.Add(crow1);
            context.Crows.Add(crow2);
            context.Crows.Add(crow3);
            context.Crows.Add(crow4);
            context.Crows.Add(crow5);

            context.Deers.Add(deer1);
            context.Deers.Add(deer2);
            context.Deers.Add(deer3);
            context.Deers.Add(deer4);
            context.Deers.Add(deer5);
            context.Deers.Add(deer6);
            context.Deers.Add(deer7);
            context.Deers.Add(deer8);

            #endregion

            #region Seed Many-to-many (Club)

            var club1 = new Club
            {
                Title   = "TreesWorshipers",
                Animals = new List <Animal> {
                    beaver1, beaver2, beaver3, beaver4, beaver5, crow4
                },
                Locations = new List <Location>
                {
                    new()
                    {
                        Address = "North America"
                    },
                    new()
                    {
                        Address = "Canada"
                    },
                    new()
                    {
                        Address = "Russia"
                    }
                }
            };

            var club2 = new Club
            {
                Title   = "CornLovers",
                Animals = new List <Animal> {
                    crow1, crow2, crow3, crow4, crow5
                },
                Locations = new List <Location>
                {
                    new()
                    {
                        Address = "Westeros"
                    }
                }
            };

            var club3 = new Club
            {
                Title   = "ChristmasTeam",
                Animals = new List <Animal>
                {
                    beaver1, beaver2, beaver3, beaver4, beaver5,
                    crow1, crow2, crow3, crow4, crow5,
                    deer1, deer2, deer3, deer4, deer5, deer6, deer7, deer8
                },
                Locations = new List <Location>
                {
                    new()
                    {
                        Address = "North Pole"
                    }
                }
            };

            context.Clubs.Add(club1);
            context.Clubs.Add(club2);
            context.Clubs.Add(club3);

            #endregion

            #region Seed Grades

            var grade1 = new Grade
            {
                TheGrade = 5,
                Club     = club1,
                Animal   = beaver1
            };
            var grade2 = new Grade
            {
                TheGrade = 4,
                Club     = club1,
                Animal   = beaver2
            };
            var grade3 = new Grade
            {
                TheGrade = 3,
                Club     = club1,
                Animal   = beaver3
            };
            var grade4 = new Grade
            {
                TheGrade = 3,
                Club     = club1,
                Animal   = beaver4
            };
            var grade5 = new Grade
            {
                TheGrade = 2,
                Club     = club1,
                Animal   = beaver5
            };
            var grade6 = new Grade
            {
                TheGrade = 1,
                Club     = club1,
                Animal   = crow4
            };
            var grade7 = new Grade
            {
                TheGrade = 5,
                Club     = club2,
                Animal   = crow1
            };
            var grade8 = new Grade
            {
                TheGrade = 4.5,
                Club     = club2,
                Animal   = crow2
            };
            var grade9 = new Grade
            {
                TheGrade = 2.1,
                Club     = club2,
                Animal   = crow3
            };
            var grade10 = new Grade
            {
                TheGrade = 4.3,
                Club     = club2,
                Animal   = crow4
            };

            var grade27 = new Grade
            {
                TheGrade = 4.5,
                Club     = club3,
                Animal   = beaver1
            };
            var grade26 = new Grade
            {
                TheGrade = 4.5,
                Club     = club3,
                Animal   = beaver2
            };
            var grade25 = new Grade
            {
                TheGrade = 4.5,
                Club     = club3,
                Animal   = beaver3
            };
            var grade24 = new Grade
            {
                TheGrade = 4.5,
                Club     = club3,
                Animal   = beaver4
            };
            var grade23 = new Grade
            {
                TheGrade = 4.5,
                Club     = club3,
                Animal   = beaver5
            };
            var grade22 = new Grade
            {
                TheGrade = 4.5,
                Club     = club3,
                Animal   = crow1
            };
            var grade21 = new Grade
            {
                TheGrade = 3.5,
                Club     = club3,
                Animal   = crow2
            };
            var grade20 = new Grade
            {
                TheGrade = 2.5,
                Club     = club3,
                Animal   = crow3
            };
            var grade19 = new Grade
            {
                TheGrade = 1.5,
                Club     = club3,
                Animal   = crow4
            };
            var grade28 = new Grade
            {
                TheGrade = 4.9,
                Club     = club3,
                Animal   = crow5
            };
            var grade11 = new Grade
            {
                TheGrade = 4.8,
                Club     = club3,
                Animal   = deer1
            };
            var grade12 = new Grade
            {
                TheGrade = 4.7,
                Club     = club3,
                Animal   = deer2
            };
            var grade13 = new Grade
            {
                TheGrade = 4.6,
                Club     = club3,
                Animal   = deer3
            };
            var grade14 = new Grade
            {
                TheGrade = 4.5,
                Club     = club3,
                Animal   = deer4
            };
            var grade15 = new Grade
            {
                TheGrade = 4.4,
                Club     = club3,
                Animal   = deer5
            };
            var grade16 = new Grade
            {
                TheGrade = 4.3,
                Club     = club3,
                Animal   = deer6
            };
            var grade17 = new Grade
            {
                TheGrade = 4.2,
                Club     = club3,
                Animal   = deer7
            };
            var grade18 = new Grade
            {
                TheGrade = 4.1,
                Club     = club3,
                Animal   = deer8
            };

            context.Grades.Add(grade1);
            context.Grades.Add(grade2);
            context.Grades.Add(grade3);
            context.Grades.Add(grade4);
            context.Grades.Add(grade5);
            context.Grades.Add(grade6);
            context.Grades.Add(grade7);
            context.Grades.Add(grade8);
            context.Grades.Add(grade9);
            context.Grades.Add(grade10);
            context.Grades.Add(grade11);
            context.Grades.Add(grade12);
            context.Grades.Add(grade13);
            context.Grades.Add(grade14);
            context.Grades.Add(grade15);
            context.Grades.Add(grade16);
            context.Grades.Add(grade17);
            context.Grades.Add(grade18);
            context.Grades.Add(grade19);
            context.Grades.Add(grade20);
            context.Grades.Add(grade21);
            context.Grades.Add(grade22);
            context.Grades.Add(grade23);
            context.Grades.Add(grade24);
            context.Grades.Add(grade25);
            context.Grades.Add(grade26);
            context.Grades.Add(grade27);
            context.Grades.Add(grade28);

            #endregion

            #region Seed Jobs

            var job1 = new Job
            {
                Title   = "Builder",
                Salary  = 1,
                Animals = new List <Animal>
                {
                    beaver1, beaver2, beaver3, beaver4, beaver5
                }
            };
            var job2 = new Job
            {
                Title   = "Messenger",
                Salary  = 10,
                Animals = new List <Animal>
                {
                    crow1, crow2, crow3, crow4
                }
            };
            var job3 = new Job
            {
                Title   = "Delivery",
                Salary  = 100,
                Animals = new List <Animal>
                {
                    deer1, deer2, deer3, deer4, deer5, deer6, deer7, deer8
                }
            };

            context.Jobs.Add(job1);
            context.Jobs.Add(job2);
            context.Jobs.Add(job3);

            #endregion

            #region Seed TPH (Food)

            var food1 = new NormalFood
            {
                Title  = "Elm",
                Animal = beaver1,
                Taste  = Taste.Normal
            };
            var food2 = new VeganFood
            {
                Title    = "Daphne laureola",
                Animal   = beaver2,
                Calories = 100
            };
            var food3 = new VeganFood
            {
                Title    = "Carpinus betulus",
                Animal   = beaver3,
                Calories = 1001
            };
            var food4 = new VeganFood
            {
                Title    = "Hornbeam",
                Animal   = beaver4,
                Calories = 101
            };
            var food5 = new NormalFood
            {
                Title  = "Pizza",
                Animal = beaver5,
                Taste  = Taste.Excellent
            };
            var food6 = new NormalFood
            {
                Title  = "Steak",
                Animal = crow1,
                Taste  = Taste.Excellent
            };
            var food7 = new NormalFood
            {
                Title  = "Meat",
                Animal = crow2,
                Taste  = Taste.Good
            };
            var food8 = new NormalFood
            {
                Title  = "Pizza",
                Animal = crow3,
                Taste  = Taste.VeryGood
            };
            var food9 = new VeganFood
            {
                Title    = "Corn",
                Animal   = crow4,
                Calories = 1
            };
            var food10 = new NormalFood
            {
                Title  = "Pizza",
                Animal = crow5,
                Taste  = Taste.Normal
            };
            var food11 = new VeganFood
            {
                Title    = "Pizza",
                Animal   = deer1,
                Calories = 10
            };
            var food12 = new VeganFood
            {
                Title    = "Pizza",
                Animal   = deer2,
                Calories = 10
            };
            var food13 = new VeganFood
            {
                Title    = "Pizza",
                Animal   = deer3,
                Calories = 10
            };
            var food14 = new VeganFood
            {
                Title    = "Pizza",
                Animal   = deer4,
                Calories = 10
            };
            var food15 = new VeganFood
            {
                Title    = "Pizza",
                Animal   = deer5,
                Calories = 10
            };
            var food16 = new VeganFood
            {
                Title    = "Pizza",
                Animal   = deer6,
                Calories = 10
            };
            var food17 = new NormalFood
            {
                Title  = "Elves",
                Animal = deer7,
                Taste  = Taste.Excellent
            };
            var food18 = new VeganFood
            {
                Title    = "Pizza",
                Animal   = deer8,
                Calories = 10
            };

            context.Food.Add(food1);
            context.Food.Add(food2);
            context.Food.Add(food3);
            context.Food.Add(food4);
            context.Food.Add(food5);
            context.Food.Add(food6);
            context.Food.Add(food7);
            context.Food.Add(food8);
            context.Food.Add(food9);
            context.Food.Add(food10);
            context.Food.Add(food11);
            context.Food.Add(food12);
            context.Food.Add(food13);
            context.Food.Add(food14);
            context.Food.Add(food15);
            context.Food.Add(food16);
            context.Food.Add(food17);
            context.Food.Add(food18);

            #endregion

            #region Seed Many-to-many old style (Drawback)

            var drawback1 = new Drawback
            {
                Title = "Crowdy",
                Foods = new List <Food>
                {
                    food1, food2, food3, food4, /*food5,*/ food6, food7, food8, food9, food10, food11, food12, food13,
                    food14, food15, food16, food17, food18
                },
                Clubs = new List <Club>
                {
                    club1, club2, club3
                },
                Consequence = new Consequence
                {
                    Name = "Nervousness"
                }
            };
            var drawback2 = new Drawback
            {
                Title = "Windy",
                Foods = new List <Food>
                {
                    food1, food2, food3, food4, food5, food6, food7, food8, food9, food10, food11, food12, food13,
                    food14, food15, food16, food17, food18
                },
                Clubs = new List <Club>
                {
                    club1, club2, club3
                },
                Consequence = new Consequence
                {
                    Name = "Teleportation to Land of Oz"
                }
            };
            var drawback3 = new Drawback
            {
                Title = "Soggy",
                Foods = new List <Food>
                {
                    food1, food2, food3, food4, food5, food6, food7, food8, food9, food10, food11, food12, food13,
                    food14, food15, food16, food17, food18
                },
                Clubs = new List <Club>
                {
                    club1, club2, club3
                },
                Consequence = new Consequence
                {
                    Name = "Wet clothes"
                }
            };
            var drawback4 = new Drawback
            {
                Title = "Hardy",
                Foods = new List <Food>
                {
                    food1, food2, food3, food4, food5, food6, food7, food8, food9, food10, food11, food12, food13,
                    food14, food15, food16, food17, food18
                },
                Clubs = new List <Club>
                {
                    club1, club2, club3
                },
                Consequence = new Consequence
                {
                    Name = "Sadness"
                }
            };

            context.Drawbacks.Add(drawback1);
            context.Drawbacks.Add(drawback2);
            context.Drawbacks.Add(drawback3);
            context.Drawbacks.Add(drawback4);

            var jobDrawback1 = new JobDrawback
            {
                Job      = job1,
                Drawback = drawback1
            };
            var jobDrawback2 = new JobDrawback
            {
                Job      = job1,
                Drawback = drawback2
            };
            var jobDrawback3 = new JobDrawback
            {
                Job      = job1,
                Drawback = drawback3
            };
            var jobDrawback4 = new JobDrawback
            {
                Job      = job1,
                Drawback = drawback4
            };
            var jobDrawback5 = new JobDrawback
            {
                Job      = job2,
                Drawback = drawback1
            };
            var jobDrawback6 = new JobDrawback
            {
                Job      = job2,
                Drawback = drawback2
            };
            var jobDrawback7 = new JobDrawback
            {
                Job      = job3,
                Drawback = drawback1
            };
            var jobDrawback8 = new JobDrawback
            {
                Job      = job3,
                Drawback = drawback2
            };

            context.JobDrawbacks.Add(jobDrawback1);
            context.JobDrawbacks.Add(jobDrawback2);
            context.JobDrawbacks.Add(jobDrawback3);
            context.JobDrawbacks.Add(jobDrawback4);
            context.JobDrawbacks.Add(jobDrawback5);
            context.JobDrawbacks.Add(jobDrawback6);
            context.JobDrawbacks.Add(jobDrawback7);
            context.JobDrawbacks.Add(jobDrawback8);

            #endregion

            context.SaveChanges();

            #region Seed Property Bags (Category, Product)

            var category1 = new Dictionary <string, object>
            {
                ["Name"]   = "Beverages",
                ["FoodId"] = food1.Id
            };

            context.Categories.Add(category1);

            context.SaveChanges();

            var product1 = new Dictionary <string, object>
            {
                ["Name"]       = "Product1",
                ["CategoryId"] = context.Categories.First()["Id"]
            };

            context.Products.Add(product1);

            #endregion

            #region Seed Persons

            var person1 = new Person
            {
                Name         = "BeaverPerson",
                AnimalsLoved = new List <Animal> {
                    beaver1, beaver2, beaver3, beaver4, beaver5
                },
                AnimalsHated = new List <Animal> {
                    deer1, deer2, deer3, deer4, deer5, deer6, deer7, deer8
                }
            };

            context.Persons.Add(person1);

            #endregion

            #region Seed Elves

            var elf1 = new Elf
            {
                Name = "Alabaster Snowball",
                Deer = deer1
            };
            var elf2 = new Elf
            {
                Name = "Bushy Evergreen",
                Deer = deer1
            };
            var elf3 = new Elf
            {
                Name = "Pepper Minstix",
                Deer = deer2
            };
            var elf4 = new Elf
            {
                Name = "Shinny Upatree",
                Deer = deer3
            };
            var elf5 = new Elf
            {
                Name = "Sugarplum Mary",
                Deer = deer4
            };
            var elf6 = new Elf
            {
                Name = "Wunorse Openslae",
                Deer = deer5
            };
            var elf7 = new Elf
            {
                Name = "Grinch",
                Deer = deer6
            };
            var elf8 = new Elf
            {
                Name = "Legolas",
                Deer = deer7
            };
            var elf9 = new Elf
            {
                Name = "Iorveth",
                Deer = deer8
            };

            context.Elves.Add(elf1);
            context.Elves.Add(elf2);
            context.Elves.Add(elf3);
            context.Elves.Add(elf4);
            context.Elves.Add(elf5);
            context.Elves.Add(elf6);
            context.Elves.Add(elf7);
            context.Elves.Add(elf8);
            context.Elves.Add(elf9);

            #endregion

            #region Seed AdditionaInfos

            var additionalInfo1 = new AdditionalInfo()
            {
                Clubs = new List <Club>()
                {
                    club1, club2, club3
                },
                Comment = "Best club ever"
            };
            var additionalInfo2 = new AdditionalInfo()
            {
                Clubs = new List <Club>()
                {
                    club1, club2
                },
                Comment = "Evolution club"
            };
            var additionalInfo3 = new AdditionalInfo()
            {
                Clubs = new List <Club>()
                {
                    club1
                },
                Comment = "Original club"
            };

            context.AdditionalInfos.Add(additionalInfo1);
            context.AdditionalInfos.Add(additionalInfo2);
            context.AdditionalInfos.Add(additionalInfo3);

            #endregion

            context.SaveChanges();

            context.Database.ExecuteSqlRaw(File.ReadAllText(".\\BD\\CreateTVF.sql"));
        }
示例#22
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);
        }
示例#23
0
        /// <summary>
        /// 检查游戏中的牌信息,确定游戏中有哪些丢失的或者重复的牌
        /// </summary>
        /// <param name="aGame">游戏对象</param>
        /// <returns>XML报告</returns>
        public string CardsChecker(SGS.ServerCore.Contest.Global.GameBase aGame)
        {
            List <Card> lst = new List <Card>(CardsHeap);

            lst.AddRange(CardsHeap2);
            ChiefBase s = aGame.GamePlayers[-1].Chief;

            if (s != null)
            {
                ChiefBase t = s;
                do
                {
                    lst.AddRange(aGame.GamePlayers[t].Hands);
                    if (aGame.GamePlayers[t].Armor != null)
                    {
                        lst.Add(aGame.GamePlayers[t].Armor);
                    }
                    if (aGame.GamePlayers[t].Weapon != null)
                    {
                        lst.Add(aGame.GamePlayers[t].Weapon);
                    }
                    if (aGame.GamePlayers[t].Jia1Ma != null)
                    {
                        lst.Add(aGame.GamePlayers[t].Jia1Ma);
                    }
                    if (aGame.GamePlayers[t].Jian1Ma != null)
                    {
                        lst.Add(aGame.GamePlayers[t].Jian1Ma);
                    }
                    lst.AddRange(aGame.GamePlayers[t].Debuff);
                    t = t.Next;
                } while (t != s);
            }
            int[] Buff = new int[TotalCards + 1];
            foreach (Card c in lst)
            {
                Buff[c.ID]++;
            }
            Beaver lost   = new Beaver();
            Beaver excess = new Beaver();
            bool   normal = true;

            for (int i = 1; i <= TotalCards; i++)
            {
                if (Buff[i] > 1)
                {
                    excess.Add(string.Empty, new Beaver(string.Empty, i, Buff[i] - 1));
                    normal = false;
                }
                //new XElement("card",
                //    new XElement("id", i),
                //    new XElement("excess_count", Buff[i] - 1)
                //));
                else if (Buff[i] == 0)
                {
                    lost.Add(string.Empty, i);
                    normal = false;
                }
                //new XElement("card" ,
                //    new XElement("id" , i)
                //    )
                //);
            }
            if (!normal)
            {
                return(new Beaver("cardschecker.wrong_total", lost, excess).ToString());
            }
            return(new Beaver("cardschecker").ToString());
        }
示例#24
0
        /// <summary>
        /// 产生所有玩家状态的XML消息
        /// </summary>
        /// <param name="aChief">产生信息的武将对象,对于请求公共信息,这里使用null</param>
        /// <returns>XML消息</returns>
        internal string MakeEnvironmentXMLReport(ChiefBase aChief)
        {
            Beaver env     = new Beaver();
            Beaver players = new Beaver();
            Beaver chain   = new Beaver();
            Beaver hands   = null;

            foreach (Player p in GB.GamePlayers.All)
            {
                hands = new Beaver("hands");
                Beaver debuffs = new Beaver();
                Beaver skills  = new Beaver();
                foreach (Card c in p.Debuff)
                {
                    debuffs.Add(string.Empty, new Beaver(c.CardEffect.ToString(), c.ID));
                }
                //new XElement("effect", c.CardEffect),
                //new XElement("card", c.ID)
                //));
                debuffs.SetHeaderElementName("debuffs");
                if (p.Chief != null)
                {
                    foreach (SkillBase s in p.Chief.Skills)
                    {
                        skills.Add(string.Empty, new Beaver(string.Empty, s.SkillName, s.SkillStatus.ToString()));  // new XElement("skill", new XElement("name", s.SkillName), new XElement("status", s.SkillStatus)));
                    }
                    if (p.Chief == aChief)
                    {
                        lock (GB.AsynchronousCore.MessageLocker)
                        {
                            foreach (string item in GB.EventChain)
                            {
                                chain.Add(item);
                            }
                        }
                        hands = MakeHandMessage(p);
                    }
                    skills.SetHeaderElementName("skills");
                }
                if (p.Chief != null && p.Chief == aChief)
                {
                    Beaver player = new Beaver();
                    player.Add(string.Empty, p.UID, p.PlayerName, p.Dead.ToString(), p.MaxHealth.ToString(), p.Health.ToString());
                    player.Add(string.Empty, hands, debuffs, skills, p.Chief == null ? string.Empty : p.Chief.ChiefName,
                               p.Chief != null && p.Chief.ChiefStatus == ChiefBase.Status.Majesty ? ChiefBase.Status.Majesty.ToString() : p.Chief != null && p.Dead ? p.Chief.ChiefStatus.ToString() : ChiefBase.Status.Unknown.ToString());
                    if (p.Weapon != null)
                    {
                        player.Add("weapon", p.Weapon.ID);
                    }
                    if (p.Armor != null)
                    {
                        player.Add("armor", p.Armor.ID);
                    }
                    if (p.Jia1Ma != null)
                    {
                        player.Add("jia1", p.Jia1Ma.ID);
                    }
                    if (p.Jian1Ma != null)
                    {
                        player.Add("jian1", p.Jian1Ma.ID);
                    }
                    players.Add(string.Empty, player);
                    //new XElement("player",
                    //    new XElement("UID", p.UID),
                    //    new XElement("name", p.PlayerName),
                    //    new XElement("dead", p.Dead),
                    //    new XElement("max_health", p.MaxHealth),
                    //    new XElement("health", p.Health),
                    //    p.Weapon == null ? new XElement("weapon") :new XElement("weapon", p.Weapon.ID),
                    //    p.Armor == null ?new XElement("armor") :new XElement("armor" , p.Armor.ID),
                    //    p.Jia1Ma == null ?  new XElement("jia1"):new XElement("jia1",p.Jia1Ma.ID),
                    //    p.Jian1Ma == null ? new XElement("jian1") : new XElement("jian1", p.Jian1Ma.ID),
                    //    hands,
                    //    debuffs,
                    //    new XElement("chief_name", p.Chief == null ? string.Empty : p.Chief.ChiefName),
                    //    new XElement("status", p.Chief != null && p.Chief.ChiefStatus == ChiefBase.Status.Majesty ? ChiefBase.Status.Majesty : p.Chief != null && p.Dead ? p.Chief.ChiefStatus : ChiefBase.Status.Unknown),
                    //    skills
                    //));
                }
                else
                {
                    Beaver player = new Beaver();
                    player.Add(string.Empty, p.UID, p.PlayerName, p.Dead.ToString(), p.MaxHealth.ToString(), p.Health.ToString());
                    player.Add(string.Empty, p.Hands.Count, debuffs, skills, p.Chief == null ? string.Empty : p.Chief.ChiefName,
                               p.Chief != null && p.Chief.ChiefStatus == ChiefBase.Status.Majesty ? ChiefBase.Status.Majesty.ToString() : p.Chief != null && p.Dead ? p.Chief.ChiefStatus.ToString() : ChiefBase.Status.Unknown.ToString());
                    if (p.Weapon != null)
                    {
                        player.Add("weapon", p.Weapon.ID);
                    }
                    if (p.Armor != null)
                    {
                        player.Add("armor", p.Armor.ID);
                    }
                    if (p.Jia1Ma != null)
                    {
                        player.Add("jia1", p.Jia1Ma.ID);
                    }
                    if (p.Jian1Ma != null)
                    {
                        player.Add("jian1", p.Jian1Ma.ID);
                    }
                    players.Add(string.Empty, player);
                    //players.Add(
                    //    new XElement("player",
                    //        new XElement("UID", p.UID),
                    //        new XElement("name", p.PlayerName),
                    //        new XElement("dead", p.Dead),
                    //        new XElement("max_health", p.MaxHealth),
                    //        new XElement("health", p.Health),
                    //        p.Weapon == null ? new XElement("weapon") : new XElement("weapon", p.Weapon.ID),
                    //        p.Armor == null ? new XElement("armor") : new XElement("armor", p.Armor.ID),
                    //        p.Jia1Ma == null ? new XElement("jia1") : new XElement("jia1", p.Jia1Ma.ID),
                    //        p.Jian1Ma == null ? new XElement("jian1") : new XElement("jian1", p.Jian1Ma.ID),
                    //        new XElement("hands_count", p.Hands.Count),
                    //        debuffs,
                    //        new XElement("chief_name", p.Chief == null ? string.Empty : p.Chief.ChiefName),
                    //        new XElement("status", p.Chief != null && p.Chief.ChiefStatus == ChiefBase.Status.Majesty ? ChiefBase.Status.Majesty : p.Chief != null && p.Dead ? p.Chief.ChiefStatus : ChiefBase.Status.Unknown),
                    //        skills
                    //    ));
                }
            }
            if (aChief == null)
            {
                lock (GB.EventChainLocker)
                {
                    foreach (string item in GB.EventChain)
                    {
                        chain.Add(string.Empty, item);
                    }
                }
            }

            //env.Add(players);
            //env.Add(new XElement("latency", GB.WaittingData.Latency));
            //env.Add(new XElement("mode", GB.Mode));
            //env.Add(chain);
            //env.Add(new XElement("active" , GB.gData.Active == null ? string.Empty : GB.gData.Active.ChiefName));
            //env.Add(new XElement("status" , GB.gData.ChiefStatus));

            env.Add(string.Empty, players);
            env.Add("common", GB.WaittingData.Latency, GB.Mode.ToString(), chain, GB.gData.Active == null ? string.Empty : GB.gData.Active.ChiefName, GB.gData.ChiefStatus);
            env.SetHeaderElementName("environment");
            return(env.ToString());
        }
示例#25
0
        /// <summary>
        /// 角色求救过程
        /// </summary>
        /// <param name="aChiefSource">伤害的来源,可以是null</param>
        /// <param name="aPreDefunct">求救武将</param>
        /// <param name="aRescuePoint">求救血量</param>
        /// <returns>返回true表示该角色求救失败,false表示求救成功</returns>
        private bool Cry4HelpProc(ChiefBase aChiefSource, ChiefBase aPreDefunct, sbyte aRescuePoint)
        {
            if (aPreDefunct == null || aRescuePoint < 1)
            {
                return(true);
            }
            ChiefBase start = aChiefSource != null ? aChiefSource : aPreDefunct;
            ChiefBase t     = start;
            string    msg   = null;

            do
            {
                MessageCore.AskForResult res = null;
                if (t == aPreDefunct)
                {
                    msg = new Beaver("askfor.cry4help.taoorjiu", t.ChiefName, aPreDefunct.ChiefName, aRescuePoint.ToString()).ToString();
                    //new XElement("askfor.cry4help.taoorjiu",
                    //    new XElement("target", t.ChiefName),
                    //    new XElement("target2", aPreDefunct.ChiefName),
                    //    new XElement("rescuepoint", aRescuePoint)
                    //);
                    res = AsynchronousCore.AskForCards(t, MessageCore.AskForEnum.AskForTaoOrJiu, new AskForWrapper(msg, this), gData);
                    AsynchronousCore.LeadingValid(t);
                }
                else
                {
                    msg = new Beaver("askfor.cry4help.tao", t.ChiefName, aPreDefunct.ChiefName, aRescuePoint.ToString()).ToString();
                    //new XElement("askfor.cry4help.tao",
                    //    new XElement("target", t.ChiefName),
                    //    new XElement("target2", aPreDefunct.ChiefName),
                    //    new XElement("rescuepoint", aRescuePoint)
                    //);
                    res = AsynchronousCore.AskForCards(t, MessageCore.AskForEnum.AskForTao, new AskForWrapper(msg, this), gData);
                    AsynchronousCore.LeadingValid(t);
                }
                ValidityResult(t, ref res);
                if (res.Effect != Card.Effect.None)
                {
                    if (res.Effect == Card.Effect.Tao)
                    {
                        AsynchronousCore.SendMessage(
                            new Beaver("tao", t.ChiefName, aChiefSource.ChiefName, res.SkillName, Card.Cards2Beaver("cards", res.Cards)).ToString());
                        //    new XElement("tao",
                        //        new XElement("from", t.ChiefName),
                        //        new XElement("to", aChiefSource.ChiefName),
                        //        new XElement("skill" , res.SkillName ),
                        //        Card.Cards2XML("cards", res.Cards)
                        //    )
                        //);
                    }
                    else if (res.Effect == Card.Effect.Jiu)
                    {
                        AsynchronousCore.SendMessage(new Beaver("jiu", t.ChiefName, res.SkillName, Card.Cards2Beaver("cards", res.Cards)).ToString());
                        //new XElement("jiu",
                        //    new XElement("from", t.ChiefName),
                        //    new XElement("skill", res.SkillName),
                        //    Card.Cards2XML("cards", res.Cards)
                        //)
                        //);
                    }
                    if (res.Effect == Card.Effect.Tao || res.Effect == Card.Effect.Jiu)
                    {
                        sbyte cost = 1;
                        foreach (ASkill s in aPreDefunct.Skills)
                        {
                            cost = s.CalcRescuePoint(aPreDefunct, res.Leader, res.Effect, cost, gData);
                        }
                        aRescuePoint -= cost;
                        if (res.PlayerLead)
                        {
                            DropCards(true, CardFrom.HandAndEquipage, res.SkillName, res.Cards, res.Effect, t, aPreDefunct, null);
                        }
                        if (aRescuePoint < 1)
                        {
                            break;
                        }
                        continue;
                    }
                }
                t = GamePlayers.NextChief(t);
            } while (!t.IsMe(start));
            --aRescuePoint;
            if (aRescuePoint < 0)
            {
                GamePlayers[aPreDefunct].Health = Math.Abs(aRescuePoint);
                AsynchronousCore.SendMessage(new Beaver("health", aPreDefunct.ChiefName, GamePlayers[aPreDefunct].MaxHealth.ToString(), GamePlayers[aPreDefunct].Health.ToString()).ToString());
                //new XElement("health",
                //    new XElement("target", aPreDefunct.ChiefName),
                //    new XElement("max", GamePlayers[aPreDefunct].MaxHealth),
                //    new XElement("current", GamePlayers[aPreDefunct].Health)
                //    ));
            }
            else
            {
                GamePlayers[aPreDefunct].Health = 0;
            }
            return(aRescuePoint < 0 ? false : true);
        }
示例#26
0
        private static void SeedDb()
        {
            using var context = new AnimalContext();

            context.Database.Delete();
            context.Database.Create();

            #region Seed TPT (Animal)

            var beaver1 = new Beaver
            {
                Name       = "SomeBeavers1",
                Age        = 27,
                Fluffiness = FluffinessEnum.VeryFluffy,
                Size       = 15,
                IpAddress  = "127.0.0.1"
            };
            var beaver2 = new Beaver
            {
                Name       = "SomeBeavers2",
                Age        = 26,
                Fluffiness = FluffinessEnum.Fluffy,
                Size       = 14,
                IpAddress  = "127.0.0.1"
            };
            var beaver3 = new Beaver
            {
                Name       = "SomeBeavers3",
                Age        = 25,
                Fluffiness = FluffinessEnum.NotFluffy,
                Size       = 13,
                IpAddress  = "127.0.0.1"
            };
            var beaver4 = new Beaver
            {
                Name       = "SomeBeavers4",
                Age        = 24,
                Fluffiness = FluffinessEnum.Fluffy,
                Size       = 12,
                IpAddress  = "127.0.0.1"
            };
            var beaver5 = new Beaver
            {
                Name       = "SomeBeavers5",
                Age        = 23,
                Fluffiness = FluffinessEnum.VeryFluffy,
                Size       = 11,
                IpAddress  = "127.0.0.1"
            };

            var crow1 = new Crow
            {
                Name      = "Crowly",
                Age       = 5,
                Color     = "black",
                Size      = 1,
                IpAddress = "127.0.0.1"
            };
            var crow2 = new Crow
            {
                Name      = "Crowly1",
                Age       = 5,
                Color     = "black",
                Size      = 1,
                IpAddress = "127.0.0.1"
            };
            var crow3 = new Crow
            {
                Name      = "Crowly2",
                Age       = 22,
                Color     = "black",
                Size      = 4,
                IpAddress = "127.0.0.1"
            };
            var crow4 = new Crow
            {
                Name      = "Crowly3",
                Age       = 50,
                Color     = "white",
                Size      = 10,
                IpAddress = "127.0.0.1"
            };
            var crow5 = new Crow
            {
                Name      = "Crowly4",
                Age       = 5,
                Color     = "pink",
                Size      = 1,
                IpAddress = "127.0.0.1"
            };

            var deer1 = new Deer
            {
                Name      = "Dasher",
                Age       = 1,
                Horns     = true,
                IpAddress = "127.0.0.1"
            };
            var deer2 = new Deer
            {
                Name      = "Dancer",
                Age       = 2,
                Horns     = true,
                IpAddress = "127.0.0.1"
            };
            var deer3 = new Deer
            {
                Name      = "Prancer",
                Age       = 1,
                Horns     = false,
                IpAddress = "127.0.0.1"
            };
            var deer4 = new Deer
            {
                Name      = "Vixen",
                Age       = 1,
                Horns     = true,
                IpAddress = "127.0.0.1"
            };
            var deer5 = new Deer
            {
                Name      = "Comet",
                Age       = 1,
                Horns     = true,
                IpAddress = "127.0.0.1"
            };
            var deer6 = new Deer
            {
                Name      = "Cupid",
                Age       = 1,
                Horns     = false,
                IpAddress = "127.0.0.1"
            };
            var deer7 = new Deer
            {
                Name      = "Donder ",
                Age       = 1,
                Horns     = true,
                IpAddress = "127.0.0.1"
            };
            var deer8 = new Deer
            {
                Name      = "Blitzen",
                Age       = 1,
                Horns     = true,
                IpAddress = "127.0.0.1"
            };

            context.Beavers.Add(beaver1);
            context.Beavers.Add(beaver2);
            context.Beavers.Add(beaver3);
            context.Beavers.Add(beaver4);
            context.Beavers.Add(beaver5);

            context.Crows.Add(crow1);
            context.Crows.Add(crow2);
            context.Crows.Add(crow3);
            context.Crows.Add(crow4);
            context.Crows.Add(crow5);

            context.Deers.Add(deer1);
            context.Deers.Add(deer2);
            context.Deers.Add(deer3);
            context.Deers.Add(deer4);
            context.Deers.Add(deer5);
            context.Deers.Add(deer6);
            context.Deers.Add(deer7);
            context.Deers.Add(deer8);

            #endregion

            #region Seed Many-to-many (Club)

            var club1 = new Club
            {
                Title   = "TreesWorshipers",
                Animals = new List <Animal> {
                    beaver1, beaver2, beaver3, beaver4, beaver5, crow4
                },
                Locations = new List <Location>
                {
                    new()
                    {
                        Address            = "North America",
                        GeographicLocation = DbGeography.FromText("POINT(-122 47)")
                    },
                    new()
                    {
                        Address            = "Canada",
                        GeographicLocation = DbGeography.FromText("POINT(122 40)")
                    },
                    new()
                    {
                        Address            = "Russia",
                        GeographicLocation = DbGeography.FromText("POINT(1 1)")
                    }
                }
            };

            var club2 = new Club
            {
                Title   = "CornLovers",
                Animals = new List <Animal> {
                    crow1, crow2, crow3, crow4, crow5
                },
                Locations = new List <Location>
                {
                    new()
                    {
                        Address            = "Westeros",
                        GeographicLocation = DbGeography.FromText("POINT(00 00)")
                    }
                }
            };

            var club3 = new Club
            {
                Title   = "ChristmasTeam",
                Animals = new List <Animal>
                {
                    beaver1, beaver2, beaver3, beaver4, beaver5,
                    crow1, crow2, crow3, crow4, crow5,
                    deer1, deer2, deer3, deer4, deer5, deer6, deer7, deer8
                },
                Locations = new List <Location>
                {
                    new()
                    {
                        Address            = "North Pole",
                        GeographicLocation = DbGeography.FromText("POINT(9 9)")
                    }
                }
            };

            context.Clubs.Add(club1);
            context.Clubs.Add(club2);
            context.Clubs.Add(club3);

            #endregion

            #region Seed Grades

            var grade1 = new Grade
            {
                TheGrade = 5,
                Club     = club1,
                Animal   = beaver1
            };
            var grade2 = new Grade
            {
                TheGrade = 4,
                Club     = club1,
                Animal   = beaver2
            };
            var grade3 = new Grade
            {
                TheGrade = 3,
                Club     = club1,
                Animal   = beaver3
            };
            var grade4 = new Grade
            {
                TheGrade = 3,
                Club     = club1,
                Animal   = beaver4
            };
            var grade5 = new Grade
            {
                TheGrade = 2,
                Club     = club1,
                Animal   = beaver5
            };
            var grade6 = new Grade
            {
                TheGrade = 1,
                Club     = club1,
                Animal   = crow4
            };
            var grade7 = new Grade
            {
                TheGrade = 5,
                Club     = club2,
                Animal   = crow1
            };
            var grade8 = new Grade
            {
                TheGrade = 4.5,
                Club     = club2,
                Animal   = crow2
            };
            var grade9 = new Grade
            {
                TheGrade = 2.1,
                Club     = club2,
                Animal   = crow3
            };
            var grade10 = new Grade
            {
                TheGrade = 4.3,
                Club     = club2,
                Animal   = crow4
            };

            var grade27 = new Grade
            {
                TheGrade = 4.5,
                Club     = club3,
                Animal   = beaver1
            };
            var grade26 = new Grade
            {
                TheGrade = 4.5,
                Club     = club3,
                Animal   = beaver2
            };
            var grade25 = new Grade
            {
                TheGrade = 4.5,
                Club     = club3,
                Animal   = beaver3
            };
            var grade24 = new Grade
            {
                TheGrade = 4.5,
                Club     = club3,
                Animal   = beaver4
            };
            var grade23 = new Grade
            {
                TheGrade = 4.5,
                Club     = club3,
                Animal   = beaver5
            };
            var grade22 = new Grade
            {
                TheGrade = 4.5,
                Club     = club3,
                Animal   = crow1
            };
            var grade21 = new Grade
            {
                TheGrade = 3.5,
                Club     = club3,
                Animal   = crow2
            };
            var grade20 = new Grade
            {
                TheGrade = 2.5,
                Club     = club3,
                Animal   = crow3
            };
            var grade19 = new Grade
            {
                TheGrade = 1.5,
                Club     = club3,
                Animal   = crow4
            };
            var grade28 = new Grade
            {
                TheGrade = 4.9,
                Club     = club3,
                Animal   = crow5
            };
            var grade11 = new Grade
            {
                TheGrade = 4.8,
                Club     = club3,
                Animal   = deer1
            };
            var grade12 = new Grade
            {
                TheGrade = 4.7,
                Club     = club3,
                Animal   = deer2
            };
            var grade13 = new Grade
            {
                TheGrade = 4.6,
                Club     = club3,
                Animal   = deer3
            };
            var grade14 = new Grade
            {
                TheGrade = 4.5,
                Club     = club3,
                Animal   = deer4
            };
            var grade15 = new Grade
            {
                TheGrade = 4.4,
                Club     = club3,
                Animal   = deer5
            };
            var grade16 = new Grade
            {
                TheGrade = 4.3,
                Club     = club3,
                Animal   = deer6
            };
            var grade17 = new Grade
            {
                TheGrade = 4.2,
                Club     = club3,
                Animal   = deer7
            };
            var grade18 = new Grade
            {
                TheGrade = 4.1,
                Club     = club3,
                Animal   = deer8
            };

            context.Grades.Add(grade1);
            context.Grades.Add(grade2);
            context.Grades.Add(grade3);
            context.Grades.Add(grade4);
            context.Grades.Add(grade5);
            context.Grades.Add(grade6);
            context.Grades.Add(grade7);
            context.Grades.Add(grade8);
            context.Grades.Add(grade9);
            context.Grades.Add(grade10);
            context.Grades.Add(grade11);
            context.Grades.Add(grade12);
            context.Grades.Add(grade13);
            context.Grades.Add(grade14);
            context.Grades.Add(grade15);
            context.Grades.Add(grade16);
            context.Grades.Add(grade17);
            context.Grades.Add(grade18);
            context.Grades.Add(grade19);
            context.Grades.Add(grade20);
            context.Grades.Add(grade21);
            context.Grades.Add(grade22);
            context.Grades.Add(grade23);
            context.Grades.Add(grade24);
            context.Grades.Add(grade25);
            context.Grades.Add(grade26);
            context.Grades.Add(grade27);
            context.Grades.Add(grade28);

            #endregion

            #region Seed Jobs

            var job1 = new Job
            {
                Title   = "Builder",
                Salary  = 1,
                Animals = new List <Animal>
                {
                    beaver1, beaver2, beaver3, beaver4, beaver5
                }
            };
            var job2 = new Job
            {
                Title   = "Messenger",
                Salary  = 10,
                Animals = new List <Animal>
                {
                    crow1, crow2, crow3, crow4
                }
            };
            var job3 = new Job
            {
                Title   = "Delivery",
                Salary  = 100,
                Animals = new List <Animal>
                {
                    deer1, deer2, deer3, deer4, deer5, deer6, deer7, deer8
                }
            };

            context.Jobs.Add(job1);
            context.Jobs.Add(job2);
            context.Jobs.Add(job3);

            #endregion

            #region Seed TPH (Food)

            var food1 = new NormalFood
            {
                Title  = "Elm",
                Animal = beaver1,
                Taste  = Taste.Normal
            };
            var food2 = new VeganFood
            {
                Title    = "Daphne laureola",
                Animal   = beaver2,
                Calories = 100
            };
            var food3 = new VeganFood
            {
                Title    = "Carpinus betulus",
                Animal   = beaver3,
                Calories = 1001
            };
            var food4 = new VeganFood
            {
                Title    = "Hornbeam",
                Animal   = beaver4,
                Calories = 101
            };
            var food5 = new NormalFood
            {
                Title  = "Pizza",
                Animal = beaver5,
                Taste  = Taste.Excellent
            };
            var food6 = new NormalFood
            {
                Title  = "Steak",
                Animal = crow1,
                Taste  = Taste.Excellent
            };
            var food7 = new NormalFood
            {
                Title  = "Meat",
                Animal = crow2,
                Taste  = Taste.Good
            };
            var food8 = new NormalFood
            {
                Title  = "Pizza",
                Animal = crow3,
                Taste  = Taste.VeryGood
            };
            var food9 = new VeganFood
            {
                Title    = "Corn",
                Animal   = crow4,
                Calories = 1
            };
            var food10 = new NormalFood
            {
                Title  = "Pizza",
                Animal = crow5,
                Taste  = Taste.Normal
            };
            var food11 = new VeganFood
            {
                Title    = "Pizza",
                Animal   = deer1,
                Calories = 10
            };
            var food12 = new VeganFood
            {
                Title    = "Pizza",
                Animal   = deer2,
                Calories = 10
            };
            var food13 = new VeganFood
            {
                Title    = "Pizza",
                Animal   = deer3,
                Calories = 10
            };
            var food14 = new VeganFood
            {
                Title    = "Pizza",
                Animal   = deer4,
                Calories = 10
            };
            var food15 = new VeganFood
            {
                Title    = "Pizza",
                Animal   = deer5,
                Calories = 10
            };
            var food16 = new VeganFood
            {
                Title    = "Pizza",
                Animal   = deer6,
                Calories = 10
            };
            var food17 = new NormalFood
            {
                Title  = "Elves",
                Animal = deer7,
                Taste  = Taste.Excellent
            };
            var food18 = new VeganFood
            {
                Title    = "Pizza",
                Animal   = deer8,
                Calories = 10
            };

            context.Food.Add(food1);
            context.Food.Add(food2);
            context.Food.Add(food3);
            context.Food.Add(food4);
            context.Food.Add(food5);
            context.Food.Add(food6);
            context.Food.Add(food7);
            context.Food.Add(food8);
            context.Food.Add(food9);
            context.Food.Add(food10);
            context.Food.Add(food11);
            context.Food.Add(food12);
            context.Food.Add(food13);
            context.Food.Add(food14);
            context.Food.Add(food15);
            context.Food.Add(food16);
            context.Food.Add(food17);
            context.Food.Add(food18);

            #endregion

            #region Seed Many-to-many old style (Drawback)

            var drawback1 = new Drawback
            {
                Title = "Crowdy",
                Foods = new List <Food>
                {
                    food1, food2, food3, food4, /*food5,*/ food6, food7, food8, food9, food10, food11, food12, food13,
                    food14, food15, food16, food17, food18
                },
                Clubs = new List <Club>
                {
                    club1, club2, club3
                },
                Consequence = new Consequence
                {
                    Name = "Nervousness"
                },
                DrawbackDetail = new DrawbackDetails
                {
                    DateCreated = DateTime.Now,
                    Description = "the quality or state of being nervous"
                }
            };
            var drawback2 = new Drawback
            {
                Title = "Windy",
                Foods = new List <Food>
                {
                    food1, food2, food3, food4, food5, food6, food7, food8, food9, food10, food11, food12, food13,
                    food14, food15, food16, food17, food18
                },
                Clubs = new List <Club>
                {
                    club1, club2, club3
                },
                Consequence = new Consequence
                {
                    Name = "Teleportation to Land of Oz"
                },
                DrawbackDetail = new DrawbackDetails
                {
                    DateCreated = DateTime.Now,
                    Description = "hallucination"
                }
            };
            var drawback3 = new Drawback
            {
                Title = "Soggy",
                Foods = new List <Food>
                {
                    food1, food2, food3, food4, food5, food6, food7, food8, food9, food10, food11, food12, food13,
                    food14, food15, food16, food17, food18
                },
                Clubs = new List <Club>
                {
                    club1, club2, club3
                },
                Consequence = new Consequence
                {
                    Name = "Wet clothes"
                },
                DrawbackDetail = new DrawbackDetails
                {
                    DateCreated = DateTime.Now,
                    Description = "cold"
                }
            };
            var drawback4 = new Drawback
            {
                Title = "Hardy",
                Foods = new List <Food>
                {
                    food1, food2, food3, food4, food5, food6, food7, food8, food9, food10, food11, food12, food13,
                    food14, food15, food16, food17, food18
                },
                Clubs = new List <Club>
                {
                    club1, club2, club3
                },
                Consequence = new Consequence
                {
                    Name = "Sadness"
                },
                DrawbackDetail = new DrawbackDetails
                {
                    DateCreated = DateTime.Now,
                    Description = "the condition or quality of being sad"
                }
            };

            context.Drawbacks.Add(drawback1);
            context.Drawbacks.Add(drawback2);
            context.Drawbacks.Add(drawback3);
            context.Drawbacks.Add(drawback4);

            var jobDrawback1 = new JobDrawback
            {
                Job      = job1,
                Drawback = drawback1
            };
            var jobDrawback2 = new JobDrawback
            {
                Job      = job1,
                Drawback = drawback2
            };
            var jobDrawback3 = new JobDrawback
            {
                Job      = job1,
                Drawback = drawback3
            };
            var jobDrawback4 = new JobDrawback
            {
                Job      = job1,
                Drawback = drawback4
            };
            var jobDrawback5 = new JobDrawback
            {
                Job      = job2,
                Drawback = drawback1
            };
            var jobDrawback6 = new JobDrawback
            {
                Job      = job2,
                Drawback = drawback2
            };
            var jobDrawback7 = new JobDrawback
            {
                Job      = job3,
                Drawback = drawback1
            };
            var jobDrawback8 = new JobDrawback
            {
                Job      = job3,
                Drawback = drawback2
            };

            context.JobDrawbacks.Add(jobDrawback1);
            context.JobDrawbacks.Add(jobDrawback2);
            context.JobDrawbacks.Add(jobDrawback3);
            context.JobDrawbacks.Add(jobDrawback4);
            context.JobDrawbacks.Add(jobDrawback5);
            context.JobDrawbacks.Add(jobDrawback6);
            context.JobDrawbacks.Add(jobDrawback7);
            context.JobDrawbacks.Add(jobDrawback8);

            #endregion

            #region Seed Persons

            var person1 = new Person
            {
                Name         = "BeaverPerson",
                AnimalsLoved = new List <Animal> {
                    beaver1, beaver2, beaver3, beaver4, beaver5
                },
                AnimalsHated = new List <Animal> {
                    deer1, deer2, deer3, deer4, deer5, deer6, deer7, deer8
                }
            };

            context.Persons.Add(person1);

            #endregion

            context.SaveChanges();
        }
示例#27
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);
        }
示例#28
0
        /// <summary>
        /// 开启逻辑循环
        /// </summary>
        /// <param name="aChiefStart">设置首个进入回合的武将</param>
        /// <param name="aIgnoreTakeCards">是否忽略一开始对玩家每人发4张牌的过程</param>
        protected void LogicLoop(ChiefBase aChiefStart, bool aIgnoreTakeCards)
        {
            AsynchronousCore.SendEnvironmentMessage();
            ChiefBase target = aChiefStart; //target , 问询的目标
            ChiefBase loop   = aChiefStart;

            do
            {
                foreach (ASkill s in loop.Skills)
                {
                    s.OnCreate(loop);
                }
                loop.ReportSkills(gData);
                loop = loop.Next;
            } while (loop != target);

            if (!aIgnoreTakeCards)
            {
                loop = aChiefStart;
                //轮询给每个武将4张牌
                do
                {
                    TakeingCards(loop, 4);
                    loop = loop.Next;
                } while (loop != target);
            }
            RefereeProc();
            //游戏的轮询
            do
            {
                //复位游戏规则控制数据
                gData      = new GlobalData();
                gData.Game = this;
                //设置执行回合的武将
                gData.Active = target;
                //若武将有武器,尝试让该武将的武器配置玩家的某些进攻性属性
                if (GamePlayers[target].Weapon != null)
                {
                    Weapon.ActiveWeapon(GamePlayers[target].Weapon.CardEffect, gData);
                }
                //改变武将状态-回合开始
                AsynchronousCore.SendChangeStatusMessage(target, MessageCore.PlayerStatus.Start);
                {
                    gData.ChiefStatus = "turnStart";
                    //通知该武将的技能该武将进入回合开始阶段
                    foreach (ASkill s in target.Skills)
                    {
                        s.BeforeTurnStart(target, gData);
                    }
                    //事件结束
                    ClearEventProc();
                }
                //改变武将状态-判定
                AsynchronousCore.SendChangeStatusMessage(target, MessageCore.PlayerStatus.Judgment);
                {
                    gData.ChiefStatus = "judgment";
                    //执行武将判定区的判定
                    Judgement(target, gData);
                    //事件结束
                    ClearEventProc();
                }
                foreach (ASkill s in target.Skills)
                {
                    s.BeforeTakeCards(target, gData);
                }
                if (gData.Take)
                {
                    //改变武将状态-拿牌
                    AsynchronousCore.SendChangeStatusMessage(target, MessageCore.PlayerStatus.Take);
                    {
                        gData.ChiefStatus = "take";
                        foreach (ASkill s in target.Skills)
                        {
                            s.TakingCards(target, gData);
                        }
                        //从牌堆取 gData.TakeCardsCount 张牌
                        Card[] ret = TakeingCards(target, gData.TakeCardsCount);
                        //事件结束
                        ClearEventProc();
                    }
                }
                //武将状态-出牌
                //要求 允许出牌且玩家未死亡
                if (gData.Lead && !GamePlayers[target].Dead)
                {
                    //改变武将状态-出牌
                    AsynchronousCore.SendChangeStatusMessage(target, MessageCore.PlayerStatus.Lead);
                    gData.ChiefStatus = "lead";
                    foreach (ASkill s in target.Skills)
                    {
                        s.Leading(target, gData);
                    }
                    //这里是一个循环,不断问询玩家出牌,若玩家Effect为None,就跳过这个阶段
                    while (!GamePlayers[target].Dead)
                    {
                        //重置全局数据中的活动部分
                        gData.Reset();

                        string msg = new Beaver("askfor.aggressive", target.ChiefName).ToString();
                        //new XElement("askfor.aggressive",
                        //    new XElement("target", target.ChiefName)
                        //);
                        //开始问询
                        MessageCore.AskForResult res = AsynchronousCore.AskForCards(target, MessageCore.AskForEnum.Aggressive, new AskForWrapper(msg, this), gData);
                        //是否跳过该阶段
                        if (res.Effect == Card.Effect.None)
                        {
                            AsynchronousCore.SendClearMessage();
                            break;
                        }
                        //出牌进行处理,并反馈是否符合规则
                        if (!LeadEvent(res))
                        {
                            ClearEventProc();
                            break;
                        }
                        else
                        {
                            ClearEventProc();
                        }
                    }
                }

                //在进入弃牌阶段前,通知武将的技能
                foreach (ASkill s in target.Skills)
                {
                    s.BeforeAbandonment(target, gData);
                }

                //允许武将进入弃牌阶段
                if (gData.Abandonment)
                {
                    //改变武将状态-弃牌
                    AsynchronousCore.SendChangeStatusMessage(target, MessageCore.PlayerStatus.Abandoment);
                    {
                        gData.ChiefStatus = "abandoment";
                        //玩家弃牌的问询
                        if (!Abandonment(target))
                        {
                            AsynchronousCore.LeadingInvalid(target);
                        }
                        else
                        {
                            AsynchronousCore.LeadingValid(target);
                        }
                        ClearEventProc();
                    }
                }
                //玩家回合结束前通知武将的技能
                foreach (ASkill s in target.Skills)
                {
                    s.AfterTurnEnd(target, gData);
                }
                //牌检查器报告情况
                AsynchronousCore.SendMessage(CardsHeap.CardsChecker(this));
            } while ((target = target.Next) != null); //target=下一个玩家

            //-----------------------------------------------------------
            //如果玩家都死光了...没分胜负,我想这里会有异常吧
        }
 void removeBeaver(Beaver beav)
 {
     beav.destroyListener -= removeBeaver;
     m_listBeavers.Remove (beav);
     m_beaverKilledTotal++;
     if (onBeaverKilledListener != null) {
         onBeaverKilledListener(m_beaverKilledTotal);
     }
 }
示例#30
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);
        }
 private void Awake()
 {
     beaver   = GetComponent <Beaver>();
     animator = GetComponent <Animator>();
 }