public override async Task<bool> ExecuteRotation(ExGatherTag tag)
		{
			if (tag.IsUnspoiled())
			{
				await SingleMindMethodical(tag);
				await SingleMindMethodical(tag);
				await UtmostCaution(tag);
				await Methodical(tag);
				await UtmostCaution(tag);
				await Methodical(tag);
			}
			else
			{
				if (Core.Player.CurrentGP >= 600)
				{
					await SingleMindMethodical(tag);
					await SingleMindMethodical(tag);
					await UtmostCaution(tag);
					await Methodical(tag);
					await UtmostCaution(tag);
					await Methodical(tag);
					return true;
				}
				
				await Impulsive(tag);
				await Impulsive(tag);
				await Methodical(tag);
			}
			return true;
		}
		public override async Task<bool> ExecuteRotation(ExGatherTag tag)
		{
			var gp = GameObjectManager.LocalPlayer.CurrentGP;
			if (gp >= 600)
			{
				await Discerning(tag);

				await AppraiseAndRebuff(tag);
				await AppraiseAndRebuff(tag);

				await Methodical(tag);
			}
			else
			{
				tag.Logger.Warn("Using alternate rotation to collect one or two due to CurrentGP: {0} being less than RequiredGP: {1}", gp, 600);
				// Less than 600 GP collect 1-2 rotation
				await UtmostImpulsive(tag);

				if (HasDiscerningEye)
				{
					await UtmostSingleMindMethodical(tag);
				}
				else
				{
					await UtmostCaution(tag);
					await AppraiseAndRebuff(tag);
				}

				await Methodical(tag);
				await Methodical(tag);
			}

			await IncreaseChance(tag);
			return true;
		}
		private async Task<bool> DoRotation(ExGatherTag tag)
		{
			// 96-180 with min perception
			// 138-259 with max perception
			await tag.Cast(Ability.DiscerningEye);
			await tag.Cast(Ability.InstinctualAppraisal);

			if (CurrentRarity < 240)
			{
				var perception = Core.Player.Stats.Perception;

				// Methodical range is 80-115
				// Discerning methodical is 120-172
				if (Core.Player.CurrentGP >= 200)
				{
					// TODO: not complete
				}

				await Methodical(tag);
			}

			await IncreaseChance(tag);

			return true;
		}
		public override async Task<bool> MoveToSpot(ExGatherTag tag)
		{
			tag.StatusText = "Moving to " + this;

			if (ApproachLocation == Vector3.Zero)
			{
				return false;
			}

			var result =
				await
					ApproachLocation.MoveTo(
						UseMesh,
						radius: tag.Radius,
						name: "Approach Location",
						stopCallback: tag.MovementStopCallback);

			if (result)
			{
				await Coroutine.Yield();
				result = await NodeLocation.MoveToNoMount(UseMesh, tag.Distance, tag.Node.EnglishName, tag.MovementStopCallback);
			}

			return result;
		}
		public override async Task<bool> ExecuteRotation(ExGatherTag tag)
		{
			var level = Core.Player.ClassLevel;

			if (GatheringManager.SwingsRemaining > 4 || ShouldForceUseRotation(tag, level))
			{
				if (Core.Player.CurrentGP >= 500 && level >= 40)
				{
					await tag.Cast(Ability.IncreaseGatherYield2);

					if (Core.Player.CurrentGP >= 100)
					{
						await tag.Cast(Ability.IncreaseGatherQuality10);

                        if (Core.Player.CurrentGP >= 100 && tag.GatherItem.Chance < 95)
                        {
                            await tag.Cast(Ability.IncreaseGatherChance15);
                        }
                        else
                        {
                            if (Core.Player.CurrentGP >= 50 && tag.GatherItem.Chance < 100)
                            {
                                await tag.Cast(Ability.IncreaseGatherChance5);
                            }
                        }

                        return await base.ExecuteRotation(tag);
					}
				}
			}

			return true;
		}
		protected override async Task<bool> IncreaseChance(ExGatherTag tag)
		{
			var level = Core.Player.ClassLevel;
			if (Core.Player.CurrentGP >= 250 && tag.GatherItem.Chance < 51 && level > 10)
			{
				return await tag.Cast(Ability.IncreaseGatherChance50);
			}

			if (Core.Player.CurrentGP >= 100 && tag.GatherItem.Chance < 95 && level > 4)
			{
				if (level >= 23 && GatheringManager.SwingsRemaining == 1)
				{
					return await tag.Cast(Ability.IncreaseGatherChanceOnce15);
				}

				return await tag.Cast(Ability.IncreaseGatherChance15);
			}

			if (Core.Player.CurrentGP >= 50 && tag.GatherItem.Chance < 100 && level > 3)
			{
				if (level >= 23 && GatheringManager.SwingsRemaining == 1)
				{
					return await tag.Cast(Ability.IncreaseGatherChanceOnce15);
				}

				return await tag.Cast(Ability.IncreaseGatherChance5);
			}

			return true;
		}
		public override async Task<bool> ExecuteRotation(ExGatherTag tag)
		{
			var level = Core.Player.ClassLevel;

			if (GatheringManager.SwingsRemaining > 4 || ShouldForceUseRotation(tag, level))
			{
				if (Core.Player.CurrentGP >= 500 && level >= 40)
				{
					await tag.Cast(Ability.IncreaseGatherYield2);
					return await base.ExecuteRotation(tag);
				}

				if (Core.Player.CurrentGP >= 400 && level >= 30 && (level < 40 || Core.Player.MaxGP < 500))
				{
					await tag.Cast(Ability.IncreaseGatherYield);
					return await base.ExecuteRotation(tag);
				}

				if (Core.Player.CurrentGP >= 300 && level >= 25 && (level < 30 || Core.Player.MaxGP < 400))
				{
					await Wait();

					if (!tag.GatherItem.TryGatherItem())
					{
						return false;
					}

					await tag.Cast(Ability.AdditionalAttempt);
					return await base.ExecuteRotation(tag);
				}
			}

			return true;
		}
		public override async Task<bool> ExecuteRotation(ExGatherTag tag)
		{
			if (Core.Player.CurrentGP >= 300 && GatheringManager.SwingsRemaining > 4)
			{
				await tag.Cast(Ability.IncreaseGatherQuality30);
				await base.ExecuteRotation(tag);

				if (tag.GatherItem.Chance == 100 && Core.Player.CurrentGP >= 300 && GatheringManager.SwingsRemaining == 5)
				{
					await Wait();

					if (!tag.GatherItem.TryGatherItem())
					{
						return false;
					}

					await tag.Cast(Ability.AdditionalAttempt);
				}

				return true;
			}

			// Approx 30 gp or more between running to nodes, we are basically capped here so just use 100 gp
			if (Core.Player.CurrentGP >= Core.Player.MaxGP - 30)
			{
				await tag.Cast(Ability.IncreaseGatherQuality10);
				return true;
			}

			return true;
		}
		public override async Task<bool> MoveToSpot(ExGatherTag tag)
		{
			tag.StatusText = "Moving to " + this;

			if (StealthLocation == Vector3.Zero)
			{
				return false;
			}

			var result =
				await
				StealthLocation.MoveTo(UseMesh,
					radius: tag.Radius,
					name: "Stealth Location",
					stopCallback: tag.MovementStopCallback,
					dismountAtDestination: true);

			if (result)
			{
				await Coroutine.Yield();
				await tag.CastAura(Ability.Stealth, AbilityAura.Stealth);

				result =
					await NodeLocation.MoveToNoMount(UseMesh, tag.Distance, tag.Node.EnglishName, tag.MovementStopCallback);
			}

			return result;
		}
		public override async Task<bool> ExecuteRotation(ExGatherTag tag)
		{
			await Methodical(tag);

			await IncreaseChance(tag);

			return true;
		}
		public override async Task<bool> ExecuteRotation(ExGatherTag tag)
		{
			if (Core.Player.CurrentGP >= 500)
			{
				await tag.Cast(Ability.IncreaseGatherYield2);
			}

			return await base.ExecuteRotation(tag);
		}
		int IGetOverridePriority.GetOverridePriority(ExGatherTag tag)
		{
			if (tag.IsUnspoiled() && tag.CollectableItem == null)
			{
				return 8000;
			}

			return -1;
		}
		int IGetOverridePriority.GetOverridePriority(ExGatherTag tag)
		{
			// if we have a collectable && the collectable value is greater than or equal to 346: Priority 346
			if (tag.CollectableItem != null && tag.CollectableItem.Value >= 346)
			{
				return 346;
			}
			return -1;
		}
		int IGetOverridePriority.GetOverridePriority(ExGatherTag tag)
		{
			if (tag.IsEphemeral() || tag.IsUnspoiled())
			{
				return -1;
			}

			return 8000;
		}
		public override async Task<bool> ExecuteRotation(ExGatherTag tag)
		{
			if (Core.Player.ClassLevel > 50)
			{
				return await DoRotation(tag);
			}

			return await DoLevel50Rotation(tag);
		}
		protected virtual IGatheringRotation ResolveInternalGatheringRotation(ExGatherTag tag)
		{
			if (tag.IsUnspoiled())
			{
				return ExGatherTag.Rotations["Unspoiled"];
			}

			return ExGatherTag.Rotations["RegularNode"];
		}
		int IGetOverridePriority.GetOverridePriority(ExGatherTag tag)
		{
			// if we have a collectable && the collectable value is greater than or equal to 402: Priority 402
			if (tag.CollectableItem != null && tag.CollectableItem.Value >= 402)
			{
				return 402;
			}
			return -1;
		}
		int IGetOverridePriority.GetOverridePriority(ExGatherTag tag)
		{
			if (tag.IsEphemeral() || tag.IsUnspoiled() || tag.CollectableItem != null)
			{
				return -1;
			}

			return 8000;
		}
		int IGetOverridePriority.GetOverridePriority(ExGatherTag tag)
		{
			// if we have a collectable && the collectable value is greater than or equal to 515: Priority 515
			if (tag.CollectableItem != null && tag.CollectableItem.Value >= 515)
			{
				return 515;
			}
			return -1;
		}
