protected override async Task <bool> Main() { var retainerList = new RetainerList(); foreach (var unit in GameObjectManager.GameObjects.OrderBy(r => r.Distance())) { if (unit.NpcId == 2000401 || unit.NpcId == 2000441) { unit.Interact(); break; } } if (!await Coroutine.Wait(5000, () => RetainerList.IsOpen)) { return(isDone = true); } { uint index = 0; while (index < RetainerCount) { Log("Checking Retainer n° " + (index + 1)); await Coroutine.Sleep(200); // Select retainer await retainerList.SelectRetainerAndSkipDialog(index); await Coroutine.Wait(5000, () => SelectString.IsOpen); string ventureLine = SelectString.Lines()[5]; Log("Venture Status : " + ventureLine); if (ventureLine.EndsWith("(Complete)") || ventureLine.EndsWith("Unternehmung einsehen") || ventureLine.EndsWith("tâche terminée") || ventureLine.EndsWith("[完了]") || ventureLine.EndsWith("[探险归来]")) { Log("Venture Completed !"); // Click on the completed venture SelectString.ClickSlot(5); await Coroutine.Wait(5000, () => RetainerTaskResult.IsOpen); // Assign a new venture RetainerTaskResult.Reassign(); await Coroutine.Wait(5000, () => RetainerTaskAsk.IsOpen); // Confirm new venture RetainerTaskAsk.Confirm(); await Coroutine.Wait(5000, () => Talk.DialogOpen); // Skip Dialog Talk.Next(); await Coroutine.Wait(5000, () => SelectString.IsOpen); } SelectString.ClickSlot((uint)SelectString.LineCount - 1); await Coroutine.Wait(5000, () => Talk.DialogOpen); // Skip Dialog Talk.Next(); await Coroutine.Wait(5000, () => RetainerList.IsOpen); index++; } Log("No more Retainer to check"); await retainerList.CloseInstanceGently(); return(isDone = true); } }
protected override async Task <bool> Main() { var retainerList = new RetainerList(); foreach (var unit in GameObjectManager.GetObjectsOfType <EventObject>().OrderBy(r => r.Distance())) { if (unit.Name == "Summoning Bell" || unit.Name == "Sonnette" || unit.Name == "Krämerklingel" || unit.Name == "リテイナーベル" || unit.Name == "传唤铃") { unit.Interact(); break; } } if (!await Coroutine.Wait(5000, () => RetainerList.IsOpen)) { return(isDone = true); } while (retainersLeft < RetainerCount) { Log("Checking Retainer Nº {0}", retainersLeft + 1); // Open specified retainer await retainerList.OpenRetainer(retainersLeft); retainersLeft++; await Coroutine.Wait(5000, () => Talk.DialogOpen); // Skip dialog Talk.Next(); await Coroutine.Wait(5000, () => SelectString.IsOpen); foreach (var retainer in GameObjectManager.GetObjectsOfType <BattleCharacter>(true).OrderBy(r => r.Distance())) { if (retainer.Type.ToString() == "Retainer") { retainerName = retainer.Name; break; } } switch (await CheckRetainer()) { case VentureCheck.Completed: Log("Venture complete! Sent {0} out again.", retainerName); break; case VentureCheck.InProgress: Log("Looks like {0} is still out on a venture! Skipping.", retainerName); break; case VentureCheck.None: Log("{0} isn't assigned any ventures. Skipping.", retainerName); break; default: Log("Something went wrong?"); break; } await CloseRetainer(); } Log("Checked all retainers."); // Close retainers window. if (!retainerList.IsValid) { await retainerList.Refresh(1000); } await retainerList.CloseInstance(300); return(isDone = true); }
protected override async Task <bool> Main() { var retainerList = new RetainerList(); foreach (var unit in GameObjectManager.GameObjects.OrderBy(r => r.Distance())) { if (unit.NpcId == 2000401 || unit.NpcId == 2000441 || unit.Name == "Summoning Bell" || unit.Name == "Sonnette" || unit.Name == "Krämerklingel" || unit.Name == "リテイナーベル" || unit.Name == "传唤铃") { unit.Interact(); break; } } if (!await Coroutine.Wait(5000, () => RetainerList.IsOpen)) { return(isDone = true); } { int retainerCount = GetRetainerNum.GetNumberOfRetainers(); uint index = 0; while (index < retainerCount) { Log("Checking Retainer n° " + (index + 1)); await Coroutine.Sleep(300); // Select retainer await retainerList.SelectRetainerAndSkipDialog(index); await Coroutine.Wait(5000, () => SelectString.IsOpen); if (!SelectString.IsOpen) { Log("Something went wrong when checking Retainer n° " + (index + 1) + ", its contract might be suspended !"); break; } string ventureLine = SelectString.Lines()[5]; Log("Venture Status : " + ventureLine); if (ventureLine.EndsWith("(Complete)") || ventureLine.EndsWith("Unternehmung einsehen") || ventureLine.EndsWith("tâche terminée") || ventureLine.EndsWith("[完了]") || ventureLine.EndsWith("[探险归来]") || ventureLine.EndsWith("[结束]")) { Log("Venture Completed !"); // Click on the completed venture SelectString.ClickSlot(5); await Coroutine.Wait(5000, () => RetainerTaskResult.IsOpen); // Assign a new venture RetainerTaskResult.Reassign(); await Coroutine.Wait(5000, () => RetainerTaskAsk.IsOpen); // Confirm new venture RetainerTaskAsk.Confirm(); await Coroutine.Wait(5000, () => Talk.DialogOpen); // Skip Dialog Talk.Next(); await Coroutine.Wait(5000, () => SelectString.IsOpen); } SelectString.ClickSlot((uint)SelectString.LineCount - 1); await Coroutine.Wait(5000, () => Talk.DialogOpen); // Skip Dialog Talk.Next(); await Coroutine.Wait(5000, () => RetainerList.IsOpen); index++; } Log("No more Retainer to check"); if (!retainerList.IsValid) { await retainerList.Refresh(1000); } await retainerList.CloseInstance(300); return(isDone = true); } }