Esempio n. 1
0
        private bool SetGatherItem(ICollection <GatheringItem> windowItems)
        {
            foreach (var item in Items)
            {
                var items = windowItems.Where(i => i.IsFilled && !i.IsUnknown).ToArray();

                if (item.Id > 0)
                {
                    GatherItem =
                        items.FirstOrDefault(i => i.ItemData.Id == item.Id &&
                                             (!i.ItemData.Unique || i.ItemData.ItemCount() == 0));
                }

                GatherItem = GatherItem ??
                             items.FirstOrDefault(
                    i => string.Equals(item.LocalName, i.ItemData.CurrentLocaleName, StringComparison.InvariantCultureIgnoreCase) &&
                    (!i.ItemData.Unique || i.ItemData.ItemCount() == 0)) ??
                             items.FirstOrDefault(
                    i => string.Equals(item.Name, i.ItemData.EngName, StringComparison.InvariantCultureIgnoreCase) &&
                    (!i.ItemData.Unique || i.ItemData.ItemCount() == 0));

                if (GatherItem != null)
                {
                    // We don't need to check null...since it will be null anyway.
                    CollectableItem = item as Collectable;
                    return(true);
                }
            }

            return(false);
        }
Esempio n. 2
0
 internal void ResetInternal()
 {
     interactedWithNode = false;
     GatherSpot         = null;
     Node            = null;
     GatherItem      = null;
     CollectableItem = null;
 }
        /// <summary>
        /// Populates the table view.
        /// </summary>
        private void PopulateTableView(List <GatheringItem> items)
        {
            var view = _view.FindViewById <HorizontalScrollView>(Resource.Id.gathering_scrollview);

            view.RemoveAllViews();

            var table = new TableLayout(_view.Context);

            table.AddNewRow(GatheringItem.GetRelevantPropertyNames());
            items.ForEach(x => table.AddNewRow(x.ToStringArray(), x.Gatherer == Enums.Gatherer.Botanist ? Color.ForestGreen : Color.IndianRed));
            view.AddView(table);
            view.RequestLayout();
        }
Esempio n. 4
0
        public static bool TryGatherItem(this GatheringItem gatheringItem)
        {
            try
            {
                return(gatheringItem.GatherItem());
            }
            catch (NullReferenceException)
            {
                Logger.Instance.Warn(
                    "GatherItem became null between resolving it and gathering it due to the Gathering Window closing, moving on.");

                return(false);
            }
        }
Esempio n. 5
0
        public async Task testMine()
        {
            var    patternFinder   = new PatternFinder(Core.Memory);
            IntPtr AnimationLocked = patternFinder.Find("48 8D 0D ?? ?? ?? ?? BA ?? ?? ?? ?? E8 ?? ?? ?? ?? 80 8B ?? ?? ?? ?? ?? 45 33 C9 44 8B C7 89 BB ?? ?? ?? ?? Add 3 TraceRelative");

            var GatherLock = Core.Memory.Read <uint>(AnimationLocked + 0x2A);

            Log("in Test Gather");
            if (GatheringManager.WindowOpen)
            {
                GatheringItem items = GatheringManager.GatheringWindowItems.FirstOrDefault(i => i.IsFilled && i.CanGather);

                if (Core.Me.CurrentGP >= 500)
                {
                    await Coroutine.Wait(5000, () => ActionManager.CanCast(241, Core.Me));

                    ActionManager.DoAction(241, Core.Me);
                    await Coroutine.Sleep(2500);
                }

                /*
                 * if (Core.Me.CurrentGP >= 250)
                 * {
                 *  await Coroutine.Wait(5000, () => ActionManager.CanCast(4587, Core.Me));
                 *  ActionManager.DoAction(4587, Core.Me);
                 *  await Coroutine.Sleep(2500);
                 * }
                 */

                Log($"Gathering: {items}");

                while (GatheringManager.SwingsRemaining > 0 && GatheringManager.WindowOpen)
                {
                    if (Core.Me.CurrentGP >= 100)
                    {
                        await Coroutine.Wait(5000, () => ActionManager.CanCast(272, Core.Me));

                        ActionManager.DoAction(272, Core.Me);
                        await Coroutine.Sleep(2500);
                    }
                    await Coroutine.Wait(20000, () => Core.Memory.Read <uint>(AnimationLocked + 0x2A) == 0);

                    items?.GatherItem();
                    await Coroutine.Wait(20000, () => Core.Memory.Read <uint>(AnimationLocked + 0x2A) != 0);

                    await Coroutine.Wait(20000, () => Core.Memory.Read <uint>(AnimationLocked + 0x2A) == 0);
                }
            }
        }