Exemple #20
0
		int IGetOverridePriority.GetOverridePriority(ExGatherTag tag)
		{
			if (tag.IsEphemeral() && tag.CollectableItem == null)
			{
				return 9100;
			}

			return -1;
		}
		int IGetOverridePriority.GetOverridePriority(ExGatherTag tag)
		{
			// if we have a collectable Priority 0
			if (tag.CollectableItem != null && tag.CollectableItem.Value == 0)
			{
				return 80;
			}

			return -1;
		}
		public override async Task<bool> Prepare(ExGatherTag tag)
		{
			// TODO: how much gathering to 1 hit?  needs to be added into this logic.
			if (Core.Player.CurrentGP >= 500)
			{
				await tag.Cast(Ability.Toil);
			}

			return await base.Prepare(tag);
		}
		public override async Task<bool> Prepare(ExGatherTag tag)
		{
			var unknownItems = GatheringManager.GatheringWindowItems.Where(i => i.IsUnknownChance() && i.Amount > 0).ToArray();

			if (tag.IsUnspoiled() && Core.Player.CurrentGP >= 550 && unknownItems.Length > 1)
			{
				await tag.Cast(Ability.Toil);
			}

			return await base.Prepare(tag);
		}
		public override async Task<bool> MoveFromSpot(ExGatherTag tag)
		{
			tag.StatusText = "Moving from " + this;

			if (UnstealthAfter && Core.Player.HasAura((int) AbilityAura.Stealth))
			{
				return await tag.CastAura(Ability.Stealth);
			}

			return true;
		}
		int IGetOverridePriority.GetOverridePriority(ExGatherTag tag)
		{
			// if we have a collectable && the collectable value is greater than or equal to 240: Priority 240
			if (tag.CollectableItem != null && tag.CollectableItem.Value >= 240)
			{
				// Not complete
				//return 240;
			}

			return -1;
		}
		public override async Task<bool> ExecuteRotation(ExGatherTag tag)
		{
			await DiscerningMethodical(tag);
			await Discerning(tag);
			await AppraiseAndRebuff(tag);
			await Methodical(tag);

			await IncreaseChance(tag);

			return true;
		}
		protected bool ShouldForceUseRotation(ExGatherTag tag, uint level)
		{
			if (!tag.GatherItemIsFallback && ((level < 50 && tag.NodesGatheredAtMaxGp > 4) || tag.NodesGatheredAtMaxGp > 6))
			{
				tag.Logger.Info("Using Gp since we have gathered {0} nodes at max Gp.", tag.NodesGatheredAtMaxGp);

				return true;
			}

			return false;
		}
		public override async Task<bool> ExecuteRotation(ExGatherTag tag)
		{
			await UtmostCaution(tag);
			await AppraiseAndRebuff(tag);
			await UtmostMethodical(tag);
			await Methodical(tag);
			await SingleMindMethodical(tag); // TODO: display message we are using alternate since not enough gp

			await IncreaseChance(tag);

			return true;
		}
		public override async Task<bool> MoveFromSpot(ExGatherTag tag)
		{
			tag.StatusText = "Moving from " + this;

			var result = true;
			if (ReturnToApproachLocation)
			{
				result &= await ApproachLocation.MoveToNoMount(UseMesh, tag.Radius, tag.Node.EnglishName, tag.MovementStopCallback);
			}

			return result;
		}
