diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm
index 3a5b8178aae..93ac4001ebe 100644
--- a/code/game/verbs/ooc.dm
+++ b/code/game/verbs/ooc.dm
@@ -55,7 +55,7 @@
C << "OOC: [keyname][holder.fakekey ? "/([holder.fakekey])" : ""]: [msg]"
else
C << "OOC: [holder.fakekey ? holder.fakekey : key]: [msg]"
- else
+ else if(!C.prefs.ignoring.Find(key))
C << "OOC: [keyname]: [msg]"
/proc/toggle_ooc(toggle = null)
@@ -138,3 +138,23 @@ var/global/normal_ooc_colour = "#002eb8"
return
show_note(usr, null, 1)
+
+/client/proc/ignore_key(client)
+ var/client/C = client
+ prefs.ignoring ^= C.key
+ src << "You are [prefs.ignoring.Find(src.key) ? "now" : "no longer"] ignoring [C.key] on the OOC channel."
+ prefs.save_preferences()
+
+/client/verb/select_ignore()
+ set name = "Ignore"
+ set category = "OOC"
+ set desc ="Ignore a player's messages on the OOC channel"
+
+ var/list/keys = list()
+ for(var/mob/M in player_list)
+ if(M.client != src)
+ keys += M.client
+ var/selection = input("Please, select a player!", "Ignore", null, null) as null|anything in sortKey(keys)
+ if(!selection)
+ return
+ ignore_key(selection)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index e8e18041d66..617c452c178 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -94,6 +94,8 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
var/unlock_content = 0
+ var/list/ignoring = list()
+
/datum/preferences/New(client/C)
blood_type = random_blood_type()
custom_names["ai"] = pick(ai_names)
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 8940823d8d7..1a7aeb92a45 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -106,6 +106,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["toggles"] >> toggles
S["ghost_form"] >> ghost_form
S["preferred_map"] >> preferred_map
+ S["ignoring"] >> ignoring
//try to fix any outdated data if necessary
if(needs_update >= 0)
@@ -140,6 +141,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["chat_toggles"] << chat_toggles
S["ghost_form"] << ghost_form
S["preferred_map"] << preferred_map
+ S["ignoring"] << ignoring
return 1
diff --git a/html/changelogs/Jordie0608 ignore.yml b/html/changelogs/Jordie0608 ignore.yml
new file mode 100644
index 00000000000..2e0f81fc8a1
--- /dev/null
+++ b/html/changelogs/Jordie0608 ignore.yml
@@ -0,0 +1,5 @@
+author: Jordie0608
+delete-after: True
+
+changes:
+ - rscadd: "You can now selectively mute non-admin players from OOC with the Ignore verb in the OOC tab."