From c607872b806d81bdf622dc0327324d01497fefbf Mon Sep 17 00:00:00 2001 From: Jeremy Liberman Date: Sun, 25 May 2014 14:20:37 -0500 Subject: [PATCH] Mutiny fix prereqs for directives --- code/controllers/shuttle_controller.dm | 2 +- .../directives/alien_fraud_directive.dm | 17 ++++++--- .../bluespace_contagion_directive.dm | 15 ++++++-- .../directives/financial_crisis_directive.dm | 6 +-- .../mutiny/directives/ipc_virus_directive.dm | 14 +++---- .../research_to_ripleys_directive.dm | 9 +++-- .../tau_ceti_needs_women_directive.dm | 38 +++++++++++++------ .../directives/terminations_directive.dm | 6 +-- .../mutiny/directives/test_directive.dm | 4 +- .../mutiny/emergency_authentication_device.dm | 2 +- code/game/gamemodes/mutiny/mutiny.dm | 6 +-- code/modules/mob/mob.dm | 11 ++++++ code/modules/mob/new_player/new_player.dm | 30 ++++++++++++++- 13 files changed, 113 insertions(+), 47 deletions(-) diff --git a/code/controllers/shuttle_controller.dm b/code/controllers/shuttle_controller.dm index ac804dc4f2..f889a37e17 100644 --- a/code/controllers/shuttle_controller.dm +++ b/code/controllers/shuttle_controller.dm @@ -59,7 +59,7 @@ datum/shuttle_controller/proc/recall() if(direction == 1) var/timeleft = timeleft() if(alert == 0) - if(timeleft >= 600) + if(timeleft >= get_shuttle_arrive_time()) return captain_announce("The emergency shuttle has been recalled.") world << sound('sound/AI/shuttlerecalled.ogg') diff --git a/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm b/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm index 109d616477..16dcd1de00 100644 --- a/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm +++ b/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm @@ -4,11 +4,15 @@ datum/directive/terminations/alien_fraud "Transfer their payrolls to the station account.", "Terminate their employment.") + proc/is_alien(mob/M) + var/species = M.get_species() + return species == "Tajaran" || species == "Unathi" + datum/directive/terminations/alien_fraud/get_crew_to_terminate() var/list/aliens[0] - for(var/mob/living/carbon/human/H in player_list) - if (H.species.name == "Tajaran" || H.species.name == "Unathi") - aliens.Add(H) + for(var/mob/M in player_list) + if (is_alien(M) && M.is_ready()) + aliens.Add(M) return aliens datum/directive/terminations/alien_fraud/get_description() @@ -24,10 +28,11 @@ datum/directive/terminations/alien_fraud/meets_prerequisites() // of the Tajarans and Unathi combined can't be more than 1/3rd of the crew. var/tajarans = 0 var/unathi = 0 - for(var/mob/living/carbon/human/H in player_list) - if (H.species.name == "Tajaran") + for(var/mob/M in player_list) + var/species = M.get_species() + if(species == "Tajaran") tajarans++ - if (H.species.name == "Unathi") + if(species == "Unathi") unathi++ if (!tajarans || !unathi) diff --git a/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm b/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm index 2757677e89..9209ee09db 100644 --- a/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm +++ b/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm @@ -1,9 +1,15 @@ #define INFECTION_COUNT 5 datum/directive/bluespace_contagion - var/infection_count = 5 var/list/infected = list() + proc/get_infection_candidates() + var/list/candidates[0] + for(var/mob/M in player_list) + if (!M.is_mechanical() && M.is_ready()) + candidates.Add(M) + return candidates + datum/directive/bluespace_contagion/get_description() return {"

