/obj/structure/noticeboard name = "notice board" desc = "A board for pinning important notices upon." icon = 'icons/obj/stationobjs.dmi' icon_state = "nboard00" layer = ABOVE_WINDOW_LAYER density = 0 anchored = 1 var/list/notices var/base_icon_state = "nboard0" var/const/max_notices = 5 /obj/structure/noticeboard/Initialize() . = ..() // Grab any mapped notices. notices = list() for(var/obj/item/weapon/paper/note in get_turf(src)) note.forceMove(src) LAZYADD(notices, note) if(LAZYLEN(notices) >= max_notices) break // Automatically place noticeboards that aren't mapped to specific positions. if(pixel_x == 0 && pixel_y == 0) var/turf/here = get_turf(src) var/placing = 0 for(var/checkdir in GLOB.cardinal) var/turf/T = get_step(here, checkdir) if(T.density) placing = checkdir break for(var/thing in T) var/atom/A = thing if(A.simulated && !A.CanPass(src, T)) placing = checkdir break switch(placing) if(NORTH) pixel_x = 0 pixel_y = 32 if(SOUTH) pixel_x = 0 pixel_y = -32 if(EAST) pixel_x = 32 pixel_y = 0 if(WEST) pixel_x = -32 pixel_y = 0 update_icon() /obj/structure/noticeboard/proc/add_paper(var/atom/movable/paper, var/skip_icon_update) if(istype(paper)) LAZYDISTINCTADD(notices, paper) paper.forceMove(src) if(!skip_icon_update) update_icon() /obj/structure/noticeboard/proc/remove_paper(var/atom/movable/paper, var/skip_icon_update) if(istype(paper) && paper.loc == src) paper.dropInto(loc) LAZYREMOVE(notices, paper) SSpersistence.forget_value(paper, /datum/persistent/paper) if(!skip_icon_update) update_icon() /obj/structure/noticeboard/proc/dismantle() for(var/thing in notices) remove_paper(thing, skip_icon_update = TRUE) new /obj/item/stack/material/wood(get_turf(src)) qdel(src) /obj/structure/noticeboard/Destroy() QDEL_NULL_LIST(notices) . = ..() /obj/structure/noticeboard/ex_act(var/severity) dismantle() /obj/structure/noticeboard/update_icon() icon_state = "[base_icon_state][LAZYLEN(notices)]" /obj/structure/noticeboard/attackby(var/obj/item/weapon/thing, var/mob/user) if(thing.is_screwdriver()) var/choice = input("Which direction do you wish to place the noticeboard?", "Noticeboard Offset") as null|anything in list("North", "South", "East", "West") if(choice && Adjacent(user) && thing.loc == user && !user.incapacitated()) playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) switch(choice) if("North") pixel_x = 0 pixel_y = 32 if("South") pixel_x = 0 pixel_y = -32 if("East") pixel_x = 32 pixel_y = 0 if("West") pixel_x = -32 pixel_y = 0 return else if(thing.is_wrench()) visible_message(SPAN_WARNING("\The [user] begins dismantling \the [src].")) playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user, 50, src)) visible_message(SPAN_DANGER("\The [user] has dismantled \the [src]!")) dismantle() return else if(istype(thing, /obj/item/weapon/paper) || istype(thing, /obj/item/weapon/photo)) if(jobban_isbanned(user, "Graffiti")) to_chat(user, SPAN_WARNING("You are banned from leaving persistent information across rounds.")) else if(LAZYLEN(notices) < max_notices && user.unEquip(thing, src)) add_fingerprint(user) add_paper(thing) to_chat(user, SPAN_NOTICE("You pin \the [thing] to \the [src].")) SSpersistence.track_value(thing, /datum/persistent/paper) else to_chat(user, SPAN_WARNING("You hesitate, certain \the [thing] will not be seen among the many others already attached to \the [src].")) return ..() /obj/structure/noticeboard/attack_ai(var/mob/user) examine(user) /obj/structure/noticeboard/attack_hand(var/mob/user) examine(user) /obj/structure/noticeboard/examine(var/mob/user) . = ..() if(.) var/list/dat = list("
| [thing] | ") if(istype(thing, /obj/item/weapon/paper)) LAZYADD(dat, "ReadWrite") else if(istype(thing, /obj/item/weapon/photo)) LAZYADD(dat, "Look") LAZYADD(dat, "Remove |