diff --git a/code/defines/procs/gamehelpers.dm b/code/defines/procs/gamehelpers.dm
index 59a9a636f3e..c182249a242 100644
--- a/code/defines/procs/gamehelpers.dm
+++ b/code/defines/procs/gamehelpers.dm
@@ -267,4 +267,10 @@ proc/isInSight(var/atom/A, var/atom/B)
if(dx > 0)
return get_step(start, WEST)
else
- return get_step(start, EAST)
\ No newline at end of file
+ return get_step(start, EAST)
+
+/proc/get_mob_by_key(var/key)
+ for(var/mob/M in mob_list)
+ if(M.ckey == lowertext(key))
+ return M
+ return null
diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm
index a7470a6fab9..51bd7dee36e 100644
--- a/code/game/gamemodes/wizard/rightandwrong.dm
+++ b/code/game/gamemodes/wizard/rightandwrong.dm
@@ -1,6 +1,7 @@
/mob/proc/rightandwrong()
+ message_admins("[key_name_admin(usr, 1)] summoned guns!")
for(var/mob/living/carbon/human/H in player_list)
if(H.stat == 2 || !(H.client)) continue
if(is_special_character(H)) continue
diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm
index 23ee3d3f6aa..7e0eda9e342 100644
--- a/code/game/objects/effects/effect_system.dm
+++ b/code/game/objects/effects/effect_system.dm
@@ -441,11 +441,6 @@ steam.start() -- spawns the effect
cardinals = c
carry.copy_to(chemholder, carry.total_volume)
- /*
- if((src.reagents.has_reagent("pacid")) || (src.reagents.has_reagent("lube"))) // Messages admins if someone sprays polyacid or space lube from a Cleaner bottle.
- message_admins("[key_name_admin(user)] fired Polyacid/Space lube from a Cleaner bottle.") // Polymorph
- log_game("[key_name(user)] fired Polyacid/Space lube from a Cleaner bottle.")
-*/
if(istype(loca, /turf/))
location = loca
@@ -454,12 +449,26 @@ steam.start() -- spawns the effect
if(direct)
direction = direct
+ var/contained = ""
+ for(var/reagent in carry.reagent_list)
+ contained += " [reagent] "
+ if(contained)
+ contained = "\[[contained]\]"
+ var/area/A = get_area(location)
+
+ var/where = "[A.name] | [location.x], [location.y]"
+ var/whereLink = "[where]"
+
if(carry.my_atom.fingerprintslast)
- message_admins("A chemical smoke reaction has taken place in ([location.x], [location.y]). Last associated key is [carry.my_atom.fingerprintslast].")
- log_game("A chemical smoke reaction has taken place in ([location.x], [location.y]). Last associated key is [carry.my_atom.fingerprintslast].")
+ var/mob/M = get_mob_by_key(carry.my_atom.fingerprintslast)
+ var/more = ""
+ if(M)
+ more = "(?)"
+ message_admins("A chemical smoke reaction has taken place in ([whereLink])[contained]. Last associated key is [carry.my_atom.fingerprintslast][more].", 0, 1)
+ log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last associated key is [carry.my_atom.fingerprintslast].")
else
- message_admins("A chemical smoke reaction has taken place in ([location.x], [location.y]). No associated key.")
- log_game("A chemical smoke reaction has taken place in ([location.x], [location.y]). No associated key.")
+ message_admins("A chemical smoke reaction has taken place in ([whereLink]). No associated key.", 0, 1)
+ log_game("A chemical smoke reaction has taken place in ([where])[contained]. No associated key.")
start()
var/i = 0
diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm
index 05705c3a357..89f98691793 100644
--- a/code/game/objects/items/devices/transfer_valve.dm
+++ b/code/game/objects/items/devices/transfer_valve.dm
@@ -6,7 +6,7 @@
var/obj/item/weapon/tank/tank_one
var/obj/item/weapon/tank/tank_two
var/obj/item/device/attached_device
- var/mob/attacher = "Unknown"
+ var/mob/attacher = null
var/valve_open = 0
var/toggle = 1
@@ -52,7 +52,7 @@
bombers += "[key_name(user)] attached a [item] to a transfer valve."
message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.")
log_game("[key_name_admin(user)] attached a [item] to a transfer valve.")
- attacher = key_name(user)
+ attacher = user
return
@@ -156,10 +156,28 @@
if(valve_open==0 && (tank_one && tank_two))
valve_open = 1
var/turf/bombturf = get_turf(src)
- var/bombarea = bombturf.loc.name
- var/log_str = "Bomb valve opened in [bombarea] with [attached_device ? attached_device : "no device"] attacher: [attacher]. Last touched by: [src.fingerprintslast]"
+ var/area/A = get_area(bombturf)
+
+ var/attacher_name = ""
+ if(!attacher)
+ attacher_name = "Unknown"
+ else
+ attacher_name = "[attacher.name]([attacher.ckey])"
+
+ var/log_str = "Bomb valve opened in [A.name] "
+ log_str += "with [attached_device ? attached_device : "no device"] attacher: [attacher_name]"
+
+ if(attacher)
+ log_str += "(?)"
+
+ var/mob/mob = get_mob_by_key(src.fingerprintslast)
+ var/last_touch_info = ""
+ if(mob)
+ last_touch_info = "(?)"
+
+ log_str += " Last touched by: [src.fingerprintslast][last_touch_info]"
bombers += log_str
- message_admins(log_str)
+ message_admins(log_str, 0, 1)
log_game(log_str)
merge_gases()
spawn(20) // In case one tank bursts
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 17289687a01..2c2f7fa40a0 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -1217,6 +1217,25 @@ var/global/floorIsLava = 0
sleep(2)
C.jumptomob(M)
+ if (href_list["adminplayerobservecoodjump"])
+
+ var/x = text2num(href_list["X"])
+ var/y = text2num(href_list["Y"])
+ var/z = text2num(href_list["Z"])
+
+ if(src && src.owner)
+ var/client/C
+ if(istype(src.owner,/client))
+ C = src.owner
+ else if(ismob(src.owner))
+ var/mob/MO = src.owner
+ C = MO.client
+ if(C)
+ if(state == 1)
+ C.admin_ghost()
+ sleep(2)
+ C.jumptocoord(x, y, z)
+
if (href_list["adminchecklaws"])
if(src && src.owner)
output_ai_laws()
@@ -2110,16 +2129,17 @@ var/global/floorIsLava = 0
spawn(0)
for(var/i = i, i < length, i++) // 180 = 3 minutes
- for(var/mob/living/carbon/L in living_mob_list)
- if(istype(L.loc, /turf/simulated/floor)) // Are they on LAVA?!
- var/turf/simulated/floor/F = L.loc
- var/safe = 0
- for(var/obj/structure/O in F.contents)
- if(O.level > F.level && !istype(O, /obj/structure/window)) // Something to stand on and it isn't under the floor!
- safe = 1
- break
- if(!safe)
- L.adjustFireLoss(damage)
+ if(damage)
+ for(var/mob/living/carbon/L in living_mob_list)
+ if(istype(L.loc, /turf/simulated/floor)) // Are they on LAVA?!
+ var/turf/simulated/floor/F = L.loc
+ var/safe = 0
+ for(var/obj/structure/O in F.contents)
+ if(O.level > F.level && !istype(O, /obj/structure/window)) // Something to stand on and it isn't under the floor!
+ safe = 1
+ break
+ if(!safe)
+ L.adjustFireLoss(damage)
sleep(10)
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index a37450941fb..edc7516f86e 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -502,6 +502,9 @@ var/global/list/uneatable = list(
continue
if(cult_nh_mind.current.stat)
continue
+ var/turf/pos = get_turf(cult_nh_mind.current)
+ if(pos.z != src.z)
+ continue
cultists += cult_nh_mind.current
if(cultists.len)
acquire(pick(cultists))
@@ -510,6 +513,9 @@ var/global/list/uneatable = list(
for(var/mob/living/carbon/human/food in living_mob_list)
if(food.stat)
continue
+ var/turf/pos = get_turf(food)
+ if(pos.z != src.z)
+ continue
cultists += food
if(cultists.len)
acquire(pick(cultists))
@@ -518,6 +524,9 @@ var/global/list/uneatable = list(
for(var/mob/dead/observer/ghost in player_list)
if(!ghost.client)
continue
+ var/turf/pos = get_turf(ghost)
+ if(pos.z != src.z)
+ continue
cultists += ghost
if(cultists.len)
acquire(pick(cultists))