示例#1
0
            public override TaskState Process()
            {
                // get a new class
                CardClass randClass = 0;

                do
                {
                    randClass = (CardClass)Random.Next(2, 11);
                } while (randClass == CardClass.WARLOCK);

                // replace Hero Power
                Card heroPowerCard = null;

                switch (randClass)
                {
                case CardClass.DRUID:
                    heroPowerCard = Cards.FromId("CS2_017");
                    break;

                case CardClass.HUNTER:
                    heroPowerCard = Cards.FromId("DS1h_292");
                    break;

                case CardClass.MAGE:
                    heroPowerCard = Cards.FromId("CS2_034");
                    break;

                case CardClass.PALADIN:
                    heroPowerCard = Cards.FromId("CS2_101");
                    break;

                case CardClass.PRIEST:
                    heroPowerCard = Cards.FromId("CS1h_001");
                    break;

                case CardClass.ROGUE:
                    heroPowerCard = Cards.FromId("CS2_083b");
                    break;

                case CardClass.SHAMAN:
                    heroPowerCard = Cards.FromId("CS2_049");
                    break;

                case CardClass.WARRIOR:
                    heroPowerCard = Cards.FromId("CS2_102");
                    break;
                }
                HeroPower heroPower =
                    (HeroPower)Entity.FromCard(Controller, heroPowerCard, new EntityData.Data
                {
                    { GameTag.CREATOR, Source.Id },
                    { GameTag.ZONE, (int)Zone.PLAY }
                });

                Controller.SetasideZone.Add(Controller.Hero.HeroPower);
                Controller.Hero.HeroPower = heroPower;

                var cards = Cards.FormatTypeClassCards(Game.FormatType)[randClass].Where(p => p.Class == randClass && !p.IsQuest).ToArray();

                // replace cards in hand
                for (int i = 0; i < Controller.HandZone.Count; i++)
                {
                    IPlayable entity = Controller.HandZone[i];
                    if (entity.Card.Class != CardClass.WARLOCK)
                    {
                        continue;
                    }
                    Controller.HandZone.Remove(entity);
                    Controller.SetasideZone.Add(entity);
                    var tags = new EntityData.Data
                    {
                        { GameTag.ZONE_POSITION, i + 1 },
                    };
                    if (Game.History)
                    {
                        tags.Add(GameTag.CREATOR, Source.Id);
                    }
                    IPlayable newEntity = Entity.FromCard(Controller, Util.Choose(cards), tags, Controller.HandZone, -1, i);
                    newEntity.NativeTags.Add(GameTag.DISPLAYED_CREATOR, Source.Id);
                    CostReduceEffect.Apply(newEntity.AuraEffects);
                }

                // replace cards in deck
                for (int i = Controller.DeckZone.Count - 1; i >= 0; i--)
                {
                    IPlayable entity = Controller.DeckZone[i];
                    if (entity.Card.Class != CardClass.WARLOCK)
                    {
                        continue;
                    }

                    Card      randCard  = Util.Choose(cards);
                    IPlayable newEntity = Entity.FromCard(Controller, randCard, null, Controller.DeckZone);
                    newEntity.NativeTags.Add(GameTag.DISPLAYED_CREATOR, Source.Id);

                    //Enchantment.GetInstance(Controller, (IPlayable) Source, newEntity, EnchantmentCard);

                    Controller.DeckZone.Remove(entity);
                    Controller.SetasideZone.Add(entity);

                    CostReduceEffect.Apply(newEntity.AuraEffects);
                }

                Game.OnRandomHappened(true);

                return(TaskState.COMPLETE);
            }
示例#2
0
        public override TaskState Process()
        {
            Minion target = (Minion)Target;

            if (target == null)
            {
                return(TaskState.STOP);
            }

            Minion source = (Minion)Source;

            if (source.Zone?.Type != Zone.PLAY)
            {
                return(TaskState.STOP);
            }

            var tags = new EntityData.Data
            {
                { GameTag.CREATOR, Source.Id },
            };

            if (Game.History)
            {
                tags.Add(GameTag.PREMIUM, target[GameTag.PREMIUM]);
            }

            Minion copy = (Minion)Entity.FromCard(Controller, target.Card, tags);

            Trigger trigger = target.ActivatedTrigger;
            IAura   aura    = target.OngoingEffect;

            // LINKED_ENTITY
            if (source == Game.CurrentEventData.EventSource)
            {
                Game.CurrentEventData.EventSource = copy;
            }
            source.Controller.BoardZone.Replace(source, copy);

            // Copy Enchantments
            if (target.AppliedEnchantments != null)
            {
                foreach (Enchantment e in target.AppliedEnchantments)
                {
                    Enchantment instance = Enchantment.GetInstance(Controller, copy, copy, e.Card);
                    if (e[GameTag.TAG_SCRIPT_DATA_NUM_1] > 0)
                    {
                        instance[GameTag.TAG_SCRIPT_DATA_NUM_1] = e[GameTag.TAG_SCRIPT_DATA_NUM_1];
                        if (e[GameTag.TAG_SCRIPT_DATA_NUM_2] > 0)
                        {
                            instance[GameTag.TAG_SCRIPT_DATA_NUM_2] = e[GameTag.TAG_SCRIPT_DATA_NUM_2];
                        }
                    }
                }
            }

            foreach (KeyValuePair <GameTag, int> kvp in target._data.Tags)
            {
                switch (kvp.Key)
                {
                case GameTag.ENTITY_ID:
                case GameTag.CONTROLLER:
                case GameTag.ZONE:
                case GameTag.ZONE_POSITION:
                case GameTag.CREATOR:
                case GameTag.PREMIUM:
                case GameTag.EXHAUSTED:
                    continue;

                default:
                    copy._data.Tags.Add(kvp.Key, kvp.Value);
                    break;
                }
            }

            if (aura != null && copy.OngoingEffect == null)
            {
                aura.Clone(copy);
            }

            if (!target.HasCharge)
            {
                copy.IsExhausted = true;
            }

            if (_addToStack)
            {
                Playables = new List <IPlayable> {
                    copy
                }
            }
            ;

            return(TaskState.COMPLETE);
        }