World "?status" expansion, Topic() rework

* World "?status" expansion

* New helper procs for shuttles

* fix

* a fix
This commit is contained in:
Core0verload
2016-04-06 02:15:25 -06:00
committed by duncathan salt
parent 3b3bdcdb75
commit 04ce5e42cd
7 changed files with 86 additions and 69 deletions
+7 -7
View File
@@ -26,10 +26,10 @@
#define EMPED 16 // temporary broken by EMP pulse
//shuttle mode defines
#define SHUTTLE_IDLE 0
#define SHUTTLE_RECALL 1
#define SHUTTLE_CALL 2
#define SHUTTLE_DOCKED 3
#define SHUTTLE_STRANDED 4
#define SHUTTLE_ESCAPE 5
#define SHUTTLE_ENDGAME 6
#define SHUTTLE_IDLE 0
#define SHUTTLE_RECALL 1
#define SHUTTLE_CALL 2
#define SHUTTLE_DOCKED 3
#define SHUTTLE_STRANDED 4
#define SHUTTLE_ESCAPE 5
#define SHUTTLE_ENDGAME 6
+4 -1
View File
@@ -32,7 +32,8 @@
var/log_attack = 0 // log attack messages
var/log_adminchat = 0 // log admin chat messages
var/log_pda = 0 // log pda messages
var/log_hrefs = 0 // logs all links clicked in-game. Could be used for debugging and tracking down exploits
var/log_hrefs = 0 // log all links clicked in-game. Could be used for debugging and tracking down exploits
var/log_world_topic = 0 // log all world.Topic() calls
var/sql_enabled = 0 // for sql switching
var/allow_admin_ooccolor = 0 // Allows admins with relevant permissions to have their own ooc colour
var/allow_vote_restart = 0 // allow votes to restart
@@ -281,6 +282,8 @@
config.log_pda = 1
if("log_hrefs")
config.log_hrefs = 1
if("log_world_topic")
config.log_world_topic = 1
if("allow_admin_ooccolor")
config.allow_admin_ooccolor = 1
if("allow_vote_restart")
+4 -27
View File
@@ -83,20 +83,9 @@
remove_display()
if(1) //emergency shuttle timer
if(SSshuttle.emergency.timer)
var/line1
var/line2 = get_shuttle_timer()
switch(SSshuttle.emergency.mode)
if(SHUTTLE_RECALL)
line1 = "-RCL-"
if(SHUTTLE_CALL)
line1 = "-ETA-"
if(SHUTTLE_DOCKED)
line1 = "-ETD-"
if(SHUTTLE_ESCAPE)
line1 = "-ESC-"
if(SHUTTLE_STRANDED)
line1 = "-ERR-"
line2 = "??:??"
var/line1 = "-[SSshuttle.emergency.getModeStr()]-"
var/line2 = SSshuttle.emergency.getTimerStr()
if(length(line2) > CHARS_PER_LINE)
line2 = "Error!"
update_display(line1, line2)
@@ -133,7 +122,7 @@
line2 = "Docked"
else
line1 = "CARGO"
line2 = get_supply_shuttle_timer()
line2 = SSshuttle.supply.getTimerStr()
if(lentext(line2) > CHARS_PER_LINE)
line2 = "Error"
@@ -171,18 +160,6 @@
if(maptext != new_text)
maptext = new_text
/obj/machinery/status_display/proc/get_shuttle_timer()
var/timeleft = SSshuttle.emergency.timeLeft()
if(timeleft > 0)
return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]"
return "00:00"
/obj/machinery/status_display/proc/get_supply_shuttle_timer()
var/timeleft = SSshuttle.supply.timeLeft()
if(timeleft > 0)
return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]"
return "00:00"
/obj/machinery/status_display/proc/remove_display()
if(overlays.len)
overlays.Cut()
+3 -14
View File
@@ -584,21 +584,10 @@ var/next_mob_id = 0
if (nextmap && istype(nextmap))
stat(null, "Next Map: [nextmap.friendlyname]")
stat(null, "Server Time: [time2text(world.realtime, "YYYY-MM-DD hh:mm")]")
var/ETA
switch(SSshuttle.emergency.mode)
if(SHUTTLE_RECALL)
ETA = "RCL"
if(SHUTTLE_CALL)
ETA = "ETA"
if(SHUTTLE_DOCKED)
ETA = "ETD"
if(SHUTTLE_ESCAPE)
ETA = "ESC"
if(SHUTTLE_STRANDED)
ETA = "ERR"
var/ETA = SSshuttle.emergency.getModeStr()
if(ETA)
var/timeleft = SSshuttle.emergency.timeLeft()
stat(null, "[ETA]-[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]")
stat(null, "[ETA] [SSshuttle.emergency.getTimerStr()]")
if(client && client.holder)
+29 -2
View File
@@ -168,10 +168,10 @@
var/area/shuttle/areaInstance
var/timer //used as a timer (if you want time left to complete move, use timeLeft proc)
var/mode = SHUTTLE_IDLE //current shuttle mode (see global defines)
var/mode = SHUTTLE_IDLE //current shuttle mode (see /__DEFINES/stat.dm)
var/callTime = 50 //time spent in transit (deciseconds)
var/roundstart_move //id of port to send shuttle to at roundstart
var/travelDir = 0 //direction the shuttle would travel in
var/travelDir = 0 //direction the shuttle would travel in
var/obj/docking_port/stationary/destination
var/obj/docking_port/stationary/previous
@@ -519,6 +519,33 @@
return round(callTime/divisor, 1)
return max( round((timer+callTime-world.time)/divisor,1), 0 )
// returns 3-letter mode string, used by status screens and mob status panel
/obj/docking_port/mobile/proc/getModeStr()
switch(mode)
if(SHUTTLE_RECALL)
return "RCL"
if(SHUTTLE_CALL)
return "ETA"
if(SHUTTLE_DOCKED)
return "ETD"
if(SHUTTLE_ESCAPE)
return "ESC"
if(SHUTTLE_STRANDED)
return "ERR"
return ""
// returns 5-letter timer string, used by status screens and mob status panel
/obj/docking_port/mobile/proc/getTimerStr()
if(mode == SHUTTLE_STRANDED)
return "--:--"
var/timeleft = timeLeft()
if(timeleft > 0)
return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]"
else
return "00:00"
/obj/docking_port/mobile/proc/getStatusText()
var/obj/docking_port/stationary/dockedAt = get_docked()
. = (dockedAt && dockedAt.name) ? dockedAt.name : "unknown"
+36 -18
View File
@@ -73,31 +73,36 @@ var/global/list/map_transition_config = MAP_TRANSITION_CONFIG
var/last_irc_status = 0
/world/Topic(T, addr, master, key)
diary << "TOPIC: \"[T]\", from:[addr], master:[master], key:[key]"
if(config && config.log_world_topic)
diary << "TOPIC: \"[T]\", from:[addr], master:[master], key:[key]"
if(T == "ping")
var/list/input = params2list(T)
var/key_valid = (global.comms_allowed && input["key"] == global.comms_key)
if("ping" in input)
var/x = 1
for (var/client/C in clients)
x++
return x
else if(T == "players")
else if("players" in input)
var/n = 0
for(var/mob/M in player_list)
if(M.client)
n++
return n
else if(T == "ircstatus")
else if("ircstatus" in input)
if(world.time - last_irc_status < IRC_STATUS_THROTTLE)
return
var/list/adm = get_admin_counts()
send2irc("Status", "Admins: [Sum(adm)] (Active: [adm["admins"]] AFK: [adm["afkadmins"]] Stealth: [adm["stealthadmins"]] Skipped: [adm["noflagadmins"]]). Players: [clients.len] (Active: [get_active_player_count()]). Mode: [master_mode].")
var/status = "Admins: [Sum(adm)] (Active: [adm["admins"]] AFK: [adm["afkadmins"]] Stealth: [adm["stealthadmins"]] Skipped: [adm["noflagadmins"]]). "
status += "Players: [clients.len] (Active: [get_active_player_count()]). Mode: [master_mode]."
send2irc("Status", status)
last_irc_status = world.time
else if(T == "status")
else if("status" in input)
var/list/s = list()
// Please add new status indexes under the old ones, for the server banner (until that gets reworked)
s["version"] = game_version
s["mode"] = master_mode
s["respawn"] = config ? abandon_allowed : 0
@@ -115,20 +120,33 @@ var/last_irc_status = 0
s["gamestate"] = 1
if(ticker)
s["gamestate"] = ticker.current_state
s["map_name"] = map_name ? map_name : "Unknown"
if(key_valid && ticker && ticker.mode)
s["real_mode"] = ticker.mode.name
// Key-authed callers may know the truth behind the "secret"
s["security_level"] = get_security_level()
s["round_duration"] = round(world.time/10)
// Amount of world's ticks in seconds, useful for calculating round duration
if(SSshuttle && SSshuttle.emergency)
s["shuttle_mode"] = SSshuttle.emergency.mode
// Shuttle status, see /__DEFINES/stat.dm
s["shuttle_timer"] = SSshuttle.emergency.timeLeft()
// Shuttle timer, in seconds
return list2params(s)
else if(copytext(T,1,9) == "announce")
var/input[] = params2list(T)
if(global.comms_allowed)
if(input["key"] != global.comms_key)
return "Bad Key"
else
else if("announce" in input)
if(!key_valid)
return "Bad Key"
else
#define CHAT_PULLR 64 //defined in preferences.dm, but not available here at compilation time
for(var/client/C in clients)
if(C.prefs && (C.prefs.chat_toggles & CHAT_PULLR))
C << "<span class='announce'>PR: [input["announce"]]</span>"
for(var/client/C in clients)
if(C.prefs && (C.prefs.chat_toggles & CHAT_PULLR))
C << "<span class='announce'>PR: [input["announce"]]</span>"
#undef CHAT_PULLR
/world/Reboot(var/reason, var/feedback_c, var/feedback_r, var/time)
@@ -183,7 +201,7 @@ var/inerror = 0
inerror = 1
//newline at start is because of the "runtime error" byond prints that can't be timestamped.
e.name = "\n\[[time2text(world.timeofday,"hh:mm:ss")]\][e.name]"
//this is done this way rather then replace text to pave the way for processing the runtime reports more thoroughly
// (and because runtimes end with a newline, and we don't want to basically print an empty time stamp)
var/list/split = splittext(e.desc, "\n")
@@ -193,7 +211,7 @@ var/inerror = 0
e.desc = jointext(split, "\n")
inerror = 0
return ..(e)
/world/proc/load_mode()
var/list/Lines = file2list("data/mode.txt")
if(Lines.len)
+3
View File
@@ -65,6 +65,9 @@ LOG_LAW
## log all Topic() calls (for use by coders in tracking down Topic issues)
# LOG_HREFS
## log all world.Topic() calls
# LOG_WORLD_TOPIC
## disconnect players who did nothing during 10 minutes
# KICK_INACTIVE