From 5b3512039d35e82a9313832d3517e7c6bff2f527 Mon Sep 17 00:00:00 2001 From: monster860 Date: Tue, 29 Mar 2016 16:57:57 -0400 Subject: [PATCH 1/6] Adds areaediting mode. --- code/modules/admin/buildmode.dm | 48 ++++++++++++++++++++++++++++++-- icons/misc/buildmode.dmi | Bin 1284 -> 1449 bytes 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm index ebe37bc9697..535ffed740e 100644 --- a/code/modules/admin/buildmode.dm +++ b/code/modules/admin/buildmode.dm @@ -4,7 +4,8 @@ #define THROW_BUILDMODE 4 #define AREA_BUILDMODE 5 #define COPY_BUILDMODE 6 -#define NUM_BUILDMODES 6 +#define AREAEDIT_BUILDMODE 7 +#define NUM_BUILDMODES 7 /obj/screen/buildmode icon = 'icons/misc/buildmode.dmi' @@ -128,11 +129,19 @@ var/varholder = "name" var/valueholder = "derp" var/objholder = /obj/structure/closet + var/area/storedarea = null + var/image/areaimage var/atom/movable/stored = null +/datum/click_intercept/buildmode/New(client/c) + ..() + areaimage = image('icons/turf/areas.dmi',null,"yellow") + holder.images += areaimage + /datum/click_intercept/buildmode/Destroy() stored = null Reset() + qdel(areaimage) ..() /datum/click_intercept/buildmode/create_buttons() @@ -188,6 +197,12 @@ user << "Left Mouse Button on obj/turf/mob = Spawn a Copy of selected target" user << "Right Mouse Button on obj/mob = Select target to copy" user << "***********************************************************" + if(AREAEDIT_BUILDMODE) + user << "***********************************************************" + user << "Left Mouse Button on obj/turf/mob = Paint area" + user << "Right Mouse Button on obj/turf/mob = Select area to paint" + user << "Right Mouse Button on buildmode button = Create new area" + user << "***********************************************************" /datum/click_intercept/buildmode/proc/change_settings(mob/user) switch(mode) @@ -199,7 +214,7 @@ objholder = text2path(target_path) if(!ispath(objholder)) objholder = pick_closest_path(target_path) - if(!objholder) + if(!objholder || ispath(objholder, /area)) objholder = /obj/structure/closet alert("That path is not allowed.") else @@ -234,6 +249,20 @@ generator_path = type cornerA = null cornerB = null + if(AREAEDIT_BUILDMODE) + var/target_path = input(user,"Enter typepath:", "Typepath", "/area") + var/areatype = text2path(target_path) + if(ispath(areatype,/area)) + var/areaname = input(user,"Enter area name:", "Area name", "Area") + if(!areaname || !length(areaname)) + return + storedarea = new areatype + storedarea.power_equip = 0 + storedarea.power_light = 0 + storedarea.power_environ = 0 + storedarea.always_unpowered = 0 + storedarea.name = areaname + areaimage.loc = storedarea /datum/click_intercept/buildmode/proc/change_dir() switch(build_dir) @@ -257,6 +286,10 @@ /datum/click_intercept/buildmode/proc/Reset()//Reset temporary variables deselect_region() + if(mode == AREAEDIT_BUILDMODE) + areaimage.loc = storedarea + else + areaimage.loc = null /datum/click_intercept/buildmode/proc/select_tile(var/turf/T) return new /obj/effect/buildmode_reticule(T, holder) @@ -396,3 +429,14 @@ if(ismovableatom(object)) // No copying turfs for now. user << "[object] set as template." stored = object + if(AREAEDIT_BUILDMODE) + if(left_click) + if(!storedarea) + return + var/turf/T = get_turf(object) + if(get_area(T) != storedarea) + storedarea.contents.Add(T) + else if(right_click) + var/turf/T = get_turf(object) + storedarea = get_area(T) + areaimage.loc = storedarea diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi index ca9d1fd05ccad5c5e5804d31f60fddc673455e70..3ac5c80d1a51eea335ba4ca99ff40fa4f7bc0dc0 100644 GIT binary patch delta 1293 zcmV+o1@iiY3aJYviBL{Q4GJ0x0000DNk~Le0001>0001h1Oos70Det>C;$KeA(15@ z8Zr|FC=LdyiqrrA00DGTPE!Ct=GbNc005(rT#|pp84prwj!UVsf~%hkI86WmWS^OR z7)dK#000DsNklv=H^(I{E$0o zKVn!-x?%dCJo<|)Tfd#z-hB|;`>T4peG%LJs@`t*@(XVFt9rYARK@n~epPR`m)AXQ zzkYw*SsN#Hy}!~1z>(f=pUQ9eerF9Jb-iC|uu5qN+7s@@hTpj7Z%n%0FSQ}zP@fTM zJ3vUsD*c3zW7tP%;_+?~p^ZwfAvF1Tw}endB1-%#^CYJxq`42vlbyX@l(RXRy~d34&l8I z5VrD=MkhN+_#_W$bL$A{{56C*rez9iZRuw*eDi;Y|J@({ zk^1wSKRjJOoYrTnA_H1y@5A0k_`8W2Jw(Ohq4akX#1Q>s@;0S=nwT#~M2Iy-_`8{y z5+b_BNkZ?l0D>W7zX%K%tDYT4iRz;g&$}C7TE1F56J<%3UV)#HrhEUG^@~X%S z@`RYUU9@sJx08A3PXIilnESctx!K!TOS8A$l_VS7Ryp^JvjU#$Ih=pJd6U}LQ$h?& z!ssjtLcs5x9BrtR@ExA5V-IP{K?Bd8r;KO<42Ww8A^JyHLl^-O@%xIZ_cMF&-)mwh z^qW6iVCU)sYQ2qa&0840;MYcwhcDRjd&3uO`Mu!_(ujNdJb8kUCvJHi27QDJ|Lv26 z7TwA$A*~DnWT$|L^Mt%E6B;_l z5MVlnVTqNWcOI-E%n{N9)T6pQN661+!KFOhFXW+)&u01QEG@J}_cccdapRSwFe%`_ ztQaTsB<)62!IFXvgjoIZS8^ZN1ioUo5I-rmoD zcsaedJHDP12B`7&e#XdPHH#!L0f1=n_I|-V1}+?9kaX~5@DDQZg5y059MB4c)8&T2 zR^k=r{{@8QDsC9;J@Yh!rq*xiU|8!tD-7Gc=Lb&)Wae-;1CFu)^m8Bz_oDIv9lY3Q zqQo(WACTIPCfCF1{aGKVC#GziJ#8F+izm`Sa8NvL0`qC~;#N^l+YDv~atzWI&Gu{Jl7mFo%&r zOopZ3Bw-E{1LqvY#1Mi=n8L)sdrw-8F^YsKtPDt{R>CkA9jw6L{EQP={XnXJ^J3>= ztbUNrSGMyoRtA!piiBaj*qUcs1C3xhjZSwAa@wXaN2I75rie3xIU=R=6*S_^V2R2U zVm*|oJApeD$~b=32haMz&JQ@uAE;Da?t$*C)j-OZ;mvKdy}kT z{D=w0+!S|osyo5pSsz?&@T}6MHGnXM{{AU888JN9BJR^(|kS6P#nvorCMeNMkko3;9?la zfF6<#qQ?|KVlxA&ii}n4dncb~{SZ408dfoHzMRhbdD<@w_^By>BdXRZEqUt~wvuHN z==+AI6{J8gv$MKu3zxh>#}BX|0MbHXfb>cY6$cmu&d!+unV?j0Zl3{c7-*-ez4IP} zD@Jfh?x=W&!PVJ_YjVfznUx>xF%SYw!9*nE2YU=a=LMxkN*j#D10_Hdj9>7(rq_|E t{JqRfe&+i^;7ENQAaVKstPf_>`)?OjOp##nxfB2Z002ovPDHLkV1l}E1x)|| From 8ec3dc388a0da4cab8b768bc05bdb9319ea3e072 Mon Sep 17 00:00:00 2001 From: monster860 Date: Tue, 29 Mar 2016 17:02:11 -0400 Subject: [PATCH 2/6] Makes it not stay --- code/modules/admin/buildmode.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm index 535ffed740e..0dbd63f7e86 100644 --- a/code/modules/admin/buildmode.dm +++ b/code/modules/admin/buildmode.dm @@ -141,6 +141,7 @@ /datum/click_intercept/buildmode/Destroy() stored = null Reset() + areaimage.loc = null qdel(areaimage) ..() From bac5ffa8293f4f62307ef52c90a57ee745b4e5b2 Mon Sep 17 00:00:00 2001 From: monster860 Date: Wed, 30 Mar 2016 13:52:11 -0400 Subject: [PATCH 3/6] Fill mode --- code/modules/admin/buildmode.dm | 43 +++++++++++++++++++++++++++++++- icons/misc/buildmode.dmi | Bin 1449 -> 1481 bytes 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm index 0dbd63f7e86..de4f374e836 100644 --- a/code/modules/admin/buildmode.dm +++ b/code/modules/admin/buildmode.dm @@ -5,7 +5,8 @@ #define AREA_BUILDMODE 5 #define COPY_BUILDMODE 6 #define AREAEDIT_BUILDMODE 7 -#define NUM_BUILDMODES 7 +#define FILL_BUILDMODE 8 +#define NUM_BUILDMODES 8 /obj/screen/buildmode icon = 'icons/misc/buildmode.dmi' @@ -204,6 +205,11 @@ user << "Right Mouse Button on obj/turf/mob = Select area to paint" user << "Right Mouse Button on buildmode button = Create new area" user << "***********************************************************" + if(FILL_BUILDMODE) + user << "***********************************************************" + user << "Left Mouse Button on turf/obj/mob = Select corner" + user << "Right Mouse Button on buildmode button = Select object type" + user << "***********************************************************" /datum/click_intercept/buildmode/proc/change_settings(mob/user) switch(mode) @@ -264,6 +270,19 @@ storedarea.always_unpowered = 0 storedarea.name = areaname areaimage.loc = storedarea + if(FILL_BUILDMODE) + var/target_path = input(user,"Enter typepath:" ,"Typepath","/obj/structure/closet") + objholder = text2path(target_path) + if(!ispath(objholder)) + objholder = pick_closest_path(target_path) + if(!objholder || ispath(objholder, /area)) + objholder = /obj/structure/closet + return + else + if(ispath(objholder,/mob) && !check_rights(R_DEBUG,0)) + objholder = /obj/structure/closet + cornerA = null + cornerB = null /datum/click_intercept/buildmode/proc/change_dir() switch(build_dir) @@ -441,3 +460,25 @@ var/turf/T = get_turf(object) storedarea = get_area(T) areaimage.loc = storedarea + if(FILL_BUILDMODE) + if(!cornerA) + cornerA = select_tile(get_turf(object)) + return + if(cornerA && !cornerB) + cornerB = select_tile(get_turf(object)) + if(left_click) //rectangular + if(cornerA && cornerB) + if(!objholder) + user << "Select object type first." + else + for(var/turf/T in block(get_turf(cornerA),get_turf(cornerB))) + if(ispath(objholder,/turf)) + T.ChangeTurf(objholder) + else + var/obj/A = new objholder(T) + A.dir = build_dir + deselect_region() + return + + //Something wrong - Reset + deselect_region() diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi index 3ac5c80d1a51eea335ba4ca99ff40fa4f7bc0dc0..92519833fde3da360f6d44d9e2ebd4a8c4d6a1e0 100644 GIT binary patch delta 1227 zcmV;+1T_1p3&{(RUIC_&UzdMQyiyBXN|hB{{anDw2LOCCrU)y98EOCk1f)qsK~!jg z?U~E6)F2Rs;~VJcsd76m-T4ToiYnG;b9@5B3n0Dr&86w)(o7N{L06L*b$)aE(lqoB zSw4Ic+sCVVxqTDc{iW&h~prgZ`B;ah-iutTXSNaB2+xySRS!M6{FFjyUJA>`;7rn^{&KFJfSc2 zWlXSeU(^4jH423NE$3 zYwH4Vhfw&twk|dRV^0aGiJwfUlq5RPl#;nG<6h5?X_#VI_`9}Vb6&7Gu^mm?y? znj-w&nV1qHy2g`)-e&;>L&km)7%)~nI~YT2`HbyVV(ITfO#Clj!+*eWD|&u^jQ2MD z1pbF042WSOvz>>5Rp%OlG`z)GK_D!i!21SJDpkF@)i9bS&r6)~xQLYqDe6Ux^SU=x zJ*yBY#zX@JXqRv!#%X1q>ay_>Fsbf75{9UugNdz*Ho=rxkY-jilR|r$MC<$rQ+C-cys0C+|*_jA#6v$wI9W^cVKNjA8xa_$#r1w7YtID7LZ zwXdgy7?y<5SrmkT_dPktx0TJRTHEj=H81#mFzC$-j{3jm1xNi~^M8Ug;J?jYoeTV97j zAK}7ZTeHm`Lh^UX30NJ9hTfbX_Ym@;LaGs1fL&bWI71jca;$m)8Z5e%vxKxV1dyEq zBAzGYb(zr6IfekIV;GiL`F&@{nnE8Ty+G}$%YB6WZWdh1!}UTQ>iBM!-_FuP+n)RC zBZRo|N>Z2)aa2caiP7mRr*9c)}5?9anvLbvkzU@xJ5Bm^|gx#tWLdUq%Y z>pUDLOpVNhbsk!LeG)o&FJYC3S9^-8^YHqJof2_QUsegRYX!4S_?{5wRXrMSHi^aw pNBv*(f}{SgdBNFcX||pF3sfLh;`gS);{X5v07*qoLs_g0K~{79lqAQ^LbmJ&oZG;k^$Kw(^ihCp$>^BoAqG>j>%m zHH0~)W?w>x;~<@H)f&QxXo?YAb7D;qDjshvkJzD#(P+_KkL zCRn(y>3?8FR-2{ecJ9p|uJVW3-}UJ*J|Fg+t@d|a+KaQEwbg(Au190nhcwz?!7~Oz z5ybq^+EDE(bqbIxT#@OuruxRs^9YwHLYWB8DV(%-dp0eDaax7y#e zbpd!nDEwVp7l1Xfr-anRS0+?S5G^mjeF>=_3=Mf$rQt)95Gt@d|a`pK%viGywFXEA*9 zhyUFl{*n6gn?F2VKb+QQt0DthXYa$_M)u04dFW37JfoQVx#+ps+gMApx89W`8{Aeo_lvUvp6fZBy?K+` z*Hc0aOTy?Z3PQl|og8hblkgp$tz!>q%0UCqo~Mjx0t|?22qF4MSVI^A5%K$qs`oQ{ z@ZW1`TEIaWOY4Hn(XEFrB70c59ui1UQJ zE)yC$#}HsThGB`7pLZUtA Date: Sat, 2 Apr 2016 21:40:49 -0400 Subject: [PATCH 4/6] Adds link mode --- code/modules/admin/buildmode.dm | 113 +++++++++++++++++++++++++++++++- icons/misc/buildmode.dmi | Bin 1481 -> 1520 bytes icons/misc/mark.dmi | Bin 2355 -> 2691 bytes 3 files changed, 112 insertions(+), 1 deletion(-) diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm index de4f374e836..9dcba04b8b4 100644 --- a/code/modules/admin/buildmode.dm +++ b/code/modules/admin/buildmode.dm @@ -6,7 +6,8 @@ #define COPY_BUILDMODE 6 #define AREAEDIT_BUILDMODE 7 #define FILL_BUILDMODE 8 -#define NUM_BUILDMODES 8 +#define LINK_BUILDMODE 9 +#define NUM_BUILDMODES 9 /obj/screen/buildmode icon = 'icons/misc/buildmode.dmi' @@ -90,6 +91,32 @@ cl = null qdel(I) +/obj/effect/buildmode_line + var/image/I + var/client/cl + +/obj/effect/buildmode_line/New(var/client/c, var/atom/atom_a, var/atom/atom_b, var/linename) + name = linename + loc = get_turf(atom_a) + I = image('icons/misc/mark.dmi', src, "line", 19.0) + var/x_offset = ((atom_b.x * 32) + atom_b.pixel_x) - ((atom_a.x * 32) + atom_a.pixel_x) + var/y_offset = ((atom_b.y * 32) + atom_b.pixel_y) - ((atom_a.y * 32) + atom_a.pixel_y) + + var/matrix/M = matrix() + M.Translate(0, 16) + M.Scale(1, sqrt((x_offset * x_offset) + (y_offset * y_offset)) / 32) + M.Turn(90 - Atan2(x_offset, y_offset)) // So... You pass coords in order x,y to this version of atan2. It should be called acsc2. + M.Translate(atom_a.pixel_x, atom_a.pixel_y) + + transform = M + cl = c + cl.images += I + +/obj/effect/buildmode_line/Destroy() + cl.images -= I + cl = null + qdel(I) + /datum/click_intercept var/client/holder = null var/list/obj/screen/buttons = list() @@ -133,6 +160,9 @@ var/area/storedarea = null var/image/areaimage var/atom/movable/stored = null + var/list/link_lines = list() + var/obj/link_obj + var/valid_links = 0 /datum/click_intercept/buildmode/New(client/c) ..() @@ -210,6 +240,11 @@ user << "Left Mouse Button on turf/obj/mob = Select corner" user << "Right Mouse Button on buildmode button = Select object type" user << "***********************************************************" + if(LINK_BUILDMODE) + user << "***********************************************************" + user << "Left Mouse Button on obj = Select button to link" + user << "Right Mouse Button on obj = Link/unlink to selected button" + user << "***********************************************************" /datum/click_intercept/buildmode/proc/change_settings(mob/user) switch(mode) @@ -310,6 +345,9 @@ areaimage.loc = storedarea else areaimage.loc = null + for(var/obj/effect/buildmode_line/L in link_lines) + qdel(L) + link_lines -= L /datum/click_intercept/buildmode/proc/select_tile(var/turf/T) return new /obj/effect/buildmode_reticule(T, holder) @@ -482,3 +520,76 @@ //Something wrong - Reset deselect_region() + if(LINK_BUILDMODE) + if(left_click && istype(object, /obj/machinery)) + link_obj = object + if(right_click && istype(object, /obj/machinery)) + if(istype(link_obj, /obj/machinery/door_control) && istype(object, /obj/machinery/door/airlock)) + var/obj/machinery/door_control/M = link_obj + var/obj/machinery/door/airlock/P = object + if(!M.id || M.id == "") + M.id = input(holder, "Please select an ID for the button", "Buildmode", "") + if(!M.id || M.id == "") + goto(line_jump) + if(P.id_tag == M.id && (P in range(M.range, M)) && P.id_tag && P.id_tag != "") + P.id_tag = null + holder << "[P] unlinked." + goto(line_jump) + if(!M.normaldoorcontrol) + if(link_lines.len && alert(holder, "Warning: This will disable links to connected pod doors. Continue?", "Buildmode", "Yes", "No") == "No") + goto(line_jump) + M.normaldoorcontrol = 1 + if(P.id_tag && alert(holder, "Warning: This will unlink something else from the door. Continue?", "Buildmode", "Yes", "No") == "No") + goto(line_jump) + P.id_tag = M.id + if(istype(link_obj, /obj/machinery/door_control) && istype(object, /obj/machinery/door/poddoor)) + var/obj/machinery/door_control/M = link_obj + var/obj/machinery/door/poddoor/P = object + if(!M.id || M.id == "") + M.id = input(holder, "Please select an ID for the button", "Buildmode", "") + if(!M.id || M.id == "") + goto(line_jump) + if(P.id_tag == M.id && P.id_tag && P.id_tag != "") + P.id_tag = null + holder << "[P] unlinked." + goto(line_jump) + if(M.normaldoorcontrol) + if(link_lines.len && alert(holder, "Warning: This will disable links to connected airlocks. Continue?", "Buildmode", "Yes", "No") == "No") + goto(line_jump) + M.normaldoorcontrol = 0 + if(!M.id || M.id == "") + M.id = input(holder, "Please select an ID for the button", "Buildmode", "") + if(!M.id || M.id == "") + goto(line_jump) + if(P.id_tag && P.id_tag != 1 && alert(holder, "Warning: This will unlink something else from the door. Continue?", "Buildmode", "Yes", "No") == "No") + goto(line_jump) + P.id_tag = M.id + + line_jump // For the goto + valid_links = 0 + for(var/obj/effect/buildmode_line/L in link_lines) + qdel(L) + link_lines -= L + + if(istype(link_obj, /obj/machinery/door_control)) + var/obj/machinery/door_control/M = link_obj + for(var/obj/machinery/door/airlock/P in range(M.range,M)) + if(P.id_tag == M.id) + var/obj/effect/buildmode_line/L = new(holder, M, P, "[M.name] to [P.name]") + L.color = M.normaldoorcontrol ? "#339933" : "#993333" + if(M.normaldoorcontrol) + valid_links = 1 + link_lines += L + var/obj/effect/buildmode_line/L2 = new(holder, P, M, "[M.name] to [P.name]") // Yes, reversed one so that you can see it from both sides. + L2.color = L.color + link_lines += L2 + for(var/obj/machinery/door/poddoor/P in world) + if(P.id_tag == M.id) + var/obj/effect/buildmode_line/L = new(holder, M, P, "[M.name] to [P.name]") + L.color = M.normaldoorcontrol ? "#993333" : "#339933" + if(M.normaldoorcontrol) + valid_links = 0 + link_lines += L + var/obj/effect/buildmode_line/L2 = new(holder, P, M, "[M.name] to [P.name]") // Yes, reversed one so that you can see it from both sides. + L2.color = L.color + link_lines += L2 diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi index 92519833fde3da360f6d44d9e2ebd4a8c4d6a1e0..1d206b45e7520c9102720970740e66e824bd157d 100644 GIT binary patch delta 1291 zcmV+m1@!vK3-Ak&UID3*Uz>m8m0IFbs;uDZ=K@Y?0Iy-Plwx7wd;kCh$Vo&&RA_w zncjU++xxqEdVEpa^RAvA&+-c%&%1hhe4LBz+w-oT9xty;+J60bvbKL->w15sEr5@D zdVDIs;ro*{fY$YXt-;N+0n&kRDK`AZC4Xbm^?t2w6dv^+p>Zb&?l&-g{pVwqn*I#3nu@+-%j|7%o8Xh(3?amEFrM$`F@%C>ixJy!VqGGfdAxBvVpA21qeXX>t2Fi-3##hfiJ`i~ zQ0U8;VBx-}|A7@5ZI*`Hxi^0}${%Kb*QaTG-t0M3?eDsD5PN?;YpVTSkH)SKX|%zD zXDv|WW5Uwk^=PEcqf@APj^5$7kx==&4o#zrg+v%Ca`+brE!Py~?>cl0Cn3f7KFG-sQq1Ai;z|iU^<4{-?cU8TqcCD*W!y?S^K-T7C?#NDi5{4YwH4VqY6&7 zziaCPaEDO&yS9HW0Hvo;YT_#s&a);u&@m-*U&g(GAJZ_!u<&FP7GH>(GcpnUtSe?K^}^UUsNlXb32`f;RL`l zin*T`&&}S(xj1|4T}g7}w#vDm%nEp}=W+HHOlp5$PoWr=gyJj;Lcs66INHQc!gsj0 zj(tkU9JFxsJmrjzfP^@P5X3*i7(xL=#P1`j-p}m8e~*cw(r^B7fSs!kIIE|6yM2qR z3w}Kga~o7S`n%)=oS~v& z`sRPf8-%>5kZJ@LU@xm2R|v%;OVtA~;LxpHC5$UW0NE)Z;&nn^m!XEvF$B0ALt0|x z=bh(k$_`7gosA1^NA9al2(s}?5={z{`yyDs*j~aw zk}fEDs2!}V5BBHbF`-|0eXy6%tO)^4bMAjRn$Y3H3QE?!(Z*}Sx>ajJ(tzD*Z?rL* zux?c%q7Gif6pV4Z<6)JDt)3Ez(TML6R(aU!DY4bTn0-QN=1xCId1-mgb(2v3jA2Y) zeoctus@_cFO&3v{@U9kiN|hB{{anDw2LOCCrU)y98EOCk1f)qsK~!jg?U~E6 z)F2Rs;~VJcsd76m-T4ToiYnG;b9@5B3n0Dr&86w)(o7N{L06L*b$)aE(lqoBSw4Ic z+sCVVxqTDc{iW&h~prgZ`B;ah-iutTXSNaB2+xySRS!M6{FFjyUJA>`;7rn^{&KFJfSc2WlXSe zU(^4jH423NE$3YwH4V zhfw&twk`l;PYHjiiJwfUlq5RPl#;nG<6h5?X_#VI_`9}Vb6&75xewvJ-X}} z8$Ct(yB@6$+}cw6yDojOYO>>CTly%5Pk;E|{ox;}zdnEc;qLn3X}z~9GN5(#KJ0CT zzdJFbhp2cwl>Y7nF+~5EyiMtzPRy4hBE*^^{N0(D5+b_BlZ4)90R%(Fei0ZjRy{iy zLu>hr?Nwsw??O!cFJHsJaVvU$e~kAw`~?1oAPk6MBD0-`fmP=kf;7CvSwSEyp1}JC zP%2fuy48O$nkLUnobkAbl?W;7MU3;hH&s2W5Glq)0|jW8a3jWPWuEG?@eweo?miNR zsG)<2t%^3mlv$8wRy31Bd!jAu#PETL456I+R9P`soiR*tz zSb%?BT;(`J7(H^VdH@?BE zAMDS=V?wv``d}}iek24m&AI0c5_)$i2a{;zq#*=A|Bo%;(^AXeh{ro!U@ O0000kegQ5dbA(1g55#azpd`Zq{69`TZDl%Pk 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 literal 2355 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 From c769b14158fe05263aa08900e892eed71b416f9a Mon Sep 17 00:00:00 2001 From: monster860 Date: Tue, 12 Apr 2016 17:44:44 -0400 Subject: [PATCH 5/6] lien nutes --- code/modules/admin/buildmode.dm | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm index 9981e52933a..0e5c5759bf6 100644 --- a/code/modules/admin/buildmode.dm +++ b/code/modules/admin/buildmode.dm @@ -113,9 +113,13 @@ cl.images += I /obj/effect/buildmode_line/Destroy() - cl.images -= I - cl = null - qdel(I) + if(I) + if(istype(cl)) + cl.image -= I + cl = null + qdel(I) + I = null + return ..() /datum/click_intercept var/client/holder = null @@ -316,8 +320,7 @@ else if(ispath(objholder,/mob) && !check_rights(R_DEBUG,0)) objholder = /obj/structure/closet - cornerA = null - cornerB = null + deselect_region() /datum/click_intercept/buildmode/proc/change_dir() switch(build_dir) @@ -507,7 +510,7 @@ if(left_click) //rectangular if(cornerA && cornerB) if(!objholder) - user << "Select object type first." + to_chat(user, "Select object type first.") else for(var/turf/T in block(get_turf(cornerA),get_turf(cornerB))) if(ispath(objholder,/turf)) @@ -533,7 +536,7 @@ goto(line_jump) if(P.id_tag == M.id && (P in range(M.range, M)) && P.id_tag && P.id_tag != "") P.id_tag = null - holder << "[P] unlinked." + to_chat(holder, "[P] unlinked.") goto(line_jump) if(!M.normaldoorcontrol) if(link_lines.len && alert(holder, "Warning: This will disable links to connected pod doors. Continue?", "Buildmode", "Yes", "No") == "No") @@ -551,7 +554,7 @@ goto(line_jump) if(P.id_tag == M.id && P.id_tag && P.id_tag != "") P.id_tag = null - holder << "[P] unlinked." + to_chat(holder, "[P] unlinked.") goto(line_jump) if(M.normaldoorcontrol) if(link_lines.len && alert(holder, "Warning: This will disable links to connected airlocks. Continue?", "Buildmode", "Yes", "No") == "No") From 198bcd384db1016a935f796ff7a912c114e8ad93 Mon Sep 17 00:00:00 2001 From: monster860 Date: Tue, 12 Apr 2016 17:53:54 -0400 Subject: [PATCH 6/6] travis --- code/modules/admin/buildmode.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm index 0e5c5759bf6..455bea43014 100644 --- a/code/modules/admin/buildmode.dm +++ b/code/modules/admin/buildmode.dm @@ -115,7 +115,7 @@ /obj/effect/buildmode_line/Destroy() if(I) if(istype(cl)) - cl.image -= I + cl.images -= I cl = null qdel(I) I = null