Files
CHOMPStation2/code/modules/persistence/noticeboard.dm
CHOMPStation2StaffMirrorBot 5853b61b55 [MIRROR] New to init final (#10649)
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
2025-04-17 13:52:07 +02:00

218 lines
7.3 KiB
Plaintext

/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 = FALSE
anchored = TRUE
var/list/notices
var/base_icon_state = "nboard0"
var/const/max_notices = 5
/obj/structure/noticeboard/Initialize(mapload)
. = ..()
// Grab any mapped notices.
notices = list()
for(var/obj/item/paper/note in get_turf(src))
note.forceMove(src)
LAZYADD(notices, note)
if(LAZYLEN(notices) >= max_notices)
break
//ChompEDIT START - notices in contents
for(var/obj/item/paper/note in contents)
LAZYADD(notices, note)
if(LAZYLEN(notices) >= max_notices)
break
//ChompEDIT END
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(severity)
dismantle()
/obj/structure/noticeboard/update_icon()
icon_state = "[base_icon_state][LAZYLEN(notices)]"
/obj/structure/noticeboard/attackby(obj/item/I, mob/user)
if(I.has_tool_quality(TOOL_SCREWDRIVER))
var/choice = tgui_input_list(user, "Which direction do you wish to place the noticeboard?", "Noticeboard Offset", list("North", "South", "East", "West", "No Offset"))
if(choice && Adjacent(user) && I.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
if("No Offset")
return
return
else if(I.has_tool_quality(TOOL_WRENCH))
visible_message(span_warning("[user] begins dismantling [src]."))
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
if(do_after(user, 50, src))
visible_message(span_danger("[user] has dismantled [src]!"))
dismantle()
return
else if(istype(I, /obj/item/paper) || istype(I, /obj/item/photo))
if(jobban_isbanned(user, JOB_GRAFFITI))
to_chat(user, span_warning("You are banned from leaving persistent information across rounds."))
else
if(LAZYLEN(notices) < max_notices && user.unEquip(I, src))
add_fingerprint(user)
add_paper(I)
to_chat(user, span_notice("You pin [I] to [src]."))
SSpersistence.track_value(I, /datum/persistent/paper)
else
to_chat(user, span_warning("You hesitate, certain [I] will not be seen among the many others already attached to \the [src]."))
return
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(mob/user)
tgui_interact(user)
return ..()
/obj/structure/noticeboard/tgui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "NoticeBoard", name)
ui.open()
/obj/structure/noticeboard/tgui_data(mob/user)
var/list/data = ..()
var/list/tgui_notices = list()
for(var/obj/item/I in src.notices)
tgui_notices.Add(list(list(
"ispaper" = istype(I, /obj/item/paper),
"isphoto" = istype(I, /obj/item/photo),
"name" = I.name,
"ref" = "\ref[I]",
)))
data["notices"] = tgui_notices
return data
/obj/structure/noticeboard/tgui_act(action, params, datum/tgui/ui)
if(..())
return TRUE
switch(action)
if("read")
var/obj/item/paper/P = locate(params["ref"])
if(P && P.loc == src)
P.show_content(ui.user)
. = TRUE
if("look")
var/obj/item/photo/P = locate(params["ref"])
if(P && P.loc == src)
P.show(ui.user)
. = TRUE
if("remove")
if(!in_range(src, ui.user))
return FALSE
var/obj/item/I = locate(params["ref"])
remove_paper(I)
if(istype(I))
ui.user.put_in_hands(I)
add_fingerprint(ui.user)
. = TRUE
if("write")
if(!in_range(src, ui.user))
return FALSE
var/obj/item/P = locate(params["ref"])
if((P && P.loc == src)) //if the paper's on the board
var/mob/living/M = ui.user
if(istype(M))
var/obj/item/pen/E = M.get_type_in_hands(/obj/item/pen)
if(E)
add_fingerprint(M)
P.attackby(E, ui.user)
else
to_chat(M, span_notice("You'll need something to write with!"))
. = TRUE
/obj/structure/noticeboard/anomaly
notices = 5
icon_state = "nboard05"
/obj/structure/noticeboard/anomaly/Initialize(mapload)
. = ..()
var/obj/item/paper/P = new()
P.name = "Memo RE: proper analysis procedure"
P.info = "<br>We keep test dummies in pens here for a reason, so standard procedure should be to activate newfound alien artifacts and place the two in close proximity. Promising items I might even approve monkey testing on."
P.stamped = list(/obj/item/stamp/rd)
P.add_overlay("paper_stamped_rd")
contents += P
P = new()
P.name = "Memo RE: materials gathering"
P.info = "Corasang,<br>the hands-on approach to gathering our samples may very well be slow at times, but it's safer than allowing the blundering miners to roll willy-nilly over our dig sites in their mechs, destroying everything in the process. And don't forget the escavation tools on your way out there!<br>- R.W"
P.stamped = list(/obj/item/stamp/rd)
P.add_overlay("paper_stamped_rd")
contents += P
P = new()
P.name = "Memo RE: ethical quandaries"
P.info = "Darion-<br><br>I don't care what his rank is, our business is that of science and knowledge - questions of moral application do not come into this. Sure, so there are those who would employ the energy-wave particles my modified device has managed to abscond for their own personal gain, but I can hardly see the practical benefits of some of these artifacts our benefactors left behind. Ward--"
P.stamped = list(/obj/item/stamp/rd)
P.add_overlay("paper_stamped_rd")
contents += P
P = new()
P.name = "READ ME! Before you people destroy any more samples"
P.info = "how many times do i have to tell you people, these xeno-arch samples are del-i-cate, and should be handled so! careful application of a focussed, concentrated heat or some corrosive liquids should clear away the extraneous carbon matter, while application of an energy beam will most decidedly destroy it entirely - like someone did to the chemical dispenser! W, <b>the one who signs your paychecks</b>"
P.stamped = list(/obj/item/stamp/rd)
P.add_overlay("paper_stamped_rd")
contents += P
P = new()
P.name = "Reminder regarding the anomalous material suits"
P.info = "Do you people think the anomaly suits are cheap to come by? I'm about a hair trigger away from instituting a log book for the damn things. Only wear them if you're going out for a dig, and for god's sake don't go tramping around in them unless you're field testing something, R"
P.stamped = list(/obj/item/stamp/rd)
P.add_overlay("paper_stamped_rd")
contents += P