Merge remote-tracking branch 'ParadiseSS13/master' into brutal-part1

This commit is contained in:
AffectedArc07
2021-03-11 18:41:17 +00:00
1118 changed files with 25570 additions and 65816 deletions
+3 -3
View File
@@ -34,7 +34,7 @@ GLOBAL_VAR_INIT(nologevent, 0)
to_chat(C, msg)
if(important)
if(C.prefs?.sound & SOUND_ADMINHELP)
SEND_SOUND(C, 'sound/effects/adminhelp.ogg')
SEND_SOUND(C, sound('sound/effects/adminhelp.ogg'))
window_flash(C)
/**
@@ -51,7 +51,7 @@ GLOBAL_VAR_INIT(nologevent, 0)
to_chat(C, msg)
if(important)
if(C.prefs?.sound & SOUND_MENTORHELP)
SEND_SOUND(C, 'sound/effects/adminhelp.ogg')
SEND_SOUND(C, sound('sound/effects/adminhelp.ogg'))
window_flash(C)
/proc/admin_ban_mobsearch(mob/M, ckey_to_find, mob/admin_to_notify)
@@ -222,7 +222,7 @@ GLOBAL_VAR_INIT(nologevent, 0)
body += "<br><br>"
body += "<b>DNA Blocks:</b><br><table border='0'><tr><th>&nbsp;</th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th>"
var/bname
for(var/block=1;block<=DNA_SE_LENGTH;block++)
for(var/block in 1 to DNA_SE_LENGTH)
if(((block-1)%5)==0)
body += "</tr><tr><th>[block-1]</th>"
bname = GLOB.assigned_blocks[block]
+1 -1
View File
@@ -117,7 +117,7 @@ GLOBAL_PROTECT(admin_ranks) // this shit is being protected for obvious reasons
load_admins()
return
var/datum/db_query/query = SSdbcore.NewQuery("SELECT ckey, rank, level, flags FROM [format_table_name("admin")]")
var/datum/db_query/query = SSdbcore.NewQuery("SELECT ckey, admin_rank, level, flags FROM [format_table_name("admin")]")
if(!query.warn_execute(async=run_async))
qdel(query)
return
+7 -6
View File
@@ -696,7 +696,7 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list(
return
var/datum/db_query/rank_read = SSdbcore.NewQuery(
"SELECT rank FROM [format_table_name("admin")] WHERE ckey=:ckey",
"SELECT admin_rank FROM [format_table_name("admin")] WHERE ckey=:ckey",
list("ckey" = ckey)
)
@@ -722,7 +722,7 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list(
return
var/datum/db_query/admin_read = SSdbcore.NewQuery(
"SELECT ckey, rank, flags FROM [format_table_name("admin")] WHERE ckey=:ckey",
"SELECT ckey, admin_rank, flags FROM [format_table_name("admin")] WHERE ckey=:ckey",
list("ckey" = ckey)
)
@@ -987,7 +987,7 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list(
to_chat(T, "<span class='notice'><b><font size=3>Man up and deal with it.</font></b></span>")
to_chat(T, "<span class='notice'>Move on.</span>")
T << 'sound/voice/manup1.ogg'
SEND_SOUND(T, sound('sound/voice/manup1.ogg'))
log_admin("[key_name(usr)] told [key_name(T)] to man up and deal with it.")
message_admins("[key_name_admin(usr)] told [key_name(T)] to man up and deal with it.")
@@ -1003,9 +1003,10 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list(
var/confirm = alert("Are you sure you want to send the global message?", "Confirm Man Up Global", "Yes", "No")
if(confirm == "Yes")
for(var/mob/T as mob in GLOB.mob_list)
to_chat(T, "<br><center><span class='notice'><b><font size=4>Man up.<br> Deal with it.</font></b><br>Move on.</span></center><br>")
T << 'sound/voice/manup1.ogg'
var/manned_up_sound = sound('sound/voice/manup1.ogg')
for(var/sissy in GLOB.player_list)
to_chat(sissy, "<br><center><span class='notice'><b><font size=4>Man up.<br> Deal with it.</font></b><br>Move on.</span></center><br>")
SEND_SOUND(sissy, manned_up_sound)
log_admin("[key_name(usr)] told everyone to man up and deal with it.")
message_admins("[key_name_admin(usr)] told everyone to man up and deal with it.")
@@ -90,7 +90,7 @@
qdel(select_query)
flag_account_for_forum_sync(adm_ckey)
if(new_admin)
var/datum/db_query/insert_query = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin")] (`id`, `ckey`, `rank`, `level`, `flags`) VALUES (null, :adm_ckey, :new_rank, -1, 0)", list(
var/datum/db_query/insert_query = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin")] (`id`, `ckey`, `admin_rank`, `level`, `flags`) VALUES (null, :adm_ckey, :new_rank, -1, 0)", list(
"adm_ckey" = adm_ckey,
"new_rank" = new_rank
))
@@ -113,7 +113,7 @@
to_chat(usr, "<span class='notice'>New admin added.</span>")
else
if(!isnull(admin_id) && isnum(admin_id))
var/datum/db_query/insert_query = SSdbcore.NewQuery("UPDATE [format_table_name("admin")] SET rank=:new_rank WHERE id=:admin_id", list(
var/datum/db_query/insert_query = SSdbcore.NewQuery("UPDATE [format_table_name("admin")] SET admin_rank=:new_rank WHERE id=:admin_id", list(
"new_rank" = new_rank,
"admin_id" = admin_id,
))
-3
View File
@@ -494,9 +494,6 @@
if(SSticker.mode.vampire_enthralled.len)
dat += check_role_table("Vampire Thralls", SSticker.mode.vampire_enthralled)
if(SSticker.mode.devils.len)
dat += check_role_table("Devils", SSticker.mode.devils)
if(SSticker.mode.xenos.len)
dat += check_role_table("Xenos", SSticker.mode.xenos)
+1 -1
View File
@@ -239,7 +239,7 @@
output += "<a href='?_src_=holder;shownoteckey=[index_ckey]'>[index_ckey]</a><br>"
CHECK_TICK
qdel(query_list_notes)
message_admins("The note search started by [usr.ckey] has complete. CPU should return to normal.")
message_admins("The note search started by [usr.ckey] has completed. CPU should return to normal.")
else
output += "<center><a href='?_src_=holder;addnoteempty=1'>\[Add Note\]</a></center>"
output += ruler
+15 -16
View File
@@ -17,7 +17,7 @@
if(!isclient(C))
return
C << 'sound/effects/adminhelp.ogg'
SEND_SOUND(C, sound('sound/effects/adminhelp.ogg'))
to_chat(C, "<font color='red' size='4'><b>- AdminHelp Rejected! -</b></font>")
to_chat(C, "<font color='red'><b>Your admin help was rejected.</b></font>")
@@ -1875,14 +1875,16 @@
log_admin("Admin [key_name_admin(usr)] has unlocked the Cult's ability to summon Nar'Sie.")
else if(href_list["adminplayerobservecoodjump"])
if(!check_rights(R_ADMIN)) return
var/client/C = usr.client
if(!isobserver(usr))
if(!check_rights(R_ADMIN)) // Need to be admin to aghost
return
C.admin_ghost()
var/x = text2num(href_list["X"])
var/y = text2num(href_list["Y"])
var/z = text2num(href_list["Z"])
var/client/C = usr.client
if(!isobserver(usr)) C.admin_ghost()
sleep(2)
C.jumptocoord(x,y,z)
@@ -2085,15 +2087,15 @@
logmsg = "a heal over time."
if("Permanent Regeneration")
H.dna.SetSEState(GLOB.regenerateblock, 1)
genemutcheck(H, GLOB.regenerateblock, null, MUTCHK_FORCED)
singlemutcheck(H, GLOB.regenerateblock, MUTCHK_FORCED)
H.update_mutations()
H.gene_stability = 100
logmsg = "permanent regeneration."
if("Super Powers")
var/list/default_genes = list(GLOB.regenerateblock, GLOB.breathlessblock, GLOB.coldblock)
for(var/gene in default_genes)
H.dna.SetSEState(gene, 1)
genemutcheck(H, gene, null, MUTCHK_FORCED)
var/list/default_mutations = list(GLOB.regenerateblock, GLOB.breathlessblock, GLOB.coldblock)
for(var/mutation in default_mutations)
H.dna.SetSEState(mutation, 1)
singlemutcheck(H, mutation, MUTCHK_FORCED)
H.update_mutations()
H.gene_stability = 100
logmsg = "superpowers."
@@ -2194,7 +2196,7 @@
switch(punishment)
// These smiting types are valid for all living mobs
if("Lightning bolt")
M.electrocute_act(5, "Lightning Bolt", safety = TRUE, override = TRUE)
M.electrocute_act(5, "Lightning Bolt", flags = SHOCK_NOGLOVES)
playsound(get_turf(M), 'sound/magic/lightningshock.ogg', 50, 1, -1)
M.adjustFireLoss(75)
M.Weaken(5)
@@ -2232,7 +2234,7 @@
logmsg = "starvation."
if("Cluwne")
H.makeCluwne()
H.mutations |= NOCLONE
ADD_TRAIT(H, TRAIT_BADDNA, "smiting")
logmsg = "cluwned."
if("Mutagen Cookie")
var/obj/item/reagent_containers/food/snacks/cookie/evilcookie = new /obj/item/reagent_containers/food/snacks/cookie
@@ -2253,7 +2255,7 @@
H.equip_to_slot_or_del(evilcookie, slot_l_hand)
logmsg = "a hellwater cookie."
if("Hunter")
H.mutations |= NOCLONE
ADD_TRAIT(H, TRAIT_BADDNA, "smiting")
usr.client.create_eventmob_for(H, 1)
logmsg = "hunter."
if("Crew Traitor")
@@ -2324,7 +2326,7 @@
message_admins("[key_name_admin(usr)] sent [H.job] [H] to cryo.")
if(href_list["cryoafk"]) // Warn them if they are send to storage and are AFK
to_chat(H, "<span class='danger'>The admins have moved you to cryo storage for being AFK. Please eject yourself (right click, eject) out of the cryostorage if you want to avoid being despawned.</span>")
SEND_SOUND(H, 'sound/effects/adminhelp.ogg')
SEND_SOUND(H, sound('sound/effects/adminhelp.ogg'))
if(H.client)
window_flash(H.client)
else if(href_list["FaxReplyTemplate"])
@@ -2965,9 +2967,6 @@
if(!security)
//strip their stuff before they teleport into a cell :downs:
for(var/obj/item/W in H)
if(istype(W, /obj/item/organ/external))
continue
//don't strip organs
H.unEquip(W)
if(H.client)
H.client.screen -= W
+12 -13
View File
@@ -1,7 +1,5 @@
//This is a list of words which are ignored by the parser when comparing message contents for names. MUST BE IN LOWER CASE!
GLOBAL_LIST_INIT(adminhelp_ignored_words, list("unknown","the","a","an","of","monkey","alien","as"))
GLOBAL_LIST_INIT(adminhelp_ignored_words, list("unknown", "the", "a", "an", "of", "monkey", "alien", "as"))
/client/verb/adminhelp()
set category = "Admin"
@@ -12,27 +10,28 @@ GLOBAL_LIST_INIT(adminhelp_ignored_words, list("unknown","the","a","an","of","mo
to_chat(src, "<font color='red'>Error: Admin-PM: You cannot send adminhelps (Muted).</font>")
return
adminhelped = 1 //Determines if they get the message to reply by clicking the name.
adminhelped = TRUE //Determines if they get the message to reply by clicking the name.
var/msg
var/list/type = list("Mentorhelp","Adminhelp")
var/selected_type = input("Pick a category.", "Admin Help", null, null) as null|anything in type
var/list/type = list("Mentorhelp", "Adminhelp")
var/selected_type = input("Pick a category.", "Admin Help") as null|anything in type
if(selected_type)
msg = clean_input("Please enter your message.", "Admin Help", null)
msg = clean_input("Please enter your message.", selected_type)
//clean the input msg
if(!msg)
return
if(handle_spam_prevention(msg, MUTE_ADMINHELP, OOC_COOLDOWN))
return
msg = sanitize_simple(copytext(msg,1,MAX_MESSAGE_LEN))
if(!msg) return
msg = sanitize_simple(copytext(msg, 1, MAX_MESSAGE_LEN))
if(!msg) // No message after sanitisation
return
if(selected_type == "Mentorhelp")
SSmentor_tickets.newHelpRequest(src, msg)
SSmentor_tickets.newHelpRequest(src, msg) // Mhelp
else
SStickets.newHelpRequest(src, msg)
SStickets.newHelpRequest(src, msg) // Ahelp
//show it to the person adminhelping too
to_chat(src, "<span class='boldnotice'>[selected_type]</b>: [msg]</span>")
@@ -54,7 +53,7 @@ GLOBAL_LIST_INIT(adminhelp_ignored_words, list("unknown","the","a","an","of","mo
var/inactive_mentors = mentorcount[3]
if(active_mentors <= 0)
if(inactive_mentors > 0)
if(inactive_mentors)
alerttext = " | **ALL MENTORS AFK**"
else
alerttext = " | **NO MENTORS ONLINE**"
+12 -10
View File
@@ -75,7 +75,7 @@
set category = "Admin"
set name = "Jump to Coordinate"
if(!check_rights(R_ADMIN))
if(!isobserver(usr) && !check_rights(R_ADMIN)) // Only admins can jump without being a ghost
return
var/turf/T = locate(tx, ty, tz)
@@ -168,15 +168,17 @@
if(!check_rights(R_ADMIN))
return
var/area/A = input(usr, "Pick an area.", "Pick an area") in return_sorted_areas()
if(A)
if(isobj(M.loc))
var/obj/O = M.loc
O.force_eject_occupant(M)
admin_forcemove(M, pick(get_area_turfs(A)))
SSblackbox.record_feedback("tally", "admin_verb", 1, "Send Mob") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] teleported [key_name(M)] to [A]")
message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)] to [A]", 1)
var/area/A = input(usr, "Pick an area.", "Pick an area") as null|anything in return_sorted_areas()
if(!A)
return
if(isobj(M.loc))
var/obj/O = M.loc
O.force_eject_occupant(M)
admin_forcemove(M, pick(get_area_turfs(A)))
SSblackbox.record_feedback("tally", "admin_verb", 1, "Send Mob") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] teleported [key_name(M)] to [A]")
message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)] to [A]", 1)
/proc/admin_forcemove(mob/mover, atom/newloc)
mover.forceMove(newloc)
+1 -1
View File
@@ -169,7 +169,7 @@
//play the recieving admin the adminhelp sound (if they have them enabled)
//non-admins always hear the sound, as they cannot toggle it
if((!C.holder) || (C.prefs.sound & SOUND_ADMINHELP))
C << 'sound/effects/adminhelp.ogg'
SEND_SOUND(C, sound('sound/effects/adminhelp.ogg'))
log_admin("PM: [key_name(src)]->[key_name(C)]: [msg]")
//we don't use message_admins here because the sender/receiver might get it too
+1 -1
View File
@@ -16,7 +16,7 @@
if(R_ADMIN & C.holder.rights)
// Lets see if this admin was pinged in the asay message
if(findtext(msg, "@[C.ckey]") || findtext(msg, "@[C.key]")) // Check ckey and key, so you can type @AffectedArc07 or @affectedarc07
SEND_SOUND(C, 'sound/misc/ping.ogg')
SEND_SOUND(C, sound('sound/misc/ping.ogg'))
msg = replacetext(msg, "@[C.ckey]", "<font color='red'>@[C.ckey]</font>")
msg = replacetext(msg, "@[C.key]", "<font color='red'>@[C.key]</font>") // Same applies here. key and ckey.
+4 -4
View File
@@ -852,12 +852,12 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
if(!SSticker)
alert("Wait until the game starts")
return
if(istype(M, /mob/living/carbon))
if(ishuman(M))
M.dna.SetSEState(block,!M.dna.GetSEState(block))
genemutcheck(M,block,null,MUTCHK_FORCED)
singlemutcheck(M, block, MUTCHK_FORCED)
M.update_mutations()
var/state="[M.dna.GetSEState(block)?"on":"off"]"
var/blockname=GLOB.assigned_blocks[block]
var/state = "[M.dna.GetSEState(block) ? "on" : "off"]"
var/blockname = GLOB.assigned_blocks[block]
message_admins("[key_name_admin(src)] has toggled [M.key]'s [blockname] block [state]!")
log_admin("[key_name(src)] has toggled [M.key]'s [blockname] block [state]!")
else
+2 -1
View File
@@ -126,7 +126,8 @@ GLOBAL_VAR_INIT(sent_honksquad, 0)
equip_to_slot_or_del(new /obj/item/gun/energy/clown(src), slot_in_backpack)
else
equip_to_slot_or_del(new /obj/item/gun/throw/piecannon(src), slot_in_backpack)
src.mutations.Add(CLUMSY)
dna.SetSEState(GLOB.clumsyblock, TRUE)
singlemutcheck(src, GLOB.clumsyblock, MUTCHK_FORCED)
+16 -4
View File
@@ -30,8 +30,6 @@
for(var/obj/item/I in H)
if(istype(I, /obj/item/implant))
continue
if(istype(I, /obj/item/organ))
continue
qdel(I)
H.equip_to_slot_or_del(new /obj/item/clothing/under/kilt(H), slot_w_uniform)
@@ -55,7 +53,14 @@
message_admins("[key_name_admin(usr)] used THERE CAN BE ONLY ONE! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1)
log_admin("[key_name(usr)] used there can be only one.")
GLOB.nologevent = 1
world << sound('sound/music/thunderdome.ogg')
var/sound/music = sound('sound/music/thunderdome.ogg', channel = CHANNEL_ADMIN)
for(var/mob/M in GLOB.player_list)
if(M.client.prefs.sound & SOUND_MIDI)
if(isnewplayer(M) && (M.client.prefs.sound & SOUND_LOBBY))
M.stop_sound_channel(CHANNEL_LOBBYMUSIC)
music.volume = 100 * M.client.prefs.get_channel_volume(CHANNEL_ADMIN)
SEND_SOUND(M, music)
/client/proc/only_me()
if(!SSticker)
@@ -101,4 +106,11 @@
message_admins("[key_name_admin(usr)] used THERE CAN BE ONLY ME! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1)
log_admin("[key_name(usr)] used there can be only me.")
GLOB.nologevent = 1
world << sound('sound/music/thunderdome.ogg')
var/sound/music = sound('sound/music/thunderdome.ogg', channel = CHANNEL_ADMIN)
for(var/mob/M in GLOB.player_list)
if(M.client.prefs.sound & SOUND_MIDI)
if(isnewplayer(M) && (M.client.prefs.sound & SOUND_LOBBY))
M.stop_sound_channel(CHANNEL_LOBBYMUSIC)
music.volume = 100 * M.client.prefs.get_channel_volume(CHANNEL_ADMIN)
SEND_SOUND(M, music)
-2
View File
@@ -18,8 +18,6 @@
for(var/obj/item/I in H)
if(istype(I, /obj/item/implant))
continue
if(istype (I, /obj/item/organ))
continue
qdel(I)
to_chat(H, "<B>You are part of the [station_name()] dodgeball tournament. Throw dodgeballs at crewmembers wearing a different color than you. OOC: Use THROW on an EMPTY-HAND to catch thrown dodgeballs.</B>")
+1 -49
View File
@@ -33,6 +33,7 @@ GLOBAL_LIST_EMPTY(sounds_cache)
if(M.client.prefs.sound & SOUND_MIDI)
if(isnewplayer(M) && (M.client.prefs.sound & SOUND_LOBBY))
M.stop_sound_channel(CHANNEL_LOBBYMUSIC)
uploaded_sound.volume = 100 * M.client.prefs.get_channel_volume(CHANNEL_ADMIN)
SEND_SOUND(M, uploaded_sound)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Play Global Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -102,52 +103,3 @@ GLOBAL_LIST_EMPTY(sounds_cache)
if(!I.on && !ignore_power)
continue
playsound(I, melody, cvol)
/*
/client/proc/cuban_pete()
set category = "Event"
set name = "Cuban Pete Time"
message_admins("[key_name_admin(usr)] has declared Cuban Pete Time!", 1)
for(var/mob/M in world)
if(M.client)
if(M.client.midis)
M << 'cubanpetetime.ogg'
for(var/mob/living/carbon/human/CP in world)
if(CP.real_name=="Cuban Pete" && CP.key!="Rosham")
C << "Your body can't contain the rhumba beat"
CP.gib()
/client/proc/bananaphone()
set category = "Event"
set name = "Banana Phone"
message_admins("[key_name_admin(usr)] has activated Banana Phone!", 1)
for(var/mob/M in world)
if(M.client)
if(M.client.midis)
M << 'bananaphone.ogg'
client/proc/space_asshole()
set category = "Event"
set name = "Space Asshole"
message_admins("[key_name_admin(usr)] has played the Space Asshole Hymn.", 1)
for(var/mob/M in world)
if(M.client)
if(M.client.midis)
M << 'sound/music/space_asshole.ogg'
client/proc/honk_theme()
set category = "Event"
set name = "Honk"
message_admins("[key_name_admin(usr)] has creeped everyone out with Blackest Honks.", 1)
for(var/mob/M in world)
if(M.client)
if(M.client.midis)
M << 'honk_theme.ogg'*/
+6 -6
View File
@@ -36,7 +36,7 @@
if(check_rights(R_EVENT,0,X.mob))
to_chat(X, msg)
if(X.prefs.sound & SOUND_PRAYERNOTIFY)
SEND_SOUND(X, 'sound/items/PDA/ambicha4-short.ogg')
SEND_SOUND(X, sound('sound/items/PDA/ambicha4-short.ogg'))
to_chat(usr, "Your prayers have been received by the gods.")
SSblackbox.record_feedback("tally", "admin_verb", 1, "Pray") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -48,7 +48,7 @@
if(R_EVENT & X.holder.rights)
to_chat(X, msg)
if(X.prefs.sound & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
SEND_SOUND(X, sound('sound/effects/adminhelp.ogg'))
/proc/Syndicate_announce(text, mob/Sender)
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
@@ -57,7 +57,7 @@
if(check_rights(R_EVENT,0,X.mob))
to_chat(X, msg)
if(X.prefs.sound & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
SEND_SOUND(X, sound('sound/effects/adminhelp.ogg'))
/proc/HONK_announce(text, mob/Sender)
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
@@ -66,7 +66,7 @@
if(R_EVENT & X.holder.rights)
to_chat(X, msg)
if(X.prefs.sound & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
SEND_SOUND(X, sound('sound/effects/adminhelp.ogg'))
/proc/ERT_Announce(text, mob/Sender, repeat_warning)
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
@@ -77,7 +77,7 @@
if(check_rights(R_EVENT,0,X.mob))
to_chat(X, msg)
if(X.prefs.sound & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
SEND_SOUND(X, sound('sound/effects/adminhelp.ogg'))
/proc/Nuke_request(text , mob/Sender)
var/nuke_code = get_nuke_code()
@@ -88,4 +88,4 @@
to_chat(X, msg)
to_chat(X, "<span class='adminnotice'><b>The nuke code is [nuke_code].</b></span>")
if(X.prefs.sound & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
SEND_SOUND(X, sound('sound/effects/adminhelp.ogg'))