示例#1
0
        public override void Initialize()
        {
            Priority = SkillPriority.Medium;
            Range    = 60;
            PreCast  = new SkillPreCast(SkillPrecastFlags.CheckCanCast | SkillPrecastFlags.CheckPlayerIncapacitated);

            ClusterConditions.Add(new SkillClusterConditions(4d, Range, 3, false, useRadiusDistance: true));

            var IntersectingUnitTargetConditions =
                new UnitTargetConditions
            {
                TrueConditionFlags = TargetProperties.None,
                MaximumDistance    = Range,
                Criteria           = (unit) => unit.TargetInfo.IntersectingUnits > 2
            };

            SingleUnitCondition.Add(IntersectingUnitTargetConditions);
            SingleUnitCondition.Add(new UnitTargetConditions(TargetProperties.None, Range, falseConditionalFlags: TargetProperties.Normal));
            SingleUnitCondition.Add(new UnitTargetConditions(TargetProperties.Summoner, Range, falseConditionalFlags: TargetProperties.LowHealth));
            SingleUnitCondition.Add(new UnitTargetConditions(TargetProperties.AvoidanceSummoner, Range, falseConditionalFlags: TargetProperties.LowHealth));
            SingleUnitCondition.Add(new UnitTargetConditions(TargetProperties.Debuffing, Range, falseConditionalFlags: TargetProperties.LowHealth));

            FCombatMovement = v =>
            {
                float fDistanceFromTarget = FunkyGame.Hero.Position.Distance(v);
                if (FunkyBaseExtension.Settings.General.OutOfCombatMovement && !FunkyGame.Hero.Class.bWaitingForSpecial && FunkyBaseExtension.Difference(FunkyGame.Hero.Position.Z, v.Z) <= 4 && fDistanceFromTarget >= 20f)
                {
                    if (fDistanceFromTarget > Range)
                    {
                        return(MathEx.CalculatePointFrom(v, FunkyGame.Hero.Position, Range));
                    }
                    return(v);
                }

                return(Vector3.Zero);
            };
            FOutOfCombatMovement = v =>
            {
                float fDistanceFromTarget = FunkyGame.Hero.Position.Distance(v);
                if (FunkyBaseExtension.Difference(FunkyGame.Hero.Position.Z, v.Z) <= 4 && fDistanceFromTarget >= 20f)
                {
                    if (fDistanceFromTarget > Range)
                    {
                        return(MathEx.CalculatePointFrom(v, FunkyGame.Hero.Position, Range));
                    }
                    return(v);
                }

                return(Vector3.Zero);
            };
        }
示例#2
0
        public override void Initialize()
        {
            WaitVars = new WaitLoops(1, 1, true);
            Range    = 48;


            Priority = SkillPriority.High;
            PreCast  = new SkillPreCast((SkillPrecastFlags.CheckPlayerIncapacitated | SkillPrecastFlags.CheckCanCast));

            ClusterConditions.Add(new SkillClusterConditions(5d, 48f, 2, false, minDistance: 15f));

            FcriteriaCombat = (u) =>
            {
                return((FunkyBaseExtension.Settings.Wizard.bTeleportFleeWhenLowHP &&
                        (FunkyGame.Hero.dCurrentHealthPct < 0.5d) ||
                        (FunkyGame.Targeting.Cache.RequiresAvoidance))
                       ||
                       (FunkyBaseExtension.Settings.Wizard.bTeleportIntoGrouping && LastConditionPassed == ConditionCriteraTypes.Cluster)
                       ||
                       (!FunkyBaseExtension.Settings.Wizard.bTeleportFleeWhenLowHP && !FunkyBaseExtension.Settings.Wizard.bTeleportIntoGrouping));
            };
            FCombatMovement = v =>
            {
                float fDistanceFromTarget = FunkyGame.Hero.Position.Distance(v);
                if (!FunkyGame.Hero.Class.bWaitingForSpecial && FunkyBaseExtension.Difference(FunkyGame.Hero.Position.Z, v.Z) <= 4 && fDistanceFromTarget >= 25f)
                {
                    if (fDistanceFromTarget > 50f)
                    {
                        return(MathEx.CalculatePointFrom(v, FunkyGame.Hero.Position, 50f));
                    }
                    return(v);
                }

                return(Vector3.Zero);
            };
            FOutOfCombatMovement = v =>
            {
                float fDistanceFromTarget = FunkyGame.Hero.Position.Distance(v);
                if (FunkyBaseExtension.Difference(FunkyGame.Hero.Position.Z, v.Z) <= 4 && fDistanceFromTarget >= 20f)
                {
                    if (fDistanceFromTarget > 50f)
                    {
                        return(MathEx.CalculatePointFrom(v, FunkyGame.Hero.Position, 50f));
                    }
                    return(v);
                }

                return(Vector3.Zero);
            };
        }
