mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-26 10:02:28 +00:00
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:
1
.github/CODEOWNERS
vendored
1
.github/CODEOWNERS
vendored
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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"
|
||||
@@ -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 " "
|
||||
#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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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) )
|
||||
/////////////////////////
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
83
code/controllers/subsystems/chat.dm
Normal file
83
code/controllers/subsystems/chat.dm
Normal 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
|
||||
@@ -189,7 +189,6 @@
|
||||
SearchVar(debugobj)
|
||||
SearchVar(mods)
|
||||
SearchVar(gravity_is_on)
|
||||
SearchVar(server_greeting)
|
||||
SearchVar(awaydestinations)
|
||||
SearchVar(fileaccess_timer)
|
||||
SearchVar(custom_event_msg)
|
||||
|
||||
32
code/controllers/subsystems/ping.dm
Normal file
32
code/controllers/subsystems/ping.dm
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>"
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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++
|
||||
|
||||
@@ -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
|
||||
@@ -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)]"
|
||||
|
||||
@@ -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 *
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) )
|
||||
/////////////////////////
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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))
|
||||
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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'>	<font color='green'>\[Authenticated\]</font></a>	/"
|
||||
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'>	<font color='red'>\[Unauthenticated\]</font></a>	/"
|
||||
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'>	<span class='warning'>\[Unauthenticated\]</span></a>	/"
|
||||
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'>	[++i]. Modify Spam Filter</a><br></dd>"
|
||||
else
|
||||
for(var/n = ++i; n <= optioncount; n++)
|
||||
dat += "<dd><font color='blue'>	[n]. ---------------</font><br></dd>"
|
||||
dat += "<dd><span class='notice'>	[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>"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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."))
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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(..())
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)))
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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].")
|
||||
|
||||
@@ -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]")
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"))
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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])
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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"])
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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++
|
||||
|
||||
@@ -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.)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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")
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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"
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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]"
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user