void Run(Player Owner, GameEvent gameEvent, GameEventArgs eventArgs) { foreach (Card c in eventArgs.Cards) { if (c.HistoryPlace1.DeckType == DeckType.Equipment && c.HistoryPlace1.Player == Owner) { if (AskForSkillUse()) { NotifySkillUse(new List<Player>()); int answer = 0; Owner.AskForMultipleChoice(new MultipleChoicePrompt("XuanFeng"), new List<OptionPrompt>() { new OptionPrompt("XuanFengChuSha"), new OptionPrompt("XuanFengShangHai") }, out answer); if (answer == 0) { ISkill skill; List<Card> cards; List<Player> players; if (Owner.AskForCardUsage(new CardUsagePrompt("XuanFeng1"), new XuanFeng1Verifier(), out skill, out cards, out players)) { try { GameEventArgs args = new GameEventArgs(); Owner[Sha.NumberOfShaUsed]--; args.Source = Owner; args.Targets = new List<Player>(players); args.Skill = new XuanFengShaComposerSkill(); args.Cards = cards; Game.CurrentGame.Emit(GameEvent.CommitActionToTargets, args); } catch (TriggerResultException e) { Trace.Assert(e.Status == TriggerResult.Retry); continue; } } } else { ISkill skill; List<Card> cards; List<Player> players; if (Owner.AskForCardUsage(new CardUsagePrompt("XuanFeng2"), new XuanFeng2Verifier(), out skill, out cards, out players)) { Game.CurrentGame.DoDamage(Owner, players[0], 1, DamageElement.None, null, null); } } } } } }
void Run(Player Owner, GameEvent gameEvent, GameEventArgs eventArgs) { var card = Game.CurrentGame.Judge(Owner, this, null, (judgeResultCard) => { return judgeResultCard.SuitColor == SuitColorType.Black; }); if (card.SuitColor == SuitColorType.Black) { ISkill skill; List<Card> cards; List<Player> players; int toDraw = Owner.LostHealth; List<Card> remainingCards = new List<Card>(); CardsMovement move = new CardsMovement(); for (int i = 0; i < toDraw; i++) { Game.CurrentGame.SyncImmutableCard(Owner, Game.CurrentGame.PeekCard(0)); Card c = Game.CurrentGame.DrawCard(); move.Cards.Add(c); remainingCards.Add(c); } move.To = new DeckPlace(Owner, DeckType.Hand); move.Helper.IsFakedMove = true; Game.CurrentGame.MoveCards(move); if (!Owner.AskForCardUsage(new CardUsagePrompt("MiJi"), new MiJiVerifier(), out skill, out cards, out players)) { players = new List<Player>() { Owner }; } Game.CurrentGame.InsertBeforeDeal(null, remainingCards, new MovementHelper() { IsFakedMove = true }); Game.CurrentGame.DrawCards(players[0], toDraw); } }
bool TianMingProcess(Player player) { int discardedCount = Math.Min(player.HandCards().Count + player.Equipments().Count, 2); ISkill skill; List<Card> cards; List<Player> players; CardUsagePrompt prompt = new CardUsagePrompt("TianMing"); CardUsagePrompt otherPrompt = new CardUsagePrompt("TianMingOther", discardedCount); CardUsagePrompt otherIsNakedPrompt = new CardUsagePrompt("TianMingOtherIsNaked"); if (player.AskForCardUsage(player == Owner ? prompt : (discardedCount == 0 ? otherIsNakedPrompt : otherPrompt), new TianMingVerifier(discardedCount), out skill, out cards, out players)) { if (player == Owner) { TianMingEffect = 0; } else if (player.IsMale) { TianMingEffect = 1; } else { TianMingEffect = 2; } NotifySkillUse(); if (cards.Count > 0) { Game.CurrentGame.HandleCardDiscard(player, cards); } Game.CurrentGame.DrawCards(player, 2); return true; } return false; }
protected void Run(Player owner, GameEvent gameEvent, GameEventArgs eventArgs) { ISkill skill; List<Card> cards; List<Player> players; if (owner.AskForCardUsage(new CardUsagePrompt("MieJi", this), new MieJiVerifier(eventArgs.Targets[0], eventArgs.Card, eventArgs.Card.Type), out skill, out cards, out players)) { NotifySkillUse(players); eventArgs.UiTargets.AddRange(players); eventArgs.Targets = eventArgs.Card.Type.ActualTargets(eventArgs.Source, eventArgs.UiTargets, eventArgs.Card); } }
public void StoreChun(Player owner, GameEvent gameEvent, GameEventArgs eventArgs) { ISkill skill; List<Card> cards; List<Player> players; if (owner.AskForCardUsage(new CardUsagePrompt("ChunLao"), new ChunLaoStoreChunVerifier(), out skill, out cards, out players)) { NotifySkillUse(); CardsMovement move = new CardsMovement(); move.Cards = cards; move.To = new DeckPlace(Owner, ChunDeck); Game.CurrentGame.MoveCards(move); } }
void Run(Player Owner, GameEvent gameEvent, GameEventArgs eventArgs) { ISkill skill; List<Card> cards; List<Player> players; if (Owner.AskForCardUsage(new CardUsagePrompt("HuWei"), new HuWeiVerifier(), out skill, out cards, out players)) { NotifySkillUse(); GameEventArgs args = new GameEventArgs(); args.Source = Owner; args.Targets = players; args.Skill = new CardWrapper(Owner, new ShuiYanQiJun(), false); args.Cards = new List<Card>(); Game.CurrentGame.Emit(GameEvent.CommitActionToTargets, args); } }
void Run(Player owner, GameEvent gameEvent, GameEventArgs eventArgs) { ISkill skill; List<Card> cards; List<Player> players; if (owner.AskForCardUsage(new CardUsagePrompt("YuanHu", this), new YuanHuVerifier(), out skill, out cards, out players)) { CardCategory type = cards[0].Type.Category; YuanHuEffect = effectMap[type]; NotifySkillUse(players); Game.CurrentGame.HandleCardTransfer(owner, players[0], DeckType.Equipment, cards); switch (type) { case CardCategory.Weapon: { var result = from player in Game.CurrentGame.AlivePlayers where player != players[0] && Game.CurrentGame.DistanceTo(players[0], player) == 1 select player; if (result.Count() == 0) break; List<Card> nCards; List<Player> nPlayers; if (!owner.AskForCardUsage(new CardUsagePrompt("YuanHuQiZhi"), new YuanHuChoiceOnePlayer(players[0]), out skill, out nCards, out nPlayers)) { nPlayers = new List<Player>(); nPlayers.Add(result.First()); } if (nPlayers[0].HandCards().Count + nPlayers[0].DelayedTools().Count + nPlayers[0].Equipments().Count > 0) { var Card = Game.CurrentGame.SelectACardFrom(nPlayers[0], owner, new CardChoicePrompt("YuanHu", nPlayers[0], owner), "YuanHu", false, false); Game.CurrentGame.HandleCardDiscard(nPlayers[0], new List<Card>() { Card }); } break; } case CardCategory.Armor: { Game.CurrentGame.DrawCards(players[0], 1); break; } case CardCategory.DefensiveHorse: case CardCategory.OffensiveHorse: { Game.CurrentGame.RecoverHealth(owner, players[0], 1); break; } default: break; } } }
/// <summary> /// 某玩家对某玩家视为使用一张虚拟的杀,能被技能转化,影响选择的目标,如疠火,朱雀羽扇 /// </summary> public static void UseDummyShaTo(Player source, Player target, CardHandler shaType, Prompt prompt, CardAttribute helper = null, bool notifyShaSound = true) { CompositeCard sha = new CompositeCard() { Type = shaType }; var v1 = new DummyShaVerifier(target, shaType, helper); ISkill skill; List<Card> cards; List<Player> players; Game.CurrentGame.Emit(GameEvent.PlayerIsAboutToUseCard, new PlayerIsAboutToUseOrPlayCardEventArgs() { Source = source, Verifier = v1 }); source.AskForCardUsage(prompt, v1, out skill, out cards, out players); GameEventArgs args = new GameEventArgs(); args.Source = source; args.Targets = new List<Player>(players); if (target != null) args.Targets.Add(target); args.Skill = skill == null ? new CardWrapper(source, shaType, notifyShaSound) : skill; args.Cards = cards; CompositeCard card = null; if (skill != null) { List<Card> dummyCards = new List<Card>() { new Card() { Type = shaType, Place = new DeckPlace(null, DeckType.None) } }; (skill as CardTransformSkill).TryTransform(dummyCards, null, out card); //虚拟的杀是不能有子卡的。 card.Subcards.Clear(); } //在触发 CommitActionToTargets 的时候,只有在这里,args.Card才会被赋值,且为CompositeCard args.Card = card; if (args.Targets.Count == 0) { foreach (Player p in Game.CurrentGame.AlivePlayers) { if (p != source && v1.FastVerify(source, skill, cards, new List<Player>() { p }) != VerifierResult.Fail) { args.Targets.Add(p); break; } } } try { Game.CurrentGame.Emit(GameEvent.CommitActionToTargets, args); } catch (TriggerResultException) { //程序总是不应该执行到这里的 Trace.Assert(false); } }
void Run(Player Owner, GameEvent gameEvent, GameEventArgs eventArgs) { ISkill skill; List<Card> cards; List<Player> players; if (Owner.AskForCardUsage(new CardUsagePrompt("ShiChou", this), new ShiChouVerifier(), out skill, out cards, out players)) { NotifySkillUse(players); Owner[ShiChouUsed] = 1; players[0][ShiChouSource[Owner]] = 1; Game.CurrentGame.HandleCardTransferToHand(Owner, players[0], cards); players[0][ShiChouStatus] = 1; Trigger tri1 = new ShiChouProtect(Owner, players[0]); Trigger tri2 = new ShiChouDrawCards(players[0], Owner); Trigger tri3 = new ShiChouRemoval(players[0], Owner, tri1, tri2); Game.CurrentGame.RegisterTrigger(GameEvent.DamageInflicted, tri1); Game.CurrentGame.RegisterTrigger(GameEvent.DamageComputingFinished, tri2); Game.CurrentGame.RegisterTrigger(GameEvent.PlayerIsAboutToDie, tri3); } }
public void SaveALife(Player owner, GameEvent gameEvent, GameEventArgs eventArgs) { ISkill skill; List<Card> cards; List<Player> players; while (eventArgs.Targets[0].Health <= 0 && Game.CurrentGame.Decks[owner, ChunDeck].Count > 0 && owner.AskForCardUsage(new CardUsagePrompt("ChunLaoSave"), new ChuLaoVerifier(), out skill, out cards, out players)) { NotifySkillUse(eventArgs.Targets); Card theCard = cards[0]; Game.CurrentGame.HandleCardDiscard(owner, new List<Card>() { theCard }); Game.CurrentGame.IsDying.Push(eventArgs.Targets[0]); GameEventArgs args = new GameEventArgs(); args.Source = eventArgs.Targets[0]; args.Targets = new List<Player>() { eventArgs.Targets[0] }; args.Skill = new ChunLaoJiuCardTransformSkill(); args.Cards = new List<Card>(); Game.CurrentGame.Emit(GameEvent.CommitActionToTargets, args); Game.CurrentGame.IsDying.Pop(); } }
void Run(Player Owner, GameEvent gameEvent, GameEventArgs eventArgs) { int drawCount = Owner.LostHealth; Game.CurrentGame.DrawCards(Owner, drawCount); drawCount = Math.Min(Owner.HandCards().Count, drawCount); while (drawCount > 0) { ISkill skill; List<Card> cards; List<Player> players; if (Owner.AskForCardUsage(new CardUsagePrompt("MiJi", drawCount), new MiJiVerifier(drawCount), out skill, out cards, out players)) { drawCount -= cards.Count; Game.CurrentGame.HandleCardTransferToHand(Owner, players[0], cards); } else { drawCount = 0; } } }
void Run(Player owner, GameEvent gameEvent, GameEventArgs eventArgs, List<Card> cards, List<Player> players) { Card theCard = cards[0]; Game.CurrentGame.HandleCardTransfer(owner, players[0], DeckType.Equipment, cards); switch (theCard.Type.Category) { case CardCategory.Weapon: { var result = from player in Game.CurrentGame.AlivePlayers where player != players[0] && Game.CurrentGame.DistanceTo(players[0], player) == 1 select player; if (result.Count() == 0) break; ISkill skill; List<Card> nCards; List<Player> nPlayers; if (!owner.AskForCardUsage(new CardUsagePrompt("YuanHuQiZhi"), new YuanHuChoiceOnePlayer(players[0]), out skill, out nCards, out nPlayers)) { nPlayers = new List<Player>(); nPlayers.Add(result.First()); } var Card = Game.CurrentGame.SelectACardFrom(nPlayers[0], owner, new CardChoicePrompt("YuanHu", nPlayers[0], owner), "YuanHu"); Game.CurrentGame.HandleCardDiscard(nPlayers[0], new List<Card>() { Card }); break; } case CardCategory.Armor: { Game.CurrentGame.DrawCards(players[0], 1); break; } case CardCategory.DefensiveHorse: case CardCategory.OffensiveHorse: { Game.CurrentGame.RecoverHealth(owner, players[0], 1); break; } default: break; } }
void Run(Player Owner, GameEvent gameEvent, GameEventArgs eventArgs) { Owner[FenYong.FenYongStatus] = 0; int answer = 0; Player current = Game.CurrentGame.CurrentPlayer; int choiceCount = Owner.LostHealth; int currentPlayerCardsCount = current.HandCards().Count + current.Equipments().Count(); List<OptionPrompt> prompts = new List<OptionPrompt>(); prompts.Add(new OptionPrompt("XueHenQiPai", current, choiceCount)); prompts.Add(new OptionPrompt("XueHenSha")); Owner.AskForMultipleChoice(new MultipleChoicePrompt("XueHen"), prompts, out answer); if (answer == 0) { Owner[XueHenEffect] = 0; NotifySkillUse(); if (currentPlayerCardsCount <= choiceCount) { List<Card> cards = new List<Card>(); cards.AddRange(current.HandCards()); cards.AddRange(current.Equipments()); Game.CurrentGame.HandleCardDiscard(current, cards); return; } List<List<Card>> choiceAnswer; List<DeckPlace> sourcePlace = new List<DeckPlace>(); sourcePlace.Add(new DeckPlace(current, DeckType.Hand)); sourcePlace.Add(new DeckPlace(current, DeckType.Equipment)); if (!Owner.AskForCardChoice(new CardChoicePrompt("XueHen", current, Owner), sourcePlace, new List<string>() { "QiPaiDui" }, new List<int>() { choiceCount }, new RequireCardsChoiceVerifier(choiceCount), out choiceAnswer, null, CardChoiceCallback.GenericCardChoiceCallback)) { choiceAnswer = new List<List<Card>>(); choiceAnswer.Add(Game.CurrentGame.PickDefaultCardsFrom(new List<DeckPlace>() { new DeckPlace(current, DeckType.Hand), new DeckPlace(current, DeckType.Equipment) }, choiceCount)); } Game.CurrentGame.HandleCardDiscard(current, choiceAnswer[0]); } else { ISkill skill; List<Card> cards; List<Player> players; if (!Owner.AskForCardUsage(new CardUsagePrompt("XueHen"), new XueHenShaVerifier(), out skill, out cards, out players)) { players = new List<Player>(); List<Player> nPlayers = Game.CurrentGame.AlivePlayers; players.Add(nPlayers[0]); } Owner[XueHenEffect] = 1; NotifySkillUse(players); GameEventArgs args = new GameEventArgs(); Owner[Sha.NumberOfShaUsed]--; args.Source = Owner; args.Targets = players; args.Skill = new CardWrapper(Owner, new RegularSha()); Game.CurrentGame.Emit(GameEvent.CommitActionToTargets, args); } }
void Run(Player Owner, GameEvent gameEvent, GameEventArgs eventArgs) { ISkill skill; List<Card> cards; List<Player> players; if (Owner.AskForCardUsage(new CardUsagePrompt("JunWei"), new JunWeiVerifier(), out skill, out cards, out players)) { NotifySkillUse(players); Game.CurrentGame.HandleCardDiscard(Owner, cards); Player target = players[0]; if (target.AskForCardUsage(new CardUsagePrompt("JunWeiShowCard"), new JunWeiShowCardVerifier(), out skill, out cards, out players)) { Card temp = cards[0]; Game.CurrentGame.NotificationProxy.NotifyShowCard(target, temp); if (!Owner.AskForCardUsage(new CardUsagePrompt("JunWeiGiveShan"), new JunWeiGiveShanVerifier(), out skill, out cards, out players)) { players = new List<Player>() { Owner }; } Game.CurrentGame.SyncCardAll(ref temp); Game.CurrentGame.HandleCardTransferToHand(target, players[0], new List<Card>() { temp }); } else { Game.CurrentGame.LoseHealth(target, 1); if (target.Equipments().Count == 0) return; GameDelays.Delay(GameDelayTypes.JunWei); List<List<Card>> answer; List<DeckPlace> sourceDecks = new List<DeckPlace>(); sourceDecks.Add(new DeckPlace(target, DeckType.Equipment)); if (!Owner.AskForCardChoice(new CardChoicePrompt("JunWeiChoice", target, Owner), sourceDecks, new List<string>() { "JunWei" }, new List<int>() { 1 }, new RequireOneCardChoiceVerifier(), out answer)) { answer = new List<List<Card>>(); answer.Add(new List<Card>()); answer[0].Add(target.Equipments().First()); } junweiTarget.Add(target); Game.CurrentGame.HandleCardTransfer(target, target, JunWeiDeck, answer[0]); } } }
void Run(Player Owner, GameEvent gameEvent, GameEventArgs eventArgs) { ISkill skill; List<Card> cards; List<Player> players; bool shensu1 = gameEvent == GameEvent.PhaseOutEvents[TurnPhase.Start]; CardUsagePrompt shensu1Prompt = new CardUsagePrompt("ShenSu1", this); CardUsagePrompt shensu2Prompt = new CardUsagePrompt("ShenSu2", this); if (Owner.AskForCardUsage(shensu1 ? shensu1Prompt : shensu2Prompt, new ShenSuVerifier(shensu1, verifier), out skill, out cards, out players)) { NotifySkillUse(); if (!shensu1) Game.CurrentGame.HandleCardDiscard(Owner, cards); GameEventArgs args = new GameEventArgs(); Owner[Sha.NumberOfShaUsed]--; args.Source = Owner; args.Targets = players; args.Skill = skill == null ? new CardWrapper(Owner, new RegularSha(), false) : skill; args.Cards = new List<Card>(); CardTransformSkill transformSkill = skill as CardTransformSkill; if (transformSkill != null) { CompositeCard card; transformSkill.TryTransform(new List<Card>() { new Card() { Type = new RegularSha(), Place = new DeckPlace(null, DeckType.None) } }, null, out card); card.Subcards.Clear(); args.Card = card; } Game.CurrentGame.Emit(GameEvent.CommitActionToTargets, args); if (shensu1) { Game.CurrentGame.PhasesSkipped.Add(TurnPhase.Judge); Game.CurrentGame.PhasesSkipped.Add(TurnPhase.Draw); } else Game.CurrentGame.PhasesSkipped.Add(TurnPhase.Play); } }