Beispiel #1
0
        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));
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
            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);
            }
Beispiel #4
0
        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;
                }
            }
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
 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);
             }
         }
     });
 }
Beispiel #7
0
 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);
             }
         }
     });
 }
Beispiel #8
0
 public bool MonsterOccupiesPosition(Position position)
 {
     return(Monsters.Any(monster => Equals(monster.Position, position)));
 }