From 69f0e9abd1bc57c974f439c29b91a71e5f4bbe0e Mon Sep 17 00:00:00 2001 From: nervere <26285377+nervere@users.noreply.github.com> Date: Fri, 14 Jul 2023 19:21:48 -0400 Subject: [PATCH] sanity and logging for death() (#34616) * sanity and logging for death() * null to FALSE --- code/modules/mob/death.dm | 64 ++++++++++++++++++--------------- code/modules/mob/mob_defines.dm | 1 + 2 files changed, 37 insertions(+), 28 deletions(-) diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm index 834fcffd124..3343571dd60 100644 --- a/code/modules/mob/death.dm +++ b/code/modules/mob/death.dm @@ -34,34 +34,42 @@ /mob/proc/death(gibbed) - timeofdeath = world.time - INVOKE_EVENT(src, /event/death, "user" = src, "body_destroyed" = gibbed) - living_mob_list -= src - dead_mob_list += src - stat_collection.add_death_stat(src) - if(runescape_skull_display && ticker)//we died, begone skull - if ("\ref[src]" in ticker.runescape_skulls) - var/datum/runescape_skull_data/the_data = ticker.runescape_skulls["\ref[src]"] - ticker.runescape_skulls -= "\ref[src]" - qdel(the_data) - if(client) - client.color = initial(client.color) - for(var/obj/item/I in src) - I.OnMobDeath(src) - for(var/atom/A in arcane_tampered_atoms) - A.bless() - if(spell_masters && spell_masters.len) - for(var/obj/abstract/screen/movable/spell_master/spell_master in spell_masters) - spell_master.on_holder_death(src) - if(transmogged_from) - transmog_death() - if(client || mind) - var/mindname = (src.mind && src.mind.name) ? "[src.mind.name]" : "[real_name]" - var/died_as = (mindname == real_name) ? "" : " (died as [real_name])" - for(var/mob/M in get_deadchat_hearers()) - var/rendered = "\proper(Follow) \The [mindname][died_as] has died at \the [get_area(src)]." - to_chat(M, rendered) - log_game("[key_name(src)] has died at [get_area(src)]. Coordinates: ([get_coordinates_string(src)])") + spawn() + if(is_dying) + var/deathstring = "[src] at ([get_coordinates_string(src)]) had death() called (with var/gibbed = [gibbed]) while already dying!" + log_debug(deathstring) + message_admins(deathstring) + return + is_dying = TRUE + timeofdeath = world.time + INVOKE_EVENT(src, /event/death, "user" = src, "body_destroyed" = gibbed) + living_mob_list -= src + dead_mob_list += src + stat_collection.add_death_stat(src) + if(runescape_skull_display && ticker)//we died, begone skull + if ("\ref[src]" in ticker.runescape_skulls) + var/datum/runescape_skull_data/the_data = ticker.runescape_skulls["\ref[src]"] + ticker.runescape_skulls -= "\ref[src]" + qdel(the_data) + if(client) + client.color = initial(client.color) + for(var/obj/item/I in src) + I.OnMobDeath(src) + for(var/atom/A in arcane_tampered_atoms) + A.bless() + if(spell_masters && spell_masters.len) + for(var/obj/abstract/screen/movable/spell_master/spell_master in spell_masters) + spell_master.on_holder_death(src) + if(transmogged_from) + transmog_death() + if(client || mind) + var/mindname = (src.mind && src.mind.name) ? "[src.mind.name]" : "[real_name]" + var/died_as = (mindname == real_name) ? "" : " (died as [real_name])" + for(var/mob/M in get_deadchat_hearers()) + var/rendered = "\proper(Follow) \The [mindname][died_as] has died at \the [get_area(src)]." + to_chat(M, rendered) + log_game("[key_name(src)] has died at [get_area(src)]. Coordinates: ([get_coordinates_string(src)])") + is_dying = FALSE /mob/proc/transmog_death() var/obj/transmog_body_container/C = transmogged_from diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 218f9943bd4..80a9dae7963 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -75,6 +75,7 @@ /// Set to TRUE when the mob is being transformed into something else or gibbed. /// Can be checked to avoid running expensive code for mobs that are about to not exist. var/monkeyizing = null + var/is_dying = FALSE var/other = 0.0 var/eye_blind = null //Carbon var/eye_blurry = null //Carbon