Example #1
0
        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;
            }
        }
Example #2
0
        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));
        }
Example #3
0
        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);
        }
Example #5
0
        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));
        }
Example #12
0
        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);
        }
Example #18
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)));
        }
Example #19
0
        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);
                }
            }
Example #20
0
        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)));
        }
Example #22
0
        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);
        }
Example #23
0
        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));
        }
Example #25
0
        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;
            }
        }