@@ -14,13 +20,13 @@ datum/directive/bluespace_contagion/get_description() "} datum/directive/bluespace_contagion/initialize() - var/list/candidates = player_list.Copy() + var/list/candidates = get_infection_candidates() var/list/infected_names = list() for(var/i=0, i < INFECTION_COUNT, i++) if(!candidates.len) break - var/mob/living/carbon/human/candidate = pick(candidates) + var/mob/candidate = pick(candidates) candidates.Remove(candidate) infected.Add(candidate) infected_names.Add("[candidate.mind.assigned_role] [candidate.mind.name]") @@ -31,7 +37,8 @@ datum/directive/bluespace_contagion/initialize() "If no cure arrives after that time, execute the infected.") datum/directive/bluespace_contagion/meets_prerequisites() - return player_list.len >= 7 + var/list/candidates = get_infection_candidates() + return candidates.len >= 7 datum/directive/bluespace_contagion/directives_complete() return infected.len == 0 diff --git a/code/game/gamemodes/mutiny/directives/financial_crisis_directive.dm b/code/game/gamemodes/mutiny/directives/financial_crisis_directive.dm index 3ba5f47345..ddcca165e8 100644 --- a/code/game/gamemodes/mutiny/directives/financial_crisis_directive.dm +++ b/code/game/gamemodes/mutiny/directives/financial_crisis_directive.dm @@ -7,9 +7,9 @@ datum/directive/terminations/financial_crisis datum/directive/terminations/financial_crisis/get_crew_to_terminate() var/list/civilians[0] var/list/candidates = civilian_positions - "Head of Personnel" - for(var/mob/living/carbon/human/H in player_list) - if (candidates.Find(H.mind.assigned_role)) - civilians.Add(H) + for(var/mob/M in player_list) + if (candidates.Find(M.mind.assigned_role) && M.is_ready()) + civilians.Add(M) return civilians datum/directive/terminations/financial_crisis/get_description() diff --git a/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm b/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm index 755b83d4d1..7ff288f454 100644 --- a/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm +++ b/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm @@ -15,16 +15,16 @@ datum/directive/ipc_virus proc/get_ipcs() var/list/machines[0] - for(var/mob/living/carbon/human/H in player_list) - if (H.species.name == "Machine") - machines.Add(H) + for(var/mob/M in player_list) + if (M.get_species() == "Machine" && M.is_ready()) + machines.Add(M) return machines proc/get_roboticists() var/list/roboticists[0] - for(var/mob/living/carbon/human/H in player_list) - if (roboticist_roles.Find(H.mind.assigned_role)) - roboticists.Add(H) + for(var/mob/M in player_list) + if (roboticist_roles.Find(M.mind.assigned_role) && M.is_ready()) + roboticists.Add(M) return roboticists datum/directive/ipc_virus/initialize() @@ -37,7 +37,7 @@ datum/directive/ipc_virus/get_description() return {"

IPC units have been found to be infected with a violent and undesired virus in Virgus Ferrorus system. - Risk to NSS Exodus IPC units has not been assessed. Further information is classified. + Risk to [station_name()] IPC units has not been assessed. Further information is classified.

