From af67cbf66e7075df7a090af71983d189548fb6f6 Mon Sep 17 00:00:00 2001 From: Bobbahbrown Date: Sat, 2 May 2020 21:23:20 -0300 Subject: [PATCH] Fixes Null Reference + Qdel Issue in Runechat (#50830) * runtimes bye bye * rohesie wants it this way * oranges fixies * more rohesie suggestions * cleanies * on parent qdel moment --- code/datums/chatmessage.dm | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/code/datums/chatmessage.dm b/code/datums/chatmessage.dm index cbcb34ac5ebd7..7b101fdc2c13c 100644 --- a/code/datums/chatmessage.dm +++ b/code/datums/chatmessage.dm @@ -35,7 +35,7 @@ * * extra_classes - Extra classes to apply to the span that holds the text * * lifespan - The lifespan of the message in deciseconds */ -/datum/chatmessage/New(text, atom/target, mob/owner, list/extra_classes = null, lifespan = CHAT_MESSAGE_LIFESPAN) +/datum/chatmessage/New(text, atom/target, mob/owner, list/extra_classes = list(), lifespan = CHAT_MESSAGE_LIFESPAN) . = ..() if (!istype(target)) CRASH("Invalid target given for chatmessage") @@ -55,6 +55,12 @@ message = null return ..() +/** + * Calls qdel on the chatmessage when its parent is deleted, used to register qdel signal + */ +/datum/chatmessage/proc/on_parent_qdel() + qdel(src) + /** * Generates a chat message image representation * @@ -68,7 +74,7 @@ /datum/chatmessage/proc/generate_image(text, atom/target, mob/owner, list/extra_classes, lifespan) // Register client who owns this message owned_by = owner.client - RegisterSignal(owned_by, COMSIG_PARENT_QDELETING, .proc/qdel, src) + RegisterSignal(owned_by, COMSIG_PARENT_QDELETING, .proc/on_parent_qdel) // Clip message var/maxlen = owned_by.prefs.max_chat_length @@ -108,7 +114,7 @@ // BYOND Bug #2563917 // Construct text var/static/regex/html_metachars = new(@"&[A-Za-z]{1,7};", "g") - var/complete_text = "[text]" + var/complete_text = "[text]" var/mheight = WXH_TO_HEIGHT(owned_by.MeasureText(replacetext(complete_text, html_metachars, "m"), null, CHAT_MESSAGE_WIDTH)) approx_lines = max(1, mheight / CHAT_MESSAGE_APPROX_LHEIGHT) @@ -166,7 +172,7 @@ */ /mob/proc/create_chat_message(atom/movable/speaker, datum/language/message_language, raw_message, list/spans, message_mode) // Ensure the list we are using, if present, is a copy so we don't modify the list provided to us - spans = spans?.Copy() + spans = spans ? spans.Copy() : list() // Check for virtual speakers (aka hearing a message through a radio) var/atom/movable/originalSpeaker = speaker