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) { }
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) { }