mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-17 04:27:39 +00:00
Splits the restrained() proc into component traits: TRAIT_HANDS_BLOCKED for the general inability to use hands and TRAIT_RESTRAINED for the more specific condition that permits arrests.
Code moved away from the update_mobility() proc so it doesn't have to wait for an update, instead changing based on events. The idea is to eventually kill that proc.
Wrapper proc added for setting the handcuffed value so we can react to the event of it changing.
Kills the RestrainedClickOn() proc. That is now just an UnarmedAttack(), in where the ability to use hands can be checked. Monkeys keep their bite attack and humans their self-examine.
133 lines
4.1 KiB
Plaintext
133 lines
4.1 KiB
Plaintext
/obj/structure/noticeboard
|
|
name = "notice board"
|
|
desc = "A board for pinning important notices upon."
|
|
icon = 'icons/obj/stationobjs.dmi'
|
|
icon_state = "nboard00"
|
|
density = FALSE
|
|
anchored = TRUE
|
|
max_integrity = 150
|
|
var/notices = 0
|
|
|
|
/obj/structure/noticeboard/Initialize(mapload)
|
|
. = ..()
|
|
|
|
if(!mapload)
|
|
return
|
|
|
|
for(var/obj/item/I in loc)
|
|
if(notices > 4)
|
|
break
|
|
if(istype(I, /obj/item/paper))
|
|
I.forceMove(src)
|
|
notices++
|
|
icon_state = "nboard0[notices]"
|
|
|
|
//attaching papers!!
|
|
/obj/structure/noticeboard/attackby(obj/item/O, mob/user, params)
|
|
if(istype(O, /obj/item/paper) || istype(O, /obj/item/photo))
|
|
if(!allowed(user))
|
|
to_chat(user, "<span class='warning'>You are not authorized to add notices!</span>")
|
|
return
|
|
if(notices < 5)
|
|
if(!user.transferItemToLoc(O, src))
|
|
return
|
|
notices++
|
|
icon_state = "nboard0[notices]"
|
|
to_chat(user, "<span class='notice'>You pin the [O] to the noticeboard.</span>")
|
|
else
|
|
to_chat(user, "<span class='warning'>The notice board is full!</span>")
|
|
else
|
|
return ..()
|
|
|
|
/obj/structure/noticeboard/interact(mob/user)
|
|
ui_interact(user)
|
|
|
|
/obj/structure/noticeboard/ui_interact(mob/user)
|
|
. = ..()
|
|
var/auth = allowed(user)
|
|
var/dat = "<B>[name]</B><BR>"
|
|
for(var/obj/item/P in src)
|
|
if(istype(P, /obj/item/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 != CONSCIOUS || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED)) //For when a player is handcuffed while they have the notice window open
|
|
return
|
|
var/obj/item/I = locate(href_list["remove"]) in contents
|
|
if(istype(I) && I.loc == src)
|
|
I.forceMove(usr.loc)
|
|
usr.put_in_hands(I)
|
|
notices--
|
|
icon_state = "nboard0[notices]"
|
|
|
|
if(href_list["write"])
|
|
if(usr.stat != CONSCIOUS || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED)) //For when a player is handcuffed while they have the notice window open
|
|
return
|
|
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/pen)
|
|
if(I)
|
|
add_fingerprint(usr)
|
|
P.attackby(I, usr)
|
|
else
|
|
to_chat(usr, "<span class='warning'>You'll need something to write with!</span>")
|
|
|
|
if(href_list["read"])
|
|
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_1 & NODECONSTRUCT_1))
|
|
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 Personnel's Notice Board"
|
|
desc = "Important notices from the Head of Personnel."
|
|
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)
|