public void Initialize() { NpcMonster = _npcMonsters.Find(s => s.NpcMonsterVNum == VNum); Mp = NpcMonster?.MaxMp ?? 0; Hp = NpcMonster?.MaxHp ?? 0; Speed = NpcMonster?.Speed ?? 0; PositionX = MapX; PositionY = MapY; IsAlive = true; Requests = new Subject <RequestData>(); Requests.Subscribe(ShowDialog); var shopObj = _shops.FirstOrDefault(s => s.MapNpcId == MapNpcId); if (shopObj != null) { var shopItemsDto = _shopItems.Where(s => s.ShopId == shopObj.ShopId); var shopItemsList = new ConcurrentDictionary <int, ShopItem>(); Parallel.ForEach(shopItemsDto, shopItemGrouping => { var shopItem = shopItemGrouping.Adapt <ShopItem>(); shopItem.ItemInstance = _itemProvider.Create(shopItemGrouping.ItemVNum, -1); shopItemsList[shopItemGrouping.ShopItemId] = shopItem; }); _shop = shopObj.Adapt <Shop>(); _shop.ShopItems = shopItemsList; } }
public void Test_Transform_Vehicle() { _session.Character.IsVehicled = true; _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_item.Create(912, 1), _session.Character.CharacterId)); var item = _session.Character.InventoryService.First(); item.Value.Type = NoscorePocketType.Wear; item.Value.Slot = (byte)EquipmentType.Sp; _spTransformPacketHandler.Execute(new SpTransformPacket { Type = SlPacketType.WearSp }, _session); var packet = (MsgPacket)_session.LastPackets.FirstOrDefault(s => s is MsgPacket); Assert.IsTrue(packet.Message == Language.Instance.GetMessageFromKey(LanguageKey.REMOVE_VEHICLE, _session.Account.Language)); }
public void Test_ReceiveGift() { var item = _item.Create(1); var mail = new MailData { ItemInstance = (ItemInstanceDto)item, MailDto = new MailDto { ItemInstanceId = item.Id } }; _itemInstanceDao.Setup(o => o.FirstOrDefault(It.IsAny <Expression <Func <IItemInstanceDto, bool> > >())) .Returns(item); _mailHttpClient.Setup(s => s.GetGift(1, _session.Character.CharacterId, false)).Returns(mail); _pclPacketHandler.Execute(new PclPacket { Type = 4, GiftId = 1 }, _session); var packet = (ParcelPacket)_session.LastPackets.FirstOrDefault(s => s is ParcelPacket); Assert.IsTrue(packet.Type == 2); }
public void Test_SpeakerWithItem() { _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_itemProvider.Create(1, 1), 0)); ExecuteGuriEventHandler(new GuriPacket { Type = GuriPacketType.TextInput, Argument = 3, VisualId = 0, Data = 999, Value = "2 0 {test}" }); var sayitempacket = (SayItemPacket)Broadcaster.Instance.LastPackets.FirstOrDefault(s => s is SayItemPacket); Assert.IsNotNull(sayitempacket); var saypacket = (SayPacket)Broadcaster.Instance.LastPackets.FirstOrDefault(s => s is SayPacket); Assert.IsNull(saypacket); }
private Shop LoadShop(int mapNpcId) { Shop shop = null; var shopObj = DaoFactory.ShopDao.FirstOrDefault(s => s.MapNpcId == mapNpcId); if (shopObj != null) { var shopItemsDto = DaoFactory.ShopItemDao.Where(s => s.ShopId == shopObj.ShopId); var shopItems = new ConcurrentDictionary <int, ShopItem>(); Parallel.ForEach(shopItemsDto, shopItemGrouping => { var shopItem = shopItemGrouping.Adapt <ShopItem>(); shopItem.ItemInstance = _itemProvider.Create(shopItemGrouping.ItemVNum, -1); shopItems[shopItemGrouping.ShopItemId] = shopItem; }); shop = shopObj.Adapt <Shop>(); shop.ShopItems = shopItems; } return(shop); }
public void Test_Wear_SpInLoading() { _session.Character.HeroLevel = 1; var items = new List <ItemDto> { new Item { Type = NoscorePocketType.Equipment, VNum = 1, EquipmentSlot = EquipmentType.Sp }, new Item { Type = NoscorePocketType.Equipment, VNum = 2, EquipmentSlot = EquipmentType.Sp } }; _item = new ItemProvider(items, new List <IEventHandler <Item, Tuple <InventoryItemInstance, UseItemPacket> > > { new WearEventHandler(_logger) }); _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_item.Create(1, 1), _session.Character.CharacterId)); _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_item.Create(2, 1), _session.Character.CharacterId)); _wearPacketHandler.Execute(new WearPacket { InventorySlot = 0, Type = PocketType.Equipment }, _session); _session.Character.SpCooldown = 30; _wearPacketHandler.Execute(new WearPacket { InventorySlot = 1, Type = PocketType.Equipment }, _session); Assert.IsTrue(_session.Character.InventoryService.Any(s => (s.Value.ItemInstance.ItemVNum == 2) && (s.Value.Type == NoscorePocketType.Equipment))); var packet = (MsgPacket)_session.LastPackets.FirstOrDefault(s => s is MsgPacket); Assert.IsTrue(packet.Message == string.Format(Language.Instance.GetMessageFromKey(LanguageKey.SP_INLOADING, _session.Account.Language), 30)); }
public void Test_Wear_WearFairy_SpUseBadElement() { var items = new List <ItemDto> { new Item { Type = NoscorePocketType.Equipment, VNum = 1, EquipmentSlot = EquipmentType.Fairy, Element = ElementType.Light }, new Item { Type = NoscorePocketType.Equipment, VNum = 2, EquipmentSlot = EquipmentType.Sp, Element = ElementType.Fire, SecondaryElement = ElementType.Water } }; _item = new ItemProvider(items, new List <IEventHandler <Item, Tuple <InventoryItemInstance, UseItemPacket> > > { new WearEventHandler(_logger) }); _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_item.Create(1, 1), _session.Character.CharacterId)); _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_item.Create(2, 1), _session.Character.CharacterId)); _wearPacketHandler.Execute(new WearPacket { InventorySlot = 1, Type = PocketType.Equipment }, _session); _session.Character.UseSp = true; _wearPacketHandler.Execute(new WearPacket { InventorySlot = 0, Type = PocketType.Equipment }, _session); Assert.IsTrue(_session.Character.InventoryService.Any(s => (s.Value.ItemInstance.ItemVNum == 1) && (s.Value.Type == NoscorePocketType.Equipment))); var packet = (MsgPacket)_session.LastPackets.FirstOrDefault(s => s is MsgPacket); Assert.IsTrue(packet.Message == Language.Instance.GetMessageFromKey(LanguageKey.BAD_FAIRY, _session.Account.Language)); }
public void Test_Wear_DestroyedSp() { _session.Character.HeroLevel = 1; var items = new List <ItemDto> { new Item { Type = NoscorePocketType.Equipment, VNum = 1, EquipmentSlot = EquipmentType.Sp } }; _item = new ItemProvider(items, new List <IEventHandler <Item, Tuple <InventoryItemInstance, UseItemPacket> > > { new WearEventHandler(_logger) }); _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_item.Create(1, 1, -2), _session.Character.CharacterId)); _wearPacketHandler.Execute(new WearPacket { InventorySlot = 0, Type = PocketType.Equipment }, _session); Assert.IsTrue(_session.Character.InventoryService.Any(s => s.Value.Type == NoscorePocketType.Equipment)); var packet = (MsgPacket)_session.LastPackets.FirstOrDefault(s => s is MsgPacket); Assert.IsTrue(packet.Message == Language.Instance.GetMessageFromKey(LanguageKey.CANT_EQUIP_DESTROYED_SP, _session.Account.Language)); }
public void Test_Wear_SpInUse() { _session.Character.HeroLevel = 1; var items = new List <ItemDto> { new Item { Type = NoscorePocketType.Equipment, VNum = 1, EquipmentSlot = EquipmentType.Sp }, new Item { Type = NoscorePocketType.Equipment, VNum = 2, EquipmentSlot = EquipmentType.Sp } }; _item = new ItemProvider(items, new List <IEventHandler <Item, Tuple <InventoryItemInstance, UseItemPacket> > > { new WearEventHandler(_logger) }); _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_item.Create(1, 1), _session.Character.CharacterId)); _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_item.Create(2, 1), _session.Character.CharacterId)); _wearPacketHandler.Execute(new WearPacket { InventorySlot = 0, Type = PocketType.Equipment }, _session); _session.Character.UseSp = true; _wearPacketHandler.Execute(new WearPacket { InventorySlot = 1, Type = PocketType.Equipment }, _session); Assert.IsTrue(_session.Character.InventoryService.Any(s => (s.Value.ItemInstance.ItemVNum == 2) && (s.Value.Type == NoscorePocketType.Equipment))); var packet = (SayPacket)_session.LastPackets.FirstOrDefault(s => s is SayPacket); Assert.IsTrue((packet.Message == Language.Instance.GetMessageFromKey(LanguageKey.SP_BLOCKED, _session.Account.Language)) && (packet.Type == SayColorType.Yellow)); }
public void Test_Wear_BadHeroLevel() { _session.Character.HeroLevel = 1; var items = new List <ItemDto> { new Item { Type = NoscorePocketType.Equipment, VNum = 1, EquipmentSlot = EquipmentType.MainWeapon, IsHeroic = true, LevelMinimum = 3 } }; _item = new ItemProvider(items, new List <IEventHandler <Item, Tuple <InventoryItemInstance, UseItemPacket> > > { new WearEventHandler(_logger) }); _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_item.Create(1, 1), _session.Character.CharacterId)); _wearPacketHandler.Execute(new WearPacket { InventorySlot = 0, Type = PocketType.Equipment }, _session); Assert.IsTrue(_session.Character.InventoryService.All(s => s.Value.Type == NoscorePocketType.Equipment)); var packet = (SayPacket)_session.LastPackets.FirstOrDefault(s => s is SayPacket); Assert.IsTrue((packet.Message == Language.Instance.GetMessageFromKey(LanguageKey.BAD_EQUIPMENT, _session.Account.Language)) && (packet.Type == SayColorType.Yellow)); }
public void Test_Wear_GoodHeroLevel() { _session.Character.HeroLevel = 3; var items = new List <ItemDto> { new Item { Type = NoscorePocketType.Equipment, VNum = 1, EquipmentSlot = EquipmentType.MainWeapon, IsHeroic = true, LevelMinimum = 3 } }; _item = new ItemProvider(items, new List <IEventHandler <Item, Tuple <InventoryItemInstance, UseItemPacket> > > { new WearEventHandler(_logger) }); _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_item.Create(1, 1), _session.Character.CharacterId)); _wearPacketHandler.Execute(new WearPacket { InventorySlot = 0, Type = PocketType.Equipment }, _session); Assert.IsTrue(_session.Character.InventoryService.All(s => s.Value.Type == NoscorePocketType.Wear)); }
public override async Task ExecuteAsync(CreateItemPacket createItemPacket, ClientSession session) { var vnum = createItemPacket.VNum; sbyte rare = 0; byte upgrade = 0; byte design = 0; short amount = 1; if (vnum == 1046) { return; // cannot create gold as item, use $Gold instead } var iteminfo = _items.Find(item => item.VNum == vnum); if (iteminfo == null) { await session.SendPacketAsync(new MsgPacket { Message = GameLanguage.Instance.GetMessageFromKey(LanguageKey.NO_ITEM, session.Account.Language), Type = 0 }).ConfigureAwait(false); return; } if (iteminfo.IsColored || (iteminfo.Effect == ItemEffectType.BoxEffect)) { if (createItemPacket.DesignOrAmount.HasValue) { design = (byte)createItemPacket.DesignOrAmount.Value; } rare = createItemPacket.Upgrade.HasValue && (iteminfo.Effect == ItemEffectType.BoxEffect) ? (sbyte)createItemPacket.Upgrade.Value : rare; } else if (iteminfo.Type == NoscorePocketType.Equipment) { if (createItemPacket.Upgrade.HasValue) { if (iteminfo.EquipmentSlot != EquipmentType.Sp) { upgrade = createItemPacket.Upgrade.Value; } else { design = createItemPacket.Upgrade.Value; } if ((iteminfo.EquipmentSlot != EquipmentType.Sp) && (upgrade == 0) && (iteminfo.BasicUpgrade != 0)) { upgrade = iteminfo.BasicUpgrade; } } if (createItemPacket.DesignOrAmount.HasValue) { if (iteminfo.EquipmentSlot == EquipmentType.Sp) { upgrade = (byte)createItemPacket.DesignOrAmount.Value; } else { rare = (sbyte)createItemPacket.DesignOrAmount.Value; } } } if (createItemPacket.DesignOrAmount.HasValue && !createItemPacket.Upgrade.HasValue) { amount = createItemPacket.DesignOrAmount.Value > _worldConfiguration.MaxItemAmount ? _worldConfiguration.MaxItemAmount : createItemPacket.DesignOrAmount.Value; } var inv = session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_itemProvider.Create( vnum, amount, rare, upgrade, design), session.Character.CharacterId)); if (inv == null || inv.Count <= 0) { await session.SendPacketAsync(new MsgPacket { Message = GameLanguage.Instance.GetMessageFromKey(LanguageKey.NOT_ENOUGH_PLACE, session.Account.Language), Type = 0 }).ConfigureAwait(false); return; } await session.SendPacketAsync(inv.GeneratePocketChange()).ConfigureAwait(false); var firstItem = inv[0]; if (session.Character.InventoryService.LoadBySlotAndType(firstItem.Slot, firstItem.Type) !.ItemInstance is WearableInstance wearable) { switch (wearable.Item !.EquipmentSlot) {
public void Test_PutPartialSlot() { _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_item.Create(1012, 999), 0)); _putPacketHandler.Execute(new PutPacket { PocketType = PocketType.Main, Slot = 0, Amount = 500 }, _session); Assert.IsTrue((_session.Character.InventoryService.Count == 1) && (_session.Character.InventoryService.FirstOrDefault().Value.ItemInstance.Amount == 499)); }
public void Test_Wear_WearFairy_SpUseGoodSecondElement() { var items = new List <ItemDto> { new Item { Type = NoscorePocketType.Equipment, VNum = 1, EquipmentSlot = EquipmentType.Fairy, Element = ElementType.Water }, new Item { Type = NoscorePocketType.Equipment, VNum = 2, EquipmentSlot = EquipmentType.Sp, Element = ElementType.Fire, SecondaryElement = ElementType.Water } }; _item = new ItemProvider(items, new List <IEventHandler <Item, Tuple <InventoryItemInstance, UseItemPacket> > > { new WearEventHandler(_logger) }); _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_item.Create(1, 1), _session.Character.CharacterId)); _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_item.Create(2, 1), _session.Character.CharacterId)); _wearPacketHandler.Execute(new WearPacket { InventorySlot = 1, Type = PocketType.Equipment }, _session); _session.Character.UseSp = true; _wearPacketHandler.Execute(new WearPacket { InventorySlot = 0, Type = PocketType.Equipment }, _session); Assert.IsTrue( _session.Character.InventoryService.Any(s => (s.Value.ItemInstance.ItemVNum == 1) && (s.Value.Type == NoscorePocketType.Wear))); }
public void Test_Wear_Put_Item_CorrectSlot(EquipmentType type) { var items = new List <ItemDto> { new Item { Type = NoscorePocketType.Equipment, VNum = 1, EquipmentSlot = type, Class = 31 //sum of all 2^class } }; _item = new ItemProvider(items, new List <IEventHandler <Item, Tuple <InventoryItemInstance, UseItemPacket> > > { new WearEventHandler(_logger) }); _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_item.Create(1, 1), _session.Character.CharacterId)); _wearPacketHandler.Execute(new WearPacket { InventorySlot = 0, Type = PocketType.Equipment }, _session); Assert.IsTrue(_session.Character.InventoryService.All(s => (s.Value.Slot == (short)type) && (s.Value.Type == NoscorePocketType.Wear))); }
public void Test_TitleGuriHandler() { _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_itemProvider.Create(1, 1), 0)); ExecuteGuriEventHandler(new GuriPacket { Type = GuriPacketType.Title, VisualId = 0 }); var lastpacket = (InfoPacket)_session.LastPackets.FirstOrDefault(s => s is InfoPacket); Assert.AreEqual(Language.Instance.GetMessageFromKey(LanguageKey.WEAR_NEW_TITLE, _session.Account.Language), lastpacket.Message); Assert.AreEqual(1, _session.Character.Titles.Count); }
public void Test_Get() { _session.Character.PositionX = 0; _session.Character.PositionY = 0; _session.Character.MapInstance.MapItems.TryAdd(100001, TestHelpers.Instance.MapItemProvider.Create(_session.Character.MapInstance, _item.Create(1012, 1), 1, 1)); _getPacketHandler.Execute(new GetPacket { PickerId = _session.Character.CharacterId, VisualId = 100001, PickerType = VisualType.Player }, _session); Assert.IsTrue(_session.Character.InventoryService.Count > 0); }
public void Test_Delete_FromSlot() { _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_item.Create(1012, 999), 0)); _biPacketHandler.Execute(new BiPacket { Option = RequestDeletionType.Confirmed, Slot = 0, PocketType = PocketType.Main }, _session); var packet = (IvnPacket)_session.LastPackets.FirstOrDefault(s => s is IvnPacket); Assert.IsTrue(packet.IvnSubPackets.All(iv => (iv.Slot == 0) && (iv.VNum == -1))); }
public override async Task ExecuteAsync(CharNewPacket packet, ClientSession clientSession) { // TODO: Hold Account Information in Authorized object var accountId = clientSession.Account.AccountId; var slot = packet.Slot; var characterName = packet.Name; if (await _characterDao.FirstOrDefaultAsync(s => (s.AccountId == accountId) && (s.Slot == slot) && (s.State == CharacterState.Active)).ConfigureAwait(false) != null) { return; } var rg = new Regex(Nameregex); if (rg.Matches(characterName !).Count == 1) { var character = await _characterDao.FirstOrDefaultAsync(s => (s.Name == characterName) && (s.State == CharacterState.Active)).ConfigureAwait(false); if (character == null) { var level = (byte)(packet.IsMartialArtist ? 81 : 1); var @class = packet.IsMartialArtist ? CharacterClassType.MartialArtist : CharacterClassType.Adventurer; var chara = new CharacterDto { Class = @class, Gender = packet.Gender, HairColor = packet.HairColor, HairStyle = packet.HairStyle, Hp = (int)_hpService.GetHp(@class, level), JobLevel = 1, Level = level, MapId = 1, MapX = (short)RandomHelper.Instance.RandomNumber(78, 81), MapY = (short)RandomHelper.Instance.RandomNumber(114, 118), Mp = (int)_mpService.GetMp(@class, level), MaxMateCount = 10, SpPoint = 10000, SpAdditionPoint = 0, Name = characterName, Slot = slot, AccountId = accountId, State = CharacterState.Active }; chara = await _characterDao.TryInsertOrUpdateAsync(chara).ConfigureAwait(false); var miniland = new MinilandDto { MinilandId = Guid.NewGuid(), State = MinilandState.Open, MinilandMessage = ((short)Game18NConstString.Welcome).ToString(), OwnerId = chara.CharacterId, WelcomeMusicInfo = 3800 }; await _minilandDao.TryInsertOrUpdateAsync(miniland).ConfigureAwait(false); var charaGo = chara.Adapt <Character>(); var itemsToAdd = new List <BasicEquipment>(); foreach (var item in _worldConfiguration.BasicEquipments) { switch (item.Key) { case nameof(CharacterClassType.Adventurer) when @class != CharacterClassType.Adventurer: case nameof(CharacterClassType.Archer) when @class != CharacterClassType.Archer: case nameof(CharacterClassType.Mage) when @class != CharacterClassType.Mage: case nameof(CharacterClassType.MartialArtist) when @class != CharacterClassType.MartialArtist: case nameof(CharacterClassType.Swordsman) when @class != CharacterClassType.Swordsman: break; default: itemsToAdd.AddRange(_worldConfiguration.BasicEquipments[item.Key]); break; } } foreach (var itemToAdd in itemsToAdd) { charaGo.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_itemBuilderService.Create(itemToAdd.VNum, itemToAdd.Amount), charaGo.CharacterId), itemToAdd.NoscorePocketType); } await _quicklistEntryDao.TryInsertOrUpdateAsync(new[] { new QuicklistEntryDto { Id = Guid.NewGuid(), CharacterId = chara.CharacterId, Slot = 1, Type = 0, IconType = 2, IconVNum = 0 }, new QuicklistEntryDto { Id = Guid.NewGuid(), CharacterId = chara.CharacterId, Slot = 9, Type = 1, IconType = 3, IconVNum = 1 }, new QuicklistEntryDto { Id = Guid.NewGuid(), CharacterId = chara.CharacterId, Slot = 0, Type = 1, IconType = 1, IconVNum = 1 }, new QuicklistEntryDto { Id = Guid.NewGuid(), CharacterId = chara.CharacterId, Slot = 8, Type = 1, IconType = 1, IconVNum = 16 }, }); await _itemInstanceDao.TryInsertOrUpdateAsync(charaGo.InventoryService.Values.Select(s => s.ItemInstance !).ToArray()).ConfigureAwait(false); await _inventoryItemInstanceDao.TryInsertOrUpdateAsync(charaGo.InventoryService.Values.ToArray()).ConfigureAwait(false); await clientSession.SendPacketAsync(new SuccessPacket()).ConfigureAwait(false); await clientSession.HandlePacketsAsync(new[] { new EntryPointPacket() }).ConfigureAwait(false); } else { await clientSession.SendPacketAsync(new InfoiPacket { Message = Game18NConstString.CharacterNameAlreadyTaken }).ConfigureAwait(false); } }
public void Test_Binding() { _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_item.Create(1, 1), 0)); _useItemPacketHandler.Execute(new UseItemPacket { Slot = 0, Type = PocketType.Equipment, Mode = 1 }, _session); Assert.IsTrue(_session.Character.InventoryService.Any(s => (s.Value.ItemInstance.ItemVNum == 1) && (s.Value.Type == NoscorePocketType.Wear) && (s.Value.ItemInstance.BoundCharacterId == _session.Character.VisualId))); }
public void Test_Binding_Required() { var items = new List <ItemDto> { new Item { Type = NoscorePocketType.Equipment, VNum = 1, RequireBinding = true } }; _item = new ItemProvider(items, new List <IEventHandler <Item, Tuple <InventoryItemInstance, UseItemPacket> > > { new WearEventHandler(_logger) }); _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_item.Create(1, 1), _session.Character.CharacterId)); _wearPacketHandler.Execute(new WearPacket { InventorySlot = 0, Type = PocketType.Equipment }, _session); var packet = (QnaPacket)_session.LastPackets.FirstOrDefault(s => s is QnaPacket); Assert.IsTrue(packet.YesPacket is UseItemPacket yespacket && (yespacket.Slot == 0) && (yespacket.Type == PocketType.Equipment) && (packet.Question == _session.GetMessageFromKey(LanguageKey.ASK_BIND))); Assert.IsTrue(_session.Character.InventoryService.Any(s => (s.Value.ItemInstance.ItemVNum == 1) && (s.Value.Type == NoscorePocketType.Equipment))); }
public bool SendMail([FromBody] MailRequest mail) { var mailref = mail.Mail; var receivdto = _characterDto.FirstOrDefault(s => s.CharacterId == mailref.ReceiverId); if (receivdto == null) { return(false); } var receiverName = receivdto.Name; var it = _items.Find(item => item.VNum == mail.VNum); IItemInstanceDto itemInstance = null; if ((mail.Mail.ItemInstanceId == null) && (mail.VNum != null)) { if (it == null) { return(false); } if ((it.ItemType != ItemType.Weapon) && (it.ItemType != ItemType.Armor) && (it.ItemType != ItemType.Specialist)) { mail.Upgrade = 0; } else if ((it.ItemType != ItemType.Weapon) && (it.ItemType != ItemType.Armor)) { mail.Rare = 0; } if ((mail.Rare > 8) || (mail.Rare < -2)) { mail.Rare = 0; } if ((mail.Upgrade > 10) && (it.ItemType != ItemType.Specialist)) { mail.Upgrade = 0; } else if ((it.ItemType == ItemType.Specialist) && (mail.Upgrade > 15)) { mail.Upgrade = 0; } if (mail.Amount == 0) { mail.Amount = 1; } mail.Amount = (it.Type == NoscorePocketType.Etc) || (it.Type == NoscorePocketType.Main) ? mail.Amount : 1; itemInstance = _itemProvider.Create((short)mail.VNum, (short)mail.Amount, (sbyte)mail.Rare, (byte)mail.Upgrade); if (itemInstance == null) { return(false); } _itemInstanceDao.InsertOrUpdate(ref itemInstance); mailref.ItemInstanceId = itemInstance.Id; } var receiver = _connectedAccountHttpClient.GetCharacter(mailref.ReceiverId, null); var sender = _connectedAccountHttpClient.GetCharacter(mailref.SenderId, null); _mailDao.InsertOrUpdate(ref mailref); var mailData = GenerateMailData(mailref, (short?)it?.ItemType ?? -1, itemInstance, receiverName); _parcelHolder[mailref.ReceiverId][mailData.MailDto.IsSenderCopy].TryAdd(mailData.MailId, mailData); Notify(0, receiver, mailData); if (mailref.SenderId != null) { mailref.IsSenderCopy = true; mailref.MailId = 0; itemInstance.Id = new Guid(); _itemInstanceDao.InsertOrUpdate(ref itemInstance); mailref.ItemInstanceId = itemInstance.Id; _mailDao.InsertOrUpdate(ref mailref); var mailDataCopy = GenerateMailData(mailref, (short?)it?.ItemType ?? -1, itemInstance, receiverName); _parcelHolder[mailref.ReceiverId][mailDataCopy.MailDto.IsSenderCopy] .TryAdd(mailDataCopy.MailId, mailDataCopy); Notify(0, receiver, mailDataCopy); } return(true); }
public void UserCanNotChangeClassWhenEquipment(CharacterClassType characterClass) { _session.Character.Level = 15; _session.Character.JobLevel = 20; _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_item.Create(1, 1), 0)); var item = _session.Character.InventoryService.First(); item.Value.Type = NoscorePocketType.Wear; _nRunHandler.Execute(new NrunPacket { VisualType = VisualType.Npc, Runner = NrunRunnerType.ChangeClass, VisualId = 0, Type = (byte)characterClass }, _session); var packet = (MsgPacket)_session.LastPackets.FirstOrDefault(s => s is MsgPacket); Assert.IsTrue((packet.Message == Language.Instance.GetMessageFromKey(LanguageKey.EQ_NOT_EMPTY, _session.Account.Language)) && (packet.Type == MessageType.White)); }
public override void Execute(CreateItemPacket createItemPacket, ClientSession session) { var vnum = createItemPacket.VNum; sbyte rare = 0; byte upgrade = 0; byte design = 0; short amount = 1; if (vnum == 1046) { return; // cannot create gold as item, use $Gold instead } var iteminfo = _items.Find(item => item.VNum == vnum); if (iteminfo == null) { session.SendPacket(new MsgPacket { Message = Language.Instance.GetMessageFromKey(LanguageKey.NO_ITEM, session.Account.Language), Type = 0 }); return; } if (iteminfo.IsColored || iteminfo.Effect == ItemEffectType.BoxEffect) { if (createItemPacket.DesignOrAmount.HasValue) { design = (byte)createItemPacket.DesignOrAmount.Value; } rare = createItemPacket.Upgrade.HasValue && iteminfo.Effect == ItemEffectType.BoxEffect ? (sbyte)createItemPacket.Upgrade.Value : rare; } else if (iteminfo.Type == PocketType.Equipment) { if (createItemPacket.Upgrade.HasValue) { if (iteminfo.EquipmentSlot != EquipmentType.Sp) { upgrade = createItemPacket.Upgrade.Value; } else { design = createItemPacket.Upgrade.Value; } if (iteminfo.EquipmentSlot != EquipmentType.Sp && upgrade == 0 && iteminfo.BasicUpgrade != 0) { upgrade = iteminfo.BasicUpgrade; } } if (createItemPacket.DesignOrAmount.HasValue) { if (iteminfo.EquipmentSlot == EquipmentType.Sp) { upgrade = (byte)createItemPacket.DesignOrAmount.Value; } else { rare = (sbyte)createItemPacket.DesignOrAmount.Value; } } } if (createItemPacket.DesignOrAmount.HasValue && !createItemPacket.Upgrade.HasValue) { amount = createItemPacket.DesignOrAmount.Value > _worldConfiguration.MaxItemAmount ? _worldConfiguration.MaxItemAmount : createItemPacket.DesignOrAmount.Value; } var inv = session.Character.Inventory.AddItemToPocket(_itemProvider.Create(vnum, session.Character.CharacterId, amount: amount, rare: rare, upgrade: upgrade, design: design)); if (inv.Count <= 0) { session.SendPacket(new MsgPacket { Message = Language.Instance.GetMessageFromKey(LanguageKey.NOT_ENOUGH_PLACE, session.Account.Language), Type = 0 }); return; } session.SendPacket(inv.GeneratePocketChange()); var firstItem = inv[0]; var wearable = session.Character.Inventory.LoadBySlotAndType <WearableInstance>(firstItem.Slot, firstItem.Type); if (wearable?.Item.EquipmentSlot is EquipmentType.Armor || wearable?.Item.EquipmentSlot is EquipmentType.MainWeapon || wearable?.Item.EquipmentSlot is EquipmentType.SecondaryWeapon) { wearable.SetRarityPoint(); } else if (wearable?.Item.EquipmentSlot is EquipmentType.Boots || wearable?.Item.EquipmentSlot is EquipmentType.Gloves) { wearable.FireResistance = (short)(wearable.Item.FireResistance * upgrade); wearable.DarkResistance = (short)(wearable.Item.DarkResistance * upgrade); wearable.LightResistance = (short)(wearable.Item.LightResistance * upgrade); wearable.WaterResistance = (short)(wearable.Item.WaterResistance * upgrade); } else { _logger.Debug(LogLanguage.Instance.GetMessageFromKey(LogLanguageKey.NO_SPECIAL_PROPERTIES_WEARABLE)); } session.SendPacket(session.Character.GenerateSay( $"{Language.Instance.GetMessageFromKey(LanguageKey.ITEM_ACQUIRED, session.Account.Language)}: {iteminfo.Name} x {amount}", SayColorType.Green)); }
private void OpenGiftBatch() { var amount = 0; switch (_minigamePacket.Point) { case 0: amount = _minilandObject.Level1BoxAmount; break; case 1: amount = _minilandObject.Level2BoxAmount; break; case 2: amount = _minilandObject.Level3BoxAmount; break; case 3: amount = _minilandObject.Level4BoxAmount; break; case 4: amount = _minilandObject.Level5BoxAmount; break; } var gifts = new List <Gift>(); for (var i = 0; i < amount; i++) { var gift = MinilandHelper.Instance.GetMinilandGift(_minigamePacket.MinigameVNum, _minigamePacket.Point ?? 0); if (gift != null) { if (gifts.Any(o => o.VNum == gift.VNum)) { gifts.First(o => o.Amount == gift.Amount).Amount += gift.Amount; } else { gifts.Add(gift); } } } var str = string.Empty; var list = new List <MloPmgSubPacket>(); for (var i = 0; i < 9; i++) { if (gifts.Count > i) { var item = _itemProvider.Create(gifts.ElementAt(i).VNum, gifts.ElementAt(i).Amount); var inv = _clientSession.Character.InventoryService.AddItemToPocket( InventoryItemInstance.Create(item, _clientSession.Character.CharacterId)); if (inv.Count != 0) { _clientSession.SendPacket(_clientSession.Character.GenerateSay( $"{Language.Instance.GetMessageFromKey(LanguageKey.ITEM_ACQUIRED, _clientSession.Account.Language)}: {item.Item.Name[_clientSession.Account.Language]} x {amount}", SayColorType.Green)); } list.Add(new MloPmgSubPacket { BoxVNum = gifts.ElementAt(i).VNum, BoxAmount = gifts.ElementAt(i).Amount }); } else { list.Add(new MloPmgSubPacket { BoxVNum = 0, BoxAmount = 0 }); } } ShowGifts(list.ToArray()); }
public void Test_Wear_Put_Item_BadGender(GenderType genderToTest) { _session.Character.Gender = genderToTest; var items = new List <ItemDto> { new Item { Type = NoscorePocketType.Equipment, VNum = 1, EquipmentSlot = EquipmentType.MainWeapon, Sex = (byte)(3 - Math.Pow(2, (byte)genderToTest)) } }; _item = new ItemProvider(items, new List <IEventHandler <Item, Tuple <InventoryItemInstance, UseItemPacket> > > { new WearEventHandler(_logger) }); _session.Character.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_item.Create(1, 1), _session.Character.CharacterId)); _wearPacketHandler.Execute(new WearPacket { InventorySlot = 0, Type = PocketType.Equipment }, _session); Assert.IsTrue(_session.Character.InventoryService.All(s => s.Value.Type == NoscorePocketType.Equipment)); var packet = (SayPacket)_session.LastPackets.FirstOrDefault(s => s is SayPacket); Assert.IsTrue((packet.Message == Language.Instance.GetMessageFromKey(LanguageKey.BAD_EQUIPMENT, _session.Account.Language)) && (packet.Type == SayColorType.Yellow)); foreach (var validClass in Enum.GetValues(typeof(GenderType)).OfType <GenderType>() .Where(s => s != genderToTest).ToList()) { _session.Character.Gender = validClass; var item = _session.Character.InventoryService.First(); _wearPacketHandler.Execute(new WearPacket { InventorySlot = 0, Type = PocketType.Equipment }, _session); Assert.IsTrue(item.Value.Type == NoscorePocketType.Wear); item.Value.Type = NoscorePocketType.Equipment; item.Value.Slot = 0; } }