Beispiel #1
0
        // Helper that applies normal damage and shield leech (affected by leechFactor).
        static public object Act_ShieldLeech_Helper(NetBattlefield bf, NetQueueItem q, FInt leechFactor)
        {
            NetSkill ns    = q.GetNetSkill(bf);
            NetCard  owner = bf.GetCardByID(ns.OwnerCardID);

            NetCard target = null;

            if (NetType.IsNullOrEmpty(q.Targets))
            {
                return(null);
            }

            FInt damage        = owner.GetSkillCastingStrength(ns);
            int  shieldLeeched = 0;

            // Primary targets.
            foreach (var v in q.Targets.value)
            {
                target = bf.ConvertPositionIDToCard(v);
                if (target != null)
                {
                    target.ReciveNormalDamage(damage, bf, q, v);
                    shieldLeeched += (damage * leechFactor).ToInt();
                }
            }

            // Secondary targets.
            if (!NetType.IsNullOrEmpty(q.SecondaryTargets))
            {
                damage *= 0.5f;

                foreach (var v in q.SecondaryTargets.value)
                {
                    target = bf.ConvertPositionIDToCard(v);
                    if (target != null)
                    {
                        target.ReciveNormalDamage(damage, bf, q, v);
                        shieldLeeched += (damage * leechFactor).ToInt();
                    }
                }
            }

            if (shieldLeeched > 0)
            {
                FInt currentShields = owner.GetCA_SHIELD();
                owner.SetCA_SHIELD(currentShields + shieldLeeched);
            }

            return(null);
        }
Beispiel #2
0
        // Ancient version of the built-in script Act_DrainHealthEssence, which leeches 80% instead.
        // Note: Built-in script Act_DrainHealthAncient does not appear to do this.
        static public object Act_LifeLeech_Ancient(NetBattlefield bf, NetQueueItem q, List <NetQueueItem> stack, List <NetQueueItem> previousItems, MHRandom random)
        {
            NetSkill ns    = q.GetNetSkill(bf);
            NetCard  owner = bf.GetCardByID(ns.OwnerCardID);

            NetCard target = null;

            if (NetType.IsNullOrEmpty(q.Targets))
            {
                return(null);
            }

            FInt damage      = owner.GetSkillCastingStrength(ns);
            int  lifeLeeched = 0;

            // Primary targets.
            foreach (var v in q.Targets.value)
            {
                target = bf.ConvertPositionIDToCard(v);
                if (target != null)
                {
                    target.ReciveNormalDamage(damage, bf, q, v);
                    lifeLeeched += (damage * 0.8f).ToInt();
                }
            }

            // Secondary targets.
            if (!NetType.IsNullOrEmpty(q.SecondaryTargets))
            {
                damage *= 0.5f;

                foreach (var v in q.SecondaryTargets.value)
                {
                    target = bf.ConvertPositionIDToCard(v);
                    if (target != null)
                    {
                        target.ReciveNormalDamage(damage, bf, q, v);
                        lifeLeeched += (damage * 0.8f).ToInt();
                    }
                }
            }

            if (lifeLeeched > 0)
            {
                owner.ReciveHealthNormal(lifeLeeched, bf, q, t);
            }

            return(null);
        }
        static public object Act_AddShieldingImproved(
            NetBattlefield bf,
            NetQueueItem q,
            List <NetQueueItem> stack,
            List <NetQueueItem> previousItems,
            MHRandom random)
        {
            NetSkill ns    = q.GetNetSkill(bf);
            NetCard  owner = bf.GetCardByID(ns.OwnerCardID);

            //skill needs target(-s)
            if (!NetTypeAtomic.IsValid(q.Targets))
            {
                return(null);
            }
            FInt extra = FInt.ZERO;

            if (ns.MainAtt != null)
            {
                extra = owner.GetSkillCastingStrength(ns);
            }

            FInt   value = ns.GetFloatAttribute("TAG-CA_SHIELD");
            string sign  = ns.GetStringAttribute("TAG-CA_SHIELD");

            if (value == FInt.ZERO)
            {
                if (bf.ChallengeType == EChallengeType.TypePhysical)
                {
                    value = ns.GetFloatAttribute("TAG-SHIELDING_PHYSICAL");
                }
                else if (bf.ChallengeType == EChallengeType.TypeMental)
                {
                    value = ns.GetFloatAttribute("TAG-SHIELDING_MENTAL");
                }
                else if (bf.ChallengeType == EChallengeType.TypeSpirit)
                {
                    value = ns.GetFloatAttribute("TAG-SHIELDING_SPIRIT");
                }
            }
            if (string.IsNullOrEmpty(sign))
            {
                if (bf.ChallengeType == EChallengeType.TypePhysical)
                {
                    sign = ns.GetStringAttribute("TAG-SHIELDING_PHYSICAL");
                }
                else if (bf.ChallengeType == EChallengeType.TypeMental)
                {
                    sign = ns.GetStringAttribute("TAG-SHIELDING_MENTAL");
                }
                else if (bf.ChallengeType == EChallengeType.TypeSpirit)
                {
                    sign = ns.GetStringAttribute("TAG-SHIELDING_SPIRIT");
                }
            }
            value += extra;

            value.CutToInt();
            if (sign == "*")
            {
                value = value * 0.01f;
            }

            foreach (var v in q.Targets.value)
            {
                NetCard target = bf.ConvertPositionIDToCard(v);
                if (target == null)
                {
                    continue;
                }
                FInt prev = target.GetCA_SHIELD();

                if (sign == "+")
                {
                    target.SetCA_SHIELD(value + prev);
                }
                else if (sign == "*")
                {
                    target.SetCA_SHIELD(value * prev);
                }
            }

            if (NetType.IsNullOrEmpty(q.SecondaryTargets))
            {
                return(null);
            }

            foreach (var v in q.SecondaryTargets.value)
            {
                NetCard target = bf.ConvertPositionIDToCard(v);
                if (target == null)
                {
                    continue;
                }
                FInt prev = target.GetCA_SHIELD();

                if (sign == "+")
                {
                    target.SetCA_SHIELD(value + prev);
                }
                else if (sign == "*")
                {
                    target.SetCA_SHIELD(value * prev);
                }
            }

            return(null);
        }