Files
2016-03-06 20:52:14 +01:00

298 lines
10 KiB
Plaintext

//This might just be the file that finally breaks angriestibm.
//I just nilly willy directly use the cruiser object instead of sending packets.
/datum/computer/file/terminal_program/cruiser
name = "Cruiser"
size = 32
disposing()
..()
initialize()
src.print_text("Cruiser Control Assistant<br>Type \"help\" for commands.")
input_text(text)
if(..())
return
var/list/command_list = parse_string(text)
var/command = command_list[1]
command_list -= command_list[1] //Remove the command we are now processing.
var/obj/item/peripheral/cruiser/adapter = find_peripheral("SHIP_ADAPTER")
switch(lowertext(command))
if ("help")
src.print_text("Command List:<br> read_power - Gets power usage<br>power_ratios - Displays sub-system power ratios.<br>damage - Lists damaged systems<br>set_power (thrusters/weapons/shields) (percentage) - Adjusts how much power subsystems recieve.<br>reboot (turret_l/turret_r/engine/life_support/pod_weapons/pod_navigation/pod_defense) - Restores basic functions of the given system while degrading the ship.")
return
if ("reboot")
if(command_list.len >= 1)
//for(var/t in command_list)
// command_list -= t
var/t = command_list[1]
if(lowertext(t) in list("turret_l","turret_r","engine","life_support","pod_weapons","pod_navigation","pod_defense"))
var/datum/signal/newsignal = get_free_signal()
newsignal.data["system"] = lowertext(t)
print_text("Rebooting [lowertext(t)]. Please wait ...")
src.peripheral_command("reboot", newsignal, "\ref[adapter]")
else
print_text("Unknown system: [lowertext(t)]")
if ("set_power","spwr")
if(command_list.len == 2)
var/system = command_list[1]
var/percentage = command_list[2]
if(lowertext(system) != "thrusters" && lowertext(system) != "weapons" && lowertext(system) != "shields")
print_text("Unknown sub-system: [system]")
return
if(!text2num(percentage))
print_text("Invalid setting: [percentage]")
return
var/datum/signal/newsignal = get_free_signal()
newsignal.data["system"] = system
newsignal.data["percentage"] = percentage
src.peripheral_command("set_power", newsignal, "\ref[adapter]")
else
print_text("Usage: set_power (thrusters/weapons/shields) (percentage)")
if ("power_ratios", "p%", "pwrr")
src.peripheral_command("power_ratios", null, "\ref[adapter]")
if ("read_power", "power", "pwr")
src.peripheral_command("read_power", null, "\ref[adapter]")
if ("damage", "dmg")
src.peripheral_command("get_damage", null, "\ref[adapter]")
if ("quit","exit")
src.master.temp = ""
print_text("Now quitting...")
src.master.unload_program(src)
return
else
src.print_text("Unknown command.")
receive_command(obj/source, command, datum/signal/signal)
if ((..()) || (!signal))
return
if (command == "read_power")
var/list/recieved = params2list(signal.data["usage_breakdown"])
src.print_text("Power: [signal.data["used_last"]]Pu / [signal.data["prod_last"]]Pu")
for(var/X in recieved)
src.print_text("--[X]: [recieved[X]]")
src.print_text("<br>")
return
else if (command == "get_damage")
src.print_text("Number of damaged systems: [signal.data["damage_num"]]")
src.print_text("Total damage: [signal.data["damage_total"]]")
src.print_text("Ship degradation: [signal.data["degradation"]]%")
if(signal.data["damage_breakdown"])
src.print_text(signal.data["damage_breakdown"])
return
else if (command == "power_ratios")
src.print_text("Thrusters power: [signal.data["ratio_movement"]]%")
src.print_text("Weapons power: [signal.data["ratio_offense"]]%")
src.print_text("Shields power: [signal.data["ratio_defense"]]%")
return
else if (command == "set_power")
src.print_text("[signal.data["info"]]")
return
else if (command == "reboot")
src.print_text("[signal.data["info"]]")
return
/obj/machinery/computer3/generic/cruiser
name = "cruiser console"
icon_state = "cruiser"
base_icon_state = "cruiser"
setup_drive_size = 64
setup_frame_type = /obj/computer3frame/terminal
setup_starting_os = /datum/computer/file/terminal_program/os/main_os/no_login
setup_starting_peripheral1 = /obj/item/peripheral/cruiser
setup_starting_program = /datum/computer/file/terminal_program/cruiser
setup_idscan_path = null
power_change()
if(stat & BROKEN)
icon_state = src.base_icon_state
src.icon_state += "b"
light.disable()
else
icon_state = src.base_icon_state
stat &= ~NOPOWER
light.enable()
/obj/item/peripheral/cruiser
name = "cruiser interface module"
desc = "A computer interface card designed to interface with a small starcraft's main bus."
icon_state = "power_mod"
func_tag = "SHIP_ADAPTER"
var/obj/machinery/cruiser/cruiser
installed(var/obj/machinery/computer3/newhost)
if(..())
return 1
check_cruiser()
return 0
uninstalled()
src.cruiser = null
return 0
disposing()
uninstalled()
..()
receive_command(obj/source, command, datum/signal/signal)
if(..())
return 1
if(!src.check_cruiser())
return 1
switch (command)
if ("read_power")
var/datum/signal/newsignal = get_free_signal()
newsignal.data["used_last"] = cruiser.power_used_last
newsignal.data["prod_last"] = cruiser.power_produced_last
var/usage_count_builder = ""
for(var/X in cruiser.powerUse)
var/decodeList = params2list(cruiser.powerUse[X])
usage_count_builder += "[X]=[decodeList[1]];"
if (usage_count_builder)
newsignal.data["usage_breakdown"] = usage_count_builder
spawn(4)
send_command("read_power", newsignal)
return newsignal
if ("get_damage")
var/datum/signal/newsignal = get_free_signal()
var/dmg_total = 0
var/dmg_count = 0
var/damage_builder = ""
for(var/obj/machinery/cruiser_destroyable/D in cruiser.interior_area)
if(D.ignore || D.health == D.health_max) continue
damage_builder += "--[D.name]: [D.health]/[D.health_max]<br>"
dmg_count++
dmg_total += (D.health_max - D.health)
if (damage_builder)
newsignal.data["damage_breakdown"] = damage_builder
newsignal.data["damage_total"] = dmg_total
newsignal.data["damage_num"] = dmg_count
newsignal.data["degradation"] = cruiser.degradation
spawn(4)
send_command("get_damage", newsignal)
if ("power_ratios")
var/datum/signal/newsignal = get_free_signal()
newsignal.data["ratio_movement"] = cruiser.power_movement
newsignal.data["ratio_defense"] = cruiser.power_defense
newsignal.data["ratio_offense"] = cruiser.power_offense
spawn(4)
send_command("power_ratios", newsignal)
return newsignal
if ("reboot")
var/system = signal.data["system"]
var/datum/signal/newsignal = get_free_signal()
switch(system)
if("turret_l")
if(cruiser.interior_area)
var/obj/machinery/cruiser_destroyable/cruiser_component_slot/weapon/left/P = (locate(/obj/machinery/cruiser_destroyable/cruiser_component_slot/weapon/left) in cruiser.interior_area)
if(istype(P))
newsignal.data["info"] = P.reboot()
cruiser.degradation = min(cruiser.degradation + 5, 100)
if("turret_r")
if(cruiser.interior_area)
var/obj/machinery/cruiser_destroyable/cruiser_component_slot/weapon/right/P = (locate(/obj/machinery/cruiser_destroyable/cruiser_component_slot/weapon/right) in cruiser.interior_area)
if(istype(P))
newsignal.data["info"] = P.reboot()
cruiser.degradation = min(cruiser.degradation + 5, 100)
if("engine")
if(cruiser.interior_area)
var/obj/machinery/cruiser_destroyable/cruiser_component_slot/engine/P = (locate(/obj/machinery/cruiser_destroyable/cruiser_component_slot/engine) in cruiser.interior_area)
if(istype(P))
newsignal.data["info"] = P.reboot()
cruiser.degradation = min(cruiser.degradation + 5, 100)
if("life_support")
if(cruiser.interior_area)
var/obj/machinery/cruiser_destroyable/cruiser_component_slot/life_support/P = (locate(/obj/machinery/cruiser_destroyable/cruiser_component_slot/life_support) in cruiser.interior_area)
if(istype(P))
newsignal.data["info"] = P.reboot()
cruiser.degradation = min(cruiser.degradation + 5, 100)
if("pod_weapons")
if(cruiser.interior_area)
var/obj/machinery/cruiser_destroyable/cruiser_pod/security/P = (locate(/obj/machinery/cruiser_destroyable/cruiser_pod/security) in cruiser.interior_area)
if(istype(P))
newsignal.data["info"] = P.reboot()
cruiser.degradation = min(cruiser.degradation + 5, 100)
if("pod_navigation")
if(cruiser.interior_area)
var/obj/machinery/cruiser_destroyable/cruiser_pod/movement/P = (locate(/obj/machinery/cruiser_destroyable/cruiser_pod/movement) in cruiser.interior_area)
if(istype(P))
newsignal.data["info"] = P.reboot()
cruiser.degradation = min(cruiser.degradation + 5, 100)
if("pod_defense")
if(cruiser.interior_area)
var/obj/machinery/cruiser_destroyable/cruiser_pod/engineering/P = (locate(/obj/machinery/cruiser_destroyable/cruiser_pod/engineering) in cruiser.interior_area)
if(istype(P))
newsignal.data["info"] = P.reboot()
cruiser.degradation = min(cruiser.degradation + 5, 100)
else
newsignal.data["info"] = "INTERNAL ERROR. UNKNOWN SYSTEM"
spawn(4)
send_command("reboot", newsignal)
return
if ("set_power")
var/percentage = text2num(signal.data["percentage"])
if(!percentage)
return
var/datum/signal/newsignal = get_free_signal()
percentage = min(max(percentage, 1), 500)
switch(lowertext(signal.data["system"]))
if("thrusters")
cruiser.power_movement = percentage
if("weapons")
cruiser.power_offense = percentage
if("shields")
cruiser.power_defense = percentage
newsignal.data["info"] = "Set [signal.data["system"]] to [percentage]%"
spawn(4)
send_command("set_power", newsignal)
else
return "Valid commands: read_power get_damage power_ratios set_power reboot"
//Return true if cruiser is valid/found.
proc/check_cruiser()
var/area/ship_interior/A = get_area(src.host)
if(istype(A))
cruiser = A.ship
return 1
return 0