mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-26 14:31:59 +01:00
Port initial Bay12 object listener fix (#2106)
Port of Baystation12/Baystation12#13264 Large PR to put into Master, but the bug is really annoying and since it affect a traitor item, an often used one, I'll take the risk. Fixes #1956 Fixes explosives implants and lawgiver not working.
This commit is contained in:
@@ -211,6 +211,15 @@
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/device/assembly_holder/New()
|
||||
..()
|
||||
listening_objects += src
|
||||
|
||||
/obj/item/device/assembly_holder/Destroy()
|
||||
listening_objects -= src
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/device/assembly_holder/hear_talk(mob/living/M as mob, msg, verb, datum/language/speaking)
|
||||
if(a_right)
|
||||
a_right.hear_talk(M,msg,verb,speaking)
|
||||
|
||||
@@ -7,6 +7,14 @@
|
||||
var/listening = 0
|
||||
var/recorded //the activation message
|
||||
|
||||
/obj/item/device/assembly/voice/New()
|
||||
..()
|
||||
listening_objects += src
|
||||
|
||||
/obj/item/device/assembly/voice/Destroy()
|
||||
listening_objects -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/device/assembly/voice/hear_talk(mob/living/M as mob, msg)
|
||||
if(listening)
|
||||
recorded = msg
|
||||
@@ -33,4 +41,4 @@
|
||||
|
||||
/obj/item/device/assembly/voice/toggle_secure()
|
||||
. = ..()
|
||||
listening = 0
|
||||
listening = 0
|
||||
|
||||
@@ -225,10 +225,9 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
if (speech_sound)
|
||||
sound_vol *= 0.5
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
var/list/listening = list()
|
||||
var/list/listening_obj = list()
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
if(T)
|
||||
//make sure the air can transmit speech - speaker's side
|
||||
@@ -241,26 +240,8 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
italics = 1
|
||||
sound_vol *= 0.5 //muffle the sound a bit, so it's like we're actually talking through contact
|
||||
|
||||
var/list/hear = hear(message_range,T)
|
||||
var/list/hearturfs = list()
|
||||
get_mobs_and_objs_in_view_fast(T, message_range, listening, listening_obj)
|
||||
|
||||
for(var/I in hear)
|
||||
if(ismob(I))
|
||||
var/mob/M = I
|
||||
listening += M
|
||||
hearturfs += M.locs[1]
|
||||
else if(isobj(I))
|
||||
var/obj/O = I
|
||||
hearturfs += O.locs[1]
|
||||
listening_obj |= O
|
||||
|
||||
|
||||
for(var/mob/M in player_list)
|
||||
if(src.client && M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS))
|
||||
listening |= M
|
||||
continue
|
||||
if(M.loc && M.locs[1] in hearturfs)
|
||||
listening |= M
|
||||
|
||||
var/speech_bubble_test = say_test(message)
|
||||
var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]")
|
||||
|
||||
+18
-13
@@ -158,21 +158,26 @@
|
||||
var/range = world.view
|
||||
if(hearing_distance)
|
||||
range = hearing_distance
|
||||
var/list/hear = get_mobs_or_objects_in_view(range,src)
|
||||
|
||||
for(var/I in hear)
|
||||
if(isobj(I))
|
||||
spawn(0)
|
||||
if(I) //It's possible that it could be deleted in the meantime.
|
||||
var/obj/O = I
|
||||
O.show_message( message, 2, deaf_message, 1)
|
||||
else if(ismob(I))
|
||||
var/mob/M = I
|
||||
var/msg = message
|
||||
if(self_message && M==src)
|
||||
msg = self_message
|
||||
M.show_message( msg, 2, deaf_message, 1)
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
var/list/mobs = list()
|
||||
var/list/objs = list()
|
||||
get_mobs_and_objs_in_view_fast(T, range, mobs, objs)
|
||||
|
||||
|
||||
for(var/m in mobs)
|
||||
var/mob/M = m
|
||||
if(self_message && M==src)
|
||||
M.show_message(self_message,2,deaf_message,1)
|
||||
continue
|
||||
|
||||
M.show_message(message,2,deaf_message,1)
|
||||
|
||||
|
||||
for(var/o in objs)
|
||||
var/obj/O = o
|
||||
O.show_message(message,2,deaf_message,1)
|
||||
|
||||
/mob/proc/findname(msg)
|
||||
for(var/mob/M in mob_list)
|
||||
|
||||
@@ -65,12 +65,20 @@
|
||||
)
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/lawgiver/New()
|
||||
..()
|
||||
listening_objects += src
|
||||
|
||||
/obj/item/weapon/gun/energy/lawgiver/Destroy()
|
||||
listening_objects -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/gun/energy/lawgiver/proc/play_message()
|
||||
while (message_enabled && !message_disable) //Shut down command issued. Inform user that boardcasting has been stopped
|
||||
usr.audible_message("<span class='warning'>[usr]'s [src.name] broadcasts: [message]</span>","")
|
||||
playsound(get_turf(src), 'sound/voice/halt.ogg', 100, 1, vary = 0)
|
||||
sleep(message_delay)
|
||||
usr << "\red Broadcasting Message disabled"
|
||||
usr << "<span class='warning'>Broadcasting Message disabled</span>"
|
||||
message_enabled = 0
|
||||
message_disable = 0
|
||||
|
||||
@@ -80,7 +88,7 @@
|
||||
else
|
||||
src.dna = user.dna.unique_enzymes
|
||||
src.owner_name = user.real_name
|
||||
user << "\blue You feel your palm heat up as the gun reads your DNA profile."
|
||||
user << "<span class='notice'>You feel your palm heat up as the gun reads your DNA profile.</span>"
|
||||
desc += "<br>Linked to: [user.real_name]"
|
||||
return
|
||||
|
||||
@@ -93,7 +101,7 @@
|
||||
var/obj/item/organ/external/RA = H.get_organ("r_arm")
|
||||
var/active_hand = H.hand
|
||||
playsound(user, 'sound/weapons/lawgiver_idfail.ogg', 40, 1)
|
||||
user << "\red You hear a soft beep from the gun and 'ID FAIL' flashes across the screen."
|
||||
user << "<span class='danger'>You hear a soft beep from the gun and 'ID FAIL' flashes across the screen.</span>"
|
||||
user << "<span class='danger'>You feel a tiny prick in your hand!</span>"
|
||||
user.drop_item()
|
||||
//Blow up Unauthorized Users Hand
|
||||
@@ -132,50 +140,50 @@
|
||||
sel_mode = 1
|
||||
projectile_type=/obj/item/projectile/bullet/pistol
|
||||
fire_sound='sound/weapons/Gunshot_smg.ogg'
|
||||
usr << "\red [src.name] is now set to single shot mode."
|
||||
usr << "<span class='warning'>[src.name] is now set to single shot mode.</span>"
|
||||
else if(findtext(msg,"rapidfire"))
|
||||
sel_mode = 2
|
||||
projectile_type=/obj/item/projectile/bullet/pistol
|
||||
fire_sound='sound/weapons/Gunshot_smg.ogg'
|
||||
usr << "\red [src.name] is now set to rapid fire mode."
|
||||
usr << "<span class='warning'>[src.name] is now set to rapid fire mode.</span>"
|
||||
else if(findtext(msg,"highex") || findtext(msg,"grenade"))
|
||||
sel_mode = 3
|
||||
projectile_type=/obj/item/projectile/bullet/gyro/law
|
||||
fire_sound='sound/effects/Explosion1.ogg'
|
||||
usr << "\red [src.name] is now set to high explosive mode."
|
||||
usr << "<span class='warning'>[src.name] is now set to high explosive mode.</span>"
|
||||
else if(findtext(msg,"stun"))
|
||||
sel_mode = 4
|
||||
projectile_type=/obj/item/projectile/beam/stun
|
||||
fire_sound='sound/weapons/Taser.ogg'
|
||||
usr << "\red [src.name] is now set to stun mode."
|
||||
usr << "<span class='warning'>[src.name] is now set to stun mode.</span>"
|
||||
else if(findtext(msg,"hotshot") || findtext(msg,"incendiary"))
|
||||
sel_mode = 5
|
||||
projectile_type=/obj/item/projectile/bullet/shotgun/incendiary
|
||||
fire_sound='sound/weapons/Gunshot.ogg'
|
||||
usr << "\red [src.name] is now set to incendiary mode."
|
||||
usr << "<span class='warning'>[src.name] is now set to incendiary mode.</span>"
|
||||
else if(findtext(msg,"armorpiercing") || findtext(msg,"execution"))
|
||||
sel_mode = 6
|
||||
projectile_type=/obj/item/projectile/bullet/rifle/a556
|
||||
fire_sound='sound/weapons/Gunshot.ogg'
|
||||
usr << "\red [src.name] is now set to armorpiercing mode."
|
||||
usr << "<span class='warning'>[src.name] is now set to armorpiercing mode.</span>"
|
||||
else if(findtext(msg,"pellets"))
|
||||
sel_mode = 7
|
||||
projectile_type=/obj/item/projectile/bullet/pellet/shotgun
|
||||
fire_sound='sound/weapons/Gunshot.ogg'
|
||||
usr << "\red [src.name] is now set to pellet mode."
|
||||
usr << "<span class='warning'>[src.name] is now set to pellet mode.</span>"
|
||||
/* Other Stuff */
|
||||
else if(findtext(msg,"reset") && (findtext(msg,"user") || findtext(msg,"dna")))
|
||||
dna = null
|
||||
desc = default_desc
|
||||
usr << "\red [src.name]´s owner has been reset. Do not attempt to fire [src.name] without rebinding a new owner"
|
||||
usr << "<span class='warning'>[src.name]´s owner has been reset. Do not attempt to fire [src.name] without rebinding a new owner.</span>"
|
||||
else if((findtext(msg,"disable") || findtext(msg,"deactivate")) && findtext(msg,"crowdcontrol"))
|
||||
message_disable = 1
|
||||
usr << "\red [src.name]´s crowdcontrol deactivation sequence started"
|
||||
usr << "<span class='warning'>[src.name]´s crowdcontrol deactivation sequence started.</span>"
|
||||
else if((findtext(msg,"enable") || findtext(msg,"activate")) && findtext(msg,"crowdcontrol"))
|
||||
if(message_enabled) //Check if a message is already broadcasting -> abort
|
||||
usr << "\red [src.name] is already broadcasting a message."
|
||||
usr << "<span class='warning'>[src.name] is already broadcasting a message.</span>"
|
||||
return
|
||||
usr << "\red [src.name]´s crowdcontrol activation sequence started"
|
||||
usr << "<span class='warning'>[src.name]´s crowdcontrol activation sequence started.</span>"
|
||||
message = "Citizens stay calm. Stand back from the crime scene. Interference with the crime scene carries an automatic brig sentence."
|
||||
message_enabled = 1
|
||||
message_disable = 0
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
processing_objects.Add(src)
|
||||
spawning_id = pick("blood","holywater","lube","stoxin","ethanol","ice","glycerol","fuel","cleaner")
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/replenishing/process()
|
||||
reagents.add_reagent(spawning_id, 0.3)
|
||||
|
||||
@@ -23,6 +24,12 @@
|
||||
|
||||
/obj/item/clothing/mask/gas/poltergeist/New()
|
||||
processing_objects.Add(src)
|
||||
listening_objects += src
|
||||
|
||||
/obj/item/clothing/mask/gas/poltergeist/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
listening_objects -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/mask/gas/poltergeist/process()
|
||||
if(heard_talk.len && istype(src.loc, /mob/living) && prob(10))
|
||||
@@ -57,6 +64,12 @@
|
||||
/obj/item/weapon/vampiric/New()
|
||||
..()
|
||||
processing_objects.Add(src)
|
||||
listening_objects += src
|
||||
|
||||
/obj/item/weapon/vampiric/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
listening_objects -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/vampiric/process()
|
||||
//see if we've identified anyone nearby
|
||||
@@ -146,6 +159,10 @@
|
||||
processing_objects.Add(src)
|
||||
loc_last_process = src.loc
|
||||
|
||||
/obj/effect/decal/cleanable/blood/splatter/animated/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
return ..()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/splatter/animated/process()
|
||||
if(target_turf && src.loc != target_turf)
|
||||
step_towards(src,target_turf)
|
||||
@@ -175,6 +192,10 @@
|
||||
/obj/effect/shadow_wight/New()
|
||||
processing_objects.Add(src)
|
||||
|
||||
/obj/effect/shadow_wight/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
return ..()
|
||||
|
||||
/obj/effect/shadow_wight/process()
|
||||
if(src.loc)
|
||||
src.loc = get_turf(pick(orange(1,src)))
|
||||
@@ -200,4 +221,4 @@
|
||||
processing_objects.Remove(src)
|
||||
|
||||
/obj/effect/shadow_wight/Bump(var/atom/obstacle)
|
||||
obstacle << "\red You feel a chill run down your spine!"
|
||||
obstacle << "<span class='warning'>You feel a chill run down your spine!</span>"
|
||||
|
||||
Reference in New Issue
Block a user