From 9efa3f14f238ce9c2186843f9cb1f7f6a087025f Mon Sep 17 00:00:00 2001 From: DamianX Date: Sun, 9 Aug 2020 15:21:10 +0200 Subject: [PATCH] Fixed holodeck hard dels (#27415) * Fixed holodeck hard dels, MURDERED VARIABLE COPYING * air but differently * Add return type hint --- code/ZAS/Turf.dm | 1 + code/__HELPERS/unsorted.dm | 56 +++++++++++------------------ code/modules/recycling/conveyor2.dm | 8 +++++ 3 files changed, 29 insertions(+), 36 deletions(-) diff --git a/code/ZAS/Turf.dm b/code/ZAS/Turf.dm index 601423a61cf..1e6cba1fbf2 100644 --- a/code/ZAS/Turf.dm +++ b/code/ZAS/Turf.dm @@ -184,6 +184,7 @@ return 0 /turf/return_air() + RETURN_TYPE(/datum/gas_mixture) //Create gas mixture to hold data for passing var/datum/gas_mixture/unsimulated/GM = new diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index eb7922c39ec..4f620e4b35b 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -961,22 +961,20 @@ proc/GaussRandRound(var/sigma,var/roundto) var/datum/coords/CR = new(x_pos+C.x_pos,y_pos+C.y_pos,z_pos+C.z_pos) return CR -proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0) - if(!original) - return null - - var/obj/O = null - - if(sameloc) - O=new original.type(original.loc) - else - O=new original.type(locate(0,0,0)) - - if(perfectcopy) - if((O) && (original)) - for(var/V in original.vars - variables_not_to_be_copied) - O.vars[V] = original.vars[V] - return O +// If you're looking at this proc and thinking "that's exactly what I need!" +// then you're wrong and you need to take a step back and reconsider. +/atom/movable/proc/DuplicateObject(var/location) + var/atom/movable/duplicate = new src.type(location) + duplicate.change_dir(dir) + duplicate.plane = plane + duplicate.layer = layer + duplicate.name = name + duplicate.desc = desc + duplicate.pixel_x = pixel_x + duplicate.pixel_y = pixel_y + duplicate.pixel_w = pixel_w + duplicate.pixel_z = pixel_z + return duplicate /area/proc/copy_contents_to(var/area/A , var/platingRequired = 0 ) @@ -1035,6 +1033,7 @@ proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0) var/datum/coords/C_trg = refined_trg[B] if(C_src.x_pos == C_trg.x_pos && C_src.y_pos == C_trg.y_pos) + var/old_name = T.name var/old_dir1 = T.dir var/old_icon_state1 = T.icon_state var/old_icon1 = T.icon @@ -1044,10 +1043,13 @@ proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0) continue moving var/turf/X = B.ChangeTurf(T.type) + X.name = old_name X.dir = old_dir1 X.icon_state = old_icon_state1 X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi + X.return_air().copy_from(T.return_air()) + var/list/objs = new/list() var/list/newobjs = new/list() var/list/mobs = new/list() @@ -1062,11 +1064,7 @@ proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0) for(var/obj/O in objs) - newobjs += DuplicateObject(O , 1) - - - for(var/obj/O in newobjs) - O.forceMove(X) + newobjs += O.DuplicateObject(X) for(var/mob/M in T) @@ -1075,25 +1073,11 @@ proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0) mobs += M for(var/mob/M in mobs) - newmobs += DuplicateObject(M , 1) - - for(var/mob/M in newmobs) - M.forceMove(X) + newmobs += M.DuplicateObject(X) copiedobjs += newobjs copiedobjs += newmobs - - - for(var/V in T.vars - variables_not_to_be_copied) - X.vars[V] = T.vars[V] - -// var/area/AR = X.loc - -// if(AR.dynamic_lighting) -// X.opacity = !X.opacity -// X.sd_SetOpacity(!X.opacity) //TODO: rewrite this code so it's not messed by lighting ~Carn - toupdate += X refined_src -= T diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 04b927168e3..b5106320e31 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -313,6 +313,14 @@ "} +/obj/machinery/conveyor/DuplicateObject(var/location) + var/obj/machinery/conveyor/duplicate = ..() + duplicate.in_reverse = in_reverse + duplicate.backwards = backwards + duplicate.forwards = forwards + duplicate.movedir = movedir + return duplicate + /obj/machinery/conveyor/multitool_topic(var/mob/user,var/list/href_list,var/obj/O) . = ..() if(.)