Ejemplo n.º 1
0
        public bool EquipItem(SessionToken token, string userId, Guid itemId)
        {
            var character = GetCharacter(token, userId);

            if (character == null)
            {
                return(false);
            }

            var item = gameData.GetItem(itemId);

            if (item == null)
            {
                return(false);
            }

            var invItem = gameData.GetInventoryItem(character.Id, itemId);

            var skills = gameData.GetSkills(character.SkillsId);

            if (invItem == null || !CanEquipItem(gameData.GetItem(invItem.ItemId), skills))
            {
                return(false);
            }

            if (invItem.Amount > 1)
            {
                --invItem.Amount;

                invItem = new InventoryItem
                {
                    Id          = Guid.NewGuid(),
                    CharacterId = character.Id,
                    Amount      = 1,
                    Equipped    = true,
                    ItemId      = invItem.ItemId,
                };
                gameData.Add(invItem);
            }
            else
            {
                invItem.Equipped = true;
            }

            InventoryItem invItemEq = gameData.FindPlayerItem(character.Id, x =>
            {
                var xItem = gameData.GetItem(x.ItemId);
                return(xItem.Type == item.Type && xItem.Category == item.Category && x.Equipped);
            });

            if (invItemEq != null)
            {
                var stack = gameData.GetInventoryItem(character.Id, invItemEq.ItemId);

                if (stack != null)
                {
                    ++stack.Amount;
                    gameData.Remove(invItemEq);
                }
                else
                {
                    invItemEq.Equipped = false;
                }
            }

            return(true);
        }