public static bool CanDoCombatHealOther(BaseCreature creature)
        {
            if (creature.IsBarded())
            {
                return(false);
            }

            if (creature.DictCombatAction[CombatAction.CombatHealOther] > 0)
            {
                if (DateTime.UtcNow > creature.NextCombatHealActionAllowed && !creature.BardProvoked && !creature.BardPacified)
                {
                    int TotalValues = 0;

                    Dictionary <CombatHealOther, int> DictTemp = new Dictionary <CombatHealOther, int>();

                    if (AICombatHealOther.CanDoCombatHealOtherSpellHealOther(creature, 100))
                    {
                        DictTemp.Add(CombatHealOther.SpellHealOther100, creature.DictCombatHealOther[CombatHealOther.SpellHealOther100]);
                    }
                    if (AICombatHealOther.CanDoCombatHealOtherSpellHealOther(creature, 75))
                    {
                        DictTemp.Add(CombatHealOther.SpellHealOther75, creature.DictCombatHealOther[CombatHealOther.SpellHealOther75]);
                    }
                    if (AICombatHealOther.CanDoCombatHealOtherSpellHealOther(creature, 50))
                    {
                        DictTemp.Add(CombatHealOther.SpellHealOther50, creature.DictCombatHealOther[CombatHealOther.SpellHealOther50]);
                    }
                    if (AICombatHealOther.CanDoCombatHealOtherSpellHealOther(creature, 25))
                    {
                        DictTemp.Add(CombatHealOther.SpellHealOther25, creature.DictCombatHealOther[CombatHealOther.SpellHealOther25]);
                    }
                    if (AICombatHealOther.CanDoCombatHealOtherSpellCureOther(creature))
                    {
                        DictTemp.Add(CombatHealOther.SpellCureOther, creature.DictCombatHealOther[CombatHealOther.SpellCureOther]);
                    }
                    if (AICombatHealOther.CanDoCombatHealOtherBandageHealOther(creature, 100))
                    {
                        DictTemp.Add(CombatHealOther.BandageHealOther100, creature.DictCombatHealOther[CombatHealOther.BandageHealOther100]);
                    }
                    if (AICombatHealOther.CanDoCombatHealOtherBandageHealOther(creature, 75))
                    {
                        DictTemp.Add(CombatHealOther.BandageHealOther75, creature.DictCombatHealOther[CombatHealOther.BandageHealOther75]);
                    }
                    if (AICombatHealOther.CanDoCombatHealOtherBandageHealOther(creature, 50))
                    {
                        DictTemp.Add(CombatHealOther.BandageHealOther50, creature.DictCombatHealOther[CombatHealOther.BandageHealOther50]);
                    }
                    if (AICombatHealOther.CanDoCombatHealOtherBandageHealOther(creature, 25))
                    {
                        DictTemp.Add(CombatHealOther.BandageHealOther25, creature.DictCombatHealOther[CombatHealOther.BandageHealOther25]);
                    }
                    if (AICombatHealOther.CanDoCombatHealOtherBandageCureOther(creature))
                    {
                        DictTemp.Add(CombatHealOther.BandageCureOther, creature.DictCombatHealOther[CombatHealOther.BandageCureOther]);
                    }

                    //Calculate Total Values
                    foreach (KeyValuePair <CombatHealOther, int> pair in DictTemp)
                    {
                        TotalValues += pair.Value;
                    }

                    if (TotalValues > 0)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
        public static bool DoCombatHealOther(BaseCreature creature)
        {
            CombatHealOther healAction = CombatHealOther.None;

            int TotalValues = 0;

            Dictionary <CombatHealOther, int> DictTemp = new Dictionary <CombatHealOther, int>();

            if (AICombatHealOther.CanDoCombatHealOtherSpellHealOther(creature, 100))
            {
                DictTemp.Add(CombatHealOther.SpellHealOther100, creature.DictCombatHealOther[CombatHealOther.SpellHealOther100]);
            }
            if (AICombatHealOther.CanDoCombatHealOtherSpellHealOther(creature, 75))
            {
                DictTemp.Add(CombatHealOther.SpellHealOther75, creature.DictCombatHealOther[CombatHealOther.SpellHealOther75]);
            }
            if (AICombatHealOther.CanDoCombatHealOtherSpellHealOther(creature, 50))
            {
                DictTemp.Add(CombatHealOther.SpellHealOther50, creature.DictCombatHealOther[CombatHealOther.SpellHealOther50]);
            }
            if (AICombatHealOther.CanDoCombatHealOtherSpellHealOther(creature, 25))
            {
                DictTemp.Add(CombatHealOther.SpellHealOther25, creature.DictCombatHealOther[CombatHealOther.SpellHealOther25]);
            }
            if (AICombatHealOther.CanDoCombatHealOtherSpellCureOther(creature))
            {
                DictTemp.Add(CombatHealOther.SpellCureOther, creature.DictCombatHealOther[CombatHealOther.SpellCureOther]);
            }
            if (AICombatHealOther.CanDoCombatHealOtherBandageHealOther(creature, 100))
            {
                DictTemp.Add(CombatHealOther.BandageHealOther100, creature.DictCombatHealOther[CombatHealOther.BandageHealOther100]);
            }
            if (AICombatHealOther.CanDoCombatHealOtherBandageHealOther(creature, 75))
            {
                DictTemp.Add(CombatHealOther.BandageHealOther75, creature.DictCombatHealOther[CombatHealOther.BandageHealOther75]);
            }
            if (AICombatHealOther.CanDoCombatHealOtherBandageHealOther(creature, 50))
            {
                DictTemp.Add(CombatHealOther.BandageHealOther50, creature.DictCombatHealOther[CombatHealOther.BandageHealOther50]);
            }
            if (AICombatHealOther.CanDoCombatHealOtherBandageHealOther(creature, 25))
            {
                DictTemp.Add(CombatHealOther.BandageHealOther25, creature.DictCombatHealOther[CombatHealOther.BandageHealOther25]);
            }
            if (AICombatHealOther.CanDoCombatHealOtherBandageCureOther(creature))
            {
                DictTemp.Add(CombatHealOther.BandageCureOther, creature.DictCombatHealOther[CombatHealOther.BandageCureOther]);
            }

            //Calculate Total Values
            foreach (KeyValuePair <CombatHealOther, int> pair in DictTemp)
            {
                TotalValues += pair.Value;
            }

            double ActionCheck      = Utility.RandomDouble();
            double CumulativeAmount = 0.0;
            double AdditionalAmount = 0.0;

            //Determine CombatAction
            foreach (KeyValuePair <CombatHealOther, int> pair in DictTemp)
            {
                AdditionalAmount = (double)pair.Value / (double)TotalValues;

                if (ActionCheck >= CumulativeAmount && ActionCheck < (CumulativeAmount + AdditionalAmount))
                {
                    healAction = pair.Key;

                    //Spell Heal Other
                    if (healAction == CombatHealOther.SpellHealOther100)
                    {
                        AIHeal.DoSpellHealOther(creature, 100);
                    }

                    if (healAction == CombatHealOther.SpellHealOther75)
                    {
                        AIHeal.DoSpellHealOther(creature, 75);
                    }

                    if (healAction == CombatHealOther.SpellHealOther50)
                    {
                        AIHeal.DoSpellHealOther(creature, 50);
                    }

                    if (healAction == CombatHealOther.SpellHealOther25)
                    {
                        AIHeal.DoSpellHealOther(creature, 25);
                    }

                    if (healAction == CombatHealOther.SpellCureOther)
                    {
                        AIHeal.DoSpellCureOther(creature);
                    }

                    //Bandage Heal Other
                    if (healAction == CombatHealOther.BandageHealOther100)
                    {
                        AIHeal.DoBandageHealOther(creature, 100);
                    }

                    if (healAction == CombatHealOther.BandageHealOther75)
                    {
                        AIHeal.DoBandageHealOther(creature, 75);
                    }

                    if (healAction == CombatHealOther.BandageHealOther50)
                    {
                        AIHeal.DoBandageHealOther(creature, 50);
                    }

                    if (healAction == CombatHealOther.BandageHealOther25)
                    {
                        AIHeal.DoBandageHealOther(creature, 25);
                    }

                    if (healAction == CombatHealOther.BandageCureOther)
                    {
                        AIHeal.DoBandageCureOther(creature);
                    }

                    creature.NextCombatHealActionAllowed = DateTime.UtcNow + TimeSpan.FromSeconds(Utility.RandomMinMax(creature.CombatHealActionMinDelay, creature.CombatHealActionMaxDelay));

                    if (creature.AcquireNewTargetEveryCombatAction)
                    {
                        creature.m_NextAcquireTargetAllowed = DateTime.UtcNow;
                    }

                    return(true);
                }

                CumulativeAmount += AdditionalAmount;
            }

            return(false);
        }