Ejemplo n.º 1
0
        private void CloseWindows()
        {
            if (SelectYesno.IsOpen)
            {
                SelectYesno.ClickNo();
            }

            if (Request.IsOpen)
            {
                Request.Cancel();
            }

            if (JournalResult.IsOpen)
            {
                JournalResult.Decline();
            }

            if (SelectString.IsOpen)
            {
                SelectString.ClickSlot(uint.MaxValue);
            }

            if (SelectIconString.IsOpen)
            {
                SelectIconString.ClickSlot(uint.MaxValue);
            }

            if (Shop.Open)
            {
                Shop.Close();
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Auto accepts/completes quests.
        /// </summary>
        /// <returns></returns>
        private bool ExecuteAutoAcceptQuests()
        {
            // Auto accept quest
            if (JournalAccept.IsOpen)
            {
                JournalAccept.Accept();
                return(true);
            }

            // Auto complete quest
            if (JournalResult.IsOpen)
            {
                if (!JournalResult.ButtonClickable)
                {
                    JournalResult.SelectSlot(0);
                }

                if (JournalResult.ButtonClickable)
                {
                    JournalResult.Complete();
                    return(true);
                }
            }

            return(false);
        }
Ejemplo n.º 3
0
        public static async Task <bool> SetJournalComplete()
        {
            int ticks = 0;

            while (ticks < 20 && JournalResult.IsOpen)
            {
                JournalResult.Complete();
                await Coroutine.Sleep(500);

                ticks++;
            }

            return(true);
        }
Ejemplo n.º 4
0
            /// <summary>
            /// Clicks Complete Quest once available.
            /// </summary>
            private static async Task <bool> HandleCompleteQuest()
            {
                if (!JournalResult.IsOpen || !JournalResult.ButtonClickable)
                {
                    return(false);
                }

                while (JournalResult.ButtonClickable)
                {
                    JournalResult.Complete();
                    await Common.Sleep(100);

                    if (!JournalResult.IsOpen || !JournalResult.ButtonClickable)
                    {
                        break;
                    }
                }

                return(true);
            }
Ejemplo n.º 5
0
        public static async Task <bool> TurnInLeve(uint npc)
        {
            await SelectTeleport();
            await Target(npc);
            await InteractTalk();
            await ContinueTalk();
            await ChooseString(0);
            await ContinueTalk();
            await SetJournalComplete();
            await ChooseString(4);

            await Coroutine.Sleep(2000);

            if (JournalResult.IsOpen)
            {
                JournalResult.Decline();
            }
            await Coroutine.Sleep(2000);

            return(true);
        }
Ejemplo n.º 6
0
            /// <summary>
            /// Chooses equipment if better than currently equipped (using Item Weights) or items based on higest value.
            /// </summary>
            /// <param name="questId"></param>
            private static async Task <bool> HandleRewards(int questId)
            {
                if (!JournalResult.IsOpen)
                {
                    return(false);
                }

                if (!DataManager.QuestCache.TryGetValue((uint)questId, out QuestResult questData))
                {
                    return(false);
                }

                if (questData.Rewards.Length == 0)
                {
                    return(false);
                }

                var values = questData.Rewards.Select(r => new Score(r)).OrderByDescending(r => r.Value).ToArray();

                int chosenSlot;

                if (values.Select(r => r.Value).Distinct().Count() == 1)
                {
                    chosenSlot = questData.Rewards.IndexOf(values[0].Reward);
                }
                else
                {
                    var candidateByCost = questData.Rewards
                                          .OrderByDescending(r => r.Worth)
                                          .FirstOrDefault();

                    chosenSlot = Array.IndexOf(questData.Rewards, candidateByCost);
                }

                JournalResult.SelectSlot(5 + chosenSlot);
                await Common.Sleep(50);

                return(true);
            }
Ejemplo n.º 7
0
        public async Task <JournalResult> GetAccoutAListAsync(long?userId, int currencyType, int pageIndex, int pageSize)
        {
            using (MyDbContext dbc = new MyDbContext())
            {
                JournalResult result   = new JournalResult();
                var           entities = dbc.GetAll <JournalEntity>().AsNoTracking().Where(j => j.IsEnabled == true);
                if (userId != null)
                {
                    entities = entities.Where(a => a.UserId == userId);
                }
                if (currencyType > 0)
                {
                    entities = entities.Where(a => a.CurrencyType == currencyType);
                }

                result.PageCount = (int)Math.Ceiling((await entities.LongCountAsync()) * 1.0f / pageSize);
                var journalResult = await entities.Include(j => j.User).OrderByDescending(a => a.CreateTime).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();

                result.List = journalResult.Select(a => ToDTOA(a)).ToArray();
                return(result);
            }
        }
Ejemplo n.º 8
0
 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()
                ));
 }
