From cd5b2c2b829251a22661e5f310816b3ca32d5713 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Thu, 2 Oct 2025 21:37:17 +0200 Subject: [PATCH] [NO GBP] Fixes some filterrific functions not working (#93232) ## About The Pull Request Non-smooth modification and renaming didn't work, and mass application broke a lot of things (always, did actually) ## Changelog :cl: fix: Fixed some Filterrific functions not working /:cl: --- code/datums/datum.dm | 6 ++++ .../admin/view_variables/filterrific.dm | 31 +++++++------------ 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 509153de002..3820002c48b 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -488,6 +488,12 @@ var/atom/atom_cast = src // filters only work with images or atoms. return atom_cast.filters[name] +/// Returns filter data associated with the passed key +/datum/proc/get_filter_data(name) + for (var/list/filter_info as anything in filter_data) + if (filter_info["name"] == name) + return filter_info.Copy() + /// Removes the passed filter, or multiple filters, if supplied with a list. /datum/proc/remove_filter(name_or_names, update = TRUE) ASSERT(isatom(src) || isimage(src)) diff --git a/code/modules/admin/view_variables/filterrific.dm b/code/modules/admin/view_variables/filterrific.dm index 0ddd07aec4f..f8dbd7fee43 100644 --- a/code/modules/admin/view_variables/filterrific.dm +++ b/code/modules/admin/view_variables/filterrific.dm @@ -32,7 +32,7 @@ switch(action) if("add_filter") var/target_name = params["name"] - while(target.filter_data && target.filter_data[target_name]) + while(target.get_filter(target_name)) target_name = "[target_name]-dupe" target.add_filter(target_name, params["priority"], list("type" = params["type"])) . = TRUE @@ -40,9 +40,9 @@ target.remove_filter(params["name"]) . = TRUE if("rename_filter") - var/list/filter_data = target.filter_data[params["name"]] + var/list/filter_info = target.get_filter_data(params["name"]) target.remove_filter(params["name"]) - target.add_filter(params["new_name"], filter_data["priority"], filter_data) + target.add_filter(params["new_name"], filter_data["priority"], filter_info) . = TRUE if("edit_filter") target.remove_filter(params["name"]) @@ -56,15 +56,7 @@ target.transition_filter(params["name"], params["new_data"], 4) . = TRUE if("modify_filter_value") - var/list/old_filter_data = target.filter_data[params["name"]] - var/list/new_filter_data = old_filter_data.Copy() - for(var/entry in params["new_data"]) - new_filter_data[entry] = params["new_data"][entry] - for(var/entry in new_filter_data) - if(entry == GLOB.master_filter_info[old_filter_data["type"]]["defaults"][entry]) - new_filter_data.Remove(entry) - target.remove_filter(params["name"]) - target.add_filter(params["name"], old_filter_data["priority"], new_filter_data) + target.modify_filter(params["name"], params["new_data"]) . = TRUE if("modify_color_value") var/new_color = input(usr, "Pick new filter color", "Filteriffic Colors!") as color|null @@ -83,15 +75,14 @@ var/target_path = text2path(params["path"]) if(!target_path) return - var/filters_to_copy = target.filters - var/filter_data_to_copy = target.filter_data + var/list/filter_data_to_copy = target.filter_data var/count = 0 - for(var/thing in world.contents) - if(istype(thing, target_path)) - var/atom/thing_at = thing - thing_at.filters = filters_to_copy - thing_at.filter_data = filter_data_to_copy - count += 1 + for(var/atom/thing_at as anything in world.contents) + if(!istype(thing_at, target_path)) + continue + thing_at.filter_data = filter_data_to_copy.Copy() + thing_at.update_filters() + count += 1 message_admins("LOCAL CLOWN [usr.ckey] JUST MASS FILTER EDITED [count] WITH PATH OF [params["path"]]!") log_admin("LOCAL CLOWN [usr.ckey] JUST MASS FILTER EDITED [count] WITH PATH OF [params["path"]]!")