public static void SetupAbilityForUse(ref Skill ability, CacheObject obj, bool Destructible = false)
{
ability.MinimumRange = ability.Range;
ability.TargetPosition_ = Vector3.Zero;
ability._targetAcdguid = -1;
ability.WaitLoopsBefore_ = ability.WaitVars.PreLoops;
ability.WaitLoopsAfter_ = ability.WaitVars.PostLoops;
ability.CanCastFlags = PowerManager.CanCastFlags.None;
ability.SuccessUsed_ = null;
ability.Target_ = null;
ability.preActivationFinished = false;
ability.ActivationFinished = false;
ability.postActivationFinished = false;
//Destructible Setup
if (Destructible)
{
if (!ability.IsRanged)
ability.MinimumRange = 8f;
else
ability.MinimumRange = 30f;
bool LocationalAttack = (CacheIDLookup.hashDestructableLocationTarget.Contains(obj.SNOID)
|| DateTime.Now.Subtract(PowerCacheLookup.dictAbilityLastFailed[ability.Power]).TotalMilliseconds < 1000);
if (LocationalAttack)
{
Vector3 attacklocation = obj.Position;
if (!ability.IsRanged)
{
//attacklocation=MathEx.CalculatePointFrom(FunkyGame.Hero.Class_.Data.Position,Bot.Target.CurrentTarget.Position, 0.25f);
attacklocation = MathEx.GetPointAt(FunkyGame.Hero.Position, 0.50f, Navigation.Navigation.FindDirection(FunkyGame.Hero.Position, obj.Position, true));
}
else
{
attacklocation = MathEx.GetPointAt(obj.Position, 1f, Navigation.Navigation.FindDirection(obj.Position, FunkyGame.Hero.Position, true));
}
attacklocation.Z = Navigation.Navigation.MGP.GetHeight(attacklocation.ToVector2());
ability.TargetPosition = attacklocation;
}
else
{
if (obj.AcdGuid.HasValue)
ability.TargetACDGUID = obj.AcdGuid.Value;
}
return;
}
if (ability.LastConditionPassed == ConditionCriteraTypes.Cluster)
{
CacheUnit ClusterUnit;
//Cluster Target -- Aims for Centeroid Unit
if (ObjectCache.CheckFlag(ability.ExecutionType, SkillExecutionFlags.ClusterTarget) && CheckClusterConditions(ability.LastClusterConditionSuccessful)) //Cluster ACDGUID
{
ClusterUnit = FunkyGame.Targeting.Cache.Clusters.AbilityClusterCache(ability.LastClusterConditionSuccessful)[0].GetNearestUnitToCenteroid();
if (ClusterUnit.AcdGuid.HasValue)
ability.TargetACDGUID = ClusterUnit.AcdGuid.Value;
ability.Target_ = ClusterUnit;
return;
}
//Cluster Location -- Aims for Center of Cluster
if (ObjectCache.CheckFlag(ability.ExecutionType, SkillExecutionFlags.ClusterLocation) && CheckClusterConditions(ability.LastClusterConditionSuccessful)) //Cluster Target Position
{
ability.TargetPosition = (Vector3)FunkyGame.Targeting.Cache.Clusters.AbilityClusterCache(ability.LastClusterConditionSuccessful)[0].Midpoint;
return;
}
//Cluster Location Nearest
if (ObjectCache.CheckFlag(ability.ExecutionType, SkillExecutionFlags.ClusterLocationNearest) && CheckClusterConditions(ability.LastClusterConditionSuccessful)) //Cluster Target Position
{
ability.TargetPosition = FunkyGame.Targeting.Cache.Clusters.AbilityClusterCache(ability.LastClusterConditionSuccessful)[0].ListUnits[0].Position;
return;
}
//Cluster Target Nearest -- Gets nearest unit in cluster as target.
if (ObjectCache.CheckFlag(ability.ExecutionType, SkillExecutionFlags.ClusterTargetNearest) && CheckClusterConditions(ability.LastClusterConditionSuccessful)) //Cluster Target Position
{
ClusterUnit = FunkyGame.Targeting.Cache.Clusters.AbilityClusterCache(ability.LastClusterConditionSuccessful)[0].ListUnits[0];
if (ClusterUnit.AcdGuid.HasValue)
ability.TargetACDGUID = ClusterUnit.AcdGuid.Value;
ability.Target_ = ClusterUnit;
return;
}
}
if (ObjectCache.CheckFlag(ability.ExecutionType, SkillExecutionFlags.Location)) //Current Target Position
{
ability.TargetPosition = obj.Position;
ability.Target_ = (CacheUnit)obj;
}
else if (ObjectCache.CheckFlag(ability.ExecutionType, SkillExecutionFlags.Self)) //Current Bot Position
ability.TargetPosition = FunkyGame.Hero.Position;
else if (ObjectCache.CheckFlag(ability.ExecutionType, SkillExecutionFlags.ZigZagPathing)) //Zig-Zag Pathing
{
FunkyGame.Navigation.vPositionLastZigZagCheck = FunkyGame.Hero.Position;
if (FunkyGame.Hero.Class.ShouldGenerateNewZigZagPath()) FunkyGame.Hero.Class.GenerateNewZigZagPath();
ability.TargetPosition = FunkyGame.Navigation.vSideToSideTarget;
}
else if (ObjectCache.CheckFlag(ability.ExecutionType, SkillExecutionFlags.Target)) //Current Target ACDGUID
{
if (obj is CacheUnit)
ability.Target_ = (CacheUnit)obj;
if (obj.AcdGuid.HasValue)
ability.TargetACDGUID = obj.AcdGuid.Value;
}
}