diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm
index 33d4380acda..533d860f573 100644
--- a/code/ATMOSPHERICS/components/valve.dm
+++ b/code/ATMOSPHERICS/components/valve.dm
@@ -242,6 +242,20 @@
return
..()
+ log_and_message_admins("has [open ? "OPENED" : "closed"] [name]. (JMP)", user)
+
+/obj/machinery/atmospherics/valve/digital/AltClick(var/mob/dead/observer/admin)
+ if (istype(admin))
+ if (admin.client && admin.client.holder && ((R_MOD|R_ADMIN) & admin.client.holder.rights))
+ if (open)
+ close()
+ else
+ if (alert(admin, "The valve is currently closed. Do you want to open it?", "Open the valve?", "Yes", "No") == "No")
+ return
+ open()
+
+ log_and_message_admins("has [open ? "opened" : "closed"] [name]. (JMP)", admin)
+
/obj/machinery/atmospherics/valve/digital/open
open = 1
icon_state = "map_valve1"
diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index 458e787b79d..42eac84de37 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -246,6 +246,25 @@ update_flag
healthcheck()
return
+/obj/machinery/portable_atmospherics/canister/AltClick(var/mob/dead/observer/admin)
+ if (istype(admin))
+ if (admin.client && admin.client.holder && ((R_MOD|R_ADMIN) & admin.client.holder.rights))
+ if (valve_open)
+ if (holding)
+ release_log += "Valve was closed by [key_name(admin)] (aghost), stopping the transfer into the [holding]
"
+ else
+ release_log += "Valve was closed by [key_name(admin)] (aghost), stopping the transfer into the air
"
+ else
+ if (alert(admin, "The release valve is currently closed. Do you want to open it?", "Open the valve?", "Yes", "No") == "No")
+ return
+
+ if (holding)
+ release_log += "Valve was opened by [key_name(admin)] (aghost), starting the transfer into the [holding]
"
+ else
+ release_log += "Valve was opened by [key_name(admin)] (aghost), starting the transfer into the air
"
+ log_open(admin)
+ valve_open = !valve_open
+
/obj/machinery/portable_atmospherics/canister/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if(!istype(W, /obj/item/weapon/wrench) && !istype(W, /obj/item/weapon/tank) && !istype(W, /obj/item/device/analyzer) && !istype(W, /obj/item/device/pda))
visible_message("\red [user] hits the [src] with a [W]!")
diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm
index cf4606f68d1..5b65a858076 100644
--- a/code/game/machinery/atmoalter/portable_atmospherics.dm
+++ b/code/game/machinery/atmoalter/portable_atmospherics.dm
@@ -199,7 +199,7 @@
return
..()
-/obj/machinery/portable_atmospherics/proc/log_open()
+/obj/machinery/portable_atmospherics/proc/log_open(var/mob/user)
if(air_contents.gas.len == 0)
return
@@ -209,5 +209,9 @@
gases += ", [gas]"
else
gases = gas
- log_admin("[usr] ([usr.ckey]) opened '[src.name]' containing [gases].")
- message_admins("[usr] ([usr.ckey]) opened '[src.name]' containing [gases]. (JMP)")
+
+ if (!user && usr)
+ user = usr
+
+ log_admin("[user] ([user.ckey]) opened '[src.name]' containing [gases].")
+ message_admins("[user] ([user.ckey]) opened '[src.name]' containing [gases]. (JMP)")
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 31ad0e44e22..06531cbcf5a 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -1400,6 +1400,9 @@ proc/admin_notice(var/message, var/rights)
msg = "has paralyzed [key_name(H)]."
H.visible_message("OOC Information: [H] has been winded by a member of staff! Please freeze all roleplay involving their character until the matter is resolved! Adminmhelp if you have further questions.", "You have been winded by a member of staff! Please stand by until they contact you!")
else
+ if (alert("The player is currently winded. Do you want to unwind him?", "Unwind player?", "Yes", "No") == "No")
+ return
+
H.paralysis = 0
msg = "has unparalyzed [key_name(H)]."
H.visible_message("OOC Information: [H] has been unwinded by a member of staff!", "You have been unwinded by a member of staff!")
diff --git a/html/changelogs/skull132-Admin.yml b/html/changelogs/skull132-Admin.yml
new file mode 100644
index 00000000000..4e4faf21448
--- /dev/null
+++ b/html/changelogs/skull132-Admin.yml
@@ -0,0 +1,8 @@
+author: Skull132
+
+delete-after: True
+
+changes:
+ - rscadd: "Ghosts with +ADMIN or +MOD can now alt-left-click on canisters and digital valves in order to toggle them open and shut."
+ - rscadd: "Opening of digital valves provides adminlogs once more."
+ - tweak: "Unwinding now requires that a prompt be confirmed. This should stop wind-unwind-wind shenanigans from happening."