item_location game::get_item_from_inventory( player &p, const std::string &title ) { const std::string msg = p.is_npc() ? string_format( _( "%s's inventory is empty." ), p.name.c_str() ) : std::string( _( "Your inventory is empty." ) ); return inv_internal( p, inventory_filter_preset( convert_filter( [ &p ]( const item & it ) { return !p.is_worn( it ) && &p.weapon != ⁢ } ) ), title, -1, msg ); }
item *game::inv_map_for_liquid( const item &liquid, const std::string &title, int radius ) { const auto filter = [ this, &liquid ]( const item_location & location ) { if( location.where() == item_location::type::character ) { Character *character = dynamic_cast<Character *>( critter_at( location.position() ) ); if( character == nullptr ) { debugmsg( "Invalid location supplied to the liquid filter: no character found." ); return false; } return location->get_remaining_capacity_for_liquid( liquid, *character ) > 0; } const bool allow_buckets = location.where() == item_location::type::map; return location->get_remaining_capacity_for_liquid( liquid, allow_buckets ) > 0; }; return inv_internal( u, inventory_filter_preset( filter ), title, radius, string_format( _( "You don't have a suitable container for carrying %s." ), liquid.tname().c_str() ) ).get_item(); }
item_location game_menus::inv::container_for( player &p, const item &liquid, int radius ) { const auto filter = [ &liquid ]( const item_location & location ) { if( location.where() == item_location::type::character ) { Character *character = dynamic_cast<Character *>( g->critter_at( location.position() ) ); if( character == nullptr ) { debugmsg( "Invalid location supplied to the liquid filter: no character found." ); return false; } return location->get_remaining_capacity_for_liquid( liquid, *character ) > 0; } const bool allow_buckets = location.where() == item_location::type::map; return location->get_remaining_capacity_for_liquid( liquid, allow_buckets ) > 0; }; return inv_internal( p, inventory_filter_preset( filter ), string_format( _( "Container for %s" ), liquid.display_name( liquid.charges ).c_str() ), radius, string_format( _( "You don't have a suitable container for carrying %s." ), liquid.tname().c_str() ) ); }
item_location game::inv_map_splice( item_filter filter, const std::string &title, int radius, const std::string &none_message ) { return inv_internal( u, inventory_filter_preset( convert_filter( filter ) ), title, radius, none_message ); }