diff --git a/code/game/machinery/atmoalter/area_atmos_computer.dm b/code/game/machinery/atmoalter/area_atmos_computer.dm index 8eff4e741ef..474f41614e8 100644 --- a/code/game/machinery/atmoalter/area_atmos_computer.dm +++ b/code/game/machinery/atmoalter/area_atmos_computer.dm @@ -3,8 +3,20 @@ desc = "A computer used to control the stationary scrubbers and pumps in the area." icon_state = "area_atmos" circuit = "/obj/item/weapon/circuitboard/area_atmos" - var/scrubber_state = 0 //0 = off; 1 = on + var/list/connectedscrubbers = new() + var/status = "" + + var/range = 25 + + //Simple variable to prevent me from doing attack_hand in both this and the child computer + var/zone = "This computer is working on a wireless range, the range is currently limited to 25 meters." + + New() + ..() + //So the scrubbers have time to spawn + spawn(10) + scanscrubbers() attack_ai(var/mob/user as mob) return src.attack_hand(user) @@ -14,38 +26,105 @@ attack_hand(var/mob/user as mob) src.add_fingerprint(usr) - var/dat = text("
Area Air Control:
Turn area scrubbers [scrubber_state?"off":"on"]
") - user << browse("[dat]", "window=miningshuttle;size=200x100") + var/dat = {" + + + + + +

Area Air Control

+ [status]
+ Scan + "} + for(var/obj/machinery/portable_atmospherics/scrubber/huge/scrubber in connectedscrubbers) + dat += {" + + + + "} + + dat += {" +
[scrubber.name]Turn On Turn Off

