diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 7d5b3a21db8..fec3b7df9ac 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -236,6 +236,8 @@ var/foundAlready = 0 // don't infect someone that already has the virus var/turf/T = get_turf(H) + if(!T) + continue if(T.z != 1) continue for(var/datum/disease/D in H.viruses) @@ -305,6 +307,8 @@ */ for(var/mob/living/carbon/human/H in living_mob_list) var/turf/T = get_turf(H) + if(!T) + continue if(T.z != 1) continue if(istype(H,/mob/living/carbon/human)) @@ -320,6 +324,8 @@ domutcheck(H,null,1) for(var/mob/living/carbon/monkey/M in living_mob_list) var/turf/T = get_turf(M) + if(!T) + continue if(T.z != 1) continue M.apply_effect((rand(15,75)),IRRADIATE,0) diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index c91420bbbb9..b604a0f3119 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -286,7 +286,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept if (R.client && !(R.client.prefs.toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. continue - if(istype(M, /mob/new_player)) // we don't want new players to hear messages. rare but generates runtimes. + if(istype(R, /mob/new_player)) // we don't want new players to hear messages. rare but generates runtimes. continue @@ -297,10 +297,10 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept // --- Can understand the speech --- - if (R.say_understands(M)) + if (!M || R.say_understands(M)) // - Not human or wearing a voice mask - - if (!ishuman(M) || vmask) + if (!M || !ishuman(M) || vmask) heard_masked += R // - Human and not wearing voice mask - @@ -371,7 +371,11 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept // --- Filter the message; place it in quotes apply a verb --- - var/quotedmsg = M.say_quote(message) + var/quotedmsg = null + if(M) + quotedmsg = M.say_quote(message) + else + quotedmsg = "says, \"[message]\"" // --- This following recording is intended for research and feedback in the use of department radio channels --- @@ -447,7 +451,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept // Does not display message; displayes the mob's voice_message (ie "chimpers") if (length(heard_voice)) - var/rendered = "[part_a][vname][part_b][M.voice_message][part_c]" + var/rendered = "[part_a][vname][part_b][vmessage][part_c]" for (var/mob/R in heard_voice) aitrack = "" @@ -464,7 +468,11 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept // Displays garbled message (ie "f*c* **u, **i*er!") if (length(heard_garbled)) - quotedmsg = M.say_quote(stars(message)) + if(M) + quotedmsg = M.say_quote(stars(message)) + else + quotedmsg = stars(quotedmsg) + var/rendered = "[part_a][vname][part_b][quotedmsg][part_c]" for (var/mob/R in heard_garbled) @@ -482,8 +490,12 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept /* --- Complete gibberish. Usually happens when there's a compressed message --- */ if (length(heard_gibberish)) - quotedmsg = M.say_quote(Gibberish(message, compression + 50)) - var/rendered = "[part_a][Gibberish(M.real_name, compression + 50)][part_b][quotedmsg][part_c]" + if(M) + quotedmsg = M.say_quote(Gibberish(message, compression + 50)) + else + quotedmsg = Gibberish(quotedmsg, compression + 50) + + var/rendered = "[part_a][Gibberish(name, compression + 50)][part_b][quotedmsg][part_c]" for (var/mob/R in heard_gibberish) aitrack = "" diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 2396b59b27a..f3d8372353f 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -518,11 +518,13 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() var/salt = "null" // encryption salt: ie "123comsat" // would add up to md5("password123comsat") var/language = "human" + var/obj/item/device/radio/headset/server_radio = null /obj/machinery/telecomms/server/New() ..() Compiler = new() Compiler.Holder = src + server_radio = new() /obj/machinery/telecomms/server/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) diff --git a/code/modules/scripting/IDE.dm b/code/modules/scripting/IDE.dm index 3ecfa4f505a..b9b53b274d2 100644 --- a/code/modules/scripting/IDE.dm +++ b/code/modules/scripting/IDE.dm @@ -183,4 +183,29 @@ client/verb/tcsrevert() src << output("Failed to revert: Unable to locate machine.", "tcserror") +client/verb/tcsclearmem() + set hidden = 1 + if(mob.machine || issilicon(mob)) + if((istype(mob.machine, /obj/machinery/computer/telecomms/traffic) && mob.machine in view(1, mob)) || (issilicon(mob) && istype(mob.machine, /obj/machinery/computer/telecomms/traffic) )) + var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine + if(Machine.editingcode != mob) + return + if(Machine.SelectedServer) + var/obj/machinery/telecomms/server/Server = Machine.SelectedServer + Server.memory = list() // clear the memory + // Show results + src << output(null, "tcserror") + src << output("Server memory cleared!", "tcserror") + for(var/mob/M in Machine.viewingcode) + if(M.client) + M << output("Server memory cleared!", "tcserror") + else + src << output(null, "tcserror") + src << output("Failed to clear memory: Unable to locate server machine.", "tcserror") + else + src << output(null, "tcserror") + src << output("Failed to clear memory: Unable to locate machine.", "tcserror") + else + src << output(null, "tcserror") + src << output("Failed to clear memory: Unable to locate machine.", "tcserror") \ No newline at end of file diff --git a/code/modules/scripting/Implementations/Telecomms.dm b/code/modules/scripting/Implementations/Telecomms.dm index 428610d3920..634b3b78d05 100644 --- a/code/modules/scripting/Implementations/Telecomms.dm +++ b/code/modules/scripting/Implementations/Telecomms.dm @@ -222,10 +222,13 @@ datum/signal proc/tcombroadcast(var/message, var/freq, var/source, var/job) - var/mob/living/carbon/human/H = new var/datum/signal/newsign = new var/obj/machinery/telecomms/server/S = data["server"] - var/obj/item/device/radio/hradio + var/obj/item/device/radio/hradio = S.server_radio + + if(!hradio) + error("[src] has no radio.") + return if((!message || message == "") && message != 0) message = "*beep*" @@ -240,8 +243,8 @@ datum/signal if(!job) job = "?" - newsign.data["mob"] = H - newsign.data["mobtype"] = H.type + newsign.data["mob"] = null + newsign.data["mobtype"] = /mob/living/carbon/human if(source in S.stored_names) newsign.data["name"] = source else @@ -258,14 +261,10 @@ datum/signal var/datum/radio_frequency/connection = radio_controller.return_frequency(freq) newsign.data["connection"] = connection - // The radio is a radio headset! - - if(!hradio) - hradio = new /obj/item/device/radio/headset newsign.data["radio"] = hradio - newsign.data["vmessage"] = H.voice_message - newsign.data["vname"] = H.voice_name + newsign.data["vmessage"] = message + newsign.data["vname"] = source newsign.data["vmask"] = 0 newsign.data["level"] = list() diff --git a/interface/skin.dmf b/interface/skin.dmf index 652994957a7..cb59325537b 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -532,7 +532,7 @@ window "Telecomms IDE" elem "Telecomms IDE" type = MAIN pos = 281,0 - size = 652x582 + size = 569x582 anchor1 = none anchor2 = none font-family = "" @@ -568,10 +568,38 @@ window "Telecomms IDE" macro = "" menu = "" on-close = "exittcs" + elem "button5" + type = BUTTON + pos = 209,464 + size = 70x20 + anchor1 = 37,80 + anchor2 = 49,83 + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + on-size = "" + text = "Clear Memory" + image = "" + command = "tcsclearmem" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbutton elem "button4" type = BUTTON - pos = 180,464 - size = 60x20 + pos = 157,464 + size = 52x20 anchor1 = 28,80 anchor2 = 37,83 font-family = "" @@ -598,8 +626,8 @@ window "Telecomms IDE" button-type = pushbutton elem "button3" type = BUTTON - pos = 120,464 - size = 60x20 + pos = 105,464 + size = 52x20 anchor1 = 18,80 anchor2 = 28,83 font-family = "" @@ -627,7 +655,7 @@ window "Telecomms IDE" elem "tcserror" type = OUTPUT pos = 0,488 - size = 648x94 + size = 566x94 anchor1 = 0,84 anchor2 = 99,100 font-family = "sans-serif" @@ -652,8 +680,8 @@ window "Telecomms IDE" image = "" elem "button2" type = BUTTON - pos = 60,464 - size = 60x20 + pos = 53,464 + size = 52x20 anchor1 = 9,80 anchor2 = 18,83 font-family = "" @@ -681,7 +709,7 @@ window "Telecomms IDE" elem "button1" type = BUTTON pos = 0,464 - size = 60x20 + size = 53x20 anchor1 = 0,80 anchor2 = 9,83 font-family = "" @@ -709,7 +737,7 @@ window "Telecomms IDE" elem "tcscode" type = INPUT pos = 0,0 - size = 652x464 + size = 569x464 anchor1 = 0,0 anchor2 = 100,80 font-family = "Courier"