예제 #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);
        }
예제 #2
0
 public override void OnChiefHarmed(GlobalEvent.EventRecoard aSourceEvent, ChiefBase aSource, ChiefBase aTarget, GlobalData aData, sbyte aDamage)
 {
     if (aSource != null && aData.Game.GamePlayers[aSource].HasCard)
     {
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aTarget, this));
         MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aTarget);
         if (res.YN == true && aData.Game.GamePlayers[aSource].HasCard)
         {
             aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aTarget, this, new ChiefBase[] { aSource }, new Card[] { }));
             res = aData.Game.AsynchronousCore.AskForCards(aTarget, MessageCore.AskForEnum.TargetCard, aSource);
             if (res.Cards.Count() == 0)
             {
                 if (aData.Game.GamePlayers[aSource].HasCard)
                 {
                     res = new MessageCore.AskForResult(false, aTarget, new ChiefBase[] { }, new Card[] { aData.Game.AutoSelect(aSource) }, Card.Effect.GuoHeChaiQiao, false, false, string.Empty);
                 }
                 else
                 {
                     return;
                 }
             }
             //检查牌的来源知否是正确
             if (!aData.Game.GamePlayers[aSource].HasCardsInHandOrEquipage(res.Cards))
             {
                 return;
             }
             aData.Game.AsynchronousCore.SendStealMessage(aSource, aTarget, res.Cards, aData.Game.GamePlayers);
             aData.Game.Move(aTarget, aSource, res.Cards);
         }
     }
 }
예제 #3
0
 public static void Main()
 {
     #region Конфигурация
     StandardKernel kernel = new StandardKernel();
     kernel.Bind <IStoreData>().To <StoreDataMethods>();
     kernel.Bind <ICreatorJson>().To <CreatorJsonMethods>();
     Bot = SimpleTBot.ConfigureBot(ConfigurationManager.AppSettings[ConstantStrings.TelegaToken]);
     WeatherCore.SetWeatherApi(ConfigurationManager.AppSettings[ConstantStrings.WeatherToken]);
     OpenWeatherCore.SetWeatherApi(ConfigurationManager.AppSettings[ConstantStrings.OpenWeatherMapToken]);
     jCreator = kernel.Get <ICreatorJson>();
     jCreator.SetJsonPath(Environment.CurrentDirectory + "//LocalizationStrings.json");
     localization         = jCreator.ReadConfig <LocalizationModel>();
     localization.Current = ConfigurationManager.AppSettings[ConstantStrings.Localization] == "ru" ? localization.Ru : localization.En;
     kernel.Get <IStoreData>().StoreData(localization, ConstantStrings.Localization);
     MessageCore.GetStoreDataFromKernel(kernel);
     WebApiCore.GetStoreDataFromKernel(kernel);
     KeyboardCore.GetStoreDataFromKernel(kernel);
     #endregion
     #region Запуск бота
     Bot.OnMessage       += BotOnMessage;
     Bot.OnCallbackQuery += BotOnCallbackQuery;
     Bot.StartReceiving();
     Console.WriteLine(localization.Current.BotStartingConsole);
     #endregion
     #region Остановка бота
     Console.ReadLine();
     Bot.StopReceiving();
     Console.WriteLine(localization.Current.BotStoppedConsole);
     Console.ReadLine();
     #endregion
 }
예제 #4
0
 public override void TakingCards(ChiefBase aChief, GlobalData aData)
 {
     aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aChief, this));
     MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aChief);
     if (res.YN)
     {
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { }));
         res = aData.Game.AsynchronousCore.AskForCardsWithCount(aChief, 0);
         if (res.Targets.Count() > 2 || res.Targets.Count() == 0)
         {
             return;
         }
         else
         {
             foreach (ChiefBase c in res.Targets)
             {
                 if (c.IsMe(aChief) || aData.Game.GamePlayers[c].Dead)
                 {
                     return;
                 }
             }
         }
         aData.TakeCardsCount = 0;
         foreach (ChiefBase c in res.Targets)
         {
             Card item = aData.Game.AutoSelect(c);
             aData.Game.AsynchronousCore.SendStealMessage(c, aChief, new Card[] { item }, aData.Game.GamePlayers);
             aData.Game.Move(c, aChief, new Card[] { item });
             //aData.Game.EventNode(false, GlobalEvent.CardFrom.Hand, SkillName, new Card[] { item }, Card.Effect.None, c, null, null);
             //aData.Game.GamePlayers[aChief].Hands.Add(item.GetOriginalCard());
         }
     }
 }
