예제 #1
0
        public void Handle(WorldClient client, MapPickUpItemPacket packet)
        {
            var player  = _gameWorld.Players[_gameSession.CharId];
            var mapItem = player.Map.GetItem(packet.ItemId, player);

            if (mapItem is null)
            {
                _packetFactory.SendItemDoesNotBelong(client);
                return;
            }

            if (mapItem.Item.Type == Item.MONEY_ITEM_TYPE)
            {
                player.Map.RemoveItem(player.CellId, mapItem.Id);
                player.InventoryManager.Gold += (uint)mapItem.Item.Gold;
                _packetFactory.SendAddItem(client, mapItem.Item);
            }
            else
            {
                var inventoryItem = _inventoryManager.AddItem(mapItem.Item);
                if (inventoryItem is null)
                {
                    _packetFactory.SendFullInventory(client);
                }
                else
                {
                    player.Map.RemoveItem(player.CellId, mapItem.Id);

                    if (player.PartyManager.Party != null)
                    {
                        player.PartyManager.Party.MemberGetItem(player, inventoryItem);
                    }
                }
            }
        }
예제 #2
0
        public void Handle(WorldClient client, GMGetItemPacket packet)
        {
            if (!_gameSession.IsAdmin)
            {
                return;
            }

            var itemCount = packet.Count;
            var ok        = false;

            while (itemCount > 0)
            {
                var newItem = new Item(_databasePreloader, _enchantConfig, _itemCreateConfig, packet.Type, packet.TypeId, itemCount);

                var item = _inventoryManager.AddItem(newItem);
                if (item != null)
                {
                    ok = true;
                }

                itemCount -= newItem.Count;
            }

            if (ok)
            {
                _packetFactory.SendGmCommandSuccess(client);
            }
            else
            {
                _packetFactory.SendGmCommandError(client, PacketType.GM_COMMAND_GET_ITEM);
            }
        }
예제 #3
0
        static void Main(string[] args)
        {
            IInventoryManager inventoryManager = DIServices.Provider.GetService <IInventoryManager>();

            //Test Input
            inventoryManager.AddItem(new AgedBrie(1, 1)
            {
                Name = "Aged Brie", Type = ItemTypes.Special, UniqueID = 1
            });
            inventoryManager.AddItem(new BackstagePasses(-1, 2)
            {
                Name = "Backstage passes", Type = ItemTypes.Special, UniqueID = 2
            });
            inventoryManager.AddItem(new BackstagePasses(9, 2)
            {
                Name = "Backstage passes", Type = ItemTypes.Special, UniqueID = 3
            });
            inventoryManager.AddItem(new Legendary(2, 2)
            {
                Name = "Sulfuras", Type = ItemTypes.Legendary, UniqueID = 4
            });
            inventoryManager.AddItem(new Normal(-1, 55)
            {
                Name = "Normal Item", Type = ItemTypes.Normal, UniqueID = 5
            });
            inventoryManager.AddItem(new Normal(2, 2)
            {
                Name = "Normal Item", Type = ItemTypes.Normal, UniqueID = 6
            });
            inventoryManager.AddItem(new InvalidItem(2, 2)
            {
                Name = "INVALID ITEM", Type = ItemTypes.Unknown, UniqueID = 7
            });
            inventoryManager.AddItem(new Conjured(2, 2)
            {
                Name = "Conjured", Type = ItemTypes.Conjured, UniqueID = 8
            });
            inventoryManager.AddItem(new Conjured(-1, 5)
            {
                Name = "Conjured", Type = ItemTypes.Conjured, UniqueID = 9
            });

            inventoryManager.UpdateInventory(1);
            inventoryManager.PrintInventory();

            Console.ReadLine();
        }