示例#3
0
        public override void Initialize()
        {
            WaitVars = new WaitLoops(0, 1, true);
            Cost     = 15;
            Range    = 50;


            Priority = SkillPriority.High;
            PreCast  = new SkillPreCast((SkillPrecastFlags.CheckPlayerIncapacitated | SkillPrecastFlags.CheckCanCast |
                                         SkillPrecastFlags.CheckEnergy));
            ClusterConditions.Add(new SkillClusterConditions(5d, 48f, 2, false));
            //TestCustomCombatConditionAlways=true,
            FcriteriaCombat = (u) => ((FunkyBaseExtension.Settings.Wizard.bTeleportFleeWhenLowHP && FunkyGame.Hero.dCurrentHealthPct < 0.5d)
                                      ||
                                      (FunkyBaseExtension.Settings.Wizard.bTeleportIntoGrouping &&
                                       FunkyGame.Targeting.Cache.Clusters.AbilityClusterCache(combatClusterCondition).Count > 0 &&
                                       FunkyGame.Targeting.Cache.Clusters.AbilityClusterCache(combatClusterCondition)[0].Midpoint.Distance(FunkyGame.Hero.Position) > 15f) ||
                                      (!FunkyBaseExtension.Settings.Wizard.bTeleportFleeWhenLowHP && !FunkyBaseExtension.Settings.Wizard.bTeleportIntoGrouping));
            FCombatMovement = v =>
            {
                float fDistanceFromTarget = FunkyGame.Hero.Position.Distance(v);
                if (!FunkyGame.Hero.Class.bWaitingForSpecial && FunkyBaseExtension.Difference(FunkyGame.Hero.Position.Z, v.Z) <= 4 && fDistanceFromTarget >= 25f)
                {
                    if (fDistanceFromTarget > 50f)
                    {
                        return(MathEx.CalculatePointFrom(v, FunkyGame.Hero.Position, 50f));
                    }
                    return(v);
                }

                return(Vector3.Zero);
            };
            FOutOfCombatMovement = v =>
            {
                float fDistanceFromTarget = FunkyGame.Hero.Position.Distance(v);
                if (FunkyBaseExtension.Difference(FunkyGame.Hero.Position.Z, v.Z) <= 4 && fDistanceFromTarget >= 10f)
                {
                    if (fDistanceFromTarget > 50f)
                    {
                        return(MathEx.CalculatePointFrom(v, FunkyGame.Hero.Position, 50f));
                    }
                    return(v);
                }

                return(Vector3.Zero);
            };
        }