예제 #5
0
 public override void OnRemoveCards(ChiefBase aChief, GlobalData aData)
 {
     if (aData.Game.GamePlayers[aChief].Hands.Count == 0)
     {
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] {}, new Card[] {}));
         aData.Game.TakeingCards(aChief, 1);
     }
 }
예제 #6
0
 /// <summary>
 /// Колбек нажатия кнопок
 /// </summary>
 /// <param name="sender">отправитель</param>
 /// <param name="e">аргументы</param>
 private static void BotOnCallbackQuery(object sender, CallbackQueryEventArgs e)
 {
     if (e.CallbackQuery.Data.Contains(nameof(WeatherLocationModel)))
     {
         var modelData = e.CallbackQuery.Data.Replace($"{nameof(WeatherLocationModel)} is :", string.Empty);
         WeatherLocationModel locationModel = JsonConvert.DeserializeObject <WeatherLocationModel>(modelData);
         MessageCore.SendWeatherAnswer(locationModel, e.CallbackQuery.Message.Chat.Id);
     }
 }
예제 #7
0
        public override void OnChiefHarmed(GlobalEvent.EventRecoard aSourceEvent, ChiefBase aSource, ChiefBase aTarget, GlobalData aData, sbyte aDamage)
        {
            int i = 0;

            for (i = 0; i < aDamage; i++)
            {
                aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aTarget, this));
                MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aTarget);
                if (res.YN)
                {
                    aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aTarget, this, new ChiefBase[] { }, new Card[] { }));
                    Card[] cards = aData.Game.TakeingCards(aTarget, 2);
                    aTarget.SlotsBuffer[SkillName].Cards.Clear();
                    aTarget.SlotsBuffer[SkillName].Cards.AddRange(cards);
                    int times = 0;
                    while (aTarget.SlotsBuffer[SkillName].Cards.Count > 0 && times < 2)
                    {
                        aData.Game.AsynchronousCore.SendPrivateMessageWithOpenMessage(aTarget,
                                                                                      new Beaver("askfor.yiji.cards", aTarget.ChiefName, Card.Cards2Beaver("cards", aTarget.SlotsBuffer[SkillName].Cards.ToArray())).ToString(),
                                                                                      //new XElement("askfor.yiji.cards",
                                                                                      //    new XElement("target", aTarget.ChiefName),
                                                                                      //    Card.Cards2XML("cards", aTarget.SlotsBuffer[SkillName].Cards.ToArray())
                                                                                      //    ),
                                                                                      new Beaver("askfor.yiji.cards", aTarget.ChiefName).ToString(),
                                                                                      //new XElement("askfor.yiji.cards",
                                                                                      //    new XElement("target", aTarget.ChiefName)
                                                                                      //    ),
                                                                                      aData.Game.GamePlayers);
                        res = aData.Game.AsynchronousCore.AskForCardsWithCount(aTarget, -1);
                        if (res.Targets.Count() != 1 || res.Targets[0] == aTarget || aData.Game.GamePlayers[res.Targets[0]].Dead)
                        {
                            break;
                        }
                        foreach (Card c in res.Cards)
                        {
                            if (!aTarget.SlotsBuffer[SkillName].Cards.Contains(c))
                            {
                                break;
                            }
                        }
                        aData.Game.AsynchronousCore.SendGiveMessage(aTarget, res.Targets[0], res.Cards, aData.Game.GamePlayers);
                        aData.Game.DropCards(false, GlobalEvent.CardFrom.Hand, SkillName, res.Cards, Card.Effect.None, aTarget, null, null);
                        aData.Game.GamePlayers[res.Targets[0]].Hands.AddRange(res.Cards);
                        foreach (Card c in res.Cards)
                        {
                            aTarget.SlotsBuffer[SkillName].Cards.Remove(c);
                        }
                        times++;
                    }
                    aTarget.SlotsBuffer[SkillName].Cards.Clear();
                }
                else
                {
                    break;
                }
            }
        }
