public static async Task OpenHousingWards() { if (SelectString.IsOpen) { SelectString.ClickLineContains("Go to specified"); await Coroutine.Wait(5000, () => HousingSelectBlock.Instance.IsOpen); } }
internal static async Task <bool> Main(uint aetheryteId) { Logger.SendLog("Binding to the aetheryte crystal."); var aetheryteObject = GetAetheryteObject(aetheryteId); if (aetheryteObject == null) { Logger.SendErrorLog("Could not find an aetheryte crystal."); return(false); } if (!WorldManager.CanFly) { var movementParams = new MoveToParameters { Destination = "Aetheryte crystal", Location = aetheryteObject.Location, DistanceTolerance = 8f }; while (aetheryteObject.Distance(Core.Player) > 8f) { Navigator.MoveTo(movementParams); await Coroutine.Yield(); } Navigator.Stop(); } else { while (aetheryteObject.Distance(Core.Player) > 8f) { Core.Player.Face(aetheryteObject); Navigator.PlayerMover.MoveTowards(aetheryteObject.Location); await Coroutine.Yield(); } Navigator.PlayerMover.MoveStop(); } aetheryteObject.Interact(); await Coroutine.Sleep(MainSettings.Instance.ActionDelay); SelectString.ClickLineContains("Set Home Point"); await Coroutine.Sleep(MainSettings.Instance.ActionDelay); SelectYesno.ClickYes(); await Coroutine.Sleep(MainSettings.Instance.ActionDelay); Logger.SendLog("Home point bound successfully."); return(true); }
public static async Task OpenHousingWards() { if (SelectString.IsOpen) { if (Translator.Language == Language.Chn) { SelectString.ClickLineContains("移动到指定小区"); } else { SelectString.ClickLineContains("Go to specified"); } await Coroutine.Wait(5000, () => HousingSelectBlock.Instance.IsOpen); } }
public async Task <bool> RightPanHandler(GameObject context) { if (ScriptHelper.InCombat()) { return(false); } if (SelectString.IsOpen) { SelectString.ClickLineContains("The Fruit of Knowledge"); return(true); } if (context.IsVisible && ScriptHelper.HasKeyItem(2000566)) { return(await ScriptHelper.ObjectInteraction(context)); } return(false); }
public async Task <bool> StonePedestalHandler4(GameObject context) { if (ScriptHelper.InCombat()) { return(false); } if (SelectString.IsOpen) { SelectString.ClickLineContains("The Flame of Magic"); return(true); } if (context.IsVisible && ScriptHelper.HasKeyItem(2000565)) { return(await ScriptHelper.ObjectInteraction(context)); } return(false); }
public async Task <bool> ReturnToZone() { await this.TeleportTo(); await this.Interact(); await Coroutine.Wait(5000, () => SelectString.IsOpen); if (!SelectString.IsOpen) { Logger.Instance.Error("Timeout, SelectString window did not open."); return(false); } if (SelectString.Lines().Any(line => line.Contains(AethernetText))) { Logger.Instance.Info("Selecting line " + AethernetText); SelectString.ClickLineContains(AethernetText); // SelectString.ClickSlot(0); going to try to make it more compatible with possible changes to game. await Coroutine.Wait(5000, () => !SelectString.IsOpen); await Coroutine.Wait(10000, () => SelectString.IsOpen); if (!SelectString.IsOpen) { Logger.Instance.Error("Timeout, SelectString window did not open."); return(false); } } Logger.Instance.Info("Selecting line " + Slot); SelectString.ClickSlot(Slot); await Coroutine.Wait(5000, () => CommonBehaviors.IsLoading); await CommonTasks.HandleLoading(); await Coroutine.Sleep(2000); // Weird stuff happens without this. return(true); }
protected override async Task <bool> Main() { await this.Interact(Distance); await Coroutine.Wait(5000, () => SelectString.IsOpen); if (!SelectString.IsOpen) { Logger.Error(Localization.Localization.ExUseAethernet_SelectLineTimeout); return(isDone = true); } if (SelectString.Lines().Any(line => line.Contains(AethernetText))) { Logger.Info(Localization.Localization.ExUseAethernet_SelectLine + AethernetText); SelectString.ClickLineContains(AethernetText); // SelectString.ClickSlot(0); going to try to make it more compatible with possible changes to game. await Coroutine.Wait(5000, () => !SelectString.IsOpen); await Coroutine.Wait(10000, () => SelectString.IsOpen); if (!SelectString.IsOpen) { Logger.Error(Localization.Localization.ExUseAethernet_SelectLineTimeout); return(isDone = true); } } Logger.Info(Localization.Localization.ExUseAethernet_SelectLine + Slot); SelectString.ClickSlot(Slot); await Coroutine.Wait(5000, () => CommonBehaviors.IsLoading); await CommonTasks.HandleLoading(); await Coroutine.Sleep(2000); // Weird stuff happens without this. return(isDone = true); }
protected override Composite CreateBehavior() { return(new PrioritySelector( new Decorator(ret => Talk.DialogOpen, new Action(r => { Talk.Next(); }) ), new Decorator(ret => IsOpen, new Sequence( new Sleep(1, 2), new Action(r => { //Logging.Write("Accepting leve..."); AcceptLeve((uint)LeveId); }), new Sleep(1, 2), new Action(r => { leveopened = true; //Logging.Write("Closing GuildLeve window..."); Close(); }), new Sleep(1, 2) ) ), new Decorator(ret => SelectYesno.IsOpen, new Action(r => { SelectYesno.ClickYes(); }) ), new Decorator(ret => SelectString.IsOpen, new Action(r => { if (!leveopened) { SelectString.ClickLineContains(LeveType); } else { SelectString.ClickSlot(4); } }) ), new Decorator(ret => JournalResult.IsOpen, new Action(r => { JournalResult.Complete(); }) ), new Decorator(ret => interacted && !Core.Player.HasTarget, new Action(r => { _done = true; }) ), new Decorator(ret => Vector3.Distance(Core.Player.Location, XYZ) > 3, CommonBehaviors.MoveTo(r => XYZ, "Moving to PickupLeve location") ), new Decorator(ret => Vector3.Distance(Core.Player.Location, XYZ) <= 3 && MovementManager.IsMoving, ff14bot.Behavior.CommonBehaviors.MoveStop() ), new Decorator(ret => Vector3.Distance(Core.Player.Location, XYZ) <= 3 && !MovementManager.IsMoving && !interacted, new Action(r => { GameObjectManager.GetObjectByNPCId((uint)NpcId).Interact(); interacted = true; }) ), new ActionAlwaysSucceed() )); }
private async Task <bool> GetToMinionSquare() { if (!WorldManager.TeleportById(62)) { //Logger.Error($"We can't get to {Constants.EntranceZone.CurrentLocaleAethernetName}. something is very wrong..."); //TreeRoot.Stop(); return(false); } await Coroutine.Sleep(1000); await Coroutine.Wait(10000, () => !Core.Me.IsCasting); await Coroutine.Sleep(1000); if (CommonBehaviors.IsLoading) { await Coroutine.Wait(-1, () => !CommonBehaviors.IsLoading); } await Coroutine.Wait(10000, () => WorldManager.ZoneId == 144); await Coroutine.Wait(5000, () => GameObjectManager.GetObjectByNPCId(62) != null); var unit = GameObjectManager.GetObjectByNPCId(62); if (!unit.IsWithinInteractRange) { var _target = unit.Location; Navigator.PlayerMover.MoveTowards(_target); while (_target.Distance2D(Core.Me.Location) >= 4) { Navigator.PlayerMover.MoveTowards(_target); await Coroutine.Sleep(100); } Navigator.PlayerMover.MoveStop(); } unit.Target(); unit.Interact(); await Coroutine.Wait(5000, () => SelectString.IsOpen); #if RB_CN if (SelectString.IsOpen) { SelectString.ClickLineContains("都市传送网"); } await Coroutine.Sleep(500); await Coroutine.Wait(5000, () => SelectString.IsOpen); if (SelectString.IsOpen) { SelectString.ClickLineContains("宠物广场"); } #else if (SelectString.IsOpen) { SelectString.ClickLineContains("Aethernet"); } await Coroutine.Sleep(500); await Coroutine.Wait(5000, () => SelectString.IsOpen); if (SelectString.IsOpen) { SelectString.ClickLineContains("Minion"); } #endif await Coroutine.Sleep(1000); if (CommonBehaviors.IsLoading) { await Coroutine.Wait(-1, () => !CommonBehaviors.IsLoading); } await Coroutine.Sleep(3000); return(true); }
public static async Task SmallTalk(int waitTime = 500) { await Coroutine.Wait(waitTime, () => InSmallTalk); while (InSmallTalk) { await Coroutine.Yield(); if (CommonBehaviors.IsLoading) { await Coroutine.Wait(-1, () => !CommonBehaviors.IsLoading); } if (SelectYesno.IsOpen) { SelectYesno.ClickNo(); } if (SelectString.IsOpen) { if (!await WindowEscapeSpam("SelectString")) { if (SelectString.Lines().Contains("Cancel")) { SelectString.ClickLineContains("Cancel"); } else if (SelectString.Lines().Contains("Quit")) { SelectString.ClickLineContains("Quit"); } else if (SelectString.Lines().Contains("Exit")) { SelectString.ClickLineContains("Exit"); } else { SelectString.ClickSlot((uint)(SelectString.LineCount - 1)); } } } if (SelectIconString.IsOpen) { if (!await WindowEscapeSpam("SelectIconString")) { if (SelectIconString.Lines().Contains("Cancel")) { SelectString.ClickLineContains("Cancel"); } else if (SelectIconString.Lines().Contains("Quit")) { SelectString.ClickLineContains("Quit"); } else if (SelectIconString.Lines().Contains("Exit")) { SelectString.ClickLineContains("Exit"); } else { SelectIconString.ClickSlot((uint)(SelectIconString.LineCount - 1)); } } } while (QuestLogManager.InCutscene) { AgentCutScene.Instance.PromptSkip(); if (AgentCutScene.Instance.CanSkip && SelectString.IsOpen) { SelectString.ClickSlot(0); } await Coroutine.Yield(); } while (Talk.DialogOpen) { Talk.Next(); await Coroutine.Wait(100, () => !Talk.DialogOpen); await Coroutine.Wait(100, () => Talk.DialogOpen); await Coroutine.Yield(); } if (JournalAccept.IsOpen) { JournalAccept.Decline(); } await Coroutine.Wait(500, () => InSmallTalk); } }
private static async Task GetToResidential(uint aetheryteId) { if (!ConditionParser.HasAetheryte(aetheryteId)) { return; } if (!WorldManager.TeleportById(aetheryteId)) { return; } do { await Coroutine.Sleep(2000); } while (Core.Me.IsCasting); await Coroutine.Sleep(2000); if (CommonBehaviors.IsLoading) { await Coroutine.Wait(-1, () => !CommonBehaviors.IsLoading); } await Coroutine.Wait(10000, () => GameObjectManager.GetObjectByNPCId(aetheryteId) != null); await Coroutine.Sleep(2000); var unit = GameObjectManager.GetObjectByNPCId(aetheryteId); if (!unit.IsWithinInteractRange) { Log($"Not in range {unit.Distance2D()}"); var target = unit.Location; if (WorldManager.RawZoneId == 129) { target = new Vector3(-89.30112f, 18.80033f, -2.019181f); } else if (WorldManager.RawZoneId == 628) { target = new Vector3(48.03579f, 4.549999f, -31.83851f); } //await CommonTasks.MoveAndStop(new MoveToParameters(target.FanOutRandom(2f), unit.Name), 2f, true); await Navigation.GetTo(WorldManager.ZoneId, target); /* Navigator.PlayerMover.MoveTowards(target); * while (!unit.IsWithinInteractRange) * { * Navigator.PlayerMover.MoveTowards(target); * await Coroutine.Sleep(100); * } * * Navigator.PlayerMover.MoveStop();*/ } else { Log($"In range {unit.Distance2D()}"); } unit.Target(); unit.Interact(); await Coroutine.Wait(5000, () => SelectString.IsOpen); if (SelectString.IsOpen) { if (Translator.Language == Language.Chn) { SelectString.ClickLineContains("冒险者住宅区传送"); } else { SelectString.ClickLineContains("Residential"); } } await Coroutine.Sleep(500); await Coroutine.Wait(5000, () => SelectString.IsOpen); }
protected override async Task <bool> Main() { if (Talk.DialogOpen) { await HandleTalk(); return(true); } if (SelectYesno.IsOpen) { SelectYesno.ClickYes(); await Coroutine.Yield(); return(true); } if (JournalResult.IsOpen) { await Coroutine.Wait(1000, () => JournalResult.ButtonClickable); JournalResult.Complete(); await Coroutine.Yield(); return(true); } // Movement if (ExProfileBehavior.Me.Distance(Location) > 3.5) { StatusText = Localization.Localization.ExPickupGuildLeve_Move + NpcId; await Location.MoveTo(radius : 3.4f, name : " NpcId: " + NpcId); return(true); } if (!interactTimeout.IsRunning) { interactTimeout.Restart(); } // Interact if (Core.Target == null && ExProfileBehavior.Me.Distance(Location) <= 3.5) { await this.Interact(); await Coroutine.Yield(); return(true); } if (SelectString.IsOpen) { if (interactTimeout.Elapsed.TotalSeconds > Timeout || GuildLeve.HasLeves(Ids) || GuildLeve.Allowances == 0) { SelectString.ClickSlot(uint.MaxValue); isDone = true; return(true); } SelectString.ClickLineContains(LeveType); return(true); } var guildLeveWindow = new GuildLeve(); if (guildLeveWindow.IsValid) { if (interactTimeout.Elapsed.TotalSeconds > Timeout || GuildLeve.HasLeves(Ids) || GuildLeve.Allowances == 0) { await guildLeveWindow.CloseInstance(); return(true); } foreach (var leveId in Ids.Where(id => !GuildLeve.HasLeve(id))) { if (GuildLeve.Allowances > 0) { StatusText = Localization.Localization.ExPickupGuildLeve_Pickup + leveId; Logger.Info(Localization.Localization.ExPickupGuildLeve_Pickup2 + leveId); await Coroutine.Sleep(1000); guildLeveWindow.AcceptLeve(leveId); await Coroutine.Yield(); // so our memory lock updates and level allowances change } } await Coroutine.Sleep(1000); return(true); } // Interact if targetting but not null (if combat behaviors prevented the first one) if (ExProfileBehavior.Me.Distance(Location) <= 3.5) { await this.Interact(); return(true); } return(true); }