Files
Bubberstation/code/modules/loadout/loadout_menu.dm
Rimi Nosha 381a94b21f [FUCK] Unfucks Loadout Clearing (#2650)
## About The Pull Request

Okay, now this is actually a big issue, I may or may not have entirely
forgot to check the clear loadout proc...

It wipes your entire loadout preference! AAAAAAAA!!!

Please merge before another unfortunate soul gets bluescreen'd or loses
their whole loadout!

## Why It's Good For The Game

Loadout wipe bad!

## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>


![image](https://github.com/user-attachments/assets/ecf18632-232e-4d04-841a-92a8d536549c)

![image](https://github.com/user-attachments/assets/5ce542c5-d871-446d-82a8-c89defaebbb7)
Swap to another loadout to prove it didn't wipe everything

![image](https://github.com/user-attachments/assets/d1894922-de02-4dc4-9835-78860cef6027)

</details>

## Changelog
🆑
fix: Using the clear loadout button should no longer brick your loadout
data. Woops.
/🆑
2024-12-08 09:18:34 -08:00

137 lines
5.8 KiB
Plaintext

/datum/preference_middleware/loadout
action_delegations = list(
"clear_all_items" = PROC_REF(action_clear_all),
"pass_to_loadout_item" = PROC_REF(action_pass_to_loadout_item),
"rotate_dummy" = PROC_REF(action_rotate_model_dir),
"select_item" = PROC_REF(action_select_item),
"toggle_job_clothes" = PROC_REF(action_toggle_job_outfit),
"close_greyscale_menu" = PROC_REF(force_close_greyscale_menu),
)
/// Our currently open greyscaling menu.
VAR_FINAL/datum/greyscale_modify_menu/menu
/datum/preference_middleware/loadout/Destroy(force, ...)
QDEL_NULL(menu)
return ..()
/datum/preference_middleware/loadout/on_new_character(mob/user)
preferences.character_preview_view?.update_body()
/datum/preference_middleware/loadout/proc/action_select_item(list/params, mob/user)
PRIVATE_PROC(TRUE)
var/path_to_use = text2path(params["path"])
var/datum/loadout_item/interacted_item = GLOB.all_loadout_datums[path_to_use]
if(!istype(interacted_item))
stack_trace("Failed to locate desired loadout item (path: [params["path"]]) in the global list of loadout datums!")
return TRUE // update
if(params["deselect"])
deselect_item(interacted_item)
else
select_item(interacted_item)
return TRUE
/* BUBBER EDIT REMOVAL: Multiple loadout presets: Handled in the modular file.
/datum/preference_middleware/loadout/proc/action_clear_all(list/params, mob/user)
PRIVATE_PROC(TRUE)
preferences.update_preference(GLOB.preference_entries[/datum/preference/loadout], null)
return TRUE
*/
/datum/preference_middleware/loadout/proc/action_toggle_job_outfit(list/params, mob/user)
PRIVATE_PROC(TRUE)
preferences.character_preview_view.show_job_clothes = !preferences.character_preview_view.show_job_clothes
preferences.character_preview_view.update_body()
return TRUE
/datum/preference_middleware/loadout/proc/action_rotate_model_dir(list/params, mob/user)
PRIVATE_PROC(TRUE)
switch(params["dir"])
if("left")
preferences.character_preview_view.setDir(turn(preferences.character_preview_view.dir, -90))
if("right")
preferences.character_preview_view.setDir(turn(preferences.character_preview_view.dir, 90))
/datum/preference_middleware/loadout/proc/action_pass_to_loadout_item(list/params, mob/user)
PRIVATE_PROC(TRUE)
var/path_to_use = text2path(params["path"])
var/datum/loadout_item/interacted_item = GLOB.all_loadout_datums[path_to_use]
if(!istype(interacted_item)) // no you cannot href exploit to spawn with a pulse rifle
stack_trace("Failed to locate desired loadout item (path: [params["path"]]) in the global list of loadout datums!")
return TRUE // update
if(interacted_item.handle_loadout_action(src, user, params["subaction"], params))
preferences.character_preview_view.update_body()
return TRUE
return FALSE
/// Select [path] item to [category_slot] slot.
/datum/preference_middleware/loadout/proc/select_item(datum/loadout_item/selected_item)
var/list/loadout = get_current_loadout() // BUBBER EDIT: Multiple loadout presets: ORIGINAL: var/list/loadout = preferences.read_preference(/datum/preference/loadout)
var/list/datum/loadout_item/loadout_datums = loadout_list_to_datums(loadout)
for(var/datum/loadout_item/item as anything in loadout_datums)
if(item.category != selected_item.category)
continue
if(!item.category.handle_duplicate_entires(src, item, selected_item, loadout_datums))
return
// SKYRAT EDIT ADDITION
if(!isnull(selected_item.ckeywhitelist) && !(preferences?.parent?.ckey in selected_item.ckeywhitelist))
to_chat(preferences.parent, span_warning("You cannot select this item!"))
return
if(!isnull(selected_item.donator_only) && !GLOB.donator_list[preferences?.parent?.ckey])
to_chat(preferences.parent, span_warning("This item is for donators only."))
return
// SKYRAT EDIT END
LAZYSET(loadout, selected_item.item_path, list())
save_current_loadout(loadout) // BUBBER EDIT: Multiple loadout presets: ORIGINAL: preferences.update_preference(GLOB.preference_entries[/datum/preference/loadout], loadout)
/// Deselect [deselected_item].
/datum/preference_middleware/loadout/proc/deselect_item(datum/loadout_item/deselected_item)
var/list/loadout = get_current_loadout() // BUBBER EDIT: Multiple loadout presets: ORIGINAL: var/list/loadout = preferences.read_preference(/datum/preference/loadout)
LAZYREMOVE(loadout, deselected_item.item_path)
save_current_loadout(loadout) // BUBBER EDIT: Multiple loadout presets: ORIGINAL: preferences.update_preference(GLOB.preference_entries[/datum/preference/loadout], loadout)
/datum/preference_middleware/loadout/proc/register_greyscale_menu(datum/greyscale_modify_menu/open_menu)
src.menu = open_menu
RegisterSignal(menu, COMSIG_QDELETING, PROC_REF(cleanup_greyscale_menu))
/datum/preference_middleware/loadout/proc/cleanup_greyscale_menu()
SIGNAL_HANDLER
menu = null
/datum/preference_middleware/loadout/proc/force_close_greyscale_menu()
menu?.ui_close()
/datum/preference_middleware/loadout/get_ui_data(mob/user)
var/list/data = list()
data["job_clothes"] = preferences.character_preview_view.show_job_clothes
return data
/datum/preference_middleware/loadout/get_ui_static_data(mob/user)
var/list/data = list()
data["loadout_preview_view"] = preferences.character_preview_view.assigned_map
// SKYRAT EDIT START - EXPANDED LOADOUT
data["ckey"] = user.ckey
if(SSplayer_ranks.is_donator(user.client))
data["is_donator"] = TRUE
// SKYRAT EDIT END
return data
/datum/preference_middleware/loadout/get_constant_data()
var/list/data = list()
var/list/loadout_tabs = list()
for(var/datum/loadout_category/category as anything in GLOB.all_loadout_categories)
var/list/cat_data = list(
"name" = category.category_name,
"category_icon" = category.category_ui_icon,
"category_info" = category.category_info,
"contents" = category.items_to_ui_data(),
)
UNTYPED_LIST_ADD(loadout_tabs, cat_data)
data["loadout_tabs"] = loadout_tabs
return data