public PClickOnSkillOrder() : base("click_on_skill",
                                    (string[] args, string IPAddress) => {
     int SkillIndex = Convert.ToInt32(args[1]);
     PGame Game     = PNetworkManager.Game;
     PPlayer Player = Game.PlayerList.Find((PPlayer _Player) => _Player.IPAddress.Equals(IPAddress));
     if (Player != null && Player.IsAlive && SkillIndex < Player.General.SkillList.Count)
     {
         PSkill Skill = Player.General.SkillList[SkillIndex];
         if (Skill != null)
         {
             bool UseSkill = false;
             if (Game.Logic.WaitingForEndFreeTime() && Game.NowPlayer.Equals(Player) && Game.TagManager.ExistTag(PTag.FreeTimeOperationTag.Name))
             {
                 PTrigger Trigger = Skill.TriggerList.Find((Func <PPlayer, PSkill, PTrigger> TriggerGenerator) => TriggerGenerator(Player, Skill).Time.Equals(Game.NowPeriod.During))?.Invoke(Player, Skill);
                 if (Trigger != null)
                 {
                     if (Trigger.Condition(Game))
                     {
                         PThread.Async(() => {
                             Game.Logic.StartSettle(new PSettle("发动技能[" + Trigger.Name + "]", Trigger.Effect));
                         });
                         UseSkill = true;
                     }
                 }
             }
             if (Skill.SoftLockOpen && !UseSkill)
             {
                 Skill.Lock = !Skill.Lock;
                 Game.Monitor.FindTriggers(Skill.Name).ForEach((PTrigger Trigger) => {
                     Trigger.IsLocked = Skill.Lock;
                 });
                 PNetworkManager.NetworkServer.TellClient(Player, new PRefreshGeneralOrder(Player));
             }
         }
     }
 },
                                    null) {
 }
Exemple #2
0
 public PClickOnCardOrder() : base("click_on_card",
                                   (string[] args, string IPAddress) => {
     int CardIndex = Convert.ToInt32(args[1]);
     PGame Game    = PNetworkManager.Game;
     PChooseCardTag ChooseCardTag = Game.TagManager.FindPeekTag <PChooseCardTag>(PChooseCardTag.TagName);
     if (ChooseCardTag != null && ChooseCardTag.Player.IPAddress.Equals(IPAddress))
     {
         ChooseCardTag.Card = ChooseCardTag.Player.Area.GetCard(CardIndex, ChooseCardTag.AllowHandCards, ChooseCardTag.AllowEquipment, ChooseCardTag.AllowJudge);
     }
     else if (Game.Logic.WaitingForEndFreeTime() && Game.NowPlayer.IPAddress.Equals(IPAddress) && Game.TagManager.ExistTag(PTag.FreeTimeOperationTag.Name) && Game.NowPlayer.IsAlive)
     {
         PCard Card = Game.NowPlayer.Area.GetCard(CardIndex);
         if (Card != null)
         {
             PTrigger Trigger = null;
             if (Game.NowPlayer.Area.HandCardArea.CardList.Contains(Card))
             {
                 Trigger = Card.FindTrigger(Game.NowPeriod.During);
             }
             else if (Game.NowPlayer.Area.EquipmentCardArea.CardList.Contains(Card))
             {
                 Trigger = Card.FindEquipmentTrigger(Game.NowPeriod.During);
             }
             if (Trigger != null)
             {
                 if (Trigger.Condition(Game))
                 {
                     PThread.Async(() => {
                         Game.Logic.StartSettle(new PSettle("主动触发" + Trigger.Name, Trigger.Effect));
                     });
                 }
             }
         }
     }
 },
                                   null) {
 }