예제 #8
0
 public override MessageCore.AskForResult AskFor(ChiefBase aChief, MessageCore.AskForEnum aAskFor, GlobalData aData)
 {
     if (SkillName == aData.Game.Response.SkillName && SkillStatus == SkillEnabled.Enable)
     {
         SwitchSkillStatus(aChief, SkillEnabled.Disable, aData);
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, aData.Game.Response.Cards));
         return(new MessageCore.AskForResult(false, aChief, new ChiefBase[] { }, aData.Game.Response.Cards, Card.Effect.Shan, false, true, SkillName));
     }
     return(null);
 }
예제 #9
0
 public override MessageCore.AskForResult AskFor(ChiefBase aChief, MessageCore.AskForEnum aAskFor, GlobalData aData)
 {
     if (aAskFor == MessageCore.AskForEnum.Aggressive && SkillStatus == SkillEnabled.Enable)
     {
         SwitchSkillStatus(aChief, SkillEnabled.Disable, aData);
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, Player.Players2Chiefs(aData.Game.Response.Targets), aData.Game.Response.Cards));
         return(new MessageCore.AskForResult(false, aChief, Player.Players2Chiefs(aData.Game.Response.Targets), aData.Game.Response.Cards, Card.Effect.GuoHeChaiQiao, false, true, SkillName));
     }
     return(null);
 }
예제 #10
0
 public override MessageCore.AskForResult AskFor(SGS.ServerCore.Contest.Data.ChiefBase aChief, SGS.ServerCore.Contest.Global.MessageCore.AskForEnum aAskFor, SGS.ServerCore.Contest.Data.GlobalData aData)
 {
     if (aData.Game.Response.SkillName == SkillName && SkillStatus == SkillEnabled.Enable)
     {
         SwitchSkillStatus(aChief, SkillEnabled.Disable, aData);
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, aData.Game.Response.Cards));
         return(new MessageCore.AskForResult(aData.Game.Response.IsTimeout, aChief, Player.Players2Chiefs(aData.Game.Response.Targets), aData.Game.Response.Cards, Card.Effect.Sha, aData.Game.Response.Answer, true, SkillName));
     }
     return(null);
 }
예제 #11
0
 public override void BeforeTurnStart(ChiefBase aChief, GlobalData aData)
 {
     aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aChief, this));
     MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aChief);
     if (res.YN)
     {
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { }));
         Active = true;
         aData.TakeCardsCount--;
     }
 }
예제 #12
0
        void callbackStateMessageHandler(object sender, BasicDeliverEventArgs eventArgs)
        {
            var body    = eventArgs.Body;
            var message = Encoding.UTF8.GetString(body);

            Console.WriteLine(" State Message Arrived: {0}", message);
            SensorStateMessage ssm    = MessageCore.fromJSON <SensorStateMessage>(message);
            SensorCore         sensor = getSensorByName(ssm.Id);

            ((SensorProxy)sensor).setTriggeredState(ssm.Triggered);
        }
예제 #13
0
 public override sbyte CalcRescuePoint(ChiefBase aChief, ChiefBase aRescuer, Card.Effect aEffect, sbyte aOldPoint, GlobalData aData)
 {
     if (aRescuer != null && aData.Game.GamePlayers[aRescuer].Chief.ChiefCamp == ChiefBase.Camp.Wu && aEffect == Card.Effect.Tao)
     {
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { }));
         return(++aOldPoint);
     }
     else
     {
         return(aOldPoint);
     }
 }
예제 #14
0
 public override void OnChiefJudgementCardTakeEffect(ChiefBase aChief, Card aCard, ref bool aEnableSendToBin, GlobalData aData)
 {
     if (aCard.CardEffect == Card.Effect.LuoShen)
     {
         if (aCard.CardHuaSe == Card.Suit.CaoHua || aCard.CardHuaSe == Card.Suit.HeiTao)
         {
             aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { aCard }));
             aEnableSendToBin = false;
             aData.Game.GamePlayers[aChief].Hands.Add(aCard.GetOriginalCard());
         }
     }
 }