Esempio n. 6
0
        public async Task testMine()
        {
            //Log("in Test Gather");
            if (GatheringManager.WindowOpen)
            {
                GatheringItem items = GatheringManager.GatheringWindowItems.Where(i => i.IsFilled && i.CanGather).OrderByDescending(s => s.Stars).FirstOrDefault();

                if (Core.Me.CurrentGP >= 500)
                {
                    await Coroutine.Wait(5000, () => ActionManager.CanCast(241, Core.Me));

                    ActionManager.DoAction(241, Core.Me);
                    await Coroutine.Sleep(2500);
                }

                /*
                 * if (Core.Me.CurrentGP >= 250)
                 * {
                 *  await Coroutine.Wait(5000, () => ActionManager.CanCast(4587, Core.Me));
                 *  ActionManager.DoAction(4587, Core.Me);
                 *  await Coroutine.Sleep(2500);
                 * }
                 */

                Log($"Gathering: {items}");

                while (GatheringManager.SwingsRemaining > 0 && GatheringManager.WindowOpen)
                {
                    if (Core.Me.CurrentGP >= 100)
                    {
                        await Coroutine.Wait(5000, () => ActionManager.CanCast(272, Core.Me));

                        ActionManager.DoAction(272, Core.Me);
                        await Coroutine.Sleep(2500);
                    }
                    await Coroutine.Wait(20000, () => Core.Memory.Read <uint>(Offsets.Conditions + 0x2A) == 0);

                    items?.GatherItem();
                    await Coroutine.Wait(20000, () => Core.Memory.Read <uint>(Offsets.Conditions + 0x2A) != 0);

                    await Coroutine.Wait(20000, () => Core.Memory.Read <uint>(Offsets.Conditions + 0x2A) == 0);
                }
            }
        }
Esempio n. 7
0
        public static bool IsUnknownChance(this GatheringItem gatheringItem)
        {
            if (gatheringItem.IsUnknown || gatheringItem.Chance == 25)
            {
                return(true);
            }

            if (!gatheringItem.IsFilled && gatheringItem.Unk2 != byte.MaxValue && gatheringItem.Unk1 == uint.MaxValue)
            {
                if (gatheringItem.Chance <= 0)
                {
                    Logger.Instance.Warn(
                        "Found unknown item in slot {0}, but it seems we don't have enough gathering skill. Check the node for more information. Gathering: {1}",
                        gatheringItem.SlotIndex + 1,
                        Core.Player.Stats.Gathering);
                    return(false);
                }

                Logger.Instance.Info("Found unknown item in slot {0}", gatheringItem.SlotIndex + 1);
                return(true);
            }

            var lastSpellId = ActionManager.LastSpellId;

            if (gatheringItem.Chance == 30 && lastSpellId == Abilities.Map[Core.Player.CurrentJob][Ability.IncreaseGatherChance5])
            {
                return(true);
            }

            if (gatheringItem.Chance == 40 &&
                lastSpellId == Abilities.Map[Core.Player.CurrentJob][Ability.IncreaseGatherChance15])
            {
                return(true);
            }

            if (gatheringItem.Chance == 75 &&
                lastSpellId == Abilities.Map[Core.Player.CurrentJob][Ability.IncreaseGatherChance50])
            {
                return(true);
            }

            return(false);
        }
