Allows uplinks to be given while the owner is under any form of shapeshifting (#96105)

## About The Pull Request

This is more snowflaky than I'd like but I can't think of a better way
to handle this than directly checking for the shapeshift status, as its
used in a bunch of places.

Closes #96072

## Changelog
🆑
fix: Being shapeshifted while rolling midround traitor no longer robs
you of your uplink
/🆑
This commit is contained in:
SmArtKar
2026-05-23 17:17:46 +02:00
committed by GitHub
parent 4814318d7c
commit 155ace6d2b
+10 -7
View File
@@ -111,18 +111,21 @@
* * antag_datum: the antag datum of the uplink owner, for storing it in antag memory. optional!
*/
/datum/mind/proc/give_uplink(silent = FALSE, datum/antagonist/antag_datum)
if(isnull(current))
if(!isliving(current))
return
var/mob/living/carbon/human/traitor_mob = current
if (!istype(traitor_mob))
return
var/datum/status_effect/shapechange_mob/shapeshift = current.has_status_effect(/datum/status_effect/shapechange_mob)
if (!ishuman(shapeshift?.caster_mob))
return
traitor_mob = shapeshift.caster_mob
var/obj/item/uplink_loc
var/uplink_spawn_location = traitor_mob.client?.prefs?.read_preference(/datum/preference/choiced/uplink_location)
var/uplink_spawn_location = current.client?.prefs?.read_preference(/datum/preference/choiced/uplink_location)
var/cant_speak = (HAS_TRAIT(traitor_mob, TRAIT_MUTE) || is_mime_job(assigned_role))
if(uplink_spawn_location == UPLINK_RADIO && cant_speak)
if(!silent)
to_chat(traitor_mob, span_warning("You have been deemed ineligible for a radio uplink. Supplying standard uplink instead."))
to_chat(current, span_warning("You have been deemed ineligible for a radio uplink. Supplying standard uplink instead."))
uplink_spawn_location = UPLINK_PDA
if(uplink_spawn_location != UPLINK_IMPLANT)
@@ -134,7 +137,7 @@
var/obj/item/implant/uplink/starting/new_implant = new(traitor_mob)
new_implant.implant(traitor_mob, null, silent = TRUE)
if(!silent)
to_chat(traitor_mob, span_boldnotice("Your Syndicate Uplink has been cunningly implanted in you, for a small TC fee. Simply trigger the uplink to access it."))
to_chat(current, span_boldnotice("Your Syndicate Uplink has been cunningly implanted in you, for a small TC fee. Simply trigger the uplink to access it."))
add_memory(/datum/memory/key/traitor_uplink/implant, uplink_loc = "implant")
return new_implant
@@ -144,7 +147,7 @@
if(!new_uplink)
CRASH("Uplink creation failed.")
new_uplink.setup_unlock_code()
new_uplink.uplink_handler.owner = traitor_mob.mind
new_uplink.uplink_handler.owner = src
new_uplink.uplink_handler.assigned_role = traitor_mob.mind.assigned_role.title
new_uplink.uplink_handler.assigned_species = traitor_mob.dna.species.id
@@ -164,7 +167,7 @@
new_uplink.unlock_text = unlock_text
if(!silent)
to_chat(traitor_mob, span_boldnotice(unlock_text))
to_chat(current, span_boldnotice(unlock_text))
if(antag_datum)
antag_datum.antag_memory += new_uplink.unlock_note + "<br>"
return .