本文整理汇总了C#中LeagueSharp.Common.PredictionInput类的典型用法代码示例。如果您正苦于以下问题:C# PredictionInput类的具体用法?C# PredictionInput怎么用?C# PredictionInput使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
PredictionInput类属于LeagueSharp.Common命名空间,在下文中一共展示了PredictionInput类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: AnalyzeQ
public static bool AnalyzeQ(PredictionInput input, PredictionOutput output)
{
var posList = new List<Vector3> { ObjectManager.Player.ServerPosition, output.CastPosition };
var collision = Collision.GetCollision(posList, input);
var minions = collision.Count(collisionObj => collisionObj.IsMinion);
return minions > 1;
}
开发者ID:uio25371555,项目名称:ChewyMoonScripts,代码行数:7,代码来源:SpellCombo.cs
示例2: GetUpdatedPrediction
/// <summary>
/// The get updated prediction.
/// </summary>
/// <param name="input">
/// The input.
/// </param>
/// <returns>
/// The <see cref="PredictionOutput" />.
/// </returns>
internal static PredictionOutput GetUpdatedPrediction(PredictionInput input)
{
if (Math.Abs(input.Speed - float.MaxValue) < float.Epsilon)
{
input.Speed = 90000;
}
var toTarget = Vector3.Normalize(input.Unit.ServerPosition - input.From);
var targetVelocity = CalculateVelocity(
input.Unit.ServerPosition,
input.Unit.Path.LastOrDefault(),
input.Unit.MoveSpeed);
var a = Vector3.Dot(targetVelocity, targetVelocity) - (input.Speed * input.Speed);
var b = 2 * Vector3.Dot(targetVelocity, toTarget);
var c = Vector3.Dot(toTarget, toTarget);
var p = -b / (2 * a);
var q = (float)Math.Sqrt((b * b) - 4 * a * c) / (2 * a);
var theorem1 = p - q;
var theorem2 = p + q;
var t = (theorem1 > theorem2 && theorem2 > 0) ? theorem2 : theorem1;
var result = new PredictionOutput()
{
CastPosition = input.Unit.ServerPosition + targetVelocity * (t + input.Delay),
UnitPosition = input.Unit.ServerPosition, Hitchance = HitChance.VeryHigh
};
// Check if the unit position is in range
if (Math.Abs(input.Range - float.MaxValue) > float.Epsilon)
{
if (result.Hitchance >= HitChance.High
&& input.RangeCheckFrom.Distance(input.Unit.Position, true)
> Math.Pow(input.Range + input.Radius * 3 / 4, 2))
{
result.Hitchance = HitChance.Medium;
}
if (input.RangeCheckFrom.Distance(result.UnitPosition, true)
> Math.Pow(input.Range + (input.Type == SkillshotType.SkillshotCircle ? input.Radius : 0), 2))
{
result.Hitchance = HitChance.OutOfRange;
}
}
// Check for collision
if (input.Collision)
{
var positions = new List<Vector3> { result.UnitPosition, result.CastPosition, input.Unit.Position };
var originalUnit = input.Unit;
result.CollisionObjects = Collision.GetCollision(positions, input);
result.CollisionObjects.RemoveAll(x => x.NetworkId == originalUnit.NetworkId);
result.Hitchance = result.CollisionObjects.Count > 0 ? HitChance.Collision : result.Hitchance;
}
return result;
}
开发者ID:werdbrian,项目名称:AIO,代码行数:68,代码来源:MovementPrediction.cs
示例3: Game_OnGameLoad
static void Game_OnGameLoad(EventArgs args)
{
if(ObjectManager.Player.ChampionName != "Blitzcrank") return;
config = new Menu("AutoGrab", "grab", true);
Menu menuTS = new Menu("Selector: ", "targ");
SimpleTs.AddToMenu(menuTS);
config.AddSubMenu(menuTS);
config.AddItem(new MenuItem("grabem", "Pull While AA'ing")).SetValue(new KeyBind(32, KeyBindType.Press));
config.AddToMainMenu();
p = new PredictionInput {Delay = .25f, Radius = 35, Speed = 1800};
Game.OnGameProcessPacket += Game_OnGameProcessPacket;
}
开发者ID:blm95,项目名称:LeagueSharp2,代码行数:12,代码来源:Program.cs
示例4: CollisionCheckerino
static bool CollisionCheckerino(Obj_AI_Hero source, Obj_AI_Hero target, float width)
{
var input = new PredictionInput
{
Radius = width,
Unit = source,
};
input.CollisionObjects[0] = CollisionableObjects.Heroes;
input.CollisionObjects[1] = CollisionableObjects.YasuoWall;
return !Collision.GetCollision(new List<Vector3> { target.ServerPosition }, input).Where(x => x.NetworkId != x.NetworkId).Any();
}
开发者ID:47110572,项目名称:LeagueSharp-4,代码行数:13,代码来源:Program.cs
示例5: getCollisionMinions
internal static List<Obj_AI_Base> getCollisionMinions(Obj_AI_Hero source, SharpDX.Vector3 targetPos, float predDelay, float predWidth, float predSpeed)
{
var input = new PredictionInput
{
Unit = source,
Radius = predWidth,
Delay = predDelay,
Speed = predSpeed,
};
input.CollisionObjects[0] = CollisionableObjects.Minions;
return Collision.GetCollision(new List<SharpDX.Vector3> { targetPos }, input).OrderBy(obj => obj.Distance(source, false)).ToList();
}
开发者ID:47110572,项目名称:LeagueSharp-11,代码行数:14,代码来源:Func.cs
示例6: GetCollisionMinions
/// <summary>
/// Gets the list of minions currently between the source and target
/// </summary>
/// <param name="source">
/// The Source
/// </param>
/// <param name="targetPosition">
/// The Target Position
/// </param>
/// <returns>
/// The <see cref="List" />.
/// </returns>
public static List<Obj_AI_Base> GetCollisionMinions(AIHeroClient source, Vector3 targetPosition)
{
var input = new PredictionInput
{
Unit = source,
Radius = SpellManager.Spell[SpellSlot.Q].Width,
Delay = SpellManager.Spell[SpellSlot.Q].Delay,
Speed = SpellManager.Spell[SpellSlot.Q].Speed,
CollisionObjects = new[] { CollisionableObjects.Minions }
};
return
Collision.GetCollision(new List<Vector3> { targetPosition }, input)
.OrderBy(x => x.Distance(source))
.ToList();
}
开发者ID:Xelamats,项目名称:PortAIO,代码行数:28,代码来源:Helper.cs
示例7: QGetCollisionMinions
public static IEnumerable<Obj_AI_Base> QGetCollisionMinions(Vector3 source, Vector3 targetposition, float width, float range, CollisionableObjects[] collisionObjects)
{
PredictionInput input = new PredictionInput {From = source, Radius = width, Range = range};
if (collisionObjects.Length > 0)
{
for (int i = 0; collisionObjects.Length != 0; i ++)
{
input.CollisionObjects[i] = collisionObjects[i];
}
}
else
{
input.CollisionObjects[0] = CollisionableObjects.Minions;
}
return
Collision.GetCollision(new List<Vector3> {targetposition}, input).OrderBy(obj => obj.Distance(source)).ToList();
}
开发者ID:AwkwardDev,项目名称:LeagueSharp2,代码行数:19,代码来源:Combos.cs
示例8: GetPrediction
public static PredictionOutput GetPrediction(PredictionInput input) {
var mainTargetPrediction = Prediction.GetPrediction(input, false, true);
var posibleTargets = new List<PossibleTarget>
{
new PossibleTarget { Position = mainTargetPrediction.UnitPosition.To2D(), Unit = input.Unit }
};
if (mainTargetPrediction.Hitchance >= HitChance.Medium)
{
//Add the posible targets in range:
posibleTargets.AddRange(GetPossibleTargets(input));
}
if (posibleTargets.Count > 1)
{
var candidates = new List<Vector2>();
foreach (var target in posibleTargets)
{
target.Position = target.Position - input.From.To2D();
}
for (var i = 0; i < posibleTargets.Count; i++)
{
for (var j = 0; j < posibleTargets.Count; j++)
{
if (i != j)
{
var p = (posibleTargets[i].Position + posibleTargets[j].Position) * 0.5f;
if (!candidates.Contains(p))
{
candidates.Add(p);
}
}
}
}
var bestCandidateHits = -1;
var bestCandidate = new Vector2();
var positionsList = posibleTargets.Select(t => t.Position).ToList();
foreach (var candidate in candidates)
{
var hits = GetHits(candidate, input.Range, input.Radius, positionsList);
if (hits > bestCandidateHits)
{
bestCandidate = candidate;
bestCandidateHits = hits;
}
}
bestCandidate = bestCandidate + input.From.To2D();
if (bestCandidateHits > 1 && input.From.To2D().Distance(bestCandidate, true) > 50 * 50)
{
return new PredictionOutput
{
Hitchance = mainTargetPrediction.Hitchance,
_aoeTargetsHitCount = bestCandidateHits,
UnitPosition = mainTargetPrediction.UnitPosition,
CastPosition = bestCandidate.To3D(),
Input = input
};
}
}
return mainTargetPrediction;
}
开发者ID:rickson22,项目名称:LeagueSharp,代码行数:67,代码来源:OKTWPrediction.cs
示例9: GetPossibleTargets
internal static List<PossibleTarget> GetPossibleTargets(PredictionInput input) {
var result = new List<PossibleTarget>();
var originalUnit = input.Unit;
foreach (var enemy in
HeroManager.Enemies.FindAll(
h =>
h.NetworkId != originalUnit.NetworkId &&
h.IsValidTarget((input.Range + 200 + input.RealRadius), true, input.RangeCheckFrom)))
{
input.Unit = enemy;
var prediction = Prediction.GetPrediction(input, false, false);
if (prediction.Hitchance >= HitChance.High)
{
result.Add(new PossibleTarget { Position = prediction.UnitPosition.To2D(), Unit = enemy });
}
}
return result;
}
开发者ID:rickson22,项目名称:LeagueSharp,代码行数:18,代码来源:OKTWPrediction.cs
示例10: GetPositionOnPath
internal static PredictionOutput GetPositionOnPath(PredictionInput input, List<Vector2> path, float speed = -1) {
speed = (Math.Abs(speed - (-1)) < float.Epsilon) ? input.Unit.MoveSpeed : speed;
if (path.Count <= 1)
{
return new PredictionOutput
{
Input = input,
UnitPosition = input.Unit.ServerPosition,
CastPosition = input.Unit.ServerPosition,
Hitchance = HitChance.VeryHigh
};
}
var pLength = path.PathLength();
//Skillshots with only a delay
if (pLength >= input.Delay * speed - input.RealRadius && Math.Abs(input.Speed - float.MaxValue) < float.Epsilon)
{
var tDistance = input.Delay * speed - input.RealRadius;
for (var i = 0; i < path.Count - 1; i++)
{
var a = path[i];
var b = path[i + 1];
var d = a.Distance(b);
if (d >= tDistance)
{
var direction = (b - a).Normalized();
var cp = a + direction * tDistance;
var p = a +
direction *
((i == path.Count - 2)
? Math.Min(tDistance + input.RealRadius, d)
: (tDistance + input.RealRadius));
return new PredictionOutput
{
Input = input,
CastPosition = cp.To3D(),
UnitPosition = p.To3D(),
Hitchance = HitChance.High
};
}
tDistance -= d;
}
}
//Skillshot with a delay and speed.
if (pLength >= input.Delay * speed - input.RealRadius &&
Math.Abs(input.Speed - float.MaxValue) > float.Epsilon)
{
var d = input.Delay * speed - input.RealRadius;
if (input.Type == SkillshotType.SkillshotLine || input.Type == SkillshotType.SkillshotCone)
{
if (input.From.Distance(input.Unit.ServerPosition, true) < 200 * 200)
{
d = input.Delay * speed;
}
}
path = path.CutPath(d);
var tT = 0f;
for (var i = 0; i < path.Count - 1; i++)
{
var a = path[i];
var b = path[i + 1];
var tB = a.Distance(b) / speed;
var direction = (b - a).Normalized();
a = a - speed * tT * direction;
var sol = Geometry.VectorMovementCollision(a, b, speed, input.From.To2D(), input.Speed, tT);
var t = (float)sol[0];
var pos = (Vector2)sol[1];
if (pos.IsValid() && t >= tT && t <= tT + tB)
{
if (pos.Distance(b, true) < 20)
break;
var p = pos + input.RealRadius * direction;
if (input.Type == SkillshotType.SkillshotLine && false)
{
var alpha = (input.From.To2D() - p).AngleBetween(a - b);
if (alpha > 30 && alpha < 180 - 30)
{
var beta = (float)Math.Asin(input.RealRadius / p.Distance(input.From));
var cp1 = input.From.To2D() + (p - input.From.To2D()).Rotated(beta);
var cp2 = input.From.To2D() + (p - input.From.To2D()).Rotated(-beta);
pos = cp1.Distance(pos, true) < cp2.Distance(pos, true) ? cp1 : cp2;
}
}
return new PredictionOutput
{
Input = input,
CastPosition = pos.To3D(),
//.........这里部分代码省略.........
开发者ID:rickson22,项目名称:LeagueSharp,代码行数:101,代码来源:OKTWPrediction.cs
示例11: GetImmobilePrediction
internal static PredictionOutput GetImmobilePrediction(PredictionInput input, double remainingImmobileT) {
var timeToReachTargetPosition = input.Delay + input.Unit.Distance(input.From) / input.Speed;
if (timeToReachTargetPosition <= remainingImmobileT + input.RealRadius / input.Unit.MoveSpeed)
{
return new PredictionOutput
{
CastPosition = input.Unit.ServerPosition,
UnitPosition = input.Unit.Position,
Hitchance = HitChance.Immobile
};
}
return new PredictionOutput
{
Input = input,
CastPosition = input.Unit.ServerPosition,
UnitPosition = input.Unit.ServerPosition,
Hitchance = HitChance.High
/*timeToReachTargetPosition - remainingImmobileT + input.RealRadius / input.Unit.MoveSpeed < 0.4d ? HitChance.High : HitChance.Medium*/
};
}
开发者ID:rickson22,项目名称:LeagueSharp,代码行数:22,代码来源:OKTWPrediction.cs
示例12: WayPointAnalysis
internal static PredictionOutput WayPointAnalysis(PredictionOutput result, PredictionInput input) {
if (!input.Unit.IsValid<Obj_AI_Hero>() || input.Radius == 1)
{
result.Hitchance = HitChance.VeryHigh;
return result;
}
//Program.debug("PRED: FOR CHAMPION " + input.Unit.BaseSkinName);
// CAN'T MOVE SPELLS ///////////////////////////////////////////////////////////////////////////////////
if (UnitTracker.GetSpecialSpellEndTime(input.Unit) > 0 || input.Unit.HasBuff("Recall"))
{
result.Hitchance = HitChance.VeryHigh;
return result;
}
// PREPARE MATH ///////////////////////////////////////////////////////////////////////////////////
result.Hitchance = HitChance.Medium;
var lastWaypiont = input.Unit.GetWaypoints().Last().To3D();
var distanceUnitToWaypoint = lastWaypiont.Distance(input.Unit.ServerPosition);
var distanceFromToUnit = input.From.Distance(input.Unit.ServerPosition);
var distanceFromToWaypoint = lastWaypiont.Distance(input.From);
float speedDelay = distanceFromToUnit / input.Speed;
if (Math.Abs(input.Speed - float.MaxValue) < float.Epsilon)
speedDelay = 0;
else
speedDelay = distanceFromToUnit / input.Speed;
float totalDelay = speedDelay + input.Delay;
float moveArea = input.Unit.MoveSpeed * totalDelay;
float fixRange = moveArea * 0.5f;
double angleMove = 30 + (input.Radius / 13) - (totalDelay * 2);
float backToFront = moveArea * 1.5f;
float pathMinLen = 1000f;
if (UnitTracker.GetLastNewPathTime(input.Unit) < 0.1d)
{
pathMinLen = 700f + backToFront;
result.Hitchance = HitChance.High;
}
if (input.Type == SkillshotType.SkillshotCircle)
{
fixRange -= input.Radius / 2;
}
// SPAM CLICK ///////////////////////////////////////////////////////////////////////////////////
if (UnitTracker.PathCalc(input.Unit))
{
if (distanceFromToUnit < input.Range - fixRange)
{
result.Hitchance = HitChance.VeryHigh;
return result;
}
result.Hitchance = HitChance.High;
return result;
}
// NEW VISABLE ///////////////////////////////////////////////////////////////////////////////////
if (UnitTracker.GetLastVisableTime(input.Unit) < 0.08d)
{
result.Hitchance = HitChance.Medium;
return result;
}
// SPECIAL CASES ///////////////////////////////////////////////////////////////////////////////////
if (distanceFromToUnit < 300 || distanceFromToWaypoint < 200)
{
result.Hitchance = HitChance.VeryHigh;
return result;
}
// LONG CLICK DETECTION ///////////////////////////////////////////////////////////////////////////////////
if (distanceUnitToWaypoint > pathMinLen)
{
result.Hitchance = HitChance.VeryHigh;
return result;
}
// RUN IN LANE DETECTION ///////////////////////////////////////////////////////////////////////////////////
if (distanceFromToWaypoint > distanceFromToUnit + fixRange && GetAngle(input.From, input.Unit) < angleMove)
{
result.Hitchance = HitChance.VeryHigh;
return result;
}
//.........这里部分代码省略.........
开发者ID:rickson22,项目名称:LeagueSharp,代码行数:101,代码来源:OKTWPrediction.cs
示例13: AssistedQLogic
private Vector3 AssistedQLogic(out int hits)
{
try
{
if (Ball.IsMoving)
{
hits = 0;
return Vector3.Zero;
}
var center = Vector2.Zero;
float radius = -1;
var count = 0;
var range = (Q.Range + R.Width) * 1.5f;
var input = new PredictionInput
{
Collision = false,
From = Ball.Position,
RangeCheckFrom = Ball.Position,
Delay = (Q.Delay + R.Delay) - 0.1f,
Range = Q.Range + R.Width / 2f,
Speed = Q.Speed,
Radius = R.Width,
Type = R.Type
};
var points = new List<Vector2>();
foreach (var enemy in GameObjects.EnemyHeroes.Where(t => t.IsValidTarget(range)))
{
input.Unit = enemy;
var pred = Prediction.GetPrediction(input);
if (pred.Hitchance >= HitChance.Low)
{
points.Add(pred.UnitPosition.To2D());
}
}
if (points.Any())
{
var possibilities = ListExtensions.ProduceEnumeration(points).Where(p => p.Count > 1).ToList();
if (possibilities.Any())
{
foreach (var possibility in possibilities)
{
var mec = MEC.GetMec(possibility);
if (mec.Radius < R.Width && Player.Distance(mec.Center) < range)
{
if (possibility.Count > count || possibility.Count == count && mec.Radius < radius)
{
center = mec.Center;
radius = mec.Radius;
count = possibility.Count;
}
}
}
if (!center.Equals(Vector2.Zero))
{
hits = count;
return center.To3D();
}
}
var dTarget = GameObjects.EnemyHeroes.FirstOrDefault(t => t.IsValidTarget(range));
if (dTarget != null)
{
hits = 1;
return dTarget.Position;
}
}
}
catch (Exception ex)
{
Global.Logger.AddItem(new LogItem(ex));
}
hits = 0;
return Vector3.Zero;
}
开发者ID:k88173,项目名称:LeagueSharp-Dev,代码行数:73,代码来源:Orianna.cs
示例14: OnWaveClear
public static void OnWaveClear()
{
// Mana check
if (player.ManaPercentage() < Config.SliderLinks["waveMana"].Value.Value)
return;
// Check spells
if (!Q.IsEnabledAndReady(Mode.WAVE) && !E.IsEnabledAndReady(Mode.WAVE))
return;
// Minions around
var minions = MinionManager.GetMinions(Q.Range, MinionTypes.All, MinionTeam.Enemy, MinionOrderTypes.MaxHealth);
if (minions.Count == 0)
return;
// Q usage
if (Q.IsEnabledAndReady(Mode.WAVE) && !player.IsDashing())
{
int hitNumber = Config.SliderLinks["waveNumQ"].Value.Value;
// Validate available minions
if (minions.Count >= hitNumber)
{
// Get only killable minions
var killable = minions.Where(m => m.Health < Q.GetDamage(m));
if (killable.Count() > 0)
{
// Prepare prediction input for Collision check
var input = new PredictionInput()
{
From = Q.From,
Collision = Q.Collision,
Delay = Q.Delay,
Radius = Q.Width,
Range = Q.Range,
RangeCheckFrom = Q.RangeCheckFrom,
Speed = Q.Speed,
Type = Q.Type,
CollisionObjects = new[] { CollisionableObjects.Heroes, CollisionableObjects.Minions, CollisionableObjects.YasuoWall }
};
// Helpers
var currentHitNumber = 0;
var castPosition = Vector3.Zero;
// Validate the collision
foreach (var target in killable)
{
// Update unit in the input
input.Unit = target;
// Get colliding objects
var colliding = LeagueSharp.Common.Collision.GetCollision(new List<Vector3>() { player.ServerPosition.Extend(Prediction.GetPrediction(input).UnitPosition, Q.Range) }, input)
.MakeUnique()
.OrderBy(e => e.Distance(player, true))
.ToList();
// Validate collision
if (colliding.Count >= hitNumber && !colliding.Contains(player))
{
// Calculate hit number
int i = 0;
foreach (var collide in colliding)
{
// Break loop here since we can't kill the target
if (Q.GetDamage(collide) < collide.Health)
{
if (currentHitNumber < i && i >= hitNumber)
{
currentHitNumber = i;
castPosition = Q.GetPrediction(collide).CastPosition;
}
break;
}
// Increase hit count
i++;
}
}
}
// Check if we have a valid target with enough targets being killed
if (castPosition != Vector3.Zero)
{
if (Q.Cast(castPosition))
return;
}
}
}
}
// General E usage
if (E.IsEnabledAndReady(Mode.WAVE))
{
int hitNumber = Config.SliderLinks["waveNumE"].Value.Value;
// Get minions in E range
var minionsInRange = minions.Where(m => E.IsInRange(m));
// Validate available minions
//.........这里部分代码省略.........
开发者ID:Marco727,项目名称:Kalista-X-Class,代码行数:101,代码来源:ActiveModes.cs
示例15: GetCollisionMinions
/// <summary>
/// Gets the collision minions
/// </summary>
/// <param name="source">
/// the source
/// </param>
/// <param name="targetPosition">
/// the target position
/// </param>
/// <returns>
/// The list of minions
/// </returns>
private IEnumerable<Obj_AI_Base> GetCollisionMinions(Obj_AI_Base source, Vector3 targetPosition)
{
var input = new PredictionInput
{
Unit = source, Radius = this.spells[SpellSlot.Q].Width,
Delay = this.spells[SpellSlot.Q].Delay, Speed = this.spells[SpellSlot.Q].Speed
};
input.CollisionObjects[0] = CollisionableObjects.Minions;
return
Collision.GetCollision(new List<Vector3> { targetPosition }, input)
.OrderBy(obj => obj.Distance(source))
.ToList();
}
开发者ID:47110572,项目名称:JabbaRepo,代码行数:27,代码来源:Kalista.cs
示例16: GetCollision
/// <summary>
/// Returns the list of the units that the skillshot will hit before reaching the set positions.
/// </summary>
public static List<Obj_AI_Base> GetCollision(List<Vector3> positions, PredictionInput input) {
var result = new List<Obj_AI_Base>();
foreach (var position in positions)
{
foreach (var objectType in input.CollisionObjects)
{
switch (objectType)
{
case CollisionableObjects.Minions:
foreach (var minion in ObjectManager.Get<Obj_AI_Minion>().Where(minion =>
minion.IsValidTarget(Math.Min(input.Range + input.Radius + 100, 2000), true, input.From)))
{
input.Unit = minion;
if (minion.Path.Count() > 0)
{
var minionPrediction = Prediction.GetPrediction(input, true, false);
if (minionPrediction.CastPosition.To2D().Distance(input.From.To2D(), position.To2D(), true, true) <= Math.Pow((input.Radius + 20 + minion.Path.Count() * minion.BoundingRadius), 2))
{
result.Add(minion);
}
}
else
{
var bonus = 30;
if (minion.ServerPosition.To2D().Distance(input.From.To2D()) < input.Radius)
result.Add(minion);
else if (minion.ServerPosition.To2D().Distance(input.From.To2D(), position.To2D(), true, true) <=
Math.Pow((input.Radius + bonus + minion.BoundingRadius), 2))
{
result.Add(minion);
}
}
}
break;
case CollisionableObjects.Heroes:
foreach (var hero in
HeroManager.Enemies.FindAll(
hero =>
hero.IsValidTarget(
Math.Min(input.Range + input.Radius + 100, 2000), true, input.RangeCheckFrom))
)
{
input.Unit = hero;
var prediction = Prediction.GetPrediction(input, false, false);
if (
prediction.UnitPosition.To2D()
.Distance(input.From.To2D(), position.To2D(), true, true) <=
Math.Pow((input.Radius + 50 + hero.BoundingRadius), 2))
{
result.Add(hero);
}
}
break;
case CollisionableObjects.Walls:
var step = position.Distance(input.From) / 20;
for (var i = 0; i < 20; i++)
{
var p = input.From.To2D().Extend(position.To2D(), step * i);
if (NavMesh.GetCollisionFlags(p.X, p.Y).HasFlag(CollisionFlags.Wall))
{
result.Add(ObjectManager.Player);
}
}
break;
}
}
}
return result.Distinct().ToList();
}
开发者ID:rickson22,项目名称:LeagueSharp,代码行数:74,代码来源:OKTWPrediction.cs
示例17: ELogic
private bool ELogic(Obj_AI_Hero mainTarget, List<Obj_AI_Base> targets, HitChance hitChance, int minHits)
{
try
{
var input = new PredictionInput
{
Range = ELength,
Delay = E.Delay,
Radius = E.Width,
Speed = E.Speed,
Type = E.Type
};
var input2 = new PredictionInput
{
Range = E.Range + ELength,
Delay = E.Delay,
Radius = E.Width,
Speed = E.Speed,
Type = E.Type
};
var startPos = Vector3.Zero;
var endPos = Vector3.Zero;
var hits = 0;
targets = targets.Where(t => t.IsValidTarget(E.Range + ELength + E.Width * 1.1f)).ToList();
var targetCount = targets.Count;
foreach (var target in targets)
{
bool containsTarget;
var lTarget = target;
if (target.Distance(Player.Position) <= E.Range)
{
containsTarget = mainTarget == null || lTarget.NetworkId == mainTarget.NetworkId;
var cCastPos = target.Position;
foreach (var t in targets.Where(t => t.NetworkId != lTarget.NetworkId))
{
var count = 1;
var cTarget = t;
input.Unit = t;
input.From = cCastPos;
input.RangeCheckFrom = cCastPos;
var pred = Prediction.GetPrediction(input);
if (pred.Hitchance >= (hitChance - 1))
{
count++;
if (!containsTarget)
{
containsTarget = t.NetworkId == mainTarget.NetworkId;
}
var rect = new Geometry.Polygon.Rectangle(
cCastPos.To2D(), cCastPos.Extend(pred.CastPosition, ELength).To2D(), E.Width);
foreach (var c in
targets.Where(
c => c.NetworkId != cTarget.NetworkId && c.NetworkId != lTarget.NetworkId))
{
input.Unit = c;
var cPredPos = c.Type == GameObjectType.obj_AI_Minion
? c.Position
: Prediction.GetPrediction(input).UnitPosition;
if (
new Geometry.Polygon.Circle(
cPredPos,
(c.Type == GameObjectType.obj_AI_Minion && c.IsMoving
? (c.BoundingRadius / 2f)
: (c.BoundingRadius) * 0.9f)).Points.Any(p => rect.IsInside(p)))
{
count++;
if (!containsTarget && c.NetworkId == mainTarget.NetworkId)
{
containsTarget = true;
}
}
}
if (count > hits && containsTarget)
{
hits = count;
startPos = cCastPos;
endPos = cCastPos.Extend(pred.CastPosition, ELength);
if (hits == targetCount)
{
break;
}
}
}
}
if (endPos.Equals(Vector3.Zero) && containsTarget)
{
startPos = target.IsFacing(Player) && IsSpellUpgraded(E)
? Player.Position.Extend(cCastPos, Player.Distance(cCastPos) - (ELength / 10f))
: cCastPos;
endPos = Player.Position.Extend(cCastPos, ELength);
hits = 1;
}
}
else
{
input2.Unit = lTarget;
var castPos = Prediction.GetPrediction(input2).CastPosition;
var sCastPos = Player.Position.Extend(castPos, E.Range);
//.........这里部分代码省略.........
开发者ID:juan2202,项目名称:LeagueSharp-Standalones,代码行数:101,代码来源:Viktor.cs
示例18: Execute
public override void Execute()
{
// Jodus please...
//if (Player.ManaPercent < Settings.MinMana)
if (((Player.Mana / Player.MaxMana) * 100) < Settings.MinMana)
{
return;
}
// Precheck
if (!(Settings.UseQ && Q.IsReady()) &&
!(Settings.UseE && E.IsReady()))
{
return;
}
// Minions around
var minions = MinionManager.GetMinions(Q.Range, MinionTypes.All, MinionTeam.Enemy, MinionOrderTypes.MaxHealth);
if (minions.Count == 0)
{
return;
}
#region Q usage
if (Settings.UseQ && Q.IsReady() && !Player.IsDashing())
{
// Validate available minions
if (minions.Count >= Settings.MinNumberQ)
{
// Get only killable minions
var killable = minions.Where(m => m.Health < Q.GetDamage(m));
if (killable.Count() > 0)
{
// Prepare prediction input for Collision check
var input = new PredictionInput()
{
From = Q.From,
Collision = Q.Collision,
Delay = Q.Delay,
Radius = Q.Width,
Range = Q.Range,
RangeCheckFrom = Q.RangeCheckFrom,
Speed = Q.Speed,
Type = Q.Type,
CollisionObjects = new[] { CollisionableObjects.Heroes, CollisionableObjects.Minions, CollisionableObjects.YasuoWall }
};
// Helpers
var currentHitNumber = 0;
var castPosition = Vector3.Zero;
// Validate the collision
foreach (var target in killable)
{
// Update unit in the input
input.Unit = target;
// Get colliding objects
var colliding = LeagueSharp.Common.Collision.GetCollision(new List<Vector3>() { Player.ServerPosition.Extend(Prediction.GetPrediction(input).UnitPosition, Q.Range) }, input)
.MakeUnique()
.OrderBy(e => e.Distance(Player, true))
.ToList();
// Validate collision
if (colliding.Count >= Settings.MinNumberQ && !colliding.Contains(Player))
{
// Calculate hit number
int i = 0;
foreach (var collide in colliding)
{
// Break loop here since we can't kill the target
if (Q.GetDamage(collide) < collide.Health)
{
if (currentHitNumber < i && i >= Settings.MinNumberQ)
{
currentHitNumber = i;
castPosition = Q.GetPrediction(collide).CastPosition;
}
break;
}
// Increase hit count
i++;
}
}
}
// Check if we have a valid target with enough targets being killed
if (castPosition != Vector3.Zero)
{
if (Q.Cast(castPosition))
return;
}
}
}
}
#endregion
//.........这里部分代码省略.........
开发者ID:koolkaracter,项目名称:LeagueSharp,代码行数:101,代码来源:WaveClear.cs
示例19: GetDashingPrediction
internal static PredictionOutput GetDashingPrediction(PredictionInput input) {
var dashData = input.Unit.GetDashInfo();
var result = new PredictionOutput { Input = input };
//Normal dashes.
if (!dashData.IsBlink)
{
//Mid air:
var endP = dashData.Path.Last();
var dashPred = GetPositionOnPath(
input, new List<Vector2> { input.Unit.ServerPosition.To2D(), endP }, dashData.Speed);
if (dashPred.Hitchance >= HitChance.High && dashPred.UnitP
|
请发表评论