Ejemplo n.º 9
0
        protected override async Task <bool> Main()
        {
            if (interactTimeout.Elapsed.TotalSeconds > Timeout)
            {
                Logger.Error(Localization.Localization.ExTurnInGuildLeve_TurninTimeout);
                isDone = true;
                return(true);
            }

            if (!checkedTransport)
            {
                checkedTransport = true;

                StatusText = Localization.Localization.ExTurnInGuildLeve_CheckTransport;

                var selectYesnoCountWindow = new SelectYesnoCount();
                if (await selectYesnoCountWindow.Refresh(2000))
                {
                    StatusText = Localization.Localization.ExTurnInGuildLeve_SelectTransport;

                    if (AcceptTransport)
                    {
                        selectYesnoCountWindow.Yes();
                        await Coroutine.Wait(5000, () => CommonBehaviors.IsLoading);

                        await Coroutine.Wait(System.Threading.Timeout.Infinite, () => !CommonBehaviors.IsLoading);
                    }
                    else
                    {
                        await selectYesnoCountWindow.CloseInstance();
                    }

                    return(true);
                }
            }

            // Movement
            if (ExProfileBehavior.Me.Distance(Location) > 3.5)
            {
                StatusText = Localization.Localization.ExTurnInGuildLeve_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)
            {
                return(await InteractWithNpc());
            }

            if (Talk.DialogOpen)
            {
                await HandleTalk();
            }

            if (SelectIconString.IsOpen)
            {
                if (iconStringIndex == 9001)
                {
                    iconStringIndex = (uint)SelectIconString.Lines().Count - 1;
                }

                // We will just click the last quest and decrement until we have either no quests left or none to turn in.
                SelectIconString.ClickSlot(--iconStringIndex);
                await Coroutine.Sleep(500);

                if (iconStringIndex == uint.MaxValue)
                {
                    Logger.Warn(Localization.Localization.ExTurnInGuildLeve_NothingToTurnin);

                    isDone = true;
                    return(true);
                }

                return(true);
            }

            if (SelectString.IsOpen)
            {
                var lines = SelectString.Lines();

                // If Collect Reward exists, we click that; otherwise we will click Close. (-1 as uint = uint.MaxValue)
                var index = (uint)lines.IndexOf(CollectRewardText, StringComparer.InvariantCultureIgnoreCase);

                if (index != uint.MaxValue)
                {
                    Logger.Info(Localization.Localization.ExTurnInGuildLeve_CollectReward, WorldManager.EorzaTime);
                    SelectString.ClickSlot(index);
                    await Coroutine.Yield();

                    return(true);
                }

                // If yes is an option, click it to turn in more items.(crafting)
                index = (uint)lines.IndexOf(YesText, StringComparer.InvariantCultureIgnoreCase);

                if (index != uint.MaxValue)
                {
                    Logger.Info(Localization.Localization.ExTurnInGuildLeve_TurninMore, WorldManager.EorzaTime);
                    SelectString.ClickSlot(index);
                    await Coroutine.Yield();

                    return(true);
                }

                Logger.Warn(Localization.Localization.ExTurnInGuildLeve_NoRewardsLeft);
                isDone = true;
                SelectString.ClickSlot(index);
                await Coroutine.Yield();

                return(true);
            }

            if (Request.IsOpen)
            {
                var itemCount = Memory.Request.ItemsToTurnIn.Length;

                var itemId = Memory.Request.ItemId1;

                IEnumerable <BagSlot> itemSlots =
                    InventoryManager.FilledInventoryAndArmory.Where(
                        bs => bs.RawItemId == itemId && !Blacklist.Contains((uint)bs.Pointer.ToInt32(), BlacklistFlags.Loot)).ToArray();

                if (HqOnly)
                {
                    itemSlots = itemSlots.Where(bs => bs.IsHighQuality);
                }

                if (NqOnly)
                {
                    itemSlots = itemSlots.Where(bs => !bs.IsHighQuality);
                }

                var items = itemSlots.Take(itemCount).ToArray();

                if (items.Length == 0)
                {
                    Logger.Warn(Localization.Localization.ExTurnInGuildLeve_NoItemToTurnin, HqOnly, NqOnly, itemId);
                    isDone = true;
                    return(true);
                }

                StatusText = Localization.Localization.ExTurnInGuildLeve_TurnIn;

                var isHq            = items.Any(i => i.IsHighQuality);
                var itemName        = items[0].EnglishName;
                var requestAttempts = 0;
                while (Request.IsOpen && requestAttempts++ < 5 && Behaviors.ShouldContinue)
                {
                    foreach (var item in items)
                    {
                        item.Handover();
                        await Coroutine.Yield();
                    }

                    await Coroutine.Wait(1000, () => Request.HandOverButtonClickable);

                    if (Request.HandOverButtonClickable)
                    {
                        Request.HandOver();

                        if (isHq)
                        {
                            await Coroutine.Wait(2000, () => !Request.IsOpen && SelectYesno.IsOpen);
                        }
                        else
                        {
                            await Coroutine.Wait(2000, () => !Request.IsOpen);
                        }
                    }
                }

                turnedItemsIn = true;

                if (SelectYesno.IsOpen)
                {
                    SelectYesno.ClickYes();
                    await Coroutine.Yield();

                    Logger.Info(Localization.Localization.ExTurnInGuildLeve_TurnInHq, itemName, WorldManager.EorzaTime);
                }
                else
                {
                    Logger.Info(Localization.Localization.ExTurnInGuildLeve_TurnInNq, itemName, WorldManager.EorzaTime);
                }

                await HandleTalk();

                await Coroutine.Wait(2000, () => JournalResult.IsOpen);

                return(true);
            }

            if (JournalResult.IsOpen)
            {
                await Coroutine.Wait(2000, () => JournalResult.ButtonClickable);

                JournalResult.Complete();
                Logger.Info(Localization.Localization.ExTurnInGuildLeve_Complete, WorldManager.EorzaTime);

                await Coroutine.Wait(2000, () => !JournalResult.IsOpen);
                await HandleTalk();

                return(true);
            }

            if (!await WaitForOpenWindow())
            {
                if (MultipleQuests)
                {
                    Logger.Info(Localization.Localization.ExTurnInGuildLeve_OpenWindow);
                    CloseWindows();
                    ExProfileBehavior.Me.ClearTarget();
                }
                else
                {
                    isDone = true;
                }
            }

            return(true);
        }