示例#4
0
        public override void Initialize()
        {
            WaitVars = new WaitLoops(0, 0, true);

            Priority = SkillPriority.High;
            PreCast  = new SkillPreCast((SkillPrecastFlags.CheckCanCast));

            if (Equipment.CheckLegendaryItemCount(LegendaryItemTypes.RaimentoftheJadeHarvester, 6))
            {
                IsSpecialMovementSkill = true;
            }

            //IsSpecialMovementSkill = true;
            //IsBuff=true;
            //FcriteriaBuff=() => FunkyBaseExtension.Settings.General.OutOfCombatMovement;

            //Use buff at location (no prediction required!)
            FOutOfCombatMovement = (v) => v;

            FCombatMovement = (v) =>
            {
                float fDistanceFromTarget = FunkyGame.Hero.Position.Distance(v);
                if (!FunkyGame.Hero.Class.bWaitingForSpecial && FunkyBaseExtension.Difference(FunkyGame.Hero.Position.Z, v.Z) <= 4 && fDistanceFromTarget >= 20f)
                {
                    if (fDistanceFromTarget > 35f)
                    {
                        return(MathEx.CalculatePointFrom(v, FunkyGame.Hero.Position, 35f));
                    }
                    else
                    {
                        return(v);
                    }
                }

                return(Vector3.Zero);
            };

            Range = 6;
            ClusterConditions.Add(new SkillClusterConditions(7d, 30f, 4, false, 0, ClusterProperties.None, 10f, true));
            FcriteriaCombat = (u) => ((LastConditionPassed == ConditionCriteraTypes.Cluster) ||
                                      (FunkyGame.Hero.dCurrentHealthPct <= 0.35d) ||
                                      (RuneIndex == 3 && FunkyGame.Hero.dCurrentEnergyPct < 0.25d) ||
                                      (FunkyGame.Targeting.Cache.Environment.FleeTriggeringUnits.Count > 0) ||
                                      (FunkyGame.Targeting.Cache.Environment.TriggeringAvoidances.Count > 0) ||
                                      (FunkyGame.Hero.bIsIncapacitated || FunkyGame.Hero.bIsRooted));
        }
示例#5
0
        public override void Initialize()
        {
            Range    = 45;
            Cost     = 25;
            Priority = SkillPriority.High;
            PreCast  = new SkillPreCast(SkillPrecastFlags.CheckCanCast);

            ClusterConditions.Add(new SkillClusterConditions(5d, 45, 6, true));
            SingleUnitCondition.Add(new UnitTargetConditions(TargetProperties.None, maxdistance: 45, MinimumHealthPercent: 0.95d, falseConditionalFlags: TargetProperties.Normal));

            FCombatMovement = (v) =>
            {
                float fDistanceFromTarget = FunkyGame.Hero.Position.Distance(v);
                if (!FunkyGame.Hero.Class.bWaitingForSpecial && FunkyBaseExtension.Difference(FunkyGame.Hero.Position.Z, v.Z) <= 4 && fDistanceFromTarget >= 20f)
                {
                    if (fDistanceFromTarget > 45f)
                    {
                        return(MathEx.CalculatePointFrom(v, FunkyGame.Hero.Position, 45f));
                    }
                    else
                    {
                        return(v);
                    }
                }

                return(Vector3.Zero);
            };
            FOutOfCombatMovement = (v) =>
            {
                float fDistanceFromTarget = FunkyGame.Hero.Position.Distance(v);
                if (FunkyBaseExtension.Difference(FunkyGame.Hero.Position.Z, v.Z) <= 4 && fDistanceFromTarget >= 20f)
                {
                    if (fDistanceFromTarget > 45f)
                    {
                        return(MathEx.CalculatePointFrom(v, FunkyGame.Hero.Position, 45f));
                    }
                    else
                    {
                        return(v);
                    }
                }

                return(Vector3.Zero);
            };
        }
