private static bool ReadyToTurnIn()
        {
            if (Core.Player.InCombat)
            {
                return(false);
            }

            var currentFate = OracleFateManager.GetCurrentFateData();

            if (currentFate == null)
            {
                return(false);
            }

            var oracleFate = OracleFateManager.FateDatabase.GetFateFromId(currentFate.Id);

            if (oracleFate.Type != FateType.Collect)
            {
                return(false);
            }

            if (currentFate.Status == FateStatus.NOTACTIVE)
            {
                return(false);
            }

            var fateItemCount = ConditionParser.ItemCount(oracleFate.ItemId);

            return(fateItemCount >= FateSettings.Instance.CollectTurnInAmount);
        }
        private static double GetWeight(BattleCharacter battleCharacter)
        {
            var weight      = 1800f;
            var currentFate = OracleFateManager.GetCurrentFateData();
            var oracleFate  = new Fate();

            if (currentFate != null)
            {
                oracleFate = OracleFateManager.FateDatabase.GetFateFromFateData(currentFate);
            }

            // If FATE has a preferred target, prioritise it if we're out of combat.
            if (oracleFate.PreferredTargetId != null && oracleFate.PreferredTargetId.Contains(battleCharacter.NpcId) && !Core.Player.InCombat)
            {
                weight += 20000;
            }

            if (battleCharacter.Pointer == Core.Player.PrimaryTargetPtr)
            {
                weight += 150;
            }

            if (battleCharacter.HasTarget && battleCharacter.CurrentTargetId == Core.Player.ObjectId)
            {
                weight += 750;
            }

            if (ChocoboManager.Object != null && battleCharacter.HasTarget && battleCharacter.CurrentTargetId == ChocoboManager.Object.ObjectId)
            {
                weight += 400;
            }

            if (!battleCharacter.TappedByOther)
            {
                weight += 200;
            }

            if (battleCharacter.CurrentTargetId == Core.Player.ObjectId)
            {
                weight += 1000 / Convert.ToSingle(battleCharacter.CurrentHealth) * 3000;
            }

            if (!battleCharacter.InCombat)
            {
                weight += 130;
            }

            // Prefer nearer targets in combat if melee, and always out of combat.
            if (OracleClassManager.IsMeleeDpsClassJob(Core.Player.CurrentJob) || OracleClassManager.IsTankClassJob(Core.Player.CurrentJob) ||
                !Core.Player.InCombat)
            {
                weight -= battleCharacter.Distance(Core.Player) * 30;
            }

            return(weight);
        }
示例#3
0
        internal static async Task <bool> Main()
        {
            if (CommonBehaviors.IsLoading)
            {
                return(false);
            }

            if (IsFateSet())
            {
                if (OracleFateManager.GetCurrentFateData() == null)
                {
                    return(true);
                }

                if (!IsFatePoiSet() && Poi.Current.Type != PoiType.Death && !GameObjectManager.Attackers.Any())
                {
                    Poi.Current = new Poi(OracleFateManager.GetCurrentFateData(), PoiType.Fate);
                }

                return(true);
            }

            if (OracleClassManager.ZoneChangeNeeded())
            {
                return(false);
            }

            if (OracleFateManager.PreviousFateChained() && ModeSettings.Instance.OracleOperationMode != OracleOperationMode.SpecificFates)
            {
                await SelectChainFate();
            }
            else if (ModeSettings.Instance.OracleOperationMode == OracleOperationMode.SpecificFates)
            {
                await SelectSpecificFate();
            }
            else
            {
                await SelectClosestFate();
            }

            if (OracleFateManager.GetCurrentFateData() != null && MovementSettings.Instance.DelayFateMovement && !OracleFateManager.DoNotWaitBeforeMovingFlag)
            {
                await WaitBeforeMoving();
            }

            OracleFateManager.DoNotWaitBeforeMovingFlag = false;
            return(IsFateSet() && IsFatePoiSet());
        }
示例#4
0
        internal static async Task <bool> Main()
        {
            if (!Request.IsOpen)
            {
                return(false);
            }

            if (GameObjectManager.Attackers.Any())
            {
                return(false);
            }

            var currentFate   = OracleFateManager.GetCurrentFateData();
            var itemId        = OracleFateManager.FateDatabase.GetFateFromId(currentFate.Id).ItemId;
            var turnInBagSlot = GetBagSlotFromItemId(itemId);

            if (turnInBagSlot == null)
            {
                return(false);
            }

            Logger.SendLog("Attempting to hand over " + turnInBagSlot.Count + " of the item '" + turnInBagSlot.Name + "'.");
            turnInBagSlot.Handover();

            await Coroutine.Sleep(MainSettings.Instance.ActionDelay);

            if (!Request.IsOpen || !Request.HandOverButtonClickable)
            {
                Logger.SendErrorLog("Hand over failed.");
                Request.Cancel();

                return(false);
            }

            Logger.SendDebugLog("Pressing 'Hand Over' button.");
            Request.HandOver();
            await Coroutine.Sleep(MainSettings.Instance.ActionDelay);

            return(true);
        }
        private static bool Filter(BattleCharacter battleCharacter)
        {
            var currentFate    = OracleFateManager.GetCurrentFateData();
            var blacklistEntry = Blacklist.GetEntry(battleCharacter);

            if (!battleCharacter.IsValid || battleCharacter.IsDead || !battleCharacter.IsVisible)
            {
                return(false);
            }

            if (!battleCharacter.CanAttack)
            {
                return(false);
            }

            if (blacklistEntry != null)
            {
                return(false);
            }

            if (battleCharacter.IsFateGone)
            {
                return(false);
            }

            if (IsLevelSyncNeeded(battleCharacter) && !FateManager.GetFateById(battleCharacter.FateId).Within2D(battleCharacter.Location))
            {
                return(false);
            }

            if (GameObjectManager.Attackers.Contains(battleCharacter))
            {
                return(true);
            }

            if (battleCharacter.HasTarget && battleCharacter.CurrentTargetId == Core.Player.ObjectId)
            {
                return(true);
            }

            if (ChocoboManager.Object != null && battleCharacter.HasTarget && battleCharacter.CurrentTargetId == ChocoboManager.Object.ObjectId)
            {
                return(true);
            }

            if (!battleCharacter.IsFate && currentFate != null)
            {
                return(false);
            }

            if (currentFate != null && battleCharacter.FateId != currentFate.Id)
            {
                return(false);
            }

            if (currentFate == null || !currentFate.IsValid)
            {
                return(false);
            }

            return(!Core.Player.InCombat);
        }