Files
Bubberstation/code/controllers/subsystem/library.dm
SkyratBot 94dfc81975 [MIRROR] Fixes issues with printing posters from the library management computer [MDB IGNORE] (#17344)
* 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>
2022-11-04 13:14:35 -04:00

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