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}"); } }
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); }
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)); }
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())); }
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); }
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}"); } }