public static void BuildReplacementArgs_MobState(
            List <Tuple <string, string> > replacementArgs,
            MobStateType sourceMobState,
            double sourceMobHpPercentLeft,
            MobStateType destMobStateDefault)
        {
            if (sourceMobHpPercentLeft < 100.0)
            {
                replacementArgs.Add(Tuple.Create("MobState", "BelowHp"));
                replacementArgs.Add(Tuple.Create("MobHpPercentLeft", sourceMobHpPercentLeft.ToString()));
            }

            else if (sourceMobState != destMobStateDefault)
            {
                replacementArgs.Add(Tuple.Create("MobState", sourceMobState.ToString()));
            }
        }
        // 30May2013-08:11UTC chinajade
        public static void CheckMobState(
            List <string> exclusionReasons,
            WoWObject wowObject,
            MobStateType mobState,
            double mobLowHealthThreshold)
        {
            var wowUnit = wowObject.ToUnit();

            if (Query.IsViable(wowUnit))
            {
                if (!Query.IsStateMatch_MobState(wowUnit, mobState, mobLowHealthThreshold))
                {
                    exclusionReasons.Add(wowUnit.HealthPercent <= mobLowHealthThreshold
                        ? string.Format("!{0}", mobState)
                        : string.Format("!{0}({1}%)", MobStateType.BelowHp, mobLowHealthThreshold));
                }
            }
        }
        // 28Apr2013-03:38UTC chinajade
        public static bool IsStateMatch_MobState(WoWObject wowObject, MobStateType requestedMobState, double mobHpPercentLeft = 100.0)
        {
            var wowUnit = wowObject as WoWUnit;

            if (wowUnit != null)
            {
                bool isMobAlive = wowUnit.IsAlive;

                return
                    ((wowUnit.HealthPercent <= mobHpPercentLeft) &&
                     (requestedMobState == MobStateType.DontCare) ||
                     ((requestedMobState == MobStateType.Alive) && isMobAlive) ||
                     ((requestedMobState == MobStateType.AliveNotInCombat) && isMobAlive && !wowUnit.Combat) ||
                     ((requestedMobState == MobStateType.BelowHp) && isMobAlive) ||
                     ((requestedMobState == MobStateType.Dead) && wowUnit.IsDead && wowUnit.IsUntagged()));
            }

            return(false);
        }