mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-13 11:12:14 +00:00
## About The Pull Request Moves a lot of the unique renaming implementations described in #82664 to the functions given by the `obj_flag` `UNIQUE_RENAME`. `UNIQUE_RENAME` has been given new properties to account for non-standard renaming, these being the `RENAME_NO_DESC` flag that prevents changing the description, the `nameformat()` and `descformat()` procs that, when modified, allow for applying naming formats(i.e. "Body Bag - [input]"), as well as other post-renaming handling such as changing the name of the output plant of a renamed seed, the `rename_checks()` proc that allows for unique naming prevention(such as a locked personal closet), and the `rename_reset()` proc to clean up other possible renamed variables potentially changed in `nameformat()` and `descformat()`. This also adds `/datum/element/tool_renaming` to crayons, which will let them rename anything that has `UNIQUE_RENAME`. I looked through everything with that flag, and I didn't see anything that I don't think should be renameable by a crayon(except things that shouldn't be renamable with pens), so it shouldn't fuck anything up. ## Why It's Good For The Game moves all of the non-honorable mentions in #82664 to the same renaming system, and also moves all of the honorable mentions save for: - plaques, as they only get renamed once and wouldn't benefit from `UNIQUE_RENAME` imo - books, because they're far more than just renaming, and are persistent - paintings, because they're persistent - photos, because they're not normal renaming and they're persistent - endoskeletons, because they're done with a multitool in UI - cardboard IDs, because they're far more than just renaming Additionally, this fixes: - Implanter renaming didn't work because a ! was missing - Clown borg picket sign renaming didn't work because they didn't use the correct arguments This'll make it easier to make renameable objects in the future, as well. ## Changelog 🆑 fix: fixes implanter renaming not working fix: fixes clownborg picket sign renaming not working code: brought most unique renaming implementations under UNIQUE_RENAME /🆑
79 lines
3.1 KiB
Plaintext
79 lines
3.1 KiB
Plaintext
#define OPTION_RENAME "Rename"
|
|
#define OPTION_DESCRIPTION "Description"
|
|
#define OPTION_RESET "Reset"
|
|
|
|
/**
|
|
* Renaming tool element
|
|
*
|
|
* When using this tool on an object with UNIQUE_RENAME,
|
|
* lets the user rename/redesc it.
|
|
*/
|
|
/datum/element/tool_renaming
|
|
|
|
/datum/element/tool_renaming/Attach(datum/target)
|
|
. = ..()
|
|
if(!isitem(target))
|
|
return ELEMENT_INCOMPATIBLE
|
|
|
|
RegisterSignal(target, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(attempt_rename))
|
|
|
|
/datum/element/tool_renaming/Detach(datum/source)
|
|
. = ..()
|
|
UnregisterSignal(source, COMSIG_ITEM_INTERACTING_WITH_ATOM)
|
|
|
|
/datum/element/tool_renaming/proc/attempt_rename(datum/source, mob/living/user, atom/interacting_with, list/modifiers)
|
|
SIGNAL_HANDLER
|
|
|
|
if(!isobj(interacting_with))
|
|
return NONE
|
|
|
|
var/obj/renamed_obj = interacting_with
|
|
var/obj/item/tool = source
|
|
|
|
if(!(renamed_obj.obj_flags & UNIQUE_RENAME) || !user.can_write(tool))
|
|
return NONE
|
|
INVOKE_ASYNC(src, PROC_REF(async_rename), user, renamed_obj, !(renamed_obj.obj_flags & RENAME_NO_DESC))
|
|
return ITEM_INTERACT_SUCCESS
|
|
|
|
/datum/element/tool_renaming/proc/async_rename(mob/living/user, obj/renamed_obj, description_option)
|
|
if(!renamed_obj.rename_checks(user))
|
|
return
|
|
var/custom_choice = tgui_input_list(user, "What would you like to edit?", "Customization", list(OPTION_RENAME, description_option? OPTION_DESCRIPTION : null, OPTION_RESET))
|
|
if(QDELETED(renamed_obj) || !user.can_perform_action(renamed_obj) || isnull(custom_choice))
|
|
return
|
|
|
|
switch(custom_choice)
|
|
if(OPTION_RENAME)
|
|
var/old_name = renamed_obj.name
|
|
var/input = tgui_input_text(user, "What do you want to name [renamed_obj]?", "Object Name", "[old_name]", MAX_NAME_LEN)
|
|
if(QDELETED(renamed_obj) || !user.can_perform_action(renamed_obj))
|
|
return
|
|
if(input == old_name || !input)
|
|
to_chat(user, span_notice("You changed [renamed_obj] to... well... [renamed_obj]."))
|
|
return
|
|
renamed_obj.AddComponent(/datum/component/rename, renamed_obj.nameformat(input, user), renamed_obj.desc)
|
|
to_chat(user, span_notice("You have successfully renamed \the [old_name] to [renamed_obj]."))
|
|
renamed_obj.update_appearance(UPDATE_NAME)
|
|
|
|
if(OPTION_DESCRIPTION)
|
|
var/old_desc = renamed_obj.desc
|
|
var/input = tgui_input_text(user, "Describe [renamed_obj]", "Description", "[old_desc]", MAX_DESC_LEN)
|
|
if(QDELETED(renamed_obj) || !user.can_perform_action(renamed_obj))
|
|
return
|
|
if(input == old_desc || !input)
|
|
to_chat(user, span_notice("You decide against changing [renamed_obj]'s description."))
|
|
return
|
|
renamed_obj.AddComponent(/datum/component/rename, renamed_obj.name, renamed_obj.descformat(input, user))
|
|
to_chat(user, span_notice("You have successfully changed [renamed_obj]'s description."))
|
|
renamed_obj.update_appearance(UPDATE_DESC)
|
|
|
|
if(OPTION_RESET)
|
|
qdel(renamed_obj.GetComponent(/datum/component/rename))
|
|
to_chat(user, span_notice("You have successfully reset [renamed_obj]'s name[renamed_obj.obj_flags & RENAME_NO_DESC? "." : " and description."]"))
|
|
renamed_obj.rename_reset()
|
|
renamed_obj.update_appearance(UPDATE_NAME | UPDATE_DESC)
|
|
|
|
#undef OPTION_RENAME
|
|
#undef OPTION_DESCRIPTION
|
|
#undef OPTION_RESET
|