From c0075f41d0fd266b190ace5d1814655940aa4c1a Mon Sep 17 00:00:00 2001 From: Krausus Date: Thu, 18 Jun 2015 04:54:31 -0400 Subject: [PATCH 1/2] Fixes get_apc with a BYOND bug workaround Also reverts the mining asteroid-specific workaround --- code/game/objects/items/mountable_frames/apc_frame.dm | 1 - code/modules/power/power.dm | 7 +++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/mountable_frames/apc_frame.dm b/code/game/objects/items/mountable_frames/apc_frame.dm index 330ee8c7da2..5e092638707 100644 --- a/code/game/objects/items/mountable_frames/apc_frame.dm +++ b/code/game/objects/items/mountable_frames/apc_frame.dm @@ -9,7 +9,6 @@ if(..()) var/turf/turf_loc = get_turf(user) var/area/area_loc = turf_loc.loc - if(istype(area_loc,/area/mine)) return if (area_loc.get_apc()) user << "This area already has an APC." return //only one APC per area diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index a93e982e850..c66ebbe6557 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -404,8 +404,11 @@ return null /area/proc/get_apc() - var/obj/machinery/power/apc/FINDME = locate() in src - if (FINDME) + // This was a simple locate() in src, but an unresolved BYOND bug causes trying to locate() in an + // area to take an inconceivably long time, especially for large areas. + // See: http://www.byond.com/forum/?post=1860571 + var/obj/machinery/power/apc/FINDME + for(FINDME in src) return FINDME From 4ba0f72406fa9abadbe50742ae42032ba59f8365 Mon Sep 17 00:00:00 2001 From: Krausus Date: Thu, 18 Jun 2015 05:05:28 -0400 Subject: [PATCH 2/2] Fixes mountable frames checking their area wrong --- code/game/objects/items/mountable_frames/frames.dm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/mountable_frames/frames.dm b/code/game/objects/items/mountable_frames/frames.dm index bf28b84add1..d40bb2572fe 100644 --- a/code/game/objects/items/mountable_frames/frames.dm +++ b/code/game/objects/items/mountable_frames/frames.dm @@ -19,7 +19,9 @@ if (src.mount_reqs.Find("simfloor") && !istype(turf_loc, /turf/simulated/floor)) user << "[src] cannot be placed on this spot." return - if (src.mount_reqs.Find("nospace") && (areaMaster.requires_power == 0 || istype(areaMaster,/area/space))) - user << "[src] cannot be placed in this area." - return - return 1 \ No newline at end of file + if (src.mount_reqs.Find("nospace")) + var/area/my_area = turf_loc.loc + if(!istype(my_area) || (my_area.requires_power == 0 || istype(my_area,/area/space))) + user << "[src] cannot be placed in this area." + return + return 1