buildmode fix + blueprints fix (#2261)
* Fixes Admin Buildmode Mass-Deletion making people nude, gives GetAllContents() an ignore typecache. * sync turf.dm
This commit is contained in:
committed by
kevinz000
parent
32a7158a72
commit
f5bc18bb55
@@ -491,17 +491,26 @@ Turf and target are separate in case you want to teleport some distance from a t
|
|||||||
var/y=arcsin(x/sqrt(1+x*x))
|
var/y=arcsin(x/sqrt(1+x*x))
|
||||||
return y
|
return y
|
||||||
|
|
||||||
/atom/proc/GetAllContents()
|
/atom/proc/GetAllContents(list/ignore_typecache)
|
||||||
var/list/processing_list = list(src)
|
var/list/processing_list = list(src)
|
||||||
var/list/assembled = list()
|
var/list/assembled = list()
|
||||||
|
if(ignore_typecache) //If there's a typecache, use it.
|
||||||
|
while(processing_list.len)
|
||||||
|
var/atom/A = processing_list[1]
|
||||||
|
processing_list -= A
|
||||||
|
if(ignore_typecache[A.type])
|
||||||
|
continue
|
||||||
|
processing_list |= (A.contents - assembled)
|
||||||
|
assembled |= A
|
||||||
|
|
||||||
while(processing_list.len)
|
else //If there's none, only make this check once for performance.
|
||||||
var/atom/A = processing_list[1]
|
while(processing_list.len)
|
||||||
processing_list -= A
|
var/atom/A = processing_list[1]
|
||||||
|
processing_list -= A
|
||||||
|
|
||||||
processing_list |= (A.contents - assembled)
|
processing_list |= (A.contents - assembled)
|
||||||
|
|
||||||
assembled |= A
|
assembled |= A
|
||||||
|
|
||||||
return assembled
|
return assembled
|
||||||
|
|
||||||
|
|||||||
+17
-8
@@ -77,6 +77,7 @@
|
|||||||
return
|
return
|
||||||
SSair.remove_from_active(src)
|
SSair.remove_from_active(src)
|
||||||
visibilityChanged()
|
visibilityChanged()
|
||||||
|
QDEL_LIST(blueprint_data)
|
||||||
initialized = FALSE
|
initialized = FALSE
|
||||||
requires_activation = FALSE
|
requires_activation = FALSE
|
||||||
..()
|
..()
|
||||||
@@ -224,9 +225,15 @@
|
|||||||
var/old_affecting_lights = affecting_lights
|
var/old_affecting_lights = affecting_lights
|
||||||
var/old_lighting_object = lighting_object
|
var/old_lighting_object = lighting_object
|
||||||
var/old_corners = corners
|
var/old_corners = corners
|
||||||
|
|
||||||
|
var/old_exl = explosion_level
|
||||||
|
var/old_exi = explosion_id
|
||||||
|
var/old_bp = blueprint_data
|
||||||
|
blueprint_data = null
|
||||||
|
|
||||||
var/old_baseturf = baseturf
|
var/old_baseturf = baseturf
|
||||||
changing_turf = TRUE
|
changing_turf = TRUE
|
||||||
|
|
||||||
qdel(src) //Just get the side effects and call Destroy
|
qdel(src) //Just get the side effects and call Destroy
|
||||||
var/turf/W = new path(src)
|
var/turf/W = new path(src)
|
||||||
|
|
||||||
@@ -235,9 +242,14 @@
|
|||||||
else
|
else
|
||||||
W.baseturf = old_baseturf
|
W.baseturf = old_baseturf
|
||||||
|
|
||||||
|
W.explosion_id = old_exi
|
||||||
|
W.explosion_level = old_exl
|
||||||
|
|
||||||
if(!defer_change)
|
if(!defer_change)
|
||||||
W.AfterChange(ignore_air)
|
W.AfterChange(ignore_air)
|
||||||
|
|
||||||
|
W.blueprint_data = old_bp
|
||||||
|
|
||||||
if(SSlighting.initialized)
|
if(SSlighting.initialized)
|
||||||
recalc_atom_opacity()
|
recalc_atom_opacity()
|
||||||
lighting_object = old_lighting_object
|
lighting_object = old_lighting_object
|
||||||
@@ -432,27 +444,24 @@
|
|||||||
I.setDir(AM.dir)
|
I.setDir(AM.dir)
|
||||||
I.alpha = 128
|
I.alpha = 128
|
||||||
|
|
||||||
if(!blueprint_data)
|
LAZYADD(blueprint_data, I)
|
||||||
blueprint_data = list()
|
|
||||||
blueprint_data += I
|
|
||||||
|
|
||||||
|
|
||||||
/turf/proc/add_blueprints_preround(atom/movable/AM)
|
/turf/proc/add_blueprints_preround(atom/movable/AM)
|
||||||
if(!SSticker.HasRoundStarted())
|
if(!SSticker.HasRoundStarted())
|
||||||
add_blueprints(AM)
|
add_blueprints(AM)
|
||||||
|
|
||||||
/turf/proc/empty(turf_type=/turf/open/space, baseturf_type, delmobs = TRUE, forceop = FALSE)
|
/turf/proc/empty(turf_type=/turf/open/space, baseturf_type, list/ignore_typecache, forceop = FALSE)
|
||||||
// Remove all atoms except observers, landmarks, docking ports
|
// Remove all atoms except observers, landmarks, docking ports
|
||||||
var/static/list/ignored_atoms = typecacheof(list(/mob/dead, /obj/effect/landmark, /obj/docking_port, /atom/movable/lighting_object))
|
var/static/list/ignored_atoms = typecacheof(list(/mob/dead, /obj/effect/landmark, /obj/docking_port, /atom/movable/lighting_object))
|
||||||
var/list/allowed_contents = typecache_filter_list_reverse(GetAllContents(),delmobs? ignored_atoms : ignored_atoms + typecacheof(list(/mob)))
|
var/list/allowed_contents = typecache_filter_list_reverse(GetAllContents(ignore_typecache), ignored_atoms)
|
||||||
allowed_contents -= src
|
allowed_contents -= src
|
||||||
for(var/i in 1 to allowed_contents.len)
|
for(var/i in 1 to allowed_contents.len)
|
||||||
var/thing = allowed_contents[i]
|
var/thing = allowed_contents[i]
|
||||||
qdel(thing, force=TRUE)
|
qdel(thing, force=TRUE)
|
||||||
|
|
||||||
|
|
||||||
var/turf/newT = ChangeTurf(turf_type, baseturf_type, FALSE, FALSE, forceop = forceop)
|
var/turf/newT = ChangeTurf(turf_type, baseturf_type, FALSE, FALSE, forceop = forceop)
|
||||||
|
|
||||||
SSair.remove_from_active(newT)
|
SSair.remove_from_active(newT)
|
||||||
newT.CalculateAdjacentTurfs()
|
newT.CalculateAdjacentTurfs()
|
||||||
SSair.add_to_active(newT,1)
|
SSair.add_to_active(newT,1)
|
||||||
@@ -537,4 +546,4 @@
|
|||||||
limit--
|
limit--
|
||||||
else
|
else
|
||||||
return I
|
return I
|
||||||
return I
|
return I
|
||||||
|
|||||||
@@ -20,26 +20,34 @@
|
|||||||
/datum/mapGeneratorModule/bottomLayer/massdelete
|
/datum/mapGeneratorModule/bottomLayer/massdelete
|
||||||
spawnableAtoms = list()
|
spawnableAtoms = list()
|
||||||
spawnableTurfs = list()
|
spawnableTurfs = list()
|
||||||
var/deletemobs = TRUE
|
var/deleteturfs = TRUE //separate var for the empty type.
|
||||||
var/deleteturfs = TRUE
|
var/list/ignore_typecache
|
||||||
|
|
||||||
/datum/mapGeneratorModule/bottomLayer/massdelete/generate()
|
/datum/mapGeneratorModule/bottomLayer/massdelete/generate()
|
||||||
if(!mother)
|
if(!mother)
|
||||||
return
|
return
|
||||||
for(var/V in mother.map)
|
for(var/V in mother.map)
|
||||||
var/turf/T = V
|
var/turf/T = V
|
||||||
T.empty(deleteturfs? null : T.type, delmobs = deletemobs, forceop = TRUE)
|
T.empty(deleteturfs? null : T.type, ignore_typecache = ignore_typecache, forceop = TRUE)
|
||||||
|
|
||||||
/datum/mapGeneratorModule/bottomLayer/massdelete/no_delete_mobs
|
/datum/mapGeneratorModule/bottomLayer/massdelete/no_delete_mobs/New()
|
||||||
deletemobs = FALSE
|
..()
|
||||||
|
ignore_typecache = typecacheof(list(/mob))
|
||||||
|
|
||||||
/datum/mapGeneratorModule/bottomLayer/massdelete/leave_turfs
|
/datum/mapGeneratorModule/bottomLayer/massdelete/leave_turfs
|
||||||
deleteturfs = FALSE
|
deleteturfs = FALSE
|
||||||
|
|
||||||
|
/datum/mapGeneratorModule/bottomLayer/massdelete/leave_turfs/New()
|
||||||
|
..()
|
||||||
|
ignore_typecache = typecacheof(list(/turf))
|
||||||
|
|
||||||
/datum/mapGeneratorModule/bottomLayer/massdelete/regeneration_delete
|
/datum/mapGeneratorModule/bottomLayer/massdelete/regeneration_delete
|
||||||
deletemobs = FALSE
|
|
||||||
deleteturfs = FALSE
|
deleteturfs = FALSE
|
||||||
|
|
||||||
|
/datum/mapGeneratorModule/bottomLayer/massdelete/regeneration_delete/New()
|
||||||
|
..()
|
||||||
|
ignore_typecache = typecacheof(list(/mob, /turf))
|
||||||
|
|
||||||
//Only places atoms/turfs on area borders
|
//Only places atoms/turfs on area borders
|
||||||
/datum/mapGeneratorModule/border
|
/datum/mapGeneratorModule/border
|
||||||
clusterCheckFlags = CLUSTER_CHECK_NONE
|
clusterCheckFlags = CLUSTER_CHECK_NONE
|
||||||
|
|||||||
Reference in New Issue
Block a user