diff --git a/code/__DEFINES/loadout.dm b/code/__DEFINES/loadout.dm index 0b1db1ecc6..e4e784c039 100644 --- a/code/__DEFINES/loadout.dm +++ b/code/__DEFINES/loadout.dm @@ -61,6 +61,9 @@ //unlockable items #define LOADOUT_CATEGORY_UNLOCKABLE "Unlockable" +//errors with your savefile +#define LOADOUT_CATEGORY_ERROR "Errors" + //how many prosthetics can we have #define MAXIMUM_LOADOUT_PROSTHETICS 4 diff --git a/code/_globalvars/lists/loadout_categories.dm b/code/_globalvars/lists/loadout_categories.dm index 37e6145e47..53604111dd 100644 --- a/code/_globalvars/lists/loadout_categories.dm +++ b/code/_globalvars/lists/loadout_categories.dm @@ -11,5 +11,6 @@ GLOBAL_LIST_INIT(loadout_categories, list( LOADOUT_CATEGORY_GLOVES = LOADOUT_SUBCATEGORIES_NONE, LOADOUT_CATEGORY_GLASSES = LOADOUT_SUBCATEGORIES_NONE, LOADOUT_CATEGORY_DONATOR = LOADOUT_SUBCATEGORIES_NONE, - LOADOUT_CATEGORY_UNLOCKABLE = LOADOUT_SUBCATEGORIES_NONE + LOADOUT_CATEGORY_UNLOCKABLE = LOADOUT_SUBCATEGORIES_NONE, + LOADOUT_CATEGORY_ERROR = LOADOUT_SUBCATEGORIES_NONE )) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index ac681642c7..4daff91575 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -694,6 +694,8 @@ SUBSYSTEM_DEF(job) return for(var/i in chosen_gear) var/datum/gear/G = istext(i[LOADOUT_ITEM]) ? text2path(i[LOADOUT_ITEM]) : i[LOADOUT_ITEM] + if(!ispath(G)) + continue G = GLOB.loadout_items[initial(G.category)][initial(G.subcategory)][initial(G.name)] if(!G) continue @@ -755,6 +757,8 @@ SUBSYSTEM_DEF(job) return for(var/i in chosen_gear) var/datum/gear/G = istext(i[LOADOUT_ITEM]) ? text2path(i[LOADOUT_ITEM]) : i[LOADOUT_ITEM] + if(!ispath(G)) + continue G = GLOB.loadout_items[initial(G.category)][initial(G.subcategory)][initial(G.name)] if(!G) continue diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 3b4c703334..40011ccbf2 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -266,6 +266,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/list/tcg_cards = list() var/list/tcg_decks = list() + var/loadout_errors = 0 + /datum/preferences/New(client/C) parent = C @@ -364,12 +366,17 @@ GLOBAL_LIST_EMPTY(preferences_datums) gear_points = CONFIG_GET(number/initial_gear_points) var/list/chosen_gear = loadout_data["SAVE_[loadout_slot]"] if(chosen_gear) + loadout_errors = 0 for(var/loadout_item in chosen_gear) var/loadout_item_path = loadout_item[LOADOUT_ITEM] - if(loadout_item_path) - var/datum/gear/loadout_gear = text2path(loadout_item_path) - if(loadout_gear) - gear_points -= initial(loadout_gear.cost) + if(!loadout_item_path) + loadout_errors++ + continue + var/datum/gear/loadout_gear = text2path(loadout_item_path) + if(!loadout_gear) + loadout_errors++ + continue + gear_points -= initial(loadout_gear.cost) else chosen_gear = list() @@ -916,9 +923,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) else dat += " |" if(category == gear_category) - dat += " [category] " + dat += " [(category == LOADOUT_CATEGORY_ERROR && loadout_errors) ? "[category] (!)" : category] " else - dat += " [category] " + dat += " [(category == LOADOUT_CATEGORY_ERROR && loadout_errors) ? "[category] (!)" : category] " dat += "" dat += "
| Name | " - dat += "Cost | " - dat += "Restrictions | " - dat += "Description | |||||
| [name][extra_loadout_data] | " - dat += "[gear.cost] | "
- if(islist(gear.restricted_roles))
- if(gear.restricted_roles.len)
- if(gear.restricted_desc)
- dat += ""
- dat += gear.restricted_desc
- dat += ""
+ if(gear_category != LOADOUT_CATEGORY_ERROR)
+ dat += "
Color" + extra_loadout_data += "[loadout_color_non_poly]" + 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) + class_link = "style='white-space:normal;background:#ebc42e;' href='?_src_=prefs;preference=gear;toggle_gear_path=[html_encode(name)];toggle_gear=1'" + else if(!istype(gear, /datum/gear/unlockable) || can_use_unlockable(gear)) + 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_loadout_data] | " + dat += "[gear.cost] | " + if(islist(gear.restricted_roles)) + if(gear.restricted_roles.len) + if(gear.restricted_desc) + dat += "" + dat += gear.restricted_desc + dat += "" + else + dat += "" + dat += gear.restricted_roles.Join(";") + dat += "" + if(!istype(gear, /datum/gear/unlockable)) + // 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] | [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 += "
| Item type | " + dat += "Data contained |
| [test_item ? test_item : "no path!!?! Report to an admin!"] | " + dat += "" + var/list/other_data = entry["loadout_item"] ? entry - "loadout_item" : entry + dat += json_encode(other_data) + dat += " |