Esempio n. 8
0
        public async Task testGather()
        {
            var GatherLock = Core.Memory.Read <uint>(Offsets.Conditions + 0x2A);

            Log("in Test Gather");
            if (GatheringManager.WindowOpen)
            {
                GatheringItem items = GatheringManager.GatheringWindowItems.FirstOrDefault(i => i.IsFilled && i.CanGather);

                Log($"Gathering: {items}");

                while (GatheringManager.SwingsRemaining > 0)
                {
                    items.GatherItem();
                    await Coroutine.Wait(20000, () => Core.Memory.Read <uint>(Offsets.Conditions + 0x2A) != 0);

                    await Coroutine.Wait(20000, () => Core.Memory.Read <uint>(Offsets.Conditions + 0x2A) == 0);
                }
            }
        }
Esempio n. 9
0
        public async Task testGather()
        {
            var    patternFinder   = new PatternFinder(Core.Memory);
            IntPtr AnimationLocked = patternFinder.Find("48 8D 0D ?? ?? ?? ?? BA ?? ?? ?? ?? E8 ?? ?? ?? ?? 80 8B ?? ?? ?? ?? ?? 45 33 C9 44 8B C7 89 BB ?? ?? ?? ?? Add 3 TraceRelative");

            var GatherLock = Core.Memory.Read <uint>(AnimationLocked + 0x2A);

            Log("in Test Gather");
            if (GatheringManager.WindowOpen)
            {
                GatheringItem items = GatheringManager.GatheringWindowItems.FirstOrDefault(i => i.IsFilled && i.CanGather);

                Log($"Gathering: {items}");

                while (GatheringManager.SwingsRemaining > 0)
                {
                    items.GatherItem();
                    await Coroutine.Wait(20000, () => Core.Memory.Read <uint>(AnimationLocked + 0x2A) != 0);

                    await Coroutine.Wait(20000, () => Core.Memory.Read <uint>(AnimationLocked + 0x2A) == 0);
                }
            }
        }
Esempio n. 10
0
        internal async Task <bool> ResolveGatherItem()
        {
            if (!GatheringManager.WindowOpen)
            {
                return(false);
            }

            var previousGatherItem = GatherItem;

            GatherItemIsFallback = false;
            GatherItem           = null;
            CollectableItem      = null;

            var windowItems = GatheringManager.GatheringWindowItems.ToArray();

            // TODO: move method to common so we use it on fish too
            if (InventoryItemCount() >= 140)
            {
                if (Items.Count > 0)
                {
                    if (
                        SetGatherItem(
                            windowItems.OrderByDescending(i => i.SlotIndex).Where(i => i.IsFilled && !i.IsUnknown && i.ItemId < 20).ToArray()))
                    {
                        return(true);
                    }
                }

                GatherItem =
                    windowItems.Where(i => i.IsFilled && !i.IsUnknown)
                    .OrderByDescending(i => i.ItemId)
                    .FirstOrDefault(i => i.ItemId < 20);

                if (GatherItem != null)
                {
                    return(true);
                }

                Logger.Warn(Localization.Localization.ExGather_FullInventory);
                return(false);
            }

            if (DiscoverUnknowns)
            {
                var items = new[] { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U }.Select(GatheringManager.GetGatheringItemByIndex);

                GatherItem = items.FirstOrDefault(i => i.IsUnknownChance() && i.Amount > 0);

                if (GatherItem != null)
                {
                    return(true);
                }
            }

            if (Items.Count > 0)
            {
                if (SetGatherItem(windowItems))
                {
                    return(true);
                }
            }

            if (Slot > -1 && Slot < 8)
            {
                GatherItem = GatheringManager.GetGatheringItemByIndex((uint)Slot);
            }

            if (GatherItem == null && (!AlwaysGather || GatherStrategy == GatherStrategy.TouchAndGo))
            {
                Poi.Clear(Localization.Localization.ExGather_SkipNode);

                await CloseGatheringWindow();

                return(false);
            }

            if (GatherItem != null)
            {
                return(true);
            }

            GatherItemIsFallback = true;

            GatherItem =
                windowItems.Where(i => i.IsFilled && !i.IsUnknown)
                .OrderByDescending(i => i.ItemId)
                .FirstOrDefault(i => i.ItemId < 20)     // Try to gather cluster/crystal/shard
                ?? windowItems.FirstOrDefault(
                    i => i.IsFilled && !i.IsUnknown && !i.ItemData.Unique && !i.ItemData.Untradeable && i.ItemData.ItemCount() > 0)
                // Try to collect items you have that stack
                ?? windowItems.Where(i => i.Amount > 0 && !i.ItemData.Unique && !i.ItemData.Untradeable)
                .OrderByDescending(i => i.SlotIndex)
                .FirstOrDefault();     // Take last item that is not unique or untradeable

            // Seems we only have unknowns.
            if (GatherItem == null)
            {
                var items = new[] { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U }.Select(GatheringManager.GetGatheringItemByIndex).ToArray();

                GatherItem = items.FirstOrDefault(i => i.IsUnknownChance() && i.Amount > 0);

                if (GatherItem != null)
                {
                    return(true);
                }

                Logger.Warn(Localization.Localization.ExGather_NothingToGather);

                return(false);
            }

            if (previousGatherItem == null || previousGatherItem.ItemId != GatherItem.ItemId)
            {
                Logger.Info(Localization.Localization.ExGather_NothingToGather2 + GatherItem.ItemData + Localization.Localization.ExGather_NothingToGather3);
            }

            return(true);
        }
