mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-25 04:57:12 +01:00
Fixed issue 724 - I've also tried to fix the unreported bug where a person cannot hear their radio messages while in the dark. Instead I'll make an issue report and try to work on it more later. I'm assuming it has something to do with BYOND thinking that the user cannot see dark tiles in the viewer proc.
Cleaned up a bit of the broadcasting code. Made everything use turf's z levels as I find them more reliable, sometimes an item's loc can be null or the z level can be entirely wrong. I hope the high usage of get_turf() will not create problems. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4275 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -229,7 +229,7 @@
|
||||
for(var/mob/M in player_list)
|
||||
if(!M) continue
|
||||
|
||||
var/atom/ear = M.get_ear()
|
||||
var/turf/ear = get_turf(M)
|
||||
if(!ear) continue
|
||||
|
||||
// Now see if they're near any broadcasting radio
|
||||
|
||||
@@ -26,21 +26,22 @@ var/list/recentmessages = list() // global list of recent messages broadcasted :
|
||||
|
||||
/obj/machinery/telecomms/broadcaster/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from)
|
||||
// Don't broadcast rejected signals
|
||||
var/turf/position = get_turf(src)
|
||||
if(signal.data["reject"])
|
||||
return
|
||||
|
||||
//Is it a test signal?
|
||||
if(signal.data["type"] == 4)
|
||||
signal.data["done"] = 1
|
||||
signal.data["level"] += src.loc.z
|
||||
signal.data["level"] += position.z
|
||||
return
|
||||
|
||||
if(signal.data["message"])
|
||||
|
||||
// Prevents massive radio spam
|
||||
if("[signal.data["message"]]:[signal.data["realname"]]:[src.loc.z]" in recentmessages)
|
||||
if("[signal.data["message"]]:[signal.data["realname"]]:[position.z]" in recentmessages)
|
||||
return
|
||||
recentmessages.Add("[signal.data["message"]]:[signal.data["realname"]]:[src.loc.z]")
|
||||
recentmessages.Add("[signal.data["message"]]:[signal.data["realname"]]:[position.z]")
|
||||
|
||||
signal.data["done"] = 1 // mark the signal as being broadcasted
|
||||
|
||||
@@ -61,7 +62,7 @@ var/list/recentmessages = list() // global list of recent messages broadcasted :
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"],, signal.data["compression"], src.loc.z)
|
||||
signal.data["realname"], signal.data["vname"],, signal.data["compression"], position.z)
|
||||
|
||||
|
||||
/** #### - Simple Broadcast - #### **/
|
||||
@@ -71,7 +72,7 @@ var/list/recentmessages = list() // global list of recent messages broadcasted :
|
||||
/* ###### Broadcast a message using signal.data ###### */
|
||||
Broadcast_SimpleMessage(signal.data["name"], signal.frequency,
|
||||
signal.data["message"],null, null,
|
||||
signal.data["compression"])
|
||||
signal.data["compression"], position.z)
|
||||
|
||||
|
||||
/** #### - Artificial Broadcast - #### **/
|
||||
@@ -86,7 +87,7 @@ var/list/recentmessages = list() // global list of recent messages broadcasted :
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"], 4, signal.data["compression"], src.loc.z)
|
||||
signal.data["realname"], signal.data["vname"], 4, signal.data["compression"], position.z)
|
||||
|
||||
spawn(5)
|
||||
recentmessages = list()
|
||||
@@ -135,20 +136,21 @@ var/list/recentmessages = list() // global list of recent messages broadcasted :
|
||||
/* ###### Broadcast a message using signal.data ###### */
|
||||
|
||||
var/datum/radio_frequency/connection = signal.data["connection"]
|
||||
var/turf/position = get_turf(src)
|
||||
|
||||
if(connection.frequency == SYND_FREQ) // if syndicate broadcast, just
|
||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"],, signal.data["compression"], src.loc.z)
|
||||
signal.data["realname"], signal.data["vname"],, signal.data["compression"], position.z)
|
||||
else
|
||||
if(intercept)
|
||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"], 3, signal.data["compression"], src.loc.z)
|
||||
signal.data["realname"], signal.data["vname"], 3, signal.data["compression"], position.z)
|
||||
|
||||
|
||||
|
||||
@@ -211,12 +213,10 @@ var/list/recentmessages = list() // global list of recent messages broadcasted :
|
||||
var/message, var/name, var/job, var/realname, var/vname,
|
||||
var/data, var/compression, var/level)
|
||||
|
||||
|
||||
/* ###### Prepare the radio connection ###### */
|
||||
|
||||
var/display_freq = connection.frequency
|
||||
|
||||
|
||||
var/list/obj/item/device/radio/radios = list()
|
||||
|
||||
// --- Broadcast only to intercom devices ---
|
||||
@@ -224,8 +224,7 @@ var/list/recentmessages = list() // global list of recent messages broadcasted :
|
||||
if(data == 1)
|
||||
for (var/obj/item/device/radio/intercom/R in connection.devices["[RADIO_CHAT]"])
|
||||
if(R.receive_range(display_freq, level) > 0)
|
||||
radios |= R
|
||||
|
||||
radios += R
|
||||
|
||||
// --- Broadcast only to intercoms and station-bounced radios ---
|
||||
|
||||
@@ -236,8 +235,7 @@ var/list/recentmessages = list() // global list of recent messages broadcasted :
|
||||
continue
|
||||
|
||||
if(R.receive_range(display_freq, level) > 0)
|
||||
radios |= R
|
||||
|
||||
radios += R
|
||||
|
||||
// --- Broadcast to syndicate radio! ---
|
||||
|
||||
@@ -247,19 +245,18 @@ var/list/recentmessages = list() // global list of recent messages broadcasted :
|
||||
for (var/obj/item/device/radio/R in syndicateconnection.devices["[RADIO_CHAT]"])
|
||||
|
||||
if(R.receive_range(SYND_FREQ, level) > 0)
|
||||
radios |= R
|
||||
radios += R
|
||||
|
||||
// --- Broadcast to ALL radio devices ---
|
||||
|
||||
else
|
||||
for (var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"])
|
||||
if(R.receive_range(display_freq, level) > 0)
|
||||
radios |= R
|
||||
radios += R
|
||||
|
||||
// Get a list of mobs who can hear from the radios we collected.
|
||||
var/list/receive = get_mobs_in_radio_ranges(radios)
|
||||
|
||||
|
||||
/* ###### Organize the receivers into categories for displaying the message ###### */
|
||||
|
||||
// Understood the message:
|
||||
@@ -510,8 +507,9 @@ var/list/recentmessages = list() // global list of recent messages broadcasted :
|
||||
|
||||
if(data == 1)
|
||||
for (var/obj/item/device/radio/intercom/R in connection.devices["[RADIO_CHAT]"])
|
||||
if(R.loc && R.loc.z == level)
|
||||
receive |= R.send_hear(display_freq)
|
||||
var/turf/position = get_turf(R)
|
||||
if(position && position.z == level)
|
||||
receive |= R.send_hear(display_freq, level)
|
||||
|
||||
|
||||
// --- Broadcast only to intercoms and station-bounced radios ---
|
||||
@@ -521,8 +519,8 @@ var/list/recentmessages = list() // global list of recent messages broadcasted :
|
||||
|
||||
if(istype(R, /obj/item/device/radio/headset))
|
||||
continue
|
||||
|
||||
if(R.loc && R.loc.z == level)
|
||||
var/turf/position = get_turf(R)
|
||||
if(position && position.z == level)
|
||||
receive |= R.send_hear(display_freq)
|
||||
|
||||
|
||||
@@ -532,8 +530,8 @@ var/list/recentmessages = list() // global list of recent messages broadcasted :
|
||||
var/datum/radio_frequency/syndicateconnection = radio_controller.return_frequency(SYND_FREQ)
|
||||
|
||||
for (var/obj/item/device/radio/R in syndicateconnection.devices["[RADIO_CHAT]"])
|
||||
|
||||
if(R.loc && R.loc.z == level)
|
||||
var/turf/position = get_turf(R)
|
||||
if(position && position.z == level)
|
||||
receive |= R.send_hear(SYND_FREQ)
|
||||
|
||||
|
||||
@@ -541,8 +539,8 @@ var/list/recentmessages = list() // global list of recent messages broadcasted :
|
||||
|
||||
else
|
||||
for (var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"])
|
||||
|
||||
if(R.loc && R.loc.z == level)
|
||||
var/turf/position = get_turf(R)
|
||||
if(position && position.z == level)
|
||||
receive |= R.send_hear(display_freq)
|
||||
|
||||
|
||||
@@ -704,7 +702,8 @@ var/list/recentmessages = list() // global list of recent messages broadcasted :
|
||||
|
||||
/atom/proc/test_telecomms()
|
||||
var/datum/signal/signal = telecomms_process()
|
||||
return (src.loc.z in signal.data["level"] && signal.data["done"])
|
||||
var/turf/position = get_turf(src)
|
||||
return (position.z in signal.data["level"] && signal.data["done"])
|
||||
|
||||
/atom/proc/telecomms_process()
|
||||
|
||||
@@ -726,8 +725,10 @@ var/list/recentmessages = list() // global list of recent messages broadcasted :
|
||||
signal.frequency = 1459// Common channel
|
||||
|
||||
//#### Sending the signal to all subspace receivers ####//
|
||||
for(var/obj/machinery/telecomms/receiver/R in world)
|
||||
if(src.loc.z == R.loc.z)
|
||||
var/turf/position = get_turf(src)
|
||||
for(var/obj/machinery/telecomms/receiver/R in telecomms_list)
|
||||
var/turf/receiver_turf = get_turf(R)
|
||||
if(position.z == receiver_turf.z)
|
||||
R.receive_signal(signal)
|
||||
|
||||
sleep(rand(10,25))
|
||||
|
||||
@@ -26,9 +26,8 @@
|
||||
attack_self(user)
|
||||
|
||||
|
||||
send_hear(freq)
|
||||
var/range = receive_range(freq)
|
||||
|
||||
send_hear(freq, level)
|
||||
var/range = receive_range(freq, level)
|
||||
if(range > 0)
|
||||
return get_mobs_in_view(canhear_range, src)
|
||||
|
||||
@@ -37,9 +36,8 @@
|
||||
return 0
|
||||
if (!(src.wires & WIRE_RECEIVE))
|
||||
return 0
|
||||
if(!src.loc)
|
||||
return 0
|
||||
if(src.loc.z != level)
|
||||
var/turf/position = get_turf(src)
|
||||
if(isnull(position) || position.z != level)
|
||||
return 0
|
||||
if (!src.listening)
|
||||
return 0
|
||||
|
||||
@@ -69,7 +69,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
|
||||
frequency = sanitize_frequency(frequency, maxf)
|
||||
// The max freq is higher than a regular headset to decrease the chance of people listening in, if you use the higher channels.
|
||||
else if (frequency < 1441 || frequency > maxf)
|
||||
world.log << "[src] ([type]) has a frequency of [frequency], sanitizing."
|
||||
//world.log << "[src] ([type]) has a frequency of [frequency], sanitizing."
|
||||
frequency = sanitize_frequency(frequency, maxf)
|
||||
|
||||
set_frequency(frequency)
|
||||
@@ -358,16 +358,21 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
|
||||
signal.frequency = connection.frequency // Quick frequency set
|
||||
|
||||
//#### Sending the signal to all subspace receivers ####//
|
||||
for(var/obj/machinery/telecomms/receiver/R in world)
|
||||
if(src.loc.z == R.loc.z)
|
||||
|
||||
var/turf/position = get_turf(src)
|
||||
|
||||
for(var/obj/machinery/telecomms/receiver/R in telecomms_list)
|
||||
var/turf/receiver_turf = get_turf(R)
|
||||
if(position.z == receiver_turf.z)
|
||||
R.receive_signal(signal)
|
||||
|
||||
// Allinone can act as receivers.
|
||||
for(var/obj/machinery/telecomms/allinone/R in world)
|
||||
if(src.loc.z == R.loc.z)
|
||||
for(var/obj/machinery/telecomms/allinone/R in telecomms_list)
|
||||
var/turf/receiver_turf = get_turf(R)
|
||||
if(position.z == receiver_turf.z)
|
||||
R.receive_signal(signal)
|
||||
|
||||
// Receiving code can be located in Telecommunications.dm
|
||||
// Receiving code can be located in Telecommunications.dm
|
||||
return
|
||||
|
||||
|
||||
@@ -410,8 +415,11 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
|
||||
)
|
||||
signal.frequency = connection.frequency // Quick frequency set
|
||||
|
||||
for(var/obj/machinery/telecomms/receiver/R in world)
|
||||
if(src.loc.z == R.loc.z)
|
||||
var/turf/position = get_turf(src)
|
||||
|
||||
for(var/obj/machinery/telecomms/receiver/R in telecomms_list)
|
||||
var/turf/receiver_turf = get_turf(R)
|
||||
if(position.z == receiver_turf.z)
|
||||
R.receive_signal(signal)
|
||||
|
||||
|
||||
@@ -429,7 +437,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
|
||||
|
||||
Broadcast_Message(connection, M, voicemask, M.voice_message,
|
||||
src, message, displayname, jobname, real_name, M.voice_name,
|
||||
filter_type, signal.data["compression"], src.loc.z)
|
||||
filter_type, signal.data["compression"], position.z)
|
||||
|
||||
|
||||
|
||||
@@ -473,7 +481,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
|
||||
//for (var/obj/item/device/radio/R in radio_connection.devices)
|
||||
for (var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"]) // Modified for security headset code -- TLE
|
||||
//if(R.accept_rad(src, message))
|
||||
receive |= R.send_hear(display_freq)
|
||||
receive |= R.send_hear(display_freq, 0)
|
||||
|
||||
//world << "DEBUG: receive.len=[receive.len]"
|
||||
var/list/heard_masked = list() // masked name or no real name
|
||||
@@ -633,7 +641,8 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
|
||||
|
||||
if (!(wires & WIRE_RECEIVE))
|
||||
return 0
|
||||
if(isnull(src.loc) || src.loc.z != level)
|
||||
var/turf/position = get_turf(src)
|
||||
if(isnull(position) || position.z != level)
|
||||
return 0
|
||||
if(freq == SYND_FREQ)
|
||||
if(!(src.syndie))//Checks to see if it's allowed on that frequency, based on the encryption keys
|
||||
@@ -656,9 +665,9 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
|
||||
|
||||
return canhear_range
|
||||
|
||||
/obj/item/device/radio/proc/send_hear(freq)
|
||||
var/range = receive_range(freq)
|
||||
/obj/item/device/radio/proc/send_hear(freq, level)
|
||||
|
||||
var/range = receive_range(freq, level)
|
||||
if(range > 0)
|
||||
return get_mobs_in_view(canhear_range, src)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user