예제 #15
0
 public override MessageCore.AskForResult AskFor(ChiefBase aChief, MessageCore.AskForEnum aAskFor, GlobalData aData)
 {
     if (aAskFor == MessageCore.AskForEnum.Aggressive && SkillStatus == SkillEnabled.Enable)
     {
         SwitchSkillStatus(aChief, SkillEnabled.Disable, aData);
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { }));
         aData.Game.DamageHealth(aChief, 1, null, new GlobalEvent.EventRecoard(aChief, aChief, new Card[] { }, Card.Effect.Skill, SkillName));
         aData.Game.TakeingCards(aChief, 2);
         return(new MessageCore.AskForResult(false, aChief, new ChiefBase[] { }, new Card[] { }, Card.Effect.Skill, false, false, SkillName));
     }
     return(null);
 }
예제 #16
0
        public override int CalcAskforTimes(ChiefBase aChief, ChiefBase aTarget, Card.Effect aEffect, int aOldTimes, GlobalData aData)
        {
            switch (aEffect)
            {
            case Card.Effect.Sha:
            case Card.Effect.JueDou:
                aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { aTarget }, new Card[] { }));
                return(2);

            default:
                return(aOldTimes);
            }
        }
예제 #17
0
 public override void BeforeAbandonment(ChiefBase aChief, GlobalData aData)
 {
     OnLeading = false;
     if (!UseShaEffect)
     {
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aChief, this));
         MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aChief);
         if (res.YN)
         {
             aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { }));
             aData.Abandonment = false;
         }
     }
 }
예제 #18
0
 public override MessageCore.AskForResult AskFor(ChiefBase aChief, MessageCore.AskForEnum aAskFor, GlobalData aData)
 {
     if (aData.Game.Response.SkillName == SkillName)
     {
         if (SkillStatus == SkillEnabled.Enable)
         {
             SwitchSkillStatus(aChief, SkillEnabled.Disable, aData);
             aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, aData.Game.Response.Cards));
             aData.Game.DropCards(true, GlobalEvent.CardFrom.HandAndEquipage, SkillName, aData.Game.Response.Cards, Card.Effect.Tao, aChief, null, null);
             return(new MessageCore.AskForResult(false, aChief, new ChiefBase[] { }, aData.Game.Response.Cards, Card.Effect.Tao, false, false, SkillName));
         }
     }
     return(null);
 }
예제 #19
0
        static void Main(string[] args)
        {
            MessageCore.PrivateSender = (target, message) => System.Console.WriteLine($"Private {target} {message}");
            MessageCore.GroupSender   = (target, message) => System.Console.WriteLine($"Group {target} {message}");
            MessageCore.AtCoder       = s => s;


            while (true)
            {
                var messages = System.Console.ReadLine().Split(' ');
                var msg      = new Message("1", messages[0], messages[1]);
                MessageCore.ProcessMessage(msg);
            }
        }
예제 #20
0
 public override MessageCore.AskForResult AskFor(ChiefBase aChief, MessageCore.AskForEnum aAskFor, GlobalData aData)
 {
     if (aData.Game.Response.SkillName == SkillName)
     {
         if (SkillStatus == SkillEnabled.Enable)
         {
             SwitchSkillStatus(aChief, SkillEnabled.Disable, aData);
             aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, Player.Players2Chiefs(aData.Game.Response.Targets), aData.Game.Response.Cards));
             aData.Game.DropCards(true, GlobalEvent.CardFrom.Hand, SkillName, aData.Game.Response.Cards, Card.Effect.Skill, aChief, null, null);
             return(new MessageCore.AskForResult(false, aChief, new ChiefBase[] { aData.Game.Response.Targets[0].Chief, aData.Game.Response.Targets[1].Chief }, new Card[] { }, Card.Effect.JueDou, false, false, SkillName));
         }
     }
     return(null);
 }
