Ports Goonchat from Baystation. (#9635)

changes:

    rscadd: "Ported a new chat system, Goonchat, that allows for cool things like changing font style, size, spacing, highlighting up to 5 strings in the chat, and DARK MODE."
    rscadd: "Repeated chat messages can now get compacted. You can disable this in goonchat settings."
    rscadd: "You can change icon style to any font on your system."
    tweak: "The game window has been altered a bit to adjust for this."
    rscdel: "Removed skin style prefs as they are no longer used."
This commit is contained in:
Matt Atlas
2020-09-24 22:06:04 +02:00
committed by GitHub
parent a7401aeb1d
commit d4666caaac
277 changed files with 4057 additions and 2955 deletions

1
.github/CODEOWNERS vendored
View File

@@ -9,7 +9,6 @@
/code/controllers/subsystems/cargo.dm @Arrow768
/code/datums/api.dm @Arrow768
/code/datums/cargo.dm @Arrow768
/code/datums/server_greeting.dm @Skull132
/code/datums/discord/ @Skull132
/code/defines/procs/dbcore.dm @Skull132
/code/modules/http/ @Arrow768 @Skull132

View File

@@ -8,7 +8,7 @@ env:
BYOND_MINOR="1517"
MACRO_COUNT=0
GENDER_COUNT=6
TO_WORLD_COUNT=223
TO_WORLD_COUNT=207
FLYWAY_BUILD="5.2.4"
NODE_VERSION=10
RUST_G_VERSION="0.4.2a"

View File

@@ -178,6 +178,7 @@
#include "code\controllers\subsystems\assets.dm"
#include "code\controllers\subsystems\battle_monsters.dm"
#include "code\controllers\subsystems\cargo.dm"
#include "code\controllers\subsystems\chat.dm"
#include "code\controllers\subsystems\chemistry.dm"
#include "code\controllers\subsystems\cult.dm"
#include "code\controllers\subsystems\documents.dm"
@@ -210,6 +211,7 @@
#include "code\controllers\subsystems\overlays.dm"
#include "code\controllers\subsystems\pai.dm"
#include "code\controllers\subsystems\parallax.dm"
#include "code\controllers\subsystems\ping.dm"
#include "code\controllers\subsystems\plants.dm"
#include "code\controllers\subsystems\power.dm"
#include "code\controllers\subsystems\profiler.dm"
@@ -267,7 +269,6 @@
#include "code\datums\position_point_vector.dm"
#include "code\datums\progressbar.dm"
#include "code\datums\records.dm"
#include "code\datums\server_greeting.dm"
#include "code\datums\statistic.dm"
#include "code\datums\weakref.dm"
#include "code\datums\brain_damage\brain_trauma.dm"
@@ -1106,7 +1107,6 @@
#include "code\modules\admin\admin_investigate.dm"
#include "code\modules\admin\admin_ranks.dm"
#include "code\modules\admin\admin_secrets.dm"
#include "code\modules\admin\admin_server_greeting.dm"
#include "code\modules\admin\admin_verbs.dm"
#include "code\modules\admin\banjob.dm"
#include "code\modules\admin\create_mob.dm"
@@ -1300,6 +1300,7 @@
#include "code\modules\client\client defines.dm"
#include "code\modules\client\client procs.dm"
#include "code\modules\client\client_color.dm"
#include "code\modules\client\darkmode.dm"
#include "code\modules\client\movement.dm"
#include "code\modules\client\preferences.dm"
#include "code\modules\client\preferences_ambience.dm"
@@ -1477,6 +1478,7 @@
#include "code\modules\cooking\machinery\cooking_machines\cereal.dm"
#include "code\modules\cooking\machinery\cooking_machines\container.dm"
#include "code\modules\cooking\machinery\cooking_machines\fryer.dm"
#include "code\modules\cooking\machinery\cooking_machines\grill.dm"
#include "code\modules\cooking\machinery\cooking_machines\oven.dm"
#include "code\modules\cooking\machinery\cooking_machines\stove.dm"
#include "code\modules\cooking\recipes\recipe.dm"
@@ -1617,6 +1619,8 @@
#include "code\modules\ghosttrap\trap.dm"
#include "code\modules\global_listener\devices.dm"
#include "code\modules\global_listener\interfaces.dm"
#include "code\modules\goonchat\_helpers.dm"
#include "code\modules\goonchat\browserOutput.dm"
#include "code\modules\hallucinations\hallucinations.dm"
#include "code\modules\hallucinations\mob.dm"
#include "code\modules\hallucinations\types\basic.dm"

View File

@@ -240,7 +240,7 @@
return
..()
log_and_message_admins("has [open ? "<font color='red'>OPENED</font>" : "closed"] [name].", user)
log_and_message_admins("has [open ? "<span class='warning'>OPENED</span>" : "closed"] [name].", user)
/obj/machinery/atmospherics/valve/digital/AltClick(var/mob/abstract/observer/admin)
if (istype(admin))

View File

@@ -79,14 +79,19 @@
#define isprojectile(A) istype(A, /obj/item/projectile)
#define to_chat(target, message) target << message
#define to_world(message) world << message
#define sound_to(target, sound) target << sound
/// General I/O helpers
#define to_target(target, payload) target << (payload)
#define from_target(target, receiver) target >> (receiver)
#define to_file(file_entry, file_content) file_entry << file_content
#define show_browser(target, browser_content, browser_name) target << browse(browser_content, browser_name)
#define send_rsc(target, rsc_content, rsc_name) target << browse_rsc(rsc_content, rsc_name)
#define send_output(target, msg, control) target << output(msg, control)
#define send_link(target, url) target << link(url)
#define legacy_chat(target, message) to_target(target, message)
#define to_world(message) to_chat(world, message)
#define sound_to(target, sound) to_target(target, sound)
#define to_save(handle, value) to_target(handle, value) //semantics postport: what did they mean by this
#define show_browser(target, browser_content, browser_name) to_target(target, browse(browser_content, browser_name))
#define send_rsc(target, content, title) to_target(target, browse_rsc(content, title))
#define send_output(target, msg, control) to_target(target, output(msg, control))
#define send_link(target, url) to_target(target, link(url))
#define CanInteract(user, state) (CanUseTopic(user, state) == STATUS_INTERACTIVE)

View File

@@ -119,3 +119,7 @@
#define COLOR_ASSEMBLY_BLUE "#38559E"
#define COLOR_ASSEMBLY_PURPLE "#6F6192"
#define COLOR_ASSEMBLY_HOT_PINK "#FF69B4"
#define COLOR_DARKMODE_BACKGROUND "#202020"
#define COLOR_DARKMODE_DARKBACKGROUND "#171717"
#define COLOR_DARKMODE_TEXT "#a4bad6"

View File

@@ -442,6 +442,10 @@ Define for getting a bitfield of adjacent turfs that meet a condition.
#define CONTAINER_EMPTY 0
#define CONTAINER_SINGLE 1
#define CONTAINER_MANY 2
//Misc text define. Does 4 spaces. Used as a makeshift tabulator.
#define FOURSPACES "&nbsp;&nbsp;&nbsp;&nbsp;"
#define CLIENT_FROM_VAR(I) (ismob(I) ? I:client : (isclient(I) ? I : (istype(I, /datum/mind) ? I:current?:client : null)))
// check_items/check_reagents/check_fruits return values
#define COOK_CHECK_FAIL -1
#define COOK_CHECK_EXTRA 0

View File

@@ -22,7 +22,8 @@
#define SS_INIT_SUNLIGHT 2 // Sunlight setup. Creates lots of lighting & SSzcopy updates.
#define SS_INIT_LIGHTING 1 // Generation of lighting overlays and pre-bake. May cause openturf updates, should initialize before SSzcopy.
#define SS_INIT_ZCOPY 0 // Z-mimic flush. Should run after SSoverlay & SSicon_smooth so it copies the smoothed sprites.
#define SS_INIT_LOBBY -1 // Lobby timer starts here. The lobby timer won't actually start going down until the MC starts ticking, so you probably want this last.
#define SS_INIT_LOBBY -1 // Lobby timer starts here. The lobby timer won't actually start going down until the MC starts ticking, so you probably want this last
#define SS_INIT_CHAT -2 // To ensure chat remains smooth during init.
// Something to remember when setting priorities: SS_TICKER runs before Normal, which runs before SS_BACKGROUND.
// Each group has its own priority bracket.
@@ -47,6 +48,7 @@
#define SS_PRIORITY_LIGHTING 50 // Queued lighting engine updates.
#define SS_PRIORITY_MOB 30 // Mob Life().
#define SS_PRIORITY_AIR 30 // ZAS processing.
#define SS_PRIORITY_CHAT 30 // Chat
#define SS_PRIORITY_NANOUI 20 // UI updates.
#define SS_PRIORITY_VOTE 20
#define SS_PRIORITY_ELECTRONICS 20 // Integrated Electronics processing.
@@ -60,6 +62,7 @@
#define SS_PRIORITY_CHEMISTRY 10 // Multi-tick chemical reactions.
#define SS_PRIORITY_SHUTTLE 10 // Shuttle movement.
#define SS_PRIORITY_AIRFLOW 10 // Handles object movement due to ZAS airflow.
#define SS_PRIORITY_PING 10
#define SS_PRIORITY_ZCOPY 10 // Z-mimic icon generation/updates.
// SS_BACKGROUND

View File

@@ -27,7 +27,7 @@
//Sends resource files to client cache
/client/proc/getFiles()
for(var/file in args)
to_chat(src, browse_rsc(file))
send_rsc(src, file, null)
/client/proc/browse_files(root="data/logs/", max_iterations=10, list/valid_extensions=list(".txt",".log",".htm"))
var/path = root
@@ -51,7 +51,7 @@
var/extension = copytext(path,-4,0)
if( !fexists(path) || !(extension in valid_extensions) )
to_chat(src, "<font color='red'>Error: browse_files(): File not found/Invalid file([path]).</font>")
to_chat(src, "<span class='warning'>Error: browse_files(): File not found/Invalid file([path]).</span>")
return
return path
@@ -65,7 +65,7 @@
/client/proc/file_spam_check()
var/time_to_wait = fileaccess_timer - world.time
if(time_to_wait > 0)
to_chat(src, "<font color='red'>Error: file_spam_check(): Spam. Please wait [round(time_to_wait/10)] seconds.</font>")
to_chat(src, "<span class='warning'>Error: file_spam_check(): Spam. Please wait [round(time_to_wait/10)] seconds.</span>")
return 1
fileaccess_timer = world.time + FTPDELAY
return 0

View File

@@ -167,7 +167,7 @@ mob
Output_Icon()
set name = "2. Output Icon"
src<<"Icon is: \icon[getFlatIcon(src)]"
src<<"Icon is: [icon2html(getFlatIcon(src), usr)]"
Label_Icon()
set name = "3. Label Icon"

View File

@@ -153,11 +153,11 @@ Proc for attack log creation, because really why not
/proc/add_logs(mob/user, mob/target, what_done, var/admin=1, var/object=null, var/addition=null)
if(user && ismob(user))
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Has [what_done] [target ? "[target.name][(ismob(target) && target.ckey) ? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition]</font>")
user.attack_log += text("\[[time_stamp()]\] <span class='warning'>Has [what_done] [target ? "[target.name][(ismob(target) && target.ckey) ? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition]</span>")
if(target && ismob(target))
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been [what_done] by [user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition]</font>")
if(admin)
log_attack("<font color='red'>[user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] [what_done] [target ? "[target.name][(ismob(target) && target.ckey)? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition]</font>",ckey=key_name(user),ckey_target=key_name(target))
log_attack("<span class='warning'>[user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] [what_done] [target ? "[target.name][(ismob(target) && target.ckey)? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition]</span>",ckey=key_name(user),ckey_target=key_name(target))
//checks whether this item is a module of the robot it is located in.
/proc/is_robot_module(var/obj/item/thing)

View File

@@ -376,10 +376,25 @@
//For generating neat chat tag-images
//The icon var could be local in the proc, but it's a waste of resources
// to always create it and then throw it out.
/proc/create_text_tag(var/tagname, var/tagdesc = tagname, var/client/C = null)
/proc/create_text_tag(var/tagname, var/client/C = null)
if(C && (C.prefs.toggles & CHAT_NOICONS))
return tagdesc
return "<IMG src='\ref['./icons/chattags.dmi']' class='text_tag' iconstate='[tagname]'" + (tagdesc ? " alt='[tagdesc]'" : "") + ">"
return tagname
var/list/tagname_to_class = list(
"OOC" = "ooc",
"LOOC" = "looc",
"DEV" = "dev",
"ADMIN" = "admin",
"MOD" = "mod",
"DEAD" = "dead",
"PM ->" = "pmin",
"PM <-" = "pmout",
"PM <->" = "pmother",
"HELP" = "help",
"A-OOC" = "aooc"
)
return "<span class=\"tag [tagname_to_class[tagname]]_tag\">[tagname]</span>"
// For processing simple markup, similar to what Skype and Discord use.
// Enabled from a config setting.

View File

@@ -85,7 +85,7 @@ avoid code duplication. This includes items that may sometimes act as a standard
M.lastattacker = user
if(!no_attack_log)
user.attack_log += "\[[time_stamp()]\]<font color='red'> Attacked [M.name] ([M.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])</font>"
user.attack_log += "\[[time_stamp()]\]<span class='warning'> Attacked [M.name] ([M.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])</span>"
M.attack_log += "\[[time_stamp()]\]<font color='orange'> Attacked by [user.name] ([user.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])</font>"
msg_admin_attack("[key_name(user, highlight_special = 1)] attacked [key_name(M, highlight_special = 1)] with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)",ckey=key_name(user),ckey_target=key_name(M) )
/////////////////////////

View File

@@ -4,7 +4,7 @@
* Pretty much pokes the MC to make sure it's still alive.
**/
#define FAILSAFE_MSG(msg) admin_notice("<big><em><font color='red'>FAILSAFE: </font><font color='black'>[msg]</font></em></big>", R_DEBUG|R_ADMIN|R_DEV)
#define FAILSAFE_MSG(msg) admin_notice("<big><em><span class='warning'>FAILSAFE: </span><font color='black'>[msg]</font></em></big>", R_DEBUG|R_ADMIN|R_DEV)
var/datum/controller/failsafe/Failsafe

View File

@@ -0,0 +1,83 @@
var/datum/controller/subsystem/chat/SSchat
/datum/controller/subsystem/chat
name = "Chat"
wait = 1
flags = SS_FIRE_IN_LOBBY
priority = SS_PRIORITY_CHAT
init_order = SS_INIT_CHAT
var/list/payload = list()
/datum/controller/subsystem/chat/Initialize()
NEW_SS_GLOBAL(SSchat)
/datum/controller/subsystem/chat/fire()
for(var/i in payload)
var/client/C = i
to_target(C, output(payload[C], "browseroutput:output"))
payload -= C
if(MC_TICK_CHECK)
return
/datum/controller/subsystem/chat/proc/queue(target, message, handle_whitespace = TRUE, trailing_newline = TRUE)
if(!target || !message)
return
if(!istext(message))
CRASH("to_chat called with invalid input type")
if(target == world)
target = clients
//Some macros remain in the string even after parsing and fuck up the eventual output
var/original_message = message
message = replacetext(message, "\improper", "")
message = replacetext(message, "\proper", "")
if(handle_whitespace)
message = replacetext(message, "\n", "<br>")
message = replacetext(message, "\t", "[FOURSPACES][FOURSPACES]")
if (trailing_newline)
message += "<br>"
//url_encode it TWICE, this way any UTF-8 characters are able to be decoded by the Javascript.
//Do the double-encoding here to save nanoseconds
var/twiceEncoded = url_encode(url_encode(message))
if(islist(target))
for(var/I in target)
var/client/C = CLIENT_FROM_VAR(I) //Grab us a client if possible
if(!C)
return
//Send it to the old style output window.
legacy_chat(C, original_message)
if(!C?.chatOutput || C.chatOutput.broken) //A player who hasn't updated his skin file.
continue
if(!C.chatOutput.loaded) //Client still loading, put their messages in a queue
C.chatOutput.messageQueue += message
continue
payload[C] += twiceEncoded
else
var/client/C = CLIENT_FROM_VAR(target) //Grab us a client if possible
if(!C)
return
//Send it to the old style output window.
legacy_chat(C, original_message)
if(!C?.chatOutput || C.chatOutput.broken) //A player who hasn't updated his skin file.
return
if(!C.chatOutput.loaded) //Client still loading, put their messages in a queue
C.chatOutput.messageQueue += message
return
payload[C] += twiceEncoded

View File

@@ -189,7 +189,6 @@
SearchVar(debugobj)
SearchVar(mods)
SearchVar(gravity_is_on)
SearchVar(server_greeting)
SearchVar(awaydestinations)
SearchVar(fileaccess_timer)
SearchVar(custom_event_msg)

View File

@@ -0,0 +1,32 @@
/datum/controller/subsystem/ping
name = "Ping"
priority = SS_PRIORITY_PING
wait = 3 SECONDS
flags = SS_NO_INIT | SS_FIRE_IN_LOBBY
var/list/currentrun = list()
/datum/controller/subsystem/ping/stat_entry()
..("P:[clients.len]")
/datum/controller/subsystem/ping/fire(resumed = 0)
if (!resumed)
src.currentrun = clients.Copy()
//cache for sanic speed (lists are references anyways)
var/list/currentrun = src.currentrun
while (currentrun.len)
var/client/C = currentrun[currentrun.len]
currentrun.len--
if (!C || !C.chatOutput || !C.chatOutput.loaded)
if (MC_TICK_CHECK)
return
continue
// softPang isn't handled anywhere but it'll always reset the opts.lastPang.
C.chatOutput.ehjax_send(data = C.is_afk(29) ? "softPang" : "pang")
if (MC_TICK_CHECK)
return

View File

@@ -28,47 +28,8 @@ var/datum/controller/subsystem/theming/SStheming
)
)
var/skin_files = list("Light" = "interface/skin.txt", "Dark" = "interface/dark.txt")
var/skin_themes
/datum/controller/subsystem/theming/New()
NEW_SS_GLOBAL(SStheming)
skin_themes = list()
/datum/controller/subsystem/theming/Initialize(start_timeofday)
for(var/name in skin_files)
skin_themes[name] = list()
var/loaded = file2list(skin_files[name])
for(var/op in loaded)
var/split = text2list(op, " ")
if(!islist(skin_themes[name][split[1]]))
skin_themes[name][split[1]] = list()
skin_themes[name][split[1]] += split[2]
for(var/mob/M in mob_list)
if(M.client)
apply_theme_from_perfs(M.client)
..()
/datum/controller/subsystem/theming/proc/apply_theme_from_perfs(var/user)
var/client/c
if(ismob(user))
var/mob/M = user
c = M.client
if(isclient(user))
c = user
if(!isclient(c))
return
apply_theme(user, c.prefs.skin_theme)
/datum/controller/subsystem/theming/proc/apply_theme(var/user, var/theme = "Dark")
if(!isclient(user) && !ismob(user))
return
var/skin = skin_themes[theme]
if(!skin)
return
for(var/param in skin)
winset(user, param, jointext(skin[param], ";"))
/datum/controller/subsystem/theming/proc/get_html_theme(var/mob/user)
var/client/cl = null

View File

@@ -244,22 +244,22 @@ var/datum/controller/subsystem/ticker/SSticker
var/turf/playerTurf = get_turf(Player)
if(emergency_shuttle.departed && emergency_shuttle.evac)
if(isNotAdminLevel(playerTurf.z))
to_chat(Player, "<font color='blue'><b>You managed to survive, but were marooned on [station_name()] as [Player.real_name]...</b></font>")
to_chat(Player, "<span class='notice'><b>You managed to survive, but were marooned on [station_name()] as [Player.real_name]...</b></span>")
else
to_chat(Player, "<font color='green'><b>You managed to survive the events on [station_name()] as [Player.real_name].</b></font>")
to_chat(Player, "<span class='good'><b>You managed to survive the events on [station_name()] as [Player.real_name].</b></span>")
else if(isAdminLevel(playerTurf.z))
to_chat(Player, "<font color='green'><b>You successfully underwent crew transfer after events on [station_name()] as [Player.real_name].</b></font>")
to_chat(Player, "<span class='good'><b>You successfully underwent crew transfer after events on [station_name()] as [Player.real_name].</b></span>")
else if(issilicon(Player))
to_chat(Player, "<font color='green'><b>You remain operational after the events on [station_name()] as [Player.real_name].</b></font>")
to_chat(Player, "<span class='good'><b>You remain operational after the events on [station_name()] as [Player.real_name].</b></span>")
else
to_chat(Player, "<font color='blue'><b>You missed the crew transfer after the events on [station_name()] as [Player.real_name].</b></font>")
to_chat(Player, "<span class='notice'><b>You missed the crew transfer after the events on [station_name()] as [Player.real_name].</b></span>")
else
if(istype(Player,/mob/abstract/observer))
var/mob/abstract/observer/O = Player
if(!O.started_as_observer)
to_chat(Player, "<font color='red'><b>You did not survive the events on [station_name()]...</b></font>")
to_chat(Player, "<span class='warning'><b>You did not survive the events on [station_name()]...</b></span>")
else
to_chat(Player, "<font color='red'><b>You did not survive the events on [station_name()]...</b></font>")
to_chat(Player, "<span class='warning'><b>You did not survive the events on [station_name()]...</b></span>")
to_world("<br>")
for (var/mob/living/silicon/ai/aiPlayer in mob_list)
@@ -331,8 +331,8 @@ var/datum/controller/subsystem/ticker/SSticker
m = pick(randomtips)
if(m)
to_world("<font color='purple'><b>Tip of the round: \
</b>[html_encode(m)]</font>")
to_world("<span class='vote'><b>Tip of the round: \
</b>[html_encode(m)]</span>")
/datum/controller/subsystem/ticker/proc/print_testmerges()
var/data = revdata.testmerge_overview()
@@ -360,7 +360,7 @@ var/datum/controller/subsystem/ticker/SSticker
pregame_timeleft = dynamic_time
log_debug("SSticker: dynamic set pregame time [dynamic_time]s was greater than configured autogamemode time, not clamping.")
to_world("<B><FONT color='blue'>Welcome to the pre-game lobby!</FONT></B>")
to_world("<B><span class='notice'>Welcome to the pre-game lobby!</span></B>")
to_world("Please, setup your character and select ready. Game will start in [pregame_timeleft] seconds.")
/datum/controller/subsystem/ticker/proc/setup()
@@ -472,8 +472,8 @@ var/datum/controller/subsystem/ticker/SSticker
//Deleting Startpoints but we need the ai point to AI-ize people later
if (S.name != "AI")
qdel(S)
to_world("<FONT color='blue'><B>Enjoy the game!</B></FONT>")
to_world(sound('sound/AI/welcome.ogg'))
to_world("<span class='notice'><B>Enjoy the game!</B></span>")
sound_to(world, sound('sound/AI/welcome.ogg'))
//Holiday Round-start stuff ~Carn
Holiday_Game_Start()
@@ -544,18 +544,18 @@ var/datum/controller/subsystem/ticker/SSticker
if("mercenary") //Nuke wasn't on station when it blew up
flick("intro_nuke",cinematic)
sleep(35)
to_world(sound('sound/effects/explosionfar.ogg'))
sound_to(world, sound('sound/effects/explosionfar.ogg'))
flick("station_intact_fade_red",cinematic)
cinematic.icon_state = "summary_nukefail"
else
flick("intro_nuke",cinematic)
sleep(35)
to_world(sound('sound/effects/explosionfar.ogg'))
sound_to(world, sound('sound/effects/explosionfar.ogg'))
//flick("end",cinematic)
if(2) //nuke was nowhere nearby //TODO: a really distant explosion animation
sleep(50)
to_world(sound('sound/effects/explosionfar.ogg'))
sound_to(world, sound('sound/effects/explosionfar.ogg'))
else //station was destroyed
if( mode && !override )
@@ -565,25 +565,25 @@ var/datum/controller/subsystem/ticker/SSticker
flick("intro_nuke",cinematic)
sleep(35)
flick("station_explode_fade_red",cinematic)
to_world(sound('sound/effects/explosionfar.ogg'))
sound_to(world, sound('sound/effects/explosionfar.ogg'))
cinematic.icon_state = "summary_nukewin"
if("AI malfunction") //Malf (screen,explosion,summary)
flick("intro_malf",cinematic)
sleep(76)
flick("station_explode_fade_red",cinematic)
to_world(sound('sound/effects/explosionfar.ogg'))
sound_to(world, sound('sound/effects/explosionfar.ogg'))
cinematic.icon_state = "summary_malf"
if("blob") //Station nuked (nuke,explosion,summary)
flick("intro_nuke",cinematic)
sleep(35)
flick("station_explode_fade_red",cinematic)
to_world(sound('sound/effects/explosionfar.ogg'))
sound_to(world, sound('sound/effects/explosionfar.ogg'))
cinematic.icon_state = "summary_selfdes"
else //Station nuked (nuke,explosion,summary)
flick("intro_nuke",cinematic)
sleep(35)
flick("station_explode_fade_red", cinematic)
to_world(sound('sound/effects/explosionfar.ogg'))
sound_to(world, sound('sound/effects/explosionfar.ogg'))
cinematic.icon_state = "summary_selfdes"
//If its actually the end of the round, wait for it to end.

View File

@@ -98,13 +98,13 @@ var/datum/controller/subsystem/vote/SSvote
else
factor = 1.4
choices["Initiate Crew Transfer"]["votes"] = round(choices["Initiate Crew Transfer"]["votes"] * factor)
to_world("<font color='purple'>Crew Transfer Factor: [factor]</font>")
to_world("<span class='vote'>Crew Transfer Factor: [factor]</span>")
greatest_votes = max(choices["Initiate Crew Transfer"]["votes"], choices["Continue The Round"]["votes"])
if(mode == "crew_transfer")
if(round(get_round_duration() / 36000)+12 <= 14)
// Credit to Scopes @ oldcode.
to_world("<font color='purple'><b>Majority voting rule in effect. 2/3rds majority needed to initiate transfer.</b></font>")
to_world("<span class='vote'><b>Majority voting rule in effect. 2/3rds majority needed to initiate transfer.</b></span>")
choices["Initiate Crew Transfer"]["votes"] = round(choices["Initiate Crew Transfer"]["votes"] - round(total_votes / 3))
greatest_votes = max(choices["Initiate Crew Transfer"]["votes"], choices["Continue The Round"]["votes"])
@@ -143,7 +143,7 @@ var/datum/controller/subsystem/vote/SSvote
if(mode == "add_antagonist")
antag_add_failed = 1
log_vote(text)
to_world("<font color='purple'>[text]</font>")
to_world("<span class='vote'>[text]</span>")
/datum/controller/subsystem/vote/proc/result()
. = announce_result()
@@ -173,7 +173,7 @@ var/datum/controller/subsystem/vote/SSvote
if(mode == "gamemode") //fire this even if the vote fails.
if(!round_progressing)
round_progressing = 1
to_world("<font color='red'><b>The round will start soon.</b></font>")
to_world("<span class='warning'><b>The round will start soon.</b></span>")
if(restart)
to_world("World restarting due to vote...")
@@ -287,20 +287,20 @@ var/datum/controller/subsystem/vote/SSvote
text += "\n[sanitizeSafe(question)]"
log_vote(text)
to_world("<font color='purple'><b>[text]</b>\nType <b>vote</b> or click <a href='?src=\ref[src];open=1'>here</a> to place your votes.\nYou have [config.vote_period/10] seconds to vote.</font>")
to_world("<span class='vote'><b>[text]</b>\nType <b>vote</b> or click <a href='?src=\ref[src];open=1'>here</a> to place your votes.\nYou have [config.vote_period/10] seconds to vote.</span>")
for(var/cc in clients)
var/client/C = cc
if(C.prefs.asfx_togs & ASFX_VOTE) //Personal mute
switch(vote_type)
if("crew_transfer")
C << sound('sound/effects/vote.ogg', repeat = 0, wait = 0, volume = 50, channel = 3)
sound_to(C, sound('sound/effects/vote.ogg', repeat = 0, wait = 0, volume = 50, channel = 3))
if("gamemode")
C << sound('sound/ambience/vote_alarm.ogg', repeat = 0, wait = 0, volume = 50, channel = 3)
sound_to(C, sound('sound/ambience/vote_alarm.ogg', repeat = 0, wait = 0, volume = 50, channel = 3))
if("custom")
C << sound('sound/ambience/vote_alarm.ogg', repeat = 0, wait = 0, volume = 50, channel = 3)
sound_to(C, sound('sound/ambience/vote_alarm.ogg', repeat = 0, wait = 0, volume = 50, channel = 3))
if(mode == "gamemode" && round_progressing)
round_progressing = 0
to_world("<font color='red'><b>Round start has been delayed.</b></font>")
to_world("<span class='warning'><b>Round start has been delayed.</b></span>")
SSvueui.check_uis_for_change(src)
return 1
return 0

View File

@@ -271,14 +271,14 @@
if (istype(A, /atom/movable/openspace/overlay))
var/atom/movable/openspace/overlay/OO = A
var/atom/movable/AA = OO.associated_atom
out += "<li>\icon[A] plane [A.plane], layer [A.layer], depth [OO.depth], associated Z-level [AA.z] - [OO.type] copying [AA] ([AA.type])</li>"
out += "<li>[icon2html(A, usr)] plane [A.plane], layer [A.layer], depth [OO.depth], associated Z-level [AA.z] - [OO.type] copying [AA] ([AA.type])</li>"
else if (isturf(A))
if (A == T)
out += "<li>\icon[A] plane [A.plane], layer [A.layer], Z-level [A.z] - [A] ([A.type]) - <font color='green'>SELF</font></li>"
out += "<li>[icon2html(A, usr)] plane [A.plane], layer [A.layer], Z-level [A.z] - [A] ([A.type]) - <span class='good'>SELF</span></li>"
else // foreign turfs - not visible here, but good for figuring out layering
out += "<li>\icon[A] plane [A.plane], layer [A.layer], Z-level [A.z] - [A] ([A.type]) - <font color='red'>FOREIGN</font></li>"
out += "<li>[icon2html(A, usr)] plane [A.plane], layer [A.layer], Z-level [A.z] - [A] ([A.type]) - <span class='warning'>FOREIGN</span></li>"
else
out += "<li>\icon[A] plane [A.plane], layer [A.layer], Z-level [A.z] - [A] ([A.type])</li>"
out += "<li>[icon2html(A, usr)] plane [A.plane], layer [A.layer], Z-level [A.z] - [A] ([A.type])</li>"
out += "</ul>"

View File

@@ -21,9 +21,6 @@ var/datum/discord_bot/discord_bot = null
discord_bot.update_channels()
if (config.use_discord_pins && server_greeting)
server_greeting.update_pins()
return 1
/hook/roundstart/proc/alert_no_admins()

View File

@@ -162,9 +162,9 @@
for(var/datum/objective/O in objectives)
out += "<b>Objective #[num]:</b> [O.explanation_text] "
if(O.completed)
out += "(<font color='green'>complete</font>)"
out += "(<span class='good'>complete</span>)"
else
out += "(<font color='red'>incomplete</font>)"
out += "(<span class='warning'>incomplete</span>)"
out += " <a href='?src=\ref[src];obj_completed=\ref[O]'>\[toggle\]</a>"
out += " <a href='?src=\ref[src];obj_delete=\ref[O]'>\[remove\]</a><br>"
num++

View File

@@ -1,354 +0,0 @@
/*
* Server greeting datum.
* Contains the following information:
* - hashes for the message of the day and staff memos
* - the current message of the day and staff memos
* - the fully parsed welcome screen HTML data
*
* #TODO_LATER: Update this to be reliant on the game, and not an HTML template, whenever we update to TGui. Less hacks involved, then.
*/
#define MEMOFILE "data/greeting.sav"
#define OUTDATED_MOTD 1
#define OUTDATED_MEMO 2
#define OUTDATED_NOTE 4
#define JS_SANITIZE(msg) list2params(list(json_encode(msg)))
/datum/server_greeting
// Hashes to figure out if we need to display the greeting message.
// These correspond to motd_hash and memo_hash on /datum/preferences for each client.
var/motd_hash = ""
var/memo_hash = ""
// The stored strings of general subcomponents.
var/motd = "<center>No new announcements to showcase.</center>"
var/memo_list[] = list()
var/memo = "<center>No memos have been posted.</center>"
// Cached outdated information.
var/list/client_cache = list()
/datum/server_greeting/New()
..()
load_from_file()
/*
* Populates variables from save file, and loads the raw HTML data.
* Needs to be called at least once for successful initialization.
*/
/datum/server_greeting/proc/load_from_file()
var/savefile/F = new(MEMOFILE)
if (F)
if (F["motd"])
F["motd"] >> motd
if (!config.use_discord_pins)
if (F["memo"])
F["memo"] >> memo_list
update_data()
/*
* A helper to regenerate the hashes for all data fields.
* As well as to reparse the staff memo list.
* Separated for the sake of avoiding the duplication of code.
*/
/datum/server_greeting/proc/update_data()
if (motd)
motd_hash = md5(motd)
else
motd = initial(motd)
motd_hash = ""
if (!config.use_discord_pins)
// The initialization of memos in case use_discord_pins == 1 is done in discord_bot.dm
// Primary reason is to avoid null references when the bot isn't created yet.
if (memo_list.len)
memo = ""
for (var/ckey in memo_list)
var/data = {"<p><b>[ckey]</b> wrote on [memo_list[ckey]["date"]]:<br>
[memo_list[ckey]["content"]]</p>"}
memo += data
memo_hash = md5(memo)
else
memo = initial(memo)
memo_hash = ""
/datum/server_greeting/proc/update_pins()
set background = 1
var/list/temp_list = discord_bot.retreive_pins()
// A is a number in a string form
// temp_list[A] is a list of lists.
for (var/A in temp_list)
var/list/memos = temp_list[A]
var/flag = text2num(A)
memo_list += new /datum/memo_datum(memos, flag)
/*
* Helper to update the MoTD or memo contents.
* Args:
* - var/change string
* - var/new_value mixed
* Returns:
* - 1 upon success
* - 0 upon failure
*/
/datum/server_greeting/proc/update_value(var/change, var/new_value)
if (!change || !new_value)
return 0
switch (change)
if ("motd")
motd = new_value
if ("memo_write")
if (config.use_discord_pins)
return 0
memo_list[new_value[1]] = list("date" = time2text(world.realtime, "DD-MMM-YYYY"), "content" = new_value[2])
if ("memo_delete")
if (config.use_discord_pins)
return 0
if (memo_list[new_value])
memo_list -= new_value
else
return 0
else
return 0
var/savefile/F = new(MEMOFILE)
F["motd"] << motd
F["memo"] << memo_list
update_data()
return 1
/*
* Helper proc to determine whether or not we need to show the greeting window to a user.
* Args:
* - var/user client
* Returns:
* - int
*/
/datum/server_greeting/proc/find_outdated_info(var/client/user, var/force_eval = 0)
if (!user || !user.prefs)
return 0
if (!force_eval && !isnull(client_cache[user]))
return client_cache[user]
var/outdated_info = 0
if (motd_hash && user.prefs.motd_hash != motd_hash)
outdated_info |= OUTDATED_MOTD
if (user.holder && user.prefs.memo_hash != get_memo_hash(user))
outdated_info |= OUTDATED_MEMO
if (user.prefs.notifications.len)
outdated_info |= OUTDATED_NOTE
client_cache[user] = outdated_info
return outdated_info
/*
* A proc used to open the server greeting window for a user.
* Args:
* - var/user client
* - var/outdated_info int
*/
/datum/server_greeting/proc/display_to_client(var/client/user)
if (!user)
return
user.info_sent = 0
// Make sure the user has the welcome screen assets.
var/datum/asset/welcome = get_asset_datum(/datum/asset/simple/misc)
welcome.send(user)
user << browse('html/templates/welcome_screen.html', "window=greeting;size=800x500")
/*
* A proc used to close the server greeting window for a user.
* Args:
* - var/user client
* - var/reason text
*/
/datum/server_greeting/proc/close_window(var/client/user, var/reason)
if (!user)
return
if (reason)
to_chat(user, SPAN_NOTICE(reason))
user << browse(null, "window=greeting")
/*
* Sends data to the JS controllers used in the server greeting.
* Also updates the user's preferences, if any of the hashes were out of date.
* Args:
* - var/user client
* - var/outdated_info int
*/
/datum/server_greeting/proc/send_to_javascript(var/client/user)
if (!user)
return
// This is fine now, because it uses cached information.
var/outdated_info = server_greeting.find_outdated_info(user)
var/list/data = list("div" = "", "content" = "", "update" = 1, "changeHash" = null)
if (outdated_info & OUTDATED_NOTE)
to_chat(user, output("#note-placeholder", "greeting.browser:RemoveElement"))
data["div"] = "#note"
data["update"] = 1
for (var/datum/client_notification/a in user.prefs.notifications)
data["content"] = a.get_html()
to_chat(user, output(JS_SANITIZE(data), "greeting.browser:AddContent"))
if (!user.holder)
to_chat(user, output("#memo-tab", "greeting.browser:RemoveElement"))
else
if (outdated_info & OUTDATED_MEMO)
data["update"] = 1
data["changeHash"] = get_memo_hash(user)
else
data["update"] = 0
data["changeHash"] = null
data["div"] = "#memo"
data["content"] = get_memo_content(user)
to_chat(user, output(JS_SANITIZE(data), "greeting.browser:AddContent"))
if (outdated_info & OUTDATED_MOTD)
data["update"] = 1
data["changeHash"] = motd_hash
else
data["update"] = 0
data["changeHash"] = null
data["div"] = "#motd"
data["content"] = motd
to_chat(user, output(JS_SANITIZE(data), "greeting.browser:AddContent"))
data["div"] = "#testmerges"
data["content"] = revdata.greeting_info
if (revdata.test_merges.len)
data["update"] = 1
else
data["update"] = 0
data["changeHash"] = null
to_chat(user, output(JS_SANITIZE(data), "greeting.browser:AddContent"))
/*
* Basically the Topic proc for the greeting datum.
*/
/datum/server_greeting/proc/handle_call(var/href_list, var/client/C)
if (!href_list || !href_list["command"] || !C)
return
switch (href_list["command"])
if ("request_data")
send_to_javascript(C)
/*
* Gets the appropriate memo hash for the memo system in use.
* Args:
* - var/C client
* Returns:
* - string
*/
/datum/server_greeting/proc/get_memo_hash(var/client/C)
if (!C || !C.holder)
return ""
if (!config.use_discord_pins)
return memo_hash
var/joint_checksum = ""
for (var/A in memo_list)
var/datum/memo_datum/memo = A
if (C.holder.rights & memo.flag)
joint_checksum += memo.hash
return md5(joint_checksum)
/*
* Gets the appropriate memo content for the memo system in use.
* Args:
* - var/C client
* Returns:
* - string if old memo system is used (config.use_discord_pins = 0)
* - list of strings if new memo system is used
*/
/datum/server_greeting/proc/get_memo_content(var/client/C)
if (!C || !C.holder)
return ""
if (!config.use_discord_pins)
return memo
var/list/content = list()
for (var/A in memo_list)
var/datum/memo_datum/memo = A
if (C.holder.rights & memo.flag)
content += memo.contents
return content
/datum/memo_datum
var/contents
var/hash
var/flag
/datum/memo_datum/New(var/list/input = list(), var/_flag)
flag = _flag
// Yes. This is an unfortunately acceptable way of doing it.
// Why? Because you cannot use numbers as indexes in an assoc list without fucking DM.
var/static/list/flags_to_divs = list("[R_ADMIN]" = "danger",
"[R_MOD]" = "warning",
"[(R_MOD|R_ADMIN)]" = "warning",
"[R_CCIAA]" = "info",
"[R_DEV]" = "info")
if (input.len)
contents = "<div class='alert alert-[flags_to_divs["[flag]"]]'>"
for (var/i = 1, i <= input.len, i++)
contents += "<b>[input[i]["author"]]</b> wrote:<br>[nl2br(input[i]["content"])]"
if (i < input.len)
contents += "<hr></hr>"
contents += "</div>"
else
contents = ""
hash = md5(contents)
#undef OUTDATED_NOTE
#undef OUTDATED_MEMO
#undef OUTDATED_MOTD
#undef MEMOFILE
#undef JS_SANITIZE

View File

@@ -76,4 +76,4 @@
var/obj/structure/largecrate/C = /obj/structure/largecrate
icon = image(initial(C.icon), initial(C.icon_state))
return "\icon[icon]"
return "[icon2html(icon, usr)]"

View File

@@ -140,7 +140,7 @@ var/datum/uplink/uplink
/datum/uplink_item/item/log_icon()
var/obj/I = path
return "\icon[I]"
return "[icon2html(I, usr)]"
/********************************
* *
@@ -154,7 +154,7 @@ var/datum/uplink/uplink
if(!default_abstract_uplink_icon)
default_abstract_uplink_icon = image('icons/obj/pda.dmi', "pda-syn")
return "\icon[default_abstract_uplink_icon]"
return "[icon2html(default_abstract_uplink_icon, usr)]"
/****************
* Support procs *

View File

@@ -64,7 +64,7 @@ var/const/CAMERA_WIRE_NOTHING2 = 32
C.light_disabled = !C.light_disabled
if(CAMERA_WIRE_ALARM)
C.visible_message("\icon[C] *beep*", "\icon[C] *beep*")
C.visible_message("[icon2html(C, viewers(get_turf(C)))] *beep*", "[icon2html(C, viewers(get_turf(C)))] *beep*")
return
/datum/wires/camera/proc/CanDeconstruct()

View File

@@ -40,10 +40,10 @@ var/const/TAG_WIRE_HACK = 8
var/obj/item/ipc_tag_scanner/S = holder
switch(index)
if(TAG_WIRE_POWER)
S.visible_message(SPAN_WARNING("\icon[S] <b>[capitalize_first_letters(S.name)]</b> beeps, \"BOOWEEEP!\""))
S.visible_message(SPAN_WARNING("[icon2html(S, viewers(get_turf(S)))] <b>[capitalize_first_letters(S.name)]</b> beeps, \"BOOWEEEP!\""))
if(TAG_WIRE_HACK)
S.visible_message(SPAN_WARNING("\icon[S] <b>[capitalize_first_letters(S.name)]</b> beeps, \"BEEYUUP!\""))
S.visible_message(SPAN_WARNING("[icon2html(S, viewers(get_turf(S)))] <b>[capitalize_first_letters(S.name)]</b> beeps, \"BEEYUUP!\""))
/datum/wires/tag_scanner/CanUse(var/mob/living/L)
var/obj/item/ipc_tag_scanner/S = holder

View File

@@ -28,15 +28,15 @@ var/const/WIRE_BEACON_RX = 256 // beacon ping recv
/datum/wires/mulebot/UpdatePulsed(var/index)
switch(index)
if(WIRE_POWER1, WIRE_POWER2)
holder.visible_message("<span class='notice'>\icon[holder] The charge light flickers.</span>")
holder.visible_message("<span class='notice'>[icon2html(holder, viewers(get_turf(holder)))] The charge light flickers.</span>")
if(WIRE_AVOIDANCE)
holder.visible_message("<span class='notice'>\icon[holder] The external warning lights flash briefly.</span>")
holder.visible_message("<span class='notice'>[icon2html(holder, viewers(get_turf(holder)))] The external warning lights flash briefly.</span>")
if(WIRE_LOADCHECK)
holder.visible_message("<span class='notice'>\icon[holder] The load platform clunks.</span>")
holder.visible_message("<span class='notice'>[icon2html(holder, viewers(get_turf(holder)))] The load platform clunks.</span>")
if(WIRE_MOTOR1, WIRE_MOTOR2)
holder.visible_message("<span class='notice'>\icon[holder] The drive motor whines briefly.</span>")
holder.visible_message("<span class='notice'>[icon2html(holder, viewers(get_turf(holder)))] The drive motor whines briefly.</span>")
else
holder.visible_message("<span class='notice'>\icon[holder] You hear a radio crackle.</span>")
holder.visible_message("<span class='notice'>[icon2html(holder, viewers(get_turf(holder)))] You hear a radio crackle.</span>")
// HELPER PROCS

View File

@@ -31,7 +31,7 @@ var/const/PARTICLE_LIMIT_POWER_WIRE = 4 // Determines how strong the PA can be.
C.add_strength()
if(PARTICLE_LIMIT_POWER_WIRE)
C.visible_message("\icon[C]<b>[C]</b> makes a large whirring noise.")
C.visible_message("[icon2html(C, viewers(get_turf(C)))]<b>[C]</b> makes a large whirring noise.")
/datum/wires/particle_acc/control_box/UpdateCut(var/index, var/mended)
var/obj/machinery/particle_accelerator/control_box/C = holder

View File

@@ -144,7 +144,7 @@
user.lastattacked = target
target.lastattacker = user
if(!no_attack_log)
user.attack_log += "\[[time_stamp()]\]<font color='red'> Attacked [target.name] ([target.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damagetype)])</font>"
user.attack_log += "\[[time_stamp()]\]<span class='warning'> Attacked [target.name] ([target.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damagetype)])</span>"
target.attack_log += "\[[time_stamp()]\]<font color='orange'> Attacked by [user.name] ([user.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damagetype)])</font>"
msg_admin_attack("[key_name(user, highlight_special = 1)] attacked [key_name(target, highlight_special = 1)] with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damagetype)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)",ckey=key_name(user),ckey_target=key_name(target) )
/////////////////////////

View File

@@ -66,9 +66,9 @@
/datum/announcement/priority/command/MessageAndSound(var/message as text, var/message_title as text, var/message_sound)
var/command_title
command_title += "<h2><font color='#272727'>[current_map.boss_name] Update</font></h2>"
command_title += "<h2 class='alert'>[current_map.boss_name] Update</h2>"
if (message_title)
command_title += "<h3><span class='alert'>[message_title]</span></h3>"
command_title += "<h3 class='alert'>[message_title]</h3>"
var/command_body
command_body += "<br><span class='alert'>[message]</span><br>"
@@ -77,9 +77,9 @@
/datum/announcement/priority/security/MessageAndSound(var/message as text, var/message_title as text, var/message_sound)
to_world("<font size=4 color='red'>[message_title]</font>")
to_world("<font color='red'>[message]</font>")
to_world("<span class='warning'>[message]</span>")
if(message_sound)
to_world(message_sound)
sound_to(world, message_sound)
/datum/announcement/proc/NewsCast(message as text, message_title as text)
if(!newscast)

View File

@@ -21,12 +21,12 @@
text += "<font color='green'><B>Success!</B></font>"
feedback_add_details(feedback_tag,"[O.type]|SUCCESS")
else
text += "<font color='red'>Fail.</font>"
text += "<span class='warning'>Fail.</span>"
feedback_add_details(feedback_tag,"[O.type]|FAIL")
failed = 1
num++
if(failed)
text += "<br><font color='red'><B>The [role_text] has failed.</B></font>"
text += "<br><span class='warning'><B>The [role_text] has failed.</B></span>"
else
text += "<br><font color='green'><B>The [role_text] was successful!</B></font>"
@@ -46,7 +46,7 @@
if(O.check_completion())
text += "<font color='green'><B>Success!</B></font>"
else
text += "<font color='red'>Fail.</font>"
text += "<span class='warning'>Fail.</span>"
return text
/datum/antagonist/proc/print_special_role_report(var/datum/mind/ply)

View File

@@ -149,7 +149,7 @@
else
f_name += "oil-stained [name][infix]."
to_chat(user, "\icon[src] That's [f_name] [suffix]")
to_chat(user, "[icon2html(src, user)] That's [f_name] [suffix]")
to_chat(user, desc)
if(ishuman(user))

View File

@@ -33,7 +33,7 @@
/obj/item/book/tome/proc/attack_admins(var/mob/living/M, var/mob/living/user)
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had the [name] used on them by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used [name] on [M.name] ([M.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <span class='warning'>Used [name] on [M.name] ([M.ckey])</span>")
msg_admin_attack("[key_name_admin(user)] used [name] on [M.name] ([M.ckey]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)",ckey=key_name(user),ckey_target=key_name(M))

View File

@@ -44,7 +44,7 @@ var/global/list/narsie_list = list()
..()
if(announce)
to_world("<font size='15' color='red'><b>[uppertext(name)] HAS RISEN</b></font>")
to_world(sound('sound/effects/narsie.ogg'))
sound_to(world, ('sound/effects/narsie.ogg'))
narsie_spawn_animation()

View File

@@ -40,7 +40,7 @@ var/global/universe_has_ended = 0
to_world("<span class='danger' style='font-size:22pt'>You are blinded by a brilliant flash of energy.</span>")
to_world(sound('sound/effects/cascade.ogg'))
sound_to(world, ('sound/effects/cascade.ogg'))
for(var/mob/M in player_list)
flick("e_flash", M.flash)

View File

@@ -144,7 +144,7 @@ var/global/Holiday = null
//Run at the start of a round
/proc/Holiday_Game_Start()
if(Holiday)
to_world("<font color='blue'>and...</font>")
to_world("<span class='notice'>and...</span>")
to_world("<h4>Happy [Holiday] Everybody!</h4>")
switch(Holiday) //special holidays
if("Easter")

View File

@@ -592,7 +592,7 @@ var/global/list/additional_antag_types = list()
//New message handling
post_comm_message("Cent. Com. Status Summary", intercepttext)
to_world(sound('sound/AI/commandreport.ogg'))
sound_to(world, ('sound/AI/commandreport.ogg'))
/datum/game_mode/proc/get_players_for_role(var/role, var/antag_id)
var/list/players = list()
@@ -714,10 +714,10 @@ proc/get_logout_report()
continue //Dead mob, ghost abandoned
else
if(D.can_reenter_corpse)
msg += "<b>[L.name]</b> ([ckey(D.mind.key)]), the [L.job] (<font color='red'><b>Adminghosted</b></font>)\n"
msg += "<b>[L.name]</b> ([ckey(D.mind.key)]), the [L.job] (<span class='warning'><b>Adminghosted</b></span>)\n"
continue //Lolwhat
else
msg += "<b>[L.name]</b> ([ckey(D.mind.key)]), the [L.job] (<font color='red'><b>Ghosted</b></font>)\n"
msg += "<b>[L.name]</b> ([ckey(D.mind.key)]), the [L.job] (<span class='warning'><b>Ghosted</b></span>)\n"
continue //Ghosted while alive
msg += "</span>" // close the span from right at the top
@@ -752,7 +752,7 @@ proc/get_nt_opposed()
//Announces objectives/generic antag text.
/proc/show_generic_antag_text(var/datum/mind/player)
if(player.current)
to_chat(player.current, "You are an antagonist! <font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have <i>fun</i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</b>")
to_chat(player.current, "You are an antagonist! <span class='notice'><b>Within the rules</b></span>, try to act as an opposing force to the crew. Further RP and try to make sure other players have <i>fun</i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</b>")
/proc/show_objectives(var/datum/mind/player)

View File

@@ -173,7 +173,7 @@
// return
log_ability_use(user, "advanced encryption hack (SUCCESS - title: [reporttitle])")
to_world("<span class='alert'>New [current_map.company_name] Update available at all communication consoles.</span>")
to_world(sound('sound/AI/commandreport.ogg'))
sound_to(world, ('sound/AI/commandreport.ogg'))
post_comm_message(reporttitle, reportbody)
/datum/game_mode/malfunction/verb/elite_encryption_hack()

View File

@@ -30,7 +30,7 @@
to_chat(vampire.current, "<span class='notice'><b>You have unlocked a new power:</b> [power.name].</span>")
to_chat(vampire.current, "<span class='notice'>[power.desc]</span>")
if (power.helptext)
to_chat(vampire.current, "<font color='green'>[power.helptext]</font>")
to_chat(vampire.current, "<span class='good'>[power.helptext]</span>")
// Proc to safely remove blood, without resulting in negative amounts of blood.
/datum/vampire/proc/use_blood(var/blood_to_use)

View File

@@ -799,7 +799,7 @@
probability = 80
if (prob(probability))
to_chat(T, "<font color='green'><i>[pick(emotes)]</i></font>")
to_chat(T, "<span class='good'><i>[pick(emotes)]</i></span>")
vampire.use_blood(5)

View File

@@ -128,7 +128,7 @@
if(UNCONSCIOUS)
data["stat"] = "Unconscious"
if(DEAD)
data["stat"] = "<font color='red'>Dead</font>"
data["stat"] = "<span class='warning'>Dead</span>"
data["health"] = occupant.health
if(ishuman(occupant))
var/mob/living/carbon/human/H = occupant

View File

@@ -618,11 +618,11 @@
/obj/machinery/body_scanconsole/proc/format_occupant_data(var/list/occ)
var/dat = "<font color='blue'><b>Scan performed at [occ["stationtime"]]</b></font><br>"
dat += "<font color='blue'><b>Occupant Statistics:</b></font><br>"
var/dat = "<span class='notice'><b>Scan performed at [occ["stationtime"]]</b></span><br>"
dat += "<span class='notice'><b>Occupant Statistics:</b></span><br>"
dat += text("Brain Activity: []<br>", occ["brain_activity"])
if (occ["virus_present"])
dat += "<font color='red'>Viral pathogen detected in blood stream.</font><br>"
dat += "<span class='warning'>Viral pathogen detected in blood stream.</span><br>"
dat += text("Blood Pressure: []<br>", occ["blood_pressure"])
dat += text("Blood Oxygenation: []%<br>", occ["blood_oxygenation"])
dat += text("Physical Trauma: []<br>", occ["bruteloss"])
@@ -730,7 +730,7 @@
if(i.get_scarring_level() > 0.01)
necrotic += ", [i.get_scarring_results()]"
if(i.status & ORGAN_DEAD)
necrotic = ", <font color='red'>necrotic and decaying</font>"
necrotic = ", <span class='warning'>necrotic and decaying</span>"
dat += "<tr>"
dat += "<td>[i.name]</td><td>N/A</td><td>[get_internal_damage(i)]</td><td>[infection], [mech][necrotic]</td><td></td>"
@@ -740,10 +740,10 @@
var/list/species_organs = occ["species_organs"]
for(var/organ_name in species_organs)
if(!locate(species_organs[organ_name]) in occ["internal_organs"])
dat += text("<font color='red'>No [organ_name] detected.</font><BR>")
dat += text("<span class='warning'>No [organ_name] detected.</span><BR>")
if(occ["sdisabilities"] & BLIND)
dat += text("<font color='red'>Cataracts detected.</font><BR>")
dat += text("<span class='warning'>Cataracts detected.</span><BR>")
if(occ["sdisabilities"] & NEARSIGHTED)
dat += text("<font color='red'>Retinal misalignment detected.</font><BR>")
dat += text("<span class='warning'>Retinal misalignment detected.</span><BR>")
return dat

View File

@@ -262,7 +262,7 @@ update_flag
if (holding)
release_log += "Valve was <b>closed</b> by [key_name(admin)] (aghost), stopping the transfer into the [holding]<br>"
else
release_log += "Valve was <b>closed</b> by [key_name(admin)] (aghost), stopping the transfer into the <font color='red'><b>air</b></font><br>"
release_log += "Valve was <b>closed</b> by [key_name(admin)] (aghost), stopping the transfer into the <span class='warning'><b>air</b></span><br>"
else
if (alert(admin, "The release valve is currently closed. Do you want to open it?", "Open the valve?", "Yes", "No") == "No")
return
@@ -270,7 +270,7 @@ update_flag
if (holding)
release_log += "Valve was <b>opened</b> by [key_name(admin)] (aghost), starting the transfer into the [holding]<br>"
else
release_log += "Valve was <b>opened</b> by [key_name(admin)] (aghost), starting the transfer into the <font color='red'><b>air</b></font><br>"
release_log += "Valve was <b>opened</b> by [key_name(admin)] (aghost), starting the transfer into the <span class='warning'><b>air</b></span><br>"
log_open(admin)
valve_open = !valve_open
@@ -354,12 +354,12 @@ update_flag
if (holding)
release_log += "Valve was <b>closed</b> by [usr] ([usr.ckey]), stopping the transfer into the [holding]<br>"
else
release_log += "Valve was <b>closed</b> by [usr] ([usr.ckey]), stopping the transfer into the <font color='red'><b>air</b></font><br>"
release_log += "Valve was <b>closed</b> by [usr] ([usr.ckey]), stopping the transfer into the <span class='warning'><b>air</b></span><br>"
else
if (holding)
release_log += "Valve was <b>opened</b> by [usr] ([usr.ckey]), starting the transfer into the [holding]<br>"
else
release_log += "Valve was <b>opened</b> by [usr] ([usr.ckey]), starting the transfer into the <font color='red'><b>air</b></font><br>"
release_log += "Valve was <b>opened</b> by [usr] ([usr.ckey]), starting the transfer into the <span class='warning'><b>air</b></span><br>"
log_open()
valve_open = !valve_open

View File

@@ -455,7 +455,7 @@
to_chat(usr, "<span class='danger'><font size=3>You're never going to make it to Orion...</font></span>")
var/mob/living/M = usr
M.visible_message("\The [M] starts rapidly deteriorating.")
to_chat(M, browse (null,"window=arcade"))
show_browser(M, null, "window=arcade")
for(var/i=0;i<10;i++)
sleep(10)
M.Stun(5)

View File

@@ -64,7 +64,7 @@
var/obj/item/paper/monitorkey/MK = new/obj/item/paper/monitorkey
MK.forceMove(src.loc)
// Will help make emagging the console not so easy to get away with.
MK.info += "<br><br><font color='red'>£%@%(*$%&(£&?*(%&£/{}</font>"
MK.info += "<br><br><span class='warning'>£%@%(*$%&(£&?*(%&£/{}</span>"
addtimer(CALLBACK(src, .proc/UnmagConsole), 100 * length(linkedServer.decryptkey))
message = rebootmsg
update_icon()
@@ -100,10 +100,10 @@
if(auth)
dat += "<h4><dd><A href='?src=\ref[src];auth=1'>&#09;<font color='green'>\[Authenticated\]</font></a>&#09;/"
dat += " Server Power: <A href='?src=\ref[src];active=1'>[src.linkedServer && src.linkedServer.active ? "<font color='green'>\[On\]</font>":"<font color='red'>\[Off\]</font>"]</a></h4>"
dat += " Server Power: <A href='?src=\ref[src];active=1'>[src.linkedServer && src.linkedServer.active ? "<font color='green'>\[On\]</font>":"<span class='warning'>\[Off\]</span>"]</a></h4>"
else
dat += "<h4><dd><A href='?src=\ref[src];auth=1'>&#09;<font color='red'>\[Unauthenticated\]</font></a>&#09;/"
dat += " Server Power: <u>[src.linkedServer && src.linkedServer.active ? "<font color='green'>\[On\]</font>":"<font color='red'>\[Off\]</font>"]</u></h4>"
dat += "<h4><dd><A href='?src=\ref[src];auth=1'>&#09;<span class='warning'>\[Unauthenticated\]</span></a>&#09;/"
dat += " Server Power: <u>[src.linkedServer && src.linkedServer.active ? "<font color='green'>\[On\]</font>":"<span class='warning'>\[Off\]</span>"]</u></h4>"
if(hacking || emag)
screen = 2
@@ -130,10 +130,10 @@
dat += "<dd><A href='?src=\ref[src];spam=1'>&#09;[++i]. Modify Spam Filter</a><br></dd>"
else
for(var/n = ++i; n <= optioncount; n++)
dat += "<dd><font color='blue'>&#09;[n]. ---------------</font><br></dd>"
dat += "<dd><span class='notice'>&#09;[n]. ---------------</span><br></dd>"
if((istype(user, /mob/living/silicon/ai) || istype(user, /mob/living/silicon/robot)) && (user.mind.special_role && user.mind.original == user))
//Malf/Traitor AIs can bruteforce into the system to gain the Key.
dat += "<dd><A href='?src=\ref[src];hack=1'><i><font color='Red'>*&@#. Bruteforce Key</font></i></font></a><br></dd>"
dat += "<dd><A href='?src=\ref[src];hack=1'><i><span class='warning'>*&@#. Bruteforce Key</span></i></font></a><br></dd>"
else
dat += "<br>"

View File

@@ -4,7 +4,7 @@
#define JACKPOT 10000
#define SPIN_TIME 65
#define REEL_DEACTIVATE_DELAY 7
#define SEVEN "<font color='red'>7</font>"
#define SEVEN "<span class='warning'>7</span>"
/obj/machinery/computer/slot_machine
name = "slot machine"
@@ -24,7 +24,7 @@
var/jackpots = 0
var/list/coinvalues = list()
var/list/reels = list(list("", "", "") = 0, list("", "", "") = 0, list("", "", "") = 0, list("", "", "") = 0, list("", "", "") = 0)
var/list/symbols = list(SEVEN = 1, "<font color='orange'>&</font>" = 2, "<font color='yellow'>@</font>" = 2, "<font color='green'>$</font>" = 2, "<font color='blue'>?</font>" = 2, "<font color='grey'>#</font>" = 2, "<font color='white'>!</font>" = 2, "<font color='fuchsia'>%</font>" = 2) //if people are winning too much, multiply every number in this list by 2 and see if they are still winning too much.
var/list/symbols = list(SEVEN = 1, "<font color='orange'>&</font>" = 2, "<font color='yellow'>@</font>" = 2, "<font color='green'>$</font>" = 2, "<span class='notice'>?</span>" = 2, "<font color='grey'>#</font>" = 2, "<font color='white'>!</font>" = 2, "<font color='fuchsia'>%</font>" = 2) //if people are winning too much, multiply every number in this list by 2 and see if they are still winning too much.
light_color = LIGHT_COLOR_BROWN

View File

@@ -608,7 +608,7 @@ About the new airlock wires panel:
else if(duration) //electrify door for the given duration seconds
if(usr)
LAZYADD(shockedby, "\[[time_stamp()]\] - [usr](ckey:[usr.ckey])")
usr.attack_log += text("\[[time_stamp()]\] <font color='red'>Electrified the [name] at [x] [y] [z]</font>")
usr.attack_log += text("\[[time_stamp()]\] <span class='warning'>Electrified the [name] at [x] [y] [z]</span>")
else
LAZYADD(shockedby, "\[[time_stamp()]\] - EMP)")
message = "The door is now electrified [duration == -1 ? "permanently" : "for [duration] second\s"]."
@@ -1004,7 +1004,7 @@ About the new airlock wires panel:
else if(!activate)
if(issilicon(usr) && !player_is_antag(usr.mind))
to_chat(usr, SPAN_NOTICE("The door bolts will raise in five seconds."))
src.visible_message("\icon[src.icon] <b>[src]</b> announces, <span class='notice'>\"Bolts set to raise in FIVE SECONDS.\"</span>")
src.visible_message("[icon2html(src.icon, viewers(get_turf(src)))] <b>[src]</b> announces, <span class='notice'>\"Bolts set to raise in FIVE SECONDS.\"</span>")
addtimer(CALLBACK(src, .proc/unlock), 50)
else if(unlock())
to_chat(usr, SPAN_NOTICE("The door bolts have been raised."))

View File

@@ -417,9 +417,7 @@
/obj/machinery/door/proc/set_broken()
stat |= BROKEN
for (var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message("[src.name] breaks!" )
visible_message(SPAN_WARNING("[src] breaks!"))
update_icon()
return

View File

@@ -117,7 +117,7 @@
return
if(T.get_blood_volume() < 90 && !blood_message_sent)
visible_message("\icon[src] \The <b>[src]</b> flashes a warning light!")
visible_message("[icon2html(src, viewers(get_turf(src)))] \The <b>[src]</b> flashes a warning light!")
playsound(src, 'sound/machines/buzz-two.ogg', 50)
blood_message_sent = TRUE

View File

@@ -286,7 +286,7 @@ Class Procs:
/obj/machinery/proc/state(var/msg)
for(var/mob/O in hearers(src, null))
O.show_message("\icon[src] <span class = 'notice'>[msg]</span>", 2)
O.show_message("[icon2html(src, O)] <span class = 'notice'>[msg]</span>", 2)
/obj/machinery/proc/ping(text=null)
if (!text)

View File

@@ -226,7 +226,7 @@
if(target != user && !user.restrained() && !user.stat && !user.weakened && !user.stunned && !user.paralysis)
user.visible_message(SPAN_WARNING("[user] feeds the [target]'s hair into the [src] and flicks it on!"), SPAN_ALERT("You turn the [src] on!"))
do_hair_pull(target)
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Has fed [target.name]'s ([target.ckey]) hair into a [src].</font>")
user.attack_log += text("\[[time_stamp()]\] <span class='warning'>Has fed [target.name]'s ([target.ckey]) hair into a [src].</span>")
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their hair fed into [src] by [user.name] ([user.ckey])</font>")
msg_admin_attack("[key_name_admin(user)] fed [key_name_admin(target)] in a [src]. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)",ckey=key_name(user),ckey_target=key_name(target))
else
@@ -245,20 +245,20 @@
switch(emagged)
if(0)
emagged = 0.5
visible_message("\icon[src] <b>[src]</b> beeps: \"DB error \[Code 0x00F1\]\"")
visible_message("[icon2html(src, viewers(get_turf(src)))] <b>[src]</b> beeps: \"DB error \[Code 0x00F1\]\"")
sleep(10)
visible_message("\icon[src] <b>[src]</b> beeps: \"Attempting auto-repair\"")
visible_message("[icon2html(src, viewers(get_turf(src)))] <b>[src]</b> beeps: \"Attempting auto-repair\"")
sleep(15)
visible_message("\icon[src] <b>[src]</b> beeps: \"User DB corrupted \[Code 0x00FA\]. Truncating data structure...\"")
visible_message("[icon2html(src, viewers(get_turf(src)))] <b>[src]</b> beeps: \"User DB corrupted \[Code 0x00FA\]. Truncating data structure...\"")
sleep(30)
visible_message("\icon[src] <b>[src]</b> beeps: \"User DB truncated. Please contact your [current_map.company_name] system operator for future assistance.\"")
visible_message("[icon2html(src, viewers(get_turf(src)))] <b>[src]</b> beeps: \"User DB truncated. Please contact your [current_map.company_name] system operator for future assistance.\"")
req_access = null
emagged = 1
return 1
if(0.5)
visible_message("\icon[src] <b>[src]</b> beeps: \"DB not responding \[Code 0x0003\]...\"")
visible_message("[icon2html(src, viewers(get_turf(src)))] <b>[src]</b> beeps: \"DB not responding \[Code 0x0003\]...\"")
if(1)
visible_message("\icon[src] <b>[src]</b> beeps: \"No records in User DB\"")
visible_message("[icon2html(src, viewers(get_turf(src)))] <b>[src]</b> beeps: \"No records in User DB\"")
/obj/machinery/mecha_part_fabricator/proc/update_busy()
if(queue.len)

View File

@@ -166,7 +166,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
switch(screen)
if(0)
dat += "Welcome to Newscasting Unit #[src.unit_no].<BR> Interface & News networks Operational."
dat += "<BR><FONT SIZE=1>Property of Nanotransen Inc</FONT>"
dat += "<BR><FONT SIZE=1>Property of Nanotransen Inc</font>"
if(SSnews.wanted_issue)
dat+= "<HR><A href='?src=\ref[src];view_wanted=1'>Read Wanted Issue</A>"
dat+= "<HR><BR><A href='?src=\ref[src];create_channel=1'>Create Feed Channel</A>"
@@ -184,7 +184,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
dat+="<BR><A href='?src=\ref[src];menu_wanted=1'>[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue</A>"
dat+="<BR><A href='?src=\ref[src];menu_censor_story=1'>Censor Feed Stories</A>"
dat+="<BR><A href='?src=\ref[src];menu_censor_channel=1'>Mark Feed Channel with [current_map.company_name] D-Notice</A>"
dat+="<BR><HR>The newscaster recognises you as: <FONT COLOR='green'>[src.scanned_user]</FONT>"
dat+="<BR><HR>The newscaster recognises you as: <span class='good'>[src.scanned_user]</span>"
if(1)
dat+= "Station Feed Channels<HR>"
if( isemptylist(SSnews.network_channels) )
@@ -193,21 +193,21 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
for(var/channel in SSnews.network_channels)
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
if(FC.is_admin_channel)
dat+="<B><FONT style='BACKGROUND-COLOR: LightGreen '><A href='?src=\ref[src];show_channel=\ref[FC]'>[FC.channel_name]</A></FONT></B><BR>"
dat+="<B><FONT style='BACKGROUND-COLOR: LightGreen '><A href='?src=\ref[src];show_channel=\ref[FC]'>[FC.channel_name]</A></font></B><BR>"
else
dat+="<B><A href='?src=\ref[src];show_channel=\ref[FC]'>[FC.channel_name]</A> [(FC.censored) ? ("<FONT COLOR='red'>***</FONT>") : null]<BR></B>"
dat+="<B><A href='?src=\ref[src];show_channel=\ref[FC]'>[FC.channel_name]</A> [(FC.censored) ? ("<span class='warning'>***</span>") : null]<BR></B>"
dat+="<BR><HR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Back</A>"
if(2)
dat+="Creating new Feed Channel..."
dat+="<HR><B><A href='?src=\ref[src];set_channel_name=1'>Channel Name</A>:</B> [src.channel_name]<BR>"
dat+="<B>Channel Author:</B> <FONT COLOR='green'>[src.scanned_user]</FONT><BR>"
dat+="<B>Channel Author:</B> <span class='good'>[src.scanned_user]</span><BR>"
dat+="<B><A href='?src=\ref[src];set_channel_lock=1'>Will Accept Public Feeds</A>:</B> [(src.c_locked) ? ("NO") : ("YES")]<BR><BR>"
dat+="<BR><A href='?src=\ref[src];submit_new_channel=1'>Submit</A><BR><BR><A href='?src=\ref[src];setScreen=[0]'>Cancel</A><BR>"
if(3)
dat+="Creating new Feed Message..."
dat+="<HR><B><A href='?src=\ref[src];set_channel_receiving=1'>Receiving Channel</A>:</B> [src.channel_name]<BR>" //MARK
dat+="<B>Message Author:</B> <FONT COLOR='green'>[src.scanned_user]</FONT><BR>"
dat+="<B>Message Author:</B> <span class='good'>[src.scanned_user]</span><BR>"
dat+="<B><A href='?src=\ref[src];set_new_message=1'>Message Body</A>:</B> [src.msg] <BR>"
dat+="<B><A href='?src=\ref[src];set_attachment=1'>Attach Photo</A>:</B> [(src.photo_data ? "Photo Attached" : "No Photo")]</BR>"
dat+="<B><A href='?src=\ref[src];set_paper=1'>Scan Paper</A>:</B> [((src.paper_data || src.paper_name) ? "Paper Scanned" : "No Paper")]</BR>"
@@ -219,17 +219,17 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
dat+="Feed Channel [src.channel_name] created successfully.<BR><BR>"
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Return</A><BR>"
if(6)
dat+="<B><FONT COLOR='maroon'>ERROR: Could not submit Feed story to Network.</B></FONT><HR><BR>"
dat+="<B><span class='boldannounce'>ERROR: Could not submit Feed story to Network.</B></span><HR><BR>"
if(src.channel_name=="")
dat+="<FONT COLOR='maroon'><3E>Invalid receiving channel name.</FONT><BR>"
dat+="<span class='boldannounce'><3E>Invalid receiving channel name.</span><BR>"
if(src.scanned_user=="Unknown")
dat+="<FONT COLOR='maroon'><3E>Channel author unverified.</FONT><BR>"
dat+="<span class='boldannounce'><3E>Channel author unverified.</span><BR>"
if(src.msg == "" || src.msg == "\[REDACTED\]")
dat+="<FONT COLOR='maroon'><3E>Invalid message body.</FONT><BR>"
dat+="<span class='boldannounce'><3E>Invalid message body.</span><BR>"
dat+="<BR><A href='?src=\ref[src];setScreen=[3]'>Return</A><BR>"
if(7)
dat+="<B><FONT COLOR='maroon'>ERROR: Could not submit Feed Channel to Network.</B></FONT><HR><BR>"
dat+="<B><span class='boldannounce'>ERROR: Could not submit Feed Channel to Network.</B></span><HR><BR>"
var/list/existing_authors = list()
for(var/channel in SSnews.network_channels)
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
@@ -238,9 +238,9 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
else
existing_authors += FC.author
if(src.scanned_user in existing_authors)
dat+="<FONT COLOR='maroon'><3E>There already exists a Feed channel under your name.</FONT><BR>"
dat+="<span class='boldannounce'><3E>There already exists a Feed channel under your name.</span><BR>"
if(src.channel_name=="" || src.channel_name == "\[REDACTED\]")
dat+="<FONT COLOR='maroon'><3E>Invalid channel name.</FONT><BR>"
dat+="<span class='boldannounce'><3E>Invalid channel name.</span>BR>"
var/check = 0
for(var/channel in SSnews.network_channels)
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
@@ -248,9 +248,9 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
check = 1
break
if(check)
dat+="<FONT COLOR='maroon'><3E>Channel name already in use.</FONT><BR>"
dat+="<span class='boldannounce'><3E>Channel name already in use.</span><BR>"
if(src.scanned_user=="Unknown")
dat+="<FONT COLOR='maroon'><3E>Channel author unverified.</FONT><BR>"
dat+="<span class='boldannounce'><3E>Channel author unverified.</span><BR>"
dat+="<BR><A href='?src=\ref[src];setScreen=[2]'>Return</A><BR>"
if(8)
var/total_num=length(SSnews.network_channels)
@@ -267,10 +267,10 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
dat+="<BR><BR><A href='?src=\ref[src];print_paper=[0]'>Print Paper</A>"
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Cancel</A>"
if(9)
dat+="<B>[src.viewing_channel.channel_name]: </B><FONT SIZE=1>\[created by: <FONT COLOR='maroon'>[src.viewing_channel.author]</FONT>\]</FONT><HR>"
dat+="<B>[src.viewing_channel.channel_name]: </B><FONT SIZE=1>\[created by: <span class='boldannounce'>[src.viewing_channel.author]</span>\]</font><HR>"
if(src.viewing_channel.censored)
dat+="<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [current_map.company_name] D-Notice.<BR>"
dat+="No further feed story additions are allowed while the D-Notice is in effect.</FONT><BR><BR>"
dat+="<span class='warning'><B>ATTENTION:</B></span> This channel has been deemed as threatening to the welfare of the station, and marked with a [current_map.company_name] D-Notice.<BR>"
dat+="No further feed story additions are allowed while the D-Notice is in effect.<BR><BR>"
else
if( isemptylist(src.viewing_channel.messages) )
dat+="<I>No feed messages found in channel...</I><BR>"
@@ -278,68 +278,68 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
var/i = 0
for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages)
i++
dat+="<BLOCKQUOTE style=\"padding:2px 4px;border-left:4px #797979 solid\">[MESSAGE.body] <FONT SIZE=1>\[Likes: <FONT COLOR='DarkGreen'>[MESSAGE.likes]</FONT> Dislikes: <FONT COLOR='maroon'>[MESSAGE.dislikes]</FONT>\]</FONT><BR>"
dat+="<BLOCKQUOTE style=\"padding:2px 4px;border-left:4px #797979 solid\">[MESSAGE.body] <FONT SIZE=1>\[Likes: <span class='soghun_alt'>[MESSAGE.likes]</span> Dislikes: <span class='boldannounce'>[MESSAGE.dislikes]</span>\]</font><BR>"
if(MESSAGE.img)
to_chat(usr, browse_rsc(MESSAGE.img, "tmp_photo[i].png"))
send_rsc(usr, MESSAGE.img, "tmp_photo[i].png")
dat+="<img src='tmp_photo[i].png' width = '180'><BR>"
if(MESSAGE.caption)
dat+="<FONT SIZE=1><B>[MESSAGE.caption]</B></FONT><BR>"
dat+="<FONT SIZE=1><B>[MESSAGE.caption]</B></font><BR>"
dat+="<BR>"
dat+="<FONT SIZE=1><A href='?src=\ref[src];view_comments=1;story=\ref[MESSAGE]'>View Comments</A> <A href='?src=\ref[src];add_comment=1;story=\ref[MESSAGE]'>Add Comment</A> <A href='?src=\ref[src];like=1;story=\ref[MESSAGE]'>Like Story</A> <A href='?src=\ref[src];dislike=1;story=\ref[MESSAGE]'>Dislike Story</A></FONT><BR>"
dat+="<FONT SIZE=1>\[Story by <FONT COLOR='maroon'>[MESSAGE.author] - [MESSAGE.time_stamp]</FONT>\]</FONT></BLOCKQUOTE><BR>"
dat+="<FONT SIZE=1><A href='?src=\ref[src];view_comments=1;story=\ref[MESSAGE]'>View Comments</A> <A href='?src=\ref[src];add_comment=1;story=\ref[MESSAGE]'>Add Comment</A> <A href='?src=\ref[src];like=1;story=\ref[MESSAGE]'>Like Story</A> <A href='?src=\ref[src];dislike=1;story=\ref[MESSAGE]'>Dislike Story</A></font><BR>"
dat+="<FONT SIZE=1>\[Story by <span class='boldannounce'>[MESSAGE.author] - [MESSAGE.time_stamp]</span>\]</font></BLOCKQUOTE><BR>"
dat+="<BR><HR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
dat+="<BR><A href='?src=\ref[src];setScreen=[1]'>Back</A>"
if(10)
dat+="<B>[current_map.company_name] Feed Censorship Tool</B><BR>"
dat+="<FONT SIZE=1>NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.<BR>"
dat+="Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.</FONT>"
dat+="Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.</font>"
dat+="<HR>Select Feed channel to get Stories from:<BR>"
if(isemptylist(SSnews.network_channels))
dat+="<I>No feed channels found active...</I><BR>"
else
for(var/channel in SSnews.network_channels)
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
dat+="<A href='?src=\ref[src];pick_censor_channel=\ref[FC]'>[FC.channel_name]</A> [(FC.censored) ? ("<FONT COLOR='red'>***</FONT>") : null]<BR>"
dat+="<A href='?src=\ref[src];pick_censor_channel=\ref[FC]'>[FC.channel_name]</A> [(FC.censored) ? ("<span class='warning'>***</span>") : null]<BR>"
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Cancel</A>"
if(11)
dat+="<B>[current_map.company_name] D-Notice Handler</B><HR>"
dat+="<FONT SIZE=1>A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's"
dat+="morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed"
dat+="stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.</FONT><HR>"
dat+="stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.</font><HR>"
if(isemptylist(SSnews.network_channels))
dat+="<I>No feed channels found active...</I><BR>"
else
for(var/channel in SSnews.network_channels)
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
dat+="<A href='?src=\ref[src];pick_d_notice=\ref[FC]'>[FC.channel_name]</A> [(FC.censored) ? ("<FONT COLOR='red'>***</FONT>") : null]<BR>"
dat+="<A href='?src=\ref[src];pick_d_notice=\ref[FC]'>[FC.channel_name]</A> [(FC.censored) ? ("<span class='warning'>***</span>") : null]<BR>"
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Back</A>"
if(12)
dat+="<B>[src.viewing_channel.channel_name]: </B><FONT SIZE=1>\[ created by: <FONT COLOR='maroon'>[src.viewing_channel.author]</FONT> \]</FONT><BR>"
dat+="<FONT SIZE=2><A href='?src=\ref[src];censor_channel_author=\ref[src.viewing_channel]'>[(src.viewing_channel.author=="\[REDACTED\]") ? ("Undo Author censorship") : ("Censor channel Author")]</A></FONT><HR>"
dat+="<B>[src.viewing_channel.channel_name]: </B><FONT SIZE=1>\[ created by: <span class='boldannounce'>[src.viewing_channel.author]</span> \]</font><BR>"
dat+="<FONT SIZE=2><A href='?src=\ref[src];censor_channel_author=\ref[src.viewing_channel]'>[(src.viewing_channel.author=="\[REDACTED\]") ? ("Undo Author censorship") : ("Censor channel Author")]</A></font><HR>"
if( isemptylist(src.viewing_channel.messages) )
dat+="<I>No feed messages found in channel...</I><BR>"
else
for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages)
dat+="-[MESSAGE.body] <BR><FONT SIZE=1>\[[MESSAGE.message_type] by <FONT COLOR='maroon'>[MESSAGE.author]</FONT>\]</FONT><BR>"
dat+="<FONT SIZE=2><A href='?src=\ref[src];censor_channel_story_body=\ref[MESSAGE]'>[(MESSAGE.body == "\[REDACTED\]") ? ("Undo story censorship") : ("Censor story")]</A> - <A href='?src=\ref[src];censor_channel_story_author=\ref[MESSAGE]'>[(MESSAGE.author == "\[REDACTED\]") ? ("Undo Author Censorship") : ("Censor message Author")]</A></FONT><BR>"
dat+="-[MESSAGE.body] <BR><FONT SIZE=1>\[[MESSAGE.message_type] by <span class='boldannounce'>[MESSAGE.author]</span>\]</font><BR>"
dat+="<FONT SIZE=2><A href='?src=\ref[src];censor_channel_story_body=\ref[MESSAGE]'>[(MESSAGE.body == "\[REDACTED\]") ? ("Undo story censorship") : ("Censor story")]</A> - <A href='?src=\ref[src];censor_channel_story_author=\ref[MESSAGE]'>[(MESSAGE.author == "\[REDACTED\]") ? ("Undo Author Censorship") : ("Censor message Author")]</A></font><BR>"
dat+="<BR><A href='?src=\ref[src];setScreen=[10]'>Back</A>"
if(13)
dat+="<B>[src.viewing_channel.channel_name]: </B><FONT SIZE=1>\[ created by: <FONT COLOR='maroon'>[src.viewing_channel.author]</FONT> \]</FONT><BR>"
dat+="<B>[src.viewing_channel.channel_name]: </B><FONT SIZE=1>\[ created by: <span class='boldannounce'>[src.viewing_channel.author]</span> \]</font><BR>"
dat+="Channel messages listed below. If you deem them dangerous to the station, you can <A href='?src=\ref[src];toggle_d_notice=\ref[src.viewing_channel]'>Bestow a D-Notice upon the channel</A>.<HR>"
if(src.viewing_channel.censored)
dat+="<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [current_map.company_name] D-Notice.<BR>"
dat+="<span class='warning'><B>ATTENTION:</B></span> This channel has been deemed as threatening to the welfare of the station, and marked with a [current_map.company_name] D-Notice.<BR>"
dat+="No further feed story additions are allowed while the D-Notice is in effect.<BR><BR>"
else
if( isemptylist(src.viewing_channel.messages) )
dat+="<I>No feed messages found in channel...</I><BR>"
else
for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages)
dat+="<BLOCKQUOTE style=\"padding:2px 4px;border-left:4px #797979 solid\">[MESSAGE.body] <FONT SIZE=1>\[Likes: <FONT COLOR='DarkGreen'>[MESSAGE.likes]</FONT> Dislikes: <FONT COLOR='maroon'>[MESSAGE.dislikes]</FONT>\]</FONT><BR>"
dat+="<FONT SIZE=1><A href='?src=\ref[src];view_comments=1;story=\ref[MESSAGE];privileged=1;'>View Comments</A> <A href='?src=\ref[src];add_comment=1;story=\ref[MESSAGE]'>Add Comment</A> <A href='?src=\ref[src];like=1;story=\ref[MESSAGE]'>Like Story</A> <A href='?src=\ref[src];dislike=1;story=\ref[MESSAGE]'>Dislike Story</A></FONT><BR>"
dat+="<FONT SIZE=1>\[Story by <FONT COLOR='maroon'>[MESSAGE.author] - [MESSAGE.time_stamp]</FONT>\]</FONT></BLOCKQUOTE><BR>"
dat+="<BLOCKQUOTE style=\"padding:2px 4px;border-left:4px #797979 solid\">[MESSAGE.body] <FONT SIZE=1>\[Likes: <span class='soghun_alt'>[MESSAGE.likes]</span> Dislikes: <span class='boldannounce'>[MESSAGE.dislikes]</span>\]</font><BR>"
dat+="<FONT SIZE=1><A href='?src=\ref[src];view_comments=1;story=\ref[MESSAGE];privileged=1;'>View Comments</A> <A href='?src=\ref[src];add_comment=1;story=\ref[MESSAGE]'>Add Comment</A> <A href='?src=\ref[src];like=1;story=\ref[MESSAGE]'>Like Story</A> <A href='?src=\ref[src];dislike=1;story=\ref[MESSAGE]'>Dislike Story</A></font><BR>"
dat+="<FONT SIZE=1>\[Story by <span class='boldannounce'>[MESSAGE.author] - [MESSAGE.time_stamp]</span>\]</font></BLOCKQUOTE><BR>"
dat+="<BR><A href='?src=\ref[src];setScreen=[11]'>Back</A>"
if(14)
@@ -351,54 +351,54 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
end_param = 2
if(wanted_already)
dat+="<FONT SIZE=2><BR><I>A wanted issue is already in Feed Circulation. You can edit or cancel it below.</FONT></I>"
dat+="<FONT SIZE=2><BR><I>A wanted issue is already in Feed Circulation. You can edit or cancel it below.</font></I>"
dat+="<HR>"
dat+="<A href='?src=\ref[src];set_wanted_name=1'>Criminal Name</A>: [src.channel_name] <BR>"
dat+="<A href='?src=\ref[src];set_wanted_desc=1'>Description</A>: [src.msg] <BR>"
dat+="<A href='?src=\ref[src];set_attachment=1'>Attach Photo</A>: [(src.photo_data ? "Photo Attached" : "No Photo")]</BR>"
dat+="<B><A href='?src=\ref[src];set_paper=1'>Scan Paper</A>:</B> [((src.paper_data || src.paper_name) ? "Paper Scanned" : "No Paper")]</BR>"
if(wanted_already)
dat+="<B>Wanted Issue created by:</B><FONT COLOR='green'> [SSnews.wanted_issue.backup_author]</FONT><BR>"
dat+="<B>Wanted Issue created by:</B><span class='good'> [SSnews.wanted_issue.backup_author]</span><BR>"
else
dat+="<B>Wanted Issue will be created under prosecutor:</B><FONT COLOR='green'> [src.scanned_user]</FONT><BR>"
dat+="<B>Wanted Issue will be created under prosecutor:</B><span class='good'> [src.scanned_user]</span><BR>"
dat+="<BR><A href='?src=\ref[src];submit_wanted=[end_param]'>[(wanted_already) ? ("Edit Issue") : ("Submit")]</A>"
if(wanted_already)
dat+="<BR><A href='?src=\ref[src];cancel_wanted=1'>Take down Issue</A>"
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Cancel</A>"
if(15)
dat+="<FONT COLOR='green'>Wanted issue for [src.channel_name] is now in Network Circulation.</FONT><BR><BR>"
dat+="<span class='good'>Wanted issue for [src.channel_name] is now in Network Circulation.</span><BR><BR>"
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Return</A><BR>"
if(16)
dat+="<B><FONT COLOR='maroon'>ERROR: Wanted Issue rejected by Network.</B></FONT><HR><BR>"
dat+="<B><span class='boldannounce'>ERROR: Wanted Issue rejected by Network.</B></span><HR><BR>"
if(src.channel_name=="" || src.channel_name == "\[REDACTED\]")
dat+="<FONT COLOR='maroon'><3E>Invalid name for person wanted.</FONT><BR>"
dat+="<span class='boldannounce'><3E>Invalid name for person wanted.</span><BR>"
if(src.scanned_user=="Unknown")
dat+="<FONT COLOR='maroon'><3E>Issue author unverified.</FONT><BR>"
dat+="<span class='boldannounce'><3E>Issue author unverified.</span><BR>"
if(src.msg == "" || src.msg == "\[REDACTED\]")
dat+="<FONT COLOR='maroon'><3E>Invalid description.</FONT><BR>"
dat+="<span class='boldannounce'><3E>Invalid description.</span><BR>"
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Return</A><BR>"
if(17)
dat+="<B>Wanted Issue successfully deleted from Circulation</B><BR>"
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Return</A><BR>"
if(18)
dat+="<B><FONT COLOR ='maroon'>-- STATIONWIDE WANTED ISSUE --</B></FONT><BR><FONT SIZE=2>\[Submitted by: <FONT COLOR='green'>[SSnews.wanted_issue.backup_author]</FONT>\]</FONT><HR>"
dat+="<B><span class='boldannounce'>-- STATIONWIDE WANTED ISSUE --</B></span><BR><FONT SIZE=2>\[Submitted by: <span class='good'>[SSnews.wanted_issue.backup_author]</span>\]</font><HR>"
dat+="<B>Criminal</B>: [SSnews.wanted_issue.author]<BR>"
dat+="<B>Description</B>: [SSnews.wanted_issue.body]<BR>"
dat+="<B>Photo:</B>: "
if(SSnews.wanted_issue.img)
to_chat(usr, browse_rsc(SSnews.wanted_issue.img, "tmp_photow.png"))
send_rsc(usr, SSnews.wanted_issue.img, "tmp_photow.png")
dat+="<BR><img src='tmp_photow.png' width = '180'>"
else
dat+="None"
dat+="<BR><BR><A href='?src=\ref[src];setScreen=[0]'>Back</A><BR>"
if(19)
dat+="<FONT COLOR='green'>Wanted issue for [src.channel_name] successfully edited.</FONT><BR><BR>"
dat+="<span class='good'>Wanted issue for [src.channel_name] successfully edited.</span><BR><BR>"
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Return</A><BR>"
if(20)
dat+="<FONT COLOR='green'>Printing successful. Please receive your newspaper from the bottom of the machine.</FONT><BR><BR>"
dat+="<span class='good'>Printing successful. Please receive your newspaper from the bottom of the machine.</span><BR><BR>"
dat+="<A href='?src=\ref[src];setScreen=[0]'>Return</A>"
if(21)
dat+="<FONT COLOR='maroon'>Unable to print newspaper. Insufficient paper. Please notify maintenance personnel to refill machine storage.</FONT><BR><BR>"
dat+="<span class='boldannounce'>Unable to print newspaper. Insufficient paper. Please notify maintenance personnel to refill machine storage.</span><BR><BR>"
dat+="<A href='?src=\ref[src];setScreen=[0]'>Return</A>"
if(22) //comments!
dat+="<B>Comments:</B></BR>"
@@ -830,11 +830,11 @@ obj/item/newspaper/attack_self(mob/user as mob)
src.pages = 0
switch(screen)
if(0) //Cover
dat+="<DIV ALIGN='center'><B><FONT SIZE=6>The Griffon</FONT></B></div>"
dat+="<DIV ALIGN='center'><FONT SIZE=2>[current_map.company_name]-standard newspaper, for use on [current_map.company_name]<5D> Space Facilities</FONT></div><HR>"
dat+="<DIV ALIGN='center'><B><FONT SIZE=6>The Griffon</font></B></div>"
dat+="<DIV ALIGN='center'><FONT SIZE=2>[current_map.company_name]-standard newspaper, for use on [current_map.company_name]<5D> Space Facilities</font></div><HR>"
if(isemptylist(src.news_content))
if(src.important_message)
dat+="Contents:<BR><ul><B><FONT COLOR='red'>**</FONT>Important Security Announcement<FONT COLOR='red'>**</FONT></B> <FONT SIZE=2>\[page [src.pages+2]\]</FONT><BR></ul>"
dat+="Contents:<BR><ul><B><span class='warning'>**</span>Important Security Announcement<span class='warning'>**</span></B> <FONT SIZE=2>\[page [src.pages+2]\]</font><BR></ul>"
else
dat+="<I>Other than the title, the rest of the newspaper is unprinted...</I>"
else
@@ -842,11 +842,11 @@ obj/item/newspaper/attack_self(mob/user as mob)
for(var/datum/feed_channel/NP in src.news_content)
src.pages++
if(src.important_message)
dat+="<B><FONT COLOR='red'>**</FONT>Important Security Announcement<FONT COLOR='red'>**</FONT></B> <FONT SIZE=2>\[page [src.pages+2]\]</FONT><BR>"
dat+="<B><span class='warning'>**</span>Important Security Announcement<span class='warning'>**</span></B> <FONT SIZE=2>\[page [src.pages+2]\]</font><BR>"
var/temp_page=0
for(var/datum/feed_channel/NP in src.news_content)
temp_page++
dat+="<B>[NP.channel_name]</B> <FONT SIZE=2>\[page [temp_page+1]\]</FONT><BR>"
dat+="<B>[NP.channel_name]</B> <FONT SIZE=2>\[page [temp_page+1]\]</font><BR>"
dat+="</ul>"
if(scribble_page==curr_page)
dat+="<BR><I>There is a small scribble near the end of this page... It reads: \"[src.scribble]\"</I>"
@@ -855,9 +855,9 @@ obj/item/newspaper/attack_self(mob/user as mob)
for(var/datum/feed_channel/NP in src.news_content)
src.pages++ //Let's get it right again.
var/datum/feed_channel/C = src.news_content[src.curr_page]
dat+="<FONT SIZE=4><B>[C.channel_name]</B></FONT><FONT SIZE=1> \[created by: <FONT COLOR='maroon'>[C.author]</FONT>\]</FONT><BR><BR>"
dat+="<FONT SIZE=4><B>[C.channel_name]</B></font><FONT SIZE=1> \[created by: <span class='boldannounce'>[C.author]</span>\]</font><BR><BR>"
if(C.censored)
dat+="This channel was deemed dangerous to the general welfare of the station and therefore marked with a <B><FONT COLOR='red'>D-Notice</B></FONT>. Its contents were not transferred to the newspaper at the time of printing."
dat+="This channel was deemed dangerous to the general welfare of the station and therefore marked with a <B><span class='warning'>D-Notice</B></span>. Its contents were not transferred to the newspaper at the time of printing."
else
if(isemptylist(C.messages))
dat+="No Feed stories stem from this channel..."
@@ -868,9 +868,9 @@ obj/item/newspaper/attack_self(mob/user as mob)
i++
dat+="-[MESSAGE.body] <BR>"
if(MESSAGE.img)
to_chat(user, browse_rsc(MESSAGE.img, "tmp_photo[i].png"))
send_rsc(usr, MESSAGE.img, "tmp_photo[i].png")
dat+="<img src='tmp_photo[i].png' width = '180'><BR>"
dat+="<FONT SIZE=1>\[[MESSAGE.message_type] by <FONT COLOR='maroon'>[MESSAGE.author]</FONT>\]</FONT><BR><BR>"
dat+="<FONT SIZE=1>\[[MESSAGE.message_type] by <span class='boldannounce'>[MESSAGE.author]</span>\]</font><BR><BR>"
dat+="</ul>"
if(scribble_page==curr_page)
dat+="<BR><I>There is a small scribble near the end of this page... It reads: \"[src.scribble]\"</I>"
@@ -879,12 +879,12 @@ obj/item/newspaper/attack_self(mob/user as mob)
for(var/datum/feed_channel/NP in src.news_content)
src.pages++
if(src.important_message!=null)
dat+="<DIV STYLE='float:center;'><FONT SIZE=4><B>Wanted Issue:</B></FONT SIZE></DIV><BR><BR>"
dat+="<B>Criminal name</B>: <FONT COLOR='maroon'>[important_message.author]</FONT><BR>"
dat+="<DIV STYLE='float:center;'><FONT SIZE=4><B>Wanted Issue:</B></FONT></DIV><BR><BR>"
dat+="<B>Criminal name</B>: <span class='boldannounce'>[important_message.author]</span><BR>"
dat+="<B>Description</B>: [important_message.body]<BR>"
dat+="<B>Photo:</B>: "
if(important_message.img)
to_chat(user, browse_rsc(important_message.img, "tmp_photow.png"))
send_rsc(user, important_message.img, "tmp_photow.png")
dat+="<BR><img src='tmp_photow.png' width = '180'>"
else
dat+="None"
@@ -939,7 +939,7 @@ obj/item/newspaper/Topic(href, href_list)
obj/item/newspaper/attackby(obj/item/W as obj, mob/user as mob)
if(W.ispen())
if(src.scribble_page == src.curr_page)
to_chat(user, "<FONT COLOR='blue'>There's already a scribble in this page... You wouldn't want to make things too cluttered, would you?</FONT>")
to_chat(user, "<span class='notice'>There's already a scribble in this page... You wouldn't want to make things too cluttered, would you?</span>")
else
var/s = sanitize(input(user, "Write something", "Newspaper", ""))
s = sanitize(s)

View File

@@ -254,7 +254,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
screen = RCS_SENTPASS
message_log += "<B>Message sent to [recipient]</B><BR>[message]"
else
audible_message(text("\icon[src] *The Requests Console beeps: 'NOTICE: No server detected!'"),,4)
audible_message(text("[icon2html(src, viewers(get_turf(src)))] *The Requests Console beeps: 'NOTICE: No server detected!'"),,4)
//Handle screen switching
if(href_list["setScreen"])
@@ -386,7 +386,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
if(inoperable(MAINT)) return
if(screen == RCS_MESSAUTH)
var/obj/item/stamp/T = O
msgStamped = text("<font color='blue'><b>Stamped with the [T.name]</b></font>")
msgStamped = text("<span class='notice'><b>Stamped with the [T.name]</b></span>")
updateUsrDialog()
else if (istype(O, /obj/item/paper_bundle))
if(lid) //More of that restocking business
@@ -395,7 +395,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
user.drop_from_inventory(C,get_turf(src))
qdel(C)
for (var/mob/U in hearers(4, src.loc))
U.show_message(text("\icon[src] *The Requests Console beeps: 'Paper added.'"))
U.show_message(text("[icon2html(src, viewers(get_turf(src)))] *The Requests Console beeps: 'Paper added.'"))
else
to_chat(user, "<span class='notice'>I should open the lid to add more paper, or try faxing one paper at a time.</span>")
else if (istype(O, /obj/item/paper))
@@ -405,7 +405,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
qdel(C)
paperstock++
for (var/mob/U in hearers(4, src.loc))
U.show_message(text("\icon[src] *The Requests Console beeps: 'Paper added.'"))
U.show_message(text("[icon2html(src, viewers(get_turf(src)))] *The Requests Console beeps: 'Paper added.'"))
else if(screen == 0) //Faxing them papers
var/pass = 0
var/sendto = input("Select department.", "Send Fax", null, null) in allConsoles
@@ -453,12 +453,12 @@ var/list/obj/machinery/requests_console/allConsoles = list()
P.set_content_unsafe(pname, info)
Console.print(P, 0, 'sound/machines/twobeep.ogg')
for (var/mob/player in hearers(4, Console.loc))
player.show_message(text("\icon[Console] *The Requests Console beeps: 'Fax received'"))
player.show_message(text("[icon2html(Console, viewers(get_turf(Console)))] *The Requests Console beeps: 'Fax received'"))
Console.paperstock--
if(sent == 1)
user.show_message(text("\icon[src] *The Requests Console beeps: 'Message Sent.'"))
user.show_message(text("[icon2html(src, viewers(get_turf(src)))] *The Requests Console beeps: 'Message Sent.'"))
else
user.show_message(text("\icon[src] *The Requests Console beeps: 'NOTICE: No server detected!'"))
user.show_message(text("[icon2html(src, viewers(get_turf(src)))] *The Requests Console beeps: 'NOTICE: No server detected!'"))
return

View File

@@ -112,7 +112,7 @@
continue
var/message = "Notification from \the [department]!"
pda.new_info(pda.message_silent, pda.ttone, "\icon[pda] <b>[message]</b>")
pda.new_info(pda.message_silent, pda.ttone, "[icon2html(pda, viewers(get_turf(pda)))] <b>[message]</b>")
addtimer(CALLBACK(src, .proc/unping), 45 SECONDS)

View File

@@ -338,10 +338,10 @@
var/dat = ""
if(src.active)
dat += "<font color='red'><B>The [model_text ? "[model_text] " : ""]suit cycler is currently in use. Please wait...</b></font>"
dat += "<span class='warning'><B>The [model_text ? "[model_text] " : ""]suit cycler is currently in use. Please wait...</b></span>"
else if(locked)
dat += "<font color='red'><B>The [model_text ? "[model_text] " : ""]suit cycler is currently locked. Please contact your system administrator.</b></font>"
dat += "<span class='warning'><B>The [model_text ? "[model_text] " : ""]suit cycler is currently locked. Please contact your system administrator.</b></span>"
if(src.allowed(usr))
dat += "<br><a href='?src=\ref[src];toggle_lock=1'>\[unlock unit\]</a>"
else
@@ -510,7 +510,7 @@
occupant.apply_effect(radiation_level * 10, IRRADIATE)
/obj/machinery/suit_cycler/proc/finished_job()
visible_message("\icon[src] <span class='notice'>\The [src] pings loudly.</span>")
visible_message("[icon2html(src, viewers(get_turf(src)))] <span class='notice'>\The [src] pings loudly.</span>")
playsound(loc, 'sound/machines/ping.ogg', 50, FALSE)
active = FALSE
update_icon()

View File

@@ -114,8 +114,8 @@
dat+= ""
dat+= "<Font color ='black'><B>Maintenance panel controls</B></font><HR>"
dat+= "<font color ='grey'>The panel is ridden with controls, button and meters, labeled in strange signs and symbols that <BR>you cannot understand. Probably the manufactoring world's language.<BR> Among other things, a few controls catch your eye.<BR><BR></font>"
dat+= text("<font color ='black'>A small dial with a \"ë\" symbol embroidded on it. It's pointing towards a gauge that reads []</font>.<BR> <font color='blue'><A href='?src=\ref[];toggleUV=1'> Turn towards []</A><BR></font>",(src.issuperUV ? "15nm" : "185nm"),src,(src.issuperUV ? "185nm" : "15nm") )
dat+= text("<font color ='black'>A thick old-style button, with 2 grimy LED lights next to it. The [] LED is on.</font><BR><font color ='blue'><A href='?src=\ref[];togglesafeties=1'>Press button</a></font>",(src.safetieson? "<font color='green'><B>GREEN</B></font>" : "<font color='red'><B>RED</B></font>"),src)
dat+= text("<font color ='black'>A small dial with a \"ë\" symbol embroidded on it. It's pointing towards a gauge that reads []</font>.<BR> <span class='notice'><A href='?src=\ref[];toggleUV=1'> Turn towards []</A><BR></span>",(src.issuperUV ? "15nm" : "185nm"),src,(src.issuperUV ? "185nm" : "15nm") )
dat+= text("<font color ='black'>A thick old-style button, with 2 grimy LED lights next to it. The [] LED is on.</font><BR><font color ='blue'><A href='?src=\ref[];togglesafeties=1'>Press button</a></font>",(src.safetieson? "<font color='green'><B>GREEN</B></font>" : "<span class='warning'><B>RED</B></span>"),src)
dat+= text("<HR><BR><A href='?src=\ref[];mach_close=suit_storage_unit'>Close panel</A>", user)
//user << browse(dat, "window=ssu_m_panel;size=400x500")
//onclose(user, "ssu_m_panel")
@@ -129,7 +129,7 @@
else
if(!src.isbroken)
dat+= ""
dat+= "<font color='blue'><font size = 4><B>U-Stor-It Suit Storage Unit, model DS1900</B></FONT><BR>"
dat+= "<span class='notice'><font size = 4><B>U-Stor-It Suit Storage Unit, model DS1900</B></span><BR>"
dat+= "<B>Welcome to the Unit control panel.</B></FONT><HR>"
dat+= text("<font color='black'>Helmet storage compartment: <B>[]</B></font><BR>",(src.HELMET ? HELMET.name : "</font><font color ='grey'>No helmet detected.") )
if(HELMET && src.isopen)
@@ -227,7 +227,7 @@
if(!protected)
playsound(src.loc, /decl/sound_category/spark_sound, 75, 1, -1)
to_chat(user, "<font color='red'>You try to touch the controls but you get zapped. There must be a short circuit somewhere.</font>")
to_chat(user, "<span class='warning'>You try to touch the controls but you get zapped. There must be a short circuit somewhere.</span>")
return*/
else //welp, the guy is protected, we can continue
if(src.issuperUV)
@@ -253,7 +253,7 @@
if(!protected)
playsound(src.loc, /decl/sound_category/spark_sound, 75, 1, -1)
to_chat(user, "<font color='red'>You try to touch the controls but you get zapped. There must be a short circuit somewhere.</font>")
to_chat(user, "<span class='warning'>You try to touch the controls but you get zapped. There must be a short circuit somewhere.</span>")
return*/
else
to_chat(user, "You push the button. The coloured LED next to it changes.")
@@ -305,7 +305,7 @@
/obj/machinery/suit_storage_unit/proc/toggle_open(mob/user as mob)
if(src.islocked || src.isUV)
to_chat(user, "<font color='red'>Unable to open unit.</font>")
to_chat(user, "<span class='warning'>Unable to open unit.</span>")
return
if(src.OCCUPANT)
src.eject_occupant(user)
@@ -316,7 +316,7 @@
/obj/machinery/suit_storage_unit/proc/toggle_lock(mob/user as mob)
if(src.OCCUPANT && src.safetieson)
to_chat(user, "<font color='red'>The Unit's safety protocols disallow locking when a biological form is detected inside its compartments.</font>")
to_chat(user, "<span class='warning'>The Unit's safety protocols disallow locking when a biological form is detected inside its compartments.</span>")
return
if(src.isopen)
return
@@ -328,10 +328,10 @@
if(src.isUV || src.isopen) //I'm bored of all these sanity checks
return
if(src.OCCUPANT && src.safetieson)
to_chat(user, "<font color='red'><B>WARNING:</B> Biological entity detected in the confines of the Unit's storage. Cannot initiate cycle.</font>")
to_chat(user, "<span class='warning'><B>WARNING:</B> Biological entity detected in the confines of the Unit's storage. Cannot initiate cycle.</span>")
return
if(!src.HELMET && !src.MASK && !src.SUIT && !src.OCCUPANT ) //shit's empty yo
to_chat(user, "<font color='red'>Unit storage bays empty. Nothing to disinfect -- Aborting.</font>")
to_chat(user, "<span class='warning'>Unit storage bays empty. Nothing to disinfect -- Aborting.</span>")
return
to_chat(user, "You start the Unit's cauterisation cycle.")
src.cycletime_left = 20
@@ -372,7 +372,7 @@
src.SUIT = null
if(src.MASK)
src.MASK = null
visible_message("<font color='red'>With a loud whining noise, [src]'s door grinds open. Puffs of ashen smoke come out of its chamber.</font>", range = 3)
visible_message("<span class='warning'>With a loud whining noise, [src]'s door grinds open. Puffs of ashen smoke come out of its chamber.</span>", range = 3)
src.isbroken = 1
src.isopen = 1
src.islocked = 0
@@ -396,9 +396,9 @@
if (src.OCCUPANT.client)
if(user != OCCUPANT)
to_chat(OCCUPANT, "<font color='blue'>The machine kicks you out!</font>")
to_chat(OCCUPANT, "<span class='notice'>The machine kicks you out!</span>")
if(user.loc != src.loc)
to_chat(OCCUPANT, "<font color='blue'>You leave the not-so-cozy confines of the SSU.</font>")
to_chat(OCCUPANT, "<span class='notice'>You leave the not-so-cozy confines of the SSU.</span>")
src.OCCUPANT.client.eye = src.OCCUPANT.client.mob
src.OCCUPANT.client.perspective = MOB_PERSPECTIVE
@@ -432,13 +432,13 @@
if (usr.stat != 0)
return
if (!src.isopen)
to_chat(usr, "<font color='red'>The unit's doors are shut.</font>")
to_chat(usr, "<span class='warning'>The unit's doors are shut.</span>")
return
if (!src.ispowered || src.isbroken)
to_chat(usr, "<font color='red'>The unit is not operational.</font>")
to_chat(usr, "<span class='warning'>The unit is not operational.</span>")
return
if ( (src.OCCUPANT) || (src.HELMET) || (src.SUIT) )
to_chat(usr, "<font color='red'>It's too cluttered inside for you to fit in!</font>")
to_chat(usr, "<span class='warning'>It's too cluttered inside for you to fit in!</span>")
return
usr.visible_message("<span class='notice'>[usr] starts squeezing into [src]!</span>", "<span class='notice'>You start squeezing into [src]!</span>", range = 3)
if(do_after(usr, 10))
@@ -464,7 +464,7 @@
if(I.isscrewdriver())
src.panelopen = !src.panelopen
playsound(src.loc, I.usesound, 100, 1)
to_chat(user, text("<font color='blue'>You [] the unit's maintenance panel.</font>",(src.panelopen ? "open up" : "close") ))
to_chat(user, text("<span class='notice'>You [] the unit's maintenance panel.</span>",(src.panelopen ? "open up" : "close") ))
update_icon()
src.updateUsrDialog()
return
@@ -473,13 +473,13 @@
if( !(ismob(G.affecting)) )
return
if (!src.isopen)
to_chat(usr, "<font color='red'>The unit's doors are shut.</font>")
to_chat(usr, "<span class='warning'>The unit's doors are shut.</span>")
return
if (!src.ispowered || src.isbroken)
to_chat(usr, "<font color='red'>The unit is not operational.</font>")
to_chat(usr, "<span class='warning'>The unit is not operational.</span>")
return
if ( (src.OCCUPANT) || (src.HELMET) || (src.SUIT) ) //Unit needs to be absolutely empty
to_chat(user, "<font color='red'>The unit's storage area is too cluttered.</font>")
to_chat(user, "<span class='warning'>The unit's storage area is too cluttered.</span>")
return
user.visible_message("<span class='notice'>[user] starts putting [G.affecting] into [src].</span>", "<span class='notice'>You start putting [G.affecting] into [src].</span>", range = 3)
if(do_after(user, 20))
@@ -502,7 +502,7 @@
return
var/obj/item/clothing/suit/space/S = I
if(src.SUIT)
to_chat(user, "<font color='blue'>The unit already contains a suit.</font>")
to_chat(user, "<span class='notice'>The unit already contains a suit.</span>")
return
to_chat(user, "You load the [S.name] into the storage compartment.")
user.drop_from_inventory(S,src)
@@ -515,7 +515,7 @@
return
var/obj/item/clothing/head/helmet/H = I
if(src.HELMET)
to_chat(user, "<font color='blue'>The unit already contains a helmet.</font>")
to_chat(user, "<span class='notice'>The unit already contains a helmet.</span>")
return
to_chat(user, "You load the [H.name] into the storage compartment.")
user.drop_from_inventory(H,src)
@@ -528,7 +528,7 @@
return
var/obj/item/clothing/mask/M = I
if(src.MASK)
to_chat(user, "<font color='blue'>The unit already contains a mask.</font>")
to_chat(user, "<span class='notice'>The unit already contains a mask.</span>")
return
to_chat(user, "You load the [M.name] into the storage compartment.")
user.drop_from_inventory(M,src)

View File

@@ -232,7 +232,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
var/list/obj/item/device/radio/radios = list()
// --- Gets the accent icon, if there is any ---
var/accent_icon = M.get_accent_icon(speaking)
var/accent_icon = M.get_accent_icon(speaking, M)
// --- Broadcast only to intercom devices ---
@@ -352,8 +352,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
var/part_a = "<span class='[frequency_span_class(display_freq)]'>[accent_icon ? accent_icon + " " : ""]<b>\[[freq_text]\][part_b_extra]</b> <span class='name'>" // goes in the actual output
// --- Some more pre-message formatting ---
var/part_b = "</span> <span class='message'>" // Tweaked for security headsets -- TLE
var/part_c = "</span></span>"
var/part_b = "</span> <span class='message'></span>" // Tweaked for security headsets -- TLE
var/part_c = "</span>"
// --- Filter the message; place it in quotes apply a verb ---
@@ -411,33 +411,33 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
if (length(heard_masked))
for (var/mob/R in heard_masked)
R.hear_radio(message,verbage, speaking, part_a, part_b, M, 0, name)
R.hear_radio(message, verbage, speaking, part_a, part_b, part_c, M, 0, name)
/* --- Process all the mobs that heard the voice normally (understood) --- */
if (length(heard_normal))
for (var/mob/R in heard_normal)
R.hear_radio(message, verbage, speaking, part_a, part_b, M, 0, realname)
R.hear_radio(message, verbage, speaking, part_a, part_b, part_c, M, 0, realname)
/* --- Process all the mobs that heard the voice normally (did not understand) --- */
if (length(heard_voice))
for (var/mob/R in heard_voice)
R.hear_radio(message,verbage, speaking, part_a, part_b, M,0, vname)
R.hear_radio(message,verbage, speaking, part_a, part_b, part_c, M,0, vname)
/* --- Process all the mobs that heard a garbled voice (did not understand) --- */
// Displays garbled message (ie "f*c* **u, **i*er!")
if (length(heard_garbled))
for (var/mob/R in heard_garbled)
R.hear_radio(message, verbage, speaking, part_a, part_b, M, 1, vname)
R.hear_radio(message, verbage, speaking, part_a, part_b, part_c, M, 1, vname)
/* --- Complete gibberish. Usually happens when there's a compressed message --- */
if (length(heard_gibberish))
for (var/mob/R in heard_gibberish)
R.hear_radio(message, verbage, speaking, part_a, part_b, M, 1)
R.hear_radio(message, verbage, speaking, part_a, part_b, part_c, M, 1)
return 1

View File

@@ -343,13 +343,13 @@
// This is not a status display message, since it's something the character
// themselves is meant to see BEFORE putting the money in
to_chat(usr, "\icon[cashmoney] <span class='warning'>That is not enough money.</span>")
to_chat(user, "[icon2html(cashmoney, user)] <span class='warning'>That is not enough money.</span>")
return 0
if(istype(cashmoney, /obj/item/spacecash/bundle))
// Bundles can just have money subtracted, and will work
visible_message("<span class='info'>\The [usr] inserts some cash into \the [src].</span>")
visible_message("<span class='info'>\The [user] inserts some cash into \the [src].</span>")
var/obj/item/spacecash/bundle/cashmoney_bundle = cashmoney
cashmoney_bundle.worth -= currently_vending.price
@@ -364,9 +364,9 @@
// This is really dirty, but there's no superclass for all bills, so we
// just assume that all spacecash that's not something else is a bill
visible_message("<span class='info'>\The [usr] inserts a bill into \the [src].</span>")
visible_message("<span class='info'>\The [user] inserts a bill into \the [src].</span>")
var/left = cashmoney.worth - currently_vending.price
usr.drop_from_inventory(cashmoney,get_turf(src))
user.drop_from_inventory(cashmoney,get_turf(src))
qdel(cashmoney)
if(left)

View File

@@ -1157,7 +1157,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) // src.client is so that ghosts don't have to listen to rats
if(istype(M, /mob/abstract/new_player))
continue
M.show_message("<span class='game say'>PDA Message - <span class='name'>[owner]</span> -> <span class='name'>[P.owner]</span>: <span class='message'>[t]</span></span>")
M.show_message("<span class='game say'>PDA Message - <span class='name'>[owner]</span> -> <span class='name'>[P.owner]</span>: <span class='message linkify'>[t]</span></span>")
if(!conversations.Find("\ref[P]"))
conversations.Add("\ref[P]")
@@ -1173,7 +1173,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if (!beep_silent)
playsound(loc, 'sound/machines/twobeep.ogg', 50, 1)
for (var/mob/O in hearers(2, loc))
O.show_message(text("\icon[src] *[message_tone]*"))
O.show_message(text("[icon2html(src, O)] *[message_tone]*"))
//Search for holder of the PDA.
var/mob/living/L = null
if(loc && isliving(loc))
@@ -1188,7 +1188,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
SSnanoui.update_user_uis(L, src) // Update the receiving user's PDA UI so that they can see the new message
/obj/item/device/pda/proc/new_news(var/message)
new_info(news_silent, newstone, news_silent ? "" : "\icon[src] <b>[message]</b>")
new_info(news_silent, newstone, news_silent ? "" : "[icon2html(src, viewers(get_turf(src)))] <b>[message]</b>")
if(!news_silent)
new_news = 1
@@ -1201,7 +1201,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
new_message(sending_device, sending_device.owner, sending_device.ownjob, message)
/obj/item/device/pda/proc/new_message(var/sending_unit, var/sender, var/sender_job, var/message)
var/reception_message = "\icon[src] <b>Message from [sender] ([sender_job]), </b>\"[message]\" (<a href='byond://?src=\ref[src];choice=Message;skiprefresh=1;target=\ref[sending_unit]'>Reply</a>)"
var/reception_message = "[icon2html(src, viewers(get_turf(src)))] <b>Message from [sender] ([sender_job]), </b>\"[message]\" (<a href='byond://?src=\ref[src];choice=Message;skiprefresh=1;target=\ref[sending_unit]'>Reply</a>)"
new_info(message_silent, ttone, reception_message)
log_pda("[usr] (PDA: [sending_unit]) sent \"[message]\" to [name]",ckey=key_name(usr),ckey_target=key_name(name))
@@ -1213,7 +1213,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if(ismob(sending_unit.loc) && isAI(loc))
track = "(<a href='byond://?src=\ref[loc];track=\ref[sending_unit.loc];trackname=[html_encode(sender)]'>Follow</a>)"
var/reception_message = "\icon[src] <b>Message from [sender] ([sender_job]), </b>\"[message]\" (<a href='byond://?src=\ref[src];choice=Message;skiprefresh=1;target=\ref[sending_unit]'>Reply</a>) [track]"
var/reception_message = "[icon2html(src, viewers(get_turf(src)))] <b>Message from [sender] ([sender_job]), </b>\"[message]\" (<a href='byond://?src=\ref[src];choice=Message;skiprefresh=1;target=\ref[sending_unit]'>Reply</a>) [track]"
new_info(message_silent, newstone, reception_message)
log_pda("[usr] (PDA: [sending_unit]) sent \"[message]\" to [name]",ckey=key_name(usr),ckey_target=key_name(name))
@@ -1534,7 +1534,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/CouldUseTopic(var/mob/user)
..()
if(iscarbon(user))
playsound(src, 'sound/machines/pda_click.ogg', 20)
playsound(loc, 'sound/machines/pda_click.ogg', 20)
//Some spare PDAs in a box
/obj/item/storage/box/PDAs

View File

@@ -36,7 +36,7 @@
if(!user || !M) return //sanity
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been flashed (attempt) with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to flash [M.name] ([M.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <span class='warning'>Used the [src.name] to flash [M.name] ([M.ckey])</span>")
msg_admin_attack("[user.name] ([user.ckey]) Used the [src.name] to flash [M.name] ([M.ckey]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)",ckey=key_name(user),ckey_target=key_name(M))
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)

View File

@@ -57,7 +57,7 @@
to_chat(user, SPAN_WARNING("You are already hacking this door!"))
return 0
if(!is_type_in_list(target, supported_types))
to_chat(user, "\icon[src] <span class='warning'>Unable to hack this target!</span>")
to_chat(user, "[icon2html(src, user)] <span class='warning'>Unable to hack this target!</span>")
return 0
if(istype(target, /obj/machinery/door/airlock))
var/obj/machinery/door/airlock/door = target

View File

@@ -205,7 +205,7 @@ var/global/list/default_medbay_channels = list(
/obj/item/device/radio/CouldUseTopic(var/mob/user)
..()
if(clicksound && iscarbon(user))
playsound(src, clicksound, clickvol)
playsound(loc, clicksound, clickvol)
/obj/item/device/radio/Topic(href, href_list)
if(..())

View File

@@ -565,14 +565,14 @@ BREATH ANALYZER
if(0 to 25)
to_chat(user,"Subject oxygen levels nominal.")
if(25 to 50)
to_chat(user,"<font color='blue'>Subject oxygen levels abnormal.</font>")
to_chat(user,"<span class='notice'>Subject oxygen levels abnormal.</span>")
if(50 to INFINITY)
to_chat(user,"<font color='blue'><b>Severe oxygen deprivation detected.</b></font>")
to_chat(user,"<span class='notice'><b>Severe oxygen deprivation detected.</b></span>")
var/obj/item/organ/internal/L = H.internal_organs_by_name[BP_LUNGS]
if(istype(L))
if(L.is_bruised())
to_chat(user,"<font color='red'><b>Ruptured lung detected.</b></font>")
to_chat(user,"<span class='warning'><b>Ruptured lung detected.</b></span>")
else if(L.is_damaged())
to_chat(user,"<b>Damaged lung detected.</b>")
else
@@ -588,11 +588,11 @@ BREATH ANALYZER
if(INTOX_MUSCLEIMP to INTOX_VOMIT)
additional_string = "\[MODERATELY INTOXICATED\]"
if(INTOX_VOMIT to INTOX_BALANCE)
additional_string = "<font color='red'>\[HEAVILY INTOXICATED\]</font>"
additional_string = "<span class='warning'>\[HEAVILY INTOXICATED\]</span>"
if(INTOX_BALANCE to INTOX_DEATH)
additional_string = "<font color='red'>\[ALCOHOL POISONING LIKELY\]</font>"
additional_string = "<span class='warning'>\[ALCOHOL POISONING LIKELY\]</span>"
if(INTOX_DEATH to INFINITY)
additional_string = "<font color='red'>\[DEATH IMMINENT\]</font>"
additional_string = "<span class='warning'>\[DEATH IMMINENT\]</span>"
to_chat(user,"<span class='normal'>Blood Alcohol Content: [round(bac,0.01)] <b>[additional_string]</b></span>")
if(H.breathing && H.breathing.total_volume)

View File

@@ -35,7 +35,7 @@ effective or pretty fucking useless.
to_chat(user, "<span class='warning'>The mind batterer has been burnt out!</span>")
return
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used [src] to knock down people in the area.</font>")
user.attack_log += text("\[[time_stamp()]\] <span class='warning'>Used [src] to knock down people in the area.</span>")
for(var/mob/living/carbon/human/M in orange(10, user))
spawn()

View File

@@ -68,7 +68,7 @@
H.forceMove(present)
H.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been wrapped with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to wrap [H.name] ([H.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <span class='warning'>Used the [src.name] to wrap [H.name] ([H.ckey])</span>")
msg_admin_attack("[key_name_admin(user)] used [src] to wrap [key_name_admin(H)] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)",ckey=key_name(user),ckey_target=key_name(H))
else
@@ -101,7 +101,7 @@
if(user in target) //no wrapping closets that you are inside - it's not physically possible
return
user.attack_log += text("\[[time_stamp()]\] <font color='blue'>Has used [src.name] on \ref[target]</font>")
user.attack_log += text("\[[time_stamp()]\] <span class='notice'>Has used [src.name] on \ref[target]</span>")
if (istype(target, /obj/item) && !(istype(target, /obj/item/storage) && !istype(target,/obj/item/storage/box)))

View File

@@ -109,13 +109,13 @@
if(0)
damage_desc = "Unknown"
if(1 to 5)
damage_desc = "<font color='green'>negligible</font>"
damage_desc = "<span class='good'>negligible</span>"
if(5 to 15)
damage_desc = "<font color='green'>light</font>"
damage_desc = "<span class='good'>light</span>"
if(15 to 30)
damage_desc = "<font color='orange'>moderate</font>"
if(30 to 1000)
damage_desc = "<font color='red'>severe</font>"
damage_desc = "<span class='warning'>severe</span>"
if(!total_score) total_score = D.organs_scanned.len

View File

@@ -139,10 +139,10 @@ var/const/NO_EMAG_ACT = -50
/obj/item/card/id/proc/prevent_tracking()
return 0
/obj/item/card/id/proc/show(mob/user as mob)
/obj/item/card/id/proc/show(mob/user)
if(front && side)
to_chat(user, browse_rsc(front, "front.png"))
to_chat(user, browse_rsc(side, "side.png"))
send_rsc(user, front, "front.png")
send_rsc(user, side, "side.png")
var/datum/browser/popup = new(user, "idcard", name, 650, 260)
popup.set_content(dat())
popup.set_title_image(usr.browse_rsc_icon(src.icon, src.icon_state))
@@ -214,8 +214,8 @@ var/const/NO_EMAG_ACT = -50
to_chat(user, "<span class='notice'>Biometric Imprinting successful!</span>")
return
for(var/mob/O in viewers(user, null))
O.show_message(text("[] shows you: \icon[] []: assignment: []", user, src, src.name, src.assignment), 1)
user.visible_message("<b>[user]</b> shows you: [icon2html(src, viewers(get_turf(src)))] [src.name]. The assignment on the card: [src.assignment]",\
"You flash your ID card: [icon2html(src, viewers(get_turf(src)))] [src.name]. The assignment on the card: [src.assignment]")
src.add_fingerprint(user)
return
@@ -280,7 +280,7 @@ var/const/NO_EMAG_ACT = -50
set category = "Object"
set src in usr
to_chat(usr, text("\icon[] []: The current assignment on the card is [].", src, src.name, src.assignment))
to_chat(usr, text("[icon2html(src, usr)] []: The current assignment on the card is [].", src.name, src.assignment))
to_chat(usr, "The age on the card is [age].")
to_chat(usr, "The citizenship on the card is [citizenship].")
to_chat(usr, "The religion on the card is [religion].")

View File

@@ -138,7 +138,7 @@
injected_with_monkey = " <span class='danger'>(MONKEY)</span>"
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been injected with [name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [name] to inject [M.name] ([M.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <span class='warning'>Used the [name] to inject [M.name] ([M.ckey])</span>")
log_attack("[user.name] ([user.ckey]) used the [name] to inject [M.name] ([M.ckey])",ckey=key_name(user),ckey_target=key_name(M))
message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with \the [src][injected_with_monkey]")

View File

@@ -125,7 +125,7 @@
if(!ptank)
to_chat(user, "<span class='notice'>Attach a phoron tank first!</span>")
return
var/dat = text("<TT><B>Flamethrower (<A HREF='?src=\ref[src];light=1'>[lit ? "<font color='red'>Lit</font>" : "Unlit"]</a>)</B><BR>\n Tank Pressure: [ptank.air_contents.return_pressure()]<BR>\nAmount to throw: <A HREF='?src=\ref[src];amount=-100'>-</A> <A HREF='?src=\ref[src];amount=-10'>-</A> <A HREF='?src=\ref[src];amount=-1'>-</A> [throw_amount] <A HREF='?src=\ref[src];amount=1'>+</A> <A HREF='?src=\ref[src];amount=10'>+</A> <A HREF='?src=\ref[src];amount=100'>+</A><BR>\n<A HREF='?src=\ref[src];remove=1'>Remove phorontank</A> - <A HREF='?src=\ref[src];close=1'>Close</A></TT>")
var/dat = text("<TT><B>Flamethrower (<A HREF='?src=\ref[src];light=1'>[lit ? "<span class='warning'>Lit</span>" : "Unlit"]</a>)</B><BR>\n Tank Pressure: [ptank.air_contents.return_pressure()]<BR>\nAmount to throw: <A HREF='?src=\ref[src];amount=-100'>-</A> <A HREF='?src=\ref[src];amount=-10'>-</A> <A HREF='?src=\ref[src];amount=-1'>-</A> [throw_amount] <A HREF='?src=\ref[src];amount=1'>+</A> <A HREF='?src=\ref[src];amount=10'>+</A> <A HREF='?src=\ref[src];amount=100'>+</A><BR>\n<A HREF='?src=\ref[src];remove=1'>Remove phorontank</A> - <A HREF='?src=\ref[src];close=1'>Close</A></TT>")
user << browse(dat, "window=flamethrower;size=600x300")
onclose(user, "flamethrower")
return

View File

@@ -75,7 +75,7 @@
if(user)
H.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been handcuffed (attempt) by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to handcuff [H.name] ([H.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <span class='warning'>Attempted to handcuff [H.name] ([H.ckey])</span>")
msg_admin_attack("[key_name_admin(user)] attempted to handcuff [key_name_admin(H)] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)",ckey=key_name(user),ckey_target=key_name(H))
feedback_add_details("handcuffs","H")
@@ -118,7 +118,7 @@
var/s = SPAN_WARNING("[H] chews on [H.get_pronoun("his")] [O.name]!")
H.visible_message(s, SPAN_WARNING("You chew on your [O.name]!"))
message_admins("[key_name_admin(H)] is chewing on [H.get_pronoun("his")] restrained hand - (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[H.x];Y=[H.y];Z=[H.z]'>JMP</a>)")
H.attack_log += text("\[[time_stamp()]\] <font color='red'>[s] ([H.ckey])</font>")
H.attack_log += text("\[[time_stamp()]\] <span class='warning'>[s] ([H.ckey])</span>")
log_attack("[s] ([H.ckey])",ckey=key_name(H))
if(O.take_damage(3, 0, damage_flags = DAM_SHARP|DAM_EDGE, used_weapon = "teeth marks"))

View File

@@ -489,7 +489,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
<b>Implant Specifications:</b><BR>
<b>Name:</b> Cybersun Industries Adrenalin Implant<BR>
<b>Life:</b> Five days.<BR>
<b>Important Notes:</b> <font color='red'>Illegal</font><BR>
<b>Important Notes:</b> <span class='warning'>Illegal</span><BR>
<HR>
<b>Implant Details:</b> Subjects injected with implant can activate a massive injection of adrenalin.<BR>
<b>Function:</b> Contains nanobots to stimulate body to mass-produce Adrenalin.<BR>

View File

@@ -202,7 +202,7 @@
user.visible_message(SPAN_WARNING("\The [user] tags \the [M] with \the [src]!"), SPAN_NOTICE("You tag \the [M] with \the [src]."), range = 3)
M.attack_log += text("\[[time_stamp()]\] <font color='orange'> Implanted with [src.name] ([src.ipc_tag.name]) by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] ([src.ipc_tag.name]) to implant [M.name] ([M.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <span class='warning'>Used the [src.name] ([src.ipc_tag.name]) to implant [M.name] ([M.ckey])</span>")
msg_admin_attack("[key_name_admin(user)] implanted [key_name_admin(M)] with [src.name] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)",ckey=key_name(user),ckey_target=key_name(M))
ipc_tag.replaced(H, H.organs_by_name[BP_HEAD])

View File

@@ -58,7 +58,7 @@
<b>Implant Specifications:</b><BR>
<b>Name:</b> Freedom Beacon<BR>
<b>Life:</b> optimum 5 uses<BR>
<b>Important Notes:</b> <font color='red'>Illegal</font><BR>
<b>Important Notes:</b> <span class='warning'>Illegal</span><BR>
<HR>
<b>Implant Details:</b> <BR>
<b>Function:</b> Transmits a specialized cluster of signals to override handcuff locking

View File

@@ -76,7 +76,7 @@
<li>Open the control panel</li>
<li>Set the speed to 2</li>
<li>Start firing at the singularity generator</li>
<li><font color='red'><b>When the singularity reaches a large enough size so it starts moving on it's own set the speed down to 0, but don't shut it off</b></font></li>
<li><span class='warning'><b>When the singularity reaches a large enough size so it starts moving on it's own set the speed down to 0, but don't shut it off</b></span></li>
<li>Remember to wear a radiation suit when working with this machine... we did tell you that at the start, right?</li>
</ol>
@@ -238,7 +238,7 @@
A power problem has made the entire station lose power? Could be station-wide wiring problems or syndicate power sinks. In any case follow these steps:
<ol>
<li><b><font color='red'>PANIC!</font></b></li>
<li><b><span class='warning'>PANIC!</span></b></li>
<li>Get your ass over to engineering! <b>QUICKLY!!!</b></li>
<li>Get to the <b>Area Power Controller</b> which controls the power to the emitters.</li>
<li>Swipe it with your <b>ID card</b> - if it doesn't unlock, continue with step 15.</li>

View File

@@ -476,7 +476,7 @@
/obj/item/storage/box/mousetraps
name = "box of Pest-B-Gon mousetraps"
desc = "<B><FONT color='red'>WARNING:</FONT></B> <I>Keep out of reach of children</I>."
desc = "<B><span class='warning'>WARNING:</span></B> <I>Keep out of reach of children</I>."
icon_state = "mousetraps"
starts_with = list(/obj/item/device/assembly/mousetrap = 6)

View File

@@ -103,7 +103,7 @@ Frequency:
src.temp += "<B>You are at \[[sr.x],[sr.y],[sr.z]\]</B> in orbital coordinates.<BR><BR><A href='byond://?src=\ref[src];refresh=1'>Refresh</A><BR>"
else
src.temp += "<B><FONT color='red'>Processing Error:</FONT></B> Unable to locate orbital position.<BR>"
src.temp += "<B><span class='warning'>Processing Error:</span></B> Unable to locate orbital position.<BR>"
else
if (href_list["freq"])
src.frequency += text2num(href_list["freq"])

View File

@@ -292,7 +292,7 @@
/obj/item/weldingtool/examine(mob/user)
if(..(user, 0))
to_chat(user, text("\icon[] [] contains []/[] units of fuel!", src, src.name, get_fuel(),src.max_fuel ))
to_chat(user, text("[icon2html(src, user)] [] contains []/[] units of fuel!", src.name, get_fuel(),src.max_fuel ))
/obj/item/weldingtool/attackby(obj/item/W, mob/user)
if(W.isscrewdriver())

View File

@@ -197,6 +197,6 @@
attack_verb = list("banned")
/obj/item/banhammer/attack(mob/M as mob, mob/user as mob)
to_chat(M, "<font color='red'><b> You have been banned FOR NO REISIN by [user]</b></font>")
to_chat(user, "<font color='red'> You have <b>BANNED</b> [M]</font>")
to_chat(M, "<span class='warning'><b> You have been banned FOR NO REISIN by [user]</b></span>")
to_chat(user, "<span class='warning'> You have <b>BANNED</b> [M]</span>")
playsound(loc, 'sound/effects/adminhelp.ogg', 15)

View File

@@ -50,5 +50,5 @@
/obj/item/weldpack/examine(mob/user)
..(user)
to_chat(user, text("\icon[] [] units of fuel left!", src, src.reagents.total_volume))
to_chat(user, text("[icon2html(src, user)] [] units of fuel left!", src.reagents.total_volume))
return

View File

@@ -50,7 +50,7 @@
/obj/CanUseTopic(var/mob/user, var/datum/topic_state/state)
if(user.CanUseObjTopic(src))
return ..()
to_chat(user, "<span class='danger'>\icon[src]Access Denied!</span>")
to_chat(user, "<span class='danger'>[icon2html(src, user)]Access Denied!</span>")
return STATUS_CLOSE
/mob/living/silicon/CanUseObjTopic(var/obj/O)
@@ -159,13 +159,6 @@
/obj/proc/hear_talk(mob/M as mob, text, verb, datum/language/speaking)
if(talking_atom)
talking_atom.catchMessage(text, M)
/*
var/mob/mo = locate(/mob) in src
if(mo)
var/rendered = "<span class='game say'><span class='name'>[M.name]: </span> <span class='message'>[text]</span></span>"
mo.show_message(rendered, 2)
*/
return
/obj/proc/see_emote(mob/M as mob, text, var/emote_type)
return

View File

@@ -59,9 +59,9 @@
if(..(user, 1))
if (mybucket)
var/contains = mybucket.reagents.total_volume
to_chat(user, "\icon[src] The bucket contains [contains] unit\s of liquid!")
to_chat(user, "[icon2html(src, user)] The bucket contains [contains] unit\s of liquid!")
else
to_chat(user, "\icon[src] There is no bucket mounted on it!")
to_chat(user, "[icon2html(src, user)] There is no bucket mounted on it!")
//everything else is visible, so doesn't need to be mentioned

View File

@@ -168,7 +168,7 @@
if(pulling)
occupant.visible_message("<span class='danger'>[pulling] has thrusted \the [name] into \the [A], throwing \the [occupant] out of it!</span>")
pulling.attack_log += "\[[time_stamp()]\]<font color='red'> Crashed [occupant.name]'s ([occupant.ckey]) [name] into \a [A]</font>"
pulling.attack_log += "\[[time_stamp()]\]<span class='warning'> Crashed [occupant.name]'s ([occupant.ckey]) [name] into \a [A]</span>"
occupant.attack_log += "\[[time_stamp()]\]<font color='orange'> Thrusted into \a [A] by [pulling.name] ([pulling.ckey]) with \the [name]</font>"
msg_admin_attack("[pulling.name] ([pulling.ckey]) has thrusted [occupant.name]'s ([occupant.ckey]) [name] into \a [A] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[pulling.x];Y=[pulling.y];Z=[pulling.z]'>JMP</a>)",ckey=key_name(pulling),ckey_target=key_name(occupant))
else

View File

@@ -58,9 +58,9 @@
else
display_name = holder.fakekey
if(holder && !holder.fakekey && (holder.rights & R_ADMIN) && config.allow_admin_ooccolor && (src.prefs.ooccolor != initial(src.prefs.ooccolor))) // keeping this for the badmins
to_chat(target, "<font color='[src.prefs.ooccolor]'><span class='ooc'>" + create_text_tag("ooc", "OOC:", target) + " <EM>[display_name]:</EM> <span class='message'>[msg]</span></span></font>")
to_chat(target, "<font color='[src.prefs.ooccolor]'><span class='ooc'>" + create_text_tag("OOC", target) + " <EM>[display_name]:</EM> <span class='message linkify'>[msg]</span></span></font>")
else
to_chat(target, "<span class='ooc'><span class='[ooc_style]'>" + create_text_tag("ooc", "OOC:", target) + " <EM>[display_name]:</EM> <span class='message'>[msg]</span></span></span>")
to_chat(target, "<span class='ooc'><span class='[ooc_style]'>" + create_text_tag("OOC", target) + " <EM>[display_name]:</EM> <span class='message linkify'>[msg]</span></span></span>")
/client/verb/looc(msg as text)
set name = "LOOC"
@@ -150,7 +150,7 @@
if(target.mob in messagemobs)
prefix = ""
if((target.mob in messagemobs) || display_remote)
to_chat(target, "<span class='ooc'><span class='looc'>" + create_text_tag("looc", "LOOC:", target) + " <span class='prefix'>[prefix]</span><EM>[display_name][admin_stuff]:</EM> <span class='message'>[msg]</span></span></span>")
to_chat(target, "<span class='ooc'><span class='looc'>" + create_text_tag("LOOC", target) + " <span class='prefix'>[prefix]</span><EM>[display_name][admin_stuff]:</EM> <span class='message linkify'>[msg]</span></span></span>")
/client/verb/stop_all_sounds()
set name = "Stop all sounds"

View File

@@ -41,7 +41,7 @@
msg += " - [age]"
if(is_special_character(C.mob))
msg += " - <b><font color='red'>Antagonist</font></b>"
msg += " - <b><span class='warning'>Antagonist</span></b>"
msg += " (<A HREF='?_src_=holder;adminmoreinfo=\ref[C.mob]'>?</A>)"
msg += "<br>"
total_num++

View File

@@ -91,8 +91,6 @@ var/datum/moduletypes/mods = new()
var/gravity_is_on = 1
var/datum/server_greeting/server_greeting = null
var/list/awaydestinations = list() // Away missions. A list of landmarks that the warpgate can take you to.
// For FTP requests. (i.e. downloading runtime logs.)

View File

@@ -45,6 +45,6 @@ proc/send_byjax(receiver, control_id, target_element, new_content=null, callback
/* if(callback_args)
argums += "&[list2params(callback_args)]"
*/
to_chat(receiver, output(argums,"[control_id]:replaceContent"))
send_output(receiver, argums, "[control_id]:replaceContent")
return

View File

@@ -342,7 +342,7 @@
data += list(list(C.ckey, C.address, C.computer_id))
var/data_str = json_encode(data)
to_chat(C, output(list2params(list("E-DAT", data_str, 900)), "greeting.browser:setCookie"))
send_output(C, list2params(list("E-DAT", data_str, 900)), "greeting.browser:setCookie")
#undef BAD_CID
#undef BAD_IP

View File

@@ -64,7 +64,7 @@
ip = query.item[3]
if(!validckey)
if(!banned_mob || (banned_mob && !IsGuestKey(banned_mob.key)))
message_admins("<font color='red'>[key_name_admin(usr)] attempted to ban [ckey], but [ckey] has not been seen yet. Please only ban actual players.</font>",1)
message_admins("<span class='warning'>[key_name_admin(usr)] attempted to ban [ckey], but [ckey] has not been seen yet. Please only ban actual players.</span>",1)
return
var/a_ckey
@@ -507,7 +507,7 @@
var/typedesc =""
switch(bantype)
if("PERMABAN")
typedesc = "<font color='red'><b>PERMABAN</b></font>"
typedesc = "<span class='warning'><b>PERMABAN</b></span>"
if("TEMPBAN")
typedesc = "<b>TEMPBAN</b><br><font size='2'>([duration] minutes) [(unbanned || auto) ? "" : "(<a href=\"byond://?src=\ref[src];dbbanedit=duration;dbbanid=[banid]\">Edit</a>)"]<br>Expires [expiration]</font>"
if("JOB_PERMABAN")

View File

@@ -397,7 +397,7 @@ proc/admin_notice(var/message, var/rights)
if(FC.is_admin_channel)
dat+="<B><FONT style='BACKGROUND-COLOR: LightGreen'><A href='?src=\ref[src];ac_show_channel=\ref[FC]'>[FC.channel_name]</A></FONT></B><BR>"
else
dat+="<B><A href='?src=\ref[src];ac_show_channel=\ref[FC]'>[FC.channel_name]</A> [(FC.censored) ? ("<FONT COLOR='red'>***</FONT>") : null]<BR></B>"
dat+="<B><A href='?src=\ref[src];ac_show_channel=\ref[FC]'>[FC.channel_name]</A> [(FC.censored) ? ("<span class='warning'>***</span>") : null]<BR></B>"
dat+={"<BR><HR><A href='?src=\ref[src];ac_refresh=1'>Refresh</A>
<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Back</A>
"}
@@ -452,7 +452,7 @@ proc/admin_notice(var/message, var/rights)
dat+="<B>[src.admincaster_feed_channel.channel_name]: </B><FONT SIZE=1>\[created by: <FONT COLOR='maroon'>[src.admincaster_feed_channel.author]</FONT>\]</FONT><HR>"
if(src.admincaster_feed_channel.censored)
dat+={"
<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [current_map.company_name] D-Notice.<BR>
<span class='warning'><B>ATTENTION: </B></span>This channel has been deemed as threatening to the welfare of the station, and marked with a [current_map.company_name] D-Notice.<BR>
No further feed story additions are allowed while the D-Notice is in effect.<BR><BR>
"}
else
@@ -464,7 +464,7 @@ proc/admin_notice(var/message, var/rights)
i++
dat+="<BLOCKQUOTE style=\"padding:4px;border-left:4px #797979 solid\">[MESSAGE.body] <FONT SIZE=1>\[Likes: <A href='?src=\ref[src];ac_setlikes=1;'><FONT COLOR='DarkGreen'>[MESSAGE.likes]</FONT></A> Dislikes: <A href='?src=\ref[src];ac_setdislikes=1;'><FONT COLOR='maroon'>[MESSAGE.dislikes]</FONT></A>\]</FONT><BR>"
if(MESSAGE.img)
to_chat(usr, browse_rsc(MESSAGE.img, "tmp_photo[i].png"))
send_rsc(usr, MESSAGE.img, "tmp_photo[i].png")
dat+="<img src='tmp_photo[i].png' width = '180'><BR><BR>"
dat+="<FONT SIZE=1><A href='?src=\ref[src];ac_view_comments=1;ac_story=\ref[MESSAGE]'>View Comments</A> <A href='?src=\ref[src];ac_add_comment=1;ac_story=\ref[MESSAGE]'>Add Comment</A> <A href='?src=\ref[src];ac_like=1;ac_story=\ref[MESSAGE]'>Like Story</A> <A href='?src=\ref[src];ac_dislike=1;ac_story=\ref[MESSAGE]'>Dislike Story</A></FONT><BR>"
dat+="<FONT SIZE=1>\[Story by <FONT COLOR='maroon'>[MESSAGE.author] - [MESSAGE.time_stamp]</FONT>\]</FONT></BLOCKQUOTE><BR>"
@@ -484,7 +484,7 @@ proc/admin_notice(var/message, var/rights)
else
for(var/channel in SSnews.network_channels)
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
dat+="<A href='?src=\ref[src];ac_pick_censor_channel=\ref[FC]'>[FC.channel_name]</A> [(FC.censored) ? ("<FONT COLOR='red'>***</FONT>") : null]<BR>"
dat+="<A href='?src=\ref[src];ac_pick_censor_channel=\ref[FC]'>[FC.channel_name]</A> [(FC.censored) ? ("<span class='warning'>***</span>") : null]<BR>"
dat+="<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Cancel</A>"
if(11)
dat+={"
@@ -498,7 +498,7 @@ proc/admin_notice(var/message, var/rights)
else
for(var/channel in SSnews.network_channels)
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
dat+="<A href='?src=\ref[src];ac_pick_d_notice=\ref[FC]'>[FC.channel_name]</A> [(FC.censored) ? ("<FONT COLOR='red'>***</FONT>") : null]<BR>"
dat+="<A href='?src=\ref[src];ac_pick_d_notice=\ref[FC]'>[FC.channel_name]</A> [(FC.censored) ? ("<span class='warning'>***</span>") : null]<BR>"
dat+="<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Back</A>"
if(12)
@@ -522,7 +522,7 @@ proc/admin_notice(var/message, var/rights)
"}
if(src.admincaster_feed_channel.censored)
dat+={"
<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [current_map.company_name] D-Notice.<BR>
<span class='warning'><B>ATTENTION: </B></span>This channel has been deemed as threatening to the welfare of the station, and marked with a [current_map.company_name] D-Notice.<BR>
No further feed story additions are allowed while the D-Notice is in effect.<BR><BR>
"}
else
@@ -580,7 +580,7 @@ proc/admin_notice(var/message, var/rights)
<B>Photo:</B>:
"}
if(SSnews.wanted_issue.img)
to_chat(usr, browse_rsc(SSnews.wanted_issue.img, "tmp_photow.png"))
send_rsc(usr, SSnews.wanted_issue.img, "tmp_photow.png")
dat+="<BR><img src='tmp_photow.png' width = '180'>"
else
dat+="None"
@@ -817,11 +817,11 @@ proc/admin_notice(var/message, var/rights)
if(SSticker.current_state == GAME_STATE_PREGAME)
SSticker.current_state = GAME_STATE_SETTING_UP
log_admin("[usr.key] has started the game.")
message_admins("<font color='blue'>[usr.key] has started the game.</font>")
message_admins("<span class='notice'>[usr.key] has started the game.</span>")
feedback_add_details("admin_verb","SN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return 1
else
to_chat(usr, "<font color='red'>Error: Start Now: Game has already started.</font>")
to_chat(usr, "<span class='warning'>Error: Start Now: Game has already started.</span>")
return 0
/datum/admins/proc/toggleenter()
@@ -1363,7 +1363,7 @@ proc/admin_notice(var/message, var/rights)
if(check_rights(R_ADMIN|R_MOD))
if (H.paralysis == 0)
msg = "has paralyzed [key_name_admin(H)]."
H.visible_message("<font color='#002eb8'><b>OOC Information:</b></font> <font color='red'>[H] has been winded by a member of staff! Please freeze all roleplay involving their character until the matter is resolved! Adminhelp if you have further questions.</font>", "<font color='red'><b>You have been winded by a member of staff! Please stand by until they contact you!</b></font>")
H.visible_message("<font color='#002eb8'><b>OOC Information:</b></font> <span class='warning'>[H] has been winded by a member of staff! Please freeze all roleplay involving their character until the matter is resolved! Adminhelp if you have further questions.</span>", "<span class='warning'><b>You have been winded by a member of staff! Please stand by until they contact you!</b></span>")
H.paralysis = 8000
else
if (alert("The player is currently winded. Do you want to unwind him?", "Unwind player?", "Yes", "No") == "No")
@@ -1371,7 +1371,7 @@ proc/admin_notice(var/message, var/rights)
H.paralysis = 0
msg = "has unparalyzed [key_name_admin(H)]."
H.visible_message("<font color='#002eb8'><b>OOC Information:</b></font> <font color='green'>[H] has been unwinded by a member of staff!</font>", "<font color='red'><b>You have been unwinded by a member of staff!</b></font>")
H.visible_message("<font color='#002eb8'><b>OOC Information:</b></font> <font color='green'>[H] has been unwinded by a member of staff!</font>", "<span class='warning'><b>You have been unwinded by a member of staff!</b></span>")
log_and_message_admins(msg)
feedback_add_details("admin_verb", "WIND")

View File

@@ -27,7 +27,7 @@ proc/admin_attack_log(var/mob/attacker, var/mob/victim, var/attacker_message, va
victim.attack_log += text("\[[time_stamp()]\] <font color='orange'>[key_name(attacker)] - [victim_message]</font>")
jmp_link = " (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[victim.x];Y=[victim.y];Z=[victim.z]'>JMP</a>)"
if(attacker)
attacker.attack_log += text("\[[time_stamp()]\] <font color='red'>[key_name(victim)] - [attacker_message]</font>")
attacker.attack_log += text("\[[time_stamp()]\] <span class='warning'>[key_name(victim)] - [attacker_message]</span>")
jmp_link = " (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[attacker.x];Y=[attacker.y];Z=[attacker.z]'>JMP</a>)"
msg_admin_attack("[key_name_admin(attacker)] [admin_message] [key_name_admin(victim)] (INTENT: [attacker? uppertext(attacker.a_intent) : "N/A"])[jmp_link]",ckey=key_name(attacker),ckey_target=key_name(victim))

View File

@@ -34,7 +34,7 @@
if("singulo", "telesci") //general one-round-only stuff
var/F = investigate_subject2file(subject)
if(!F)
to_chat(src, "<font color='red'>Error: admin_investigate: [INVESTIGATE_DIR][subject] is an invalid path or cannot be accessed.</font>")
to_chat(src, "<span class='warning'>Error: admin_investigate: [INVESTIGATE_DIR][subject] is an invalid path or cannot be accessed.</span>")
return
src << browse(F,"window=investigate[subject];size=800x300")
@@ -43,8 +43,8 @@
if(href_logfile)
src << browse(href_logfile,"window=investigate[subject];size=800x300")
else
to_chat(src, "<font color='red'>Error: admin_investigate: No href logfile found.</font>")
to_chat(src, "<span class='warning'>Error: admin_investigate: No href logfile found.</span>")
return
else
to_chat(src, "<font color='red'>Error: admin_investigate: Href Logging is not on.</font>")
to_chat(src, "<span class='warning'>Error: admin_investigate: Href Logging is not on.</span>")
return

View File

@@ -1,80 +0,0 @@
/*
* A file containing the admin commands for interfacing with the server_greeting datum.
*/
/client/proc/admin_edit_motd()
set name = "Edit MotD"
set category = "Server"
if (!check_rights(R_SERVER))
return
var/new_message = input(usr, "Please edit the Message of the Day as necessary.", "Message of the Day", server_greeting.motd) as message
if (!new_message)
new_message = "<center>This is a palceholder. Pester your staff to change it!</center>"
server_greeting.update_value("motd", new_message)
message_admins("[ckey] has edited the message of the day:<br>[html_encode(new_message)]")
/client/proc/admin_memo_control(task in list("write", "delete"))
set name = "Edit Memos"
set category = "Server"
if (!check_rights(R_ADMIN))
return
switch (task)
if ("write")
admin_memo_write()
if ("delete")
admin_memo_delete()
/client/proc/admin_memo_write()
var/current_memo = ""
if (server_greeting.memo_list.len && server_greeting.memo_list[ckey])
current_memo = server_greeting.memo_list[ckey]
var/new_memo = input(usr, "Please write your memo.", "Memo", current_memo) as message
if (server_greeting.update_value("memo_write", list(ckey, new_memo)))
to_chat(src, "<span class='notice'>Operation carried out successfully.</span>")
message_admins("[ckey] wrote a new memo:<br>[html_encode(new_memo)]")
else
to_chat(src, "<span class='danger'>Error carrying out desired operation.</span>")
return
/client/proc/admin_memo_delete()
if (!server_greeting.memo_list.len)
to_chat(src, "<span class='notice'>No memos are currently saved.</span>")
return
if (!check_rights(R_SERVER))
if (!server_greeting.memo_list[ckey])
to_chat(src, "<span class='warning'>You do not have a memo saved. Cancelling.</span>")
else if (alert("Do you wish to delete your own memo, written on [server_greeting.memo_list[ckey]["date"]]?", "Choices", "Yes", "No") == "Yes")
if (server_greeting.update_value("memo_delete", ckey))
to_chat(src, "<span class='notice'>Operation carried out successfully.</span>")
message_admins("[ckey] has deleted their own memo.")
else
to_chat(src, "<span class='danger'>Error carrying out desired operation.</span>")
else
to_chat(src, "<span class='notice'>Cancelled.</span>")
return
else
var/input = input(usr, "Whose memo shall we delete?", "Remove Memo", null) as null|anything in server_greeting.memo_list
if (!input)
to_chat(src, "<span class='notice'>Cancelled.</span>")
return
if (server_greeting.update_value("memo_delete", input))
to_chat(src, "<span class='notice'>Operation carried out successfully.</span>")
message_admins("[ckey] has deleted the memo of [input].")
else
to_chat(src, "<span class='danger'>Error carrying out desired operation.</span>")
return

View File

@@ -48,7 +48,6 @@ var/list/admin_verbs_admin = list(
/client/proc/rename_silicon, //properly renames silicons,
/client/proc/manage_silicon_laws, // Allows viewing and editing silicon laws. ,
/client/proc/check_antagonists,
/client/proc/admin_memo_control, /*admin memo system. show/delete/write. +SERVER needed to delete admin memos of others*/
/client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/
/client/proc/toggleprayers, /*toggles prayers on/off*/
// /client/proc/toggle_hear_deadcast, /*toggles whether we hear deadchat*/
@@ -172,7 +171,6 @@ var/list/admin_verbs_server = list(
/client/proc/toggle_random_events,
/client/proc/check_customitem_activity,
/client/proc/nanomapgen_DumpImage,
/client/proc/admin_edit_motd,
/client/proc/toggle_recursive_explosions,
/client/proc/restart_controller,
/client/proc/cmd_ss_panic,
@@ -273,7 +271,6 @@ var/list/admin_verbs_hideable = list(
/client/proc/toggle_antagHUD_use,
/client/proc/toggle_antagHUD_restrictions,
/client/proc/event_manager_panel,
/client/proc/admin_edit_motd,
/client/proc/empty_ai_core_toggle_latejoin,
/client/proc/empty_ai_core_toggle_latejoin,
/client/proc/cmd_admin_change_custom_event,
@@ -301,7 +298,6 @@ var/list/admin_verbs_hideable = list(
/client/proc/add_client_color,
/datum/admins/proc/force_mode_latespawn,
/datum/admins/proc/toggleenter,
/client/proc/admin_memo_control,
/datum/admins/proc/toggleguests,
/datum/admins/proc/capture_map_part,
/client/proc/Set_Holiday,
@@ -569,13 +565,13 @@ var/list/admin_verbs_cciaa = list(
ghost.reenter_corpse()
log_admin("[src] reentered their corpose using aghost.",admin_key=key_name(src))
else
to_chat(ghost, "<font color='red'>Error: Aghost: Can't reenter corpse.</font>")
to_chat(ghost, "<span class='warning'>Error: Aghost: Can't reenter corpse.</span>")
return
feedback_add_details("admin_verb","P") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
else if(istype(mob,/mob/abstract/new_player))
to_chat(src, "<font color='red'>Error: Aghost: Can't admin-ghost whilst in the lobby. Join or Observe first.</font>")
to_chat(src, "<span class='warning'>Error: Aghost: Can't admin-ghost whilst in the lobby. Join or Observe first.</span>")
else
//ghostize
var/mob/body = mob
@@ -728,7 +724,7 @@ var/list/admin_verbs_cciaa = list(
C.cure_all_traumas(TRUE, CURE_ADMIN)
log_and_message_admins("<span class='notice'>cured [key_name(C)]'s traumas.</span>")
feedback_add_details("admin_verb","TB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!\
feedback_add_details("admin_verb","TB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/add_traumas(mob/T as mob in mob_list)
set category = "Fun"

View File

@@ -87,13 +87,13 @@ NOTE: It checks usr by default. Supply the "user" argument if you wish to check
return 1
else
if(show_msg)
to_chat(user, "<font color='red'>Error: You do not have sufficient rights to do that. You require one of the following flags:[rights2text(rights_required," ")].</font>")
to_chat(user, "<span class='warning'>Error: You do not have sufficient rights to do that. You require one of the following flags:[rights2text(rights_required," ")].</span>")
else
if(user.client.holder)
return 1
else
if(show_msg)
to_chat(user, "<font color='red'>Error: You are not an admin.</font>")
to_chat(user, "<span class='warning'>Error: You are not an admin.</span>")
return 0
//probably a bit iffy - will hopefully figure out a better solution
@@ -105,7 +105,7 @@ NOTE: It checks usr by default. Supply the "user" argument if you wish to check
if(usr.client.holder.rights != other.holder.rights)
if( (usr.client.holder.rights & other.holder.rights) == other.holder.rights )
return 1 //we have all the rights they have and more
to_chat(usr, "<font color='red'>Error: Cannot proceed. They have more or equal rights to us.</font>")
to_chat(usr, "<span class='warning'>Error: Cannot proceed. They have more or equal rights to us.</span>")
return 0
/client/proc/deadmin()

View File

@@ -24,7 +24,7 @@
var/cap = generate_image(tx ,ty ,tz ,range, CAPTURE_MODE_PARTIAL, null, ligths, 1)
var/file_name = "map_capture_x[tx]_y[ty]_z[tz]_r[range].png"
to_chat(usr, "Saved capture in cache as [file_name].")
to_chat(usr, browse_rsc(cap, file_name))
send_rsc(usr, cap, file_name)
else
to_chat(usr, "Target coordinates are incorrect.")
@@ -33,7 +33,7 @@
var/cap = generate_image(currentx ,currenty ,currentz ,16, CAPTURE_MODE_PARTIAL, null, ligths, 1)
var/file_name = "map_capture_x[currentx]_y[currenty]_z[currentz]_r16.png"
to_chat(usr, "Saved capture in cache as [file_name].")
to_chat(usr, browse_rsc(cap, file_name))
send_rsc(usr, cap, file_name)
currentx = currentx + 16
spawn (6)
del(cap)
@@ -45,7 +45,7 @@
var/cap = generate_image(currentx ,currenty ,currentz ,16, CAPTURE_MODE_PARTIAL, null, ligths, 1)
var/file_name = "map_capture_x[currentx]_y[currenty]_z[currentz]_r16.png"
to_chat(usr, "Saved capture in cache as [file_name].")
to_chat(usr, browse_rsc(cap, file_name))
send_rsc(usr, cap, file_name)
currentx = currentx + 16
spawn (6)
del(cap)

View File

@@ -10,7 +10,7 @@ datum/admins/proc/notes_show(var/ckey)
datum/admins/proc/notes_gethtml(var/ckey)
var/savefile/notesfile = new(NOTESFILE)
if(!notesfile) return "<font color='red'>Error: Cannot access [NOTESFILE]</font>"
if(!notesfile) return "<span class='warning'>Error: Cannot access [NOTESFILE]</span>"
if(ckey)
. = "<b>Notes for <a href='?src=\ref[src];notes=show'>[ckey]</a>:</b> <a href='?src=\ref[src];notes=add;ckey=[ckey]'>\[+\]</a> <a href='?src=\ref[src];notes=remove;ckey=[ckey]'>\[-\]</a><br>"
notesfile.cd = "/[ckey]"

View File

@@ -827,7 +827,7 @@
//Job + antagonist
if(M.mind)
special_role_description = "Role: <b>[M.mind.assigned_role]</b>; Antagonist: <font color='red'><b>[M.mind.special_role]</b></font>; Has been rev: [(M.mind.has_been_rev)?"Yes":"No"]"
special_role_description = "Role: <b>[M.mind.assigned_role]</b>; Antagonist: <span class='warning'><b>[M.mind.special_role]</b></span>; Has been rev: [(M.mind.has_been_rev)?"Yes":"No"]"
else
special_role_description = "Role: <i>Mind datum missing</i> Antagonist: <i>Mind datum missing</i>; Has been rev: <i>Mind datum missing</i>;"
@@ -838,7 +838,7 @@
switch (M.stat)
if (0) status = "Alive"
if (1) status = "<font color='orange'><b>Unconscious</b></font>"
if (2) status = "<font color='red'><b>Dead</b></font>"
if (2) status = "<span class='warning'><b>Dead</b></span>"
health_description = "Status: [status]"
health_description += "<BR>Oxy: [L.getOxyLoss()] - Tox: [L.getToxLoss()] - Fire: [L.getFireLoss()] - Brute: [L.getBruteLoss()] - Clone: [L.getCloneLoss()] - Brain: [L.getBrainLoss()]"
else
@@ -853,7 +853,7 @@
//GenDer
switch(M.gender)
if(MALE,FEMALE) gender_description = "[M.gender]"
else gender_description = "<font color='red'><b>[M.gender]</b></font>"
else gender_description = "<span class='warning'><b>[M.gender]</b></span>"
var/dat = "<b>Info about [M.name]:</b><br>"
dat += "Mob type: [M.type]<br>"

View File

@@ -13,27 +13,27 @@
data += "<b>If you do not know what these do, you shouldn't be touching them!</b><hr>"
data += "<h2>Hub Visibility Setting:</h2><br>"
data += "Currently [world.visibility ? "<font color='green'>VISIBLE</font>" : "<font color='red'>HIDDEN</font>"]. <a href='?_src_=holder;access_control=hub'>Toggle</a><br><hr>"
data += "Currently [world.visibility ? "<font color='green'>VISIBLE</font>" : "<span class='warning'>HIDDEN</span>"]. <a href='?_src_=holder;access_control=hub'>Toggle</a><br><hr>"
data += "<h2>IP Intel Settings:</h2><br><ul>"
data += "<li>Current warning level: [config.ipintel_rating_bad ? "[config.ipintel_rating_bad]" : "<font color='red'>DISABLED</font>"]. <a href='?_src_=holder;access_control=intel_bad'>Edit</a></li>"
data += "<li>Current kick level: [config.ipintel_rating_kick ? "[config.ipintel_rating_kick]" : "<font color='red'>DISABLED</font>"]. <a href='?_src_=holder;access_control=intel_kick'>Edit</a></li>"
data += "<li>Current warning level: [config.ipintel_rating_bad ? "[config.ipintel_rating_bad]" : "<span class='warning'>DISABLED</span>"]. <a href='?_src_=holder;access_control=intel_bad'>Edit</a></li>"
data += "<li>Current kick level: [config.ipintel_rating_kick ? "[config.ipintel_rating_kick]" : "<span class='warning'>DISABLED</span>"]. <a href='?_src_=holder;access_control=intel_kick'>Edit</a></li>"
data += "</ul><hr>"
data += "<h2>Player Age Settings:</h2><br><ul>"
data += "<li>New players: [config.access_deny_new_players ? "<font color='red'>DENIED</font>" : "<font color='green'>ALLOWED</font>"]. <a href='?_src_=holder;access_control=new_players;'>Toggle</a></li>"
data += "<li>Account age restriction: [config.access_deny_new_accounts == -1 ? "<font color='red'>DISABLED</font>" : "[config.access_deny_new_accounts] DAYS"]. <a href='?_src_=holder;access_control=new_accounts;'>Edit</a></li>"
data += "<li>New players: [config.access_deny_new_players ? "<span class='warning'>DENIED</span>" : "<font color='green'>ALLOWED</font>"]. <a href='?_src_=holder;access_control=new_players;'>Toggle</a></li>"
data += "<li>Account age restriction: [config.access_deny_new_accounts == -1 ? "<span class='warning'>DISABLED</span>" : "[config.access_deny_new_accounts] DAYS"]. <a href='?_src_=holder;access_control=new_accounts;'>Edit</a></li>"
data += "</ul><hr>"
data += "<h2>VM Detection Settings:</h2><br><ul>"
data += "<li>VM identifier count to warn on: [config.access_warn_vms ? "[config.access_warn_vms]" : "<font color='red'>DISABLED</font>"]. <a href='?_src_=holder;access_control=vm_warn;'>Edit</a></li>"
data += "<li>VM identifier count to kick on: [config.access_deny_vms ? "[config.access_deny_vms]" : "<font color='red'>DISABLED</font>"]. <a href='?_src_=holder;access_control=vm_kick;'>Edit</a></li>"
data += "<li>VM identifier count to warn on: [config.access_warn_vms ? "[config.access_warn_vms]" : "<span class='warning'>DISABLED</span>"]. <a href='?_src_=holder;access_control=vm_warn;'>Edit</a></li>"
data += "<li>VM identifier count to kick on: [config.access_deny_vms ? "[config.access_deny_vms]" : "<span class='warning'>DISABLED</span>"]. <a href='?_src_=holder;access_control=vm_kick;'>Edit</a></li>"
data += "</ul>"
data += "<h2>Guest join settings:</h2><br><ul>"
data += "<li>Guests [(config.guests_allowed || config.external_auth) ? "<font color='green'>CAN</font>" : "<font color='red'>CAN NOT</font>"] join.</li>"
data += "<li>Guests [config.guests_allowed ? "<font color='green'>CAN</font>" : "<font color='red'>CAN NOT</font>"] play. <a href='?_src_=holder;access_control=guest;'>Toggle</a></li>"
data += "<li>External authetification: [config.external_auth ? "<font color='green'>ENABLED</font>" : "<font color='red'>DISABLED</font>"]. <a href='?_src_=holder;access_control=external_auth;'>Toggle</a></li>"
data += "<li>Guests [(config.guests_allowed || config.external_auth) ? "<font color='green'>CAN</font>" : "<span class='warning'>CAN NOT</span>"] join.</li>"
data += "<li>Guests [config.guests_allowed ? "<font color='green'>CAN</font>" : "<span class='warning'>CAN NOT</span>"] play. <a href='?_src_=holder;access_control=guest;'>Toggle</a></li>"
data += "<li>External authetification: [config.external_auth ? "<font color='green'>ENABLED</font>" : "<span class='warning'>DISABLED</span>"]. <a href='?_src_=holder;access_control=external_auth;'>Toggle</a></li>"
data += "</ul>"
config_window.set_user(src.mob)

Some files were not shown because too many files have changed in this diff Show More