diff --git a/aurorastation.dme b/aurorastation.dme index 04300421cc8..1d326304f03 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -300,6 +300,7 @@ #include "code\datums\weakref.dm" #include "code\datums\components\_component.dm" #include "code\datums\components\armor\armor.dm" +#include "code\datums\components\base_name\base_name.dm" #include "code\datums\components\multitool\_multitool.dm" #include "code\datums\components\multitool\multitool.dm" #include "code\datums\components\multitool\circuitboards\circuitboards.dm" diff --git a/code/datums/components/base_name/base_name.dm b/code/datums/components/base_name/base_name.dm new file mode 100644 index 00000000000..25666acc4f2 --- /dev/null +++ b/code/datums/components/base_name/base_name.dm @@ -0,0 +1,16 @@ +#define COMSIG_BASENAME_RENAME "base_name_rename" +#define COMSIG_BASENAME_SETNAME "base_name_setname" + +/datum/component/base_name + var/base_name + +/datum/component/base_name/Initialize(var/name) + base_name = name + RegisterSignal(parent, COMSIG_BASENAME_RENAME, .proc/rename) + RegisterSignal(parent, COMSIG_BASENAME_SETNAME, .proc/change_base_name) + +/datum/component/base_name/proc/rename(var/name) + base_name = name + +/datum/component/base_name/proc/change_base_name(var/name, list/arguments) + arguments[1] = base_name \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index 9da0aa3c4bf..c8b4f13a878 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -46,19 +46,24 @@ var/flipped = null var/flippable = 1 var/wear_over_suit = 0 - var/base_name = "" /obj/item/storage/wallet/Initialize() . = ..() - base_name = name + AddComponent(/datum/component/base_name, name) +/obj/item/storage/wallet/proc/update_name(var/base_name = initial(name)) + SEND_SIGNAL(src, COMSIG_BASENAME_SETNAME, args) + if(front_id) + name = "[base_name] ([front_id])" + else + name = "[base_name]" /obj/item/storage/wallet/remove_from_storage(obj/item/W as obj, atom/new_location) . = ..(W, new_location) if(.) if(W == front_id) front_id = null - name = base_name + update_name() update_icon() /obj/item/storage/wallet/handle_item_insertion(obj/item/W as obj, prevent_warning = 0) @@ -66,7 +71,7 @@ if(.) if(!front_id && istype(W, /obj/item/card/id)) front_id = W - name = "[name] ([front_id])" + update_name() update_icon() /obj/item/storage/wallet/update_icon() diff --git a/code/modules/client/preference_setup/loadout/gear_tweaks.dm b/code/modules/client/preference_setup/loadout/gear_tweaks.dm index a37fc24954c..08c548f8c82 100644 --- a/code/modules/client/preference_setup/loadout/gear_tweaks.dm +++ b/code/modules/client/preference_setup/loadout/gear_tweaks.dm @@ -211,9 +211,12 @@ var/datum/gear_tweak/custom_name/gear_tweak_free_name = new() if(!metadata) return I.name I.name = metadata - if(I.vars["base_name"]) - I.vars["base_name"] = metadata + // For reasons unknown, using SEND_SIGNAL instead of what is below makes rag renaming completely break. + var/datum/component/base_name/BN = I.GetComponent(/datum/component/base_name) + if(BN) + BN.rename(metadata) + /* Custom Description */ diff --git a/code/modules/clothing/under/accessories/holster.dm b/code/modules/clothing/under/accessories/holster.dm index 1f9f646068d..3f0bb3bcfeb 100644 --- a/code/modules/clothing/under/accessories/holster.dm +++ b/code/modules/clothing/under/accessories/holster.dm @@ -8,11 +8,17 @@ var/sound_out = 'sound/weapons/holster/holsterout.ogg' flippable = 1 w_class = ITEMSIZE_NORMAL - var/base_name = "" /obj/item/clothing/accessory/holster/Initialize() . = ..() - base_name = name + AddComponent(/datum/component/base_name, name) + +/obj/item/clothing/accessory/holster/proc/update_name(var/base_name = initial(name)) + SEND_SIGNAL(src, COMSIG_BASENAME_SETNAME, args) + if(holstered) + name = "occupied [base_name]" + else + name = "[base_name]" /obj/item/clothing/accessory/holster/proc/holster(var/obj/item/I, var/mob/living/user) if(holstered && istype(user)) @@ -33,11 +39,11 @@ holstered.add_fingerprint(user) w_class = max(w_class, holstered.w_class) user.visible_message("[user] holsters \the [holstered].", "You holster \the [holstered].") - name = "occupied [base_name]" + update_name() /obj/item/clothing/accessory/holster/proc/clear_holster() holstered = null - name = base_name + update_name() /obj/item/clothing/accessory/holster/proc/unholster(mob/user as mob) if(!holstered) diff --git a/code/modules/detectivework/tools/evidencebag.dm b/code/modules/detectivework/tools/evidencebag.dm index 34a788e56b3..77b897e3df3 100644 --- a/code/modules/detectivework/tools/evidencebag.dm +++ b/code/modules/detectivework/tools/evidencebag.dm @@ -9,11 +9,10 @@ w_class = ITEMSIZE_SMALL var/obj/item/stored_item = null var/label_text = "" - var/base_name = "" /obj/item/evidencebag/Initialize() . = ..() - base_name = name + AddComponent(/datum/component/base_name, name) /obj/item/evidencebag/MouseDrop(var/obj/item/I as obj) if (!ishuman(usr)) @@ -111,7 +110,8 @@ return . = ..() -/obj/item/evidencebag/proc/update_name_label() +/obj/item/evidencebag/proc/update_name_label(var/base_name = initial(name)) + SEND_SIGNAL(src, COMSIG_BASENAME_SETNAME, args) if(label_text == "") name = base_name else diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm index 2816bb61bf6..c519743a024 100644 --- a/code/modules/detectivework/tools/rag.dm +++ b/code/modules/detectivework/tools/rag.dm @@ -64,7 +64,8 @@ update_name() update_icon() -/obj/item/reagent_containers/glass/rag/proc/update_name() +/obj/item/reagent_containers/glass/rag/proc/update_name(var/base_name = initial(name)) + SEND_SIGNAL(src, COMSIG_BASENAME_SETNAME, args) if(on_fire) name = "burning [base_name]" else if(reagents.total_volume) @@ -107,7 +108,7 @@ /obj/item/reagent_containers/glass/rag/proc/wipe_down(atom/A, mob/user) if(!reagents.total_volume) - to_chat(user, SPAN_WARNING("\The [base_name] is dry!")) + to_chat(user, SPAN_WARNING("\The [name] is dry!")) else if (!(last_clean && world.time < last_clean + 120) ) user.visible_message("[user] starts to wipe [A] with [src].") diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 4fb5f57e81f..25d28649919 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -4,7 +4,6 @@ //////////////////////////////////////////////////////////////////////////////// /obj/item/reagent_containers/glass name = " " - var/base_name = " " desc = " " icon = 'icons/obj/chemical.dmi' icon_state = null @@ -23,7 +22,7 @@ /obj/item/reagent_containers/glass/Initialize() . = ..() - base_name = name + AddComponent(/datum/component/base_name, name) /obj/item/reagent_containers/glass/examine(var/mob/user) if(!..(user, 2)) @@ -82,7 +81,8 @@ return . = ..() // in the case of nitroglycerin, explode BEFORE it shatters -/obj/item/reagent_containers/glass/proc/update_name_label() +/obj/item/reagent_containers/glass/proc/update_name_label(var/base_name = initial(name)) + SEND_SIGNAL(src, COMSIG_BASENAME_SETNAME, args) if(label_text == "") name = base_name else diff --git a/html/changelogs/LoadoutRuntimeFix.yml b/html/changelogs/LoadoutRuntimeFix.yml new file mode 100644 index 00000000000..01a5228c577 --- /dev/null +++ b/html/changelogs/LoadoutRuntimeFix.yml @@ -0,0 +1,6 @@ +author: TheGreyWolf + +delete-after: True + +changes: + - bugfix: "Fixed runtimes related to renaming loadout items."