mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
TGUI Notice Board
This commit is contained in:
@@ -20,36 +20,6 @@
|
||||
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)
|
||||
@@ -77,16 +47,16 @@
|
||||
QDEL_NULL_LIST(notices)
|
||||
. = ..()
|
||||
|
||||
/obj/structure/noticeboard/ex_act(var/severity)
|
||||
/obj/structure/noticeboard/ex_act(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())
|
||||
/obj/structure/noticeboard/attackby(obj/item/I, mob/user)
|
||||
if(I.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", "No Offset")
|
||||
if(choice && Adjacent(user) && I.loc == user && !user.incapacitated())
|
||||
playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
switch(choice)
|
||||
if("North")
|
||||
@@ -101,27 +71,29 @@
|
||||
if("West")
|
||||
pixel_x = -32
|
||||
pixel_y = 0
|
||||
if("No Offset")
|
||||
return
|
||||
return
|
||||
else if(thing.is_wrench())
|
||||
visible_message(SPAN_WARNING("\The [user] begins dismantling \the [src]."))
|
||||
else if(I.is_wrench())
|
||||
visible_message("<span class='warning'>[user] begins dismantling [src].</span>")
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, 50, src))
|
||||
visible_message(SPAN_DANGER("\The [user] has dismantled \the [src]!"))
|
||||
visible_message("<span class='danger'>[user] has dismantled [src]!</span>")
|
||||
dismantle()
|
||||
return
|
||||
else if(istype(thing, /obj/item/weapon/paper) || istype(thing, /obj/item/weapon/photo))
|
||||
else if(istype(I, /obj/item/weapon/paper) || istype(I, /obj/item/weapon/photo))
|
||||
if(jobban_isbanned(user, "Graffiti"))
|
||||
to_chat(user, SPAN_WARNING("You are banned from leaving persistent information across rounds."))
|
||||
to_chat(user, "<span class='warning'>You are banned from leaving persistent information across rounds.</span>")
|
||||
else
|
||||
if(LAZYLEN(notices) < max_notices && user.unEquip(thing, src))
|
||||
if(LAZYLEN(notices) < max_notices && user.unEquip(I, 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)
|
||||
add_paper(I)
|
||||
to_chat(user, "<span class='notice'>You pin [I] to [src].</span>")
|
||||
SSpersistence.track_value(I, /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]."))
|
||||
to_chat(user, "<span class='warning'>You hesitate, certain [I] will not be seen among the many others already attached to \the [src].</span>")
|
||||
return
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/structure/noticeboard/attack_ai(var/mob/user)
|
||||
examine(user)
|
||||
@@ -129,56 +101,71 @@
|
||||
/obj/structure/noticeboard/attack_hand(var/mob/user)
|
||||
examine(user)
|
||||
|
||||
/obj/structure/noticeboard/examine(var/mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
var/list/dat = list("<table>")
|
||||
for(var/thing in notices)
|
||||
LAZYADD(dat, "<tr><td>[thing]</td><td>")
|
||||
if(istype(thing, /obj/item/weapon/paper))
|
||||
LAZYADD(dat, "<a href='?src=\ref[src];read=\ref[thing]'>Read</a><a href='?src=\ref[src];write=\ref[thing]'>Write</a>")
|
||||
else if(istype(thing, /obj/item/weapon/photo))
|
||||
LAZYADD(dat, "<a href='?src=\ref[src];look=\ref[thing]'>Look</a>")
|
||||
LAZYADD(dat, "<a href='?src=\ref[src];remove=\ref[thing]'>Remove</a></td></tr>")
|
||||
var/datum/browser/popup = new(user, "noticeboard-\ref[src]", "Noticeboard")
|
||||
popup.set_content(jointext(dat, null))
|
||||
popup.open()
|
||||
/obj/structure/noticeboard/examine(mob/user)
|
||||
tgui_interact(user)
|
||||
return list()
|
||||
|
||||
/obj/structure/noticeboard/Topic(var/mob/user, var/list/href_list)
|
||||
if(href_list["read"])
|
||||
var/obj/item/weapon/paper/P = locate(href_list["read"])
|
||||
if(P && P.loc == src)
|
||||
P.show_content(user)
|
||||
. = TOPIC_HANDLED
|
||||
/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()
|
||||
|
||||
if(href_list["look"])
|
||||
var/obj/item/weapon/photo/P = locate(href_list["look"])
|
||||
if(P && P.loc == src)
|
||||
P.show(user)
|
||||
. = TOPIC_HANDLED
|
||||
/obj/structure/noticeboard/tgui_data(mob/user)
|
||||
var/list/data = ..()
|
||||
|
||||
data["notices"] = list()
|
||||
for(var/obj/item/I in notices)
|
||||
data["notices"].Add(list(list(
|
||||
"ispaper" = istype(I, /obj/item/weapon/paper),
|
||||
"isphoto" = istype(I, /obj/item/weapon/photo),
|
||||
"name" = I.name,
|
||||
"ref" = "\ref[I]",
|
||||
)))
|
||||
|
||||
if(href_list["remove"])
|
||||
remove_paper(locate(href_list["remove"]))
|
||||
add_fingerprint(user)
|
||||
. = TOPIC_REFRESH
|
||||
return data
|
||||
|
||||
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/mob/living/M = usr
|
||||
if(istype(M))
|
||||
var/obj/item/weapon/pen/E = M.get_type_in_hands(/obj/item/weapon/pen)
|
||||
if(E)
|
||||
add_fingerprint(M)
|
||||
P.attackby(E, usr)
|
||||
else
|
||||
to_chat(M, "<span class='notice'>You'll need something to write with!</span>")
|
||||
. = TOPIC_REFRESH
|
||||
/obj/structure/noticeboard/tgui_act(action, params)
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
if(. == TOPIC_REFRESH)
|
||||
interact(user)
|
||||
switch(action)
|
||||
if("read")
|
||||
var/obj/item/weapon/paper/P = locate(params["ref"])
|
||||
if(P && P.loc == src)
|
||||
P.show_content(usr)
|
||||
. = TRUE
|
||||
|
||||
if("look")
|
||||
var/obj/item/weapon/photo/P = locate(params["ref"])
|
||||
if(P && P.loc == src)
|
||||
P.show(usr)
|
||||
. = TRUE
|
||||
|
||||
if("remove")
|
||||
if(!in_range(src, usr))
|
||||
return FALSE
|
||||
var/obj/item/I = locate(params["ref"])
|
||||
remove_paper(I)
|
||||
if(istype(I))
|
||||
usr.put_in_hands(I)
|
||||
add_fingerprint(usr)
|
||||
. = TRUE
|
||||
|
||||
if("write")
|
||||
if(!in_range(src, usr))
|
||||
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 = usr
|
||||
if(istype(M))
|
||||
var/obj/item/weapon/pen/E = M.get_type_in_hands(/obj/item/weapon/pen)
|
||||
if(E)
|
||||
add_fingerprint(M)
|
||||
P.attackby(E, usr)
|
||||
else
|
||||
to_chat(M, "<span class='notice'>You'll need something to write with!</span>")
|
||||
. = TRUE
|
||||
|
||||
/obj/structure/noticeboard/anomaly
|
||||
notices = 5
|
||||
@@ -190,32 +177,32 @@
|
||||
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/weapon/stamp/rd)
|
||||
P.overlays = list("paper_stamped_rd")
|
||||
src.contents += P
|
||||
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/weapon/stamp/rd)
|
||||
P.overlays = list("paper_stamped_rd")
|
||||
src.contents += P
|
||||
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/weapon/stamp/rd)
|
||||
P.overlays = list("paper_stamped_rd")
|
||||
src.contents += P
|
||||
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/weapon/stamp/rd)
|
||||
P.overlays = list("paper_stamped_rd")
|
||||
src.contents += P
|
||||
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/weapon/stamp/rd)
|
||||
P.overlays = list("paper_stamped_rd")
|
||||
src.contents += P
|
||||
contents += P
|
||||
Reference in New Issue
Block a user