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 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); }
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()); } } }
public static MessageCore.AskForResult AskFor(Card.Effect aAskFor, Card.Effect aCardEffect, ChiefBase aOwner, GlobalData aData) { switch (aCardEffect) { //八卦阵 case Card.Effect.BaGuaZhen: if (aAskFor == Card.Effect.Shan) { aData.Game.AsynchronousCore.SendMessage( new Beaver("askfor.armor.effect", aOwner.ChiefName).ToString() //new XElement("askfor.armor.effect", // new XElement("target" , aOwner.ChiefName )) ); MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aOwner); if (res.YN == true) { Card ret = aData.Game.popJudgementCard(aOwner, Card.Effect.BaGuaZhen); aData.Game.DropCards(true, GlobalEvent.CardFrom.JudgementCard, res.SkillName, new Card[] { ret }, Card.Effect.None, aOwner, null, null); if (ret.CardHuaSe == Card.Suit.FangPian || ret.CardHuaSe == Card.Suit.HongTao) { return(new MessageCore.AskForResult(false, aOwner, new ChiefBase[0] { }, new Card[] { ret }, Card.Effect.Shan, false, false, string.Empty)); } else { return(new MessageCore.AskForResult(false, aOwner, new ChiefBase[0] { }, new Card[] { ret }, Card.Effect.None, false, false, string.Empty)); } } } break; } return(new MessageCore.AskForResult(false, aOwner, new ChiefBase[0] { }, new Card[] { }, Card.Effect.None, false, false, string.Empty)); }
/// <summary> /// 在游戏事件层对出牌进行调整的方法 /// </summary> /// <param name="aWeaponEffect"></param> /// <param name="aCardsEffect"></param> /// <param name="aCards"></param> /// <param name="aData"></param> /// <param name="aSource"></param> /// <param name="aTarget"></param> /// <returns></returns> public static Card[] Lead(Card.Effect aWeaponEffect, Card.Effect aCardsEffect, Card[] aCards, GlobalData aData, ChiefBase aSource, ChiefBase aTarget) { switch (aWeaponEffect) { case Card.Effect.ZhuQueYuShan: if (aCardsEffect == Card.Effect.Sha && aCards.Count() == 1 && aCards[0].Element == Card.ElementType.None) { aData.Game.AsynchronousCore.SendMessage( new Beaver("askfor.weapon.effect", aSource.ChiefName).ToString()); //new XElement("askfor.weapon.effect", // new XElement("target" , aSource.ChiefName) // ) //); MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aSource); if (res.YN == true) { aCards[0].Element = Card.ElementType.Fire; } } break; case Card.Effect.CiXiongShuangGuJian: if (aCardsEffect == Card.Effect.Sha && aSource != null && aTarget != null && (aSource.Sex != aTarget.Sex)) { aData.Game.AsynchronousCore.SendMessage( new Beaver("askfor.weapon.effect", aSource.ChiefName).ToString()); //new XElement("askfor.weapon.effect", // new XElement("target", aSource.ChiefName) // ) //); MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aSource); if (res.YN == true) { if (aData.Game.GamePlayers[aTarget].Hands.Count != 0) { aData.Game.AsynchronousCore.SendMessage( new Beaver("askfor.cxsgj.select", aTarget.ChiefName).ToString()); //new XElement("askfor.cxsgj.select", // new XElement("target", aTarget.ChiefName) // ) //); res = aData.Game.AsynchronousCore.AskForCards(aTarget, MessageCore.AskForEnum.TargetHand, aTarget); aData.Game.AsynchronousCore.LeadingValid(aTarget); } if (aData.Game.GamePlayers[aTarget].Hands.Count == 0 || res.Effect == Card.Effect.None) { aData.Game.TakeingCards(aSource, 1); } else { aData.Game.DropCards(true, GlobalEvent.CardFrom.Hand, string.Empty, res.Cards, Card.Effect.None, aTarget, aSource, null); //aData.Game.RemoveHand(aTarget, res.Cards); } } } break; } return(aCards); }
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 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--; } }
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; } } }
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); }
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)); }
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); }
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 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); }
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); }
/// <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); }
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); } } } } } }
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]; } } }
/// <summary> /// 是否允许执行伤害 /// </summary> /// <param name="aWeaponEffect">务求效果</param> /// <param name="aSource">伤害来源</param> /// <param name="aTarget">伤害目标</param> /// <param name="aData">游戏数据</param> /// <returns>返回是表示允许伤害(默认),返回false系统将不执行伤害</returns> public static bool EnableShaDamage(Card.Effect aWeaponEffect, ChiefBase aSource, ChiefBase aTarget, GlobalData aData) { bool ret = true; if (aSource != null && aTarget != null) { switch (aWeaponEffect) { case Card.Effect.HanBingJian: if (aData.Game.GamePlayers[aTarget].HasCard) { aData.Game.AsynchronousCore.SendMessage( new Beaver("askfor.hbj.select", aSource.ChiefName, aTarget.ChiefName).ToString()); //new XElement("askfor.hbj.select", // new XElement("target", aSource.ChiefName), // new XElement("target2" , aTarget.ChiefName) // ) //); MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForCards(aSource, MessageCore.AskForEnum.TargetCard, aTarget); if (res.Effect != Card.Effect.None) { ret = false; aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeDropMessage(aSource, aTarget, res.Cards)); //new XElement("drop", // new XElement("from", aSource.ChiefName), // new XElement("to", aTarget.ChiefName), // Card.Cards2XML("cards", res.Cards) // ) //); aData.Game.DropCards(false, GlobalEvent.CardFrom.HandAndEquipage, string.Empty, res.Cards, Card.Effect.None, aTarget, aSource, null); aData.Game.GamePlayers[aSource].Hands.AddRange(res.Cards); if (aData.Game.GamePlayers[aTarget].HasCard) { res = aData.Game.AsynchronousCore.AskForCards(aSource, MessageCore.AskForEnum.TargetCard, aTarget); if (res.Effect == Card.Effect.None) { res = new MessageCore.AskForResult(false, null, new ChiefBase[] { }, new Card[] { aData.Game.AutoSelect(aTarget) }, Card.Effect.GuoHeChaiQiao, false, true, string.Empty); } aData.Game.AsynchronousCore.SendMessage( MessageCore.MakeDropMessage(aSource, aTarget, res.Cards)); //new XElement("drop", // new XElement("from", aSource.ChiefName), // new XElement("to", aTarget.ChiefName), // Card.Cards2XML("cards", res.Cards) // ) //); aData.Game.DropCards(false, GlobalEvent.CardFrom.HandAndEquipage, string.Empty, res.Cards, Card.Effect.None, aTarget, aSource, null); aData.Game.GamePlayers[aSource].Hands.AddRange(res.Cards); } } } break; case Card.Effect.QiLinGong: if (aData.Game.GamePlayers[aTarget].Jia1Ma != null || aData.Game.GamePlayers[aTarget].Jian1Ma != null) { aData.Game.AsynchronousCore.SendMessage(new Beaver("askfor.qlg.select", aSource.ChiefName, aTarget.ChiefName).ToString()); //new XElement("askfor.qlg.select" , // new XElement("target", aSource.ChiefName), // new XElement("target2" , aTarget.ChiefName ) // ) //); MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForCards(aSource, MessageCore.AskForEnum.TargetHorse, aTarget); if (res.Effect != Card.Effect.None) { aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeDropMessage(aSource, aTarget, res.Cards)); //new XElement("drop", // new XElement("from", aSource.ChiefName), // new XElement("to", aTarget.ChiefName), // Card.Cards2XML("cards", res.Cards) // ) //); aData.Game.DropCards(false, GlobalEvent.CardFrom.Equipage, string.Empty, res.Cards, Card.Effect.None, aTarget, aSource, null); aData.Game.GamePlayers[aSource].Hands.AddRange(res.Cards); } } break; } } return(ret); }
public override void BeforeTurnStart(ChiefBase aChief, GlobalData aData) { aChief.SlotsBuffer[Top].Cards.Clear(); aChief.SlotsBuffer[Bottom].Cards.Clear(); aChief.SlotsBuffer[Total].Cards.Clear(); aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeAskForSkillMessage(aChief, this)); MessageCore.AskForResult res = aData.Game.AsynchronousCore.AskForYN(aChief); if (res.YN) { int alive = aData.Game.GamePlayers.PeoplealiveCount; alive = alive > 5 ? 5 : alive; Card[] cards = aData.Game.CardsHeap.Pop(alive); aChief.SlotsBuffer[Total].Cards.AddRange(cards); aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { })); aData.Game.AsynchronousCore.SendPrivateMessageWithOpenMessage(aChief, new Beaver("askfor.guanxing.cards", aChief.ChiefName, Card.Cards2Beaver("cards", cards)).ToString().ToString(), new Beaver("askfor.guanxing.cards", aChief.ChiefName).ToString(), aData.Game.GamePlayers); //new XElement("askfor.guanxing.cards", new XElement("target", aChief.ChiefName), Card.Cards2XML("cards", cards)), //new XElement("askfor.guanxing.cards", new XElement("target", aChief.ChiefName)), //aData.Game.GamePlayers //); res = aData.Game.AsynchronousCore.AskForCards(aChief, MessageCore.AskForEnum.SlotCards, aChief); List <Card> target = aChief.SlotsBuffer[Top].Cards; foreach (Card c in res.Cards) { if (!cards.Contains(c)) { if (c.ID == 0) { target = aChief.SlotsBuffer[Bottom].Cards; } else { aChief.SlotsBuffer[Top].Cards.Clear(); aChief.SlotsBuffer[Bottom].Cards.AddRange(cards); break; } } else { target.Add(c); } } if ((aChief.SlotsBuffer[Top].Cards.Count + aChief.SlotsBuffer[Bottom].Cards.Count) != cards.Count()) { aChief.SlotsBuffer[Top].Cards.Clear(); aChief.SlotsBuffer[Bottom].Cards.AddRange(cards); } aData.Game.AsynchronousCore.SendMessage( new Beaver("guanxing.info", aChief.SlotsBuffer[Top].Cards.Count.ToString(), aChief.SlotsBuffer[Bottom].Cards.Count.ToString()).ToString()); //new XElement("guanxing.info", // new XElement("up", aChief.SlotsBuffer[Top].Cards.Count), // new XElement("down", aChief.SlotsBuffer[Bottom].Cards.Count) // ) // ); aData.Game.CardsHeap.PutOnTop(aChief.SlotsBuffer[Top].Cards.ToArray()); aData.Game.CardsHeap.PutOnBottom(aChief.SlotsBuffer[Bottom].Cards.ToArray()); aChief.SlotsBuffer[Top].Cards.Clear(); aChief.SlotsBuffer[Bottom].Cards.Clear(); aChief.SlotsBuffer[Total].Cards.Clear(); } }