Esempio n. 11
0
		internal void ResetInternal()
		{
			interactedWithNode = false;
			GatherSpot = null;
			Node = null;
			GatherItem = null;
			CollectableItem = null;
		}
Esempio n. 12
0
		private bool SetGatherItemByItemName(ICollection<GatheringItem> windowItems)
		{
			foreach (var itemName in ItemNames)
			{
				GatherItem =
					windowItems.FirstOrDefault(
						i =>
						i.IsFilled && !i.IsUnknown
						&& string.Equals(itemName, i.ItemData.EnglishName, StringComparison.InvariantCultureIgnoreCase));

				if (GatherItem != null && (!GatherItem.ItemData.Unique || GatherItem.ItemData.ItemCount() == 0))
				{
					return true;
				}
			}

			return false;
		}
Esempio n. 13
0
		internal async Task<bool> ResolveGatherItem()
		{
			if (!GatheringManager.WindowOpen)
			{
				return false;
			}

			var previousGatherItem = GatherItem;
			GatherItemIsFallback = false;
			GatherItem = null;
			CollectableItem = null;

			var windowItems = GatheringManager.GatheringWindowItems.ToArray();

			// TODO: move method to common so we use it on fish too
			if (InventoryItemCount() >= 100)
			{
				if (ItemNames != null && ItemNames.Count > 0)
				{
					if (
						SetGatherItemByItemName(
							windowItems.OrderByDescending(i => i.SlotIndex).Where(i => i.IsFilled && !i.IsUnknown && i.ItemId < 20).ToArray()))
					{
						return true;
					}
				}

				GatherItem =
					windowItems.Where(i => i.IsFilled && !i.IsUnknown)
						.OrderByDescending(i => i.ItemId)
						.FirstOrDefault(i => i.ItemId < 20);

				if (GatherItem != null)
				{
					return true;
				}

				Logger.Warn("Inventory is full and no shards/crystals/clusters to gather. Gathering complete.");
				return false;
			}

			if (DiscoverUnknowns)
			{
				var items = new[] { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U }.Select(GatheringManager.GetGatheringItemByIndex).ToArray();

				GatherItem = items.FirstOrDefault(i => i.IsUnknownChance() && i.Amount > 0);

				if (GatherItem != null)
				{
					return true;
				}
			}

			if (Collectables != null && Collectables.Count > 0)
			{
				foreach (var collectable in Collectables)
				{
					GatherItem =
						windowItems.FirstOrDefault(
							i =>
							i.IsFilled && !i.IsUnknown
							&& string.Equals(collectable.Name, i.ItemData.EnglishName, StringComparison.InvariantCultureIgnoreCase));

					if (GatherItem != null)
					{
						CollectableItem = collectable;
						return true;
					}
				}
			}

			if (ItemNames != null && ItemNames.Count > 0)
			{
				if (SetGatherItemByItemName(windowItems))
				{
					return true;
				}
			}

			if (Slot > -1 && Slot < 8)
			{
				GatherItem = GatheringManager.GetGatheringItemByIndex((uint)Slot);
			}

			if (GatherItem == null && (!AlwaysGather || GatherStrategy == GatherStrategy.TouchAndGo))
			{
				Poi.Clear("Skipping this node, no items we want to gather.");

				await CloseGatheringWindow();

				return false;
			}

			if (GatherItem != null)
			{
				return true;
			}

			GatherItemIsFallback = true;

			GatherItem =
				windowItems.Where(i => i.IsFilled && !i.IsUnknown)
					.OrderByDescending(i => i.ItemId)
					.FirstOrDefault(i => i.ItemId < 20) // Try to gather cluster/crystal/shard
				?? windowItems.FirstOrDefault(
					i => i.IsFilled && !i.IsUnknown && !i.ItemData.Unique && !i.ItemData.Untradeable && i.ItemData.ItemCount() > 0)
				// Try to collect items you have that stack
				?? windowItems.Where(i => i.Amount > 0 && !i.ItemData.Unique && !i.ItemData.Untradeable)
						.OrderByDescending(i => i.SlotIndex)
						.FirstOrDefault(); // Take last item that is not unique or untradeable

			// Seems we only have unknowns.
			if (GatherItem == null)
			{
				var items = new[] { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U }.Select(GatheringManager.GetGatheringItemByIndex).ToArray();

				GatherItem = items.FirstOrDefault(i => i.IsUnknownChance() && i.Amount > 0);

				if (GatherItem != null)
				{
					return true;
				}

				Logger.Warn("Unable to find an item to gather, moving on.");

				return false;
			}

			if (previousGatherItem == null || previousGatherItem.ItemId != GatherItem.ItemId)
			{
				Logger.Info("could not find item by slot or name, gathering " + GatherItem.ItemData + " instead.");
			}

			return true;
		}
