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); }
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); }