public override void BeforeAskfor(ChiefBase aChief, MessageCore.AskForEnum aEffect, GlobalData aData) { if (aEffect == MessageCore.AskForEnum.Sha || aEffect == MessageCore.AskForEnum.Shan || (aEffect == MessageCore.AskForEnum.Aggressive && (aData.ShaNoLimit || aData.KillRemain > 0))) { SwitchSkillStatus(aChief, SkillEnabled.Enable, aData); } }
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 Leading(ChiefBase aChief, GlobalData aData) { if (aData.Game.GamePlayers[aChief].Hands.Count != 0) { SwitchSkillStatus(aChief, SkillEnabled.Enable, aData); } }
public override void BeforeAskfor(ChiefBase aChief, MessageCore.AskForEnum aEffect, GlobalData aData) { if (aEffect == MessageCore.AskForEnum.Aggressive && aData.Game.GamePlayers[aChief].HasHand) { SwitchSkillStatus(aChief, SkillEnabled.Enable, aData); } }
public override bool ActiveSkill(string aSkillName, Card[] aCards, ChiefBase aChief, ChiefBase[] aTargets, MessageCore.AskForEnum aAskFor, ref Card.Effect aEffect, GlobalData aData) { if (aSkillName == SkillName) { if (SkillStatus == SkillEnabled.Disable) { return(false); } if (aAskFor != MessageCore.AskForEnum.AskForTao && aAskFor != MessageCore.AskForEnum.AskForTaoOrJiu) { return(false); } if (aCards.Count() != 1) { return(false); } if (!aData.Game.GamePlayers[aChief].HasCardsInHandOrEquipage(aCards)) { return(false); } if (aCards[0].CardHuaSe != Card.Suit.HongTao && aCards[0].CardHuaSe != Card.Suit.FangPian) { return(false); } } return(true); }
public override void OnUseEffect(ChiefBase aChief, Card.Effect aEffect, GlobalData aData) { if (aEffect == Card.Effect.Sha && OnLeading) { UseShaEffect = true; } }
public override void FinishAskfor(ChiefBase aChief, MessageCore.AskForEnum aEffect, GlobalData aData) { if (aEffect == MessageCore.AskForEnum.Aggressive && SkillStatus == SkillEnabled.Disable) { SwitchSkillStatus(aChief, SkillEnabled.Disable, aData); } }
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 override void BeforeAbandonment(ChiefBase aChief, GlobalData aData) { if (SkillStatus == SkillEnabled.Enable) { SwitchSkillStatus(aChief, SkillEnabled.Disable, aData); } }
public override bool ActiveSkill(string aSkillName, Card[] aCards, ChiefBase aChief, ChiefBase[] aTargets, MessageCore.AskForEnum aAskFor, ref Card.Effect aEffect, GlobalData aData) { if (aSkillName == SkillName) { if (SkillStatus == SkillEnabled.Disable) { return(false); } if (aCards.Count() != 1 || !aData.Game.GamePlayers[aChief].HasCardsInHand(aCards)) { return(false); } if (aTargets.Count() != 2) { return(false); } if (aData.Game.GamePlayers[aTargets[0]].Chief.Sex != ChiefBase.SexType.Male || aData.Game.GamePlayers[aTargets[1]].Chief.Sex != ChiefBase.SexType.Male) { return(false); } if (aData.Game.GamePlayers[aTargets[0]].Dead || aData.Game.GamePlayers[aTargets[1]].Dead) { return(false); } if (aTargets[0] == aTargets[1]) { return(false); } if (aTargets[0] == aChief || aTargets[1] == aChief) { return(false); } } return(true); }
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); }
/// <summary> /// 根据武将的名称判断两个武将对象是否相等 /// </summary> /// <param name="aChief">另一个武将对象</param> /// <returns>若名称相等,返回true.参数为null返回false</returns> public bool IsMe(ChiefBase aChief) { if (aChief == null) { return(false); } return(aChief.ChiefName == ChiefName); }
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); } }
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 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); }
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); }
public override bool EffectFeasible(Card[] aCards, Card.Effect aEffect, ChiefBase aTarget, bool aFeasible, GlobalData aData) { switch (aEffect) { case Card.Effect.ShunShouQianYang: case Card.Effect.LeBuSiShu: return(false); } return(aFeasible); }
public override bool ActiveSkill(string aSkillName, Card[] aCards, ChiefBase aChief, ChiefBase[] aTargets, MessageCore.AskForEnum aAskFor, ref Card.Effect aEffect, GlobalData aData) { if (aSkillName == SkillName && aChief.ChiefStatus == ChiefBase.Status.Majesty) //要求 { if (SkillStatus != SkillEnabled.Enable || aAskFor != MessageCore.AskForEnum.Shan || aCards.Count() != 0) { return(false); //不满足的条件 } } return(true); }
/// <summary> /// 通过玩家选择的武将来获取或设置玩家 /// </summary> /// <param name="aChief">武将对象</param> /// <returns>玩家对象</returns> public Player this[ChiefBase aChief] { get { return(this[aChief.ChiefName]); } set { this[aChief.ChiefName] = value; } }
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--; } }
/// <summary> /// 构造玩家,此方法仅用于测试 /// </summary> /// <param name="aGame">游戏对象</param> /// <param name="aCallback">回调接口</param> /// <param name="aService">服务接口</param> public Player(GameBase aGame, ICallback aCallback, IService aService) { Messages = new List <string>(); Hands = new List <Card>(); Debuff = new Stack <Card>(); Callback = aCallback; Service = aService; HorizontalSet = false; TurnSet = false; AvailableChiefs = new ChiefBase[0] { }; }
/// <summary> /// 设置技能状态 /// </summary> /// <param name="aChief">武将对象</param> /// <param name="aStatus">新的状态</param> /// <param name="aData">全局数据对象</param> protected void SwitchSkillStatus(ChiefBase aChief, SkillEnabled aStatus, GlobalData aData) { SkillStatus = aStatus; aData.Game.AsynchronousCore.SendMessage(new ChiefBase[] { aChief }, new Beaver("skill.status", SkillName, SkillStatus.ToString()).ToString() //new XElement("skill.status", // new XElement("name" , SkillName ), // new XElement("status" , SkillStatus ) // ) , false ); }
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()); } } }
public override bool ActiveSkill(string aSkillName, Card[] aCards, ChiefBase aChief, ChiefBase[] aTargets, MessageCore.AskForEnum aAskFor, ref Card.Effect aEffect, GlobalData aData) { if (aSkillName == SkillName) { if (SkillStatus == SkillEnabled.Enable && (aAskFor == MessageCore.AskForEnum.Sha || aAskFor == MessageCore.AskForEnum.Aggressive) && aCards.Count() == 0) { if (aAskFor == MessageCore.AskForEnum.Aggressive) { //若出杀有限制且已经没有机会杀了不能执行 if (!aData.ShaNoLimit && aData.KillRemain < 1) { return(false); //false } //杀的目标数量高于最大值不能执行 if (aData.Game.CalcMaxShaTargets(aChief, aCards) < aTargets.Count()) { return(false); //false } //没有目标不能执行 if (aTargets.Count() == 0) { return(false); //false } //遍历目标集合,如果目标有自己或者目标已死亡或者 够不到对方不能执行 foreach (ChiefBase c in aTargets) { if (c.IsMe(aChief) || aData.Game.GamePlayers[c].Dead || !aData.Game.WithinShaRange(aChief, c)) { return(false); //false } bool Enable = true; foreach (ASkill s in c.Skills) { Enable = s.EffectFeasible(aCards, aEffect, c, Enable, aData); } if (!Enable) { return(false); } } } return(true); } else { return(false); //false } } else { return(true); } }
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); } }
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); }
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); } }
public override sbyte CalcDamage(ChiefBase aChief, Card.Effect aEffect, sbyte aDamage, GlobalData aData) { if (Active) { switch (aEffect) { case Card.Effect.Sha: case Card.Effect.JueDou: return(++aDamage); } } return(aDamage); }
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 bool EffectFeasible(Card[] aCards, Card.Effect aEffect, ChiefBase aTarget, bool aFeasible, GlobalData aData) { switch (aEffect) { case Card.Effect.Sha: case Card.Effect.JueDou: if (aData.Game.GamePlayers[aTarget].Hands.Count == 0) { return(false); } break; } return(aFeasible); }