public Task <IMonsterEntity> CreateMonsterEntityAsync(MapMonsterDto mapMonster)
        {
            // todo implement that
            var skills = new List <NpcMonsterSkillDto>();

            return(Task.FromResult(new MonsterEntity(mapMonster, skills) as IMonsterEntity));
        }
Beispiel #2
0
        public void DtoToGoMappingWorks()
        {
            var monsterDto = new MapMonsterDto();
            var monsterGo  = _mapper.Map <MapMonster>(monsterDto);

            Assert.IsNotNull(monsterGo);
        }
Beispiel #3
0
        public void DtoToEntityMappingWorks()
        {
            var monsterDto    = new MapMonsterDto();
            var monsterEntity = _mapper.Map <Database.Entities.MapMonster>(monsterDto);

            Assert.IsNotNull(monsterEntity);
        }
Beispiel #4
0
        public void DtoToGoMappingWorks()
        {
            var monsterDto = new MapMonsterDto();
            var monsterGo  = monsterDto.Adapt <GameObject.MapMonster>();

            Assert.IsNotNull(monsterGo);
        }
Beispiel #5
0
 public MonsterEntity(MapMonsterDto dto) : base(EntityType.Monster)
 {
     Components = new Dictionary <Type, IComponent>
     {
         {
             typeof(VisibilityComponent), new VisibilityComponent(this)
             {
                 IsVisible = true
             }
         },
         { typeof(BattleComponent), new BattleComponent(this)
           {
               Hp    = dto.NpcMonster.MaxHp,
               HpMax = dto.NpcMonster.MaxHp,
               Mp    = dto.NpcMonster.MaxMp,
               MpMax = dto.NpcMonster.MaxMp
           } },
         {
             typeof(MovableComponent), new MovableComponent(this)
             {
                 Actual = new Position <short> {
                     X = dto.MapX, Y = dto.MapY
                 },
                 Destination = new Position <short> {
                     X = dto.MapX, Y = dto.MapY
                 }
             }
         },
         { typeof(NpcMonsterComponent), new NpcMonsterComponent(this, dto) }
     };
 }
Beispiel #6
0
 public NpcMonsterComponent(IEntity entity, MapMonsterDto dto)
 {
     Entity          = entity;
     Vnum            = dto.NpcMonsterId;
     MapNpcMonsterId = dto.Id;
     MapId           = dto.MapId;
     IsAggressive    = !dto.NpcMonster.NoAggresiveIcon;
 }
Beispiel #7
0
        public void InsertMapMonster(List <string[]> packetList)
        {
            var   monsterCounter   = 0;
            short map              = 0;
            var   mobMvPacketsList = new List <int>();
            var   monsters         = new List <MapMonsterDto>();

            foreach (var currentPacket in packetList.Where(o => o[0].Equals("mv") && o[1].Equals("3")))
            {
                if (!mobMvPacketsList.Contains(Convert.ToInt32(currentPacket[2])))
                {
                    mobMvPacketsList.Add(Convert.ToInt32(currentPacket[2]));
                }
            }

            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] != "3")
                {
                    continue;
                }

                var monster = new MapMonsterDto
                {
                    MapId        = map,
                    VNum         = short.Parse(currentPacket[2]),
                    MapMonsterId = int.Parse(currentPacket[3]),
                    MapX         = short.Parse(currentPacket[4]),
                    MapY         = short.Parse(currentPacket[5]),
                    Direction    = (byte)(currentPacket[6] == string.Empty ? 0 : byte.Parse(currentPacket[6])),
                    IsDisabled   = false
                };
                monster.IsMoving = mobMvPacketsList.Contains(monster.MapMonsterId);

                if (DaoFactory.NpcMonsterDao.FirstOrDefault(s => s.NpcMonsterVNum.Equals(monster.VNum)) == null ||
                    DaoFactory.MapMonsterDao.FirstOrDefault(s => s.MapMonsterId.Equals(monster.MapMonsterId)) != null ||
                    monsters.Count(i => i.MapMonsterId == monster.MapMonsterId) != 0)
                {
                    continue;
                }

                monsters.Add(monster);
                monsterCounter++;
            }


            IEnumerable <MapMonsterDto> mapMonsterDtos = monsters;

            DaoFactory.MapMonsterDao.InsertOrUpdate(mapMonsterDtos);
            _logger.Information(LogLanguage.Instance.GetMessageFromKey(LogLanguageKey.MONSTERS_PARSED),
                                monsterCounter);
        }
