From b956df22266c9cb0d9edbd261fd0f2fd529f339a Mon Sep 17 00:00:00 2001
From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Mon, 18 Jan 2021 21:59:00 +0000
Subject: [PATCH] name description implement
---
code/__DEFINES/loadout.dm | 8 +-
code/controllers/subsystem/job.dm | 38 ++++----
code/modules/client/preferences.dm | 86 ++++++++++++-------
.../code/modules/client/loadout/_loadout.dm | 2 +-
.../code/modules/client/loadout/neck.dm | 2 +-
.../code/modules/client/loadout/suit.dm | 2 +-
.../code/modules/client/loadout/uniform.dm | 16 ++--
.../code/modules/client/loadout/unlockable.dm | 2 +-
8 files changed, 94 insertions(+), 62 deletions(-)
diff --git a/code/__DEFINES/loadout.dm b/code/__DEFINES/loadout.dm
index ecd043a66a..973457692e 100644
--- a/code/__DEFINES/loadout.dm
+++ b/code/__DEFINES/loadout.dm
@@ -72,9 +72,11 @@
#define LOADOUT_LIMBS list(LOADOUT_LIMB_NORMAL,LOADOUT_LIMB_PROSTHETIC,LOADOUT_LIMB_AMPUTATED) //you can amputate your legs/arms though
//loadout saving/loading specific defines
-#define MAXIMUM_LOADOUT_SAVES 5
-#define LOADOUT_ITEM "loadout_item"
-#define LOADOUT_COLOR "loadout_color"
+#define MAXIMUM_LOADOUT_SAVES 5
+#define LOADOUT_ITEM "loadout_item"
+#define LOADOUT_COLOR "loadout_color"
+#define LOADOUT_CUSTOM_NAME "loadout_custom_name"
+#define LOADOUT_CUSTOM_DESCRIPTION "loadout_custom_description"
//loadout item flags
#define LOADOUT_CAN_NAME (1<<0) //renaming items
diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm
index 779ee2fbac..f831c302fa 100644
--- a/code/controllers/subsystem/job.dm
+++ b/code/controllers/subsystem/job.dm
@@ -691,21 +691,29 @@ SUBSYSTEM_DEF(job)
if(!permitted)
continue
var/obj/item/I = new G.path
- if(I && length(i[LOADOUT_COLOR])) //handle loadout colors
- //handle polychromic items
- if((G.loadout_flags & LOADOUT_CAN_COLOR_POLYCHROMIC) && length(G.loadout_initial_colors))
- var/datum/element/polychromic/polychromic = I.comp_lookup["item_worn_overlays"] //stupid way to do it but GetElement does not work for this
- if(polychromic && istype(polychromic))
- var/list/polychromic_entry = polychromic.colors_by_atom[I]
- if(polychromic_entry)
- if(polychromic.suits_with_helmet_typecache[I.type]) //is this one of those toggleable hood/helmet things?
- polychromic.connect_helmet(I,i[LOADOUT_COLOR])
- polychromic.colors_by_atom[I] = i[LOADOUT_COLOR]
- I.update_icon()
- else
- //handle non-polychromic items (they only have one color)
- I.add_atom_colour(i[LOADOUT_COLOR][1], FIXED_COLOUR_PRIORITY)
- I.update_icon()
+ if(I)
+ if(length(i[LOADOUT_COLOR])) //handle loadout colors
+ //handle polychromic items
+ if((G.loadout_flags & LOADOUT_CAN_COLOR_POLYCHROMIC) && length(G.loadout_initial_colors))
+ var/datum/element/polychromic/polychromic = I.comp_lookup["item_worn_overlays"] //stupid way to do it but GetElement does not work for this
+ if(polychromic && istype(polychromic))
+ var/list/polychromic_entry = polychromic.colors_by_atom[I]
+ if(polychromic_entry)
+ if(polychromic.suits_with_helmet_typecache[I.type]) //is this one of those toggleable hood/helmet things?
+ polychromic.connect_helmet(I,i[LOADOUT_COLOR])
+ polychromic.colors_by_atom[I] = i[LOADOUT_COLOR]
+ I.update_icon()
+ else
+ //handle non-polychromic items (they only have one color)
+ I.add_atom_colour(i[LOADOUT_COLOR][1], FIXED_COLOUR_PRIORITY)
+ I.update_icon()
+ //when inputting the data it's already sanitized, but it's best to be safe
+ if(i[LOADOUT_CUSTOM_NAME])
+ var/custom_name = strip_html(i[LOADOUT_CUSTOM_NAME])
+ I.name = custom_name
+ if(i[LOADOUT_CUSTOM_DESCRIPTION])
+ var/custom_description = strip_html(i[LOADOUT_CUSTOM_DESCRIPTION])
+ I.desc = custom_description
if(!M.equip_to_slot_if_possible(I, G.slot, disable_warning = TRUE, bypass_equip_delay_self = TRUE)) // If the job's dresscode compliant, try to put it in its slot, first
if(iscarbon(M))
var/mob/living/carbon/C = M
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 7c6ba30b80..52772f126b 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -895,19 +895,23 @@ GLOBAL_LIST_EMPTY(preferences_datums)
continue
var/class_link = ""
var/list/loadout_item = has_loadout_gear(loadout_slot, "[gear.type]")
- var/extra_color_data = ""
+ var/extra_loadout_data = ""
if(loadout_item)
class_link = "style='white-space:normal;' class='linkOn' href='?_src_=prefs;preference=gear;toggle_gear_path=[html_encode(name)];toggle_gear=0'"
if(gear.loadout_flags & LOADOUT_CAN_COLOR_POLYCHROMIC)
- extra_color_data += "
Color"
+ extra_loadout_data += "
Color"
for(var/loadout_color in loadout_item[LOADOUT_COLOR])
- extra_color_data += " "
+ extra_loadout_data += " "
else
var/loadout_color_non_poly = "#FFFFFF"
if(length(loadout_item[LOADOUT_COLOR]))
loadout_color_non_poly = loadout_item[LOADOUT_COLOR][1]
- extra_color_data += "
Color"
- extra_color_data += " "
+ extra_loadout_data += "
Color"
+ extra_loadout_data += " "
+ if(gear.loadout_flags & LOADOUT_CAN_NAME)
+ extra_loadout_data += "
Name [loadout_item[LOADOUT_CUSTOM_NAME] ? loadout_item[LOADOUT_CUSTOM_NAME] : "N/A"]"
+ if(gear.loadout_flags & LOADOUT_CAN_DESCRIPTION)
+ extra_loadout_data += "
Description"
else if((gear_points - gear.cost) < 0)
class_link = "style='white-space:normal;' class='linkOff'"
else if(donoritem)
@@ -916,7 +920,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
class_link = "style='white-space:normal;' href='?_src_=prefs;preference=gear;toggle_gear_path=[html_encode(name)];toggle_gear=1'"
else
class_link = "style='white-space:normal;background:#eb2e2e;' class='linkOff'"
- dat += "
| [name][extra_color_data] | "
+ dat += "
| [name][extra_loadout_data] | "
dat += "[gear.cost] | "
if(islist(gear.restricted_roles))
if(gear.restricted_roles.len)
@@ -929,14 +933,15 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += gear.restricted_roles.Join(";")
dat += ""
if(!istype(gear, /datum/gear/unlockable))
- dat += " | [gear.description] |
"
+ // the below line essentially means "if the loadout item is picked by the user and has a custom description, give it the custom description, otherwise give it the default description"
+ dat += "[loadout_item ? (loadout_item[LOADOUT_CUSTOM_DESCRIPTION] ? loadout_item[LOADOUT_CUSTOM_DESCRIPTION] : gear.description) : gear.description] | "
else
//we add the user's progress to the description assuming they have progress
var/datum/gear/unlockable/unlockable = gear
var/progress_made = unlockable_loadout_data[unlockable.progress_key]
if(!progress_made)
progress_made = 0
- dat += "[gear.description] Progress: [min(progress_made, unlockable.progress_required)]/[unlockable.progress_required] | "
+ dat += "[loadout_item ? (loadout_item[LOADOUT_CUSTOM_DESCRIPTION] ? loadout_item[LOADOUT_CUSTOM_DESCRIPTION] : gear.description) : gear.description] Progress: [min(progress_made, unlockable.progress_required)]/[unlockable.progress_required] | "
dat += ""
if(4) // Content preferences
@@ -2700,7 +2705,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
loadout_data["SAVE_[loadout_slot]"] += list(new_loadout_data) //double packed because it does the union of the CONTENTS of the lists
else
loadout_data["SAVE_[loadout_slot]"] = list(new_loadout_data) //double packed because you somehow had no save slot in your loadout?
- if(href_list["loadout_color"])
+
+ if(href_list["loadout_color"] || href_list["loadout_color_polychromic"] || href_list["loadout_rename"] || href_list["loadout_redescribe"])
+ //if the gear doesn't exist, or they don't have it, ignore the request
var/name = html_decode(href_list["loadout_gear_name"])
var/datum/gear/G = GLOB.loadout_items[gear_category][gear_subcategory][name]
if(!G)
@@ -2708,29 +2715,44 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/user_gear = has_loadout_gear(loadout_slot, "[G.type]")
if(!user_gear)
return
- if(!length(user_gear[LOADOUT_COLOR]))
- user_gear[LOADOUT_COLOR] = list("#FFFFFF")
- var/current_color = user_gear[LOADOUT_COLOR][1]
- var/new_color = input(user, "Polychromic options", "Choose Color", current_color) as color|null
- user_gear[LOADOUT_COLOR][1] = sanitize_hexcolor(new_color, 6, TRUE, current_color)
- if(href_list["loadout_color_polychromic"])
- var/name = html_decode(href_list["loadout_gear_name"])
- var/datum/gear/G = GLOB.loadout_items[gear_category][gear_subcategory][name]
- if(!G)
- return
- var/user_gear = has_loadout_gear(loadout_slot, "[G.type]")
- if(!user_gear)
- return
- var/list/color_options = list()
- for(var/i=1, i<=length(G.loadout_initial_colors), i++)
- color_options += "Color [i]"
- var/color_to_change = input(user, "Polychromic options", "Recolor [name]") as null|anything in color_options
- if(color_to_change)
- var/color_index = text2num(copytext(color_to_change, 7))
- var/current_color = user_gear[LOADOUT_COLOR][color_index]
- var/new_color = input(user, "Polychromic options", "Choose [color_to_change] Color", current_color) as color|null
- if(new_color)
- user_gear[LOADOUT_COLOR][color_index] = sanitize_hexcolor(new_color, 6, TRUE, current_color)
+
+ //possible requests: recolor, recolor (polychromic), rename, redescribe
+ //always make sure the gear allows said request before proceeding
+
+ //non-poly coloring can only be done by non-poly items
+ if(href_list["loadout_color"] && !(G.loadout_flags & LOADOUT_CAN_COLOR_POLYCHROMIC))
+ if(!length(user_gear[LOADOUT_COLOR]))
+ user_gear[LOADOUT_COLOR] = list("#FFFFFF")
+ var/current_color = user_gear[LOADOUT_COLOR][1]
+ var/new_color = input(user, "Polychromic options", "Choose Color", current_color) as color|null
+ user_gear[LOADOUT_COLOR][1] = sanitize_hexcolor(new_color, 6, TRUE, current_color)
+
+ //poly coloring can only be done by poly items
+ if(href_list["loadout_color_polychromic"] && (G.loadout_flags & LOADOUT_CAN_COLOR_POLYCHROMIC))
+ var/list/color_options = list()
+ for(var/i=1, i<=length(G.loadout_initial_colors), i++)
+ color_options += "Color [i]"
+ var/color_to_change = input(user, "Polychromic options", "Recolor [name]") as null|anything in color_options
+ if(color_to_change)
+ var/color_index = text2num(copytext(color_to_change, 7))
+ var/current_color = user_gear[LOADOUT_COLOR][color_index]
+ var/new_color = input(user, "Polychromic options", "Choose [color_to_change] Color", current_color) as color|null
+ if(new_color)
+ user_gear[LOADOUT_COLOR][color_index] = sanitize_hexcolor(new_color, 6, TRUE, current_color)
+
+ //both renaming and redescribing strip the input to stop html injection
+
+ //renaming is only allowed if it has the flag for it
+ if(href_list["loadout_rename"] && (G.loadout_flags & LOADOUT_CAN_NAME))
+ var/new_name = stripped_input(user, "Enter new name for item. Maximum 32 characters.", "Loadout Item Naming", null, 32)
+ if(new_name)
+ user_gear[LOADOUT_CUSTOM_NAME] = new_name
+
+ //redescribing is only allowed if it has the flag for it
+ if(href_list["loadout_redescribe"] && (G.loadout_flags & LOADOUT_CAN_DESCRIPTION)) //redescribe isnt a real word but i can't think of the right term to use
+ var/new_description = stripped_input(user, "Enter new description for item. Maximum 500 characters.", "Loadout Item Redescribing", null, 500)
+ if(new_description)
+ user_gear[LOADOUT_CUSTOM_DESCRIPTION] = new_description
ShowChoices(user)
return 1
diff --git a/modular_citadel/code/modules/client/loadout/_loadout.dm b/modular_citadel/code/modules/client/loadout/_loadout.dm
index 2a7b77bd47..5f895c4805 100644
--- a/modular_citadel/code/modules/client/loadout/_loadout.dm
+++ b/modular_citadel/code/modules/client/loadout/_loadout.dm
@@ -53,7 +53,7 @@ GLOBAL_LIST_EMPTY(loadout_whitelist_ids)
var/path //item-to-spawn path
var/cost = 1 //normally, each loadout costs a single point.
var/geargroupID //defines the ID that the gear inherits from the config
- var/loadout_flags = 0
+ var/loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION
var/list/loadout_initial_colors = list()
//NEW DONATOR SYTSEM STUFF
diff --git a/modular_citadel/code/modules/client/loadout/neck.dm b/modular_citadel/code/modules/client/loadout/neck.dm
index 7c3c11f25c..c1f05e2990 100644
--- a/modular_citadel/code/modules/client/loadout/neck.dm
+++ b/modular_citadel/code/modules/client/loadout/neck.dm
@@ -86,7 +86,7 @@
/datum/gear/neck/polycloak
name = "Polychromatic Cloak"
path = /obj/item/clothing/neck/cloak/polychromic
- loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC
+ loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
loadout_initial_colors = list("#FFFFFF", "#FFFFFF", "#808080")
/datum/gear/neck/altpolycloak
diff --git a/modular_citadel/code/modules/client/loadout/suit.dm b/modular_citadel/code/modules/client/loadout/suit.dm
index 7c21ed84d0..f7ef891104 100644
--- a/modular_citadel/code/modules/client/loadout/suit.dm
+++ b/modular_citadel/code/modules/client/loadout/suit.dm
@@ -101,7 +101,7 @@
name = "Polychromic winter coat"
path = /obj/item/clothing/suit/hooded/wintercoat/polychromic
cost = 4 //too many people with neon green coats is hard on the eyes
- loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC
+ loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
loadout_initial_colors = list("#6A6964", "#C4B8A6", "#0000FF")
/datum/gear/suit/coat/med
diff --git a/modular_citadel/code/modules/client/loadout/uniform.dm b/modular_citadel/code/modules/client/loadout/uniform.dm
index b76e223f25..303783e1c5 100644
--- a/modular_citadel/code/modules/client/loadout/uniform.dm
+++ b/modular_citadel/code/modules/client/loadout/uniform.dm
@@ -47,7 +47,7 @@
/datum/gear/uniform/maidcostume/polychromic
name = "Polychromic maid costume"
path = /obj/item/clothing/under/rank/civilian/janitor/maid/polychromic
- loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC
+ loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
loadout_initial_colors = list("#FFFFFF", "#000000")
/datum/gear/uniform/mailmanuniform
@@ -229,49 +229,49 @@
name = "Polychromic Jumpsuit"
path = /obj/item/clothing/under/misc/polyjumpsuit
cost = 2
- loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC
+ loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
loadout_initial_colors = list("#FFFFFF", "#808080", "#353535")
/datum/gear/uniform/skirt/poly
name = "Polychromic Jumpskirt"
path = /obj/item/clothing/under/dress/skirt/polychromic
cost = 2
- loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC
+ loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
loadout_initial_colors = list("#FFFFFF", "#F08080", "#808080")
/datum/gear/uniform/suit/poly
name = "Polychromic Button-up Shirt"
path = /obj/item/clothing/under/misc/poly_shirt
cost = 3
- loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC
+ loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
loadout_initial_colors = list("#FFFFFF", "#353535", "#353535")
/datum/gear/uniform/skirt/poly/pleated
name = "Polychromic Pleated Sweaterskirt"
path = /obj/item/clothing/under/dress/skirt/polychromic/pleated
cost = 3
- loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC
+ loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
loadout_initial_colors = list("#8CC6FF", "#808080", "#FF3535")
/datum/gear/uniform/polykilt
name = "Polychromic Kilt"
path = /obj/item/clothing/under/costume/kilt/polychromic
cost = 3
- loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC
+ loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
loadout_initial_colors = list("#FFFFFF", "#F08080")
/datum/gear/uniform/shorts/poly
name = "Polychromic Shorts"
path = /obj/item/clothing/under/misc/polyshorts
cost = 3
- loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC
+ loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
loadout_initial_colors = list("#353535", "#808080", "#808080")
/datum/gear/uniform/shorts/poly/athletic
name = "Polychromic Athletic Shorts"
path = /obj/item/clothing/under/shorts/polychromic
cost = 2
- loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC
+ loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
loadout_initial_colors = list("#FFFFFF", "#F08080")
/datum/gear/uniform/hopcasual
diff --git a/modular_citadel/code/modules/client/loadout/unlockable.dm b/modular_citadel/code/modules/client/loadout/unlockable.dm
index 6e522812b8..67e0c06d8c 100644
--- a/modular_citadel/code/modules/client/loadout/unlockable.dm
+++ b/modular_citadel/code/modules/client/loadout/unlockable.dm
@@ -27,4 +27,4 @@
path = /obj/item/bedsheet/unlockable/miner
progress_required = 100000
- progress_key = "miner"
\ No newline at end of file
+ progress_key = "miner"