/// <summary> /// Removes an item from the room, recursively looks through containers for the item if required. /// </summary> /// <param name="item">SMItem to remove.</param> public void RemoveItem(SMItem item) { if (this.RoomItems != null) { SMItemHelper.RemoveItemFromList(this.RoomItems, item.ItemID); } this.SaveToApplication(); }
/// <summary> /// Gets a container item from the room matching a given identifier. /// </summary> /// <param name="identifier">The container identifier.</param> /// <returns>The container if found otherwise null.</returns> public SMItem GetRoomContainer(string identifier) { SMItem item = SMItemHelper.GetItemFromList(this.RoomItems, identifier); if (item == null || !item.CanHoldOtherItems()) { return(null); } return(item); }
/// <summary> /// Checks if this item contains a specified other item. /// </summary> /// <param name="item">The item to test for inside this.</param> /// <returns>Bool indicating of the item is inside this.</returns> public bool Contains(SMItem item) { if (this.HeldItems != null && this.HeldItems.Any()) { SMItem foundItem = SMItemHelper.GetItemFromList(this.HeldItems, item.ItemID); return(foundItem == null ? false : true); } return(false); }
/// <summary> /// Determines if the item can hold a given other item by checking the properties of both items and the available /// capacity of this item. /// </summary> /// <param name="item">The item to be put inside this.</param> /// <returns>Bool indicating if the item can be put inside this.</returns> public bool CanHoldItem(SMItem item) { if (this.CanHoldOtherItems() && this.CanHoldItemByFamily(item)) { if (SMItemHelper.GetItemAvailbleCapacity(this) >= item.ItemSize) { return(true); } } return(false); }
/// <summary> /// Gets an item from the room matching a given identifier. /// </summary> /// <param name="identifier">The item identifier</param> /// <returns>The item if found otherwise null.</returns> public SMItem GetRoomItem(string identifier) { return(SMItemHelper.GetItemFromList(this.RoomItems, identifier)); }
/// <summary> /// Inspect a person, object, etc. /// </summary> /// <param name="smc">The character doing the inspecting</param> /// <param name="thingToInspect">The thing that the person wants to inspect</param> public void InspectThing(SMCharacter smc, string thingToInspect) { // Check if it's a character first SMCharacter targetCharacter = this.GetPeople().FirstOrDefault(checkChar => (checkChar.GetFullName().ToLower() == thingToInspect.ToLower()) || (checkChar.FirstName.ToLower() == thingToInspect.ToLower()) || (checkChar.LastName.ToLower() == thingToInspect.ToLower())); if (targetCharacter != null) { string levelText = ""; if (int.Parse(targetCharacter.CalculateLevel()) > 0) { levelText = " (Level " + targetCharacter.CalculateLevel() + ")"; } smc.sendMessageToPlayer(this.Formatter.Bold("Description of " + targetCharacter.GetFullName() + levelText + ":")); if ((targetCharacter.Description != null) && (targetCharacter.Description != "")) { smc.sendMessageToPlayer(this.Formatter.Italic(targetCharacter.Description)); } else { smc.sendMessageToPlayer(this.Formatter.Italic("No description set...")); } List <string> inventory = targetCharacter.GetInventoryList(); string inventoryOutput = String.Empty; if (inventory.Any()) { foreach (string item in inventory) { inventoryOutput += this.Formatter.ListItem(item); } inventoryOutput += this.Formatter.GetNewLines(1); } smc.sendMessageToPlayer(inventoryOutput); targetCharacter.sendMessageToPlayer(this.Formatter.Italic(smc.GetFullName() + " looks at you")); return; } // If not a character, check if it is an NPC... SMNPC targetNPC = this.GetNPCs().FirstOrDefault(checkChar => (checkChar.GetFullName().ToLower() == thingToInspect.ToLower()) || (checkChar.NPCType.ToLower() == thingToInspect.ToLower())); if (targetNPC != null) { string levelText = ""; if (int.Parse(targetNPC.CalculateLevel()) > 0) { levelText = " (Level " + targetNPC.CalculateLevel() + ")"; } smc.sendMessageToPlayer(this.Formatter.Bold("Description of " + targetNPC.GetFullName() + levelText + ":")); if ((targetNPC.Description != null) && (targetNPC.Description != "")) { smc.sendMessageToPlayer(this.Formatter.Italic(targetNPC.Description)); } else { smc.sendMessageToPlayer(this.Formatter.Italic("No description set...")); } List <string> inventory = targetNPC.GetInventoryList(); string inventoryOutput = String.Empty; if (inventory.Any()) { foreach (string item in inventory) { inventoryOutput += this.Formatter.ListItem(item); } inventoryOutput += this.Formatter.GetNewLines(1); } smc.sendMessageToPlayer(inventoryOutput); targetNPC.GetRoom().ProcessNPCReactions("PlayerCharacter.ExaminesThem", smc, targetNPC.UserID); targetNPC.GetRoom().ProcessNPCReactions("PlayerCharacter.Examines", smc); return; } // If not an NPC, check the players equipped items and the items in the room... SMItem smi = smc.GetEquippedItem(thingToInspect); if (smi == null) { smi = SMItemHelper.GetItemFromList(this.RoomItems, thingToInspect); } if (smi != null) { string itemDeatils = this.Formatter.Bold("Description of \"" + smi.ItemName + "\":", 1); itemDeatils += this.Formatter.General(smi.ItemDescription, 1); if (smi.CanHoldOtherItems()) { itemDeatils += this.Formatter.Italic($"This \"{smi.ItemName}\" contains the following items:", 1); itemDeatils += SMItemHelper.GetContainerContents(smi); } if (smi.Effects != null) { smi.InitiateEffects(smc); } smc.sendMessageToPlayer(itemDeatils); return; } // Otherwise nothing found smc.sendMessageToPlayer(this.Formatter.Italic("Can not inspect that item.")); }
/// <summary> /// Inspect a person, object, etc. /// </summary> /// <param name="smc">The character doing the inspecting</param> /// <param name="thingToInspect">The thing that the person wants to inspect</param> public void InspectThing(SMCharacter smc, string thingToInspect) { // Check if it's a character first SMCharacter targetCharacter = this.GetPeople().FirstOrDefault(checkChar => checkChar.GetFullName().ToLower() == thingToInspect.ToLower()); if (targetCharacter != null) { smc.sendMessageToPlayer(OutputFormatterFactory.Get().Bold("Description of " + targetCharacter.GetFullName() + " (Level " + targetCharacter.CalculateLevel() + "):")); if ((targetCharacter.Description != null) || (targetCharacter.Description != "")) { smc.sendMessageToPlayer(OutputFormatterFactory.Get().Italic(targetCharacter.Description)); } else { smc.sendMessageToPlayer(OutputFormatterFactory.Get().Italic("No description set...")); } smc.sendMessageToPlayer(OutputFormatterFactory.Get().CodeBlock(targetCharacter.GetInventoryList())); targetCharacter.sendMessageToPlayer(OutputFormatterFactory.Get().Italic(smc.GetFullName() + " looks at you")); return; } // If not a character, check if it is an NPC... SMNPC targetNPC = this.GetNPCs().FirstOrDefault(checkChar => checkChar.GetFullName().ToLower() == thingToInspect.ToLower()); if (targetNPC != null) { smc.sendMessageToPlayer(OutputFormatterFactory.Get().Bold("Description of " + targetNPC.GetFullName() + " (Level " + targetNPC.CalculateLevel() + "):")); if ((targetNPC.Description != null) || (targetNPC.Description != "")) { smc.sendMessageToPlayer(OutputFormatterFactory.Get().Italic(targetNPC.Description)); } else { smc.sendMessageToPlayer(OutputFormatterFactory.Get().Italic("No description set...")); } smc.sendMessageToPlayer(OutputFormatterFactory.Get().CodeBlock(targetNPC.GetInventoryList())); targetNPC.GetRoom().ProcessNPCReactions("PlayerCharacter.ExaminesThem", smc, targetNPC.UserID); targetNPC.GetRoom().ProcessNPCReactions("PlayerCharacter.Examines", smc); return; } // If not an NPC, check the players equipped items and the items in the room... SMItem smi = smc.GetEquippedItem(thingToInspect); if (smi == null) { smi = SMItemHelper.GetItemFromList(this.RoomItems, thingToInspect); } if (smi != null) { string itemDeatils = OutputFormatterFactory.Get().Bold("Description of \"" + smi.ItemName + "\":"); itemDeatils += OutputFormatterFactory.Get().ListItem(smi.ItemDescription); if (smi.CanHoldOtherItems()) { itemDeatils += OutputFormatterFactory.Get().Italic($"This \"{smi.ItemName}\" contains the following items:"); itemDeatils += SMItemHelper.GetContainerContents(smi); } smc.sendMessageToPlayer(itemDeatils); return; } // Otherwise nothing found smc.sendMessageToPlayer(OutputFormatterFactory.Get().Italic("Can not inspect that item.")); }