This commit is contained in:
@@ -76,7 +76,7 @@
|
||||
circuit = /obj/item/circuitboard/computer/mining_shuttle
|
||||
shuttleId = "mining"
|
||||
possible_destinations = "mining_home;mining_away;landing_zone_dock;mining_public"
|
||||
no_destination_swap = 1
|
||||
no_destination_swap = TRUE
|
||||
var/static/list/dumb_rev_heads = list()
|
||||
|
||||
/obj/machinery/computer/shuttle/mining/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
|
||||
|
||||
@@ -86,7 +86,7 @@ GLOBAL_LIST_INIT(all_security_levels, list("green", "blue", "amber", "red", "del
|
||||
if(is_station_level(FA.z))
|
||||
FA.update_icon()
|
||||
for(var/obj/machinery/computer/shuttle/pod/pod in GLOB.machines)
|
||||
pod.admin_controlled = 0
|
||||
pod.admin_controlled = FALSE
|
||||
if(SEC_LEVEL_DELTA)
|
||||
minor_announce(CONFIG_GET(string/alert_delta), "Attention! Delta security level reached!",1)
|
||||
if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
|
||||
@@ -102,7 +102,7 @@ GLOBAL_LIST_INIT(all_security_levels, list("green", "blue", "amber", "red", "del
|
||||
if(is_station_level(FA.z))
|
||||
FA.update_icon()
|
||||
for(var/obj/machinery/computer/shuttle/pod/pod in GLOB.machines)
|
||||
pod.admin_controlled = 0
|
||||
pod.admin_controlled = FALSE
|
||||
if(level >= SEC_LEVEL_RED)
|
||||
for(var/obj/machinery/door/D in GLOB.machines)
|
||||
if(D.red_alert_access)
|
||||
|
||||
@@ -5,62 +5,108 @@
|
||||
icon_keyboard = "tech_key"
|
||||
light_color = LIGHT_COLOR_CYAN
|
||||
req_access = list( )
|
||||
/// ID of the attached shuttle
|
||||
var/shuttleId
|
||||
/// Possible destinations of the attached shuttle
|
||||
var/possible_destinations = ""
|
||||
var/admin_controlled
|
||||
var/no_destination_swap = 0
|
||||
/// Variable dictating if the attached shuttle requires authorization from the admin staff to move
|
||||
var/admin_controlled = FALSE
|
||||
/// Variable dictating if the attached shuttle can change destinations mid-flight
|
||||
var/no_destination_swap = FALSE
|
||||
/// ID of the currently selected destination of the attached shuttle
|
||||
var/destination
|
||||
/// Authorization request cooldown to prevent request spam to admin staff
|
||||
COOLDOWN_DECLARE(request_cooldown)
|
||||
|
||||
/obj/machinery/computer/shuttle/ui_interact(mob/user)
|
||||
. = ..()
|
||||
/obj/machinery/computer/shuttle/ui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "ShuttleConsole", name)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/shuttle/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
var/list/options = params2list(possible_destinations)
|
||||
var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId)
|
||||
var/dat = "Status: [M ? M.getStatusText() : "*Missing*"]<br><br>"
|
||||
if(M)
|
||||
var/destination_found
|
||||
for(var/obj/docking_port/stationary/S in SSshuttle.stationary)
|
||||
if(!options.Find(S.id))
|
||||
continue
|
||||
if(!M.check_dock(S, silent=TRUE))
|
||||
continue
|
||||
destination_found = 1
|
||||
dat += "<A href='?src=[REF(src)];move=[S.id]'>Send to [S.name]</A><br>"
|
||||
if(!destination_found)
|
||||
dat += "<B>Shuttle Locked</B><br>"
|
||||
if(admin_controlled)
|
||||
dat += "Authorized personnel only<br>"
|
||||
dat += "<A href='?src=[REF(src)];request=1]'>Request Authorization</A><br>"
|
||||
dat += "<a href='?src=[REF(user)];mach_close=computer'>Close</a>"
|
||||
data["docked_location"] = M ? M.get_status_text_tgui() : "Unknown"
|
||||
data["status"] = M.mode == SHUTTLE_IGNITING ? "Igniting" : M.mode != SHUTTLE_IDLE ? "In Transit" : "Idle"
|
||||
data["locations"] = list()
|
||||
data["locked"] = FALSE
|
||||
data["authorization_required"] = admin_controlled
|
||||
data["timer_str"] = M ? M.getTimerStr() : "00:00"
|
||||
data["destination"] = destination
|
||||
if(admin_controlled)
|
||||
data["status"] = "Unauthorized Access"
|
||||
if(!M)
|
||||
data["status"] = "Missing"
|
||||
return data
|
||||
for(var/obj/docking_port/stationary/S in SSshuttle.stationary)
|
||||
if(!options.Find(S.id))
|
||||
continue
|
||||
if(!M.check_dock(S, silent = TRUE))
|
||||
continue
|
||||
var/list/location_data = list(
|
||||
id = S.id,
|
||||
name = S.name
|
||||
)
|
||||
data["locations"] += list(location_data)
|
||||
if(length(data["locations"]) == 1)
|
||||
for(var/location in data["locations"])
|
||||
destination = location["id"]
|
||||
data["destination"] = destination
|
||||
if(!length(data["locations"]))
|
||||
data["locked"] = TRUE
|
||||
data["status"] = "Locked"
|
||||
return data
|
||||
|
||||
var/datum/browser/popup = new(user, "computer", M ? M.name : "shuttle", 300, 200)
|
||||
popup.set_content("<center>[dat]</center>")
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/computer/shuttle/Topic(href, href_list)
|
||||
if(..())
|
||||
/obj/machinery/computer/shuttle/ui_act(action, params)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
usr.set_machine(src)
|
||||
src.add_fingerprint(usr)
|
||||
if(!allowed(usr))
|
||||
to_chat(usr, "<span class='danger'>Access denied.</span>")
|
||||
return
|
||||
|
||||
if(href_list["move"])
|
||||
var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId)
|
||||
if(M.launch_status == ENDGAME_LAUNCHED)
|
||||
to_chat(usr, "<span class='warning'>You've already escaped. Never going back to that place again!</span>")
|
||||
return
|
||||
if(no_destination_swap)
|
||||
if(M.mode != SHUTTLE_IDLE)
|
||||
to_chat(usr, "<span class='warning'>Shuttle already in transit.</span>")
|
||||
switch(action)
|
||||
if("move")
|
||||
var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId)
|
||||
if(M.launch_status == ENDGAME_LAUNCHED)
|
||||
to_chat(usr, "<span class='warning'>You've already escaped. Never going back to that place again!</span>")
|
||||
return
|
||||
switch(SSshuttle.moveShuttle(shuttleId, href_list["move"], 1))
|
||||
if(0)
|
||||
say("Shuttle departing. Please stand away from the doors.")
|
||||
log_shuttle("[key_name(usr)] has sent shuttle \"[M]\" towards \"[href_list["move"]]\", using [src].")
|
||||
if(1)
|
||||
to_chat(usr, "<span class='warning'>Invalid shuttle requested.</span>")
|
||||
else
|
||||
to_chat(usr, "<span class='notice'>Unable to comply.</span>")
|
||||
if(no_destination_swap)
|
||||
if(M.mode == SHUTTLE_RECHARGING)
|
||||
to_chat(usr, "<span class='warning'>Shuttle engines are not ready for use.</span>")
|
||||
return
|
||||
if(M.mode != SHUTTLE_IDLE)
|
||||
to_chat(usr, "<span class='warning'>Shuttle already in transit.</span>")
|
||||
return
|
||||
var/list/options = params2list(possible_destinations)
|
||||
if(!(params["shuttle_id"] in options))
|
||||
log_admin("[usr] attempted to href dock exploit on [src] with target location \"[params["shuttle_id"]]\"")
|
||||
message_admins("[usr] just attempted to href dock exploit on [src] with target location \"[params["shuttle_id"]]\"")
|
||||
return
|
||||
switch(SSshuttle.moveShuttle(shuttleId, params["shuttle_id"], 1))
|
||||
if(0)
|
||||
say("Shuttle departing. Please stand away from the doors.")
|
||||
log_shuttle("[key_name(usr)] has sent shuttle \"[M]\" towards \"[params["shuttle_id"]]\", using [src].")
|
||||
return TRUE
|
||||
if(1)
|
||||
to_chat(usr, "<span class='warning'>Invalid shuttle requested.</span>")
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Unable to comply.</span>")
|
||||
if("set_destination")
|
||||
var/target_destination = params["destination"]
|
||||
if(target_destination)
|
||||
destination = target_destination
|
||||
return TRUE
|
||||
if("request")
|
||||
if(!COOLDOWN_FINISHED(src, request_cooldown))
|
||||
to_chat(usr, "<span class='warning'>CentCom is still processing last authorization request!</span>")
|
||||
return
|
||||
COOLDOWN_START(src, request_cooldown, 1 MINUTES)
|
||||
to_chat(usr, "<span class='notice'>Your request has been received by CentCom.</span>")
|
||||
to_chat(GLOB.admins, "<b>FERRY: <font color='#3d5bc3'>[ADMIN_LOOKUPFLW(usr)] (<A HREF='?_src_=holder;[HrefToken()];secrets=moveferry'>Move Ferry</a>)</b> is requesting to move the transport ferry to CentCom.</font>")
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/computer/shuttle/emag_act(mob/user)
|
||||
. = ..()
|
||||
|
||||
@@ -528,7 +528,7 @@
|
||||
|
||||
/obj/machinery/computer/shuttle/pod
|
||||
name = "pod control computer"
|
||||
admin_controlled = 1
|
||||
admin_controlled = TRUE
|
||||
possible_destinations = "pod_asteroid"
|
||||
icon = 'icons/obj/terminals.dmi'
|
||||
icon_state = "dorm_available"
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
shuttleId = "ferry"
|
||||
possible_destinations = "ferry_home;ferry_away"
|
||||
req_access = list(ACCESS_CENT_GENERAL)
|
||||
|
||||
var/allow_silicons = FALSE
|
||||
var/allow_emag = FALSE
|
||||
|
||||
@@ -24,17 +23,6 @@
|
||||
/obj/machinery/computer/shuttle/ferry/request
|
||||
name = "ferry console"
|
||||
circuit = /obj/item/circuitboard/computer/ferry/request
|
||||
var/last_request //prevents spamming admins
|
||||
var/cooldown = 600
|
||||
possible_destinations = "ferry_home;ferry_away"
|
||||
req_access = list(ACCESS_CENT_GENERAL)
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
|
||||
/obj/machinery/computer/shuttle/ferry/request/Topic(href, href_list)
|
||||
..()
|
||||
if(href_list["request"])
|
||||
if(last_request && (last_request + cooldown > world.time))
|
||||
return
|
||||
last_request = world.time
|
||||
to_chat(usr, "<span class='notice'>Your request has been received by CentCom.</span>")
|
||||
to_chat(GLOB.admins, "<b>FERRY: <font color='#3d5bc3'>[ADMIN_LOOKUPFLW(usr)] (<A HREF='?_src_=holder;[HrefToken()];secrets=moveferry'>Move Ferry</a>)</b> is requesting to move the transport ferry to CentCom.</font>")
|
||||
|
||||
@@ -711,6 +711,26 @@
|
||||
else
|
||||
return "00:00"
|
||||
|
||||
/**
|
||||
* Gets shuttle location status in a form of string for tgui interfaces
|
||||
*/
|
||||
/obj/docking_port/mobile/proc/get_status_text_tgui()
|
||||
var/obj/docking_port/stationary/dockedAt = get_docked()
|
||||
var/docked_at = dockedAt?.name || "Unknown"
|
||||
if(istype(dockedAt, /obj/docking_port/stationary/transit))
|
||||
if(timeLeft() > 1 HOURS)
|
||||
return "Hyperspace"
|
||||
else
|
||||
var/obj/docking_port/stationary/dst
|
||||
if(mode == SHUTTLE_RECALL)
|
||||
dst = previous
|
||||
else
|
||||
dst = destination
|
||||
return "In transit towards [dst?.name || "unknown location"]"
|
||||
else if(mode == SHUTTLE_RECHARGING)
|
||||
return "[docked_at], recharging [getTimerStr()]"
|
||||
else
|
||||
return docked_at
|
||||
|
||||
/obj/docking_port/mobile/proc/getStatusText()
|
||||
var/obj/docking_port/stationary/dockedAt = get_docked()
|
||||
@@ -730,7 +750,6 @@
|
||||
else
|
||||
return docked_at
|
||||
|
||||
|
||||
/obj/docking_port/mobile/proc/getDbgStatusText()
|
||||
var/obj/docking_port/stationary/dockedAt = get_docked()
|
||||
. = (dockedAt && dockedAt.name) ? dockedAt.name : "unknown"
|
||||
|
||||
Reference in New Issue
Block a user