What's new
  • Visit Rebornbuddy
  • Visit Resources
  • Visit API Documentation
  • Visit Downloads
  • Visit Portal
  • Visit Panda Profiles
  • Visit LLamamMagic

OculusBuff code......

agraellee

Member
Joined
May 31, 2016
Messages
43
Reaction score
17
获取神木指环(核眼)buff的代码如下:(Get OculusBuff code is as follows:)
[HIDE]
Code:
        /// <summary>
        /// 得到距离目标位置position最大范围maxRange与最小范围minRange中的核眼地板,根据asc为true返回最近的,false返回最远的。
        /// </summary>
        /// <param name="position">目标位置。</param>
        /// <param name="minRange">最小范围。</param>
        /// <param name="maxRange">最大范围。</param>
        /// <param name="asc">为true返回最近的,false返回最远的</param>
        /// <returns>核眼的Dia对象,如果没有返回null。</returns>
        internal static DiaObject GetOculusBuffDiaObject(Vector3 position, float minRange = 1, float maxRange = 60f, bool asc = false)
        {
            if (!Environment.checkPermission())
            {
                if (Environment.permissionLog)
                {
                    Logger.Log(Environment.NO_PERMISSION_MSG + "不能获取核眼Buff位置。");
                }
                return null;
            }
            var objects = asc ? ZetaDia.Actors.GetActorsOfType<DiaObject>()
                           .Where(o => (o.ActorSnoId == 433966) && position.Distance(o.Position) >= minRange && position.Distance(o.Position) <= maxRange)
                           .OrderBy(o => position.Distance(o.Position)) : ZetaDia.Actors.GetActorsOfType<DiaObject>()
                           .Where(o => o.ActorSnoId == 433966 && position.Distance(o.Position) >= minRange && position.Distance(o.Position) <= maxRange)
                           .OrderByDescending(o => position.Distance(o.Position));

            foreach (DiaObject o in objects)
            {
                if (o == null || !o.IsValid)
                {
                    continue;
                }
                return o;
            }
            return null;
        }
[/HIDE]
 
Last edited:
That will return occulus circle DiaObjects within a specified range.

Occulus hasnt been supported by all the classes yet in Trinity, only DH.

But here's the code to move into it when it makes sense, from CombatBase.cs

Code:
        /// <summary>
        /// Walk towards a location with positional bonuses e.g. occulus damage bonus / serenity defensive bonus.
        /// </summary>
        /// <param name="power">Trinity power configured to move player towards a buffed position</param>
        /// <param name="maxDistance">maximum distance spot can be from player's current position</param>
        /// <param name="arriveDistance">how close to get to the middle of the spot before stopping walking</param>
        /// <returns>if a location was found and should be moved to</returns>
        public static bool TryMoveToBuffedSpot(out TrinityPower power, float maxDistance, float arriveDistance = 20f)
        {
            if (IsInCombat && !IsCurrentlyKiting && !IsCurrentlyAvoiding)
            {
                Vector3 buffedLocation;
                if (PhelonUtils.BestBuffPosition(maxDistance, Player.Position, true, out buffedLocation))
                {
                    var lastPower = SpellHistory.LastPower;
                    var distance = buffedLocation.Distance(Player.Position);


                    Logger.LogVerbose(LogCategory.Routine, $"Buffed location found Dist={distance}");


                    if (buffedLocation.Distance(Player.Position) < arriveDistance)
                    {
                        Logger.Log(LogCategory.Routine, $"Standing in Buffed Position {buffedLocation} Dist={distance}");
                    }
                    else if (!Core.Avoidance.Grid.CanRayWalk(Player.Position, buffedLocation))
                    {
                        Logger.Log(LogCategory.Routine, $"Unable to straight-line path to Buffed Position {buffedLocation} Dist={distance}");
                    }
                    else if (!Core.Avoidance.Grid.CanRayWalk(CurrentTarget.Position, buffedLocation))
                    {
                        Logger.Log(LogCategory.Routine, $"Can't see target from buffed position {buffedLocation} Dist={distance}");
                    }
                    else if (Core.Avoidance.Avoider.IsKiteOnCooldown)
                    {
                        Logger.Log(LogCategory.Routine, $"Not moving to buffed location while on kite cooldown");
                    }
                    else if (lastPower != null && buffedLocation.Distance(CurrentTarget.Position) > lastPower.MinimumRange + CurrentTarget.CollisionRadius + Player.Radius)
                    {
                        Logger.LogVerbose(LogCategory.Routine, $"Buffed spot outside attack range for power {lastPower.SNOPower} Range={lastPower.MinimumRange} TimeSinceUse={lastPower.TimeSinceUse} Dist={distance}");
                    }
                    else if (KiteDistance <= 0 || !TargetUtil.AnyMobsInRangeOfPosition(buffedLocation, KiteDistance))
                    {
                        Logger.LogVerbose(LogCategory.Routine, $"Moving to Buffed Position {buffedLocation} Dist={distance}");                       
                        power = new TrinityPower(SNOPower.Walk, maxDistance, buffedLocation);
                        return true;                       
                    }
                }
            }
            power = null;
            return false;
        }
 
Just add this to your GetPower() in WitchDoctorCombat.cs file:

Code:
//// Stand in occulus circles
                    if (TryMoveToBuffedSpot(out power, 20f, 20f, false) && !Player.IsChannelling)
                        return power;
 
Back
Top