Esempio n. 14
0
		private bool SetGatherItemByItemName(ICollection<GatheringItem> windowItems)
		{
			foreach (var item in Items)
			{
				GatherItem =
					windowItems.FirstOrDefault(
						i =>
						i.IsFilled && !i.IsUnknown
						&& string.Equals(item.Name, i.ItemData.EnglishName, StringComparison.InvariantCultureIgnoreCase)
						&& (!i.ItemData.Unique || i.ItemData.ItemCount() == 0));

				if (GatherItem != null)
				{
					// We don't need to check null...since it will be null anyway.
					CollectableItem = item as Collectable;
					return true;
				}
			}

			return false;
		}
Esempio n. 15
0
		internal async Task<bool> ResolveGatherItem()
		{
			if (!GatheringManager.WindowOpen)
			{
				return false;
			}

			var previousGatherItem = GatherItem;
			GatherItemIsFallback = false;
			GatherItem = null;
			CollectableItem = null;

			var windowItems = GatheringManager.GatheringWindowItems.ToArray();

			// TODO: move method to common so we use it on fish too
			if (InventoryItemCount() >= 100)
			{
				if (Items.Count > 0)
				{
					if (
						SetGatherItem(
							windowItems.OrderByDescending(i => i.SlotIndex).Where(i => i.IsFilled && !i.IsUnknown && i.ItemId < 20).ToArray()))
					{
						return true;
					}
				}

				GatherItem =
					windowItems.Where(i => i.IsFilled && !i.IsUnknown)
						.OrderByDescending(i => i.ItemId)
						.FirstOrDefault(i => i.ItemId < 20);

				if (GatherItem != null)
				{
					return true;
				}

				Logger.Warn(Localization.Localization.ExGather_FullInventory);
				return false;
			}

			if (DiscoverUnknowns)
			{
				var items = new[] { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U }.Select(GatheringManager.GetGatheringItemByIndex);

				GatherItem = items.FirstOrDefault(i => i.IsUnknownChance() && i.Amount > 0);

				if (GatherItem != null)
				{
					return true;
				}
			}

			if (Items.Count > 0)
			{
				if (SetGatherItem(windowItems))
				{
					return true;
				}
			}

			if (Slot > -1 && Slot < 8)
			{
				GatherItem = GatheringManager.GetGatheringItemByIndex((uint) Slot);
			}

			if (GatherItem == null && (!AlwaysGather || GatherStrategy == GatherStrategy.TouchAndGo))
			{
				Poi.Clear(Localization.Localization.ExGather_SkipNode);

				await CloseGatheringWindow();

				return false;
			}

			if (GatherItem != null)
			{
				return true;
			}

			GatherItemIsFallback = true;

			GatherItem =
				windowItems.Where(i => i.IsFilled && !i.IsUnknown)
					.OrderByDescending(i => i.ItemId)
					.FirstOrDefault(i => i.ItemId < 20) // Try to gather cluster/crystal/shard
				?? windowItems.FirstOrDefault(
					i => i.IsFilled && !i.IsUnknown && !i.ItemData.Unique && !i.ItemData.Untradeable && i.ItemData.ItemCount() > 0)
					// Try to collect items you have that stack
				?? windowItems.Where(i => i.Amount > 0 && !i.ItemData.Unique && !i.ItemData.Untradeable)
					.OrderByDescending(i => i.SlotIndex)
					.FirstOrDefault(); // Take last item that is not unique or untradeable

			// Seems we only have unknowns.
			if (GatherItem == null)
			{
				var items = new[] {0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U}.Select(GatheringManager.GetGatheringItemByIndex).ToArray();

				GatherItem = items.FirstOrDefault(i => i.IsUnknownChance() && i.Amount > 0);

				if (GatherItem != null)
				{
					return true;
				}

				Logger.Warn(Localization.Localization.ExGather_NothingToGather);

				return false;
			}

			if (previousGatherItem == null || previousGatherItem.ItemId != GatherItem.ItemId)
			{
				Logger.Info(Localization.Localization.ExGather_NothingToGather2 + GatherItem.ItemData + Localization.Localization.ExGather_NothingToGather3);
			}

			return true;
		}
Esempio n. 16
0
		private bool SetGatherItem(ICollection<GatheringItem> windowItems)
		{
			foreach (var item in Items)
			{
				var items = windowItems.Where(i => i.IsFilled && !i.IsUnknown).ToArray();

				if (item.Id > 0)
				{
					GatherItem =
						items.FirstOrDefault(i => i.ItemData.Id == item.Id
						&& (!i.ItemData.Unique || i.ItemData.ItemCount() == 0));
				}

				GatherItem = GatherItem ??
					items.FirstOrDefault(
						i => string.Equals(item.LocalName, i.ItemData.CurrentLocaleName, StringComparison.InvariantCultureIgnoreCase)
						&& (!i.ItemData.Unique || i.ItemData.ItemCount() == 0)) ??
					items.FirstOrDefault(
						i => string.Equals(item.Name, i.ItemData.EngName, StringComparison.InvariantCultureIgnoreCase)
						&& (!i.ItemData.Unique || i.ItemData.ItemCount() == 0));

				if (GatherItem != null)
				{
					// We don't need to check null...since it will be null anyway.
					CollectableItem = item as Collectable;
					return true;
				}
			}

			return false;
		}