public void Setup() { PacketFactory.Initialize <NoS0575Packet>(); Broadcaster.Reset(); var contextBuilder = new DbContextOptionsBuilder <NosCoreContext>().UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()); DataAccessHelper.Instance.InitializeForTest(contextBuilder.Options); var map = new MapDto { MapId = 1 }; DaoFactory.MapDao.InsertOrUpdate(ref map); var account = new AccountDto { Name = "AccountTest", Password = "******".ToSha512() }; DaoFactory.AccountDao.InsertOrUpdate(ref account); WebApiAccess.RegisterBaseAdress(); WebApiAccess.Instance.MockValues = new Dictionary <WebApiRoute, object> { { WebApiRoute.Channel, new List <ChannelInfo> { new ChannelInfo() } }, { WebApiRoute.ConnectedAccount, new List <ConnectedAccount>() } }; var _chara = new CharacterDto { CharacterId = 1, Name = "TestExistingCharacter", Slot = 1, AccountId = account.AccountId, MapId = 1, State = CharacterState.Active }; DaoFactory.CharacterDao.InsertOrUpdate(ref _chara); _itemBuilderService = new ItemBuilderService(new List <Item>(), new List <IHandler <Item, Tuple <IItemInstance, UseItemPacket> > >()); _instanceAccessService = new MapInstanceAccessService(new List <NpcMonsterDto>(), new List <Map> { _map, _mapShop }, new MapItemBuilderService(new List <IHandler <MapItem, Tuple <MapItem, GetPacket> > >()), new MapNpcBuilderService(_itemBuilderService, new List <ShopDto>(), new List <ShopItemDto>(), new List <NpcMonsterDto>(), new List <MapNpcDto>()), new MapMonsterBuilderService(new List <Item>(), new List <ShopDto>(), new List <ShopItemDto>(), new List <NpcMonsterDto>(), new List <MapMonsterDto>())); var channelMock = new Mock <IChannel>(); _session = new ClientSession(null, new List <PacketController> { new DefaultPacketController(null, _instanceAccessService, null) }, _instanceAccessService, null); _session.RegisterChannel(channelMock.Object); _session.InitializeAccount(account); _session.SessionId = 1; var conf = new WorldConfiguration() { BackpackSize = 3, MaxItemAmount = 999, MaxGoldAmount = 999_999_999 }; _handler = new NpcPacketController(conf, new NrunAccessService(new List <IHandler <Tuple <IAliveEntity, NrunPacket>, Tuple <IAliveEntity, NrunPacket> > >())); _handler.RegisterSession(_session); _session.SetCharacter(_chara.Adapt <Character>()); var mapinstance = _instanceAccessService.GetBaseMapById(0); _session.Character.Account = account; _session.Character.MapInstance = _instanceAccessService.GetBaseMapById(0); _session.Character.MapInstance = mapinstance; _session.Character.MapInstance.Portals = new List <Portal> { new Portal { DestinationMapId = _map.MapId, Type = PortalType.Open, SourceMapInstanceId = mapinstance.MapInstanceId, DestinationMapInstanceId = _instanceAccessService.GetBaseMapById(0).MapInstanceId, DestinationX = 5, DestinationY = 5, PortalId = 1, SourceMapId = _map.MapId, SourceX = 0, SourceY = 0, } }; _session.Character.Inventory = new InventoryService(new List <Item>(), conf); Broadcaster.Instance.RegisterSession(_session); }
private ClientSession prepareSessionShop() { var conf = new WorldConfiguration() { BackpackSize = 3, MaxItemAmount = 999, MaxGoldAmount = 999_999_999 }; var session2 = new ClientSession(conf, new List <PacketController> { new DefaultPacketController(null, _instanceAccessService, null) }, _instanceAccessService, null); var channelMock = new Mock <IChannel>(); session2.RegisterChannel(channelMock.Object); var account = new AccountDto { Name = "AccountTest", Password = "******".ToSha512() }; session2.InitializeAccount(account); session2.SessionId = 1; _handler = new NpcPacketController(conf, new NrunAccessService(new List <IHandler <Tuple <IAliveEntity, NrunPacket>, Tuple <IAliveEntity, NrunPacket> > >())); _handler.RegisterSession(session2); session2.SetCharacter(new CharacterDto { CharacterId = 1, Name = "chara2", Slot = 1, AccountId = 1, MapId = 1, State = CharacterState.Active }.Adapt <Character>()); var mapinstance = _instanceAccessService.GetBaseMapById(0); session2.Character.Account = account; session2.Character.MapInstance = _instanceAccessService.GetBaseMapById(0); session2.Character.MapInstance = mapinstance; session2.Character.Inventory = new InventoryService(new List <Item>(), conf); _session.Character.Gold = 500000; var items = new List <Item> { new Item { Type = PocketType.Etc, VNum = 1, IsSoldable = true, Price = 1 }, }; var itemBuilder = new ItemBuilderService(items, new List <IHandler <Item, Tuple <IItemInstance, UseItemPacket> > >()); _session.Character.ItemBuilderService = itemBuilder; var list = new ConcurrentDictionary <int, ShopItem>(); var it = itemBuilder.Create(1, 1, 999); session2.Character.Inventory.AddItemToPocket(it, PocketType.Etc, 0); list.TryAdd(0, new ShopItem { Slot = 0, ItemInstance = it, Type = 0, Price = 1, Amount = 999 }); list.TryAdd(1, new ShopItem { Slot = 1, ItemInstance = it, Type = 0, Price = 1, Amount = 500 }); session2.Character.Shop = new Shop { Session = session2, ShopItems = list }; _session.Character.Inventory.AddItemToPocket(itemBuilder.Create(1, 1, 999), PocketType.Etc, 0); _session.Character.Inventory.AddItemToPocket(itemBuilder.Create(1, 2, 999), PocketType.Etc, 1); return(session2); }
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); }