Notice boards can now have images pinned to them (#22152)

* Notice boards can use authorization

* stock notice boards for the heads of staff

* Title of the UI uses the notice board's name

* Add notice boards for heads of staff to boxstation

* formatting oversight

* noticeboards use proper examinate behaviour for paper

* You can now put images on the noticeboard

* Made interacting with the noticeboard not annoying

* Revert "Add notice boards for heads of staff to boxstation"

This reverts commit 56a30da0957ac3679bcd84744d54c526543802c1.

* code review

* properly restrict locate()
This commit is contained in:
Mervill
2016-12-16 11:08:20 +13:00
committed by oranges
parent 5517f97d41
commit ae61572d0b
+67 -28
View File
@@ -19,67 +19,106 @@
//attaching papers!!
/obj/structure/noticeboard/attackby(obj/item/weapon/O, mob/user, params)
if(istype(O, /obj/item/weapon/paper))
if(istype(O, /obj/item/weapon/paper) || istype(O, /obj/item/weapon/photo))
if(!allowed(user))
user << "<span class='info'>You are not authorized to add notices</span>"
return
if(notices < 5)
if(!user.drop_item())
if(!user.unEquip(O))
return
O.add_fingerprint(user)
add_fingerprint(user)
O.loc = src
notices++
icon_state = "nboard0[notices]" //update sprite
user << "<span class='notice'>You pin the paper to the noticeboard.</span>"
icon_state = "nboard0[notices]"
user << "<span class='notice'>You pin the [O] to the noticeboard.</span>"
else
user << "<span class='notice'>You reach to pin your paper to the board but hesitate. You are certain your paper will not be seen among the many others already attached.</span>"
user << "<span class='notice'>The notice board is full</span>"
else
return ..()
/obj/structure/noticeboard/attack_hand(mob/user)
var/dat = "<B>Noticeboard</B><BR>"
for(var/obj/item/weapon/paper/P in src)
dat += "<A href='?src=\ref[src];read=\ref[P]'>[P.name]</A> <A href='?src=\ref[src];write=\ref[P]'>Write</A> <A href='?src=\ref[src];remove=\ref[P]'>Remove</A><BR>"
var/auth = allowed(user)
var/dat = "<B>[name]</B><BR>"
for(var/obj/item/P in src)
if(istype(P, /obj/item/weapon/paper))
dat += "<A href='?src=\ref[src];read=\ref[P]'>[P.name]</A> [auth ? "<A href='?src=\ref[src];write=\ref[P]'>Write</A> <A href='?src=\ref[src];remove=\ref[P]'>Remove</A>" : ""]<BR>"
else
dat += "<A href='?src=\ref[src];read=\ref[P]'>[P.name]</A> [auth ? "<A href='?src=\ref[src];remove=\ref[P]'>Remove</A>" : ""]<BR>"
user << browse("<HEAD><TITLE>Notices</TITLE></HEAD>[dat]","window=noticeboard")
onclose(user, "noticeboard")
/obj/structure/noticeboard/Topic(href, href_list)
..()
usr.set_machine(src)
if(href_list["remove"])
if((usr.stat || usr.restrained())) //For when a player is handcuffed while they have the notice window open
return
var/obj/item/P = locate(href_list["remove"])
if((P && P.loc == src))
P.loc = get_turf(src) //dump paper on the floor because you're a clumsy fuck
P.add_fingerprint(usr)
add_fingerprint(usr)
var/obj/item/I = locate(href_list["remove"]) in contents
if(istype(I) && I.loc == src)
I.loc = usr.loc
usr.put_in_hands(I)
notices--
icon_state = "nboard0[notices]"
if(href_list["write"])
if((usr.stat || usr.restrained())) //For when a player is handcuffed while they have the notice window open
return
var/obj/item/P = locate(href_list["write"])
if((P && P.loc == src)) //ifthe paper's on the board
var/obj/item/P = locate(href_list["write"]) in contents
if(istype(P) && P.loc == src)
var/obj/item/I = usr.is_holding_item_of_type(/obj/item/weapon/pen)
if(I) //check hand for pen
if(I)
add_fingerprint(usr)
P.attackby(I, usr)
else
usr << "<span class='notice'>You'll need something to write with!</span>"
if(href_list["read"])
var/obj/item/weapon/paper/P = locate(href_list["read"])
if((P && P.loc == src))
if(!ishuman(usr))
usr << browse("<HTML><HEAD><TITLE>[P.name]</TITLE></HEAD><BODY><TT>[stars(P.info)]</TT></BODY></HTML>", "window=[P.name]")
onclose(usr, "[P.name]")
else
usr << browse("<HTML><HEAD><TITLE>[P.name]</TITLE></HEAD><BODY><TT>[P.info]</TT></BODY></HTML>", "window=[P.name]")
onclose(usr, "[P.name]")
var/obj/item/I = locate(href_list["read"]) in contents
if(istype(I) && I.loc == src)
usr.examinate(I)
/obj/structure/noticeboard/deconstruct(disassembled = TRUE)
if(!(flags & NODECONSTRUCT))
new /obj/item/stack/sheet/metal (loc, 1)
qdel(src)
// Notice boards for the heads of staff (plus the qm)
/obj/structure/noticeboard/captain
name = "Captain's Notice Board"
desc = "Important notices from the Captain"
req_access = list(access_captain)
/obj/structure/noticeboard/hop
name = "Head of Personel's Notice Board"
desc = "Important notices from the Head of Personel"
req_access = list(access_hop)
/obj/structure/noticeboard/ce
name = "Chief Engineer's Notice Board"
desc = "Important notices from the Chief Engineer"
req_access = list(access_ce)
/obj/structure/noticeboard/hos
name = "Head of Security's Notice Board"
desc = "Important notices from the Head of Security"
req_access = list(access_hos)
/obj/structure/noticeboard/cmo
name = "Chief Medical Officer's Notice Board"
desc = "Important notices from the Chief Medical Officer"
req_access = list(access_cmo)
/obj/structure/noticeboard/rd
name = "Research Director's Notice Board"
desc = "Important notices from the Research Director"
req_access = list(access_rd)
/obj/structure/noticeboard/qm
name = "Quartermaster's Notice Board"
desc = "Important notices from the Quartermaster"
req_access = list(access_qm)
/obj/structure/noticeboard/staff
name = "Staff Notice Board"
desc = "Important notices from the heads of staff"
req_access = list(access_heads)