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); } } }
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; } } }
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()); } } } }
public override void PreprocessingSubEvent(ChiefBase aTargetChief, ref GlobalEvent.EventRecoard aEvent, GlobalData aData) { if (aEvent.Effect == Card.Effect.Sha) { aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aTargetChief, this)); MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aTargetChief); if (res.YN) { aData.Game.AsynchronousCore.SendMessage(new Beaver("askfor.liuli.args", aTargetChief.ChiefName).ToString()); // new XElement("askfor.liuli.args", new XElement("target", aTargetChief.ChiefName))); res = aData.Game.AsynchronousCore.AskForCards(aTargetChief, MessageCore.AskForEnum.TargetHand, aTargetChief); if (res.Targets.Count() != 1) { return; } if (res.Targets[0] == aTargetChief) { return; } if (res.Targets[0] == aEvent.Source) { return; } if (aData.Game.GamePlayers[res.Targets[0]].Dead) { return; } if (!aData.Game.WithinShaRange(aTargetChief, res.Targets[0])) { return; } aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aTargetChief, this, res.Targets, res.Cards)); aData.Game.DropCards(true, GlobalEvent.CardFrom.Hand, SkillName, aData.Game.Response.Cards, Card.Effect.Skill, aTargetChief, null, null); aEvent.Target = res.Targets[0]; } } }
public override void OnChiefHarmed(GlobalEvent.EventRecoard aSourceEvent, ChiefBase aSource, ChiefBase aTarget, GlobalData aData, sbyte aDamage) { if (aSource != null) { aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aTarget, this)); MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aTarget); if (res.YN == true) { aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aTarget, this, new ChiefBase[] { aSource }, new Card[] { })); Card judgement = aData.Game.popJudgementCard(aTarget, Card.Effect.GangLie); aData.Game.DropCards(true, GlobalEvent.CardFrom.JudgementCard, res.SkillName, new Card[] { judgement }, Card.Effect.GangLie, aTarget, aSource, null); if (judgement.CardHuaSe != Card.Suit.HongTao) { if (aData.Game.GamePlayers[aSource].Hands.Count < 2) { aData.Game.DamageHealth(aSource, 1, aTarget, new GlobalEvent.EventRecoard(aTarget, aSource, new Card[] { }, Card.Effect.None, res.SkillName)); } else { aData.Game.AsynchronousCore.SendMessage(new Beaver("askfor.ganglie.cards", aTarget.ChiefName, aSource.ChiefName).ToString()); // new XElement("askfor.ganglie.cards", new XElement("target", aTarget.ChiefName), new XElement("target2", aSource.ChiefName))); res = aData.Game.AsynchronousCore.AskForCardsWithCount(aSource, 2); if (res.Cards.Count() != 2) { aData.Game.DamageHealth(aSource, 1, aTarget, new GlobalEvent.EventRecoard(aTarget, aSource, new Card[] { }, Card.Effect.None, res.SkillName)); } else { aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeDropMessage(aSource, aSource, res.Cards)); aData.Game.DropCards(true, GlobalEvent.CardFrom.Hand, res.SkillName, res.Cards, Card.Effect.None, aSource, null, null); } } } } } }
/// <summary> /// 在处理子事件前发生的事件,将通知子事件中目标武将 /// </summary> /// <param name="aTargetChief">目标武将</param> /// <param name="aEvent"></param> /// <param name="aData"></param> public virtual void PreprocessingSubEvent(ChiefBase aTargetChief, ref GlobalEvent.EventRecoard aEvent, GlobalData aData) { }
/// <summary> /// 玩家受到‘伤害’时执行的方法,被伤害武将会被触发该方法 /// </summary> /// <param name="aSourceEvent">产生伤害的事件节点</param> /// <param name="aSource">伤害的来源武将,若伤害来源非武将造成,系统置此参数为null</param> /// <param name="aTarget">受到伤害的目标</param> /// <param name="aData">全局游戏对象</param> /// <param name="aDamage">伤害量</param> public virtual void OnChiefHarmed(GlobalEvent.EventRecoard aSourceEvent, ChiefBase aSource, ChiefBase aTarget, GlobalData aData, sbyte aDamage) { }
/// <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); }