"} diff --git a/code/game/gamemodes/mutiny/directives/research_to_ripleys_directive.dm b/code/game/gamemodes/mutiny/directives/research_to_ripleys_directive.dm index 9e6364e2ab..f8da35524e 100644 --- a/code/game/gamemodes/mutiny/directives/research_to_ripleys_directive.dm +++ b/code/game/gamemodes/mutiny/directives/research_to_ripleys_directive.dm @@ -4,11 +4,14 @@ datum/directive/research_to_ripleys var/list/ids_to_reassign = list() var/materials_shipped = 0 + proc/is_researcher(mob/M) + return M.mind.assigned_role in science_positions - "Research Director" + proc/get_researchers() var/list/researchers[0] - for(var/mob/living/carbon/human/H in player_list) - if (H.mind.assigned_role in science_positions - "Research Director") - researchers.Add(H) + for(var/mob/M in player_list) + if (is_researcher(M) && M.is_ready()) + researchers.Add(M) return researchers proc/count_researchers_reassigned() diff --git a/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm b/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm index 6506ef23a0..7cf112cdc1 100644 --- a/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm +++ b/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm @@ -4,27 +4,32 @@ datum/directive/tau_ceti_needs_women proc/get_target_gender() if(!mode.head_loyalist) return FEMALE - return mode.head_loyalist.current.gender == FEMALE ? MALE : FEMALE + return mode.head_loyalist.current.get_gender() == FEMALE ? MALE : FEMALE + + proc/is_target_gender(mob/M) + var/species = M.get_species() + return species != "Diona" && M.get_gender() == get_target_gender() proc/get_crew_of_target_gender() var/list/targets[0] - for(var/mob/living/carbon/human/H in player_list) - if(H.species.name != "Machine" && H.gender == get_target_gender()) - targets.Add(H) + for(var/mob/M in player_list) + if(is_target_gender(M) && !M.is_mechanical() && M.is_ready()) + targets.Add(M) return targets proc/get_target_heads() var/list/heads[0] - for(var/mob/living/carbon/human/H in get_crew_of_target_gender()) - if(command_positions.Find(H.mind.assigned_role)) - heads.Add(H) + for(var/mob/M in get_crew_of_target_gender()) + if(command_positions.Find(M.mind.assigned_role)) + heads.Add(M) return heads proc/get_target_aliens() var/list/aliens[0] - for(var/mob/living/carbon/human/H in get_crew_of_target_gender()) - if (H.species.name == "Tajaran" || H.species.name == "Unathi" || H.species.name == "Skrell") - aliens.Add(H) + for(var/mob/M in get_crew_of_target_gender()) + var/species = M.get_species() + if(species == "Tajaran" || species == "Unathi" || species == "Skrell") + aliens.Add(M) return aliens proc/count_heads_reassigned() @@ -55,8 +60,17 @@ datum/directive/tau_ceti_needs_women/initialize() "Terminate employment of all [get_target_gender()] Skrell, Tajara, and Unathi.") datum/directive/tau_ceti_needs_women/meets_prerequisites() - var/list/targets = get_crew_of_target_gender() - return targets.len >= 3 + var/females = 0 + var/males = 0 + for(var/mob/M in player_list) + if(!M.is_mechanical() && M.get_species() != "Diona" && M.is_ready()) + var/gender = M.get_gender() + if(gender == MALE) + males++ + else if(gender == FEMALE) + females++ + + return males >= 2 && females >= 2 datum/directive/tau_ceti_needs_women/directives_complete() return command_targets.len == count_heads_reassigned() && alien_targets.len == 0 diff --git a/code/game/gamemodes/mutiny/directives/terminations_directive.dm b/code/game/gamemodes/mutiny/directives/terminations_directive.dm index 21f91c366a..610e994e53 100644 --- a/code/game/gamemodes/mutiny/directives/terminations_directive.dm +++ b/code/game/gamemodes/mutiny/directives/terminations_directive.dm @@ -22,11 +22,11 @@ datum/directive/terminations/directives_complete() return ids_to_terminate.len == 0 datum/directive/terminations/initialize() - for(var/mob/living/carbon/human/A in get_crew_to_terminate()) - var/datum/money_account/account = A.mind.initial_account + for(var/mob/living/carbon/human/H in get_crew_to_terminate()) + var/datum/money_account/account = H.mind.initial_account accounts_to_revoke["[account.account_number]"] = 0 accounts_to_suspend["[account.account_number]"] = account.suspended - ids_to_terminate.Add(A.wear_id) + ids_to_terminate.Add(H.wear_id) /hook/revoke_payroll/proc/payroll_directive(datum/money_account/account) var/datum/directive/terminations/D = get_directive("terminations") diff --git a/code/game/gamemodes/mutiny/directives/test_directive.dm b/code/game/gamemodes/mutiny/directives/test_directive.dm index 8eeb5ec94b..e19521cd1f 100644 --- a/code/game/gamemodes/mutiny/directives/test_directive.dm +++ b/code/game/gamemodes/mutiny/directives/test_directive.dm @@ -7,8 +7,8 @@ datum/directive/terminations/test datum/directive/terminations/test/get_crew_to_terminate() var/list/uglies[0] - for(var/mob/living/carbon/human/H in player_list) - uglies.Add(H) + for(var/mob/M in player_list) + uglies.Add(M) return uglies datum/directive/terminations/test/get_description() diff --git a/code/game/gamemodes/mutiny/emergency_authentication_device.dm b/code/game/gamemodes/mutiny/emergency_authentication_device.dm index 1df5698004..5bdcf27576 100644 --- a/code/game/gamemodes/mutiny/emergency_authentication_device.dm +++ b/code/game/gamemodes/mutiny/emergency_authentication_device.dm @@ -43,7 +43,7 @@ return if(!mode.current_directive.directives_complete()) - state("Command aborted. Communication with CentComm is prohibited until Directive X has been completed.") + state("Command aborted. Communication with CentCom is prohibited until Directive X has been completed.") return check_key_existence() diff --git a/code/game/gamemodes/mutiny/mutiny.dm b/code/game/gamemodes/mutiny/mutiny.dm index c74ed414e1..2e41aa45cd 100644 --- a/code/game/gamemodes/mutiny/mutiny.dm +++ b/code/game/gamemodes/mutiny/mutiny.dm @@ -256,17 +256,17 @@ datum/game_mode/mutiny /datum/game_mode/mutiny/pre_setup() var/list/loyalist_candidates = get_head_loyalist_candidates() if(!loyalist_candidates || loyalist_candidates.len == 0) - world << "Mutiny mode aborted: no valid candidates for head loyalist." + world << "\red Mutiny mode aborted: no valid candidates for head loyalist." return 0 var/list/mutineer_candidates = get_head_mutineer_candidates() if(!mutineer_candidates || mutineer_candidates.len == 0) - world << "Mutiny mode aborted: no valid candidates for head mutineer." + world << "\red Mutiny mode aborted: no valid candidates for head mutineer." return 0 var/list/directive_candidates = get_directive_candidates() if(!directive_candidates || directive_candidates.len == 0) - world << "Mutiny mode aborted: no valid candidates for Directive X." + world << "\red Mutiny mode aborted: no valid candidates for Directive X." return 0 head_loyalist = pick(loyalist_candidates) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index e20633e627..60335b8df2 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -604,6 +604,17 @@ var/list/slot_equipment_priority = list( \ /mob/proc/is_dead() return stat == DEAD +/mob/proc/is_mechanical() + if(mind && (mind.assigned_role == "Cyborg" || mind.assigned_role == "AI")) + return 1 + return istype(src, /mob/living/silicon) || get_species() == "Machine" + +/mob/proc/is_ready() + return !!client + +/mob/proc/get_gender() + return gender + /mob/proc/see(message) if(!is_active()) return 0 diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 39384970e2..2200a3c95f 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -355,7 +355,8 @@ if(client.prefs.species) chosen_species = all_species[client.prefs.species] if(chosen_species) - if(is_alien_whitelisted(src, client.prefs.species) || !config.usealienwhitelist || !(chosen_species.flags & IS_WHITELISTED) || (client.holder.rights & R_ADMIN) )// Have to recheck admin due to no usr at roundstart. Latejoins are fine though. + // Have to recheck admin due to no usr at roundstart. Latejoins are fine though. + if(is_species_whitelisted(chosen_species) || has_admin_rights()) new_character = new(loc, client.prefs.species) if(!new_character) @@ -413,11 +414,36 @@ Move() return 0 - proc/close_spawn_windows() src << browse(null, "window=latechoices") //closes late choices window src << browse(null, "window=playersetup") //closes the player setup window + proc/has_admin_rights() + return client.holder.rights & R_ADMIN + + proc/is_species_whitelisted(datum/species/S) + if(!S) return 1 + return is_alien_whitelisted(src, S.name) || !config.usealienwhitelist || !(S.flags & IS_WHITELISTED) + +/mob/new_player/get_species() + var/datum/species/chosen_species + if(client.prefs.species) + chosen_species = all_species[client.prefs.species] + + if(!chosen_species) + return "Human" + + if(is_species_whitelisted(chosen_species) || has_admin_rights()) + return chosen_species.name + + return "Human" + +/mob/new_player/get_gender() + if(!client || !client.prefs) ..() + return client.prefs.gender + +/mob/new_player/is_ready() + return ready && !!client /mob/new_player/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null) return