예제 #1
0
        public DougResponse Equip(Command command)
        {
            var user          = _userRepository.GetUser(command.UserId);
            var position      = int.Parse(command.GetArgumentAt(0));
            var inventoryItem = user.InventoryItems.SingleOrDefault(itm => itm.InventoryPosition == position);

            if (inventoryItem == null)
            {
                return(new DougResponse(string.Format(DougMessages.NoItemInSlot, position)));
            }

            if (!inventoryItem.Item.IsEquipable())
            {
                return(new DougResponse(DougMessages.ItemNotEquipAble));
            }

            var equipmentItem = (EquipmentItem)inventoryItem.Item;

            if (!user.CanEquip(equipmentItem))
            {
                return(new DougResponse(DougMessages.LevelRequirementNotMet));
            }

            var unequippedItems = _equipmentRepository.EquipItem(user, equipmentItem);

            _inventoryRepository.AddItems(user, unequippedItems.Select(item => item));
            _inventoryRepository.RemoveItem(user, position);

            return(new DougResponse(string.Format(DougMessages.EquippedItem, inventoryItem.Item.Name)));
        }
예제 #2
0
        public string Equip(User user, int itemPosition)
        {
            var inventoryItem = user.InventoryItems.SingleOrDefault(itm => itm.InventoryPosition == itemPosition);

            if (inventoryItem == null)
            {
                return(string.Format(DougMessages.NoItemInSlot, itemPosition));
            }

            if (!inventoryItem.Item.IsEquipable())
            {
                return(DougMessages.ItemNotEquipAble);
            }

            var equipmentItem = (EquipmentItem)inventoryItem.Item;

            if (!user.CanEquip(equipmentItem))
            {
                return(DougMessages.LevelRequirementNotMet);
            }

            var unequippedItems = _equipmentRepository.EquipItem(user, equipmentItem);

            _inventoryRepository.AddItems(user, unequippedItems.Select(item => item));
            _inventoryRepository.RemoveItem(user, itemPosition);

            return(string.Format(DougMessages.EquippedItem, inventoryItem.Item.GetDisplayName()));
        }
예제 #3
0
        private async Task AddMonsterLootToUser(User user, Monster monster, string channel)
        {
            var droppedItems = _randomService.RandomTableDrop(monster.DropTable, user.ExtraDropChance()).Select(drop => drop.Item).ToList();

            if (droppedItems.Any())
            {
                _inventoryRepository.AddItems(user, droppedItems);
                var itemsMessage = string.Join(", ", droppedItems.Select(item => $"*{item.Name}*"));
                await _slack.BroadcastMessage(string.Format(DougMessages.UserObtained, _userService.Mention(user), itemsMessage), channel);
            }
        }
예제 #4
0
        public string OpenLootBox(int itemPos, User user, DropTable dropTable, string channel, string lootboxName)
        {
            _inventoryRepository.RemoveItem(user, itemPos);

            var loot = _randomService.RandomFromWeightedTable(dropTable);
            var item = _itemRepository.GetItem(loot.Id);

            _inventoryRepository.AddItems(user, Enumerable.Repeat(item, loot.Quantity));
            user.InventoryItems.Sort((item1, item2) => item1.InventoryPosition.CompareTo(item2.InventoryPosition));

            _slack.BroadcastMessage(string.Format(DougMessages.LootboxAnnouncement, _userService.Mention(user), lootboxName, $"{loot.Quantity}x {item.GetDisplayName()}"), channel).Wait();

            return(string.Empty);
        }
예제 #5
0
파일: MysteryBox.cs 프로젝트: lluren/Doug
        public override string Use(int itemPos, User user, string channel)
        {
            base.Use(itemPos, user, channel);

            var loot = _randomService.RandomFromWeightedTable(_dropTable);

            var item = _itemFactory.CreateItem(loot.Id);

            _inventoryRepository.AddItems(user, Enumerable.Repeat(item, loot.Quantity));

            user.LoadItems(_itemFactory);
            user.InventoryItems.Sort((item1, item2) => item1.InventoryPosition.CompareTo(item2.InventoryPosition));

            _slack.BroadcastMessage(string.Format(DougMessages.LootboxAnnouncement, _userService.Mention(user), Name, $"{loot.Quantity}x *{item.Name}*"), channel).Wait();

            return(string.Empty);
        }
예제 #6
0
        public override string Use(int itemPos, User user, string channel)
        {
            base.Use(itemPos, user, channel);

            var items = new List <Item>
            {
                _itemFactory.CreateItem(FarmersArmor.ItemId),
                _itemFactory.CreateItem(FarmersBoots.ItemId),
                _itemFactory.CreateItem(FarmersGloves.ItemId),
                _itemFactory.CreateItem(WoodenShield.ItemId),
                _itemFactory.CreateItem(ShortSword.ItemId),
            };

            _inventoryRepository.AddItems(user, items);

            user.LoadItems(_itemFactory);
            user.InventoryItems.Sort((item1, item2) => item1.InventoryPosition.CompareTo(item2.InventoryPosition));

            var itemNames = string.Join(", ", items.Select(item => item.Name));

            _slack.SendEphemeralMessage(string.Format(DougMessages.YouObtained, $"*{itemNames}*"), user.Id, channel).Wait();

            return(string.Empty);
        }