예제 #4
0
        public void FinishSuccessful()
        {
            foreach (var item in Request.TradeItems.Where(x => x.Key.CharacterId == _ownerId))
            {
                var tradeItem = item.Value;
                var resultItm = _inventoryManager.RemoveItem(tradeItem);

                if (_gameWorld.Players[PartnerId].InventoryManager.AddItem(resultItm) is null) // No place for this item.
                {
                    _inventoryManager.AddItem(resultItm);
                }
            }

            if (Request.TradeMoney.ContainsKey(_ownerId) && Request.TradeMoney[_ownerId] > 0)
            {
                _inventoryManager.Gold = _inventoryManager.Gold - Request.TradeMoney[_ownerId];
                _gameWorld.Players[PartnerId].InventoryManager.Gold = _gameWorld.Players[PartnerId].InventoryManager.Gold + Request.TradeMoney[_ownerId];
            }

            ClearTrade();
        }
예제 #5
0
        public (bool Success, byte Slot, List <Item> SavedGems, Item Item) RemoveGem(byte bag, byte slot, bool shouldRemoveSpecificGem, byte gemPosition, byte hammerBag, byte hammerSlot)
        {
            bool success   = false;
            int  spentGold = 0;
            var  gemItems  = new List <Item>()
            {
                null, null, null, null, null, null
            };
            var savedGems   = new List <Gem>();
            var removedGems = new List <Gem>();

            _inventoryManager.InventoryItems.TryGetValue((bag, slot), out var item);
            if (item is null)
            {
                return(success, 0, gemItems, null);
            }

            if (shouldRemoveSpecificGem)
            {
                Gem gem = null;
                switch (gemPosition)
                {
                case 0:
                    gem       = item.Gem1;
                    item.Gem1 = null;
                    break;

                case 1:
                    gem       = item.Gem2;
                    item.Gem2 = null;
                    break;

                case 2:
                    gem       = item.Gem3;
                    item.Gem3 = null;
                    break;

                case 3:
                    gem       = item.Gem4;
                    item.Gem4 = null;
                    break;

                case 4:
                    gem       = item.Gem5;
                    item.Gem5 = null;
                    break;

                case 5:
                    gem       = item.Gem6;
                    item.Gem6 = null;
                    break;
                }

                if (gem is null)
                {
                    return(success, 0, gemItems, null);
                }

                _inventoryManager.InventoryItems.TryGetValue((hammerBag, hammerSlot), out var hammer);
                if (hammer != null)
                {
                    _inventoryManager.TryUseItem(hammer.Bag, hammer.Slot, skillApplyingItemEffect: true);
                }

                success    = RemoveGem(item, gem, hammer);
                spentGold += GetRemoveGold(gem);

                if (success)
                {
                    savedGems.Add(gem);
                    var gemItem = new Item(_databasePreloader, _itemEnchantConfig, _itemCreateConfig, Item.GEM_ITEM_TYPE, (byte)gem.TypeId);
                    _inventoryManager.AddItem(gemItem);

                    if (gemItem != null)
                    {
                        gemItems[gem.Position] = gemItem;
                    }
                    //else // Not enough place in inventory.
                    // Map.AddItem(); ?
                }
                removedGems.Add(gem);
            }
            else
            {
                var gems = new List <Gem>();

                if (item.Gem1 != null)
                {
                    gems.Add(item.Gem1);
                }

                if (item.Gem2 != null)
                {
                    gems.Add(item.Gem2);
                }

                if (item.Gem3 != null)
                {
                    gems.Add(item.Gem3);
                }

                if (item.Gem4 != null)
                {
                    gems.Add(item.Gem4);
                }

                if (item.Gem5 != null)
                {
                    gems.Add(item.Gem5);
                }

                if (item.Gem6 != null)
                {
                    gems.Add(item.Gem6);
                }

                foreach (var gem in gems)
                {
                    success    = RemoveGem(item, gem, null);
                    spentGold += GetRemoveGold(gem);

                    if (success)
                    {
                        savedGems.Add(gem);
                        var gemItem = new Item(_databasePreloader, _itemEnchantConfig, _itemCreateConfig, Item.GEM_ITEM_TYPE, (byte)gem.TypeId);
                        _inventoryManager.AddItem(gemItem);

                        if (gemItem != null)
                        {
                            gemItems[gem.Position] = gemItem;
                        }
                        //else // Not enough place in inventory.
                        // Map.AddItem(); ?
                    }
                }

                removedGems.AddRange(gems);
                gemPosition = 255; // when remove all gems
            }

            _inventoryManager.Gold = (uint)(_inventoryManager.Gold - spentGold);

            var itemDestroyed = false;

            foreach (var gem in removedGems)
            {
                if (gem.LinkingRate > 0 && !savedGems.Contains(gem))
                {
                    itemDestroyed = true;
                    break;
                }
            }

            if (item.Bag == 0)
            {
                if (itemDestroyed)
                {
                    if (item == _inventoryManager.Helmet)
                    {
                        _inventoryManager.Helmet = null;
                    }
                    else if (item == _inventoryManager.Armor)
                    {
                        _inventoryManager.Armor = null;
                    }
                    else if (item == _inventoryManager.Pants)
                    {
                        _inventoryManager.Pants = null;
                    }
                    else if (item == _inventoryManager.Gauntlet)
                    {
                        _inventoryManager.Gauntlet = null;
                    }
                    else if (item == _inventoryManager.Boots)
                    {
                        _inventoryManager.Boots = null;
                    }
                    else if (item == _inventoryManager.Weapon)
                    {
                        _inventoryManager.Weapon = null;
                    }
                    else if (item == _inventoryManager.Shield)
                    {
                        _inventoryManager.Shield = null;
                    }
                    else if (item == _inventoryManager.Cape)
                    {
                        _inventoryManager.Cape = null;
                    }
                    else if (item == _inventoryManager.Amulet)
                    {
                        _inventoryManager.Amulet = null;
                    }
                    else if (item == _inventoryManager.Ring1)
                    {
                        _inventoryManager.Ring1 = null;
                    }
                    else if (item == _inventoryManager.Ring2)
                    {
                        _inventoryManager.Ring2 = null;
                    }
                    else if (item == _inventoryManager.Bracelet1)
                    {
                        _inventoryManager.Bracelet1 = null;
                    }
                    else if (item == _inventoryManager.Bracelet2)
                    {
                        _inventoryManager.Bracelet2 = null;
                    }
                    else if (item == _inventoryManager.Mount)
                    {
                        _inventoryManager.Mount = null;
                    }
                    else if (item == _inventoryManager.Pet)
                    {
                        _inventoryManager.Pet = null;
                    }
                    else if (item == _inventoryManager.Costume)
                    {
                        _inventoryManager.Costume = null;
                    }
                }
                else
                {
                    foreach (var gem in removedGems)
                    {
                        _statsManager.ExtraStr         -= gem.Str;
                        _statsManager.ExtraDex         -= gem.Dex;
                        _statsManager.ExtraRec         -= gem.Rec;
                        _statsManager.ExtraInt         -= gem.Int;
                        _statsManager.ExtraLuc         -= gem.Luc;
                        _statsManager.ExtraWis         -= gem.Wis;
                        _healthManager.ExtraHP         -= gem.HP;
                        _healthManager.ExtraSP         -= gem.SP;
                        _healthManager.ExtraMP         -= gem.MP;
                        _statsManager.ExtraDefense     -= gem.Defense;
                        _statsManager.ExtraResistance  -= gem.Resistance;
                        _statsManager.Absorption       -= gem.Absorb;
                        _speedManager.ExtraMoveSpeed   -= gem.MoveSpeed;
                        _speedManager.ExtraAttackSpeed -= gem.AttackSpeed;

                        if (gem.Str != 0 || gem.Dex != 0 || gem.Rec != 0 || gem.Wis != 0 || gem.Int != 0 || gem.Luc != 0 || gem.MinAttack != 0 || gem.PlusAttack != 0)
                        {
                            _statsManager.RaiseAdditionalStatsUpdate();
                        }
                    }
                }
            }

            if (itemDestroyed)
            {
                _inventoryManager.RemoveItem(item);
            }
            else
            {
                foreach (var gem in removedGems)
                {
                    switch (gem.Position)
                    {
                    case 0:
                        item.Gem1 = null;
                        break;

                    case 1:
                        item.Gem2 = null;
                        break;

                    case 2:
                        item.Gem3 = null;
                        break;

                    case 3:
                        item.Gem4 = null;
                        break;

                    case 4:
                        item.Gem5 = null;
                        break;

                    case 5:
                        item.Gem6 = null;
                        break;
                    }
                }
            }

            return(!itemDestroyed, gemPosition, gemItems, item);
        }
        public void FullInventoryUpdateTest()
        {
            invManager.AddItem(new AgedBrie(1, 1)
            {
                Name = "Aged Brie", Type = ItemTypes.Special, UniqueID = 1
            });
            invManager.AddItem(new BackstagePasses(-1, 2)
            {
                Name = "Backstage passes", Type = ItemTypes.Special, UniqueID = 2
            });
            invManager.AddItem(new BackstagePasses(9, 2)
            {
                Name = "Backstage passes", Type = ItemTypes.Special, UniqueID = 3
            });
            invManager.AddItem(new Legendary(2, 2)
            {
                Name = "Sulfuras", Type = ItemTypes.Legendary, UniqueID = 4
            });
            invManager.AddItem(new Normal(-1, 55)
            {
                Name = "Normal Item", Type = ItemTypes.Normal, UniqueID = 5
            });
            invManager.AddItem(new Normal(2, 2)
            {
                Name = "Normal Item", Type = ItemTypes.Normal, UniqueID = 6
            });
            invManager.AddItem(new InvalidItem(2, 2)
            {
                Name = "INVALID ITEM", Type = ItemTypes.Unknown, UniqueID = 7
            });
            invManager.AddItem(new Conjured(2, 2)
            {
                Name = "Conjured", Type = ItemTypes.Conjured, UniqueID = 8
            });
            invManager.AddItem(new Conjured(-1, 5)
            {
                Name = "Conjured", Type = ItemTypes.Conjured, UniqueID = 9
            });

            invManager.UpdateInventory();

            Assert.AreEqual("Aged Brie", invManager.Inventory[0].Name);
            Assert.AreEqual(0, invManager.Inventory[0].SellIn);
            Assert.AreEqual(2, invManager.Inventory[0].Quality);
            Assert.AreEqual("Backstage passes", invManager.Inventory[1].Name);
            Assert.AreEqual(-2, invManager.Inventory[1].SellIn);
            Assert.AreEqual(0, invManager.Inventory[1].Quality);
            Assert.AreEqual("Backstage passes", invManager.Inventory[2].Name);
            Assert.AreEqual(8, invManager.Inventory[2].SellIn);
            Assert.AreEqual(4, invManager.Inventory[2].Quality);
            Assert.AreEqual("Sulfuras", invManager.Inventory[3].Name);
            Assert.AreEqual(2, invManager.Inventory[3].SellIn);
            Assert.AreEqual(2, invManager.Inventory[3].Quality);
            Assert.AreEqual("Normal Item", invManager.Inventory[4].Name);
            Assert.AreEqual(-2, invManager.Inventory[4].SellIn);
            Assert.AreEqual(50, invManager.Inventory[4].Quality);
            Assert.AreEqual("Normal Item", invManager.Inventory[5].Name);
            Assert.AreEqual(1, invManager.Inventory[5].SellIn);
            Assert.AreEqual(1, invManager.Inventory[5].Quality);
            Assert.AreEqual("INVALID ITEM", invManager.Inventory[6].Name);
            Assert.AreEqual("Conjured", invManager.Inventory[7].Name);
            Assert.AreEqual(1, invManager.Inventory[7].SellIn);
            Assert.AreEqual(0, invManager.Inventory[7].Quality);
            Assert.AreEqual("Conjured", invManager.Inventory[8].Name);
            Assert.AreEqual(-2, invManager.Inventory[8].SellIn);
            Assert.AreEqual(1, invManager.Inventory[8].Quality);
        }