Exemplo n.º 1
0
        private async Task <bool> Interacting()
        {
            _interactAttempts++;
            if (ZetaDia.IsLoadingWorld)
            {
                Logger.Debug("[UsePortal] Waiting for the world to load");
                await Coroutine.Sleep(250);

                return(false);
            }

            var actor = ActorFinder.FindObject(_actorId);

            if (actor == null)
            {
                Logger.Debug("[UsePortal] Nothing to interact, failing. ");
                State = States.Failed;
                return(false);
            }


            if (await Interact(actor))
            {
                State = States.Checking;
            }
            return(false);
        }
Exemplo n.º 2
0
        private async Task <bool> Checking()
        {
            var actor = ActorFinder.FindObject(_actorId);

            //if (actor != null && actor.Distance > actor.CollisionSphere.Radius + 2)
            //{
            //    await NavigationCoroutine.MoveTo(actor.Position, (int)actor.CollisionSphere.Radius + 1);
            //    return false;
            //}
            if (_sourceWorldDynamicId != AdvDia.CurrentWorldDynamicId)
            {
                Logger.Debug("[UsePortal] World has changed, assuming done.");
                State = States.Completed;
                return(false);
            }
            if (actor == null)
            {
                Logger.Debug("[UsePortal] Nothing to interact, failing. ");
                State = States.Failed;
                return(false);
            }
            if (_interactAttempts > 5)
            {
                await NavigationCoroutine.MoveTo(actor.Position, (int)actor.Distance - 1);

                _interactAttempts = 0;
            }
            State = States.Interacting;
            return(false);
        }
Exemplo n.º 3
0
 private DiaObject GetActor()
 {
     var trinActor = ActorFinder.FindActor(_actorId, _markerHash);
     var actor = trinActor != null
         ? ZetaDia.Actors.GetActorByACDId(trinActor.AcdId)
         : ActorFinder.FindObject(_actorId);
     return actor;
 }
Exemplo n.º 4
0
        private bool Checking()
        {
            var actor = ActorFinder.FindObject(_actorId);

            if (actor == null)
            {
                Logger.Debug("[Interaction] Nothing to interact, failing. ");
                State = States.Failed;
                return(false);
            }
            if (!actor.IsInteractableQuestObject())
            {
                Logger.Debug("[Interaction] The object is not valid or not interactable, failing.");
                State = States.Failed;
                return(false);
            }
            if (actor is DiaGizmo)
            {
                var gizmoActor = (DiaGizmo)actor;
                if (gizmoActor.IsDestructibleObject)
                {
                }
            }

            if (actor is DiaGizmo && (actor as DiaGizmo).IsPortal)
            {
                _isPortal = true;
            }
            if (actor.ActorSnoId == 364715)
            {
                _isNephalemStone = true;
            }
            if (actor.ActorSnoId == 363744)
            {
                _isOrek = true;
            }
            if (_isNephalemStone && UIElements.RiftDialog.IsVisible)
            {
                State = States.Completed;
                return(false);
            }
            if (_isOrek && AdvDia.RiftQuest.State == QuestState.Completed)
            {
                State = States.Completed;
                return(false);
            }
            State = States.Interacting;
            return(false);
        }
Exemplo n.º 5
0
        private async Task <bool> Checking()
        {
            _actor       = ActorFinder.FindObject(_actorId);
            _attackSkill = SkillHelper.DefaultWeaponPower;
            _attackRange = SkillHelper.DefaultWeaponDistance;

            if (_actor == null)
            {
                Logger.Info("[AttackCoroutine] Actor not found with id: {0}", _actorId);
                State = States.Completed;
                return(false);
            }

            if (_actor.Distance > _attackRange)
            {
                State = States.Moving;
                return(false);
            }

            State = States.Attacking;
            return(false);
        }
Exemplo n.º 6
0
        private async Task <bool> Interacting()
        {
            if (ZetaDia.Me.IsFullyValid() && (ZetaDia.Me.CommonData.AnimationState == AnimationState.Casting || ZetaDia.Me.CommonData.AnimationState == AnimationState.Channeling))
            {
                Logger.Debug("[Interaction] Waiting for the cast to end");
                await Coroutine.Sleep(500);

                return(false);
            }

            var actor = ActorFinder.FindObject(_actorId);

            if (actor == null)
            {
                Logger.Debug("[Interaction] Nothing to interact, failing. ");
                State = States.Failed;
                return(false);
            }
            // Assume done
            if (!actor.IsInteractableQuestObject())
            {
                State = States.Completed;
                return(false);
            }
            if (_currentInteractAttempt > _interactAttempts)
            {
                State = States.Completed;
                return(true);
            }

            if (_timeoutCheckEnabled)
            {
                if (_interactionStartedAt == default(DateTime))
                {
                    _interactionStartedAt = DateTime.UtcNow;
                }
                else
                {
                    if (DateTime.UtcNow - _interactionStartedAt > _timeOut)
                    {
                        Logger.Debug("[Interaction] Interaction timed out after {0} seconds", (DateTime.UtcNow - _interactionStartedAt).TotalSeconds);
                        State = States.TimedOut;
                        return(false);
                    }
                }
            }

            if (await Interact(actor))
            {
                if (_currentInteractAttempt < _interactAttempts)
                {
                    _currentInteractAttempt++;
                    return(false);
                }
                if (!_isPortal && !_isNephalemStone && !_isOrek && actor.IsInteractableQuestObject())
                {
                    return(false);
                }
                if (_isNephalemStone && !UIElements.RiftDialog.IsVisible)
                {
                    return(false);
                }
                if (_isOrek && AdvDia.RiftQuest.State != QuestState.Completed)
                {
                    return(false);
                }
                State = States.Completed;
            }
            return(false);
        }