예제 #21
0
 public override MessageCore.AskForResult AskFor(ChiefBase aChief, MessageCore.AskForEnum aAskFor, GlobalData aData)
 {
     if (aData.Game.Response.SkillName == SkillName)
     {
         if (SkillStatus == SkillEnabled.Enable && aData.Game.GamePlayers[aChief].HasHand)
         {
             SwitchSkillStatus(aChief, SkillEnabled.Disable, aData);
             aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, Player.Players2Chiefs(aData.Game.Response.Targets), new Card[] { }));
             ChiefBase target = aData.Game.Response.Targets[0].Chief;
             aData.Game.AsynchronousCore.SendMessage(new Beaver("askfor.fanjian.suit", target.ChiefName).ToString()); // new XElement("askfor.fanjian.suit", new XElement("target", target.ChiefName)));
             MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForCards(target, MessageCore.AskForEnum.Suit, target);
             if (res.Cards.Count() == 0)
             {
                 aData.Game.AsynchronousCore.SendMessage(new Beaver("fanjian.suit", target.ChiefName, Card.Cards2Beaver("cards", new Card[] { CardHeap.HeiTao })).ToString()); // new XElement("fanjian.suit", new XElement("target", target.ChiefName), Card.Cards2XML("cards", new Card[] { CardHeap.HeiTao })));
             }
             else
             {
                 aData.Game.AsynchronousCore.SendMessage(new Beaver("fanjian.suit", target.ChiefName, Card.Cards2Beaver("cards", res.Cards)).ToString());   // new XElement("fanjian.suit", new XElement("target", target.ChiefName), Card.Cards2XML("cards", res.Cards)));
             }
             System.Threading.Thread.Sleep(10);
             aData.Game.AsynchronousCore.SendMessage(new Beaver("askfor.fanjian.card", target.ChiefName, aChief.ChiefName).ToString()); //  new XElement("askfor.fanjian.card", new XElement("target", target.ChiefName), new XElement("target2", aChief)));
             MessageCore.AskForResult res2 = aData.Game.AsynchronousCore.AskForCards(target, MessageCore.AskForEnum.TargetCard, aChief);
             Card c = aData.Game.AutoSelect(aChief);
             aData.Game.AsynchronousCore.SendMessage(new Beaver("fanjian.card", target.ChiefName, aChief.ChiefName, Card.Cards2Beaver("cards", new Card[] { c })).ToString()); // new XElement("fanjian.card", new XElement("target", target.ChiefName), new XElement("target2", aChief.ChiefName), Card.Cards2XML("cards", new Card[] { c })));
             if (c.CardHuaSe != res.Cards[0].CardHuaSe)
             {
                 aData.Game.DamageHealth(target, 1, aChief, new GlobalEvent.EventRecoard(aChief, target, new Card[] { }, Card.Effect.Skill, SkillName));
             }
             if (!aData.Game.GamePlayers[target].Dead)
             {
                 if (aData.Game.GamePlayers[aChief].HasCardsInHand(new Card[] { c }))
                 {
                     aData.Game.AsynchronousCore.SendGiveMessage(aChief, target, new Card[] { c }, aData.Game.GamePlayers);
                     aData.Game.Move(aChief, target, new Card[] { c });
                 }
                 else if (aData.Game.HasCardsInBin(new Card[] { c }))
                 {
                     if (aData.Game.PickRubbish(new Card[] { c }))
                     {
                         aData.Game.AsynchronousCore.SendPickMessage(target, new Card[] { c });
                         aData.Game.GamePlayers[aChief].Hands.Add(c.GetOriginalCard());
                     }
                 }
             }
             return(new MessageCore.AskForResult(false, aChief, new ChiefBase[] { }, new Card[] { }, Card.Effect.Skill, false, false, SkillName));
         }
     }
     return(null);
 }
예제 #22
0
 public override SGS.ServerCore.Contest.Global.MessageCore.AskForResult AskFor(SGS.ServerCore.Contest.Data.ChiefBase aChief, SGS.ServerCore.Contest.Global.MessageCore.AskForEnum aAskFor, SGS.ServerCore.Contest.Data.GlobalData aData)
 {
     if (aData.Game.Response.SkillName == SkillName)
     {
         if (SkillStatus == SkillEnabled.Enable)
         {
             SwitchSkillStatus(aChief, SkillEnabled.Disable, aData);
             aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { aData.Game.Response.Targets[0].Chief }, aData.Game.Response.Cards));
             aData.Game.DropCards(true, GlobalEvent.CardFrom.Hand, SkillName, aData.Game.Response.Cards, Card.Effect.Skill, aChief, null, null);
             aData.Game.RegainHealth(aData.Game.Response.Targets[0].Chief, 1);
             aData.Game.RegainHealth(aChief, 1);
         }
     }
     return(null);
 }
