From 7c27f801f75e211e1b4e9aa1c158b9348ec9a0c4 Mon Sep 17 00:00:00 2001 From: Heroman Date: Fri, 23 Aug 2019 12:25:21 +1000 Subject: [PATCH] Restricts AI shells module- and z-level- wise --- code/global_vr.dm | 4 ++++ .../mob/living/silicon/ai/ai_remote_control.dm | 2 +- code/modules/mob/living/silicon/robot/robot.dm | 15 ++++++++++----- .../mob/living/silicon/robot/robot_vr.dm | 7 +++++++ maps/tether/tether_defines.dm | 17 +++++++++++++++++ maps/~map_system/maps.dm | 2 ++ 6 files changed, 41 insertions(+), 6 deletions(-) diff --git a/code/global_vr.dm b/code/global_vr.dm index 9506dd62d35..cfa9186b1d2 100644 --- a/code/global_vr.dm +++ b/code/global_vr.dm @@ -6,6 +6,10 @@ robot_module_types += "Pupdozer" return 1 +var/list/shell_module_types = list( + "Standard", "Service", "Clerical" +) + var/global/list/acceptable_fruit_types= list( "ambrosia", "apple", diff --git a/code/modules/mob/living/silicon/ai/ai_remote_control.dm b/code/modules/mob/living/silicon/ai/ai_remote_control.dm index cef8cec7e8b..3e976784258 100644 --- a/code/modules/mob/living/silicon/ai/ai_remote_control.dm +++ b/code/modules/mob/living/silicon/ai/ai_remote_control.dm @@ -27,7 +27,7 @@ for(var/borgie in GLOB.available_ai_shells) var/mob/living/silicon/robot/R = borgie - if(R.shell && !R.deployed && (R.stat != DEAD) && (!R.connected_ai || (R.connected_ai == src) ) ) + if(R.shell && !R.deployed && (R.stat != DEAD) && (!R.connected_ai || (R.connected_ai == src) ) && !(using_map.ai_shell_restricted && !(R.z in using_map.ai_shell_allowed_levels)) ) //VOREStation Edit: shell restrictions possible += R if(!LAZYLEN(possible)) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index ea851806c39..a9097f89131 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -259,11 +259,16 @@ if(module) return var/list/modules = list() - modules.Add(robot_module_types) - if(crisis || security_level == SEC_LEVEL_RED || crisis_override) // VOREStation Edit - to_chat(src, "Crisis mode active. Combat module available.") - modules+="Combat" - modules+="ERT" //VOREStation Edit + //VOREStatation Edit Start: shell restrictions + if(shell) + modules.Add(shell_module_types) + else + modules.Add(robot_module_types) + if(crisis || security_level == SEC_LEVEL_RED || crisis_override) + to_chat(src, "Crisis mode active. Combat module available.") + modules+="Combat" + modules+="ERT" + //VOREStatation Edit End: shell restrictions modtype = input("Please, select a module!", "Robot module", null, null) as null|anything in modules if(module) diff --git a/code/modules/mob/living/silicon/robot/robot_vr.dm b/code/modules/mob/living/silicon/robot/robot_vr.dm index e66ad05ec93..e3264aee4e5 100644 --- a/code/modules/mob/living/silicon/robot/robot_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_vr.dm @@ -258,3 +258,10 @@ return if(buckle_mob(M)) visible_message("[M] starts riding [name]!") + +/mob/living/silicon/robot/onTransitZ(old_z, new_z) + if(shell) + if(deployed && using_map.ai_shell_restricted && !(new_z in using_map.ai_shell_allowed_levels)) + to_chat(src,"Your connection with the shell is suddenly interrupted!") + undeploy() + ..() diff --git a/maps/tether/tether_defines.dm b/maps/tether/tether_defines.dm index 57f9a44d8e9..121c8efaa08 100644 --- a/maps/tether/tether_defines.dm +++ b/maps/tether/tether_defines.dm @@ -150,6 +150,23 @@ list("Debris Field - Z1 Space") ) + ai_shell_restricted = TRUE + ai_shell_allowed_levels = list( + Z_LEVEL_SURFACE_LOW, + Z_LEVEL_SURFACE_MID, + Z_LEVEL_SURFACE_HIGH, + Z_LEVEL_TRANSIT, + Z_LEVEL_SPACE_LOW, + Z_LEVEL_SPACE_MID, + Z_LEVEL_SPACE_HIGH, + Z_LEVEL_SURFACE_MINE, + Z_LEVEL_SOLARS, + Z_LEVEL_CENTCOM, + Z_LEVEL_MISC, + Z_LEVEL_SHIPS, + Z_LEVEL_BEACH + ) + lateload_single_pick = null //Nothing right now. /datum/map/tether/perform_map_generation() diff --git a/maps/~map_system/maps.dm b/maps/~map_system/maps.dm index 90e6d068b83..fe0ef3972b6 100644 --- a/maps/~map_system/maps.dm +++ b/maps/~map_system/maps.dm @@ -59,6 +59,8 @@ var/list/all_maps = list() var/list/holomap_legend_x = list() var/list/holomap_legend_y = list() var/list/meteor_strike_areas // VOREStation Edit - Areas meteor strikes may choose to hit. + var/ai_shell_restricted = FALSE //VOREStation Addition - are there z-levels restricted? + var/ai_shell_allowed_levels = list() //VOREStation Addition - which z-levels ARE we allowed to visit? var/station_name = "BAD Station" var/station_short = "Baddy"