Exemple #1
0
        public static MountCapacity GetMountCapacity(bool ignoreDeactivatedFlyMount = false)
        {
            if (!AllowMounting || Usefuls.PlayerUsingVehicle || ObjectManager.ObjectManager.Me.IsDead)
            {
                return(MountCapacity.Feet);
            }
            if (_startupCheck || SettingsHasChanged)
            {
                // 1st Check if mounts in general settings exist
                _aquaMount   = nManagerSetting.CurrentSetting.AquaticMountName;
                _groundMount = nManagerSetting.CurrentSetting.GroundMountName;
                _flyMount    = nManagerSetting.CurrentSetting.FlyingMountName;
                if (!string.IsNullOrEmpty(_aquaMount.Trim()))
                {
                    _spellAquaMount = new Spell(_aquaMount);
                }
                if (!string.IsNullOrEmpty(_groundMount.Trim()))
                {
                    _spellGroundMount = new Spell(_groundMount);
                }
                if (!string.IsNullOrEmpty(_flyMount.Trim()))
                {
                    _spellFlyMount = new Spell(_flyMount);
                }
                _spellTravelForm = new Spell("Travel Form");

                if (ObjectManager.ObjectManager.Me.Level >= 16 && _groundMount != string.Empty && nManagerSetting.CurrentSetting.UseGroundMount && !_spellGroundMount.KnownSpell)
                {
                    Others.ShowMessageBox(Translate.Get(Translate.Id.ThisGroundMountDoesNotExist) + _groundMount);
                    _groundMount = string.Empty;
                }
                if (ObjectManager.ObjectManager.Me.Level >= 18 && _aquaMount != string.Empty && !_spellAquaMount.KnownSpell)
                {
                    Others.ShowMessageBox(Translate.Get(Translate.Id.ThisAquaticMountDoesNotExist) + _aquaMount);
                    _aquaMount = string.Empty;
                }
                if (ObjectManager.ObjectManager.Me.Level >= 58 && _flyMount != string.Empty && !_spellFlyMount.KnownSpell)
                {
                    Others.ShowMessageBox(Translate.Get(Translate.Id.ThisFlyingMountDoesNotExist) + _flyMount);
                    _flyMount = string.Empty;
                }
                if (ObjectManager.ObjectManager.Me.Level >= 60 && _aquaMount != string.Empty && _localizedAbysalMountName == string.Empty)
                {
                    _localizedAbysalMountName = SpellManager.GetSpellInfo(75207).Name;
                }

                Spell wisdom4Winds = new Spell(115913);
                _wisdom4Winds = wisdom4Winds.KnownSpell;
                Spell coldWeather = new Spell(54197);
                _coldWeather = coldWeather.KnownSpell;
                Spell flightMasterLicense = new Spell(90267);
                _flightMasterLicense = flightMasterLicense.KnownSpell;
                _dreaneorFly         = Usefuls.IsCompletedAchievement(10018, false); // Draenor Pathfinder (account wide)

                _brokenIslesFly = Usefuls.IsCompletedAchievement(11446, false);      // Broken Isles Pathfinder, Part Two (account wide)

                _startupCheck      = false;
                SettingsHasChanged = false;
            }
            if (ObjectManager.ObjectManager.Me.InCombatBlizzard)
            {
                return(MountCapacity.Feet);
            }
            if (_groundMount == string.Empty && _flyMount == string.Empty && _aquaMount == string.Empty)
            {
                if (((ObjectManager.ObjectManager.Me.Level >= 20 && Skill.GetValue(SkillLine.Riding) > 0) ||
                     (ObjectManager.ObjectManager.Me.WowClass == WoWClass.Druid && ObjectManager.ObjectManager.Me.Level >= 16)) &&
                    _noMountsInSettings != 1)
                {
                    MessageBox.Show(Translate.Get(Translate.Id.No_mounts_in_settings));
                    _noMountsInSettings++;
                    return(MountCapacity.Feet);
                }
            }

            if (ObjectManager.ObjectManager.Me.HaveBuff(ObjectManager.WoWUnit.CombatMount))
            {
                return(MountCapacity.Feet);
            }

            if (!HaveSpaceToMount())
            {
                return(MountCapacity.Feet); // mount later if we don't have enough space at the moment.
            }
            // Wherever we are if we have an aquatic mount and are swimming
            if (((ObjectManager.ObjectManager.Me.Level >= 20 && Skill.GetValue(SkillLine.Riding) > 0) ||
                 (ObjectManager.ObjectManager.Me.WowClass == WoWClass.Druid && ObjectManager.ObjectManager.Me.Level >= 18)) &&
                Usefuls.IsSwimming &&
                _aquaMount != string.Empty)
            {
                // The Abyssal Seahorse is selected
                if (_aquaMount == _localizedAbysalMountName)
                {
                    // We are in Vashjir
                    //  Kelp'thar Forest       || Abyssal Depths         || Shimmering Expanse
                    if (Usefuls.AreaId == 4815 || Usefuls.AreaId == 5145 || Usefuls.AreaId == 5144)
                    {
                        return(MountCapacity.Swimm);
                    }
                    // We are NOT in Vashjir
                    return(MountCapacity.Feet);
                }
                else // (_aquaMount != _localizedAbysalMountName)
                {
                    return(MountCapacity.Swimm);
                }
            }

            if (Usefuls.IsOutdoors)
            {
                if (ObjectManager.ObjectManager.Me.HaveBuff(178256)) // Panicked Rush
                {
                    return(MountCapacity.Feet);                      // Tannan Jungle Intro to leave to the docks.
                }
                if ((ObjectManager.ObjectManager.Me.Level >= 60 || (ObjectManager.ObjectManager.Me.WowClass == WoWClass.Druid && ObjectManager.ObjectManager.Me.Level >= 58)) &&
                    _flyMount != string.Empty &&
                    Usefuls.IsFlyableArea && (!nManagerSetting.CurrentSetting.DeactivateFlyingMount || ignoreDeactivatedFlyMount))
                {
                    ContinentId cont   = (ContinentId)Usefuls.ContinentId;
                    bool        canFly = _brokenIslesFly && cont == ContinentId.BrokenIsles;

                    // We are in Draenor and we have the achievement
                    if (!canFly && _dreaneorFly && (cont == ContinentId.Draenor || Usefuls.ContinentNameMpqByContinentId(Usefuls.ContinentId) == "TanaanJungle"))
                    {
                        canFly = true;
                    }

                    // We are in Pandaria and with "Wisdom of the Four Winds" aura
                    if (!canFly && _wisdom4Winds && cont == ContinentId.Pandaria)
                    {
                        canFly = true;
                    }

                    // We are in Northfend with "Cold Weather Flying" aura
                    if (!canFly && _coldWeather && cont == ContinentId.Northrend)
                    {
                        canFly = true;
                    }

                    // We are in Azeroth/Kalimdor/Deptholm with "Flight Master's License" aura
                    if (!canFly && _flightMasterLicense &&
                        (cont == ContinentId.Azeroth || cont == ContinentId.Kalimdor || cont == ContinentId.Maelstrom || cont == ContinentId.AllianceGunship))
                    {
                        canFly = true;
                    }

                    // We are in Outland and Expert Flying or better
                    Spell expertRider  = new Spell(34090);
                    Spell artisanRider = new Spell(34091);
                    Spell masterRider  = new Spell(90265);
                    if (!canFly && cont == ContinentId.Outland &&
                        (expertRider.KnownSpell || artisanRider.KnownSpell || masterRider.KnownSpell))
                    {
                        canFly = true;
                    }

                    if (canFly)
                    {
                        if (!Usefuls.IsFlying && ObjectManager.ObjectManager.Me.IsAlive)
                        {
                            LastKnownFlyablePoint = ObjectManager.ObjectManager.Me.Position;
                        }
                        return(MountCapacity.Fly);
                    }

                    // More work to be done with spell 130487 = "Cloud Serpent Riding"
                }
                if (((ObjectManager.ObjectManager.Me.Level >= 20 && Skill.GetValue(SkillLine.Riding) > 0) ||
                     (ObjectManager.ObjectManager.Me.WowClass == WoWClass.Druid && ObjectManager.ObjectManager.Me.Level >= 16) ||
                     _spellGroundMount.KnownSpell && _spellGroundMount.Id == 179245 || _spellGroundMount.Id == 179244) && _groundMount != string.Empty)
                {
                    return(MountCapacity.Ground);
                }
            }
            return(MountCapacity.Feet);
        }