diff --git a/code/defines/mob/living/silicon/robot.dm b/code/defines/mob/living/silicon/robot.dm index e438acbed3c..da5910a0224 100644 --- a/code/defines/mob/living/silicon/robot.dm +++ b/code/defines/mob/living/silicon/robot.dm @@ -53,5 +53,5 @@ var/weaponlock_time = 120 var/lawupdate = 1 //Cyborgs will sync their laws with their AI by default var/lockcharge //Used when locking down a borg to preserve cell charge - //var/speed = 0 //Cause sec borgs gotta go fast //No they dont! + var/speed = 0 //Cause sec borgs gotta go fast //No they dont! var/scrambledcodes = 0 // Used to determine if a borg shows up on the robotics console. Setting to one hides them. \ No newline at end of file diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 3587b3c66f2..1b213cb67f6 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -112,7 +112,8 @@ ), "Cyborg Upgrade Modules" = list( - /obj/item/borg/upgrade/reset + /obj/item/borg/upgrade/reset, + /obj/item/borg/upgrade/restart ///obj/item/borg/upgrade/flashproof diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index d1baf64b5f7..c402db0f301 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -493,7 +493,7 @@ var/obj/item/borg/upgrade/U = W if(!opened) usr << "You must access the borgs internals!" - else if(!src.module) + else if(!src.module && U.require_module) usr << "The borg must choose a module before he can be upgraded!" else if(U.locked) usr << "The upgrade is locked and cannot be used yet!" diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm index bd6cf8c3ee7..74522c2b0df 100644 --- a/code/modules/mob/living/silicon/robot/robot_movement.dm +++ b/code/modules/mob/living/silicon/robot/robot_movement.dm @@ -6,11 +6,10 @@ if(..()) return 1 return 0 -/* No longer needed, but I'll leave it here incase we plan to re-use it. + //No longer needed, but I'll leave it here incase we plan to re-use it. /mob/living/silicon/robot/movement_delay() var/tally = 0 //Incase I need to add stuff other than "speed" later tally = speed return tally -*/ \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_upgrades.dm b/code/modules/mob/living/silicon/robot/robot_upgrades.dm index 3c2eaee2343..5e00b5680fb 100644 --- a/code/modules/mob/living/silicon/robot/robot_upgrades.dm +++ b/code/modules/mob/living/silicon/robot/robot_upgrades.dm @@ -9,6 +9,7 @@ var/construction_time = 120 var/construction_cost = list("metal"=10000) var/locked = 0 + var/require_module = 0 /obj/item/borg/upgrade/proc/action() return @@ -17,6 +18,7 @@ /obj/item/borg/upgrade/reset/ name = "Borg module reset board" desc = "Used to reset a borg's module. Destroys any other upgrades applied to the borg." + require_module = 1 /obj/item/borg/upgrade/reset/action(var/mob/living/silicon/robot/R) R.uneq_all() @@ -37,6 +39,7 @@ name = "Borg Flash-Supression" desc = "A highly advanced, complicated system for supressing incoming flashes directed at the borg's optical processing system." construction_cost = list("metal"=10000,"gold"=2000,"silver"=3000,"glass"=2000, "diamond"=5000) + require_module = 1 /obj/item/borg/upgrade/flashproof/New() // Why the fuck does the fabricator make a new instance of all the items? @@ -45,3 +48,18 @@ /obj/item/borg/upgrade/flashproof/action(var/mob/living/silicon/robot/R) if(R.module) R.module += src + + +/obj/item/borg/upgrade/restart/ + name = "Borg emergancy restart module" + desc = "Used to force a restart of a disabled-but-repaired borg, bringing it back online." + construction_cost = list("metal"=60000 , "glass"=5000) + + +/obj/item/borg/upgrade/restart/action(var/mob/living/silicon/robot/R) + if(!R.key) + for(var/mob/dead/observer/ghost in world) + if(ghost.corpse == R && ghost.client) + ghost.client.mob = ghost.corpse + + R.stat = 0 \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 1241496b092..9427db6513a 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -114,12 +114,21 @@ if(!cancel) world << "Everyone is dead! Resetting in 30 seconds!" - feedback_set_details("end_error","no live players") - if(blackbox) - blackbox.save_all_data_to_sql() spawn(300) + for(var/mob/M in world) + if(M.client && (M.stat != DEAD)) + world << "Aborting world restart!" + return + + feedback_set_details("end_error","no live players") + + if(blackbox) + blackbox.save_all_data_to_sql() + + sleep(50) + log_game("Rebooting because of no live players") world.Reboot() return diff --git a/code/modules/mob/new_player/savefile.dm b/code/modules/mob/new_player/savefile.dm index d65dc0d1309..32362e3bd05 100644 --- a/code/modules/mob/new_player/savefile.dm +++ b/code/modules/mob/new_player/savefile.dm @@ -130,7 +130,7 @@ datum/preferences/proc/savefile_load(mob/user) F["job_engsec_med"] >> src.job_engsec_med F["job_engsec_low"] >> src.job_engsec_low - F[OOC_Notes"] >> src.metadata + F["OOC_Notes"] >> src.metadata if(isnull(metadata)) metadata = ""