+ [zone] + + "} + user << browse("[dat]", "window=miningshuttle;size=400x400") + status = "" Topic(href, href_list) if(..()) return usr.machine = src src.add_fingerprint(usr) - if(href_list["scrubbers"]) - toggle_scrubbers() - usr << "\blue Area scrubbers turned [scrubber_state?"on":"off"]" - proc/toggle_scrubbers() - if( (ishuman(usr)||issilicon(usr)) && !usr.stat && !usr.restrained() ) - scrubber_state = !scrubber_state - var/turf/T = get_turf(src) - if(!T.loc) return - var/area/A = T.loc - if (A.master) - A = A.master - for( var/obj/machinery/portable_atmospherics/scrubber/stationary/SCRUBBER in world ) - var/turf/T2 = get_turf(SCRUBBER) - if ( T2 && T2.loc) - var/area/A2 = T2.loc - if ( istype(A2) && A2.master && A2.master == A ) - SCRUBBER.on = scrubber_state - SCRUBBER.update_icon() - if(scrubber_state) - icon_state = "area_atmos2" - else - icon_state = "area_atmos" + if(href_list["scan"]) + scanscrubbers() + else if(href_list["toggle"]) + var/obj/machinery/portable_atmospherics/scrubber/huge/scrubber = locate(href_list["scrub"]) + + if(!validscrubber(scrubber)) + spawn(20) + status = "ERROR: Couldn't connect to scrubber! (timeout)" + connectedscrubbers -= scrubber + src.updateUsrDialog() + return + + scrubber.on = text2num(href_list["toggle"]) + scrubber.update_icon() + + proc/validscrubber( var/obj/machinery/portable_atmospherics/scrubber/huge/scrubber as obj ) + if(!isobj(scrubber) || get_dist(scrubber.loc, src.loc) > src.range || scrubber.loc.z != src.loc.z) + return 0 + + return 1 + + proc/scanscrubbers() + connectedscrubbers = new() + + var/found = 0 + for(var/obj/machinery/portable_atmospherics/scrubber/huge/scrubber in range(range, src.loc)) + if(istype(scrubber)) + found = 1 + connectedscrubbers += scrubber + + if(!found) + status = "ERROR: No scrubber found!" + + src.updateUsrDialog() attackby(I as obj, user as mob) if(istype(I, /obj/item/weapon/screwdriver)) @@ -68,4 +147,55 @@ A.state = 4 A.icon_state = "4" - del(src) \ No newline at end of file + del(src) + +/obj/machinery/computer/area_atmos/area + zone = "This computer is working in a wired network limited to this area." + + validscrubber( var/obj/machinery/portable_atmospherics/scrubber/huge/scrubber as obj ) + if(!isobj(scrubber)) + return 0 + + /* + wow this is stupid, someone help me + */ + var/turf/T_src = get_turf(src) + if(!T_src.loc) return 0 + var/area/A_src = T_src.loc + if (A_src.master) + A_src = A_src.master + + var/turf/T_scrub = get_turf(scrubber) + if(!T_scrub.loc) return 0 + var/area/A_scrub = T_scrub.loc + if (A_scrub.master) + A_scrub = A_scrub.master + + if(A_scrub != A_src) + return 0 + + return 1 + + scanscrubbers() + connectedscrubbers = new() + + var/found = 0 + + var/turf/T = get_turf(src) + if(!T.loc) return + var/area/A = T.loc + if (A.master) + A = A.master + for(var/obj/machinery/portable_atmospherics/scrubber/huge/scrubber in world ) + var/turf/T2 = get_turf(scrubber) + if(T2 && T2.loc) + var/area/A2 = T2.loc + if(istype(A2) && A2.master && A2.master == A ) + connectedscrubbers += scrubber + found = 1 + + + if(!found) + status = "ERROR: No scrubber found!" + + src.updateUsrDialog() \ No newline at end of file diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm index b347e473d23..ff9bf7d359b 100644 --- a/code/game/machinery/atmoalter/scrubber.dm +++ b/code/game/machinery/atmoalter/scrubber.dm @@ -10,27 +10,58 @@ volume = 750 - stationary - name = "Stationary Air Scrubber" - icon_state = "scrubber:0" - anchored = 1 - volume = 30000 - volume_rate = 5000 +/obj/machinery/portable_atmospherics/scrubber/huge + name = "Huge Air Scrubber" + icon_state = "scrubber:0" + anchored = 1 + volume = 50000 + volume_rate = 5000 - attack_hand(var/mob/user as mob) - usr << "\blue You can't directly interact with this machine. Use the area atmos computer." + var/global/gid = 1 + var/id = 0 + New() + ..() + id = gid + gid++ - update_icon() - src.overlays = 0 + name = "[name] (ID [id])" + attack_hand(var/mob/user as mob) + usr << "\blue You can't directly interact with this machine. Use the area atmos computer." + + update_icon() + src.overlays = 0 + + if(on) + icon_state = "scrubber:1" + else + icon_state = "scrubber:0" + + attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if(istype(W, /obj/item/weapon/wrench)) if(on) - icon_state = "scrubber:1" - else - icon_state = "scrubber:0" + user << "\blue Turn it off first!" + return + + anchored = !anchored + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + user << "\blue You [anchored ? "wrench" : "unwrench"] \the [src]." - attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) return + ..() + +/obj/machinery/portable_atmospherics/scrubber/huge/stationary + name = "Stationary Air Scrubber" + + attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if(istype(W, /obj/item/weapon/wrench)) + user << "\blue The bolts are too tight for you to unscrew!" + return + + ..() + + /obj/machinery/portable_atmospherics/scrubber/update_icon() src.overlays = 0 diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 909ce9d0f55..ee3fd2400cd 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -92,29 +92,32 @@ icon_state = "[mineral]fwall_open" /obj/structure/falsewall/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/screwdriver)) - var/turf/T = get_turf(src) - user.visible_message("[user] tightens some bolts on the wall.", "You tighten the bolts on the wall.") - if(!mineral) - T.ReplaceWithWall() - else - T.ReplaceWithMineralWall(mineral) - del(src) - - if( istype(W, /obj/item/weapon/weldingtool) ) - var/obj/item/weapon/weldingtool/WT = W - if( WT:welding ) + if(density) + if(istype(W, /obj/item/weapon/screwdriver)) var/turf/T = get_turf(src) + user.visible_message("[user] tightens some bolts on the wall.", "You tighten the bolts on the wall.") if(!mineral) T.ReplaceWithWall() else T.ReplaceWithMineralWall(mineral) - if(mineral != "plasma")//Stupid shit keeps me from pushing the attackby() to plasma walls -Sieve - T = get_turf(src) - T.attackby(W,user) del(src) - else if( istype(W, /obj/item/weapon/pickaxe/plasmacutter) ) + if( istype(W, /obj/item/weapon/weldingtool) ) + var/obj/item/weapon/weldingtool/WT = W + if( WT:welding ) + var/turf/T = get_turf(src) + if(!mineral) + T.ReplaceWithWall() + else + T.ReplaceWithMineralWall(mineral) + if(mineral != "plasma")//Stupid shit keeps me from pushing the attackby() to plasma walls -Sieve + T = get_turf(src) + T.attackby(W,user) + del(src) + else + user << "\blue You can't reach, close it first!" + + if( istype(W, /obj/item/weapon/pickaxe/plasmacutter) ) var/turf/T = get_turf(src) if(!mineral) T.ReplaceWithWall() @@ -172,7 +175,7 @@ /obj/structure/falserwall/ anchored = 1 - + attack_hand(mob/user as mob) if(density) // Open wall