/// <summary> /// 从牌堆取出一张牌作为判定牌 /// </summary> /// <param name="aChief">判定的武将对象</param> /// <param name="aEffect">要判定的效果</param> /// <returns>一张判定牌</returns> internal Card popJudgementCard(ChiefBase aChief, Card.Effect aEffect) { Card c = CardsHeap.Pop(); //取一张牌 AsynchronousCore.SendMessage( new Beaver("judgmentcard", aChief.ChiefName, aEffect.ToString(), Card.Cards2Beaver("cards", new Card[] { c })).ToString()); //new XElement("judgmentcard", // new XElement("target", aChief.ChiefName), // new XElement("effect", aEffect), // Card.Cards2XML("cards", new Card[] { c }) //)); //发送揭出判定牌的消息 ChiefBase t = aChief; //现在从判定牌持有的玩家开始,轮询武将OnChiefJudgementCardShow_Turn方法 do { foreach (ASkill s in t.Skills) { c = s.OnChiefJudgementCardShow_Turn(aChief, c, t, gData); } t = t.Next; }while (t != aChief); c.CardEffect = aEffect; //最后这里设定判定牌的性质是考虑之前判定牌不确定的因素 return(c); }
public override void OnUseEffect(ChiefBase aChief, Card.Effect aEffect, GlobalData aData) { if (aEffect == Card.Effect.Sha && OnLeading) { UseShaEffect = true; } }
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); }
/// <summary> /// 激活出牌玩家的武器,使得出牌玩家的某些特性改变 /// </summary> /// <param name="aWeaponEffect">武器效果</param> /// <param name="aData">游戏数据</param> public static void ActiveWeapon(Card.Effect aWeaponEffect, GlobalData aData) { switch (aWeaponEffect) { case Card.Effect.ZhuGeLianNu: aData.ShaNoLimit = true; break; } }
/// <summary> /// 卸载武器触发的方法 /// </summary> /// <param name="aWeaponEffect">武器效果</param> /// <param name="aData">游戏数据</param> public static void UnloadWeapon(Card.Effect aWeaponEffect, GlobalData aData) { switch (aWeaponEffect) { case Card.Effect.ZhuGeLianNu: aData.ShaNoLimit = false; break; } }
/// <summary> /// 创建事件节点 /// </summary> /// <param name="aSource">事件源</param> /// <param name="aTarget">事件目标</param> /// <param name="aTarget2">事件的第二个目标</param> /// <param name="aCards">源出的牌</param> /// <param name="aEffect">事件的效果</param> /// <param name="aSkillName">发动的技能名称</param> public EventRecoard(ChiefBase aSource, ChiefBase aTarget, ChiefBase aTarget2, Card[] aCards, Card.Effect aEffect, string aSkillName) { Source = aSource; Target = aTarget; Cards = aCards; Effect = aEffect; Target2 = aTarget2; SkillName = aSkillName; }
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 static bool EnableTargetArmorWithMessage(Card.Effect aWeaponEffect, ChiefBase aSource, ChiefBase aTarget, GlobalData aData) { switch (aWeaponEffect) { case Card.Effect.QingGangJian: //aData.Game.AskCore.SendMessage(new XElement("青刚剑")); break; } return(EnableTargetArmor(aWeaponEffect, aSource, aTarget)); }
/// <summary> /// 用户检测用户的判定区是否有该类型的Debuff /// </summary> /// <param name="aEffect">要查找的效果</param> /// <returns></returns> internal bool HasDebuff(Card.Effect aEffect) { foreach (Card c in Debuff) { if (c.CardEffect == aEffect) { return(true); } } return(false); }
/// <summary> /// 问询结果 /// </summary> /// <param name="aTimeout">是否超时</param> /// <param name="aLeader">问询目标</param> /// <param name="aTargets">目标的目标</param> /// <param name="aCards">问询目标出牌</param> /// <param name="aEffect">出牌的效果</param> /// <param name="aYN">问询的是否结果</param> /// <param name="aPlayerLead">问询是否是玩家所选出牌,针对八卦阵</param> /// <param name="aSkillName">问询引发的技能名称</param> public AskForResult(bool aTimeout, ChiefBase aLeader, ChiefBase[] aTargets, Card[] aCards, Card.Effect aEffect, bool aYN, bool aPlayerLead, string aSkillName) { TimeOut = aTimeout; Leader = aLeader; Targets = aTargets; Cards = aCards; Effect = aEffect; YN = aYN; PlayerLead = aPlayerLead; SkillName = aSkillName; }
public void UpdateCardVisuals() { for (int i = 0; i < players.Count; i++) { int MAX_CARDS_IN_HAND = players[i].handState.GetMaxCards(); for (int k = 0; k < MAX_CARDS_IN_HAND; k++) { Card card = players[i].handState.GetCardInIndex(k); Card.Effect currentEffect = card.effect; CardType currentCard = null; for (int j = 0; j < cardTypes.Count; j++) { if (cardTypes[j].cardType == currentEffect) { currentCard = cardTypes[j]; break; } else { continue; } } if (currentCard != null) { Sprite _cardArt = null; Sprite _artwork = null; Sprite _manaCost = null; //Card visuals, red or blue: if (i == 0) { _cardArt = blueCard; } else if (i == 1) { _cardArt = redCard; } //Card artwork visuals: _artwork = currentCard.artwork; //Manacost visuals: int manaCost = Mathf.FloorToInt(currentCard.manaCost) / 10; _manaCost = (Sprite)numbers.GetValue(manaCost); cardVisuals[i][k].RefreshCard(_cardArt, _artwork, _manaCost); } else { Debug.Log("Currentcard is null"); } } } }
/// <summary> /// 在服务实例的回应中对牌的操作 /// </summary> /// <param name="aWeaponEffect">武器效果</param> /// <param name="aCards">玩家的出牌</param> /// <param name="aChief">出牌武将</param> /// <param name="aTargets">武将目标</param> /// <param name="aAskFor">问询内容</param> /// <param name="aEffect">最终定义的牌效果</param> /// <param name="aData">游戏数据</param> public static void LeadCards(Card.Effect aWeaponEffect, Card[] aCards, ChiefBase aChief, ChiefBase[] aTargets, MessageCore.AskForEnum aAskFor, ref Card.Effect aEffect, GlobalData aData) { switch (aWeaponEffect) { case Card.Effect.ZhangBaSheMao: if (aEffect == Card.Effect.None && aCards.Count() == 2 && aData.Game.GamePlayers[aChief].HasCardsInHand(aCards)) { aEffect = Card.Effect.Sha; } break; } }
public static bool EnableTargetArmor(Card.Effect aWeaponEffect, ChiefBase aSource, ChiefBase aTarget) { bool ret = true; switch (aWeaponEffect) { case Card.Effect.QingGangJian: ret = false; break; } return(ret); }
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); } }
/// <summary> /// 获取武器对象的攻击范围值 /// </summary> /// <param name="aWeapon">武器效果</param> /// <returns>武器的攻击范围</returns> public static sbyte WeaponRange(Card.Effect aWeapon) { sbyte ret = 1; switch (aWeapon) { case Card.Effect.ZhangBaSheMao: ret = 3; break; case Card.Effect.GuanShiFu: ret = 3; break; case Card.Effect.QingLongYanYueDao: ret = 3; break; case Card.Effect.CiXiongShuangGuJian: ret = 2; break; case Card.Effect.QingGangJian: ret = 2; break; case Card.Effect.ZhuQueYuShan: ret = 4; break; case Card.Effect.FangTianHuaJi: ret = 4; break; case Card.Effect.ZhuGeLianNu: ret = 1; break; case Card.Effect.QiLinGong: ret = 5; break; case Card.Effect.GuDianDao: ret = 2; break; case Card.Effect.HanBingJian: ret = 2; break; } return(--ret); }
public int TotalValueOf(Card.Effect effect) { int total = 0; foreach (Card card in cards) { if (card.effect == effect) { total += card.numberValue; } } return(total); }
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 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); } }
internal void RecoveryJudgementCard(Card aCard, ChiefBase aChief, Card.Effect aEffect) { bool EnableSengToBin = true; foreach (ASkill s in aChief.Skills) { s.OnChiefJudgementCardTakeEffect(aChief, aCard, ref EnableSengToBin, gData); } if (EnableSengToBin) { lstCardBin.Add(aCard); } }
/// <summary> /// 卸载护甲触发的方法 /// </summary> /// <param name="aArmorEffect">护甲效果</param> /// <param name="aData">游戏数据</param> public static void OnUnloadAromor(Card.Effect aArmorEffect, GlobalData aData) { switch (aArmorEffect) { case Card.Effect.BaiYinShiZi: //aData.Game.AskCore.SendMessage( // new XElement("trigger", // new XElement("effect", Card.Effect.BaiYinShiZi) // ) // ); aData.Game.RegainHealth(aData.Active, 1); break; } }
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); }
/// <summary> /// 计算伤害量 /// </summary> /// <param name="aWeaponEffect">武器效果</param> /// <param name="aSource">伤害来源</param> /// <param name="aTarget">伤害目标</param> /// <param name="aDamageEffect">伤害效果</param> /// <param name="aOldDamage">原先的伤害量</param> /// <param name="aData">游戏数据</param> /// <returns>返回新的伤害量</returns> public static sbyte CalcDamage(Card.Effect aWeaponEffect, ChiefBase aSource, ChiefBase aTarget, Card.Effect aDamageEffect, sbyte aOldDamage, GlobalData aData) { switch (aWeaponEffect) { case Card.Effect.GuDianDao: if (aDamageEffect == Card.Effect.Sha && aTarget != null && aData.Game.GamePlayers[aTarget].Hands.Count == 0) { return(++aOldDamage); } break; } return(aOldDamage); }
public void UpdateSinceCardVisuals(int _playerIndex, int cardIndex) { Card card = players[_playerIndex].handState.GetCardInIndex(cardIndex); Card.Effect newEffect = card.effect; CardType newCard = null; for (int j = 0; j < cardTypes.Count; j++) { if (cardTypes[j].cardType == newEffect) { newCard = cardTypes[j]; break; } else { continue; } } if (newCard != null) { Sprite _cardArt = null; Sprite _artwork = null; Sprite _manaCost = null; //Card visuals, red or blue: if (_playerIndex == 0) { _cardArt = blueCard; } else if (_playerIndex == 1) { _cardArt = redCard; } //Card artwork visuals: _artwork = newCard.artwork; //Manacost visuals: int manaCost = Mathf.FloorToInt(newCard.manaCost) / 10; _manaCost = (Sprite)numbers.GetValue(manaCost); cardVisuals[_playerIndex][cardIndex].RefreshCard(_cardArt, _artwork, _manaCost); } else { Debug.Log("Currentcard is null"); } }
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 OnUseEffect(ChiefBase aChief, Card.Effect aEffect, GlobalData aData) { switch (aEffect) { case Card.Effect.JueDou: case Card.Effect.WanJianQiFa: case Card.Effect.NanManRuQin: case Card.Effect.TaoYuanJieYi: case Card.Effect.GuoHeChaiQiao: case Card.Effect.ShunShouQianYang: case Card.Effect.HuoGong: case Card.Effect.JieDaoShaRen: case Card.Effect.TieSuoLianHuan: case Card.Effect.WuGuFengDeng: case Card.Effect.WuXieKeJi: case Card.Effect.WuZhongShengYou: aData.Game.AsynchronousCore.SendMessage(MessageCore.MakeTriggerSkillMesssage(aChief, this, new ChiefBase[] { }, new Card[] { })); aData.Game.TakeingCards(aChief, 1); break; } }
/// <summary> /// 计算伤害量 /// </summary> /// <param name="aOldDamage">原先的伤害量</param> /// <param name="aCards">造成伤害的牌</param> /// <param name="aArmor">护甲效果</param> /// <returns>新的伤害量</returns> public static sbyte CalcDamage(sbyte aOldDamage, Card[] aCards, Card.Effect aArmor) { switch (aArmor) { case Card.Effect.TengJia: if (aCards.Count() == 1) { switch (aCards[0].Element) { case Card.ElementType.Fire: return(++aOldDamage); } } break; case Card.Effect.BaiYinShiZi: aOldDamage = 1; break; } return(aOldDamage); }
public static void CalcShaTargetsCount(Card.Effect aWeaponEffect, Card[] aCards, ChiefBase aChief, Card.Effect aEffect, GlobalData aData, ref int aTargetsCount) { switch (aWeaponEffect) { case Card.Effect.FangTianHuaJi: if (aEffect == Card.Effect.Sha && aCards.Count() > 0 && aData.Game.GamePlayers[aChief].HasCardsInHand(aCards) && aData.Active == aChief) { foreach (Card c in aCards) { if (!aData.Game.GamePlayers[aChief].Hands.Contains(c)) { return; } } if (aData.Game.GamePlayers[aChief].Hands.Except(aCards).Count() == 0) { aTargetsCount += 3; } } break; } }
public static bool EnableFor(Card.Effect aArmor, Card[] aCards, Card.Effect aEffect, ChiefBase aOwner) { switch (aEffect) { case Card.Effect.Sha: if (aArmor == Card.Effect.RenWangDun) { if (aCards.Where(c => c.CardHuaSe == Card.Suit.FangPian || c.CardHuaSe == Card.Suit.HongTao).Count() < 1) { return(false); } } else if (aArmor == Card.Effect.TengJia) { if (aEffect == Card.Effect.WanJianQiFa || aEffect == Card.Effect.NanManRuQin || (aCards.Count() == 1 && aCards[0].Element == Card.ElementType.None)) { return(false); } } break; } return(true); }
/// <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); }