mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-10 09:42:29 +00:00
* Fixes issues with printing posters from the library management computer (#70471) ## About The Pull Request Posters are kind of insane and they require that the poster item have either a poster_type defined in the type or that you pass the structure version of the poster to /new() otherwise they don't work. The weird thing is that the structure needs to be in the contents of the item too, or it again won't work (it won't remove the poster from your hands when placing it). I fixed it so all you need to do is pass the structure version of the poster to /new() on the item and it will move the structure to the contents of the item if needed. It's still a bit insane but it's better than it was and it fixed the bug. Also SSLibrary.printable_posters was grabbing the directional mapping helper of the random poster and so when you printed it and placed it, you'd get confusing results. I made a quick fix to stop that from happening. ## Why It's Good For The Game Bug fixes are generally good things. Fixes #70382 Fixes #66504 ## Changelog 🆑 VexingRaven fix: Fixed posters printed from the library console staying in your hand when you place them fix: Fixed Random Official Poster printed from the library console always placing the west-facing variant no matter where you place it /🆑 * Fixes issues with printing posters from the library management computer Co-authored-by: VexingRaven <msgerbs@users.noreply.github.com>
60 lines
2.4 KiB
Plaintext
60 lines
2.4 KiB
Plaintext
/// Manages library data, loading bookselves, etc
|
|
SUBSYSTEM_DEF(library)
|
|
name = "Library Loading"
|
|
flags = SS_NO_FIRE
|
|
|
|
/// List of bookselves to prefill with books
|
|
var/list/shelves_to_load = list()
|
|
/// List of book datums that we consider to be "in" any one area.
|
|
var/list/books_by_area = list()
|
|
|
|
/// List of acceptable search categories for book consoles
|
|
var/list/search_categories = list("Any", "Fiction", "Non-Fiction", "Adult", "Reference", "Religion")
|
|
/// List of acceptable categories for a book to be
|
|
var/list/upload_categories = list("Fiction", "Non-Fiction", "Adult", "Reference", "Religion")
|
|
|
|
/// List of poster typepaths we're ok with being printable
|
|
var/list/printable_posters = list()
|
|
/// List of areas that count as "a library", modified by map config
|
|
var/list/library_areas = list()
|
|
|
|
/datum/controller/subsystem/library/Initialize()
|
|
prepare_official_posters()
|
|
prepare_library_areas()
|
|
load_shelves()
|
|
return SS_INIT_SUCCESS
|
|
|
|
/datum/controller/subsystem/library/proc/load_shelves()
|
|
for(var/obj/structure/bookcase/case_to_load as anything in shelves_to_load)
|
|
if(!case_to_load)
|
|
stack_trace("A null bookcase somehow ended up in SSlibrary's shelves_to_load list. Did something harddel?")
|
|
continue
|
|
case_to_load.load_shelf()
|
|
shelves_to_load = null
|
|
|
|
/// Returns a list of copied book datums that we consider to be "in" the passed in area at roundstart
|
|
/datum/controller/subsystem/library/proc/get_area_books(area/book_parent)
|
|
var/list/areas = list(book_parent.type)
|
|
// If we have an area that's in the global libraries list, we want all the others too
|
|
if(length(areas & library_areas))
|
|
areas |= library_areas
|
|
|
|
var/list/books = list()
|
|
for(var/area_type in areas)
|
|
for(var/datum/book_info/info in books_by_area[area_type])
|
|
books += info.return_copy()
|
|
|
|
return books
|
|
|
|
/datum/controller/subsystem/library/proc/prepare_official_posters()
|
|
printable_posters = list()
|
|
for(var/obj/structure/sign/poster/official/poster_type as anything in subtypesof(/obj/structure/sign/poster/official))
|
|
if (initial(poster_type.printable) == TRUE) //Mostly this check exists to keep directionals from ending up in the printable list
|
|
printable_posters[initial(poster_type.name)] = poster_type
|
|
|
|
/datum/controller/subsystem/library/proc/prepare_library_areas()
|
|
library_areas = typesof(/area/station/service/library) - /area/station/service/library/abandoned
|
|
var/list/additional_areas = SSmapping.config.library_areas
|
|
if(additional_areas)
|
|
library_areas += additional_areas
|