public void UpdatePlayerContext(PlayerContext context) { World = context.World; Me = context.Wizards.Single(x => x.IsMe); CurrentBuildings = new Dictionary <long, Building>(); CurrentWizards = new Dictionary <long, Wizard>(); CurrentMinions = new Dictionary <long, Minion>(); CurrentProjectiles = new Dictionary <long, Projectile>(); foreach (var unit in context.World.Buildings) { DeadBuildings.Remove(unit.Id); AllBuildings[unit.Id] = unit; CurrentBuildings[unit.Id] = unit; } foreach (var unit in context.World.Wizards) { DeadWizards.Remove(unit.Id); AllWizards[unit.Id] = unit; CurrentWizards[unit.Id] = unit; } foreach (var unit in context.World.Minions) { DeadMinions.Remove(unit.Id); AllMinions[unit.Id] = unit; CurrentMinions[unit.Id] = unit; } foreach (var unit in context.World.Projectiles) { DeadProjectiles.Remove(unit.Id); AllProjectiles[unit.Id] = unit; CurrentProjectiles[unit.Id] = unit; } foreach (var diedUnit in AllBuildings.Except(CurrentBuildings).Where(x => x.Value.IsUnion(Me) || x.Value.Life <= 36)) { DeadBuildings[diedUnit.Key] = new DeadUnitInfo(context.World, diedUnit.Value, Me); } foreach (var diedUnit in AllWizards.Except(CurrentWizards).Where(x => x.Value.IsUnion(Me) || x.Value.Life <= 36)) { DeadWizards[diedUnit.Key] = new DeadUnitInfo(context.World, diedUnit.Value, Me); } foreach (var diedUnit in AllMinions.Except(CurrentMinions).Where(x => x.Value.IsUnion(Me) || x.Value.Life <= 36)) { DeadMinions[diedUnit.Key] = new DeadUnitInfo(context.World, diedUnit.Value, Me); } foreach (var diedUnit in AllProjectiles.Except(CurrentProjectiles)) { bool isTargetTree = context.World.Trees.Any(x => x.GetDistanceTo(diedUnit.Value) < 220); DeadProjectiles[diedUnit.Key] = new DeadUnitInfo(context.World, diedUnit.Value, Me, isTargetTree); } AllBuildings = CurrentBuildings; AllWizards = CurrentWizards; AllMinions = CurrentMinions; AllProjectiles = CurrentProjectiles; CurrentBuildingTargets = new Dictionary <long, List <LivingUnit> >(); foreach (var building in CurrentBuildings) { var buildingUnit = building.Value; var attackRange = buildingUnit.Type == BuildingType.GuardianTower ? Game.GuardianTowerAttackRange : Game.FactionBaseAttackRange; var maxDamage = buildingUnit.Type == BuildingType.GuardianTower ? Game.GuardianTowerDamage : Game.FactionBaseDamage; List <LivingUnit> p1Units = new List <LivingUnit>(); List <LivingUnit> p2Units = new List <LivingUnit>(); foreach (var minion in CurrentMinions) { FindBuildingTarget(minion.Value, buildingUnit, attackRange, maxDamage, p1Units, p2Units); } foreach (var wizard in CurrentWizards) { FindBuildingTarget(wizard.Value, buildingUnit, attackRange, maxDamage, p1Units, p2Units); } var buildingTargets = p1Units.Count > 0 ? p1Units : p2Units; CurrentBuildingTargets[building.Key] = buildingTargets; } DeadProjectiles = DeadProjectiles .Where(x => x.Value.ProjectileType == ProjectileType.MagicMissile && context.World.TickIndex < x.Value.TickIndex + 5 * 4) .ToDictionary(x => x.Key, y => y.Value); WorldUpdated?.Invoke(this, EventArgs.Empty); }
public static FarmLocation GetBestLaserFarmLocation(bool jungle) { var bestEndPos = new Vector2(); var bestStartPos = new Vector2(); var mMinionCount = 0; List <Obj_AI_Base> AllMinions; if (!jungle) { AllMinions = MinionManager.GetMinions(EMaxRange); } else { AllMinions = MinionManager.GetMinions(EMaxRange, MinionTypes.All, MinionTeam.Neutral); } var mMinionsList = (from minions in AllMinions select minions.Position.To2D()).ToList <Vector2>(); var possiblePosition = new List <Vector2>(); possiblePosition.AddRange(mMinionsList); var Max = possiblePosition.Count; for (var i = 0; i < Max; i++) { for (var j = 0; j < Max; j++) { if (possiblePosition[j] != possiblePosition[i]) { possiblePosition.Add((possiblePosition[j] + possiblePosition[i]) / 2); } } } foreach (var StartPositionMinion in AllMinions.Where(m => Utilities.Player.Distance(m) < ERange)) { var StartPos = StartPositionMinion.Position.To2D(); foreach (var Pos in possiblePosition) { if (Pos.Distance(StartPos, true) <= LenghtE * LenghtE) { var EndPos = StartPos + LenghtE * (Pos - StartPos).Normalized(); var count = mMinionsList.Count(Pos2 => Pos2.Distance(StartPos, EndPos, true, true) <= 140 * 140); if (count >= mMinionCount) { bestEndPos = EndPos; mMinionCount = count; bestStartPos = StartPos; } } } } if ((!jungle && Utilities.SliderValue("e.clear.minhit") < mMinionCount) || (jungle && mMinionCount > 0)) { return(new FarmLocation(bestStartPos, bestEndPos, mMinionCount)); } else { return(new FarmLocation(bestStartPos, bestEndPos, 0)); } } // Algorithm by Trus. Congratz bro
private void GameObject_OnDelete(GameObject sender, EventArgs args) { AllObjects.Remove(sender); var hero = sender as AIHeroClient; if (hero != null) { AllHeroes.Remove(hero); if (hero.IsEnemy) { EnemyHeroes.Remove(hero); AllEnemies.Remove(hero); } else { AllyHeroes.Remove(hero); AllAllies.Remove(hero); } return; } var minion = sender as Obj_AI_Minion; if (minion != null) { if (minion.Team != GameObjectTeam.Neutral) { if (minion.GetMinionType().HasFlag(Extensions.MinionTypes.Ward)) { AllWards.Remove(minion); if (minion.IsEnemy) { EnemyWards.Remove(minion); } else { AllyWards.Remove(minion); } } else { AllMinions.Remove(minion); if (minion.IsEnemy) { EnemyMinions.Remove(minion); AllEnemies.Remove(minion); } else { AllyMinions.Remove(minion); AllAllies.Remove(minion); } } } else if (minion.Name != "WardCorpse") { switch (minion.GetJungleType()) { case Extensions.JungleType.Small: SmallJungleMinions.Remove(minion); break; case Extensions.JungleType.Large: LargeJungleMinions.Remove(minion); break; case Extensions.JungleType.Epic: EpicJungleMinions.Remove(minion); break; case Extensions.JungleType.Legendary: LegendaryJungleMinions.Remove(minion); break; } AllJungleMinions.Remove(minion); } return; } var particle = sender as Obj_GeneralParticleEmitter; if (particle != null) { AllParticleEmitters.Remove(particle); return; } var turret = sender as Obj_AI_Turret; if (turret != null) { AllTurrets.Remove(turret); if (turret.IsEnemy) { EnemyTurrets.Remove(turret); } else { AllyTurrets.Remove(turret); } return; } var shop = sender as Obj_Shop; if (shop != null) { AllShops.Remove(shop); if (shop.IsAlly) { AllyShops.Remove(shop); } else { EnemyShops.Remove(shop); } return; } var spawnPoint = sender as Obj_SpawnPoint; if (spawnPoint != null) { AllSpawnPoints.Remove(spawnPoint); if (spawnPoint.IsAlly) { AllySpawnPoints.Remove(spawnPoint); } else { EnemySpawnPoints.Remove(spawnPoint); } } var inhibitor = sender as Obj_BarracksDampener; if (inhibitor != null) { AllInhibitors.Remove(inhibitor); if (inhibitor.IsAlly) { AllyInhibitors.Remove(inhibitor); } else { EnemyInhibitors.Remove(inhibitor); } } var nexus = sender as Obj_HQ; if (nexus != null) { AllNexus.Remove(nexus); if (nexus.IsAlly) { AllyNexus = null; } else { EnemyNexus = null; } } var missile = sender as MissileClient; if (missile != null) { AllMissiles.Remove(missile); if (missile.IsAlly) { AllyMissiles.Remove(missile); } else { EnemyMissiles.Remove(missile); } } }