private void Apply(Minion m) { for (int i = 0; i < _effects.Length; i++) { _effects[i].ApplyAuraTo(m); } if (EnchantmentCard != null && _history) { Enchantment.GetInstance(m.Controller, _owner, m, in EnchantmentCard); } }
private void Apply(Minion m) { for (int i = 0; i < _effects.Length; i++) { _effects[i].ApplyAuraTo(m); } if (EnchantmentCard != null && _history) { Enchantment.GetInstance(m.Controller, _owner, m, in EnchantmentCard); for (int i = 0; i < _effects.Length; i++) { _owner.Game.PowerHistory.Add( PowerHistoryBuilder.TagChange(_owner.Id, _effects[i].Tag, _owner[_effects[i].Tag])); } } }
public override TaskState Process() { if (!(Source is IPlayable source)) { return(TaskState.STOP); } if (Controller.ProxyCthun == 0) { return(TaskState.STOP); } IPlayable proxyCthun = Game.IdEntityDic[Controller.ProxyCthun]; if (Game.History) { if (source.AppliedEnchantments == null) { source.AppliedEnchantments = new List <Enchantment>(); } proxyCthun.AppliedEnchantments?.ForEach(e => { Enchantment instance = Enchantment.GetInstance(Controller, (IPlayable)Target, Target, 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]; } } Source.AppliedEnchantments.Add(instance); }); } proxyCthun.OngoingEffect?.Clone((IPlayable)Source); Target[GameTag.ATK] = proxyCthun[GameTag.ATK]; Target[GameTag.HEALTH] = proxyCthun[GameTag.HEALTH]; Target[GameTag.TAUNT] = proxyCthun[GameTag.TAUNT]; return(TaskState.COMPLETE); }
public override TaskState Process() { IEnumerable <IPlayable> entities = IncludeTask.GetEntities(Type, Controller, Source, Target, Playables); foreach (IPlayable p in entities) { var m = p as Minion; int atk = m.AttackDamage; int health = m.Health; if (Game.History) { Enchantment instance = Enchantment.GetInstance(Controller, (IPlayable)Source, p, _enchantmentCard); instance[GameTag.TAG_SCRIPT_DATA_NUM_1] = atk; instance[GameTag.TAG_SCRIPT_DATA_NUM_2] = health; } new Effect(GameTag.ATK, EffectOperator.SET, health).Apply(p); new Effect(GameTag.HEALTH, EffectOperator.SET, atk).Apply(p); } return(TaskState.COMPLETE); }
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member public override TaskState Process() { if (Controller.BoardZone.IsFull) { return(TaskState.STOP); } IList <IPlayable> entities = IncludeTask.GetEntities(Type, Controller, Source, Target, Playables).ToList(); if (entities.Count < 1) { return(TaskState.STOP); } // shuffle list randomly if needed entities = RandomFlag ? entities.OrderBy(x => Util.Random.Next()).ToList() : entities; if (RandomFlag) { Game.OnRandomHappened(true); } int space = Controller.BoardZone.MaxSize - Controller.BoardZone.Count; space = entities.Count > space ? space : entities.Count; if (entities[0].Zone == null || entities[0].Zone.Type != Enums.Zone.PLAY) { for (int i = 0; i < space; i++) { // clone task here var task = new SummonTask(_side, entities[i].Card) { Game = Controller.Game, Controller = Controller, Source = Source as IPlayable, Target = Target as IPlayable }; Controller.Game.TaskQueue.Enqueue(task); } } else { for (int i = 0; i < entities.Count; i++) { if (Controller.BoardZone.IsFull) { break; } Minion target = (Minion)entities[i]; var tags = new EntityData.Data((EntityData.Data)target.NativeTags); if (target.Controller != Controller) { tags[GameTag.CONTROLLER] = Controller.PlayerId; } IPlayable copy = Entity.FromCard(Controller, target.Card, tags, Controller.BoardZone); target.AppliedEnchantments?.ForEach(e => { 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]; } } }); if (target.OngoingEffect != null && copy.OngoingEffect == null) { target.OngoingEffect.Clone(copy); } if (_addToStack) { Playables.Add(copy); } } } 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); }