示例#6
0
文件: Leap.cs 项目: herbfunk/Funky
        public override void Initialize()
        {
            Range    = 45;
            Priority = SkillPriority.Medium;
            PreCast  = new SkillPreCast(SkillPrecastFlags.CheckPlayerIncapacitated | SkillPrecastFlags.CheckCanCast);

            ClusterConditions.Add(new SkillClusterConditions(6d, Range, 2, true, useRadiusDistance: true));
            SingleUnitCondition.Add(new UnitTargetConditions(TargetProperties.None, falseConditionalFlags: TargetProperties.Normal));
            SingleUnitCondition.Add(new UnitTargetConditions(TargetProperties.None, falseConditionalFlags: TargetProperties.LowHealth));

            FCombatMovement = (v) =>
            {
                float fDistanceFromTarget = FunkyGame.Hero.Position.Distance(v);
                if (!FunkyGame.Hero.Class.bWaitingForSpecial && FunkyBaseExtension.Difference(FunkyGame.Hero.Position.Z, v.Z) <= 4 && fDistanceFromTarget >= 20f)
                {
                    if (fDistanceFromTarget > Range)
                    {
                        return(MathEx.CalculatePointFrom(v, FunkyGame.Hero.Position, Range));
                    }
                    else
                    {
                        return(v);
                    }
                }

                return(Vector3.Zero);
            };
            FOutOfCombatMovement = (v) =>
            {
                float fDistanceFromTarget = FunkyGame.Hero.Position.Distance(v);
                if (FunkyBaseExtension.Difference(FunkyGame.Hero.Position.Z, v.Z) <= 4 && fDistanceFromTarget >= 20f)
                {
                    if (fDistanceFromTarget > Range)
                    {
                        return(MathEx.CalculatePointFrom(v, FunkyGame.Hero.Position, Range));
                    }
                    else
                    {
                        return(v);
                    }
                }

                return(Vector3.Zero);
            };
        }
示例#7
0
        public override void Initialize()
        {
            Range    = 5;
            Cost     = 10;
            Priority = SkillPriority.High;
            PreCast  = new SkillPreCast((SkillPrecastFlags.CheckCanCast));

            //We want to preform zig-zag movements when using rune Ramming Speed or Nightmare
            if (RuneIndex == 0 || RuneIndex == 4)
            {
                IsSpecialMovementSkill = true;
            }

            //return location (no prediction required!)
            FOutOfCombatMovement = (v) => v;

            FCombatMovement = (v) =>
            {
                float fDistanceFromTarget = FunkyGame.Hero.Position.Distance(v);
                if (!FunkyGame.Hero.Class.bWaitingForSpecial && FunkyBaseExtension.Difference(FunkyGame.Hero.Position.Z, v.Z) <= 4 && fDistanceFromTarget >= 5f)
                {
                    if (fDistanceFromTarget > 45f)
                    {
                        return(MathEx.CalculatePointFrom(v, FunkyGame.Hero.Position, 45f));
                    }
                    else
                    {
                        return(v);
                    }
                }

                return(Vector3.Zero);
            };

            ClusterConditions.Add(new SkillClusterConditions(5d, 50, 7, true));
            SingleUnitCondition.Add(new UnitTargetConditions(TargetProperties.None, maxdistance: 35, MinimumHealthPercent: 0.95d, falseConditionalFlags: TargetProperties.Normal));

            //Reduced cool down.. lets use it more!
            if (Hotbar.PassivePowers.Contains(SNOPower.X1_Crusader_Passive_LordCommander))
            {
                SingleUnitCondition.Add(new UnitTargetConditions(TargetProperties.None, maxdistance: 50, MinimumHealthPercent: 0d, falseConditionalFlags: TargetProperties.Weak));
            }
        }
