Adds message boxes to the chat system (#22280)

* initial working commit

* fix this

* helpers

* tweaks

* text being silly moment

* antags are red

* Update goon/browserassets/css/browserOutput-dark.css

Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>

* Update code/modules/mob/living/carbon/brain/robotic_brain.dm

Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>

* review and warning fixes

* refactor antag greetings

* tweaks to include more things

* Apply suggestions from code review

Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>

* Update code/modules/antagonists/traitor/datum_mindslave.dm

Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>

* fixes vial spawned antags

* Update code/datums/mind.dm

Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>

---------

Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>
This commit is contained in:
S34N
2023-10-12 23:15:03 +01:00
committed by GitHub
co-authored by Burzah Luc Contrabang
parent 7d47f4d54b
commit a029cf2502
48 changed files with 273 additions and 145 deletions
+6
View File
@@ -0,0 +1,6 @@
#define chat_box_regular(str) ("<div class='boxed_message'>" + str + "</div>")
#define chat_box_examine(str) ("<div class='boxed_message left_align_text'>" + str + "</div>")
#define chat_box_red(str) ("<div class='boxed_message red_border'>" + str + "</div>")
#define chat_box_green(str) ("<div class='boxed_message green_border'>" + str + "</div>")
#define chat_box_notice(str) ("<div class='boxed_message notice_border'>" + str + "</div>")
#define chat_box_notice_thick(str) ("<div class='boxed_message notice_border thick_border'>" + str + "</div>")
+2 -3
View File
@@ -431,7 +431,7 @@ SUBSYSTEM_DEF(jobs)
CreateMoneyAccount(H, rank, job)
var/list/L = list("<br><br><center><span class='green'>----------------</span>")
var/list/L = list()
L.Add("<b>Your role on the station is: [alt_title ? alt_title : rank].")
L.Add("You answer directly to [job.supervisors]. Special circumstances may change this.")
L.Add("For more information on how the station works, see [wiki_link("Standard_Operating_Procedure", "Standard Operating Procedure (SOP)")].")
@@ -456,9 +456,8 @@ SUBSYSTEM_DEF(jobs)
L.Add("<br>If you need help, check the [wiki_link("Main_Page", "wiki")] or use Mentorhelp(F1)!</b>")
if(job.important_information)
L.Add("</b><span class='userdanger' style='width: 80%'>[job.important_information]</span>")
L.Add("<span class='green'>----------------</span></center><br><br>")
to_chat(H, L.Join("<br>"))
to_chat(H, chat_box_green(L.Join("<br>")))
return H
+4 -3
View File
@@ -1489,7 +1489,8 @@
message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] an uplink")
else if(href_list["obj_announce"])
announce_objectives()
var/list/messages = prepare_announce_objectives()
to_chat(current, chat_box_red(messages.Join("<br>")))
SEND_SOUND(current, sound('sound/ambience/alarm4.ogg'))
log_admin("[key_name(usr)] has announced [key_name(current)]'s objectives")
message_admins("[key_name_admin(usr)] has announced [key_name_admin(current)]'s objectives")
@@ -1574,14 +1575,14 @@
else if(A.type == datum_type)
return A
/datum/mind/proc/announce_objectives(title = TRUE)
/datum/mind/proc/prepare_announce_objectives(title = TRUE)
if(!current)
return
var/list/text = list()
if(title)
text.Add("<span class='notice'>Your current objectives:</span>")
text.Add(gen_objective_text())
to_chat(current, text.Join("<br>"))
return text
/datum/mind/proc/find_syndicate_uplink()
var/list/L = current.get_contents()
@@ -149,36 +149,38 @@
greet_scientist(scientist,team_number)
update_abductor_icons_added(scientist)
/datum/game_mode/abduction/proc/greet_agent(datum/mind/abductor,team_number)
/datum/game_mode/abduction/proc/greet_agent(datum/mind/abductor, team_number)
var/datum/objective/stay_hidden/O = new
abductor.add_mind_objective(O)
abductor.objective_holder.add_objective(team_objectives[team_number]) // this needs to be changed when abductor teams are changed to actual antag teams
var/team_name = team_names[team_number]
SEND_SOUND(abductor.current, sound('sound/ambience/antag/abductors.ogg'))
to_chat(abductor.current, "<span class='notice'>You are an agent of [team_name]!</span>")
to_chat(abductor.current, "<span class='notice'>With the help of your teammate, kidnap and experiment on station crew members!</span>")
to_chat(abductor.current, "<span class='notice'>Use your stealth technology and equipment to incapacitate humans for your scientist to retrieve.</span>")
to_chat(abductor.current, "<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Abductor)</span>")
var/list/messages = list()
messages.Add("<span class='notice'>You are an agent of [team_name]!</span>")
messages.Add("<span class='notice'>With the help of your teammate, kidnap and experiment on station crew members!</span>")
messages.Add("<span class='notice'>Use your stealth technology and equipment to incapacitate humans for your scientist to retrieve.</span>")
messages.Add("<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Abductor)</span>")
messages.Add(abductor.prepare_announce_objectives())
to_chat(abductor.current, chat_box_red(messages.Join("<br>")))
abductor.current.create_log(MISC_LOG, "[abductor.current] was made into an abductor agent")
abductor.announce_objectives()
/datum/game_mode/abduction/proc/greet_scientist(datum/mind/abductor,team_number)
/datum/game_mode/abduction/proc/greet_scientist(datum/mind/abductor, team_number)
var/datum/objective/stay_hidden/O = new
abductor.add_mind_objective(O)
abductor.objective_holder.add_objective(team_objectives[team_number]) // this needs to be changed when abductor teams are changed to actual antag teams
var/team_name = team_names[team_number]
SEND_SOUND(abductor.current, sound('sound/ambience/antag/abductors.ogg'))
to_chat(abductor.current, "<span class='notice'>You are a scientist of [team_name]!</span>")
to_chat(abductor.current, "<span class='notice'>With the help of your teammate, kidnap and experiment on station crew members!</span>")
to_chat(abductor.current, "<span class='notice'>Use your tool and ship consoles to support the agent and retrieve human specimens.</span>")
to_chat(abductor.current, "<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Abductor)</span>")
var/list/messages = list()
messages.Add("<span class='notice'>You are a scientist of [team_name]!</span>")
messages.Add("<span class='notice'>With the help of your teammate, kidnap and experiment on station crew members!</span>")
messages.Add("<span class='notice'>Use your tool and ship consoles to support the agent and retrieve human specimens.</span>")
messages.Add("<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Abductor)</span>")
messages.Add(abductor.prepare_announce_objectives())
to_chat(abductor.current, chat_box_red(messages.Join("<br>")))
abductor.current.create_log(MISC_LOG, "[abductor.current] was made into an abductor scientist")
abductor.announce_objectives()
/datum/game_mode/abduction/proc/get_team_console(team_number)
for(var/obj/machinery/abductor/console/C in GLOB.machines)
if(C.team == team_number)
@@ -149,7 +149,8 @@
var/objtype = pick(subtypesof(/datum/objective/abductee/))
var/datum/objective/abductee/O = new objtype()
H.mind.add_mind_objective(O)
H.mind.announce_objectives() // let the player know they have a new objective
var/list/messages = list(H.mind.prepare_announce_objectives())
to_chat(H, chat_box_red(messages.Join("<br>"))) // let the player know they have a new objective
SSticker.mode.update_abductor_icons_added(H.mind)
for(var/obj/item/organ/internal/heart/gland/G in H.internal_organs)
@@ -48,15 +48,18 @@
/mob/living/simple_animal/demon/slaughter/proc/attempt_objectives()
if(mind)
to_chat(src, src.playstyle_string)
to_chat(src, "<B><span class ='notice'>You are not currently in the same plane of existence as the station. Use the blood crawl action at a blood pool to manifest.</span></B>")
var/list/messages = list()
messages.Add(playstyle_string)
messages.Add("<b><span class ='notice'>You are not currently in the same plane of existence as the station. Use the blood crawl action at a blood pool to manifest.</span></b>")
SEND_SOUND(src, sound('sound/misc/demon_dies.ogg'))
if(!vialspawned)
SSticker.mode.traitors |= mind
mind.add_mind_objective(/datum/objective/slaughter)
mind.add_mind_objective(/datum/objective/demon_fluff)
mind.announce_objectives(title = FALSE)
to_chat(src, "<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Slaughter_Demon)</span>")
messages.Add(mind.prepare_announce_objectives(FALSE))
messages.Add("<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Slaughter_Demon)</span>")
to_chat(src, chat_box_red(messages.Join("<br>")))
/obj/effect/decal/cleanable/blood/innards
@@ -153,7 +156,8 @@
AddSpell(SV)
S.mind.add_mind_objective(/datum/objective/cult_slaughter)
S.mind.announce_objectives(title = FALSE)
var/list/messages = list(S.mind.prepare_announce_objectives(FALSE))
to_chat(S, chat_box_red(messages.Join("<br>")))
////////////////////The Powers
+13 -10
View File
@@ -303,20 +303,23 @@
mind.assigned_role = SPECIAL_ROLE_MORPH
mind.special_role = SPECIAL_ROLE_MORPH
SSticker.mode.traitors |= mind
to_chat(src, "<b><font size=3 color='red'>You are a morph.</font><br></b>")
to_chat(src, "<span class='sinister'>You hunger for living beings and desire to procreate. Achieve this goal by ambushing unsuspecting pray using your abilities.</span>")
to_chat(src, "<span class='specialnotice'>As an abomination created primarily with changeling cells you may take the form of anything nearby by using your <span class='specialnoticebold'>Mimic ability.</span></span>")
to_chat(src, "<span class='specialnotice'>The transformation will not go unnoticed for bystanding observers.</span>")
to_chat(src, "<span class='specialnoticebold'>While morphed</span><span class='specialnotice'>, you move slower and do less damage. In addition, anyone within three tiles will note an uncanny wrongness if examining you.</span>")
to_chat(src, "<span class='specialnotice'>From this form you can however <span class='specialnoticebold'>Prepare an Ambush</span> using your ability.</span>")
to_chat(src, "<span class='specialnotice'>This will allow you to deal a lot of damage the first hit. And if they touch you then even more.</span>")
to_chat(src, "<span class='specialnotice'>Finally, you can attack any item or dead creature to consume it - creatures will restore 1/3 of your max health and will add to your stored food while eating items will reduce your stored food.</span>")
to_chat(src, "<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Morph)</span>")
var/list/messages = list()
messages.Add("<b><font size=3 color='red'>You are a morph.</font><br></b>")
messages.Add("<span class='sinister'>You hunger for living beings and desire to procreate. Achieve this goal by ambushing unsuspecting pray using your abilities.</span>")
messages.Add("<span class='specialnotice'>As an abomination created primarily with changeling cells you may take the form of anything nearby by using your <span class='specialnoticebold'>Mimic ability.</span></span>")
messages.Add("<span class='specialnotice'>The transformation will not go unnoticed for bystanding observers.</span>")
messages.Add("<span class='specialnoticebold'>While morphed</span><span class='specialnotice'>, you move slower and do less damage. In addition, anyone within three tiles will note an uncanny wrongness if examining you.</span>")
messages.Add("<span class='specialnotice'>From this form you can however <span class='specialnoticebold'>Prepare an Ambush</span> using your ability.</span>")
messages.Add("<span class='specialnotice'>This will allow you to deal a lot of damage the first hit. And if they touch you then even more.</span>")
messages.Add("<span class='specialnotice'>Finally, you can attack any item or dead creature to consume it - creatures will restore 1/3 of your max health and will add to your stored food while eating items will reduce your stored food.</span>")
messages.Add("<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Morph)</span>")
SEND_SOUND(src, sound('sound/magic/mutate.ogg'))
if(give_default_objectives)
mind.add_mind_objective(/datum/objective/morph_eat)
mind.add_mind_objective(/datum/objective/morph_procreate)
mind.announce_objectives(title = FALSE)
messages.Add(mind.prepare_announce_objectives(FALSE))
to_chat(src, chat_box_red(messages.Join("<br>")))
/datum/objective/morph_eat
explanation_text = "Eat as many living beings as possible to still the hunger within you."
@@ -241,16 +241,16 @@
if(!mind)
return
mind.wipe_memory()
var/list/greeting = list(src, "<br>")
var/list/greeting = list()
greeting.Add("<span class='warning'><font size=3><b>You are a pulse demon.</b></font></span>")
greeting.Add("<b>A being made of pure electrical energy, you travel through the station's wires and infest machinery.</b>")
greeting.Add("<b>Navigate the station's power cables to find power sources to steal from, and hijack APCs to interact with their connected machines.</b>")
greeting.Add("<b>If the wire or power source you're connected to runs out of power you'll start losing health and eventually die, but you are otherwise immune to damage.</b>")
greeting.Add("<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Pulse_Demon)</span>")
to_chat(src, greeting.Join("<br>"))
for(var/datum/objective/new_obj in list(/datum/objective/pulse_demon/infest, /datum/objective/pulse_demon/drain, /datum/objective/pulse_demon/tamper))
mind.add_mind_objective(new_obj)
mind.announce_objectives(title = FALSE)
greeting.Add(mind.prepare_announce_objectives(FALSE))
to_chat(src, chat_box_red(greeting.Join("<br>")))
SSticker.mode.traitors |= mind
return
@@ -176,19 +176,20 @@
/mob/living/simple_animal/revenant/proc/giveObjectivesandGoals()
mind.wipe_memory() // someone kill this and give revenants their own minds please
SEND_SOUND(src, sound('sound/effects/ghost.ogg'))
to_chat(src, "<br>")
to_chat(src, "<span class='deadsay'><font size=3><b>You are a revenant.</b></font></span>")
to_chat(src, "<b>Your formerly mundane spirit has been infused with alien energies and empowered into a revenant.</b>")
to_chat(src, "<b>You are not dead, not alive, but somewhere in between. You are capable of limited interaction with both worlds.</b>")
to_chat(src, "<b>You are invincible and invisible to everyone but other ghosts. Most abilities will reveal you, rendering you vulnerable.</b>")
to_chat(src, "<b>To function, you are to drain the life essence from humans. This essence is a resource, as well as your health, and will power all of your abilities.</b>")
to_chat(src, "<b><i>You do not remember anything of your past lives, nor will you remember anything about this one after your death.</i></b>")
to_chat(src, "<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Revenant)</span>")
var/list/messages = list()
messages.Add("<span class='deadsay'><font size=3><b>You are a revenant.</b></font></span>")
messages.Add("<b>Your formerly mundane spirit has been infused with alien energies and empowered into a revenant.</b>")
messages.Add("<b>You are not dead, not alive, but somewhere in between. You are capable of limited interaction with both worlds.</b>")
messages.Add("<b>You are invincible and invisible to everyone but other ghosts. Most abilities will reveal you, rendering you vulnerable.</b>")
messages.Add("<b>To function, you are to drain the life essence from humans. This essence is a resource, as well as your health, and will power all of your abilities.</b>")
messages.Add("<b><i>You do not remember anything of your past lives, nor will you remember anything about this one after your death.</i></b>")
messages.Add("<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Revenant)</span>")
SSticker.mode.traitors |= mind //Necessary for announcing
mind.add_mind_objective(/datum/objective/revenant)
mind.add_mind_objective(/datum/objective/revenantFluff)
mind.announce_objectives(title = FALSE)
messages.Add(mind.prepare_announce_objectives(FALSE))
to_chat(src, chat_box_red(messages.Join("<br>")))
/mob/living/simple_animal/revenant/proc/giveSpells()
mind.AddSpell(new /obj/effect/proc_holder/spell/night_vision/revenant(null))
+5 -3
View File
@@ -241,11 +241,13 @@
/datum/game_mode/proc/greet_syndicate(datum/mind/syndicate, you_are=1)
SEND_SOUND(syndicate.current, sound('sound/ambience/antag/ops.ogg'))
var/list/messages = list()
if(you_are)
to_chat(syndicate.current, "<span class='notice'>You are a [syndicate_name()] agent!</span>")
messages.Add("<span class='notice'>You are a [syndicate_name()] agent!</span>")
syndicate.announce_objectives(title = FALSE)
to_chat(syndicate.current, "<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Nuclear_Agent)</span>")
messages.Add(syndicate.prepare_announce_objectives(FALSE))
messages.Add("<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Nuclear_Agent)</span>")
to_chat(syndicate.current, chat_box_red(messages.Join("<br>")))
syndicate.current.create_log(MISC_LOG, "[syndicate.current] was made into a nuclear operative")
+2 -1
View File
@@ -132,7 +132,8 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
holder.remove_objective(src)
// even if we have to remove the objective, still announce it
for(var/datum/mind/M in owners)
M.announce_objectives()
var/list/messages = list(M.prepare_announce_objectives(FALSE))
to_chat(M.current, chat_box_red(messages.Join("<br>")))
// Borgs, brains, AIs, etc count as dead for traitor objectives
/datum/objective/proc/is_special_dead(mob/target_current, check_silicon = TRUE)
+8 -4
View File
@@ -342,7 +342,8 @@ GLOBAL_LIST_EMPTY(multiverse)
var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone
hijack_objective.explanation_text = "Ensure only [usr.real_name] and [usr.p_their()] copies are on the shuttle!"
usr.mind.add_mind_objective(hijack_objective)
usr.mind.announce_objectives(title = FALSE)
var/list/messages = list(user.mind.prepare_announce_objectives(FALSE))
to_chat(user, chat_box_red(messages.Join("<br>")))
SSticker.mode.traitors += usr.mind
usr.mind.special_role = "[usr.real_name] Prime"
@@ -353,7 +354,8 @@ GLOBAL_LIST_EMPTY(multiverse)
var/datum/objective/survive/new_objective = new /datum/objective/survive
new_objective.explanation_text = "Survive, and help defend the innocent from the mobs of multiverse clones."
usr.mind.add_mind_objective(new_objective)
usr.mind.announce_objectives(title = FALSE)
var/list/messages = list(user.mind.prepare_announce_objectives(FALSE))
to_chat(user, chat_box_red(messages.Join("<br>")))
SSticker.mode.traitors += usr.mind
usr.mind.special_role = "[usr.real_name] Prime"
@@ -410,7 +412,8 @@ GLOBAL_LIST_EMPTY(multiverse)
var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone
hijack_objective.explanation_text = "Ensure only [usr.real_name] and [usr.p_their()] copies are on the shuttle!"
M.mind.add_mind_objective(hijack_objective)
M.mind.announce_objectives(title = FALSE)
var/list/messages = list(M.mind.prepare_announce_objectives(FALSE))
to_chat(M, chat_box_red(messages.Join("<br>")))
M.mind.special_role = SPECIAL_ROLE_MULTIVERSE
log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] hijack.")
@@ -419,7 +422,8 @@ GLOBAL_LIST_EMPTY(multiverse)
new_objective.target = usr.mind
new_objective.explanation_text = "Protect [usr.real_name], your copy, and help [usr.p_them()] defend the innocent from the mobs of multiverse clones."
M.mind.add_mind_objective(new_objective)
M.mind.announce_objectives(title = FALSE)
var/list/messages = list(M.mind.prepare_announce_objectives(FALSE))
to_chat(M, chat_box_red(messages.Join("<br>")))
M.mind.special_role = SPECIAL_ROLE_MULTIVERSE
log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] protect the station.")
+6 -4
View File
@@ -26,12 +26,14 @@
..()
/datum/game_mode/wizard/raginmages/greet_wizard(datum/mind/wizard, you_are=1)
var/list/messages = list()
if(you_are)
to_chat(wizard.current, "<span class='danger'>You are the Space Wizard!</span>")
to_chat(wizard.current, "<B>The Space Wizard Federation has given you the following tasks:</B>")
messages.Add("<span class='danger'>You are the Space Wizard!</span>")
messages.Add("<B>The Space Wizards Federation has given you the following tasks:</B>")
to_chat(wizard.current, "<b>Supreme Objective</b>: Make sure the station pays for its actions against our diplomats. We might send more Wizards to the station if the situation is not developing in our favour.")
wizard.announce_objectives(title = FALSE)
messages.Add("<b>Supreme Objective</b>: Make sure the station pays for its actions against our diplomats. We might send more Wizards to the station if the situation is not developing in our favour.")
messages.Add(wizard.prepare_announce_objectives(title = FALSE))
to_chat(wizard.current, chat_box_red(messages.Join("<br>")))
wizard.current.create_log(MISC_LOG, "[wizard.current] was made into a wizard")
/datum/game_mode/wizard/raginmages/check_finished()
+6 -4
View File
@@ -98,12 +98,14 @@
/datum/game_mode/proc/greet_wizard(datum/mind/wizard, you_are=1)
addtimer(CALLBACK(wizard.current, TYPE_PROC_REF(/mob, playsound_local), null, 'sound/ambience/antag/ragesmages.ogg', 100, 0), 30)
var/list/messages = list()
if(you_are)
to_chat(wizard.current, "<span class='danger'>You are the Space Wizard!</span>")
to_chat(wizard.current, "<B>The Space Wizards Federation has given you the following tasks:</B>")
messages.Add("<span class='danger'>You are the Space Wizard!</span>")
messages.Add("<b>The Space Wizards Federation has given you the following tasks:</b>")
wizard.announce_objectives(title = FALSE)
to_chat(wizard.current, "<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Wizard)</span>")
messages.Add(wizard.prepare_announce_objectives(title = FALSE))
messages.Add("<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Wizard)</span>")
to_chat(wizard.current, chat_box_red(messages.Join("<br>")))
wizard.current.create_log(MISC_LOG, "[wizard.current] was made into a wizard")
/datum/game_mode/proc/equip_wizard(mob/living/carbon/human/wizard_mob)
+2 -3
View File
@@ -974,8 +974,7 @@ GLOBAL_LIST_INIT(view_runtimes_verbs, list(
if(!check_rights(R_ADMIN))
return
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>")
to_chat(T, chat_box_notice_thick("<span class='notice'><b><font size=4>Man up.<br> Deal with it.</font></b><br>Move on.</span>"))
SEND_SOUND(T, sound('sound/voice/manup1.ogg'))
log_admin("[key_name(usr)] told [key_name(T)] to man up and deal with it.")
@@ -994,7 +993,7 @@ GLOBAL_LIST_INIT(view_runtimes_verbs, list(
if(confirm == "Yes")
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>")
to_chat(sissy, chat_box_notice_thick("<span class='notice'><b><font size=4>Man up.<br> Deal with it.</font></b><br>Move on.</span>"))
SEND_SOUND(sissy, manned_up_sound)
log_admin("[key_name(usr)] told everyone to man up and deal with it.")
+1 -1
View File
@@ -421,7 +421,7 @@ GLOBAL_VAR_INIT(nologevent, 0)
if(!check_rights(R_SERVER,0))
message = adminscrub(message,500)
message = replacetext(message, "\n", "<br>") // required since we're putting it in a <p> tag
to_chat(world, "<span class='notice'><b>[usr.client.holder.fakekey ? "Administrator" : usr.key] Announces:</b><p style='text-indent: 50px'>[message]</p></span>")
to_chat(world, chat_box_notice("<span class='notice'><b>[usr.client.holder.fakekey ? "Administrator" : usr.key] Announces:</b><br><br><p>[message]</p></span>"))
log_admin("Announce: [key_name(usr)] : [message]")
for(var/client/clients_to_alert in GLOB.clients)
window_flash(clients_to_alert)
+1 -1
View File
@@ -156,7 +156,7 @@
var/emoji_msg = "<span class='emoji_enabled'>[msg]</span>"
recieve_message = "<span class='[recieve_span]'>[type] from-<b>[recieve_pm_type] [C.holder ? key_name(src, TRUE, type) : key_name_hidden(src, TRUE, type)]</b>: [emoji_msg]</span>"
recieve_message = chat_box_red("<span class='[recieve_span]'>[type] from-<b>[recieve_pm_type] [C.holder ? key_name(src, TRUE, type) : key_name_hidden(src, TRUE, type)]</b>:<br><br>[emoji_msg]</span>")
to_chat(C, recieve_message)
var/ping_link = check_rights(R_ADMIN, 0, mob) ? "(<a href='?src=[pm_tracker.UID()];ping=[C.key]'>PING</a>)" : ""
var/window_link = "(<a href='?src=[pm_tracker.UID()];newtitle=[C.key]'>WINDOW</a>)"
+8 -4
View File
@@ -20,8 +20,10 @@
H.mind.add_mind_objective(/datum/objective/hijack)
to_chat(H, "<B>You are a Highlander. Kill all other Highlanders. There can be only one.</B>")
H.mind.announce_objectives(title = FALSE)
var/list/messages = list()
messages.Add("<b>You are a Highlander. Kill all other Highlanders. There can be only one.</b>")
messages.Add(H.mind.prepare_announce_objectives(FALSE))
to_chat(H, chat_box_red(messages.Join("<br>")))
for(var/obj/item/I in H)
if(istype(I, /obj/item/implant))
@@ -72,8 +74,10 @@
H.mind.add_mind_objective(/datum/objective/hijackclone)
to_chat(H, "<B>You are the multiverse summoner. Activate your blade to summon copies of yourself from another universe to fight by your side.</B>")
H.mind.announce_objectives(title = FALSE)
var/list/messages = list()
messages.Add("<b>You are the multiverse summoner. Activate your blade to summon copies of yourself from another universe to fight by your side.</b>")
messages.Add(H.mind.prepare_announce_objectives(FALSE))
to_chat(H, chat_box_red(messages.Join("<br>")))
var/obj/item/slot_item_ID = H.get_item_by_slot(SLOT_HUD_WEAR_ID)
qdel(slot_item_ID)
@@ -252,13 +252,17 @@ GLOBAL_LIST_EMPTY(antagonists)
add_owner_to_gamemode()
if(give_objectives)
give_objectives()
var/list/messages = list()
if(!silent)
greet()
owner.announce_objectives()
messages.Add(greet())
messages.Add(owner.prepare_announce_objectives())
apply_innate_effects()
finalize_antag()
messages.Add(finalize_antag())
if(wiki_page_name)
to_chat(owner.current, "<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/[wiki_page_name])</span>")
messages.Add("<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/[wiki_page_name])</span>")
to_chat(owner.current, chat_box_red(messages.Join("<br>")))
if(is_banned(owner.current) && replace_banned)
INVOKE_ASYNC(src, PROC_REF(replace_banned_player))
owner.current.create_log(MISC_LOG, "[owner.current] was made into \an [special_role]")
@@ -309,8 +313,10 @@ GLOBAL_LIST_EMPTY(antagonists)
* Called in `on_gain()` if silent it set to FALSE.
*/
/datum/antagonist/proc/greet()
var/list/messages = list()
. = messages
if(owner && owner.current)
to_chat(owner.current, "<span class='userdanger'>You are a [special_role]!</span>")
messages.Add("<span class='userdanger'>You are a [special_role]!</span>")
/**
* Displays a message to the antag mob while the datum is being deleted, i.e. "Your powers are gone and you're no longer a vampire!"
@@ -226,18 +226,19 @@
D.mind.special_role = D.name
SSticker.mode.traitors += D.mind
var/list/messages = list()
var/datum/objective/assassinate/KillDaWiz = new /datum/objective/assassinate
KillDaWiz.target = user.mind
KillDaWiz.explanation_text = "[objective_verb] [user.real_name], the one who was foolish enough to summon you."
messages.Add(KillDaWiz.explanation_text)
D.mind.add_mind_objective(KillDaWiz)
var/datum/objective/KillDaCrew = new /datum/objective
KillDaCrew.explanation_text = "[objective_verb] everyone else while you're at it."
messages.Add(KillDaCrew.explanation_text)
KillDaCrew.completed = TRUE
D.mind.add_mind_objective(KillDaCrew)
D.mind.announce_objectives(title = FALSE)
to_chat(D, chat_box_red(messages.Join("<br>")))
/obj/item/antag_spawner/slaughter_demon/laughter
name = "vial of tickles"
@@ -307,18 +308,21 @@
M.key = C.key
M.make_morph_antag(FALSE)
var/list/messages = list()
var/datum/objective/assassinate/KillDaWiz = new /datum/objective/assassinate
KillDaWiz.owner = M.mind
KillDaWiz.target = user.mind
KillDaWiz.explanation_text = "[objective_verb] [user.real_name], the one who was foolish enough to awake you."
messages.Add(KillDaWiz.explanation_text)
M.mind.add_mind_objective(KillDaWiz)
var/datum/objective/KillDaCrew = new /datum/objective
KillDaCrew.explanation_text = "[objective_verb] everyone and everything else while you're at it."
messages.Add(KillDaCrew.explanation_text)
KillDaCrew.completed = TRUE
M.mind.add_mind_objective(KillDaCrew)
M.mind.announce_objectives(title = FALSE)
to_chat(M, chat_box_red(messages.Join("<br>")))
///////////Revenant
@@ -364,17 +368,20 @@
var/mob/living/simple_animal/revenant/M = new /mob/living/simple_animal/revenant(pick(GLOB.xeno_spawn))
M.key = C.key
var/list/messages = list()
var/datum/objective/assassinate/KillDaWiz = new /datum/objective/assassinate
KillDaWiz.target = user.mind
KillDaWiz.explanation_text = "[objective_verb] [user.real_name], the one who was foolish enough to awake you."
messages.Add(KillDaWiz.explanation_text)
M.mind.add_mind_objective(KillDaWiz)
var/datum/objective/KillDaCrew = new /datum/objective
KillDaCrew.explanation_text = "[objective_verb] everyone and everything else while you're at it."
messages.Add(KillDaCrew.explanation_text)
KillDaCrew.completed = TRUE
M.mind.add_mind_objective(KillDaCrew)
M.mind.announce_objectives(title = FALSE)
to_chat(M, chat_box_red(messages.Join("<br>")))
///////////Pulse Demon
@@ -431,14 +438,17 @@
player_mind.special_role = SPECIAL_ROLE_DEMON
demon.give_objectives()
var/list/messages = list()
var/datum/objective/assassinate/KillDaWiz = new /datum/objective/assassinate
KillDaWiz.target = user.mind
KillDaWiz.explanation_text = "[objective_verb] [user.real_name], the one who was foolish enough to awake you."
messages.Add(KillDaWiz.explanation_text)
demon.mind.add_mind_objective(KillDaWiz)
var/datum/objective/KillDaCrew = new /datum/objective
KillDaCrew.explanation_text = "[objective_verb] everyone and everything else while you're at it."
messages.Add(KillDaCrew.explanation_text)
KillDaCrew.completed = TRUE
demon.mind.add_mind_objective(KillDaCrew)
demon.mind.announce_objectives(title = FALSE)
to_chat(demon, chat_box_red(messages.Join("<br>")))
@@ -204,7 +204,8 @@ GLOBAL_LIST_EMPTY(antagonist_teams)
for(var/datum/mind/member in members)
if(!member.current || !isliving(member.current))
return
member.announce_objectives()
var/list/messages = list(member.prepare_announce_objectives())
to_chat(member.current, chat_box_red(messages.Join("<br>")))
SEND_SOUND(member.current, sound('sound/ambience/alarm4.ogg'))
/**
@@ -84,9 +84,9 @@
return ..()
/datum/antagonist/changeling/greet()
..()
. = ..()
SEND_SOUND(owner.current, sound('sound/ambience/antag/ling_alert.ogg'))
to_chat(owner.current, "<span class='danger'>Remember: you get all of their absorbed DNA if you absorb a fellow changeling.</span>")
return . += "<span class='danger'>Remember: you get all of their absorbed DNA if you absorb a fellow changeling.</span>"
/datum/antagonist/changeling/farewell()
to_chat(owner.current, "<span class='biggerdanger'><B>You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!</span>")
@@ -16,7 +16,7 @@
INVOKE_ASYNC(revolting, TYPE_PROC_REF(/datum/team/revolution, process_promotion), REVOLUTION_PROMOTION_AT_LEAST_ONE)
/datum/antagonist/rev/head/greet()
to_chat(owner.current, "<span class='userdanger'>You are a member of the revolutionaries' leadership! Mutiny against the station's command and take control!</span>")
return "<span class='userdanger'>You are a member of the revolutionaries' leadership! Mutiny against the station's command and take control!</span>"
/datum/antagonist/rev/head/add_owner_to_gamemode()
SSticker.mode.head_revolutionaries |= owner
@@ -19,9 +19,9 @@
SEND_SOUND(owner.current, sound('sound/ambience/antag/revalert.ogg'))
/datum/antagonist/rev/greet()
to_chat(owner.current, "<span class='userdanger'>You are now a revolutionary! Help your cause. \
return "<span class='userdanger'>You are now a revolutionary! Help your cause. \
Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, \
and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!</span>")
and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!</span>"
/datum/antagonist/rev/farewell()
if(owner && owner.current)
@@ -7,8 +7,8 @@
add_antag_objective(/datum/objective/survive)
/datum/antagonist/survivalist/greet()
..()
to_chat(owner.current, "<span class='notice'>[greet_message]</span>")
. = ..()
return . += "<span class='notice'>[greet_message]</span>"
/datum/antagonist/survivalist/guns
greet_message = "Your own safety matters above all else, and the only way to ensure your safety is to stockpile weapons! Grab as many guns as possible, by any means necessary. Kill anyone who gets in your way."
@@ -58,13 +58,12 @@
add_antag_objective(/datum/objective/protect/mindslave, explanation_text, master)
/datum/antagonist/mindslave/greet()
var/mob/living/carbon/human/mindslave = owner.current
// Show them the custom greeting text if it exists.
if(greet_text)
to_chat(mindslave, "<span class='biggerdanger'>[greet_text]</span>")
return "<span class='biggerdanger'>[greet_text]</span>"
else // Default greeting text if nothing is given.
to_chat(mindslave, "<span class='biggerdanger'><B>You are now completely loyal to [master.current.name]!</B> \
You must lay down your life to protect [master.current.p_them()] and assist in [master.current.p_their()] goals at any cost.</span>")
return "<span class='biggerdanger'><b>You are now completely loyal to [master.current.name]!</b> \
You must lay down your life to protect [master.current.p_them()] and assist in [master.current.p_their()] goals at any cost.</span>"
/datum/antagonist/mindslave/farewell()
if(owner && owner.current)
@@ -139,8 +139,9 @@
* Give human traitors their uplink, and AI traitors their law 0. Play the traitor an alert sound.
*/
/datum/antagonist/traitor/finalize_antag()
var/list/messages = list()
if(give_codewords)
give_codewords()
messages.Add(give_codewords())
if(isAI(owner.current))
add_law_zero()
owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/malf.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)
@@ -151,6 +152,8 @@
give_uplink()
owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/tatoralert.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)
return messages
/**
* Notify the traitor of their codewords and write them to `antag_memory` (notes).
*/
@@ -161,18 +164,19 @@
var/phrases = jointext(GLOB.syndicate_code_phrase, ", ")
var/responses = jointext(GLOB.syndicate_code_response, ", ")
to_chat(traitor_mob, "<U><B>The Syndicate have provided you with the following codewords to identify fellow agents:</B></U>")
to_chat(traitor_mob, "<span class='bold body'>Code Phrase: <span class='codephrases'>[phrases]</span></span>")
to_chat(traitor_mob, "<span class='bold body'>Code Response: <span class='coderesponses'>[responses]</span></span>")
var/list/messages = list()
messages.Add("<u><b>The Syndicate have provided you with the following codewords to identify fellow agents:</b></u>")
messages.Add("<span class='bold body'>Code Phrase: <span class='codephrases'>[phrases]</span></span>")
messages.Add("<span class='bold body'>Code Response: <span class='coderesponses'>[responses]</span></span>")
antag_memory += "<b>Code Phrase</b>: <span class='red'>[phrases]</span><br>"
antag_memory += "<b>Code Response</b>: <span class='red'>[responses]</span><br>"
to_chat(traitor_mob, "Use the codewords during regular conversation to identify other agents. Proceed with caution, however, as everyone is a potential foe.")
to_chat(traitor_mob, "<b><font color=red>You memorize the codewords, allowing you to recognize them when heard.</font></b>")
messages.Add("Use the codewords during regular conversation to identify other agents. Proceed with caution, however, as everyone is a potential foe.")
messages.Add("<b><font color=red>You memorize the codewords, allowing you to recognize them when heard.</font></b>")
traitor_mob.client.chatOutput?.notify_syndicate_codes()
return messages
/**
* Gives traitor AIs, and their connected cyborgs, a law 0. Additionally gives the AI their choose modules action button.
@@ -339,12 +339,12 @@
add_antag_objective(/datum/objective/escape)
/datum/antagonist/vampire/greet()
var/dat
var/list/messages = list()
SEND_SOUND(owner.current, sound('sound/ambience/antag/vampalert.ogg'))
dat = "<span class='danger'>You are a Vampire!</span><br>"
dat += {"To bite someone, target the head and use harm intent with an empty hand. Drink blood to gain new powers.
You are weak to holy things, starlight and fire. Don't go into space and avoid the Chaplain, the chapel and especially Holy Water."}
to_chat(owner.current, dat)
messages.Add("<span class='danger'>You are a Vampire!</span><br>")
messages.Add("To bite someone, target the head and use harm intent with an empty hand. Drink blood to gain new powers. \
You are weak to holy things, starlight and fire. Don't go into space and avoid the Chaplain, the chapel and especially Holy Water.")
return messages
/datum/antagonist/vampire/apply_innate_effects(mob/living/mob_override)
mob_override = ..()
@@ -6,8 +6,8 @@
add_antag_objective(/datum/objective/hijack)
/datum/antagonist/wishgranter/greet()
..()
to_chat(owner.current, "<span class='notice'>Your inhibitions are swept away, the bonds of loyalty broken, you are free to murder as you please!</span>")
. = ..()
. += "<span class='notice'>Your inhibitions are swept away, the bonds of loyalty broken, you are free to murder as you please!</span>"
/datum/antagonist/wishgranter/apply_innate_effects(mob/living/mob_override)
var/mob/living/carbon/human/H = ..()
+2 -3
View File
@@ -44,8 +44,7 @@
print_command_report(sentience_report, "NAS Trurl Update", FALSE)
/datum/event/sentience/proc/greet_sentient(mob/living/carbon/human/M)
to_chat(M, "<span class='userdanger'>Hello world!</span>")
to_chat(M, "<span class='warning'>Due to freak radiation, you have gained \
to_chat(M, chat_box_green("<span class='userdanger'>Hello world!</span><br><span class='warning'>Due to freak radiation, you have gained \
human level intelligence and the ability to speak and understand \
human language!</span>")
human language!</span>"))
M.create_log(MISC_LOG, "[M] was made into a sentient animal")
+4 -4
View File
@@ -69,10 +69,10 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol"))
GLOB.unused_trade_stations += station // Return the station to the list of usable stations.
/datum/event/traders/proc/greet_trader(mob/living/carbon/human/M)
to_chat(M, "<span class='boldnotice'>You are a trader!</span>")
to_chat(M, "<span class='notice'>You are currently docked at [get_area(M)].</span>")
to_chat(M, "<span class='notice'>You are about to trade with [station_name()].</span>")
addtimer(CALLBACK(M.mind, TYPE_PROC_REF(/datum/mind, announce_objectives)), 2.5 SECONDS)
var/list/messages = list()
messages.Add("<span class='boldnotice'>You are a trader!</span><span class='notice'>You are currently docked at [get_area(M)].<br>You are about to trade with [station_name()].</span><br>")
messages.Add(M.mind.prepare_announce_objectives())
to_chat(M, chat_box_green(messages.Join("<br>")))
M.create_log(MISC_LOG, "[M] was made into a Sol Trader")
/datum/event/traders/proc/forge_trader_objectives()
+1 -2
View File
@@ -90,7 +90,7 @@
return ..()
if (istype(O, /obj/item/plant_analyzer))
var/msg = "<span class='info'>*---------*\n This is \a <span class='name'>[src].</span>\n"
var/msg = "<span class='info'>This is \a <span class='name'>[src].</span>\n"
if(seed)
msg += seed.get_analyzer_text()
var/reag_txt = ""
@@ -102,7 +102,6 @@
if(reag_txt)
msg += reag_txt
msg += "<br><span class='info'>*---------*</span>"
to_chat(user, msg)
else
if(seed)
+1 -1
View File
@@ -38,7 +38,7 @@
/obj/item/grown/attackby(obj/item/O, mob/user, params)
..()
if (istype(O, /obj/item/plant_analyzer))
var/msg = "<span class='info'>*---------*\n This is \a <span class='name'>[src]</span>\n"
var/msg = "<span class='info'>This is \a <span class='name'>[src]</span>\n"
if(seed)
msg += seed.get_analyzer_text()
msg += "</span>"
+1 -1
View File
@@ -36,7 +36,7 @@ GLOBAL_LIST_INIT(chem_t4_reagents, list(
overlays += I
/obj/item/seeds/sample/get_analyzer_text()
return " The DNA of this sample is damaged beyond recovery, it can't support life on it's own.\n*---------*"
return " The DNA of this sample is damaged beyond recovery, it can't support life on it's own."
/obj/item/seeds/sample/alienweed
name = "alien weed sample"
+1 -3
View File
@@ -306,8 +306,6 @@
all_traits += " [traits.get_name()]"
text += "- Plant Traits:[all_traits]\n"
text += "*---------*"
return text
/obj/item/seeds/proc/on_chem_reaction(datum/reagents/S) // In case seeds have some special interaction with special chems
@@ -315,7 +313,7 @@
/obj/item/seeds/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/plant_analyzer))
to_chat(user, "<span class='info'>*---------*\n This is \a <span class='name'>[src].</span></span>")
to_chat(user, "<span class='info'>This is \a <span class='name'>[src].</span></span>")
var/text = get_analyzer_text()
if(text)
to_chat(user, "<span class='notice'>[text]</span>")
@@ -167,7 +167,6 @@
/obj/item/mmi/robotic_brain/examine(mob/user)
. += "Its speaker is turned [silenced ? "off" : "on"]."
. += "<span class='info'>*---------*</span>"
. = ..()
var/list/msg = list("<span class='info'>")
@@ -183,7 +182,7 @@
msg += "<span class='deadsay'>It appears to be completely inactive.</span>\n"
else
msg += "<span class='deadsay'>It appears to be completely inactive.</span>\n"
msg += "*---------*</span>"
msg += "</span>"
. += msg.Join("")
/obj/item/mmi/robotic_brain/emp_act(severity)
+2 -2
View File
@@ -114,7 +114,7 @@
skipface |= wear_mask.flags_inv & HIDEFACE
skipeyes |= wear_mask.flags_inv & HIDEEYES
var/msg = "<span class='info'>*---------*\nThis is "
var/msg = "<span class='info'>This is "
msg += "<em>[name]</em>"
@@ -275,7 +275,7 @@
if(!(H.status & ORGAN_DISFIGURED))
msg += "[print_flavor_text()]\n"
msg += "*---------*</span>"
msg += "</span>"
if(pose)
if( findtext(pose,".",length(pose)) == 0 && findtext(pose,"!",length(pose)) == 0 && findtext(pose,"?",length(pose)) == 0 )
pose = addtext(pose,".") //Makes sure all emotes end with a period.
@@ -20,7 +20,7 @@
if(!shunted && !client)
msg += "[src]Core.exe has stopped responding! NTOS is searching for a solution to the problem...\n"
msg += "</span>"
msg += "*---------*</span>"
msg += "</span>"
. += msg
user.showLaws(src)
+1 -1
View File
@@ -448,7 +448,7 @@
if( findtext(pose,".",length(pose)) == 0 && findtext(pose,"!",length(pose)) == 0 && findtext(pose,"?",length(pose)) == 0 )
pose = addtext(pose,".") //Makes sure all emotes end with a period.
msg += "\nIt is [pose]"
msg += "\n*---------*</span>"
msg += "\n</span>"
. += msg
@@ -45,7 +45,7 @@
msg += "<span class='deadsay'>It looks like its internal subsystems are beyond repair and require replacing.</span>\n"
else
msg += "<span class='warning'>It looks like its system is corrupted beyond repair. There is no hope of recovery.</span>\n"
msg += "*---------*</span>"
msg += "</span>"
if(print_flavor_text())
msg += "\n[print_flavor_text()]\n"
@@ -92,7 +92,7 @@
else
msg += "<B>It looks severely dented!</B>\n"
msg += "</span>"
msg += "*---------*</span>"
msg += "</span>"
. += msg
@@ -383,7 +383,7 @@
/mob/living/simple_animal/slime/examine(mob/user)
. = ..()
. += "<span class='info'>*---------*\nThis is [bicon(src)] \a <EM>[src]</EM>!"
. += "<span class='info'>This is [bicon(src)] \a <EM>[src]</EM>!"
if(stat == DEAD)
. += "<span class='deadsay'>It is limp and unresponsive.</span>"
else
@@ -410,7 +410,7 @@
if(10)
. += "<span class='warning'><B>It is radiating with massive levels of electrical activity!</B></span>"
. += "*---------*</span>"
. += "</span>"
/mob/living/simple_animal/slime/proc/discipline_slime(mob/user)
if(stat)
+2 -2
View File
@@ -635,12 +635,12 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
/mob/proc/run_examinate(atom/A)
if(!has_vision(information_only = TRUE) && !isobserver(src))
to_chat(src, "<span class='notice'>Something is there but you can't see it.</span>")
to_chat(src, chat_box_regular("<span class='notice'>Something is there but you can't see it.</span>"))
return 1
face_atom(A)
var/list/result = A.examine(src)
to_chat(src, result.Join("\n"))
to_chat(src, chat_box_examine(result.Join("\n")))
/mob/proc/ret_grab(obj/effect/list_container/mobl/L as obj, flag)
if((!( istype(l_hand, /obj/item/grab) ) && !( istype(r_hand, /obj/item/grab) )))
@@ -81,7 +81,7 @@
/datum/reagent/consumable/drink/berry_banned2/on_mob_death(mob/living/M)
SEND_SOUND(M, sound('sound/effects/adminhelp.ogg', 0, 1, 0, 25))
to_chat(M, "<span class='adminhelp'>PM from-<b>Administrator</b>: BWOINK!</span>")
to_chat(M, chat_box_red("<span class='adminhelp'>PM from-<b>Administrator</b>: BWOINK!</span>"))
..()
//Blackeye Brew: Chance to make the drinker say greytider-themed things like "I thought clown was valid!"
+37 -2
View File
@@ -205,8 +205,6 @@ font-size: 14px;
/* ADMIN FILTER MESSAGES MENU */
.filterMessages {padding: 5px;}
.filterMessages div {padding: 2px 0;}
.filterMessages input {}
.filterMessages label {}
.icon-stack {height: 1em; line-height: 1em; width: 1em; vertical-align: middle; margin-top: -2px;}
@@ -243,6 +241,13 @@ font-size: 14px;
border-radius: 10px;
}
.repeatBadge.boxed_repeat {
position: relative;
float: right;
top: -40px;
right: 0;
}
/* OUTPUT COLORS */
.highlight {background-color: #ffff0026;}
h1, h2, h3, h4, h5, h6 {color: #06f;font-family: Georgia, Verdana, sans-serif;}
@@ -439,3 +444,33 @@ span.body .coderesponses {color: #FF3333;}
.announcement.sec h1 { color: #f00; font-size: 180%; font-family: Verdana, sans-serif; }
.bolditalics {font-style: italic; font-weight: bold;}
.boxed_message {
text-align: center;
border-style: solid;
border-width: medium;
border-color: #a4bad6;
border-radius: 5px;
margin: 25px;
padding: 15px;
}
.boxed_message.left_align_text {
text-align: left
}
.boxed_message.red_border {
border-color: #aa0000;
}
.boxed_message.green_border {
border-color: #00FF00;
}
.boxed_message.notice_border {
border-color: #6685f5;
}
.boxed_message.thick_border {
border-width: thick;
}
+37 -3
View File
@@ -200,8 +200,6 @@ a.popt {text-decoration: none;}
/* ADMIN FILTER MESSAGES MENU */
.filterMessages {padding: 5px;}
.filterMessages div {padding: 2px 0;}
.filterMessages input {}
.filterMessages label {}
.icon-stack {height: 1em; line-height: 1em; width: 1em; vertical-align: middle; margin-top: -2px;}
@@ -238,6 +236,13 @@ a.popt {text-decoration: none;}
border-radius: 10px;
}
.repeatBadge.boxed_repeat {
position: relative;
float: right;
top: -40px;
right: 0;
}
/* OUTPUT COLORS */
.highlight {background: yellow;}
h1, h2, h3, h4, h5, h6 {color: #0000ff;font-family: Georgia, Verdana, sans-serif;}
@@ -262,7 +267,6 @@ em {font-style: normal; font-weight: bold;}
.pmsend {color: #0000ff;}
.debug {color: #6d2f83;}
.name { font-weight: bold;}
.say {}
.yell { font-weight: bold;}
.siliconsay {font-family: 'Courier New', Courier, monospace;}
.deadsay {color: #5c00e6;}
@@ -437,3 +441,33 @@ span.body .coderesponses {color: #FF0000;}
.announcement.sec h1 { color: #f00; font-size: 180%; font-family: Verdana, sans-serif; }
.bolditalics {font-style: italic; font-weight: bold;}
.boxed_message {
text-align: center;
border-style: solid;
border-width: medium;
border-color: black;
border-radius: 5px;
margin: 25px;
padding: 15px;
}
.boxed_message.left_align_text {
text-align: left
}
.boxed_message.red_border {
border-color: #aa0000;
}
.boxed_message.green_border {
border-color: #00FF00;
}
.boxed_message.notice_border {
border-color: #000099;
}
.boxed_message.thick_border {
border-width: thick;
}
+15 -3
View File
@@ -279,13 +279,13 @@ function output(message, flag) {
message = byondDecode(message).trim();
var messageHtml = $.parseHTML(message);
//The behemoth of filter-code (for Admin message filters)
//Note: This is proooobably hella inefficient
var filteredOut = false;
if (opts.hasOwnProperty('showMessagesFilters') && !opts.showMessagesFilters['All'].show) {
//Get this filter type (defined by class on message)
var messageHtml = $.parseHTML(message),
messageClasses;
var messageClasses;
if (opts.hasOwnProperty('filterHideAll') && opts.filterHideAll) {
var internal = false;
messageClasses = (!!$(messageHtml).attr('class') ? $(messageHtml).attr('class').split(/\s+/) : false);
@@ -387,7 +387,19 @@ function output(message, flag) {
if (opts.hideSpam && entry.innerHTML === opts.previousMessage) {
opts.previousMessageCount++;
var lastIndex = $messages[0].children.length - 1;
var countBadge = '<span class="repeatBadge">x' + opts.previousMessageCount + '</span>';
var message_is_in_box;
var messageClasses = (!!$(messageHtml).attr('class') ? $(messageHtml).attr('class').split(/\s+/) : false);
if (messageClasses) {
for (var i = 0; i < messageClasses.length; i++) { //Every class
if (messageClasses[i] == 'boxed_message') {
message_is_in_box = true;
break;
}
}
}
var countBadgeClass = message_is_in_box ? "repeatBadge boxed_repeat" : "repeatBadge"
var countBadge = '<span class="'+countBadgeClass+'">x' + opts.previousMessageCount + '</span>';
var lastEntry = $messages[0].children[lastIndex];
lastEntry.innerHTML = opts.previousMessage + countBadge;
var insertedBadge = $(lastEntry).find('.repeatBadge');
+1
View File
@@ -36,6 +36,7 @@
#include "code\__DEFINES\bitfields_defines.dm"
#include "code\__DEFINES\bots.dm"
#include "code\__DEFINES\callbacks.dm"
#include "code\__DEFINES\chat_box_defines.dm"
#include "code\__DEFINES\clothing_defines.dm"
#include "code\__DEFINES\color_defines.dm"
#include "code\__DEFINES\combat_defines.dm"