diff --git a/code/datums/trading/trade.dm b/code/datums/trading/trade.dm
index 030f710b880..873b5fb84ee 100644
--- a/code/datums/trading/trade.dm
+++ b/code/datums/trading/trade.dm
@@ -145,8 +145,13 @@
var/is_wanted = 0
if(is_type_in_list(offer,wanted_items))
is_wanted = 1
- if(blacklisted_trade_items && blacklisted_trade_items.len && is_type_in_list(offer,blacklisted_trade_items))
- return 0
+ if(blacklisted_trade_items && blacklisted_trade_items.len)
+ if(ishuman(offer))
+ var/mob/living/carbon/human/A = offer
+ if(is_type_in_list(A.species, blacklisted_trade_items))
+ return 0
+ else if(is_type_in_list(offer,blacklisted_trade_items))
+ return 0
if(istype(offer,/obj/item/weapon/spacecash))
if(!(trade_flags & TRADER_MONEY))
diff --git a/code/datums/trading/unique.dm b/code/datums/trading/unique.dm
index 0b523aec697..b478bea36ed 100644
--- a/code/datums/trading/unique.dm
+++ b/code/datums/trading/unique.dm
@@ -43,7 +43,7 @@
/obj/item/weapon/gun/energy/rifle/pulse = TRADER_THIS_TYPE
)
- blacklisted_trade_items = null
+ blacklisted_trade_items = list(/datum/species/monkey, /datum/species/machine, /datum/species/bug, /datum/species/diona)
speech = list(
"hail_generic" = "H-hello. Can you hear me? G-good... I have... specific needs... I have a lot to t-trade with you in return of course.",
diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm
index 00372c8c737..6fa9b5b33bf 100644
--- a/code/defines/procs/announce.dm
+++ b/code/defines/procs/announce.dm
@@ -119,6 +119,8 @@ datum/announcement/proc/Log(message as text, message_title as text)
message_admins("[key_name_admin(usr)] has made \a [announcement_type].", 1)
/proc/GetNameAndAssignmentFromId(var/obj/item/weapon/card/id/I)
+ if(!I)
+ return "Unknown"
// Format currently matches that of newscaster feeds: Registered Name (Assigned Rank)
return I.assignment ? "[I.registered_name] ([I.assignment])" : I.registered_name
diff --git a/code/game/antagonist/antagonist_helpers.dm b/code/game/antagonist/antagonist_helpers.dm
index d6c08f0d126..13fdc257277 100644
--- a/code/game/antagonist/antagonist_helpers.dm
+++ b/code/game/antagonist/antagonist_helpers.dm
@@ -8,7 +8,7 @@
return 0
if(config.protect_roles_from_antagonist && (player.assigned_role in protected_jobs))
return 0
- if(player.current.client.prefs.species in restricted_species)
+ if(player.current.client.prefs && player.current.client.prefs.species in restricted_species)
return 0
return 1
diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm
index c524f068cf3..232cf7c4435 100644
--- a/code/game/machinery/requests_console.dm
+++ b/code/game/machinery/requests_console.dm
@@ -108,6 +108,13 @@ var/list/obj/machinery/requests_console/allConsoles = list()
req_console_supplies -= department
if (departmentType & RC_INFO)
req_console_information -= department
+
+ if (LAZYLEN(alert_pdas))
+ for (var/pp in alert_pdas)
+ var/obj/item/device/pda/P = pp
+ P.linked_consoles -= src
+
+ alert_pdas.Cut()
return ..()
/obj/machinery/requests_console/attack_hand(user as mob)
@@ -244,6 +251,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
//Update the name real quick.
alert_pdas[pda] = pda.name
else
+ LAZYADD(pda.linked_consoles, src)
alert_pdas += pda
alert_pdas[pda] = pda.name
usr << "You link \the [pda] to \the [src]. It will now ping upon the arrival of a fax to this machine."
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index c10d02d84a2..6c91dc1f700 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -67,6 +67,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
var/obj/item/device/paicard/pai = null // A slot for a personal AI device
var/obj/item/weapon/pen/pen
+ var/list/obj/machinery/requests_console/linked_consoles
/obj/item/device/pda/examine(mob/user)
if(..(user, 1))
@@ -1419,6 +1420,11 @@ var/global/list/obj/item/device/pda/PDAs = list()
if (src.id && prob(90)) //IDs are kept in 90% of the cases
src.id.loc = get_turf(src.loc)
QDEL_NULL(pen)
+ if (LAZYLEN(linked_consoles))
+ for(var/A in linked_consoles)
+ var/obj/machinery/requests_console/B = A
+ B.alert_pdas -= src
+ linked_consoles -= B
return ..()
/obj/item/device/pda/clown/Crossed(AM as mob|obj) //Clown PDA is slippery.
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 241783d2746..34d95457908 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -157,6 +157,9 @@
if(M == user && target_zone == "mouth" && contents.len > 0 && !user.wear_mask)
var/obj/item/clothing/mask/smokable/cigarette/W = new /obj/item/clothing/mask/smokable/cigarette(user)
+ if(!istype(W))
+ user <<"The [W] is blocking the cigarettes."
+ return
reagents.trans_to_obj(W, (reagents.total_volume/contents.len))
user.equip_to_slot_if_possible(W, slot_wear_mask)
reagents.maximum_volume = 15 * contents.len
diff --git a/code/modules/cargo/randomstock.dm b/code/modules/cargo/randomstock.dm
index e685e032300..5748fb6c3f6 100644
--- a/code/modules/cargo/randomstock.dm
+++ b/code/modules/cargo/randomstock.dm
@@ -1156,6 +1156,7 @@ var/list/global/random_stock_large = list(
allsigns -= typesof(/obj/structure/sign/double)
allsigns -= typesof(/obj/structure/sign/poster)
allsigns -= /obj/structure/sign/directions
+ allsigns -= typesof(/obj/structure/sign/christmas)
var/number = rand(1,5)
while (number > 0)
diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm
index b66d1c5929a..2e307327807 100644
--- a/code/modules/clothing/spacesuits/rig/modules/utility.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm
@@ -239,6 +239,10 @@
else
target_mob = H
+ if(!H.Adjacent(target_mob))
+ H << "You are not close enough to inject them!"
+ return 0
+
if(target_mob != H)
H << "You inject [target_mob] with [chems_to_use] unit\s of [charge.display_name]."
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index fd28ae6b76e..75dbfc161d2 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -911,7 +911,7 @@
var/total_phoronloss = 0
for(var/obj/item/I in src)
- if(I.contaminated)
+ if(I.contaminated && !(isvaurca(src) && src.species.has_organ["filtration bit"]))
total_phoronloss += vsc.plc.CONTAMINATION_LOSS
if(!(status_flags & GODMODE)) adjustToxLoss(total_phoronloss)