Beispiel #8
0
        public MonsterEntity(MapMonsterDto dto, IEnumerable <NpcMonsterSkillDto> skills) : base(VisualType.Monster, dto.Id)
        {
            Movable = new MovableComponent(this, dto.IsMoving ? dto.NpcMonster.Speed : (byte)0)
            {
                Actual = new Position <short> {
                    X = dto.MapX, Y = dto.MapY
                },
                Destination = new Position <short> {
                    X = dto.MapX, Y = dto.MapY
                }
            };
            Speed          = (byte)(dto.IsMoving ? dto.NpcMonster.Speed : 0);
            Level          = dto.NpcMonster.Level;
            Hp             = dto.NpcMonster.MaxHp;
            HpMax          = dto.NpcMonster.MaxHp;
            Mp             = dto.NpcMonster.MaxMp;
            MpMax          = dto.NpcMonster.MaxMp;
            BasicArea      = dto.NpcMonster.BasicArea;
            SkillComponent = new SkillComponent(this, skills);
            NpcMonster     = dto.NpcMonster;
            MapMonster     = dto;
            _visibility    = new VisibilityComponent(this);
            Components     = new Dictionary <Type, IComponent>
            {
                { typeof(VisibilityComponent), _visibility },
                { typeof(MovableComponent), Movable },
                { typeof(NpcMonsterComponent), new NpcMonsterComponent(this, dto) },
                { typeof(SkillComponent), SkillComponent }
            };

            #region Stat

            Defence              = dto.NpcMonster.CloseDefence;
            DefenceDodge         = dto.NpcMonster.DefenceDodge;
            DistanceDefence      = dto.NpcMonster.DistanceDefence;
            DistanceDefenceDodge = dto.NpcMonster.DistanceDefenceDodge;
            MagicalDefence       = dto.NpcMonster.MagicDefence;
            MinHit         = dto.NpcMonster.DamageMinimum;
            MaxHit         = dto.NpcMonster.DamageMaximum;
            HitRate        = (byte)dto.NpcMonster.Concentrate;
            CriticalChance = dto.NpcMonster.CriticalChance;
            CriticalRate   = dto.NpcMonster.CriticalRate;

            #endregion Stat
        }
Beispiel #9
0
        public async Task InsertMapMonsterAsync(List <string[]> packetList)
        {
            short map = 0;
            var   mobMvPacketsList = packetList.Where(o => o[0].Equals("mv") && o[1].Equals("3"))
                                     .Select(currentPacket => Convert.ToInt32(currentPacket[2])).Distinct().ToList();
            var monsters     = new List <MapMonsterDto>();
            var mapMonsterdb = _mapMonsterDao.LoadAll().ToList();
            var npcMonsterdb = _npcMonsterDao.LoadAll().ToList();

            foreach (var currentPacket in packetList.Where(o => (o.Length > 7 && o[0].Equals("in") && (o[1] == "3") && long.Parse(o[3]) <= 20000) || o[0].Equals("at")))
            {
                if ((currentPacket.Length > 5) && (currentPacket[0] == "at"))
                {
                    map = short.Parse(currentPacket[2]);
                    continue;
                }

                var monster = new MapMonsterDto
                {
                    MapId        = map,
                    VNum         = short.Parse(currentPacket[2]),
                    MapMonsterId = int.Parse(currentPacket[3]),
                    MapX         = short.Parse(currentPacket[4]),
                    MapY         = short.Parse(currentPacket[5]),
                    Direction    = (byte)(currentPacket[6] == string.Empty ? 0 : byte.Parse(currentPacket[6])),
                    IsDisabled   = false,
                    IsMoving     = mobMvPacketsList.Contains(int.Parse(currentPacket[3]))
                };

                if ((npcMonsterdb.FirstOrDefault(s => s.NpcMonsterVNum.Equals(monster.VNum)) == null) ||
                    (mapMonsterdb.FirstOrDefault(s => s.MapMonsterId.Equals(monster.MapMonsterId)) != null) ||
                    (monsters.Count(i => i.MapMonsterId == monster.MapMonsterId) != 0))
                {
                    continue;
                }

                monsters.Add(monster);
            }

            await _mapMonsterDao.TryInsertOrUpdateAsync(monsters).ConfigureAwait(false);

            _logger.Information(LogLanguage.Instance.GetMessageFromKey(LogLanguageKey.MONSTERS_PARSED),
                                monsters.Count);
        }