/// <summary> /// $AddMonster Command /// </summary> /// <param name="addMonsterPacket"></param> public void AddMonster(AddMonsterPacket addMonsterPacket) { Logger.Debug("Add Monster Command", Session.SessionId); if (addMonsterPacket != null) { if (!Session.HasCurrentMap) { return; } NpcMonster npcmonster = ServerManager.GetNpc(addMonsterPacket.MonsterVNum); if (npcmonster == null) { return; } MapMonsterDTO monst = new MapMonsterDTO() { MonsterVNum = addMonsterPacket.MonsterVNum, MapY = Session.Character.MapY, MapX = Session.Character.MapX, MapId = Session.Character.MapId, Position = (byte)Session.Character.Direction, IsMoving = addMonsterPacket.IsMoving, MapMonsterId = Session.CurrentMap.GetNextMonsterId() }; // TODO Speed up with DoesMonsterExist if (DAOFactory.MapMonsterDAO.LoadById(monst.MapMonsterId) == null) { DAOFactory.MapMonsterDAO.Insert(monst); MapMonster monster = DAOFactory.MapMonsterDAO.LoadById(monst.MapMonsterId) as MapMonster; if (monster != null) { monster.Initialize(Session.CurrentMap); monster.StartLife(); Session.CurrentMap.AddMonster(monster); Session.CurrentMap?.Broadcast(monster.GenerateIn3()); } } Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("DONE"), 10)); } else { Session.SendPacket(Session.Character.GenerateSay("$AddMonster VNUM MOVE", 10)); } }
public void ImportMonsters() { int monsterCounter = 0; short map = 0; List<int> mobMvPacketsList = new List<int>(); List<MapMonsterDTO> monsters = new List<MapMonsterDTO>(); foreach (string[] 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 (string[] 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") { MapMonsterDTO monster = new MapMonsterDTO { MapId = map, MonsterVNum = short.Parse(currentPacket[2]), MapMonsterId = int.Parse(currentPacket[3]), MapX = short.Parse(currentPacket[4]), MapY = short.Parse(currentPacket[5]), Position = (byte)(currentPacket[6] == String.Empty ? 0 : byte.Parse(currentPacket[6])), IsDisabled = false }; monster.IsMoving = mobMvPacketsList.Contains(monster.MapMonsterId); if (DAOFactory.NpcMonsterDAO.LoadByVNum(monster.MonsterVNum) == null || DAOFactory.MapMonsterDAO.LoadById(monster.MapMonsterId) != null || monsters.Count(i => i.MapMonsterId == monster.MapMonsterId) != 0) { continue; } monsters.Add(monster); monsterCounter++; } } DAOFactory.MapMonsterDAO.Insert(monsters); Logger.Log.Info(String.Format(Language.Instance.GetMessageFromKey("MONSTERS_PARSED"), monsterCounter)); }