diff --git a/code/game/verbs/ignore.dm b/code/game/verbs/ignore.dm new file mode 100644 index 00000000000..b772bd4e813 --- /dev/null +++ b/code/game/verbs/ignore.dm @@ -0,0 +1,44 @@ +/client/verb/ignore(key_to_ignore as text) + set name = "Ignore" + set category = "OOC" + set desc = "Makes OOC and Deadchat messages from a specific player not appear to you." + + if(!key_to_ignore) + return + key_to_ignore = ckey(sanitize(key_to_ignore)) + if(prefs && prefs.ignored_players) + if(key_to_ignore in prefs.ignored_players) + usr << "[key_to_ignore] is already being ignored." + return + prefs.ignored_players |= key_to_ignore + prefs.save_preferences() + usr << "Now ignoring [key_to_ignore]." + +/client/verb/unignore(key_to_unignore as text) + set name = "Unignore" + set category = "OOC" + set desc = "Reverts your ignoring of a specific player." + + if(!key_to_unignore) + return + key_to_unignore = ckey(sanitize(key_to_unignore)) + if(prefs && prefs.ignored_players) + if(!(key_to_unignore in prefs.ignored_players)) + usr << "[key_to_unignore] isn't being ignored." + return + prefs.ignored_players -= key_to_unignore + prefs.save_preferences() + usr << "Reverted ignore on [key_to_unignore]." + +/mob/proc/is_key_ignored(var/key_to_check) + if(client) + return client.is_key_ignored(key_to_check) + return 0 + +/client/proc/is_key_ignored(var/key_to_check) + key_to_check = ckey(key_to_check) + if(key_to_check in prefs.ignored_players) + if(directory[key_to_check] in admins) // This is here so this is only evaluated if someone is actually being blocked. + return 0 + return 1 + return 0 \ No newline at end of file diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 1e976a2afcd..fd9a37935eb 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -51,6 +51,8 @@ for(var/client/target in clients) if(target.is_preference_enabled(/datum/client_preference/show_ooc)) + if(target.is_key_ignored(key)) // If we're ignored by this person, then do nothing. + continue var/display_name = src.key if(holder) if(holder.fakekey) diff --git a/code/modules/client/preference_setup/global/05_ooc.dm b/code/modules/client/preference_setup/global/05_ooc.dm new file mode 100644 index 00000000000..08aa97836a9 --- /dev/null +++ b/code/modules/client/preference_setup/global/05_ooc.dm @@ -0,0 +1,38 @@ +/datum/category_item/player_setup_item/player_global/ooc + name = "OOC" + sort_order = 5 + +/datum/category_item/player_setup_item/player_global/ooc/load_preferences(var/savefile/S) + S["ignored_players"] >> pref.ignored_players + + +/datum/category_item/player_setup_item/player_global/ooc/save_preferences(var/savefile/S) + S["ignored_players"] << pref.ignored_players + + +/datum/category_item/player_setup_item/player_global/ooc/sanitize_preferences() + if(isnull(pref.ignored_players)) + pref.ignored_players = list() + +/datum/category_item/player_setup_item/player_global/ooc/content(var/mob/user) + . += "OOC:
" + . += "Ignored Players
" + for(var/ignored_player in pref.ignored_players) + . += "[ignored_player] (Unignore)
" + . += "(Ignore Player)" + +/datum/category_item/player_setup_item/player_global/ooc/OnTopic(var/href,var/list/href_list, var/mob/user) + if(href_list["unignore_player"]) + if(CanUseTopic(user)) + pref.ignored_players -= href_list["unignore_player"] + return TOPIC_REFRESH + + if(href_list["ignore_player"]) + if(CanUseTopic(user)) + var/player_to_ignore = input(user, "Who do you want to ignore?","Ignore") as null|text + if(player_to_ignore) + player_to_ignore = sanitize(ckey(player_to_ignore)) + pref.ignored_players |= player_to_ignore + return TOPIC_REFRESH + + return ..() diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index cc339556c30..fb3b592e8cd 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -108,6 +108,7 @@ datum/preferences // OOC Metadata: var/metadata = "" + var/list/ignored_players = list() var/client/client = null var/client_ckey = null diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index e0500ff3cff..51f223295e0 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -404,6 +404,8 @@ proc/is_blind(A) var/follow var/lname if(subject) + if(M.is_key_ignored(subject.client.key)) // If we're ignored, do nothing. + continue if(subject != M) follow = "([ghost_follow_link(subject, M)]) " if(M.stat != DEAD && M.client.holder) diff --git a/polaris.dme b/polaris.dme index a52e40f32c3..2dc731c0ef0 100644 --- a/polaris.dme +++ b/polaris.dme @@ -851,6 +851,7 @@ #include "code\game\turfs\unsimulated\beach.dm" #include "code\game\turfs\unsimulated\floor.dm" #include "code\game\turfs\unsimulated\walls.dm" +#include "code\game\verbs\ignore.dm" #include "code\game\verbs\ooc.dm" #include "code\game\verbs\suicide.dm" #include "code\game\verbs\who.dm" @@ -997,6 +998,7 @@ #include "code\modules\client\preference_setup\global\02_settings.dm" #include "code\modules\client\preference_setup\global\03_pai.dm" #include "code\modules\client\preference_setup\global\04_communicators.dm" +#include "code\modules\client\preference_setup\global\05_ooc.dm" #include "code\modules\client\preference_setup\global\setting_datums.dm" #include "code\modules\client\preference_setup\loadout\gear_tweaks.dm" #include "code\modules\client\preference_setup\loadout\loadout.dm"