Exemple #30
0
		public virtual async Task<bool> MoveToSpot(ExGatherTag tag)
		{
			tag.StatusText = "Moving to " + this;

			var result =
				await
				NodeLocation.MoveTo(UseMesh,
					radius: tag.Distance,
					name: tag.Node.EnglishName,
					stopCallback: tag.MovementStopCallback);

			return result;
		}
 protected async Task SingleMindMethodical(ExGatherTag tag)
 {
     await SingleMind(tag);
     await Methodical(tag);
 }
 protected async Task SingleMindImpulsive(ExGatherTag tag)
 {
     await SingleMind(tag);
     await Impulsive(tag);
 }
 protected async Task Methodical(ExGatherTag tag)
 {
     await tag.Cast(Ability.MethodicalAppraisal);
 }
 public override async Task <bool> ExecuteRotation(ExGatherTag tag)
 {
     return(true);
 }
 protected async Task UtmostSingleMind(ExGatherTag tag)
 {
     await UtmostCaution(tag);
     await SingleMind(tag);
 }
Exemple #36
0
        public override async Task <bool> ExecuteRotation(ExGatherTag tag)
        {
            await tag.Cast(Ability.Toil);

            return(await base.ExecuteRotation(tag));
        }
Exemple #37
0
 protected async Task Stickler(ExGatherTag tag)
 {
     await tag.Cast(Ability.Stickler);
 }
        public override async Task <bool> ExecuteRotation(ExGatherTag tag)
        {
            var level = Core.Player.ClassLevel;
            var gp    = Core.Player.CurrentGP;

            // Yield And Quality
            if (tag.GatherIncrease == GatherIncrease.YieldAndQuality ||
                (tag.GatherIncrease == GatherIncrease.Auto && level >= 40 && gp >= 650))
            {
                if (gp >= 500 && level >= 40)
                {
                    await tag.Cast(Ability.IncreaseGatherYield2);

                    if (Core.Player.CurrentGP >= 100)
                    {
                        await tag.Cast(Ability.IncreaseGatherQuality10);
                    }

                    return(await base.ExecuteRotation(tag));
                }

                return(true);
            }

            // Yield
            if (tag.GatherIncrease == GatherIncrease.Yield || (tag.GatherIncrease == GatherIncrease.Auto && level >= 40))
            {
                if (gp >= 500 && level >= 40)
                {
                    await tag.Cast(Ability.IncreaseGatherYield2);

                    return(await base.ExecuteRotation(tag));
                }

                if (gp >= 400 && level >= 30 && (level < 40 || Core.Player.MaxGP < 500))
                {
                    await tag.Cast(Ability.IncreaseGatherYield);

                    return(await base.ExecuteRotation(tag));
                }

                if (gp >= 300 && level >= 25 && (level < 30 || Core.Player.MaxGP < 400))
                {
                    await Wait();

                    if (!tag.GatherItem.TryGatherItem())
                    {
                        return(false);
                    }

                    await tag.Cast(Ability.AdditionalAttempt);

                    return(await base.ExecuteRotation(tag));
                }

                return(true);
            }

            // Quality
            if (tag.GatherIncrease == GatherIncrease.Quality ||
                (tag.GatherIncrease == GatherIncrease.Auto && level >= 15 && level < 40))
            {
                if (Core.Player.CurrentGP >= 300)
                {
                    await tag.Cast(Ability.IncreaseGatherQuality30);

                    return(await base.ExecuteRotation(tag));

                    ;
                }

                return(true);
            }

            return(await base.ExecuteRotation(tag));
        }
 protected async Task DiscerningInstinctual(ExGatherTag tag)
 {
     await Discerning(tag);
     await Instinctual(tag);
 }
 protected async Task SingleMindInstinctual(ExGatherTag tag)
 {
     await SingleMind(tag);
     await Instinctual(tag);
 }
        public override async Task <bool> Prepare(ExGatherTag tag)
        {
            var unknownItems = GatheringManager.GatheringWindowItems.Where(i => i.IsUnknownChance() && i.Amount > 0).ToArray();

            return(await base.Prepare(tag));
        }
 protected async Task UtmostCaution(ExGatherTag tag)
 {
     await tag.Cast(Ability.UtmostCaution);
 }
 protected async Task UtmostInstinctual(ExGatherTag tag)
 {
     await UtmostCaution(tag);
     await Instinctual(tag);
 }
