Merge pull request #15162 from xxalpha/getareas

Fixes wizarditis teleport
This commit is contained in:
tkdrg
2016-02-05 01:39:04 -03:00
4 changed files with 27 additions and 17 deletions
+21 -7
View File
@@ -1,3 +1,10 @@
//supposedly the fastest way to do this according to https://gist.github.com/Giacom/be635398926bb463b42a
#define RANGE_TURFS(RADIUS, CENTER) \
block( \
locate(max(CENTER.x-(RADIUS),1), max(CENTER.y-(RADIUS),1), CENTER.z), \
locate(min(CENTER.x+(RADIUS),world.maxx), min(CENTER.y+(RADIUS),world.maxy), CENTER.z) \
)
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/proc/get_area(O)
@@ -24,6 +31,20 @@
return A
return 0
/proc/get_areas_in_range(dist=0, atom/center=usr)
if(!dist)
var/turf/T = get_turf(center)
return T ? list(T.loc) : list()
if(!center)
return list()
var/list/turfs = RANGE_TURFS(dist, center)
var/list/areas = list()
for(var/V in turfs)
var/turf/T = V
areas |= T.loc
return areas
// Like view but bypasses luminosity check
/proc/get_hear(range, atom/source)
@@ -423,10 +444,3 @@
new_character.key = G_found.key
return new_character
//supposedly the fastest way to do this according to https://gist.github.com/Giacom/be635398926bb463b42a
#define RANGE_TURFS(RADIUS, CENTER) \
block( \
locate(max(CENTER.x-(RADIUS),1), max(CENTER.y-(RADIUS),1), CENTER.z), \
locate(min(CENTER.x+(RADIUS),world.maxx), min(CENTER.y+(RADIUS),world.maxy), CENTER.z) \
)
-1
View File
@@ -1175,7 +1175,6 @@ B --><-- A
return L
/atom/proc/contains(var/atom/A)
if(!A)
return 0
+3 -4
View File
@@ -87,10 +87,9 @@ STI KALY - blind
/datum/disease/wizarditis/proc/teleport()
var/list/theareas = list()
for(var/area/AR in ultra_range(80, affected_mob, 1))
if(theareas.Find(AR) || istype(AR,/area/space)) continue
theareas += AR
var/list/theareas = get_areas_in_range(80, affected_mob)
for(var/area/space/S in theareas)
theareas -= S
if(!theareas||!theareas.len)
return
@@ -35,11 +35,9 @@
/obj/item/mecha_parts/mecha_equipment/wormhole_generator/action(atom/target)
if(!action_checks(target) || src.loc.z == ZLEVEL_CENTCOM) return
var/list/theareas = list()
for(var/area/AR in ultra_range(100, chassis, 1))
if(AR in theareas) continue
theareas += AR
if(!action_checks(target) || src.loc.z == ZLEVEL_CENTCOM)
return
var/list/theareas = get_areas_in_range(100, chassis)
if(!theareas.len)
return
var/area/thearea = pick(theareas)