diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index ef3b2c54c3..f3f9f1e8b5 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -67,6 +67,8 @@
#define TRAIT_BLIND "blind"
#define TRAIT_MUTE "mute"
#define TRAIT_EMOTEMUTE "emotemute"
+#define TRAIT_LOOC_MUTE "looc_mute" //Just like unconsciousness, it disables LOOC salt.
+#define TRAIT_AOOC_MUTE "aooc_mute" //Same as above but for AOOC.
#define TRAIT_DEAF "deaf"
#define TRAIT_NEARSIGHT "nearsighted"
#define TRAIT_FAT "fat"
@@ -254,7 +256,7 @@
#define BOOK_TRAIT "granter (book)" // knowledge is power
// unique trait sources, still defines
-#define STATUE_MUTE "statue"
+#define STATUE_TRAIT "statue"
#define CLONING_POD_TRAIT "cloning-pod"
#define VIRTUAL_REALITY_TRAIT "vr_trait"
#define CHANGELING_DRAIN "drain"
diff --git a/code/game/objects/structures/petrified_statue.dm b/code/game/objects/structures/petrified_statue.dm
index a8a5a577c2..97eadff5f6 100644
--- a/code/game/objects/structures/petrified_statue.dm
+++ b/code/game/objects/structures/petrified_statue.dm
@@ -4,11 +4,13 @@
icon_state = "human_male"
density = TRUE
anchored = TRUE
+ flags_1 = PREVENT_CONTENTS_EXPLOSION_1
max_integrity = 200
- var/timer = 240 //eventually the person will be freed
+ var/timer = 8 MINUTES //eventually the person will be freed
var/mob/living/petrified_mob
-/obj/structure/statue/petrified/New(loc, mob/living/L, statue_timer)
+/obj/structure/statue/petrified/Initialize(mapload, mob/living/L, statue_timer)
+ . = ..()
if(statue_timer)
timer = statue_timer
if(L)
@@ -17,25 +19,18 @@
L.buckled.unbuckle_mob(L,force=1)
L.visible_message("[L]'s skin rapidly turns to marble!", "Your body freezes up! Can't... move... can't... think...")
L.forceMove(src)
- ADD_TRAIT(L, TRAIT_MUTE, STATUE_MUTE)
+ ADD_TRAIT(L, TRAIT_MUTE, STATUE_TRAIT)
+ ADD_TRAIT(L, TRAIT_EMOTEMUTE, STATUE_TRAIT)
+ ADD_TRAIT(L, TRAIT_LOOC_MUTE, STATUE_TRAIT)
+ ADD_TRAIT(L, TRAIT_AOOC_MUTE, STATUE_TRAIT)
+ ADD_TRAIT(L, TRAIT_MOBILITY_NOMOVE, STATUE_TRAIT)
+ ADD_TRAIT(L, TRAIT_MOBILITY_NOPICKUP, STATUE_TRAIT)
+ ADD_TRAIT(L, TRAIT_MOBILITY_NOUSE, STATUE_TRAIT)
L.faction += "mimic" //Stops mimics from instaqdeling people in statues
L.status_flags |= GODMODE
obj_integrity = L.health + 100 //stoning damaged mobs will result in easier to shatter statues
max_integrity = obj_integrity
- START_PROCESSING(SSobj, src)
- ..()
-
-/obj/structure/statue/petrified/process()
- if(!petrified_mob)
- STOP_PROCESSING(SSobj, src)
- timer--
- petrified_mob.Stun(40) //So they can't do anything while petrified
- if(timer <= 0)
- STOP_PROCESSING(SSobj, src)
- qdel(src)
-
-/obj/structure/statue/petrified/contents_explosion(severity, target)
- return
+ QDEL_IN(src, timer)
/obj/structure/statue/petrified/handle_atom_del(atom/A)
if(A == petrified_mob)
@@ -59,7 +54,13 @@
if(petrified_mob)
petrified_mob.status_flags &= ~GODMODE
petrified_mob.forceMove(loc)
- REMOVE_TRAIT(petrified_mob, TRAIT_MUTE, STATUE_MUTE)
+ REMOVE_TRAIT(petrified_mob, TRAIT_MUTE, STATUE_TRAIT)
+ REMOVE_TRAIT(petrified_mob, TRAIT_EMOTEMUTE, STATUE_TRAIT)
+ REMOVE_TRAIT(petrified_mob, TRAIT_LOOC_MUTE, STATUE_TRAIT)
+ REMOVE_TRAIT(petrified_mob, TRAIT_AOOC_MUTE, STATUE_TRAIT)
+ REMOVE_TRAIT(petrified_mob, TRAIT_MOBILITY_NOMOVE, STATUE_TRAIT)
+ REMOVE_TRAIT(petrified_mob, TRAIT_MOBILITY_NOPICKUP, STATUE_TRAIT)
+ REMOVE_TRAIT(petrified_mob, TRAIT_MOBILITY_NOUSE, STATUE_TRAIT)
petrified_mob.take_overall_damage((petrified_mob.health - obj_integrity + 100)) //any new damage the statue incurred is transfered to the mob
petrified_mob.faction -= "mimic"
petrified_mob = null
diff --git a/code/modules/client/verbs/aooc.dm b/code/modules/client/verbs/aooc.dm
index bc32d3c222..1a019bba80 100644
--- a/code/modules/client/verbs/aooc.dm
+++ b/code/modules/client/verbs/aooc.dm
@@ -13,21 +13,38 @@ GLOBAL_VAR_INIT(normal_aooc_colour, "#ce254f")
if(!mob)
return
+ if(!(prefs.toggles & CHAT_OOC))
+ to_chat(src, " You have OOC muted.")
+ return
+ if(jobban_isbanned(mob, "OOC"))
+ to_chat(src, "You have been banned from OOC.")
+ return
+
if(!holder)
- if(mob.stat == DEAD)
- to_chat(usr, "You cannot use AOOC while dead.")
- return
- if(!is_special_character(mob))
- to_chat(usr, "You aren't an antagonist!")
- if(prefs.muted & MUTE_OOC)
- to_chat(src, "You cannot use AOOC (muted).")
- return
- if(jobban_isbanned(src.mob, "OOC"))
- to_chat(src, "You are banned from OOC.")
- return
if(!GLOB.aooc_allowed)
to_chat(src, "AOOC is currently muted.")
return
+ if(prefs.muted & MUTE_OOC)
+ to_chat(src, "You cannot use AOOC (muted).")
+ return
+ if(!is_special_character(mob))
+ to_chat(usr, "You aren't an antagonist!")
+ if(handle_spam_prevention(msg,MUTE_OOC))
+ return
+ if(findtext(msg, "byond://"))
+ to_chat(src, "Advertising other servers is not allowed.")
+ log_admin("[key_name(src)] has attempted to advertise in LOOC: [msg]")
+ return
+ if(mob.stat)
+ to_chat(usr, "You cannot use AOOC while unconscious or dead.")
+ return
+ if(isdead(mob))
+ to_chat(src, "You cannot use AOOC while ghosting.")
+ return
+ if(HAS_TRAIT(mob, TRAIT_AOOC_MUTE))
+ to_chat(src, "You cannot use AOOC right now.")
+ return
+
if(QDELETED(src))
return
diff --git a/code/modules/client/verbs/looc.dm b/code/modules/client/verbs/looc.dm
index 075cabcbbb..da39eabc12 100644
--- a/code/modules/client/verbs/looc.dm
+++ b/code/modules/client/verbs/looc.dm
@@ -38,11 +38,15 @@ GLOBAL_VAR_INIT(normal_looc_colour, "#6699CC")
log_admin("[key_name(src)] has attempted to advertise in LOOC: [msg]")
return
if(mob.stat)
- to_chat(src, "You cannot salt in LOOC while unconscious or dead.")
+ to_chat(src, "You cannot use LOOC while unconscious or dead.")
return
- if(istype(mob, /mob/dead))
+ if(isdead(mob))
to_chat(src, "You cannot use LOOC while ghosting.")
return
+ if(HAS_TRAIT(mob, TRAIT_LOOC_MUTE))
+ to_chat(src, "You cannot use LOOC right now.")
+ return
+
msg = emoji_parse(msg)