Files
AlexisandMaia ae1cc71b34 Initial upstream fixes
Is this even working

Oooough

ok I'll crack at this

couple more fixes

Probably the worst of all my commits so far

Seriously, someone needs to check this.

It compiles

update atmos

stuff

update paths

snakes

linters 1

linters again

more CI

whoops

Update map_previews.dmi

Kills loose limbs

The component it used no longer exists.

podperson

CI Fixes(?)

Linters
2026-08-14 19:42:21 +02:00

115 lines
4.4 KiB
Plaintext

GLOBAL_VAR_INIT(SOOC_COLOR, "#ff5454")
GLOBAL_VAR_INIT(sooc_allowed, TRUE) // used with admin verbs to disable sooc - not a config option
GLOBAL_LIST_EMPTY(ckey_to_sooc_name)
#define SOOC_LISTEN_PLAYER 1
#define SOOC_LISTEN_ADMIN 2
GAME_VERB(/client, sooc, "SOOC", "OOC", msg as text)
if(GLOB.say_disabled) //This is here to try to identify lag problems
to_chat(usr, span_danger("Speech is currently admin-disabled."))
return
if(!mob)
return
var/static/list/job_lookup = list(JOB_CAPTAIN=TRUE,
JOB_HEAD_OF_SECURITY=TRUE,
JOB_WARDEN=TRUE, JOB_DETECTIVE=TRUE,
JOB_SECURITY_OFFICER=TRUE,
JOB_CORRECTIONS_OFFICER=TRUE,
JOB_SECURITY_MEDIC=TRUE,
)
if(!holder)
var/job = mob?.mind.assigned_role.title
if(!job || !job_lookup[job])
to_chat(src, span_danger("You're not a security role!"))
return
if(!GLOB.sooc_allowed)
to_chat(src, span_danger("SOOC is globally muted."))
return
if(prefs.muted & MUTE_OOC)
to_chat(src, span_danger("You cannot use OOC (muted)."))
return
if(is_banned_from(ckey, "OOC"))
to_chat(src, span_danger("You have been banned from OOC."))
return
if(QDELETED(src))
return
msg = copytext_char(sanitize(msg), 1, MAX_MESSAGE_LEN)
var/raw_msg = msg
if(!msg)
return
msg = emoji_parse(msg)
if(!(prefs.chat_toggles & CHAT_OOC))
to_chat(src, span_danger("You have OOC muted."))
return
mob.log_talk(raw_msg, LOG_OOC, tag="SOOC")
var/keyname = key
var/anon = FALSE
//Anonimity for players and deadminned admins
if(!holder || holder.deadmined)
if(!GLOB.ckey_to_sooc_name[key])
GLOB.ckey_to_sooc_name[key] = "Deputy [pick(GLOB.phonetic_alphabet)] [rand(1, 99)]"
keyname = GLOB.ckey_to_sooc_name[key]
anon = TRUE
var/list/listeners = list()
for(var/iterated_player in GLOB.player_list)
var/mob/iterated_mob = iterated_player
//Admins with muted OOC do not get to listen to SOOC, but normal players do, as it could be admins talking important stuff to them
if(iterated_mob.client?.holder && !iterated_mob.client?.holder?.deadmined && iterated_mob.client?.prefs?.chat_toggles & CHAT_OOC)
listeners[iterated_mob.client] = SOOC_LISTEN_ADMIN
else
if(iterated_mob.mind)
var/datum/mind/mob_mind = iterated_mob.mind
if(job_lookup[mob_mind.assigned_role?.title])
listeners[iterated_mob.client] = SOOC_LISTEN_PLAYER
for(var/iterated_listener in listeners)
var/client/iterated_client = iterated_listener
var/mode = listeners[iterated_listener]
var/color = (!anon && CONFIG_GET(flag/allow_admin_ooccolor) && iterated_client?.prefs?.read_preference(/datum/preference/color/ooc_color)) ? iterated_client?.prefs?.read_preference(/datum/preference/color/ooc_color) : GLOB.SOOC_COLOR
var/name = (mode == SOOC_LISTEN_ADMIN && anon) ? "([key])[keyname]" : keyname
to_chat(iterated_client, span_oocplain("<font color='[color]'><b><span class='prefix'>SOOC:</span> <EM>[name]:</EM> <span class='message linkify'>[msg]</span></b></font>"))
#undef SOOC_LISTEN_PLAYER
#undef SOOC_LISTEN_ADMIN
/proc/toggle_sooc(toggle = null)
if(toggle != null) //if we're specifically en/disabling sooc
if(toggle != GLOB.sooc_allowed)
GLOB.sooc_allowed = toggle
else
return
else //otherwise just toggle it
GLOB.sooc_allowed = !GLOB.sooc_allowed
var/list/listeners = list()
var/static/list/job_lookup = list(JOB_SECURITY_OFFICER = TRUE, JOB_WARDEN = TRUE, JOB_DETECTIVE = TRUE, JOB_HEAD_OF_SECURITY = TRUE, JOB_CAPTAIN = TRUE, JOB_BLUESHIELD = TRUE)
for(var/iterated_player in GLOB.player_list)
var/mob/iterated_mob = iterated_player
if(!iterated_mob.client?.holder?.deadmined)
listeners[iterated_mob.client] = TRUE
else
if(iterated_mob.mind)
var/datum/mind/mob_mind = iterated_mob.mind
if(job_lookup[mob_mind.assigned_role])
listeners[iterated_mob.client] = TRUE
for(var/iterated_listener in listeners)
var/client/iterated_client = iterated_listener
to_chat(iterated_client, span_oocplain("<b>The SOOC channel has been globally [GLOB.sooc_allowed ? "enabled" : "disabled"].</b>"))
ADMIN_VERB(togglesooc, R_ADMIN, "Toggle Security OOC", "Toggles Security OOC.", ADMIN_CATEGORY_SERVER)
toggle_sooc()
log_admin("[key_name(usr)] toggled Security OOC.")
message_admins("[key_name_admin(usr)] toggled Security OOC.")
SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Antag OOC", "[GLOB.sooc_allowed ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!