public NpcMonsterComponent(IEntity entity, MapNpcDto dto) { Entity = entity; Vnum = dto.NpcMonsterId; MapNpcMonsterId = dto.Id; MapId = dto.MapId; IsAggressive = !dto.NpcMonster.NoAggresiveIcon; }
public async Task InsertMapNpcsAsync(List <string[]> packetList) { var npcmonsterdb = _npcMonsterDao.LoadAll().ToList(); var mapnpcdb = _mapNpcDao.LoadAll().ToList(); var npcCounter = 0; short map = 0; var npcs = new List <MapNpcDto>(); var npcMvPacketsList = packetList.Where(o => o.Length > 14 && o[0].Equals("mv") && o[1].Equals("2") && long.Parse(o[2]) < 20000).GroupBy(s => s[2]).Select(s => Convert.ToInt32(s.First()[2])).ToList(); var effPacketsDictionary = packetList.Where(o => o[0].Equals("eff") && o[1].Equals("2") && long.Parse(o[2]) <= 20000).GroupBy(s => Convert.ToInt16(s[2])).ToDictionary(x => x.Key, x => Convert.ToInt16(x.First()[3])); var npcTalks = _npcTalkDao.LoadAll().ToDictionary(s => s.DialogId, s => s); foreach (var currentPacket in packetList.Where(o => (o.Length > 7 && o[0].Equals("in") && (o[1] == "2") && long.Parse(o[3]) <= 20000) || o[0].Equals("at"))) { if ((currentPacket.Length > 5) && (currentPacket[0] == "at")) { map = short.Parse(currentPacket[2]); continue; } var mapnpcid = short.Parse(currentPacket[3]); var npctest = new MapNpcDto { MapX = short.Parse(currentPacket[4]), MapY = short.Parse(currentPacket[5]), MapId = map, VNum = short.Parse(currentPacket[2]), MapNpcId = mapnpcid, Effect = effPacketsDictionary.ContainsKey(mapnpcid) ? effPacketsDictionary[mapnpcid] : (short)0, EffectDelay = 4750, IsMoving = npcMvPacketsList.Contains(mapnpcid), Direction = byte.Parse(currentPacket[6]), Dialog = npcTalks.ContainsKey(short.Parse(currentPacket[9])) ? short.Parse(currentPacket[9]) : (short?)null, IsSitting = currentPacket[13] != "1", IsDisabled = false }; if ((npcmonsterdb.FirstOrDefault(s => s.NpcMonsterVNum.Equals(npctest.VNum)) == null) || (mapnpcdb.FirstOrDefault(s => s.MapNpcId.Equals(npctest.MapNpcId)) != null) || (npcs.Count(i => i.MapNpcId == npctest.MapNpcId) != 0)) { continue; } npcs.Add(npctest); npcCounter++; } await _mapNpcDao.TryInsertOrUpdateAsync(npcs).ConfigureAwait(false); _logger.Information(LogLanguage.Instance.GetMessageFromKey(LogLanguageKey.NPCS_PARSED), npcCounter); }
public NpcEntity(MapNpcDto npc) : base(EntityType.Npc) { Components = new Dictionary <Type, IComponent> { { typeof(BattleComponent), new BattleComponent(this) }, { typeof(VisibilityComponent), new VisibilityComponent(this) }, { typeof(MovableComponent), new MovableComponent(this) { Actual = new Position <short>(npc.MapX, npc.MapY), Destination = new Position <short>(npc.MapX, npc.MapY), DirectionType = npc.Position } }, { typeof(NpcMonsterComponent), new NpcMonsterComponent(this, npc) } }; }
public NpcEntity(MapNpcDto npc, ShopDto shop) : base(VisualType.Npc, npc.Id) { Movable = new MovableComponent(this, npc.IsMoving ? npc.NpcMonster.Speed : (byte)0) { Actual = new Position <short>(npc.MapX, npc.MapY), Destination = new Position <short>(npc.MapX, npc.MapY), DirectionType = npc.Position }; Speed = (byte)(npc.IsMoving ? npc.NpcMonster.Speed : 0); MapNpc = npc; Level = npc.NpcMonster.Level; Hp = npc.NpcMonster.MaxHp; Mp = npc.NpcMonster.MaxMp; HpMax = npc.NpcMonster.MaxHp; MpMax = npc.NpcMonster.MaxMp; BasicArea = npc.NpcMonster.BasicArea; Shop = shop != null ? new Shop(shop, this) : null; SkillComponent = new SkillComponent(this); _visibility = new VisibilityComponent(this); Components = new Dictionary <Type, IComponent> { { typeof(VisibilityComponent), _visibility }, { typeof(MovableComponent), Movable }, { typeof(NpcMonsterComponent), new NpcMonsterComponent(this, npc) }, { typeof(SkillComponent), SkillComponent } }; #region Stat Defence = npc.NpcMonster.CloseDefence; DefenceDodge = npc.NpcMonster.DefenceDodge; DistanceDefence = npc.NpcMonster.DistanceDefence; DistanceDefenceDodge = npc.NpcMonster.DistanceDefenceDodge; MagicalDefence = npc.NpcMonster.MagicDefence; MinHit = npc.NpcMonster.DamageMinimum; MaxHit = npc.NpcMonster.DamageMaximum; HitRate = (byte)npc.NpcMonster.Concentrate; #endregion Stat }
public void InsertMapNpcs(List <string[]> packetList) { var npcCounter = 0; short map = 0; var npcs = new List <MapNpcDto>(); var npcMvPacketsList = new List <int>(); var effPacketsDictionary = new Dictionary <int, short>(); foreach (var currentPacket in packetList.Where(o => o[0].Equals("mv") && o[1].Equals("2"))) { if (long.Parse(currentPacket[2]) >= 20000) { continue; } if (!npcMvPacketsList.Contains(Convert.ToInt32(currentPacket[2]))) { npcMvPacketsList.Add(Convert.ToInt32(currentPacket[2])); } } foreach (var currentPacket in packetList.Where(o => o[0].Equals("eff") && o[1].Equals("2"))) { if (long.Parse(currentPacket[2]) >= 20000) { continue; } if (!effPacketsDictionary.ContainsKey(Convert.ToInt32(currentPacket[2]))) { effPacketsDictionary.Add(Convert.ToInt32(currentPacket[2]), Convert.ToInt16(currentPacket[3])); } } foreach (var currentPacket in packetList.Where(o => o[0].Equals("in") || o[0].Equals("at"))) { if (currentPacket.Length > 5 && currentPacket[0] == "at") { map = short.Parse(currentPacket[2]); continue; } if (currentPacket.Length <= 7 || currentPacket[0] != "in" || currentPacket[1] != "2") { continue; } var npctest = new MapNpcDto { MapX = short.Parse(currentPacket[4]), MapY = short.Parse(currentPacket[5]), MapId = map, VNum = short.Parse(currentPacket[2]) }; if (long.Parse(currentPacket[3]) > 20000) { continue; } npctest.MapNpcId = short.Parse(currentPacket[3]); if (effPacketsDictionary.ContainsKey(npctest.MapNpcId)) { npctest.Effect = effPacketsDictionary[npctest.MapNpcId]; } npctest.EffectDelay = 4750; npctest.IsMoving = npcMvPacketsList.Contains(npctest.MapNpcId); npctest.Direction = byte.Parse(currentPacket[6]); npctest.Dialog = short.Parse(currentPacket[9]); npctest.IsSitting = currentPacket[13] != "1"; npctest.IsDisabled = false; if (DaoFactory.NpcMonsterDao.FirstOrDefault(s => s.NpcMonsterVNum.Equals(npctest.VNum)) == null || DaoFactory.MapNpcDao.FirstOrDefault(s => s.MapNpcId.Equals(npctest.MapNpcId)) != null || npcs.Count(i => i.MapNpcId == npctest.MapNpcId) != 0) { continue; } npcs.Add(npctest); npcCounter++; } IEnumerable <MapNpcDto> npcDtos = npcs; DaoFactory.MapNpcDao.InsertOrUpdate(npcDtos); _logger.Information(LogLanguage.Instance.GetMessageFromKey(LanguageKey.NPCS_PARSED), npcCounter); }
public void Setup() { TypeAdapterConfig.GlobalSettings.ForDestinationType <IInitializable>().AfterMapping(dest => Task.Run(() => dest.Initialize())); TypeAdapterConfig <MapNpcDto, MapNpc> .NewConfig().ConstructUsing(src => new MapNpc(null, _shopDao, _shopItemDao, new List <NpcMonsterDto>(), _logger)); PacketFactory.Initialize <NoS0575Packet>(); var contextBuilder = new DbContextOptionsBuilder <NosCoreContext>().UseInMemoryDatabase( databaseName: Guid.NewGuid().ToString()); DataAccessHelper.Instance.InitializeForTest(contextBuilder.Options); var account = new AccountDto { Name = "AccountTest", Password = "******".ToSha512() }; _accountDao.InsertOrUpdate(ref account); var npc = new MapNpcDto(); _mapNpcDao.InsertOrUpdate(ref npc); var instanceAccessService = new MapInstanceProvider(new List <MapDto> { _map }, new MapItemProvider(new List <IHandler <MapItem, Tuple <MapItem, GetPacket> > >()), _mapNpcDao, _mapMonsterDao, _portalDao, new Adapter(), _logger); instanceAccessService.Initialize(); var items = new List <ItemDto> { new Item { Type = PocketType.Main, VNum = 1012, IsDroppable = true }, new Item { Type = PocketType.Main, VNum = 1013 }, new Item { Type = PocketType.Equipment, VNum = 1, ItemType = ItemType.Weapon }, new Item { Type = PocketType.Equipment, VNum = 2, EquipmentSlot = EquipmentType.Fairy, Element = 2 }, new Item { Type = PocketType.Equipment, VNum = 912, ItemType = ItemType.Specialist, ReputationMinimum = 2, Element = 1 }, new Item { Type = PocketType.Equipment, VNum = 924, ItemType = ItemType.Fashion }, new Item { Type = PocketType.Main, VNum = 1078, ItemType = ItemType.Special, Effect = ItemEffectType.DroppedSpRecharger, EffectValue = 10_000, WaitDelay = 5_000 } }; _item = new ItemProvider(items, new List <IHandler <Item, Tuple <IItemInstance, UseItemPacket> > >()); var conf = new WorldConfiguration { MaxItemAmount = 999, BackpackSize = 99 }; _session = new ClientSession(conf, new List <PacketController> { new DefaultPacketController(conf, instanceAccessService, null, _logger) }, instanceAccessService, null, _logger); _handler = new NpcPacketController(new WorldConfiguration(), new NrunProvider(new List <IHandler <Tuple <IAliveEntity, NrunPacket>, Tuple <IAliveEntity, NrunPacket> > > { new ChangeClassHandler() }), _logger); var _chara = new GameObject.Character(new InventoryService(items, _session.WorldConfiguration, _logger), null, null, _characterRelationDao, _characterDao, _itemInstanceDao, _accountDao, _logger) { CharacterId = 1, Name = "TestExistingCharacter", Slot = 1, AccountId = account.AccountId, MapId = 0, State = CharacterState.Active, Account = account }; var channelMock = new Mock <IChannel>(); _session.RegisterChannel(channelMock.Object); _session.InitializeAccount(account); _session.SessionId = 1; _session.SetCharacter(_chara); var mapinstance = instanceAccessService.GetBaseMapById(0); _session.Character.MapInstance = instanceAccessService.GetBaseMapById(0); _session.Character.MapInstance = mapinstance; Broadcaster.Instance.RegisterSession(_session); }