示例#8
0
文件: Vault.cs 项目: herbfunk/Funky
        public override void Initialize()
        {
            Cooldown = 400;

            WaitVars        = new WaitLoops(1, 2, true);
            Cost            = 8;
            SecondaryEnergy = true;
            Range           = 20;

            Priority = SkillPriority.Medium;

            PreCast = new SkillPreCast((SkillPrecastFlags.CheckPlayerIncapacitated | SkillPrecastFlags.CheckCanCast |
                                        SkillPrecastFlags.CheckEnergy | SkillPrecastFlags.CheckRecastTimer));
            //SingleUnitCondition.Add(new UnitTargetConditions(TargetProperties.None, 10);
            //UnitsWithinRangeConditions=new Tuple<RangeIntervals, int>(RangeIntervals.Range_6, 1);

            FCombatMovement = v =>
            {
                float fDistanceFromTarget = FunkyGame.Hero.Position.Distance(v);
                if (!FunkyGame.Hero.Class.bWaitingForSpecial && FunkyBaseExtension.Difference(FunkyGame.Hero.Position.Z, v.Z) <= 4 && fDistanceFromTarget >= 18f &&
                    (LastUsedMilliseconds >= FunkyBaseExtension.Settings.DemonHunter.iDHVaultMovementDelay))
                {
                    return(MathEx.CalculatePointFrom(v, FunkyGame.Hero.Position, Math.Max(fDistanceFromTarget, 35f)));
                }

                return(Vector3.Zero);
            };
            FOutOfCombatMovement = v =>
            {
                float fDistanceFromTarget = FunkyGame.Hero.Position.Distance(v);
                if (FunkyBaseExtension.Difference(FunkyGame.Hero.Position.Z, v.Z) <= 4 && fDistanceFromTarget >= 18f &&
                    (LastUsedMilliseconds >= FunkyBaseExtension.Settings.DemonHunter.iDHVaultMovementDelay))
                {
                    return(MathEx.CalculatePointFrom(v, FunkyGame.Hero.Position, Math.Max(fDistanceFromTarget, 35f)));
                }

                return(Vector3.Zero);
            };
        }
示例#9
0
        public override void Initialize()
        {
            Range    = 40;
            Priority = SkillPriority.Medium;
            PreCast  = new SkillPreCast(SkillPrecastFlags.CheckCanCast | SkillPrecastFlags.CheckPlayerIncapacitated | SkillPrecastFlags.CheckRecastTimer);
            SingleUnitCondition.Add(new UnitTargetConditions(TargetProperties.Ranged, mindistance: 30));
            SingleUnitCondition.Add(new UnitTargetConditions(TargetProperties.None, mindistance: 30, falseConditionalFlags: TargetProperties.Normal));

            if (Equipment.CheckLegendaryItemCount(LegendaryItemTypes.Jawbreaker))
            {
                SingleUnitCondition.Add(new UnitTargetConditions(TargetProperties.None, mindistance: 35));
                ClusterConditions.Add(new SkillClusterConditions(7d, 50f, 1, true, 0, ClusterProperties.None, 35f, false));
            }

            //Rainments of Thousand Storms Full Set Bonus (Explosion of lightning)
            if (Equipment.CheckLegendaryItemCount(LegendaryItemTypes.RaimentofaThousandStorms, 6))
            {
                //Boss!
                SingleUnitCondition.Add(new UnitTargetConditions(TargetProperties.Boss, MinimumHealthPercent: 0.95d));
                //Clusters that are at least 15 yards away
                ClusterConditions.Add(new SkillClusterConditions(6d, 40f, 7, true));
                //Clusters of Non-Normal Units
                ClusterConditions.Add(new SkillClusterConditions(6d, 40f, 2, true, clusterflags: ClusterProperties.Elites));
            }

            //Sunwoko CDR Build
            if (Equipment.CheckLegendaryItemCount(LegendaryItemTypes.MonkeyKingsGarb, 4) && RuneIndex == 4)
            {
                ExecutionType = SkillExecutionFlags.Location | SkillExecutionFlags.ClusterLocationNearest;
                Cooldown      = 4000;

                SingleUnitCondition.Add(new UnitTargetConditions(TargetProperties.None));
            }

            FCombatMovement = (v) =>
            {
                float fDistanceFromTarget = FunkyGame.Hero.Position.Distance(v);
                if (FunkyBaseExtension.Difference(FunkyGame.Hero.Position.Z, v.Z) <= 4)
                {
                    if (fDistanceFromTarget > 50f)
                    {
                        return(MathEx.CalculatePointFrom(v, FunkyGame.Hero.Position, 50f));
                    }

                    return(v);
                }

                return(Vector3.Zero);
            };
            FOutOfCombatMovement = (v) =>
            {
                float fDistanceFromTarget = FunkyGame.Hero.Position.Distance(v);
                if (FunkyBaseExtension.Difference(FunkyGame.Hero.Position.Z, v.Z) <= 4 && fDistanceFromTarget >= 20f)
                {
                    if (fDistanceFromTarget > 50f)
                    {
                        return(MathEx.CalculatePointFrom(v, FunkyGame.Hero.Position, 50f));
                    }
                    else
                    {
                        return(v);
                    }
                }

                return(Vector3.Zero);
            };
        }
