mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-30 00:29:02 +01:00
World "?status" expansion, Topic() rework
* World "?status" expansion * New helper procs for shuttles * fix * a fix
This commit is contained in:
committed by
duncathan salt
parent
3b3bdcdb75
commit
04ce5e42cd
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user