Ejemplo n.º 10
0
        private static async Task <bool> HelpersMethod()
        {
            if (MainSettingsModel.Instance.UseAutoCutscene)
            {
                if (QuestLogManager.InCutscene)
                {
                    if (AgentCutScene.Instance.CanSkip && !SelectString.IsOpen)
                    {
                        AgentCutScene.Instance.PromptSkip();
                        if (await Coroutine.Wait(600, () => SelectString.IsOpen))
                        {
                            SelectString.ClickSlot(0);
                            await Coroutine.Sleep(1000);
                        }
                    }
                }
            }

            if (MainSettingsModel.Instance.AutoSprint && ActionManager.IsSprintReady && MovementManager.IsMoving)
            {
                ActionManager.Sprint();
            }

            if (MainSettingsModel.Instance.UseAutoTalk)
            {
                if (Core.Me.IsAlive)
                {
                    if (SelectYesno.IsOpen)
                    {
                        SelectYesno.ClickYes();
                    }
                }

                if (Talk.DialogOpen)
                {
                    Talk.Next();
                }

                //if (Request.IsOpen)
                //{
                //    Logger.ATBLog("Handing over any item(s) in your Key Items.");
                //    foreach (var s in InventoryManager.GetBagByInventoryBagId(InventoryBagId.KeyItems))
                //    {
                //        s.Handover();
                //        Logger.ATBLog(s.EnglishName);
                //        await Coroutine.Wait(250, () => Request.HandOverButtonClickable);
                //        if (Request.HandOverButtonClickable) { break; }
                //    }
                //
                //    Logger.ATBLog("Handing over any item(s) in your Inventory.");
                //    foreach (var s in InventoryManager.FilledSlots)
                //    {
                //        s.Handover();
                //        Logger.ATBLog(s.EnglishName);
                //        await Coroutine.Wait(250, () => Request.HandOverButtonClickable);
                //        if (Request.HandOverButtonClickable) { break; }
                //    }
                //
                //    if (Request.HandOverButtonClickable) { Request.HandOver(); }
                //
                //    Logger.ATBLog("Handing over any item(s) in your Armory.");
                //    foreach (var s in InventoryManager.FilledArmorySlots)
                //    {
                //        s.Handover();
                //        Logger.ATBLog(s.EnglishName);
                //        await Coroutine.Wait(250, () => Request.HandOverButtonClickable);
                //        if (Request.HandOverButtonClickable) { break; }
                //    }
                //
                //    if (Request.HandOverButtonClickable) { Request.HandOver(); }
                //    else { await Coroutine.Wait(3000, () => !Request.IsOpen); }
                //}
            }

            if (MainSettingsModel.Instance.UseAutoQuest)
            {
                if (JournalAccept.IsOpen)
                {
                    JournalAccept.Accept();
                }

                if (JournalResult.IsOpen)
                {
                    JournalResult.Complete();
                }
            }
            return(false);
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        private async Task <bool> HandleWindows()
        {
            while (WindowsOpen())
            {
                if (SelectString.IsOpen)
                {
                    if (DialogOption > -1)
                    {
                        SelectString.ClickSlot((uint)DialogOption);
                    }

                    SelectString.ClickLineEquals(QuestName);
                    await Coroutine.Sleep(100);
                }

                if (SelectIconString.IsOpen)
                {
                    if (DialogOption > -1)
                    {
                        SelectIconString.ClickSlot((uint)DialogOption);
                    }

                    SelectIconString.ClickLineEquals(QuestName);
                    await Coroutine.Sleep(100);
                }

                if (SelectYesno.IsOpen)
                {
                    SelectYesno.ClickYes();
                    await Coroutine.Sleep(100);
                }

                if (Request.IsOpen)
                {
                    var items = InventoryManager.FilledInventoryAndArmory.ToArray();
                    for (int i = 0; i < ItemIds.Length; i++)
                    {
                        BagSlot item;
                        if (RequiresHq[i])
                        {
                            item = items.FirstOrDefault(z => z.RawItemId == ItemIds[i] && z.IsHighQuality && !usedSlots.Contains(z));
                        }
                        else
                        {
                            item = items.FirstOrDefault(z => z.RawItemId == ItemIds[i] && !usedSlots.Contains(z));
                        }

                        item.Handover();
                        usedSlots.Add(item);
                    }
                    usedSlots.Clear();
                    Request.HandOver();
                    await Coroutine.Sleep(100);
                }

                if (JournalResult.IsOpen)
                {
                    if (JournalResult.ButtonClickable)
                    {
                        JournalResult.Complete();
                    }

                    if (hasRewards)
                    {
                        JournalResult.SelectSlot(RewardSlot);
                    }

                    await Coroutine.Sleep(100);
                }

                if (JournalAccept.IsOpen)
                {
                    JournalAccept.Accept();
                    await Coroutine.Sleep(100);
                }

                if (Talk.DialogOpen)
                {
                    Talk.Next();
                    await Coroutine.Sleep(100);
                }

                if (QuestLogManager.InCutscene)
                {
                    if (AgentCutScene.Instance.CanSkip && !SelectString.IsOpen)
                    {
                        AgentCutScene.Instance.PromptSkip();
                        if (await Coroutine.Wait(600, () => SelectString.IsOpen))
                        {
                            SelectString.ClickSlot(0);
                            await Coroutine.Sleep(1000);
                        }
                    }
                }

                await Coroutine.Yield();
            }

            return(QuestLogManager.InCutscene || Core.Player.HasTarget);
        }