From 1683c4271a1d1493b73efbb54bd8706f37c2d607 Mon Sep 17 00:00:00 2001 From: moxian Date: Wed, 16 Dec 2020 11:43:15 -0800 Subject: [PATCH] Refactors renaming things with a pen. (#14960) * Refactors renaming things with a pen. * Farie review (thanks!!) * Derp. * Farie take 2 --- .../components/binary_devices/pump.dm | 7 +- .../components/binary_devices/volume_pump.dm | 7 +- .../components/trinary_devices/filter.dm | 7 +- .../components/trinary_devices/mixer.dm | 7 +- code/_onclick/item_attack.dm | 12 ++-- code/game/atoms.dm | 67 ++++++++++++++++++ code/game/objects/items/bodybag.dm | 18 ++--- .../objects/items/devices/taperecorder.dm | 7 +- .../items/weapons/implants/implantcase.dm | 10 +-- .../items/weapons/implants/implanter.dm | 10 +-- .../objects/items/weapons/storage/firstaid.dm | 14 +--- code/game/objects/structures/door_assembly.dm | 11 ++- code/game/objects/structures/morgue.dm | 25 ++----- .../objects/structures/windoor_assembly.dm | 9 +-- code/modules/food_and_drinks/food/snacks.dm | 4 +- code/modules/games/cards.dm | 7 +- code/modules/hydroponics/gene_modder.dm | 10 +-- code/modules/library/lib_items.dm | 20 +++--- .../living/simple_animal/bot/construction.dm | 68 +++++++------------ code/modules/paperwork/folders.dm | 8 +-- code/modules/paperwork/paper.dm | 10 +-- code/modules/paperwork/pen.dm | 39 +++++------ code/modules/projectiles/gun.dm | 15 ++-- .../projectiles/guns/projectile/revolver.dm | 2 +- .../reagent_containers/glass_containers.dm | 16 +---- .../reagents/reagent_containers/iv_bag.dm | 30 ++++---- code/modules/recycling/sortingmachinery.dm | 14 +--- 27 files changed, 186 insertions(+), 268 deletions(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index 0583ef83b2d..c8d96628433 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -236,12 +236,7 @@ Thus, the two variables affect pump operation are set in New(): /obj/machinery/atmospherics/binary/pump/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/pen)) - var/t = copytext(stripped_input(user, "Enter the name for the pump.", "Rename", name), 1, MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, usr) && loc != usr) - return - name = t + rename_interactive(user, W) return else if(!istype(W, /obj/item/wrench)) return ..() diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm index 38a2f51e309..7f6cc228844 100644 --- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm @@ -233,12 +233,7 @@ Thus, the two variables affect pump operation are set in New(): /obj/machinery/atmospherics/binary/volume_pump/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/pen)) - var/t = copytext(stripped_input(user, "Enter the name for the volume pump.", "Rename", name), 1, MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, usr) && loc != usr) - return - name = t + rename_interactive(user, W) return else if(!istype(W, /obj/item/wrench)) return ..() diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 88bf257649a..ff2b3a485a4 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -254,12 +254,7 @@ /obj/machinery/atmospherics/trinary/filter/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/pen)) - var/t = copytext(stripped_input(user, "Enter the name for the filter.", "Rename", name), 1, MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, usr) && loc != usr) - return - name = t + rename_interactive(user, W) return else return ..() diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index 4897b01bf65..5db62c29b7f 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -221,12 +221,7 @@ /obj/machinery/atmospherics/trinary/mixer/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/pen)) - var/t = copytext(stripped_input(user, "Enter the name for the mixer.", "Rename", name), 1, MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, usr) && loc != usr) - return - name = t + rename_interactive(user, W) return else return ..() diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 4fd5b956df5..69ae3659fcb 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -36,27 +36,27 @@ /mob/living/attackby(obj/item/I, mob/living/user, params) user.changeNext_move(CLICK_CD_MELEE) if(attempt_harvest(I, user)) - return 1 + return TRUE return I.attack(src, user) /obj/item/proc/attack(mob/living/M, mob/living/user, def_zone) SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, M, user) SEND_SIGNAL(user, COMSIG_MOB_ITEM_ATTACK, M, user) if(flags & (NOBLUDGEON)) - return 0 + return FALSE if(can_operate(M)) //Checks if mob is lying down on table for surgery if(istype(src,/obj/item/robot_parts))//popup override for direct attach if(!attempt_initiate_surgery(src, M, user,1)) - return 0 + return FALSE else - return 1 + return TRUE if(istype(src,/obj/item/organ/external)) var/obj/item/organ/external/E = src if(E.is_robotic()) // Robot limbs are less messy to attach if(!attempt_initiate_surgery(src, M, user,1)) - return 0 + return FALSE else - return 1 + return TRUE var/obj/item/organ/external/O = M.get_organ(user.zone_selected) if((is_sharp(src) || (isscrewdriver(src) && O?.is_robotic())) && user.a_intent == INTENT_HELP) if(!attempt_initiate_surgery(src, M, user)) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 18d7c1586c3..2ab953e5fc3 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -958,3 +958,70 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) else if(C) color = C return + + +/** Call this when you want to present a renaming prompt to the user. + + It's a simple proc, but handles annoying edge cases such as forgetting to add a "cancel" button, + or being able to rename stuff remotely. + + Arguments: + * user - the renamer. + * implement - the tool doing the renaming (usually, a pen). + * use_prefix - whether the new name should follow the format of "thing - user-given label" or + if we allow to change the name completely arbitrarily. + * actually_rename - whether we want to really change the `src.name`, or if we want to do everything *except* that. + * prompt - a custom "what do you want rename this thing to be?" prompt shown in the inpit box. + + Returns: Either null if the renaming was aborted, or the user-provided sanitized string. + **/ +/atom/proc/rename_interactive(mob/user, obj/implement = null, use_prefix = TRUE, + actually_rename = TRUE, prompt = null) + // Sanity check that the user can, indeed, rename the thing. + // This, sadly, means you can't rename things with a telekinetic pen, but that's + // too much of a hassle to make work nicely. + if((implement && implement.loc != user) || !in_range(src, user) || user.incapacitated(ignore_lying = TRUE)) + return null + + var/prefix = "" + if(use_prefix) + prefix = "[initial(name)] - " + + var/default_value + if(!use_prefix) + default_value = name + else if(findtext(name, prefix) != 0) + default_value = copytext(name, length(prefix) + 1) + else + // Either the thing has a non-conforming name due to being set in the map + // OR (much more likely) the thing is unlabeled yet. + default_value = "" + if(!prompt) + prompt = "What would you like the label on [src] to be?" + + var/t = input(user, prompt, "Renaming [src]", default_value) as text | null + if(isnull(t)) + // user pressed Cancel + return null + + // Things could have changed between when `input` is called and when it returns. + if(!user) + return null + else if(implement && implement.loc != user) + to_chat(user, "You no longer have the pen to rename [src].") + return null + else if(!in_range(src, user)) + to_chat(user, "You cannot rename [src] from here.") + return null + else if (user.incapacitated(ignore_lying = TRUE)) + to_chat(user, "You cannot rename [src] in your current state.") + return null + + + t = sanitize(copytext(t, 1, MAX_NAME_LEN)) + if(actually_rename) + if(t == "") + name = "[initial(name)]" + else + name = "[prefix][t]" + return t diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index 58a4ab63d34..0c02a2125a6 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -27,23 +27,17 @@ /obj/structure/closet/body_bag/attackby(W as obj, mob/user as mob, params) if(istype(W, /obj/item/pen)) - var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text - if(user.get_active_hand() != W) + var/t = rename_interactive(user, W) + if(isnull(t)) return - if(!in_range(src, user) && src.loc != user) - return - t = sanitize(copytext(t,1,MAX_MESSAGE_LEN)) + cut_overlays() if(t) - src.name = "body bag - " - src.name += t - src.overlays += image(src.icon, "bodybag_label") - else - src.name = "body bag" + add_overlay(image(icon, "bodybag_label")) return if(istype(W, /obj/item/wirecutters)) to_chat(user, "You cut the tag off the bodybag") - src.name = "body bag" - src.overlays.Cut() + name = "body bag" + cut_overlays() return return ..() diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 3eeb992c87e..f66756e55dc 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -309,12 +309,7 @@ to_chat(user, "You wound the tape back in!") fix() else if(istype(I, /obj/item/pen)) - var/title = stripped_input(usr,"What do you want to name the tape?", "Tape Renaming", name, MAX_NAME_LEN) - if(!title || !length(title)) - name = initial(name) - return - name = "tape - [title]" - + rename_interactive(user, I) //Random colour tapes /obj/item/tape/random/New() diff --git a/code/game/objects/items/weapons/implants/implantcase.dm b/code/game/objects/items/weapons/implants/implantcase.dm index 965c5ca7d94..6f331f2be53 100644 --- a/code/game/objects/items/weapons/implants/implantcase.dm +++ b/code/game/objects/items/weapons/implants/implantcase.dm @@ -29,15 +29,7 @@ /obj/item/implantcase/attackby(obj/item/W, mob/user, params) ..() if(istype(W, /obj/item/pen)) - var/t = stripped_input(user, "What would you like the label to be?", name, null) - if(user.get_active_hand() != W) - return - if(!in_range(src, user) && loc != user) - return - if(t) - name = "implant case - '[t]'" - else - name = "implant case" + rename_interactive(user, W) else if(istype(W, /obj/item/implanter)) var/obj/item/implanter/I = W if(I.imp) diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index 7aba09dfd26..a3f348274f2 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -43,15 +43,7 @@ /obj/item/implanter/attackby(obj/item/W, mob/user, params) ..() if(istype(W, /obj/item/pen)) - var/t = stripped_input(user, "What would you like the label to be?", name, null) - if(user.get_active_hand() != W) - return - if(!in_range(src, user) && loc != user) - return - if(t) - name = "implanter ([t])" - else - name = "implanter" + rename_interactive(user, W) /obj/item/implanter/New() ..() diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index 29d9e3b0487..025831df8a7 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -317,22 +317,10 @@ /obj/item/storage/pill_bottle/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/pen) || istype(I, /obj/item/flashlight/pen)) - var/tmp_label = sanitize(input(user, "Enter a label for [name]","Label",label_text)) - if(length(tmp_label) > MAX_NAME_LEN) - to_chat(user, "The label can be at most [MAX_NAME_LEN] characters long.") - else - to_chat(user, "You set the label to \"[tmp_label]\".") - label_text = tmp_label - update_name_label() + rename_interactive(user, I) else return ..() -/obj/item/storage/pill_bottle/proc/update_name_label() - if(label_text == "") - name = base_name - else - name = "[base_name] ([label_text])" - /obj/item/storage/pill_bottle/patch_pack name = "Patch Pack" desc = "It's a container for storing medical patches." diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 386afb0e705..518ab44213c 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -55,12 +55,11 @@ /obj/structure/door_assembly/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/pen)) - var/t = copytext(stripped_input(user, "Enter the name for the door.", name, created_name),1,MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, usr) && loc != usr) - return - created_name = t + // The door assembly gets renamed to "Assembly - Foobar", + // but the `t` returned from the proc is just "Foobar" without the prefix. + var/t = rename_interactive(user, W) + if(!isnull(t)) + created_name = t return else if(iscoil(W) && state == AIRLOCK_ASSEMBLY_NEEDS_WIRES && anchored) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 9375b6dce72..ee717fe5a8b 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -125,18 +125,12 @@ /obj/structure/morgue/attackby(P as obj, mob/user as mob, params) if(istype(P, /obj/item/pen)) - var/t = input(user, "What would you like the label to be?", text("[]", name), null) as text - if(user.get_active_hand() != P) + var/t = rename_interactive(user, P) + if(isnull(t)) return - if((!in_range(src, usr) && loc != user)) - return - t = sanitize(copytext(t,1,MAX_MESSAGE_LEN)) + cut_overlays() if(t) - name = text("Morgue- '[]'", t) - overlays += image(icon, "morgue_label") - else - name = "Morgue" - overlays.Cut() + add_overlay(image(icon, "morgue_label")) add_fingerprint(user) return return ..() @@ -325,16 +319,7 @@ /obj/structure/crematorium/attackby(P as obj, mob/user as mob, params) if(istype(P, /obj/item/pen)) - var/t = input(user, "What would you like the label to be?", text("[]", name), null) as text - if(user.get_active_hand() != P) - return - if((!in_range(src, usr) > 1 && loc != user)) - return - t = sanitize(copytext(t,1,MAX_MESSAGE_LEN)) - if(t) - name = text("Crematorium- '[]'", t) - else - name = "Crematorium" + rename_interactive(user, P) add_fingerprint(user) return return ..() diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 9e96a55677d..c25b46c8fea 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -148,12 +148,9 @@ W.forceMove(loc) else if(istype(W, /obj/item/pen)) - var/t = stripped_input(user, "Enter the name for the door.", name, created_name,MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, usr) && loc != usr) - return - created_name = t + var/t = rename_interactive(user, W) + if(!isnull(t)) + created_name = t return else return ..() diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 38e1acd550b..e5276f6c632 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -83,9 +83,7 @@ /obj/item/reagent_containers/food/snacks/attackby(obj/item/W, mob/user, params) if(istype(W,/obj/item/pen)) - var/n_name = sanitize(copytext(input(usr, "What would you like to name this dish?", "Food Renaming", null) as text, 1, MAX_NAME_LEN)) - if((loc == usr && usr.stat == 0)) - name = "[n_name]" + rename_interactive(user, W, use_prefix = FALSE, prompt = "What would you like to name this dish?") return if(istype(W,/obj/item/storage)) ..() // -> item/attackby(, params) diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 9a7c8cca075..15833e1156b 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -283,10 +283,9 @@ if(P.name != "Blank Card") to_chat(user,"You cannot write on that card.") return - var/cardtext = sanitize(input(user, "What do you wish to write on the card?", "Card Editing") as text|null, MAX_PAPER_MESSAGE_LEN) - if(!cardtext) - return - P.name = cardtext + var/t = rename_interactive(user, P, use_prefix = FALSE, actually_rename = FALSE) + if(t && P.name == "Blank Card") + P.name = t // SNOWFLAKE FOR CAG, REMOVE IF OTHER CARDS ARE ADDED THAT USE THIS. P.card_icon = "cag_white_card" update_icon() diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index 7ce64f40b20..3436d0f1cb7 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -458,15 +458,7 @@ /obj/item/disk/plantgene/attackby(obj/item/W, mob/user, params) ..() if(istype(W, /obj/item/pen)) - var/t = stripped_input(user, "What would you like the label to be?", name, null) - if(user.get_active_hand() != W) - return - if(!in_range(src, user) && loc != user) - return - if(t) - name = "plant data disk - '[t]'" - else - name = "plant data disk" + rename_interactive(user, W) /obj/item/disk/plantgene/proc/update_name() if(gene) diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 4217c4be6f7..33a32b0387c 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -33,13 +33,13 @@ /obj/structure/bookcase/attackby(obj/item/O as obj, mob/user as mob, params) if(busy) //So that you can't mess with it while deconstructing - return 1 + return TRUE if(is_type_in_list(O, allowed_books)) if(!user.drop_item()) return O.forceMove(src) update_icon() - return 1 + return TRUE else if(istype(O, /obj/item/storage/bag/books)) var/obj/item/storage/bag/books/B = O for(var/obj/item/T in B.contents) @@ -47,28 +47,26 @@ B.remove_from_storage(T, src) to_chat(user, "You empty [O] into [src].") update_icon() - return 1 + return TRUE else if(istype(O, /obj/item/wrench)) user.visible_message("[user] starts disassembling \the [src].", \ "You start disassembling \the [src].") playsound(get_turf(src), O.usesound, 50, 1) - busy = 1 + busy = TRUE if(do_after(user, 50 * O.toolspeed, target = src)) playsound(get_turf(src), O.usesound, 75, 1) user.visible_message("[user] disassembles \the [src].", \ "You disassemble \the [src].") - busy = 0 + busy = FALSE density = 0 deconstruct(TRUE) else - busy = 0 - return 1 + busy = FALSE + return TRUE else if(istype(O, /obj/item/pen)) - var/newname = stripped_input(user, "What would you like to title this [name]?") - if(newname) - name = ("bookcase ([sanitize(newname)])") - return 1 + rename_interactive(user, O) + return TRUE else return ..() diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index e18672ffa20..beca603f4cc 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -29,13 +29,10 @@ qdel(src) else if(istype(W, /obj/item/pen)) - var/t = stripped_input(user, "Enter new robot name", name, created_name,MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, user) && loc != user) - return - created_name = t - log_game("[key_name(user)] has renamed a robot to [t]") + var/t = rename_interactive(user, W, prompt = "Enter new robot name") + if(!isnull(t)) + created_name = t + log_game("[key_name(user)] has renamed a robot to [t]") //Edbot Assembly @@ -53,13 +50,10 @@ ..() if(istype(W, /obj/item/pen)) - var/t = stripped_input(user, "Enter new robot name", name, created_name,MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, user) && loc != user) - return - created_name = t - log_game("[key_name(user)] has renamed a robot to [t]") + var/t = rename_interactive(user, W, prompt = "Enter new robot name") + if(!isnull(t)) + created_name = t + log_game("[key_name(user)] has renamed a robot to [t]") return switch(build_step) @@ -277,14 +271,10 @@ qdel(src) else if(istype(W, /obj/item/pen)) - var/t = stripped_input(user, "Enter new robot name", name, created_name,MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, user) && loc != user) - return - - created_name = t - log_game("[key_name(user)] has renamed a robot to [t]") + var/t = rename_interactive(user, W, prompt = "Enter new robot name") + if(!isnull(t)) + created_name = t + log_game("[key_name(user)] has renamed a robot to [t]") /obj/item/toolbox_tiles/sensor/attackby(obj/item/W, mob/user, params) ..() @@ -297,14 +287,10 @@ user.unEquip(src, 1) qdel(src) else if(istype(W, /obj/item/pen)) - var/t = stripped_input(user, "Enter new robot name", name, created_name,MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, user) && loc != user) - return - - created_name = t - log_game("[key_name(user)] has renamed a robot to [t]") + var/t = rename_interactive(user, W, prompt = "Enter new robot name") + if(!isnull(t)) + created_name = t + log_game("[key_name(user)] has renamed a robot to [t]") //Medbot Assembly /obj/item/storage/firstaid/attackby(obj/item/I, mob/user, params) @@ -369,13 +355,10 @@ /obj/item/firstaid_arm_assembly/attackby(obj/item/I, mob/user, params) ..() if(istype(I, /obj/item/pen)) - var/t = stripped_input(user, "Enter new robot name", name, created_name, MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, user) && loc != user) - return - created_name = t - log_game("[key_name(user)] has renamed a robot to [t]") + var/t = rename_interactive(user, I, prompt = "Enter new robot name") + if(!isnull(t)) + created_name = t + log_game("[key_name(user)] has renamed a robot to [t]") else switch(build_step) if(0) @@ -481,13 +464,10 @@ qdel(src) else if(istype(I, /obj/item/pen)) - var/t = stripped_input(user, "Enter new robot name", name, created_name,MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, user) && loc != user) - return - created_name = t - log_game("[key_name(user)] has renamed a robot to [t]") + var/t = rename_interactive(user, I, prompt = "Enter new robot name") + if(!isnull(t)) + created_name = t + log_game("[key_name(user)] has renamed a robot to [t]") else if(istype(I, /obj/item/screwdriver)) if(!build_step) diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index eefb4d299a4..47ddcda3036 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -42,13 +42,7 @@ to_chat(user, "You put the [W] into \the [src].") update_icon() else if(istype(W, /obj/item/pen)) - var/n_name = clean_input("What would you like to label the folder?", "Folder Labelling", null) - if(!n_name) - return - n_name = sanitize(copytext(n_name, 1, MAX_NAME_LEN)) - - if((loc == usr || Adjacent(usr)) && usr.stat == 0) - name = "folder[(n_name ? text("- '[n_name]'") : null)]" + rename_interactive(user, W) else return ..() diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index d8c38ae2c7d..4c43e92ca94 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -103,11 +103,13 @@ if(!usr.is_literate()) to_chat(usr, "You don't know how to read.") return - var/n_name = sanitize(copytext(input(usr, "What would you like to label the paper?", "Paper Labelling", name) as text, 1, MAX_MESSAGE_LEN)) - if((loc == usr && usr.stat == 0)) - name = "[(n_name ? text("[n_name]") : initial(name))]" - if(name != "paper") + var/n_name = rename_interactive(usr) + if(isnull(n_name)) + return + if(n_name != "") desc = "This is a paper titled '" + name + "'." + else + desc = initial(desc) add_fingerprint(usr) return diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index c4e41c539c0..80b875fe4ee 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -64,7 +64,7 @@ var/pen_color_iconstate = "pencolor" var/pen_color_shift = 3 -/obj/item/pen/multi/New() +/obj/item/pen/multi/Initialize(mapload) ..() update_icon() @@ -104,21 +104,6 @@ icon_state = "fountainpen" pen_color_shift = 0 -/obj/item/pen/attack(mob/living/M, mob/user) - if(!istype(M)) - return - - if(!force) - if(M.can_inject(user, TRUE)) - to_chat(user, "You stab [M] with the pen.") -// to_chat(M, "You feel a tiny prick!") - . = 1 - - add_attack_logs(user, M, "Stabbed with [src]") - - else - . = ..() - /* * Sleepypens */ @@ -128,18 +113,26 @@ /obj/item/pen/sleepy/attack(mob/living/M, mob/user) - if(!istype(M)) return + if(!istype(M)) + return - if(..()) - if(reagents.total_volume) - if(M.reagents) - reagents.trans_to(M, 50) + if(!..()) + return + + if(!M.can_inject(user, TRUE)) + return + var/transfered = 0 + if(reagents.total_volume && M.reagents) + transfered = reagents.trans_to(M, 50) + to_chat(user, "You sneakily stab [M] with the pen.") + add_attack_logs(user, M, "Stabbed with (sleepy) [src]. [transfered]u of reagents transfered.") + return TRUE -/obj/item/pen/sleepy/New() +/obj/item/pen/sleepy/Initialize(mapload) + . = ..() create_reagents(100) reagents.add_reagent("ketamine", 100) - ..() /* diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 8d4549ba700..2aef65cc638 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -39,8 +39,8 @@ var/spread = 0 var/randomspread = 1 - var/unique_rename = 0 //allows renaming with a pen - var/unique_reskin = 0 //allows one-time reskinning + var/unique_rename = TRUE //allows renaming with a pen + var/unique_reskin = TRUE //allows one-time reskinning var/current_skin = null //the skin choice if we had a reskin var/list/options = list() @@ -318,7 +318,9 @@ if(unique_rename) if(istype(I, /obj/item/pen)) - rename_gun(user) + var/t = rename_interactive(user, I, use_prefix = FALSE) + if(!isnull(t)) + to_chat(user, "You name the gun [name]. Say hello to your new friend.") if(istype(I, /obj/item/kitchen/knife)) var/obj/item/kitchen/knife/K = I if(!can_bayonet || !K.bayonet || bayonet) //ensure the gun has an attachment point available, and that the knife is compatible with it. @@ -427,13 +429,6 @@ to_chat(M, "Your gun is now skinned as [choice]. Say hello to your new friend.") update_icon() -/obj/item/gun/proc/rename_gun(mob/M) - var/input = stripped_input(M,"What do you want to name the gun?", ,"", MAX_NAME_LEN) - if(src && input && !M.stat && in_range(M,src) && !M.restrained() && M.canmove) - name = input - to_chat(M, "You name the gun [input]. Say hello to your new friend.") - return - /obj/item/gun/proc/handle_suicide(mob/living/carbon/human/user, mob/living/carbon/human/target, params) if(!ishuman(user) || !ishuman(target)) return diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 08dba5ca40f..3da05a63f43 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -89,7 +89,7 @@ /obj/item/gun/projectile/revolver/detective desc = "A cheap Martian knock-off of a classic law enforcement firearm. Uses .38-special rounds." - name = "\improper .38 Mars Special" + name = ".38 Mars Special" icon_state = "detective" mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev38 unique_rename = 1 diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index 48534c7ab73..c5a5195a848 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -107,22 +107,12 @@ /obj/item/reagent_containers/glass/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/pen) || istype(I, /obj/item/flashlight/pen)) - var/tmp_label = sanitize(input(user, "Enter a label for [name]","Label",label_text)) - if(length(tmp_label) > MAX_NAME_LEN) - to_chat(user, "The label can be at most [MAX_NAME_LEN] characters long.") - else - to_chat(user, "You set the label to \"[tmp_label]\".") - label_text = tmp_label - update_name_label() + var/t = rename_interactive(user, I) + if(!isnull(t)) + label_text = t else return ..() -/obj/item/reagent_containers/glass/proc/update_name_label() - if(label_text == "") - name = base_name - else - name = "[base_name] ([label_text])" - /obj/item/reagent_containers/glass/beaker name = "beaker" desc = "A beaker. Can hold up to 50 units." diff --git a/code/modules/reagents/reagent_containers/iv_bag.dm b/code/modules/reagents/reagent_containers/iv_bag.dm index bd5447bb112..bb80be6a91a 100644 --- a/code/modules/reagents/reagent_containers/iv_bag.dm +++ b/code/modules/reagents/reagent_containers/iv_bag.dm @@ -149,39 +149,34 @@ if(IV_INJECT) overlays += "inject" -/obj/item/reagent_containers/iv_bag/proc/set_label(new_label) - name = "[initial(name)] ([new_label])" - /obj/item/reagent_containers/iv_bag/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/pen) || istype(I, /obj/item/flashlight/pen)) - var/tmp_label = sanitize(input(user, "Enter a label for [name]","Label",label_text)) - if(length(tmp_label) > MAX_NAME_LEN) - to_chat(user, "The label can be at most [MAX_NAME_LEN] characters long.") - else - to_chat(user, "You set the label to \"[tmp_label]\".") - set_label(tmp_label) + rename_interactive(user, I) // PRE-FILLED IV BAGS BELOW /obj/item/reagent_containers/iv_bag/salglu - name = "\improper IV Bag (Saline Glucose)" list_reagents = list("salglu_solution" = 200) +/obj/item/reagent_containers/iv_bag/salglu/Initialize(mapload) + . = ..() + name = "[initial(name)] - Saline Glucose" + /obj/item/reagent_containers/iv_bag/blood // Don't use this - just an abstract type to allow blood bags to have a common blood_type var for ease of creation. var/blood_type amount_per_transfer_from_this = 5 // Bloodbags are set to transfer 5 units by default. -/obj/item/reagent_containers/iv_bag/blood/New() - ..() +/obj/item/reagent_containers/iv_bag/blood/Initialize(mapload) + . = ..() if(blood_type != null) - set_label(blood_type) + name = "[initial(name)] - [blood_type]" reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null)) update_icon() -/obj/item/reagent_containers/iv_bag/blood/random/New() +/obj/item/reagent_containers/iv_bag/blood/random/Initialize() blood_type = pick("A+", "A-", "B+", "B-", "O+", "O-") - ..() + return ..() /obj/item/reagent_containers/iv_bag/blood/APlus blood_type = "A+" @@ -202,5 +197,8 @@ blood_type = "O-" /obj/item/reagent_containers/iv_bag/slime - name = "\improper IV Bag (Slime Jelly)" list_reagents = list("slimejelly" = 200) + +/obj/item/reagent_containers/iv_bag/slime/Initialize(mapload) + . = ..() + name = "[initial(name)] - Slime Jelly" diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index e678ec43398..9f001db8454 100755 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -56,12 +56,7 @@ playsound(loc, 'sound/items/poster_ripped.ogg', 50, 1) else if(istype(W, /obj/item/pen)) - var/str = copytext(sanitize(input(user,"Label text?","Set label","")),1,MAX_NAME_LEN) - if(!str || !length(str)) - to_chat(user, "Invalid text.") - return - user.visible_message("[user] labels [src] as [str].") - name = "[name] ([str])" + rename_interactive(user, W) else if(istype(W, /obj/item/stack/wrapping_paper) && !giftwrapped) var/obj/item/stack/wrapping_paper/WP = W @@ -132,12 +127,7 @@ playsound(loc, 'sound/items/poster_ripped.ogg', 50, 1) else if(istype(W, /obj/item/pen)) - var/str = copytext(sanitize(input(user,"Label text?","Set label","")),1,MAX_NAME_LEN) - if(!str || !length(str)) - to_chat(user, "Invalid text.") - return - user.visible_message("[user] labels [src] as [str].") - name = "[name] ([str])" + rename_interactive(user, W) else if(istype(W, /obj/item/stack/wrapping_paper) && !giftwrapped) var/obj/item/stack/wrapping_paper/WP = W