示例#10
0
        ///<summary>
        ///Runs raycasting and intersection tests to validate LOS.
        ///</summary>
        public bool LOSTest(Vector3 PositionToTestFrom, Vector3 objposition, bool NavRayCast = true, bool searchGridRayCast = false, bool ServerObjectIntersection = true, NavCellFlags Flags = NavCellFlags.None, bool ContinueOnFailures = true)
        {
            LastLOSCheck = DateTime.Now;
            bool Failed = false;


            if (NavRayCast)
            {              //This is a basic raycast test to see if we have clear view of the object.
                if (PositionToTestFrom.Z > objposition.Z)
                {
                    RayCast = Navigation.Navigation.CanRayCast(PositionToTestFrom, objposition);
                }
                else
                {
                    RayCast = Navigation.Navigation.CanRayCast(objposition, PositionToTestFrom);
                }

                if (!RayCast.Value)
                {
                    Failed = true;
                    if (!ContinueOnFailures)
                    {
                        return(false);
                    }
                }
            }

            if (searchGridRayCast)
            {
                Vector2 hitpos;

                //Must check the Z difference.. (so we don't get false-positive result)
                if (PositionToTestFrom.Z > objposition.Z)
                {
                    SearchGridRayCast = !Navigator.SearchGridProvider.Raycast(PositionToTestFrom.ToVector2(), objposition.ToVector2(), out hitpos);
                }
                else
                {
                    SearchGridRayCast = !Navigator.SearchGridProvider.Raycast(objposition.ToVector2(), PositionToTestFrom.ToVector2(), out hitpos);
                }

                if (!SearchGridRayCast.Value)
                {
                    Failed = true;
                    if (!ContinueOnFailures)
                    {
                        return(false);
                    }
                }
            }

            if (ServerObjectIntersection)
            {              //This test uses the obstacle cache to check objects for intersection
                if (FunkyBaseExtension.Difference(FunkyGame.Hero.Position.Z, objposition.Z) > 1f)
                {
                    //Get actual height using MGP
                    objposition.Z = Navigation.Navigation.MGP.GetHeight(objposition.ToVector2());
                }

                ObjectIntersection = ObjectCache.Obstacles.Values.OfType <CacheServerObject>()
                                     .Any(obstacle =>
                                          obstacle.RAGUID != Obj.RAGUID &&
                                          obstacle.Obstacletype.HasValue &&
                                          obstacle.Obstacletype.Value == ObstacleType.ServerObject &&
                                          obstacle.TestIntersection(PositionToTestFrom, objposition, false));

                if (!Failed && ObjectIntersection.Value)
                {
                    Failed = true;
                    if (!ContinueOnFailures)
                    {
                        return(false);
                    }
                }
            }


            if (!Flags.Equals(NavCellFlags.None))
            {              //Raycast test to validate it can preform the path -- walk/projectile
                bool NavTest = Navigation.Navigation.CanRayCast(PositionToTestFrom, objposition, Flags);

                if (Flags.HasFlag(NavCellFlags.AllowWalk))
                {
                    NavCellWalk = NavTest;
                }
                if (Flags.HasFlag(NavCellFlags.AllowProjectile))
                {
                    NavCellProjectile = NavTest;
                }
                if (!Failed && !NavTest)
                {
                    Failed = true;
                }
            }

            //this.LastVectorTested=PositionToTestFrom;
            return(!Failed);
        }