fBaseXtensions.Behaviors.TownPortalBehavior.FunkyTPBehavior C# (CSharp) Method

FunkyTPBehavior() public static method

public static FunkyTPBehavior ( object ret ) : RunStatus
ret object
return RunStatus
        public static RunStatus FunkyTPBehavior(object ret)
        {
            //Init
            if (!initizedTPBehavior)
            {
                InitTPBehavior();
                return RunStatus.Running;
            }

            double ElapsedTime = DateTime.Now.Subtract(FunkyTP_LastCastAttempt).TotalSeconds;

            //Check world transfer start
            if (worldtransferStarted)
            {
                if (ElapsedTime < 10 || worldChanged)
                {
                    //Logger.Write(LogLevel.OutOfCombat,"Waiting for world change!");

                    if (!FunkyGame.Hero.bIsInTown)
                        return RunStatus.Running;
                    Logger.Write(LogLevel.OutOfCombat, "Casting Behavior Finished, we are in town!", true);
                    ResetTPBehavior();
                    //UpdateSearchGridProvider(true);
                    return RunStatus.Success;
                }
                if (ElapsedTime >= 10 && !FunkyGame.Hero.bIsInTown)
                {
                    //Retry?
                    worldtransferStarted = false;
                    CastAttempted = false;
                    Vector3 UnstuckPos;
                    if (FunkyGame.Navigation.AttemptFindSafeSpot(out UnstuckPos, Vector3.Zero, FunkyBaseExtension.Settings.Plugin.AvoidanceFlags))
                    {
                        Logger.Write(LogLevel.OutOfCombat, "Generated Unstuck Position at {0}", UnstuckPos.ToString());
                        ZetaDia.Me.UsePower(SNOPower.Walk, UnstuckPos, FunkyGame.Hero.CurrentWorldDynamicID);
                    }

                }

                return RunStatus.Running;
            }

            //Precheck - Ingame, not dead..
            if (!TPActionIsValid())
            {
                ResetTPBehavior();
                return RunStatus.Success;
            }
            if (ZetaDia.IsLoadingWorld) //Loading.. we just wait!
                return RunStatus.Running;
            if (!CanCastTP()) //Not loading but is valid.. see if we can cast?
            {
                ResetTPBehavior();
                return RunStatus.Success;
            }

            //Set our flag which is used to setup the refreshing specific for this/similar behaviors.
            FunkyTPBehaviorFlag = true;

            //Handle Targeting..
            if (FunkyGame.Targeting.CheckHandleTarget() == RunStatus.Running)
                return RunStatus.Running;

            if (MovementOccured)
            {
                //Backtrack to orginal location...

                bool isMoving = false;
                try
                {
                    isMoving = ZetaDia.Me.Movement.IsMoving;
                }
                catch (NullReferenceException) { }

                //Use simple checking of movement, with UsePower on our last location.
                if (!isMoving)
                {
                    double DistanceFromStart = StartingPosition.Distance(FunkyGame.Hero.Position);

                    if (DistanceFromStart > 15f && DistanceFromStart < 50f)
                    {
                        //Logger.DBLog.InfoFormat("[FunkyTP] Backtracking!");
                        //Move back to starting position..
                        //ZetaDia.Me.UsePower(SNOPower.Walk, StartingPosition);
                        //return RunStatus.Running;
                    }
                    else if (DistanceFromStart >= 50f)
                    {
                        //Logger.DBLog.InfoFormat("[FunkyTP] Range from our starting position is {0}. Now using Navigator to move.", DistanceFromStart);
                        //Navigator.MoveTo(StartingPosition, "Backtracking to Orginal Position", true);
                    }
                }
                else
                    return RunStatus.Running;

                MovementOccured = false;
            }

            //Make sure we are not moving..
            if (FunkyGame.Hero.IsMoving)
                return RunStatus.Running;

            //Check if we are casting, if not cast, else if casting but time has elapsed then cancel cast.

            if (!CastingRecall())
            {
                //Check last time cast..
                if (ElapsedTime > 5 && CastAttempted)
                {
                    worldtransferStarted = true;
                    return RunStatus.Running;
                }
                if (ElapsedTime > 8 || !CastAttempted)
                {
                    //Recast
                    Logger.Write(LogLevel.OutOfCombat, "Casting TP..");
                    ZetaDia.Me.UseTownPortal();
                    CastAttempted = true;
                    FunkyTP_LastCastAttempt = DateTime.Now;
                }

                return RunStatus.Running;
            }
            if (ElapsedTime > 8)
            {
                //Void Cast?
                Logger.Write(LogLevel.OutOfCombat, "Attempting to void cast with movement..");
                Vector3 V3loc;
                bool success = FunkyGame.Navigation.AttemptFindSafeSpot(out V3loc, Vector3.Zero, FunkyBaseExtension.Settings.Plugin.AvoidanceFlags);
                if (success)
                {
                    Navigator.MoveTo(V3loc, "Void Cast Movement", false);
                }

                return RunStatus.Running;
            }

            return RunStatus.Running;
        }

Usage Example

Exemplo n.º 1
0
        ///<summary>
        ///Exiting Game Behavior
        ///</summary>
        internal static RunStatus Behavior()
        {
            //Run Town Portal Behavior..
            if (TownPortalBehavior.FunkyTPOverlord(null))
            {
                TownPortalBehavior.FunkyTPBehavior(null);
                return(RunStatus.Running);
            }

            //Loading World?
            if (ZetaDia.IsLoadingWorld)
            {
                return(RunStatus.Running);
            }

            //Exit Game..
            if (ZetaDia.IsInGame)
            {
                if (DateTime.Now.Subtract(_lastExitAttempt).TotalSeconds > 4)
                {
                    Logger.DBLog.InfoFormat("[Funky] Exiting game..");
                    ZetaDia.Service.Party.LeaveGame();
                    _lastExitAttempt = DateTime.Now;
                }
                return(RunStatus.Running);
            }

            return(RunStatus.Success);
        }