public static InventoryItem HandleItemTrade(Character.Models.Character player, Character.Models.Character character, Items foundItem, Room.Models.Room currentRoom) { if (foundItem.InventoryItems.Any()) { AttributeHandler.UpdatePlayerAttributesFromInventoryItem(player, foundItem.InventoryItems.First(), true); player.Attributes.CarriedItemsCount -= foundItem.InventoryItems.First().InventorySpaceConsumed; character.CarriedItems.Add(foundItem.InventoryItems.First()); player.CarriedItems.Remove(foundItem.InventoryItems.First()); if (character.DesiredItem != null && player.Attributes.CarriedItemsCount + character.OfferedItem.InventorySpaceConsumed <= player.Attributes.MaximumCarryingCapacity) { AttributeHandler.UpdatePlayerAttributesFromInventoryItem(player, character.OfferedItem); player.Attributes.CarriedItemsCount += character.OfferedItem.InventorySpaceConsumed; player.CarriedItems.Add(character.OfferedItem); character.CarriedItems.Remove(character.OfferedItem); character.DesiredItem = new InventoryItem(); return(character.OfferedItem); } } return(new InventoryItem { ItemName = "" }); }
public static void DropItemInRoom(Character.Models.Character player, Room.Models.Room room, InventoryItem itemBeingDropped) { AttributeHandler.UpdatePlayerAttributesFromInventoryItem(player, itemBeingDropped, true); player.Attributes.CarriedItemsCount -= itemBeingDropped.InventorySpaceConsumed; room.RoomItems.InventoryItems.Add(itemBeingDropped); player.CarriedItems.Remove(itemBeingDropped); }
public static void DropItemInRoom(Character.Models.Character player, Room.Models.Room room, InventoryItem itemToDrop) { player.Attributes.CarriedItemsCount -= 1; room.RoomItems.InventoryItems.Add(itemToDrop); AttributeHandler.UpdatePlayerAttributesFromInventoryItem(player, itemToDrop, true); player.CarriedItems.Remove(itemToDrop); }
public void UpdatePlayerAttributesFromInventoryItem_ShouldRemoveTraitPointToPlayer() { var player = MockCharacters.MockPlayerAlbert; player.Attributes = MockAttributes.MockPlayerAttrBeforeUpdate; MockAttributes.MockPlayerAttrBeforeUpdate.Luck = 7; var expectedOutput = MockAttributes.MockPlayerAttrAfterRemoveLuck; AttributeHandler.UpdatePlayerAttributesFromInventoryItem(player, MockItems.MockItemRabbitsFoot, true); Assert.AreEqual(expectedOutput.Luck, player.Attributes.Luck); }
// This updates the room and/or player when the exchange of an item occurs public static void HandleItemAddOrRemove(Character.Models.Character player, Room.Models.Room currentRoom, Items foundItem, bool removeItemFromRoom = false) { switch (removeItemFromRoom) { // We are removing an item from a room, adding it to player inventory case true: if (foundItem?.InventoryItems?.First() != null) { var meetsAnyRequirement = false; var needsToDropSameTypeItemFirst = false; InventoryItem carriedItemOfSameType = null; var inventoryItemToAddToPlayer = foundItem.InventoryItems.First(); if (inventoryItemToAddToPlayer?.AttributeRequirementToTake == null) { meetsAnyRequirement = true; } else if (inventoryItemToAddToPlayer?.AttributeRequirementToTake != null && CanPickupItemWithAttributeRequirement(player, inventoryItemToAddToPlayer)) { meetsAnyRequirement = true; } if (inventoryItemToAddToPlayer.TreatItemAs == ItemUseTypes.Bag || inventoryItemToAddToPlayer.TreatItemAs == ItemUseTypes.Wearable) { foreach (var item in player.CarriedItems) { if (item.TreatItemAs == ItemUseTypes.Bag && inventoryItemToAddToPlayer.TreatItemAs == ItemUseTypes.Bag || item.WearableType != "" && item.WearableType == inventoryItemToAddToPlayer.WearableType) { carriedItemOfSameType = item; needsToDropSameTypeItemFirst = true; break; } } } if (PickupOrDropItemIsOk(player, foundItem) && meetsAnyRequirement) { Console.WriteLine(); if (needsToDropSameTypeItemFirst) { TypingAnimation.Animate("You need to drop your " + carriedItemOfSameType.ItemName + " before you can take the " + inventoryItemToAddToPlayer?.ItemName + ".\n", Color.ForestGreen); } else { AttributeHandler.UpdatePlayerAttributesFromInventoryItem(player, inventoryItemToAddToPlayer); inventoryItemToAddToPlayer.InOriginalLocation = false; player.CarriedItems.Add(inventoryItemToAddToPlayer); player.Attributes.CarriedItemsCount += inventoryItemToAddToPlayer.InventorySpaceConsumed; currentRoom.RoomItems.InventoryItems.Remove(inventoryItemToAddToPlayer); TypingAnimation.Animate("You take the " + inventoryItemToAddToPlayer.ItemName + ".\n", Color.ForestGreen); } } else { if (meetsAnyRequirement) { Console.WriteLine(); TypingAnimation.Animate("Your inventory is full! \n" + "Drop or use an item to pick up the " + inventoryItemToAddToPlayer?.ItemName + ".\n", Color.DarkOliveGreen); } } } else if (foundItem?.WeaponItems != null) { var weaponItemToAddToPlayer = foundItem.WeaponItems.First(); if (string.IsNullOrEmpty(player.WeaponItem.WeaponName)) { AttributeHandler.UpdatePlayerAttributesFromWeaponItem(player, weaponItemToAddToPlayer); weaponItemToAddToPlayer.InOriginalLocation = false; player.WeaponItem = weaponItemToAddToPlayer; currentRoom.RoomItems.WeaponItems.Remove(weaponItemToAddToPlayer); Console.WriteLine(); TypingAnimation.Animate("You take the " + weaponItemToAddToPlayer?.WeaponName + ".\n", Color.ForestGreen); } else { var oldWeapon = player.WeaponItem.WeaponName.Clone(); DropWeaponAndPickupNew(player, currentRoom, weaponItemToAddToPlayer); player.WeaponItem = weaponItemToAddToPlayer; currentRoom.RoomItems.WeaponItems.Remove(weaponItemToAddToPlayer); Console.WriteLine(); TypingAnimation.Animate("You drop your " + oldWeapon + " for the " + weaponItemToAddToPlayer?.WeaponName + ".\n", Color.ForestGreen); } } break; // We are adding an item to a room, removing/dropping it from player inventory case false: if (foundItem?.InventoryItems != null) { var inventoryItemToRemoveFromPlayer = foundItem.InventoryItems.First(); DropItemInRoom(player, currentRoom, inventoryItemToRemoveFromPlayer); Console.WriteLine(); TypingAnimation.Animate("You drop the " + inventoryItemToRemoveFromPlayer?.ItemName + ".\n", Color.ForestGreen); } else if (foundItem?.WeaponItems != null) { var weaponItemToRemoveFromPlayer = foundItem.WeaponItems.First(); DropWeaponInRoom(player, currentRoom); Console.WriteLine(); TypingAnimation.Animate("You drop the " + weaponItemToRemoveFromPlayer?.WeaponName + ".\n", Color.ForestGreen); } break; } }
// This updates the room and/or player when the exchange of an item occurs public static void HandleItemAddOrRemove(Character.Models.Character player, Room.Models.Room currentRoom, Items foundItem, bool removeItemFromRoom = false) { switch (removeItemFromRoom) { // We are removing an item from a room, adding it to player inventory case true: if (foundItem?.InventoryItems != null) { var inventoryItemToAdd = foundItem.InventoryItems.First(); if (player.Attributes.CarriedItemsCount + 1 <= player.Attributes.MaximumCarryingCapacity) { AttributeHandler.UpdatePlayerAttributesFromInventoryItem(player, inventoryItemToAdd); inventoryItemToAdd.InOriginalLocation = false; player.CarriedItems.Add(inventoryItemToAdd); player.Attributes.CarriedItemsCount += 1; currentRoom.RoomItems.InventoryItems.Remove(inventoryItemToAdd); Console.WriteLine(); TypingAnimation.Animate("You take the " + inventoryItemToAdd.ItemName + ".\n", Color.ForestGreen); } else { Console.WriteLine(); TypingAnimation.Animate("Your inventory is full! \n" + "Drop an item to pick up the " + inventoryItemToAdd?.ItemName + ".\n", Color.DarkOliveGreen); } } else if (foundItem?.WeaponItems != null) { var weaponItemToAdd = foundItem.WeaponItems.First(); if (string.IsNullOrEmpty(player.WeaponItem.WeaponName)) { AttributeHandler.UpdatePlayerAttributesFromWeaponItem(player, weaponItemToAdd); weaponItemToAdd.InOriginalLocation = false; player.WeaponItem = weaponItemToAdd; currentRoom.RoomItems.WeaponItems.Remove(weaponItemToAdd); Console.WriteLine(); TypingAnimation.Animate("You take the " + weaponItemToAdd?.WeaponName + ".\n", Color.ForestGreen); } else { var oldWeapon = player.WeaponItem.WeaponName.Clone(); DropWeaponAndPickupNew(player, currentRoom, weaponItemToAdd); AttributeHandler.UpdatePlayerAttributesFromWeaponItem(player, weaponItemToAdd); player.WeaponItem = weaponItemToAdd; currentRoom.RoomItems.WeaponItems.Remove(weaponItemToAdd); Console.WriteLine(); TypingAnimation.Animate("You drop your " + oldWeapon + " for the " + weaponItemToAdd?.WeaponName + ".\n", Color.ForestGreen); } } break; // We are adding an item to a room, removing/dropping it from player inventory case false: if (foundItem?.InventoryItems != null) { var inventoryItemToRemove = foundItem.InventoryItems.First(); DropItemInRoom(player, currentRoom, inventoryItemToRemove); Console.WriteLine(); TypingAnimation.Animate("You drop the " + inventoryItemToRemove?.ItemName + ".\n", Color.ForestGreen); } else if (foundItem?.WeaponItems != null) { var weaponItemToRemove = foundItem.WeaponItems.First(); DropWeaponInRoom(player, currentRoom); Console.WriteLine(); TypingAnimation.Animate("You drop the " + weaponItemToRemove?.WeaponName + ".\n", Color.ForestGreen); } break; } }