示例#1
0
        public void Serialize()
        {
            var orderLock    = new OrderLock(Guid.NewGuid());
            var deserialized = new OrderLock((List)orderLock.Serialize());

            Assert.Equal(LockType.Order, deserialized.Type);
            Assert.Equal(orderLock.OrderId, deserialized.OrderId);
        }
示例#2
0
        public void Lock()
        {
            var row = TableSheets.MaterialItemSheet.First;

            Assert.NotNull(row);
            var material  = ItemFactory.CreateMaterial(row);
            var item      = new Inventory.Item(material, 1);
            var orderLock = new OrderLock(Guid.NewGuid());

            Assert.False(item.Locked);

            item.LockUp(orderLock);

            Assert.True(item.Locked);

            item.Unlock();

            Assert.False(item.Locked);
        }
示例#3
0
        public void Execute(int avatarLevel, int worldId, int stageId, int playCount, bool backward, bool isLock, bool isClearedBefore)
        {
            Assert.True(_tableSheets.WorldSheet.TryGetValue(worldId, out var worldRow));
            Assert.True(stageId >= worldRow.StageBegin);
            Assert.True(stageId <= worldRow.StageEnd);
            Assert.True(_tableSheets.StageSheet.TryGetValue(stageId, out _));

            var previousAvatarState = _initialState.GetAvatarStateV2(_avatarAddress);

            previousAvatarState.level = avatarLevel;
            var clearedStageId = _tableSheets.StageSheet.First?.Id ?? 0;

            clearedStageId = isClearedBefore ? Math.Max(clearedStageId, stageId - 1) : stageId - 1;
            clearedStageId = playCount > 1 ? clearedStageId + 1 : clearedStageId;
            previousAvatarState.worldInformation = new WorldInformation(
                0,
                _tableSheets.WorldSheet,
                clearedStageId);

            List <Guid> costumes = new List <Guid>();
            IRandom     random   = new TestRandom();

            if (avatarLevel >= GameConfig.RequireCharacterLevel.CharacterFullCostumeSlot)
            {
                var costumeId = _tableSheets
                                .CostumeItemSheet
                                .Values
                                .First(r => r.ItemSubType == ItemSubType.FullCostume)
                                .Id;

                var costume = (Costume)ItemFactory.CreateItem(
                    _tableSheets.ItemSheet[costumeId], random);
                previousAvatarState.inventory.AddItem(costume);
                costumes.Add(costume.ItemId);
            }

            List <Guid> equipments = new List <Guid>();

            if (avatarLevel >= GameConfig.RequireCharacterLevel.CharacterEquipmentSlotWeapon)
            {
                var weaponId = _tableSheets
                               .EquipmentItemSheet
                               .Values
                               .Where(r => r.ItemSubType == ItemSubType.Weapon)
                               .OrderBy(r => r.Stat.ValueAsInt)
                               .Last()
                               .Id;

                var weapon = ItemFactory.CreateItem(
                    _tableSheets.EquipmentItemSheet[weaponId],
                    random)
                             as Equipment;
                equipments.Add(weapon.ItemId);
                OrderLock?orderLock = null;
                if (isLock)
                {
                    orderLock = new OrderLock(Guid.NewGuid());
                }

                previousAvatarState.inventory.AddItem(weapon, iLock: orderLock);
            }

            if (avatarLevel >= GameConfig.RequireCharacterLevel.CharacterEquipmentSlotArmor)
            {
                var armorId = _tableSheets
                              .EquipmentItemSheet
                              .Values
                              .Where(r => r.ItemSubType == ItemSubType.Armor)
                              .OrderBy(r => r.Stat.ValueAsInt)
                              .Last()
                              .Id;

                var armor = ItemFactory.CreateItem(
                    _tableSheets.EquipmentItemSheet[armorId],
                    random)
                            as Equipment;
                equipments.Add(armor.ItemId);
                previousAvatarState.inventory.AddItem(armor);
            }

            var mailEquipmentRow = _tableSheets.EquipmentItemSheet.Values.First();
            var mailEquipment    = ItemFactory.CreateItemUsable(mailEquipmentRow, default, 0);
示例#4
0
        public void TryGetTradableItems(ItemType itemType, long blockIndex, bool isLock, bool expected)
        {
            ItemSheet.Row row;
            switch (itemType)
            {
            case ItemType.Consumable:
                row = TableSheets.EquipmentItemSheet.First;
                break;

            case ItemType.Costume:
                row = TableSheets.CostumeItemSheet.First;
                break;

            case ItemType.Equipment:
                row = TableSheets.ConsumableItemSheet.First;
                break;

            case ItemType.Material:
                row = TableSheets.MaterialItemSheet.First;
                break;

            default:
                throw new Exception();
            }

            var           inventory = new Inventory();
            ITradableItem tradableItem;

            if (itemType == ItemType.Material)
            {
                tradableItem = ItemFactory.CreateTradableMaterial((MaterialItemSheet.Row)row);
            }
            else
            {
                tradableItem = (ITradableItem)ItemFactory.CreateItem(row, new TestRandom());
            }

            tradableItem.RequiredBlockIndex = blockIndex;
            OrderLock?orderLock = null;

            if (isLock)
            {
                orderLock = new OrderLock(Guid.NewGuid());
            }

            inventory.AddItem((ItemBase)tradableItem, 1, orderLock);
            Assert.Single(inventory.Items);
            Assert.Equal(
                expected,
                inventory.TryGetTradableItems(tradableItem.TradableId, 0, 1, out var items)
                );
            if (expected)
            {
                Assert.Single(items);
                Assert.Equal((ITradableItem)items.First().item, tradableItem);
            }
            else
            {
                Assert.Empty(items);
            }
        }