Merge branch 'master' into familyport
This commit is contained in:
@@ -1,127 +1,201 @@
|
||||
/**
|
||||
* Clipboard
|
||||
*/
|
||||
/obj/item/clipboard
|
||||
name = "clipboard"
|
||||
icon = 'icons/obj/bureaucracy.dmi'
|
||||
icon_state = "clipboard"
|
||||
item_state = "clipboard"
|
||||
// item_state = "clipboard"
|
||||
// worn_icon_state = "clipboard"
|
||||
throwforce = 0
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
var/obj/item/pen/haspen //The stored pen.
|
||||
var/obj/item/paper/toppaper //The topmost piece of paper.
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
resistance_flags = FLAMMABLE
|
||||
/// The stored pen
|
||||
var/obj/item/pen/pen
|
||||
/// Is the pen integrated?
|
||||
var/integrated_pen = FALSE
|
||||
/**
|
||||
* Weakref of the topmost piece of paper
|
||||
*
|
||||
* This is used for the paper displayed on the clipboard's icon
|
||||
* and it is the one attacked, when attacking the clipboard.
|
||||
* (As you can't organise contents directly in BYOND)
|
||||
*/
|
||||
var/datum/weakref/toppaper_ref
|
||||
|
||||
/obj/item/clipboard/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins putting [user.p_their()] head into the clip of \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return BRUTELOSS//the clipboard's clip is very strong. industrial duty. can kill a man easily.
|
||||
user.visible_message(span_suicide("[user] begins putting [user.p_their()] head into the clip of \the [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
|
||||
return BRUTELOSS //The clipboard's clip is very strong. Industrial duty. Can kill a man easily.
|
||||
|
||||
/obj/item/clipboard/Initialize()
|
||||
update_icon()
|
||||
update_appearance()
|
||||
. = ..()
|
||||
|
||||
/obj/item/clipboard/Destroy()
|
||||
QDEL_NULL(haspen)
|
||||
QDEL_NULL(toppaper) //let movable/Destroy handle the rest
|
||||
QDEL_NULL(pen)
|
||||
return ..()
|
||||
|
||||
/obj/item/clipboard/examine()
|
||||
. = ..()
|
||||
if(!integrated_pen && pen)
|
||||
. += span_notice("Alt-click to remove [pen].")
|
||||
var/obj/item/paper/toppaper = toppaper_ref?.resolve()
|
||||
if(toppaper)
|
||||
. += span_notice("Right-click to remove [toppaper].")
|
||||
|
||||
/// Take out the topmost paper
|
||||
/obj/item/clipboard/proc/remove_paper(obj/item/paper/paper, mob/user)
|
||||
if(!istype(paper))
|
||||
return
|
||||
paper.forceMove(user.loc)
|
||||
user.put_in_hands(paper)
|
||||
to_chat(user, span_notice("You remove [paper] from [src]."))
|
||||
var/obj/item/paper/toppaper = toppaper_ref?.resolve()
|
||||
if(paper == toppaper)
|
||||
UnregisterSignal(toppaper, COMSIG_ATOM_UPDATED_ICON)
|
||||
toppaper_ref = null
|
||||
var/obj/item/paper/newtop = locate(/obj/item/paper) in src
|
||||
if(newtop && (newtop != paper))
|
||||
toppaper_ref = WEAKREF(newtop)
|
||||
else
|
||||
toppaper_ref = null
|
||||
update_icon()
|
||||
|
||||
/obj/item/clipboard/proc/remove_pen(mob/user)
|
||||
pen.forceMove(user.loc)
|
||||
user.put_in_hands(pen)
|
||||
to_chat(user, span_notice("You remove [pen] from [src]."))
|
||||
pen = null
|
||||
update_icon()
|
||||
|
||||
/obj/item/clipboard/AltClick(mob/user)
|
||||
..()
|
||||
if(pen)
|
||||
if(integrated_pen)
|
||||
to_chat(user, span_warning("You can't seem to find a way to remove [src]'s [pen]."))
|
||||
else
|
||||
remove_pen(user)
|
||||
|
||||
/obj/item/clipboard/update_overlays()
|
||||
. = ..()
|
||||
var/obj/item/paper/toppaper = toppaper_ref?.resolve()
|
||||
if(toppaper)
|
||||
. += toppaper.icon_state
|
||||
. += toppaper.overlays
|
||||
if(haspen)
|
||||
if(pen)
|
||||
. += "clipboard_pen"
|
||||
. += "clipboard_over"
|
||||
|
||||
/obj/item/clipboard/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/paper))
|
||||
if(!user.transferItemToLoc(W, src))
|
||||
/obj/item/clipboard/attack_hand(mob/user, act_intent)
|
||||
if(act_intent != INTENT_HELP)
|
||||
var/obj/item/paper/toppaper = toppaper_ref?.resolve()
|
||||
remove_paper(toppaper, user)
|
||||
return TRUE
|
||||
. = ..()
|
||||
|
||||
/obj/item/clipboard/attackby(obj/item/weapon, mob/user, params)
|
||||
var/obj/item/paper/toppaper = toppaper_ref?.resolve()
|
||||
if(istype(weapon, /obj/item/paper))
|
||||
//Add paper into the clipboard
|
||||
if(!user.transferItemToLoc(weapon, src))
|
||||
return
|
||||
toppaper = W
|
||||
to_chat(user, "<span class='notice'>You clip the paper onto \the [src].</span>")
|
||||
update_icon()
|
||||
if(toppaper)
|
||||
UnregisterSignal(toppaper, COMSIG_ATOM_UPDATED_ICON)
|
||||
RegisterSignal(weapon, COMSIG_ATOM_UPDATED_ICON, .proc/on_top_paper_change)
|
||||
toppaper_ref = WEAKREF(weapon)
|
||||
to_chat(user, span_notice("You clip [weapon] onto [src]."))
|
||||
else if(istype(weapon, /obj/item/pen) && !pen)
|
||||
//Add a pen into the clipboard, attack (write) if there is already one
|
||||
if(!usr.transferItemToLoc(weapon, src))
|
||||
return
|
||||
pen = weapon
|
||||
to_chat(usr, span_notice("You slot [weapon] into [src]."))
|
||||
else if(toppaper)
|
||||
toppaper.attackby(user.get_active_held_item(), user)
|
||||
update_icon()
|
||||
|
||||
update_appearance()
|
||||
|
||||
/obj/item/clipboard/attack_self(mob/user)
|
||||
var/dat = "<title>Clipboard</title>"
|
||||
if(haspen)
|
||||
dat += "<A href='?src=[REF(src)];pen=1'>Remove Pen</A><BR><HR>"
|
||||
else
|
||||
dat += "<A href='?src=[REF(src)];addpen=1'>Add Pen</A><BR><HR>"
|
||||
|
||||
//The topmost paper. You can't organise contents directly in byond, so this is what we're stuck with. -Pete
|
||||
if(toppaper)
|
||||
var/obj/item/paper/P = toppaper
|
||||
dat += "<A href='?src=[REF(src)];write=[REF(P)]'>Write</A> <A href='?src=[REF(src)];remove=[REF(P)]'>Remove</A> - <A href='?src=[REF(src)];read=[REF(P)]'>[P.name]</A><BR><HR>"
|
||||
|
||||
for(P in src)
|
||||
if(P == toppaper)
|
||||
continue
|
||||
dat += "<A href='?src=[REF(src)];write=[REF(P)]'>Write</A> <A href='?src=[REF(src)];remove=[REF(P)]'>Remove</A> <A href='?src=[REF(src)];top=[REF(P)]'>Move to top</A> - <A href='?src=[REF(src)];read=[REF(P)]'>[P.name]</A><BR>"
|
||||
user << browse(dat, "window=clipboard")
|
||||
onclose(user, "clipboard")
|
||||
add_fingerprint(usr)
|
||||
ui_interact(user)
|
||||
return
|
||||
|
||||
/obj/item/clipboard/ui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "Clipboard")
|
||||
ui.open()
|
||||
|
||||
/obj/item/clipboard/Topic(href, href_list)
|
||||
..()
|
||||
if(usr.stat != CONSCIOUS || usr.restrained()) //HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED))
|
||||
/obj/item/clipboard/ui_data(mob/user)
|
||||
// prepare data for TGUI
|
||||
var/list/data = list()
|
||||
data["pen"] = "[pen]"
|
||||
data["integrated_pen"] = integrated_pen
|
||||
|
||||
var/obj/item/paper/toppaper = toppaper_ref?.resolve()
|
||||
data["top_paper"] = "[toppaper]"
|
||||
data["top_paper_ref"] = "[REF(toppaper)]"
|
||||
|
||||
data["paper"] = list()
|
||||
data["paper_ref"] = list()
|
||||
for(var/obj/item/paper/paper in src)
|
||||
if(paper == toppaper)
|
||||
continue
|
||||
data["paper"] += "[paper]"
|
||||
data["paper_ref"] += "[REF(paper)]"
|
||||
|
||||
return data
|
||||
|
||||
/obj/item/clipboard/ui_act(action, params)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
|
||||
if(usr.contents.Find(src))
|
||||
if(usr.stat != CONSCIOUS || usr.restrained())
|
||||
return
|
||||
|
||||
if(href_list["pen"])
|
||||
if(haspen)
|
||||
haspen.forceMove(usr.loc)
|
||||
usr.put_in_hands(haspen)
|
||||
haspen = null
|
||||
switch(action)
|
||||
// Take the pen out
|
||||
if("remove_pen")
|
||||
if(pen)
|
||||
if(!integrated_pen)
|
||||
remove_pen(usr)
|
||||
else
|
||||
to_chat(usr, span_warning("You can't seem to find a way to remove [src]'s [pen]."))
|
||||
. = TRUE
|
||||
// Take paper out
|
||||
if("remove_paper")
|
||||
var/obj/item/paper/paper = locate(params["ref"]) in src
|
||||
if(istype(paper))
|
||||
remove_paper(paper, usr)
|
||||
. = TRUE
|
||||
// Look at (or edit) the paper
|
||||
if("edit_paper")
|
||||
var/obj/item/paper/paper = locate(params["ref"]) in src
|
||||
if(istype(paper))
|
||||
paper.ui_interact(usr)
|
||||
update_icon()
|
||||
. = TRUE
|
||||
// Move paper to the top
|
||||
if("move_top_paper")
|
||||
var/obj/item/paper/paper = locate(params["ref"]) in src
|
||||
if(istype(paper))
|
||||
toppaper_ref = WEAKREF(paper)
|
||||
to_chat(usr, span_notice("You move [paper] to the top."))
|
||||
update_icon()
|
||||
. = TRUE
|
||||
// Rename the paper (it's a verb)
|
||||
if("rename_paper")
|
||||
var/obj/item/paper/paper = locate(params["ref"]) in src
|
||||
if(istype(paper))
|
||||
paper.rename()
|
||||
update_icon()
|
||||
. = TRUE
|
||||
|
||||
if(href_list["addpen"])
|
||||
if(!haspen)
|
||||
var/obj/item/held = usr.get_active_held_item()
|
||||
if(istype(held, /obj/item/pen))
|
||||
var/obj/item/pen/W = held
|
||||
if(!usr.transferItemToLoc(W, src))
|
||||
return
|
||||
haspen = W
|
||||
to_chat(usr, "<span class='notice'>You slot [W] into [src].</span>")
|
||||
|
||||
if(href_list["write"])
|
||||
var/obj/item/P = locate(href_list["write"]) in src
|
||||
if(istype(P))
|
||||
if(usr.get_active_held_item())
|
||||
P.attackby(usr.get_active_held_item(), usr)
|
||||
|
||||
if(href_list["remove"])
|
||||
var/obj/item/P = locate(href_list["remove"]) in src
|
||||
if(istype(P))
|
||||
P.forceMove(usr.loc)
|
||||
usr.put_in_hands(P)
|
||||
if(P == toppaper)
|
||||
toppaper = null
|
||||
var/obj/item/paper/newtop = locate(/obj/item/paper) in src
|
||||
if(newtop && (newtop != P))
|
||||
toppaper = newtop
|
||||
else
|
||||
toppaper = null
|
||||
|
||||
if(href_list["read"])
|
||||
var/obj/item/paper/P = locate(href_list["read"]) in src
|
||||
if(istype(P))
|
||||
usr.examinate(P)
|
||||
|
||||
if(href_list["top"])
|
||||
var/obj/item/P = locate(href_list["top"]) in src
|
||||
if(istype(P))
|
||||
toppaper = P
|
||||
to_chat(usr, "<span class='notice'>You move [P.name] to the top.</span>")
|
||||
|
||||
//Update everything
|
||||
attack_self(usr)
|
||||
update_icon()
|
||||
/**
|
||||
* This is a simple proc to handle calling update_icon() upon receiving the top paper's `COMSIG_ATOM_UPDATE_APPEARANCE`.
|
||||
*/
|
||||
/obj/item/clipboard/proc/on_top_paper_change()
|
||||
SIGNAL_HANDLER
|
||||
update_appearance()
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* lipstick wiping is in code/game/objects/items/weapons/cosmetics.dm!
|
||||
*/
|
||||
#define MAX_PAPER_LENGTH 5000
|
||||
#define MAX_PAPER_STAMPS 30 // Too low?
|
||||
#define MAX_PAPER_STAMPS 30 // Too low?
|
||||
#define MAX_PAPER_STAMPS_OVERLAYS 4
|
||||
#define MODE_READING 0
|
||||
#define MODE_WRITING 1
|
||||
@@ -22,6 +22,8 @@
|
||||
icon = 'icons/obj/bureaucracy.dmi'
|
||||
icon_state = "paper"
|
||||
item_state = "paper"
|
||||
// worn_icon_state = "paper"
|
||||
// custom_fire_overlay = "paper_onfire_overlay"
|
||||
throwforce = 0
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throw_range = 1
|
||||
@@ -41,8 +43,8 @@
|
||||
var/show_written_words = TRUE
|
||||
|
||||
/// The (text for the) stamps on the paper.
|
||||
var/list/stamps /// Positioning for the stamp in tgui
|
||||
var/list/stamped /// Overlay info
|
||||
var/list/stamps /// Positioning for the stamp in tgui
|
||||
var/list/stamped /// Overlay info
|
||||
|
||||
var/contact_poison // Reagent ID to transfer on contact
|
||||
var/contact_poison_volume = 0
|
||||
@@ -61,20 +63,23 @@
|
||||
|
||||
/**
|
||||
* This proc copies this sheet of paper to a new
|
||||
* sheet, Makes it nice and easy for carbon and
|
||||
* the copyer machine
|
||||
* sheet. Used by carbon papers and the photocopier machine.
|
||||
*/
|
||||
/obj/item/paper/proc/copy()
|
||||
var/obj/item/paper/N = new(arglist(args))
|
||||
N.info = info
|
||||
N.color = color
|
||||
N.update_icon_state()
|
||||
N.stamps = stamps
|
||||
N.stamped = stamped.Copy()
|
||||
N.form_fields = form_fields.Copy()
|
||||
N.field_counter = field_counter
|
||||
copy_overlays(N, TRUE)
|
||||
return N
|
||||
/obj/item/paper/proc/copy(paper_type = /obj/item/paper, atom/location = loc, colored = TRUE)
|
||||
var/obj/item/paper/new_paper = new paper_type (location)
|
||||
if(colored)
|
||||
new_paper.color = color
|
||||
new_paper.info = info
|
||||
else //This basically just breaks the existing color tag, which we need to do because the innermost tag takes priority.
|
||||
var/static/greyscale_info = regex("<font face=\"([PEN_FONT]|[CRAYON_FONT])\" color=", "i")
|
||||
new_paper.info = replacetext(info, greyscale_info, "<font face=\"$1\" nocolor=")
|
||||
new_paper.stamps = stamps?.Copy()
|
||||
new_paper.stamped = stamped?.Copy()
|
||||
new_paper.form_fields = form_fields.Copy()
|
||||
new_paper.field_counter = field_counter
|
||||
new_paper.update_icon_state()
|
||||
copy_overlays(new_paper, TRUE)
|
||||
return new_paper
|
||||
|
||||
/**
|
||||
* This proc sets the text of the paper and updates the
|
||||
@@ -100,11 +105,12 @@
|
||||
. = ..()
|
||||
pixel_x = initial(pixel_x) + rand(-9, 9)
|
||||
pixel_y = initial(pixel_y) + rand(-8, 8)
|
||||
update_icon()
|
||||
update_appearance()
|
||||
|
||||
/obj/item/paper/update_icon_state()
|
||||
if(info && show_written_words)
|
||||
icon_state = "[initial(icon_state)]_words"
|
||||
return ..()
|
||||
|
||||
/obj/item/paper/verb/rename()
|
||||
set name = "Rename paper"
|
||||
@@ -116,17 +122,17 @@
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/H = usr
|
||||
if(HAS_TRAIT(H, TRAIT_CLUMSY) && prob(25))
|
||||
to_chat(H, "<span class='warning'>You cut yourself on the paper! Ahhhh! Ahhhhh!</span>")
|
||||
to_chat(H, span_warning("You cut yourself on the paper! Ahhhh! Ahhhhh!"))
|
||||
H.damageoverlaytemp = 9001
|
||||
H.update_damage_hud()
|
||||
return
|
||||
var/n_name = stripped_input(usr, "What would you like to label the paper?", "Paper Labelling", null, MAX_NAME_LEN)
|
||||
if((loc == usr && usr.stat == CONSCIOUS))
|
||||
if(((loc == usr || istype(loc, /obj/item/clipboard)) && usr.stat == CONSCIOUS))
|
||||
name = "paper[(n_name ? text("- '[n_name]'") : null)]"
|
||||
add_fingerprint(usr)
|
||||
|
||||
/obj/item/paper/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] scratches a grid on [user.p_their()] wrist with the paper! It looks like [user.p_theyre()] trying to commit sudoku...</span>")
|
||||
user.visible_message(span_suicide("[user] scratches a grid on [user.p_their()] wrist with the paper! It looks like [user.p_theyre()] trying to commit sudoku..."))
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/paper/proc/clearpaper()
|
||||
@@ -139,18 +145,18 @@
|
||||
/obj/item/paper/examine(mob/user)
|
||||
. = ..()
|
||||
if(!in_range(user, src) && !isobserver(user))
|
||||
. += "<span class='warning'>You're too far away to read it!</span>"
|
||||
. += span_warning("You're too far away to read it!")
|
||||
return
|
||||
if(user.can_read(src))
|
||||
ui_interact(user)
|
||||
return
|
||||
. += "<span class='warning'>You cannot read it!</span>"
|
||||
. += span_warning("You cannot read it!")
|
||||
|
||||
/obj/item/paper/ui_status(mob/user,/datum/ui_state/state)
|
||||
// Are we on fire? Hard ot read if so
|
||||
if(resistance_flags & ON_FIRE)
|
||||
return UI_CLOSE
|
||||
if(!in_range(user,src))
|
||||
if(!in_range(user, src) && !isobserver(user))
|
||||
return UI_CLOSE
|
||||
if(user.incapacitated(TRUE, TRUE) || (isobserver(user) && !IsAdminGhost(user)))
|
||||
return UI_UPDATE
|
||||
@@ -158,7 +164,7 @@
|
||||
// .. or if you cannot read
|
||||
if(!user.can_read(src))
|
||||
return UI_CLOSE
|
||||
if(in_contents_of(/obj/machinery/door/airlock))
|
||||
if(in_contents_of(/obj/machinery/door/airlock) || in_contents_of(/obj/item/clipboard))
|
||||
return UI_INTERACTIVE
|
||||
return ..()
|
||||
|
||||
@@ -176,8 +182,8 @@
|
||||
return
|
||||
. = TRUE
|
||||
if(!bypass_clumsy && HAS_TRAIT(user, TRAIT_CLUMSY) && prob(10) && Adjacent(user))
|
||||
user.visible_message("<span class='warning'>[user] accidentally ignites [user.p_them()]self!</span>", \
|
||||
"<span class='userdanger'>You miss [src] and accidentally light yourself on fire!</span>")
|
||||
user.visible_message(span_warning("[user] accidentally ignites [user.p_them()]self!"), \
|
||||
span_userdanger("You miss [src] and accidentally light yourself on fire!"))
|
||||
if(user.is_holding(I)) //checking if they're holding it in case TK is involved
|
||||
user.dropItemToGround(I)
|
||||
user.adjust_fire_stacks(1)
|
||||
@@ -195,19 +201,23 @@
|
||||
SStgui.close_uis(src)
|
||||
return
|
||||
|
||||
if(istype(P, /obj/item/pen) || istype(P, /obj/item/toy/crayon))
|
||||
// Enable picking paper up by clicking on it with the clipboard or folder
|
||||
if(istype(P, /obj/item/clipboard) || istype(P, /obj/item/folder))
|
||||
P.attackby(src, user)
|
||||
return
|
||||
else if(istype(P, /obj/item/pen) || istype(P, /obj/item/toy/crayon))
|
||||
if(length(info) >= MAX_PAPER_LENGTH) // Sheet must have less than 1000 charaters
|
||||
to_chat(user, "<span class='warning'>This sheet of paper is full!</span>")
|
||||
to_chat(user, span_warning("This sheet of paper is full!"))
|
||||
return
|
||||
ui_interact(user)
|
||||
return
|
||||
else if(istype(P, /obj/item/stamp))
|
||||
to_chat(user, "<span class='notice'>You ready your stamp over the paper! </span>")
|
||||
to_chat(user, span_notice("You ready your stamp over the paper! "))
|
||||
ui_interact(user)
|
||||
return /// Normaly you just stamp, you don't need to read the thing
|
||||
else
|
||||
// cut paper? the sky is the limit!
|
||||
ui_interact(user) // The other ui will be created with just read mode outside of this
|
||||
ui_interact(user) // The other ui will be created with just read mode outside of this
|
||||
|
||||
return ..()
|
||||
|
||||
@@ -234,8 +244,8 @@
|
||||
. = list()
|
||||
.["text"] = info
|
||||
.["max_length"] = MAX_PAPER_LENGTH
|
||||
.["paper_color"] = !color || color == "white" ? "#FFFFFF" : color // color might not be set
|
||||
.["paper_state"] = icon_state /// TODO: show the sheet will bloodied or crinkling?
|
||||
.["paper_color"] = !color || color == "white" ? "#FFFFFF" : color // color might not be set
|
||||
.["paper_state"] = icon_state /// TODO: show the sheet will bloodied or crinkling?
|
||||
.["stamps"] = stamps
|
||||
|
||||
|
||||
@@ -244,27 +254,34 @@
|
||||
var/list/data = list()
|
||||
data["edit_usr"] = "[user]"
|
||||
|
||||
var/obj/O = user.get_active_held_item()
|
||||
if(istype(O, /obj/item/toy/crayon))
|
||||
var/obj/item/toy/crayon/PEN = O
|
||||
var/obj/holding = user.get_active_held_item()
|
||||
// Use a clipboard's pen, if applicable
|
||||
if(istype(loc, /obj/item/clipboard))
|
||||
var/obj/item/clipboard/clipboard = loc
|
||||
// This is just so you can still use a stamp if you're holding one. Otherwise, it'll
|
||||
// use the clipboard's pen, if applicable.
|
||||
if(!istype(holding, /obj/item/stamp) && clipboard.pen)
|
||||
holding = clipboard.pen
|
||||
if(istype(holding, /obj/item/toy/crayon))
|
||||
var/obj/item/toy/crayon/PEN = holding
|
||||
data["pen_font"] = CRAYON_FONT
|
||||
data["pen_color"] = PEN.paint_color
|
||||
data["edit_mode"] = MODE_WRITING
|
||||
data["is_crayon"] = TRUE
|
||||
data["stamp_class"] = "FAKE"
|
||||
data["stamp_icon_state"] = "FAKE"
|
||||
else if(istype(O, /obj/item/pen))
|
||||
var/obj/item/pen/PEN = O
|
||||
else if(istype(holding, /obj/item/pen))
|
||||
var/obj/item/pen/PEN = holding
|
||||
data["pen_font"] = PEN.font
|
||||
data["pen_color"] = PEN.colour
|
||||
data["edit_mode"] = MODE_WRITING
|
||||
data["is_crayon"] = FALSE
|
||||
data["stamp_class"] = "FAKE"
|
||||
data["stamp_icon_state"] = "FAKE"
|
||||
else if(istype(O, /obj/item/stamp))
|
||||
else if(istype(holding, /obj/item/stamp))
|
||||
var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/simple/paper)
|
||||
data["stamp_icon_state"] = O.icon_state
|
||||
data["stamp_class"] = sheet.icon_class_name(O.icon_state)
|
||||
data["stamp_icon_state"] = holding.icon_state
|
||||
data["stamp_class"] = sheet.icon_class_name(holding.icon_state)
|
||||
data["edit_mode"] = MODE_STAMPING
|
||||
data["pen_font"] = "FAKE"
|
||||
data["pen_color"] = "FAKE"
|
||||
@@ -276,6 +293,10 @@
|
||||
data["is_crayon"] = FALSE
|
||||
data["stamp_icon_state"] = "FAKE"
|
||||
data["stamp_class"] = "FAKE"
|
||||
if(istype(loc, /obj/structure/noticeboard))
|
||||
var/obj/structure/noticeboard/noticeboard = loc
|
||||
if(!noticeboard.allowed(user))
|
||||
data["edit_mode"] = MODE_READING
|
||||
data["field_counter"] = field_counter
|
||||
data["form_fields"] = form_fields
|
||||
|
||||
@@ -289,14 +310,14 @@
|
||||
if("stamp")
|
||||
var/stamp_x = text2num(params["x"])
|
||||
var/stamp_y = text2num(params["y"])
|
||||
var/stamp_r = text2num(params["r"]) // rotation in degrees
|
||||
var/stamp_r = text2num(params["r"]) // rotation in degrees
|
||||
var/stamp_icon_state = params["stamp_icon_state"]
|
||||
var/stamp_class = params["stamp_class"]
|
||||
if (isnull(stamps))
|
||||
stamps = list()
|
||||
if(stamps.len < MAX_PAPER_STAMPS)
|
||||
// I hate byond when dealing with freaking lists
|
||||
stamps[++stamps.len] = list(stamp_class, stamp_x, stamp_y, stamp_r) /// WHHHHY
|
||||
stamps[++stamps.len] = list(stamp_class, stamp_x, stamp_y, stamp_r) /// WHHHHY
|
||||
|
||||
/// This does the overlay stuff
|
||||
if (isnull(stamped))
|
||||
@@ -307,10 +328,11 @@
|
||||
stampoverlay.pixel_y = rand(-3, 2)
|
||||
add_overlay(stampoverlay)
|
||||
LAZYADD(stamped, stamp_icon_state)
|
||||
update_icon()
|
||||
|
||||
update_static_data(usr,ui)
|
||||
var/obj/O = ui.user.get_active_held_item()
|
||||
ui.user.visible_message("<span class='notice'>[ui.user] stamps [src] with \the [O.name]!</span>", "<span class='notice'>You stamp [src] with \the [O.name]!</span>")
|
||||
ui.user.visible_message(span_notice("[ui.user] stamps [src] with \the [O.name]!"), span_notice("You stamp [src] with \the [O.name]!"))
|
||||
else
|
||||
to_chat(usr, pick("You try to stamp but you miss!", "There is no where else you can stamp!"))
|
||||
. = TRUE
|
||||
@@ -336,9 +358,14 @@
|
||||
update_static_data(usr,ui)
|
||||
|
||||
|
||||
update_icon()
|
||||
update_appearance()
|
||||
. = TRUE
|
||||
|
||||
/obj/item/paper/ui_host(mob/user)
|
||||
if(istype(loc, /obj/structure/noticeboard))
|
||||
return loc
|
||||
return ..()
|
||||
|
||||
/**
|
||||
* Construction paper
|
||||
*/
|
||||
@@ -361,9 +388,6 @@
|
||||
slot_flags = null
|
||||
show_written_words = FALSE
|
||||
|
||||
/obj/item/paper/crumpled/update_icon_state()
|
||||
return
|
||||
|
||||
/obj/item/paper/crumpled/bloody
|
||||
icon_state = "scrap_bloodied"
|
||||
|
||||
|
||||
@@ -148,6 +148,10 @@
|
||||
/obj/item/pen/afterattack(obj/O, mob/living/user, proximity)
|
||||
. = ..()
|
||||
//Changing name/description of items. Only works if they have the UNIQUE_RENAME object flag set
|
||||
try_modify_object(O, user, proximity)
|
||||
|
||||
/obj/item/pen/proc/try_modify_object(obj/O, mob/living/user, proximity)
|
||||
set waitfor = FALSE
|
||||
if(isobj(O) && proximity && (O.obj_flags & UNIQUE_RENAME))
|
||||
var/penchoice = input(user, "What would you like to edit?", "Rename, change description or reset both?") as null|anything in list("Rename","Change description","Reset")
|
||||
if(QDELETED(O) || !user.canUseTopic(O, BE_CLOSE))
|
||||
|
||||
Reference in New Issue
Block a user