Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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]));
                }
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
#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);
        }
Exemplo n.º 6
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);
        }