예제 #23
0
        public override void BeforeTurnStart(ChiefBase aChief, GlobalData aData)
        {
            Card c = null;

            do
            {
                aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aChief, this));
                MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aChief);
                if (res.YN)
                {
                    aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { }));
                    c = aData.Game.popJudgementCard(aChief, Card.Effect.LuoShen);
                    aData.Game.DropCards(true, GlobalEvent.CardFrom.JudgementCard, res.SkillName, new Card[] { c }, Card.Effect.None, aChief, null, null);
                }
            } while (c != null && (c.CardHuaSe == Card.Suit.HeiTao || c.CardHuaSe == Card.Suit.CaoHua));
        }
예제 #24
0
        public void Test3()
        {
            MessageCore.PrivateSender = (target, message) => Debug.WriteLine($"Private {target} {message}");
            MessageCore.GroupSender   = (target, message) => Debug.WriteLine($"Group {target} {message}");
            MessageCore.AtCoder       = s => s;
            var sw = Stopwatch.StartNew();

            MessageCore.ProcessMessage(new Message("123", "456", "新建游戏", "789"));
            Debug.WriteLine($"First: {sw.ElapsedMilliseconds}ms");
            sw = Stopwatch.StartNew();

            MessageCore.ProcessMessage(new Message("123", "456", "上桌", "789"));
            MessageCore.ProcessMessage(new Message("123", "789", "上桌", "789"));
            MessageCore.ProcessMessage(new Message("123", "789", "开始游戏", "789"));
            Debug.WriteLine($"Second: {sw.ElapsedMilliseconds}ms");
        }
예제 #25
0
        public void TestDataItemPropertyModify()
        {
            Log("-----------开始测试数据修改后更新数据库----------------");

            string db  = @"C:\Users\fhjun\Desktop\TestDataItemPropertyModify.db";
            string db2 = db.Insert(db.LastIndexOf('.'), "_bmk");

            if (File.Exists(db))
            {
                File.Delete(db);
            }
            if (File.Exists(db2))
            {
                File.Delete(db2);
            }
            IDataItems items = new DataItems <MessageCore>(db);
            //MessageCore mm3 = null;
            //for (int i = 0; i < 1; i++)
            //{
            //    MessageCore mm = new MessageCore() { Content = "正常消息", Date = DateTime.Now.AddDays(i), SenderName = "张三", MessageType = "文本" };
            //    mm.Content = "正常消息1";
            //    items.Add(mm);
            //    if (i == 3)
            //        mm.Content = "这是修改Content后的数据";
            //    if (i % 3 == 0)
            //        mm.BookMarkId = 2;
            //    if (i == 0)
            //        mm3 = mm;
            //}
            MessageCore mm = new MessageCore()
            {
                Content = "正常消息", Date = DateTime.Now.AddDays(0), SenderName = "张三", MessageType = "文本"
            };

            mm.Content = "正常消息1";
            items.Add(mm);
            mm.Content = "这是修改Content后的数据";
            mm.Content = "这是修改Content后的数据2222";

            items.Commit();
            items.Filter();

            mm.BookMarkId = 3;
            mm.BookMarkId = -1;
        }
예제 #26
0
 public override void OnChiefHarmed(GlobalEvent.EventRecoard aSourceEvent, ChiefBase aSource, ChiefBase aTarget, GlobalData aData, sbyte aDamage)
 {
     //不能有牌存在,且伤害事件的牌在垃圾桶中
     if (aSourceEvent.Cards.Count() != 0 && aData.Game.HasCardsInBin(aSourceEvent.Cards))
     {
         //问询是否发动技能
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aTarget, this));
         MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aTarget);
         if (res.YN == true && aData.Game.HasCardsInBin(aSourceEvent.Cards))
         {
             aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aTarget, this, new ChiefBase[] { }, aSourceEvent.Cards));
             aData.Game.PickRubbish(aSourceEvent.Cards);
             foreach (Card c in aSourceEvent.Cards)
             {
                 aData.Game.GamePlayers[aTarget].Hands.Add(c.GetOriginalCard());
             }
         }
     }
 }
