[s] Objective fixes : Cryo edition (#13561)

* no more free wins from cryo

* Kicks travis with an empty commit

* Update code/game/gamemodes/objective.dm

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
This commit is contained in:
DeltaFire15
2020-10-15 12:44:08 +02:00
committed by GitHub
parent f0ab98bcaf
commit 1e1a92983a
2 changed files with 37 additions and 4 deletions
+36 -3
View File
@@ -76,6 +76,13 @@ GLOBAL_LIST_EMPTY(objectives)
/datum/objective/proc/check_completion()
return completed
/*
Used during the round to check if an objective has already been completed, generally should have harsher requirements that the default objective (no true because of short afk, etc)
If not set, defaults to check_completion instead. Set it. It's used by cryo.
*/
/datum/objective/proc/check_midround_completion()
return check_completion()
/datum/objective/proc/is_unique_objective(possible_target)
var/list/datum/mind/owners = get_owners()
for(var/datum/mind/M in owners)
@@ -175,6 +182,9 @@ GLOBAL_LIST_EMPTY(objectives)
/datum/objective/assassinate/check_completion()
return !considered_alive(target) || considered_afk(target)
/datum/objective/assassinate/check_midround_completion()
return FALSE //They need to be dead at the end of the round, silly!
/datum/objective/assassinate/update_explanation_text()
..()
if(target && target.current)
@@ -201,13 +211,16 @@ GLOBAL_LIST_EMPTY(objectives)
return won || ..()
/datum/objective/assassinate/once/process()
won = check_midround_completion()
won = tick_check_completion()
if(won)
STOP_PROCESSING(SSprocessing,src)
/datum/objective/assassinate/once/proc/check_midround_completion()
/datum/objective/assassinate/once/proc/tick_check_completion()
return won || !considered_alive(target) //The target afking / logging off for a bit during the round doesn't complete it, but them being afk at roundend does.
/datum/objective/assassinate/once/check_midround_completion()
return won //If they cryoed, only keep it if we already won
/datum/objective/assassinate/internal
var/stolen = 0 //Have we already eliminated this target?
@@ -233,6 +246,9 @@ GLOBAL_LIST_EMPTY(objectives)
var/turf/T = get_turf(target.current)
return !T || !is_station_level(T.z)
/datum/objective/mutiny/check_midround_completion()
return FALSE
/datum/objective/mutiny/update_explanation_text()
..()
if(target && target.current)
@@ -252,7 +268,10 @@ GLOBAL_LIST_EMPTY(objectives)
return target
/datum/objective/maroon/check_completion()
return !target || !considered_alive(target) || (!target.current.onCentCom() && !target.current.onSyndieBase())
return !target || !considered_alive(target) || (!target.current?.onCentCom() && !target.current?.onSyndieBase())
/datum/objective/maroon/check_midround_completion()
return FALSE
/datum/objective/maroon/update_explanation_text()
if(target && target.current)
@@ -313,6 +332,9 @@ GLOBAL_LIST_EMPTY(objectives)
/datum/objective/protect/check_completion()
return !target || considered_alive(target, enforce_human = human_check)
/datum/objective/protect/check_midround_completion()
return FALSE //Nuh uh, you get a new objective
/datum/objective/protect/update_explanation_text()
..()
if(target && target.current)
@@ -412,6 +434,9 @@ GLOBAL_LIST_EMPTY(objectives)
/datum/objective/breakout/check_completion()
return !target || considered_escaped(target)
/datum/objective/breakout/check_midround_completion()
return FALSE
/datum/objective/breakout/find_target_by_role(role, role_type=0, invert=0)
if(!invert)
target_role_type = role_type
@@ -462,6 +487,9 @@ GLOBAL_LIST_EMPTY(objectives)
return TRUE
return FALSE
/datum/objective/escape/escape_with_identity/check_midround_completion()
return FALSE
/datum/objective/escape/escape_with_identity/admin_edit(mob/admin)
admin_simple_target_pick(admin)
@@ -622,6 +650,8 @@ GLOBAL_LIST_EMPTY(possible_items_special)
explanation_text = "Acquire [targetinfo.name] held by [target.current.real_name], the [target.assigned_role] and syndicate agent"
steal_target = targetinfo.targetitem
/datum/objective/steal/exchange/check_midround_completion()
return FALSE
/datum/objective/steal/exchange/update_explanation_text()
..()
@@ -826,6 +856,9 @@ GLOBAL_LIST_EMPTY(possible_items_special)
return target.current.stat == DEAD || target.current.z > 6 || !target.current.ckey //Borgs/brains/AIs count as dead for traitor objectives.
return TRUE
/datum/objective/destroy/check_midround_completion()
return FALSE
/datum/objective/destroy/update_explanation_text()
..()
if(target && target.current)
+1 -1
View File
@@ -361,7 +361,7 @@
// them win or lose based on cryo is silly so we remove the objective.
if(istype(O,/datum/objective/mutiny) && O.target == mob_occupant.mind)
qdel(O)
else if(O.target && istype(O.target, /datum/mind) && !O.check_completion())
else if(O.target && istype(O.target, /datum/mind) && !O.check_midround_completion())
if(O.target == mob_occupant.mind && O.owner?.current)
to_chat(O.owner.current, "<BR><span class='userdanger'>You get the feeling your target is no longer within reach. Time for Plan [pick("A","B","C","D","X","Y","Z")]. Objectives updated!</span>")
O.target = null