Exemple #44
0
        public virtual async Task <bool> ExecuteRotation(ExGatherTag tag)
        {
            await IncreaseChance(tag);

            return(true);
        }
 protected async Task Instinctual(ExGatherTag tag)
 {
     await tag.Cast(Ability.InstinctualAppraisal);
 }
 protected async Task DiscerningImpulsive(ExGatherTag tag)
 {
     await Discerning(tag);
     await Impulsive(tag);
 }
 protected async Task UtmostImpulsive(ExGatherTag tag)
 {
     await UtmostCaution(tag);
     await Impulsive(tag);
 }
 protected async Task UtmostMethodical(ExGatherTag tag)
 {
     await UtmostCaution(tag);
     await Methodical(tag);
 }
 protected async Task Discerning(ExGatherTag tag)
 {
     await tag.Cast(Ability.DiscerningEye);
 }
 protected async Task SingleMind(ExGatherTag tag)
 {
     await tag.Cast(Ability.SingleMind);
 }
 protected async Task UtmostDiscerning(ExGatherTag tag)
 {
     await UtmostCaution(tag);
     await Discerning(tag);
 }
 public override bool ShouldForceGather(ExGatherTag tag)
 {
     return(!tag.IsUnspoiled());
 }
 protected async Task DiscerningMethodical(ExGatherTag tag)
 {
     await Discerning(tag);
     await Methodical(tag);
 }
 public override Task <bool> Prepare(ExGatherTag tag)
 {
     return(ResolveInternalGatheringRotation(tag).Prepare(tag));
 }
Exemple #55
0
        public virtual async Task <bool> MoveFromSpot(ExGatherTag tag)
        {
            tag.StatusText = "Moving from " + this;

            return(true);
        }