Exemplo n.º 1
0
 public MapInstance(Map.Map map, Guid guid, bool shopAllowed, MapInstanceType type,
                    IMapItemProvider mapItemProvider, ILogger logger, List <IMapInstanceEventHandler> mapInstanceEventHandler)
 {
     LastPackets     = new ConcurrentQueue <IPacket>();
     XpRate          = 1;
     DropRate        = 1;
     ShopAllowed     = shopAllowed;
     MapInstanceType = type;
     Map             = map;
     MapInstanceId   = guid;
     Portals         = new List <Portal>();
     _monsters       = new ConcurrentDictionary <int, MapMonster>();
     _npcs           = new ConcurrentDictionary <int, MapNpc>();
     MapItems        = new ConcurrentDictionary <long, MapItem>();
     _isSleeping     = true;
     LastUnregister  = SystemTime.Now().AddMinutes(-1);
     ExecutionEnvironment.TryGetCurrentExecutor(out var executor);
     Sessions                 = new DefaultChannelGroup(executor);
     _mapItemProvider         = mapItemProvider;
     _logger                  = logger;
     Requests                 = new Dictionary <MapInstanceEventType, Subject <RequestData <MapInstance> > >();
     _mapInstanceEventHandler = mapInstanceEventHandler;
     foreach (var eventTypes in Enum.GetValues(typeof(MapInstanceEventType)))
     {
         Requests[(MapInstanceEventType)eventTypes !] = new Subject <RequestData <MapInstance> >();
Exemplo n.º 2
0
 public MapInstanceProvider(List <MapDto> maps,
                            IMapItemProvider mapItemProvider, IGenericDao <MapNpcDto> mapNpcs,
                            IGenericDao <MapMonsterDto> mapMonsters, IGenericDao <PortalDto> portalDao, ILogger logger)
 {
     _mapItemProvider = mapItemProvider;
     _mapMonsters     = mapMonsters;
     _portalDao       = portalDao;
     _maps            = maps;
     _mapNpcs         = mapNpcs;
     _logger          = logger;
 }
Exemplo n.º 3
0
 public MapInstanceProvider(List <MapDto> maps, List <NpcMonsterDto> npcMonsters, List <NpcTalkDto> npcTalks, List <ShopDto> shopDtos,
                            IMapItemProvider mapItemProvider, IDao <MapNpcDto, int> mapNpcs,
                            IDao <MapMonsterDto, int> mapMonsters, IDao <PortalDto, int> portalDao, IDao <ShopItemDto, int>?shopItems, ILogger logger)
 {
     _mapItemProvider = mapItemProvider;
     _npcTalks        = npcTalks;
     _npcMonsters     = npcMonsters;
     _mapMonsters     = mapMonsters;
     _portalDao       = portalDao;
     _maps            = maps;
     _mapNpcs         = mapNpcs;
     _logger          = logger;
     _shopItems       = shopItems;
     _shopDtos        = shopDtos;
 }
        public MapInstanceProvider(List <NpcMonsterDto> npcMonsters, List <Map.Map> maps,
                                   IMapItemProvider mapItemProvider, IMapNpcProvider mapNpcProvider,
                                   IMapMonsterProvider mapMonsterProvider)
        {
            var mapPartitioner = Partitioner.Create(maps, EnumerablePartitionerOptions.NoBuffering);
            var mapList        = new ConcurrentDictionary <short, Map.Map>();
            var npccount       = 0;
            var monstercount   = 0;

            Parallel.ForEach(mapPartitioner, new ParallelOptions {
                MaxDegreeOfParallelism = 8
            }, map =>
            {
                var guid           = Guid.NewGuid();
                mapList[map.MapId] = map;
                var newMap         = new MapInstance(map, guid, map.ShopAllowed, MapInstanceType.BaseMapInstance, npcMonsters,
                                                     mapItemProvider, mapNpcProvider, mapMonsterProvider);
                MapInstances.TryAdd(guid, newMap);
                newMap.LoadMonsters();
                newMap.LoadNpcs();
                newMap.StartLife();
                monstercount += newMap.Monsters.Count;
                npccount     += newMap.Npcs.Count;
            });
            var mapInstancePartitioner =
                Partitioner.Create(MapInstances.Values, EnumerablePartitionerOptions.NoBuffering);

            Parallel.ForEach(mapInstancePartitioner, new ParallelOptions {
                MaxDegreeOfParallelism = 8
            }, mapInstance =>
            {
                var partitioner = Partitioner.Create(
                    DaoFactory.PortalDao.Where(s => s.SourceMapId.Equals(mapInstance.Map.MapId)),
                    EnumerablePartitionerOptions.None);
                var portalList = new ConcurrentDictionary <int, Portal>();
                Parallel.ForEach(partitioner, portalDto =>
                {
                    Portal portal = portalDto.Adapt <Portal>();
                    portal.SourceMapInstanceId      = mapInstance.MapInstanceId;
                    portal.DestinationMapInstanceId = GetBaseMapInstanceIdByMapId(portal.DestinationMapId);
                    portalList[portal.PortalId]     = portal;
                });
                mapInstance.Portals.AddRange(portalList.Select(s => s.Value));
            });
            maps.AddRange(mapList.Select(s => s.Value));
        }
Exemplo n.º 5
0
 public MapInstance(Map.Map map, Guid guid, bool shopAllowed, MapInstanceType type,
                    IMapItemProvider mapItemProvider, IAdapter adapter, ILogger logger)
 {
     XpRate          = 1;
     DropRate        = 1;
     ShopAllowed     = shopAllowed;
     MapInstanceType = type;
     Map             = map;
     MapInstanceId   = guid;
     Portals         = new List <Portal>();
     _monsters       = new ConcurrentDictionary <int, MapMonster>();
     _npcs           = new ConcurrentDictionary <int, MapNpc>();
     MapItems        = new ConcurrentDictionary <long, MapItem>();
     _isSleeping     = true;
     LastUnregister  = SystemTime.Now().AddMinutes(-1);
     ExecutionEnvironment.TryGetCurrentExecutor(out var executor);
     Sessions         = new DefaultChannelGroup(executor);
     _mapItemProvider = mapItemProvider;
     _adapter         = adapter;
     _logger          = logger;
 }