diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 229993ee50c..07163cb3669 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -129,20 +129,18 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' return 0 for(var/obj/stack in cortical_stacks) - if (get_area(stack.loc) != locate(/area/shuttle/vox/station)) - return 0 + if(get_area(stack) != locate(/area/shuttle/vox) && get_area(stack) != locate(/area/vox_station)) + return 0 //this is stupid as fuck return 1 /datum/game_mode/proc/is_raider_crew_alive() - for(var/datum/mind/raider in raiders) if(raider.current) - if(istype(raider.current,/mob/living/carbon/human) && raider.current.stat != 2) + if(istype(raider.current,/mob/living/carbon/human) && raider.current.stat != DEAD) return 1 return 0 /datum/game_mode/proc/forge_vox_objectives() - var/i = 1 var/max_objectives = pick(2,2,2,2,3,3,3,4) var/list/objs = list() @@ -179,7 +177,6 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' show_objectives(raider) /datum/game_mode/heist/declare_completion() - //No objectives, go straight to the feedback. if(!(raid_objectives.len)) return ..() diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index b9a53bb2b23..9544d54560c 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -333,7 +333,7 @@ datum/objective/hijack check_completion() if(!owner.current || owner.current.stat) return 0 - if(!shuttle_master.emergency.mode < SHUTTLE_ENDGAME) + if(shuttle_master.emergency.mode < SHUTTLE_ENDGAME) return 0 if(issilicon(owner.current)) return 0 @@ -362,7 +362,7 @@ datum/objective/hijack check_completion() if(!owner.current) return 0 - if(!shuttle_master.emergency.mode < SHUTTLE_ENDGAME) + if(shuttle_master.emergency.mode < SHUTTLE_ENDGAME) return 0 var/area/A = shuttle_master.emergency.areaInstance @@ -392,7 +392,7 @@ datum/objective/block check_completion() if(!istype(owner.current, /mob/living/silicon)) return 0 - if(!shuttle_master.emergency.mode < SHUTTLE_ENDGAME) + if(shuttle_master.emergency.mode < SHUTTLE_ENDGAME) return 0 if(!owner.current) return 0 @@ -852,19 +852,21 @@ datum/objective/heist/kidnap check_completion() if(target && target.current) if (target.current.stat == DEAD) - return 0 // They're dead. Fail. - //if (!target.current.restrained()) - // return 0 // They're loose. Close but no cigar. + return 0 + + var/area/shuttle/vox/A = locate() //stupid fucking hardcoding + var/area/vox_station/B = locate() //but necessary - var/area/shuttle/vox/station/A = locate() for(var/mob/living/carbon/human/M in A) if(target.current == M) - return 1 //They're restrained on the shuttle. Success. + return 1 + for(var/mob/living/carbon/human/M in B) + if(target.current == M) + return 1 else return 0 datum/objective/heist/loot - choose_target() var/loot = "an object" switch(rand(1,8)) @@ -904,26 +906,38 @@ datum/objective/heist/loot explanation_text = "We are lacking in hardware. Steal or trade [loot]." check_completion() - var/total_amount = 0 - for(var/obj/O in locate(/area/shuttle/vox/station)) - if(istype(O,target)) total_amount++ + for(var/obj/O in locate(/area/shuttle/vox)) + if(istype(O, target)) + total_amount++ for(var/obj/I in O.contents) - if(istype(I,target)) total_amount++ - if(total_amount >= target_amount) return 1 + if(istype(I, target)) + total_amount++ + if(total_amount >= target_amount) + return 1 + + for(var/obj/O in locate(/area/vox_station)) + if(istype(O, target)) + total_amount++ + for(var/obj/I in O.contents) + if(istype(I, target)) + total_amount++ + if(total_amount >= target_amount) + return 1 var/datum/game_mode/heist/H = ticker.mode for(var/datum/mind/raider in H.raiders) if(raider.current) for(var/obj/O in raider.current.get_contents()) - if(istype(O,target)) total_amount++ - if(total_amount >= target_amount) return 1 + if(istype(O,target)) + total_amount++ + if(total_amount >= target_amount) + return 1 return 0 datum/objective/heist/salvage - choose_target() switch(rand(1,8)) if(1) @@ -954,16 +968,28 @@ datum/objective/heist/salvage explanation_text = "Ransack or trade with the station and escape with [target_amount] [target]." check_completion() - var/total_amount = 0 - for(var/obj/item/O in locate(/area/shuttle/vox/station)) - + for(var/obj/item/O in locate(/area/shuttle/vox)) var/obj/item/stack/sheet/S if(istype(O,/obj/item/stack/sheet)) if(O.name == target) S = O total_amount += S.get_amount() + + for(var/obj/I in O.contents) + if(istype(I,/obj/item/stack/sheet)) + if(I.name == target) + S = I + total_amount += S.get_amount() + + for(var/obj/item/O in locate(/area/vox_station)) + var/obj/item/stack/sheet/S + if(istype(O,/obj/item/stack/sheet)) + if(O.name == target) + S = O + total_amount += S.get_amount() + for(var/obj/I in O.contents) if(istype(I,/obj/item/stack/sheet)) if(I.name == target) @@ -988,7 +1014,8 @@ datum/objective/heist/inviolate_crew check_completion() var/datum/game_mode/heist/H = ticker.mode - if(H.is_raider_crew_safe()) return 1 + if(H.is_raider_crew_safe()) + return 1 return 0 #define MAX_VOX_KILLS 10 //Number of kills during the round before the Inviolate is broken.