Пример #1
0
        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;
            }
        }
Пример #2
0
    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);
        }
Пример #4
0
    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;
    }
Пример #5
0
    // 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);
        }
    }
Пример #6
0
 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));
         }
     }
 }
Пример #7
0
 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));
         }
     }
 }
Пример #8
0
 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));
     }
 }