private void ProcessPlayCard(ServerGameState state, EventCardPlayed playCardEvent) { state.Me.LastTurnEvents.Add(playCardEvent); var card = playCardEvent.Card; switch (card.Type) { case CardType.Spell: break; case CardType.Minion: var minion = new Minion(card as CardMinion, state.Me.MinionOrderNumber++); logger.Log(LogType.Services, LogSeverity.Info, $"{minion.Card.Name} is summoned"); state.Me.Minions.Insert(playCardEvent.MinionPosition.Value, minion); ProcessEvent(state, new EventMinionSummoned() { MinionId = minion.Id }); break; case CardType.Weapon: break; case CardType.Hero: break; } }
public override void NotifyOfEvent(AbstractEvent eventData) { EventCardPlayed data = (EventCardPlayed)eventData; if (data.cardAmbient == CardAmbient.DIALOGUE && data.cardType == CardType.ATTACK) { NegotiationManager.Instance.AddAction(new DrawCardsAction(this.OWNER, 1)); this.stacks -= 1; } if (this.stacks == 0) { NegotiationManager.Instance.AddAction(new DestroyArgumentAction(this)); } }
public void ProcessPlayCard(ServerGameState fullState, InteractionPlayCard interactionPlayCard) { var me = fullState.Me; var opp = fullState.Opp; var card = me.Hand.First(x => x.Id == interactionPlayCard.CardId); logger.Log(LogType.Services, LogSeverity.Info, $"{me.Player.Name} plays {card.Name} for {card.Cost} mana"); me.Mana.SpendMana(card.Cost); me.Hand.Remove(card); var newEvent = new EventCardPlayed() { Card = card, MinionPosition = interactionPlayCard.MinionPosition }; eventProcessor.ProcessEvent(fullState, newEvent); }
public override void NotifyOfEvent(AbstractEvent eventData) { EventCardPlayed data = (EventCardPlayed)eventData; AbstractCard cardPlayed = data.cardPlayed; if (this.OWNER.GetHand().Contains(this) && data.cardPlayed.OWNER == this.OWNER) { this.OWNER.GetHand().Remove(this); if (this.isUpgraded) { this.OWNER.AddTempCardToHand(data.cardPlayed.ID, true); // Upgrade card by default if this card is upgraded } else { this.OWNER.AddTempCardToHand(data.cardPlayed.ID, data.cardPlayed.isUpgraded); // Otherwise, only upgrade card if the played card itself was upgraded } } return; }
// Handle post-card playing effects (move card to discard pile, spend AP costs, etc.) public override void NotifyOfEvent(AbstractEvent eventData) { if (eventData.type == EventType.CARD_PLAYED) { EventCardPlayed data = (EventCardPlayed)eventData; AbstractCard cardPlayed = data.cardPlayed; cardsPlayedThisTurn.Add(data.cardPlayed); numCardsPlayedThisTurn += 1; if (cardPlayed.COSTS_ALL_AP) { cardPlayed.OWNER.curAP -= cardPlayed.OWNER.curAP; // Handle X-cost cards } else { cardPlayed.OWNER.curAP -= cardPlayed.COST; } if (cardPlayed.HasTag(CardTags.DESTROY)) // Destroy card { cardPlayed.OWNER.Destroy(cardPlayed); } else if (cardPlayed.IsTrait() || cardPlayed.HasTag(CardTags.SCOUR)) // Scour stuff { cardPlayed.OWNER.Scour(cardPlayed); } else { if (cardPlayed.OWNER.GetHand().Contains(cardPlayed)) // This check is to prevent adding cards from "choice" mechanics from being added to the discard (see: Deckard's Instincts card) { cardPlayed.OWNER.GetHand().Remove(cardPlayed); cardPlayed.OWNER.GetDiscardPile().AddCard(cardPlayed); } } } else if (eventData.type == EventType.ARGUMENT_DESTROYED) { EventArgDestroyed data = (EventArgDestroyed)eventData; enemy.RecalculateIntents(data.argumentDestroyed); } }
public override void NotifyOfEvent(AbstractEvent eventData) { if (eventData.type == EventType.CARD_PLAYED) { EventCardPlayed data = (EventCardPlayed)eventData; if (data.cardPlayed.AMBIENCE == CardAmbient.DIALOGUE) { NegotiationManager.Instance.AddAction(new DeployArgumentAction(this.OWNER, new ArgumentAmbientShiftDialogue(), this.stacks)); } else if (data.cardPlayed.AMBIENCE == CardAmbient.AGGRESSION) { NegotiationManager.Instance.AddAction(new DeployArgumentAction(this.OWNER, new ArgumentAmbientShiftAggression(), this.stacks)); } } else if (eventData.type == EventType.TURN_END) { EventTurnEnd data = (EventTurnEnd)eventData; if (data.end == this.OWNER) { NegotiationManager.Instance.AddAction(new DestroyArgumentAction(this)); } } }
public override void NotifyOfEvent(AbstractEvent eventData) { if (eventData.type == EventType.CARD_PLAYED) { EventCardPlayed data = (EventCardPlayed)eventData; if (data.cardType == CardType.ATTACK) { NegotiationManager.Instance.AddAction(new ApplyPoiseAction(this.OWNER, this.OWNER.GetCoreArgument(), this.stacks)); foreach (AbstractArgument arg in this.OWNER.GetSupportArguments()) { NegotiationManager.Instance.AddAction(new ApplyPoiseAction(this.OWNER, arg, this.stacks)); } } } else if (eventData.type == EventType.TURN_END) { EventTurnEnd data = (EventTurnEnd)eventData; if (data.end == this.OWNER) { NegotiationManager.Instance.AddAction(new DestroyArgumentAction(this)); } } }
public override void NotifyOfEvent(AbstractEvent eventData) { if (eventData.type == EventType.TURN_END) { EventTurnEnd data = (EventTurnEnd)eventData; if (data.end == this.OWNER) { this.stacks -= 1; } } else if (eventData.type == EventType.ARGUMENT_DESTROYED) { EventArgDestroyed data = (EventArgDestroyed)eventData; if (data.argumentDestroyed == this) { this.stacks = 0; } } else { EventCardPlayed data = (EventCardPlayed)eventData; if (data.cardType == CardType.ATTACK && data.cardAmbient == CardAmbient.AGGRESSION && data.cardPlayed.OWNER == this.OWNER) { NegotiationManager.Instance.AddAction(new DeployArgumentAction(this.OWNER, new ArgumentAmbientShiftAggression(), 1)); } } if (this.stacks != currentlyApplying) { int delta = (this.stacks - currentlyApplying); this.OWNER.dmgDealtAggressionAdd += delta; currentlyApplying = this.stacks; } if (this.stacks == 0) { NegotiationManager.Instance.AddAction(new DestroyArgumentAction(this)); } }