예제 #27
0
 public override int CalcAskforTimes(ChiefBase aChief, ChiefBase aTarget, Card.Effect aEffect, int aOldTimes, GlobalData aData)
 {
     if (aEffect == Card.Effect.Sha)
     {
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aChief, this));
         MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aChief);
         if (res.YN)
         {
             aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { }));
             Card c = aData.Game.popJudgementCard(aChief, Card.Effect.TieQi);
             aData.Game.DropCards(true, GlobalEvent.CardFrom.JudgementCard, SkillName, new Card[] { c }, Card.Effect.TieQi, aChief, null, null);
             if (c.CardHuaSe == Card.Suit.HongTao || c.CardHuaSe == Card.Suit.FangPian)
             {
                 return(0);
             }
         }
     }
     return(aOldTimes);
 }
예제 #28
0
 public override MessageCore.AskForResult AskFor(ChiefBase aChief, MessageCore.AskForEnum aAskFor, GlobalData aData)
 {
     if (aData.Game.Response.SkillName == SkillName && SkillStatus == SkillEnabled.Enable && aAskFor == MessageCore.AskForEnum.Aggressive)
     {
         SwitchSkillStatus(aChief, SkillEnabled.Disable, aData);
         ChiefBase target = aData.Game.Response.Targets[0].Chief;
         Card[]    cards  = aData.Game.Response.Cards;
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { target }, new Card[] { }));
         TotalCount += aData.Game.Response.Cards.Count();
         aData.Game.AsynchronousCore.SendGiveMessage(aChief, target, cards, aData.Game.GamePlayers);
         aData.Game.Move(aChief, target, cards);
         if (TotalCount > 1 && !HasRegainHealth)
         {
             aData.Game.RegainHealth(aChief, 1);
             HasRegainHealth = true;
         }
     }
     return(null);
 }
예제 #29
0
 public override Card OnChiefJudgementCardShow_Turn(ChiefBase aJudgeChief, Card aJudgementCard, ChiefBase aThisChief, GlobalData aData)
 {
     if (aData.Game.GamePlayers[aThisChief].HasHand)
     {
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aThisChief, this));
         MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForCards(aThisChief, MessageCore.AskForEnum.TargetHand, aThisChief);
         if (res.Cards.Count() == 1)
         {
             //旧的判定牌删去
             aData.Game.DropCards(true, GlobalEvent.CardFrom.None, res.SkillName, new Card[] { aJudgementCard }, Card.Effect.None, aJudgeChief, null, null);
             //将自己的这张手牌除去
             aData.Game.DropCards(false, GlobalEvent.CardFrom.Hand, res.SkillName, res.Cards, Card.Effect.None, aThisChief, null, null);
             //触发技能的消息
             aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aThisChief, this, new ChiefBase[] { aJudgeChief }, res.Cards));
             //返回新的判定牌
             return(res.Cards[0]);
         }
     }
     return(aJudgementCard);
 }
예제 #30
0
 public override void OnUseEffect(ChiefBase aChief, Card.Effect aEffect, GlobalData aData)
 {
     switch (aEffect)
     {
     case Card.Effect.JueDou:
     case Card.Effect.WanJianQiFa:
     case Card.Effect.NanManRuQin:
     case Card.Effect.TaoYuanJieYi:
     case Card.Effect.GuoHeChaiQiao:
     case Card.Effect.ShunShouQianYang:
     case Card.Effect.HuoGong:
     case Card.Effect.JieDaoShaRen:
     case Card.Effect.TieSuoLianHuan:
     case Card.Effect.WuGuFengDeng:
     case Card.Effect.WuXieKeJi:
     case Card.Effect.WuZhongShengYou:
         aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { }));
         aData.Game.TakeingCards(aChief, 1);
         break;
     }
 }