diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm
index 3ed3e521e4..5d4cb3319d 100644
--- a/code/datums/components/crafting/crafting.dm
+++ b/code/datums/components/crafting/crafting.dm
@@ -410,6 +410,16 @@
else
result.forceMove(user.drop_location())
to_chat(user, "[TR.name] constructed.")
+
+ if (istype(result, /obj/item/grenade/iedcasing) || istype(result, /obj/item/reagent_containers/food/drinks/bottle/molotov))
+ var/client/client = user.client
+ if (CONFIG_GET(flag/use_exp_tracking) && client && client.get_exp_living(TRUE) < 480) // Player with less than 8 hours playtime is making an IED or molotov cocktail.
+ if(client.next_ied_grief_warning < world.time)
+ var/turf/T = get_turf(user)
+ client.next_ied_grief_warning = world.time + 15 MINUTES // Wait 15 minutes before alerting admins again
+ message_admins("ANTI-GRIEF: New player [ADMIN_LOOKUPFLW(user)] has crafted an IED or Molotov at [ADMIN_VERBOSEJMP(T)].")
+ client.crafted_ied = TRUE
+
else
to_chat(user, "Construction failed[result]")
busy = FALSE
diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm
index df74fdcabf..fc777629e6 100644
--- a/code/game/objects/items/devices/transfer_valve.dm
+++ b/code/game/objects/items/devices/transfer_valve.dm
@@ -82,11 +82,11 @@
/obj/item/transfer_valve/on_attack_hand(mob/living/user)//Triggers mousetraps
. = ..()
- var/turf/T = get_turf(src)
var/client/client = user.client
if (CONFIG_GET(flag/use_exp_tracking) && client && client.get_exp_living(TRUE) < 480) // Player with less than 8 hours playtime has touched a bomb valve.
if(client.next_valve_grief_warning < world.time)
- client.next_valve_grief_warning = world.time + 9000 // Wait 15 minutes before alerting admins again
+ var/turf/T = get_turf(src)
+ client.next_valve_grief_warning = world.time + 15 MINUTES // Wait 15 minutes before alerting admins again
message_admins("ANTI-GRIEF: New player [ADMIN_LOOKUPFLW(user)] touched \a [src] at [ADMIN_VERBOSEJMP(T)].")
client.touched_transfer_valve = TRUE
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index c61302fec8..f39e54fcdb 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -343,11 +343,11 @@
ui = new(user, src, "Canister", name)
ui.open()
- var/turf/T = get_turf(src)
var/client/client = user.client
if (CONFIG_GET(flag/use_exp_tracking) && client && client.get_exp_living(TRUE) < 480) // Player with less than 8 hours playtime is interacting with this canister.
if(client.next_canister_grief_warning < world.time)
- client.next_canister_grief_warning = world.time + 9000 // Wait 15 minutes before alerting admins again
+ var/turf/T = get_turf(src)
+ client.next_canister_grief_warning = world.time + 15 MINUTES // Wait 15 minutes before alerting admins again
message_admins("ANTI-GRIEF: New player [ADMIN_LOOKUPFLW(user)] has touched \a [src] at [ADMIN_VERBOSEJMP(T)].")
client.touched_canister = TRUE
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index e5cfd18547..26052adfba 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -190,12 +190,12 @@
ui.set_autoupdate(FALSE) //to not ruin the immersion by constantly changing the fake chemicals
ui.open()
- var/turf/T = get_turf(src)
var/client/client = user.client
if (CONFIG_GET(flag/use_exp_tracking) && client && client.get_exp_living(TRUE) < 480) // Player with less than 8 hours playtime is using this machine.
if(client.next_chem_grief_warning < world.time)
if(!istype(src, /obj/machinery/chem_dispenser/drinks) && !istype(src, /obj/machinery/chem_dispenser/mutagen) && !istype(src, /obj/machinery/chem_dispenser/mutagensaltpeter) && !istype(src, /obj/machinery/chem_dispenser/abductor)) // These types aren't used for grief
- client.next_chem_grief_warning = world.time + 9000 // Wait 15 minutes before alerting admins again
+ var/turf/T = get_turf(src)
+ client.next_chem_grief_warning = world.time + 15 MINUTES // Wait 15 minutes before alerting admins again
message_admins("ANTI-GRIEF: New player [ADMIN_LOOKUPFLW(user)] used \a [src] at [ADMIN_VERBOSEJMP(T)].")
client.used_chem_dispenser = TRUE
diff --git a/modular_splurt/code/modules/admin/playtimes.dm b/modular_splurt/code/modules/admin/playtimes.dm
index c5fb16e7b3..a5e547321d 100644
--- a/modular_splurt/code/modules/admin/playtimes.dm
+++ b/modular_splurt/code/modules/admin/playtimes.dm
@@ -3,9 +3,11 @@
var/next_valve_grief_warning = 0
var/next_chem_grief_warning = 0
var/next_canister_grief_warning = 0
+ var/next_ied_grief_warning = 0
var/touched_transfer_valve = FALSE
var/used_chem_dispenser = FALSE
var/touched_canister = FALSE
+ var/crafted_ied = FALSE
/client/proc/cmd_player_playtimes()
set category = "Admin"
@@ -41,9 +43,7 @@
client["ckey"] = C.ckey
client["playtime"] = C.get_exp_living(TRUE)
client["playtime_hours"] = C.get_exp_living()
- client["warning_valve"] = C.touched_transfer_valve
- client["warning_chem"] = C.used_chem_dispenser
- client["warning_canister"] = C.touched_canister
+ client["flags"] = check_flags(C)
var/name = C.ckey
var/mob/M = C.mob
@@ -62,6 +62,35 @@
data["clients"] = clients
return data
+/datum/player_playtime/proc/check_flags(client/C)
+ var/list/flags = list()
+
+ if (C.touched_transfer_valve)
+ var/list/flag = list()
+ flag["icon"] = "bomb"
+ flag["tooltip"] = "This player touched a Transfer Valve."
+ flags += list(flag)
+
+ if (C.used_chem_dispenser)
+ var/list/flag = list()
+ flag["icon"] = "flask"
+ flag["tooltip"] = "This player used a Chem Dispenser."
+ flags += list(flag)
+
+ if (C.touched_canister)
+ var/list/flag = list()
+ flag["icon"] = "spray-can"
+ flag["tooltip"] = "This player touched a gas canister."
+ flags += list(flag)
+
+ if (C.crafted_ied)
+ var/list/flag = list()
+ flag["icon"] = "hammer"
+ flag["tooltip"] = "This player crafted an IED."
+ flags += list(flag)
+
+ return flags
+
/datum/player_playtime/ui_act(action, params)
if(..())
return
diff --git a/tgui/packages/tgui/interfaces/PlayerPlaytimes.js b/tgui/packages/tgui/interfaces/PlayerPlaytimes.js
index 2bb1285f48..d1fca6ea7f 100644
--- a/tgui/packages/tgui/interfaces/PlayerPlaytimes.js
+++ b/tgui/packages/tgui/interfaces/PlayerPlaytimes.js
@@ -28,27 +28,15 @@ export const PlayerPlaytimes = (props, context) => {
onClick={() => act('observe', {
ckey: client.ckey,
})} />
- {!!client.warning_valve && (
+
+ {client.flags.map(flag => (
- )}
- {!!client.warning_chem && (
-
- )}
- {!!client.warning_canister && (
-
- )}
+ ))}
))}