Ejemplo n.º 1
0
 public NpcMonsterComponent(IEntity entity, MapNpcDto dto)
 {
     Entity          = entity;
     Vnum            = dto.NpcMonsterId;
     MapNpcMonsterId = dto.Id;
     MapId           = dto.MapId;
     IsAggressive    = !dto.NpcMonster.NoAggresiveIcon;
 }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 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) }
     };
 }
Ejemplo n.º 4
0
        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
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }