示例#1
0
        private void InitializeNpcs()
        {
            var dropGenerator = new DefaultDropGenerator(this.Context.Configuration, Rand.GetRandomizer());

            foreach (var map in this.Context.MapList.Values.Where(m => m.Definition.MonsterSpawns.Any()))
            {
                Logger.Debug($"Start creating monster instances for map {map}");
                foreach (var spawn in map.Definition.MonsterSpawns.Where(s => s.SpawnTrigger == SpawnTrigger.Automatic))
                {
                    for (int i = 0; i < spawn.Quantity; i++)
                    {
                        var monsterDef = spawn.MonsterDefinition;
                        NonPlayerCharacter npc;

                        // TODO: Check if the condition is correct... NPCs are not attackable, but some might need to be (castle gates etc.)
                        if (monsterDef.AttackDelay > TimeSpan.Zero)
                        {
                            Logger.Debug($"Creating monster {spawn}");
                            npc = new Monster(spawn, monsterDef, map, dropGenerator, new BasicMonsterIntelligence(map));
                        }
                        else
                        {
                            Logger.Debug($"Creating npc {spawn}");
                            npc = new NonPlayerCharacter(spawn, monsterDef, map);
                        }

                        npc.Initialize();
                        map.Add(npc);
                    }
                }

                Logger.Debug($"Finished creating monster instances for map {map}");
            }
        }
示例#2
0
        public void TestDropFail()
        {
            var config    = this.GetGameConfig();
            var generator = new DefaultDropGenerator(config, this.GetRandomizer(9999));
            var item      = generator.GetItemDropsOrAddMoney(this.GetMonster(1), 0, TestHelper.GetPlayer()).FirstOrDefault();

            Assert.That(item, Is.Null);
        }
示例#3
0
        public void TestBaseItemDropItem()
        {
            var config    = this.GetGameConfig();
            var generator = new DefaultDropGenerator(config, this.GetRandomizer(0));
            var item      = generator.GetItemDropsOrAddMoney(this.GetMonster(1), 0, TestHelper.GetPlayer()).FirstOrDefault();

            var possibleItemDefinition = config.BaseDropItemGroups.First().PossibleItems.First();

            Assert.That(item, Is.Not.Null);

            // ReSharper disable once PossibleNullReferenceException
            Assert.That(item.Definition, Is.SameAs(possibleItemDefinition));
        }
示例#4
0
        public void TestItemDropItemByMonster()
        {
            var config  = this.GetGameConfig();
            var monster = this.GetMonster(1);

            monster.DropItemGroups.Add(this.GetDropItemGroup(3000, SpecialItemType.Ancient, true));
            var generator = new DefaultDropGenerator(config, this.GetRandomizer2(0, 0.5));
            var item      = generator.GetItemDropsOrAddMoney(monster, 1, TestHelper.GetPlayer()).FirstOrDefault();

            Assert.That(item, Is.Not.Null);

            // ReSharper disable once PossibleNullReferenceException
            Assert.That(item.Definition, Is.SameAs(monster.DropItemGroups.First().PossibleItems.First()));
        }
示例#5
0
        public void TestItemDropMoney()
        {
            const int startMoney = 10000;
            var       experience = 1;
            var       moneyDrop  = experience + DefaultDropGenerator.BaseMoneyDrop;

            var player = TestHelper.GetPlayer();

            player.GameContext.Configuration.MaximumInventoryMoney = int.MaxValue;
            player.Money = startMoney;
            var config    = this.GetGameConfig();
            var generator = new DefaultDropGenerator(config, this.GetRandomizer(4000));
            var item      = generator.GetItemDropsOrAddMoney(this.GetMonster(1), experience, player).FirstOrDefault();

            Assert.That(player.Money, Is.EqualTo(startMoney + moneyDrop));
            Assert.That(item, Is.Null);
        }
示例#6
0
        private void InitializeNpcs()
        {
            ushort npcId         = 0;
            var    dropGenerator = new DefaultDropGenerator(this.Context.Configuration, Rand.GetRandomizer());

            foreach (var map in this.Context.MapList.Values.Where(m => m.Definition.MonsterSpawns.Any()))
            {
                Logger.Debug($"Start creating monster instances for map {map}");
                foreach (var spawn in map.Definition.MonsterSpawns)
                {
                    for (int i = 0; i < spawn.Quantity; i++)
                    {
                        npcId++;
                        if (npcId > this.Context.ServerConfiguration.MaximumNPCs)
                        {
                            throw new InvalidOperationException(
                                      "Maximum npc count exceeded. Either increase the limit or remove monster instances.");
                        }

                        var monsterDef = spawn.MonsterDefinition;
                        if (monsterDef.AttackDelay > TimeSpan.Zero)
                        {
                            Logger.Debug($"Creating monster {spawn}");
                            var monster = new Monster(spawn, monsterDef, npcId, map, dropGenerator, new BasicMonsterIntelligence(map));
                            monster.Respawn();
                        }
                        else
                        {
                            Logger.Debug($"Creating npc {spawn}");
                            var npc = new NonPlayerCharacter(spawn, monsterDef, npcId, map);
                            npc.Respawn();
                        }
                    }
                }

                Logger.Debug($"Finished creating monster instances for map {map}");
            }
        }