Fix hijack objective check. Corpses no longer count against it.

Slaughter demons and other special roles don't count against it either.
Instead of having a long list of roles that are allowed on the shuttle,
it's easier to list *dis*allowed ones instead.
This commit is contained in:
moxian
2019-11-07 06:38:23 +00:00
parent 8b9f663203
commit 091a53c4d8
+25 -32
View File
@@ -175,42 +175,35 @@
/obj/docking_port/mobile/emergency/proc/is_hijacked()
for(var/mob/living/player in GLOB.player_list)
if(player.mind)
if(player.stat != DEAD || !iszombie(player))
if(issilicon(player)) //Borgs are technically dead anyways
if(player.stat == DEAD) // Corpses
continue
if(iszombie(player)) // Walking corpses
continue
if(issilicon(player)) //Borgs are technically dead anyways
continue
if(isanimal(player)) //Poly does not own the shuttle
continue
if(ishuman(player)) //hostages allowed on the shuttle, check for restraints
var/mob/living/carbon/human/H = player
if(!H.check_death_method() && H.health <= HEALTH_THRESHOLD_DEAD) //new crit users who are in hard crit are considered dead
continue
if(isanimal(player)) //Poly does not own the shuttle
if(H.handcuffed) //cuffs
continue
if(ishuman(player)) //hostages allowed on the shuttle, check for restraints
var/mob/living/carbon/human/H = player
if(!H.check_death_method() && H.health <= HEALTH_THRESHOLD_DEAD) //new crit users who are in hard crit are considered dead
continue
if(H.handcuffed) //cuffs
continue
if(H.wear_suit && H.wear_suit.breakouttime) //straight jacket
continue
if(istype(H.loc, /obj/structure/closet)) //locked/welded locker, all aboard the clown train honk honk
var/obj/structure/closet/C = H.loc
if(C.welded || C.locked)
continue
var/special_role = player.mind.special_role
if(special_role)
if(special_role == SPECIAL_ROLE_TRAITOR) // traitors can hijack the shuttle
if(H.wear_suit && H.wear_suit.breakouttime) //straight jacket
continue
if(istype(H.loc, /obj/structure/closet)) //locked/welded locker, all aboard the clown train honk honk
var/obj/structure/closet/C = H.loc
if(C.welded || C.locked)
continue
var/special_role = player.mind.special_role
if(special_role)
// There's a long list of special roles, but almost all of them are antags anyway.
// If you manage to escape with a pet slaughter demon - go for it! Greentext well earned!
if(special_role != SPECIAL_ROLE_ERT && special_role != SPECIAL_ROLE_EVENTMISC)
continue
if(special_role == SPECIAL_ROLE_CHANGELING) // changelings as well
continue
if(special_role == SPECIAL_ROLE_VAMPIRE || special_role == SPECIAL_ROLE_VAMPIRE_THRALL) // for traitorvamp
continue
if(special_role == SPECIAL_ROLE_NUKEOPS) // so can nukeops, for the hell of it
continue
if(special_role == SPECIAL_ROLE_SYNDICATE_DEATHSQUAD) // and the syndie deathsquad i guess
continue
if(get_area(player) == areaInstance)
return FALSE
if(get_area(player) == areaInstance)
return FALSE
return TRUE