public Monster GetMonster() { if (!Monsters.Any()) { return(null); } int totalChance = Monsters.Sum(m => m.ChanceOfEncounter); int randomNumber = GodOfRandom.NumberBetween(1, totalChance); int runningTotal = 0; foreach (var monsterEncounter in Monsters) { runningTotal += monsterEncounter.ChanceOfEncounter; if (randomNumber <= runningTotal) { return(MonsterFactory.GetMonster(monsterEncounter.MonsterId)); } } //fail check return(MonsterFactory.GetMonster(Monsters.Last().MonsterId)); }
public static Obj_AI_Base GetEnemyKS(AttackSpell spell, GameObjectType gametype) { /* Last hit with Q */ if (spell == AttackSpell.Q) { return(ObjectManager.Get <Obj_AI_Base>().OrderBy(a => a.Health) .Where(a => a.IsEnemy && a.Type == gametype && !a.IsDead && a.IsValidTarget(Program.Q.Range) && !a.IsInvulnerable && a.Health <= QDamage(a) && a.Distance(Ryze) <= Program.Q.Range).FirstOrDefault()); } /* Last hit with W */ else if (spell == AttackSpell.W) { return(ObjectManager.Get <Obj_AI_Base>() .Where(a => a.IsEnemy && a.Type == gametype && !a.IsDead && a.IsValidTarget(Program.W.Range) && !a.IsInvulnerable && a.Health <= WDamage(a) && a.Distance(Ryze) <= Program.W.Range).FirstOrDefault()); } /* Last hit with E */ else if (spell == AttackSpell.E) { return(ObjectManager.Get <Obj_AI_Base>() .Where(a => a.IsEnemy && a.Type == gametype && !a.IsDead && a.IsValidTarget(Program.E.Range) && !a.IsInvulnerable && a.Health <= EDamage(a) && a.Distance(Ryze) <= Program.E.Range).FirstOrDefault()); } else if (spell == AttackSpell.I) { return(ObjectManager.Get <Obj_AI_Base>() .Where(a => a.IsEnemy && a.Type == gametype && !a.IsDead && a.IsValidTarget(Program.Ignite.Range) && !a.IsInvulnerable && a.Health <= (Ryze.GetSummonerSpellDamage(a, DamageLibrary.SummonerSpells.Ignite) - (a.HPRegenRate * 0.1)) && a.Distance(Ryze) <= Program.Ignite.Range).FirstOrDefault()); } else if (spell == AttackSpell.S) { return(ObjectManager.Get <Obj_AI_Base>() .Where(a => a.IsEnemy && a.Type == gametype && !a.IsDead && a.IsValidTarget(Program.Smite.Range) && !a.IsInvulnerable && Monsters.Any(name => a.Name.StartsWith(name)) && a.Health <= Ryze.GetSummonerSpellDamage(a, DamageLibrary.SummonerSpells.Smite) && a.Distance(Ryze) <= Program.Smite.Range).FirstOrDefault()); } else { return(null); } }
public Location ToLocation() { var location = new Location(X, Y, Name, Description, FilePaths.NormalizePath(Image)); if (Monsters?.Any() ?? false) { foreach (var encounter in Monsters) { var availableMonster = MonsterFactory.Get(encounter.Id); if (availableMonster != null) { location.AddEncounter(encounter.Id, encounter.Chance); } else { Trace.TraceWarning($"Location({Name}) has monster {encounter.Id} that could not be found"); } } ; } ; if (Quests?.Any() ?? false) { foreach (var quest in Quests) { var availableQuest = QuestFactory.FindQuest(quest.Id); if (availableQuest != null) { location.AddQuest(availableQuest); } else { Trace.TraceWarning($"Location({Name}) has quest {quest.Id} that could not be found"); } } ; } ; if (Trader > 0) { var availableTader = TraderFactory.GetTrader(Trader); if (availableTader != null) { location.TraderHere = availableTader; } else { Trace.TraceWarning($"Location({Name}) has tracer '{Trader}' that could not be found"); } } ; return(location); }
public void MonsterMenu() { Console.WriteLine("Please choose an option by entering a number."); Console.WriteLine("0. Show me all monsters!"); Console.WriteLine("1. Fight last monster"); Console.WriteLine("2. Fight second monster"); Console.WriteLine("3. Fight first monster with less than 20 hit points"); Console.WriteLine("4. Fight first monster with a strength of at least 11"); Console.WriteLine("5. Fight random monster"); var input = Console.ReadLine(); if (!Monsters.Any()) //if list is empty return to main menu { Console.WriteLine(); Console.WriteLine("No monster to fight"); Console.WriteLine(); game.Main(); } else { if (input == "0") { ShowMonsterList(); } if (input == "1") { this.Start(Monsters.LastOrDefault()); } else if (input == "2") { this.Start(Monsters.ElementAtOrDefault(1)); } else if (input == "3") { this.Start(Monsters.Where(p => p.OriginalHP < 20).ToList().FirstOrDefault()); } else if (input == "4") { this.Start(Monsters.Where(p => p.Strength >= 11).ToList().FirstOrDefault()); } else if (input == "5") { var randmonNumber = new Random(); this.Start(Monsters[randmonNumber.Next(Monsters.Count)]); } else { return; } } }
private bool MonsterCanSpawnOn(Position position) { var monstersOnPosition = Monsters.Any(monster => monster.Position.Equals(position)); var nearDoor = false; foreach (var tile in Tiles) { if (tile.HasDoor && tile.CloseTo(position)) { nearDoor = true; break; } } var notOnWall = NotOnWall(position); return(!monstersOnPosition && !nearDoor && notOnWall); }
internal void StartLife() { Observable.Interval(TimeSpan.FromSeconds(1)).Subscribe(x => { if (InstanceBag?.EndState == 0) { Parallel.ForEach(WaveEvents, waveEvent => { if (waveEvent?.LastStart.AddSeconds(waveEvent.Delay) <= DateTime.Now) { if (waveEvent.Offset == 0 && waveEvent.RunTimes > 0) { waveEvent.Events.ForEach(e => EventHelper.Instance.RunEvent(e)); waveEvent.RunTimes--; } waveEvent.Offset = waveEvent.Offset > 0 ? (byte)(waveEvent.Offset - 1) : (byte)0; waveEvent.LastStart = DateTime.Now; } }); try { if (!Monsters.Any(s => s.IsAlive && s.Owner?.Character == null && s.Owner?.Mate == null) && DelayedMonsters.Count == 0) { List <EventContainer> OnMapCleanCopy = OnMapClean.ToList(); OnMapCleanCopy.ForEach(e => EventHelper.Instance.RunEvent(e)); OnMapClean.RemoveAll(s => s != null && OnMapCleanCopy.Contains(s)); } if (!IsSleeping) { RemoveMapItem(); } } catch (Exception e) { Logger.Error(e); } } }); }
internal void StartLife() { Observable.Interval(TimeSpan.FromSeconds(5)).Subscribe(x => { if (InstanceBag?.EndState != 1) { Parallel.ForEach(WaveEvents, waveEvent => { if (waveEvent.LastStart.AddSeconds(waveEvent.Delay) <= DateTime.Now) { if (waveEvent.Offset == 0) { waveEvent.Events.ForEach(e => EventHelper.Instance.RunEvent(e)); } waveEvent.Offset = waveEvent.Offset > 0 ? (byte)(waveEvent.Offset - 1) : (byte)0; waveEvent.LastStart = DateTime.Now; } }); try { if (!Monsters.Any(s => s.IsAlive)) { OnMapClean.ForEach(e => EventHelper.Instance.RunEvent(e)); OnMapClean.RemoveAll(s => s != null); } if (!IsSleeping) { RemoveMapItem(); } } catch (Exception e) { Logger.Error(e); } } }); }
public bool MonsterOccupiesPosition(Position position) { return(Monsters.Any(monster => Equals(monster.Position, position))); }