﻿# Pilgrims and Preachers - religious task contracts
# Contracts use existing vanilla groups, so the vanilla generation picks them up
# without any override. Events are in events/ppr_contract_events.txt.

######################################################################
# Retrieve a Holy Relic
# Travel to the tomb of a saint of the employer's faith, win over the
# guardians, and bring a relic back to the employer. Needs By God Alone.
######################################################################
ppr_retrieve_relic = {
	group = laamp_contracts_transport_group
	icon = "gfx/interface/icons/character_interactions/religious.dds"

	travel = no
	use_diplomatic_range = no

	weight = {
		value = task_contract_weight_interesting_almost_rare_value
		add = ppr_contracts_weight_up_religious_value
		add = laamp_contracts_weight_up_transport_value
		scope:employer = {
			add = {
				if = {
					limit = { has_trait = zealous }
					add = task_contract_weight_bonus_employer_has_associated_traits_value
				}
				if = {
					limit = { has_trait = cynical }
					add = task_contract_weight_malus_employer_has_associated_traits_value
				}
				min = task_contract_weight_employer_associated_traits_min_value
				max = task_contract_weight_employer_associated_traits_max_value
			}
			multiply = task_contract_weight_by_tier_value
			add = task_contract_weight_employer_contact_list_value
		}
	}

	valid_to_create = {
		valid_laamp_basic_trigger = {
			EMPLOYER = scope:employer
			LAAMP = root
		}
		employer_has_treasury_to_offer_job_trigger = yes
		valid_laamp_sensible_start_trigger = yes
		rule_out_dramatic_laamp_employers_trigger = yes
		faith = scope:employer.faith
		ppr_can_offer_relic_contract_trigger = { EMPLOYER = scope:employer }
	}
	valid_to_accept = {
		valid_laamp_basic_accept_only_trigger = yes
		valid_laamp_basic_trigger = {
			EMPLOYER = scope:employer
			LAAMP = root
		}
		faith = scope:employer.faith
	}
	valid_to_continue = {
		valid_laamp_basic_trigger = {
			EMPLOYER = root.task_contract_employer
			LAAMP = root.task_contract_taker
		}
		exists = var:ppr_saint
		task_contract_employer = {
			is_landed = yes
			exists = capital_province
		}
	}
	valid_to_keep = {
		valid_laamp_basic_trigger = {
			EMPLOYER = root.task_contract_employer
			LAAMP = root.task_contract_taker
		}
	}

	on_create = {
		scope:contract = {
			save_scope_as = task_contract
			task_contract_employer = { save_scope_as = ppr_contract_employer }
			scope:ppr_contract_employer.faith = {
				random_saint = {
					limit = {
						ppr_valid_relic_saint_trigger = { EMPLOYER = scope:ppr_contract_employer }
					}
					save_scope_as = ppr_saint
				}
			}
			if = {
				limit = { exists = scope:ppr_saint }
				set_variable = {
					name = ppr_saint
					value = scope:ppr_saint
				}
				set_variable = {
					name = task_contract_destination
					value = scope:ppr_saint.saint_burial_location
				}
			}
			# Make our gold rewards static.
			grab_gold_fuzz_number_effect = yes
			set_variable = {
				name = gold_success_standard
				value = task_contract_taker.task_contract_success_gold_gain_full_value
			}
			set_variable = {
				name = gold_success_critical
				value = task_contract_taker.task_contract_success_gold_gain_critical_value
			}
		}
	}

	on_accepted = {
		task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" }
		save_scope_as = task_contract
		task_contract_taker = { trigger_event = ppr_contract_events.0001 }
	}

	on_invalidated = {
		task_contract_taker ?= {
			remove_character_flag ?= is_in_task_contract_event_chain
		}
	}

	task_contract_reward = {
		success_standard = {
			should_print_on_complete = yes
			effect = {
				task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
				save_scope_as = task_contract
				ppr_set_extra_reward_effect = yes
				laamp_rewards_disburse_ordinary_currency_effect = {
					GOLD = scope:task_contract.var:gold_success_standard
					PRESTIGE = 0
					PIETY = task_contract_success_piety_gain_full_value
					PROVISIONS = 0
					OPINION = task_contract_opinion_standard_reward_value
					OPINION_TYPE = succeeded_task_contract_opinion
					CONTACT = yes
					CONTACT_HOOK = no
					EXTRA_REWARD = scope:extra_reward
				}
				task_contract_taker = {
					task_successful_noncrim_contract_count_effect = yes
					if = { limit = { has_pam_dlc_trigger = yes } change_spiritual_fulfillment = minor_spiritual_fulfillment_value }
				}
			}
		}
		success_critical = {
			should_print_on_complete = yes
			effect = {
				task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
				save_scope_as = task_contract
				ppr_set_extra_reward_effect = yes
				laamp_rewards_disburse_ordinary_currency_effect = {
					GOLD = scope:task_contract.var:gold_success_critical
					PRESTIGE = task_contract_success_prestige_gain_half_value
					PIETY = task_contract_success_piety_gain_critical_value
					PROVISIONS = 0
					OPINION = task_contract_opinion_excelled_reward_value
					OPINION_TYPE = critically_succeeded_task_contract_opinion
					CONTACT = yes
					CONTACT_HOOK = yes
					EXTRA_REWARD = scope:extra_reward
				}
				task_contract_taker = {
					task_successful_noncrim_contract_count_effect = yes
					if = { limit = { has_pam_dlc_trigger = yes } change_spiritual_fulfillment = medium_spiritual_fulfillment_value }
				}
			}
		}
		failure_standard = {
			positive = no
			should_print_on_complete = yes
			effect = {
				task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
				save_scope_as = task_contract
				save_scope_value_as = { name = extra_reward value = flag:no }
				laamp_rewards_disburse_ordinary_currency_effect = {
					GOLD = 0
					PRESTIGE = 0
					PIETY = task_contract_failure_piety_loss_full_value
					PROVISIONS = task_contract_failure_provisions_gain_minor_value
					OPINION = task_contract_opinion_standard_failure_value
					OPINION_TYPE = failed_task_contract_opinion
					CONTACT = no
					CONTACT_HOOK = no
					EXTRA_REWARD = scope:extra_reward
				}
			}
		}
	}
}

######################################################################
# Preach the Word
# Preach on the employer's behalf in three sermons. Each success raises
# the popularity of one of the employer's personal tenets in your shared
# faith. Needs By God Alone (tenet popularity).
######################################################################
ppr_preach_tenet = {
	group = laamp_contracts_learning_group
	icon = "gfx/interface/icons/scheme_types/learning.dds"

	travel = yes
	use_diplomatic_range = no

	weight = {
		value = task_contract_weight_default_value
		add = ppr_contracts_weight_up_religious_value
		add = laamp_contracts_weight_up_learning_value
		scope:employer = {
			add = {
				if = {
					limit = { has_trait = zealous }
					add = task_contract_weight_bonus_employer_has_associated_traits_value
				}
				if = {
					limit = { has_trait = cynical }
					add = task_contract_weight_malus_employer_has_associated_traits_value
				}
				min = task_contract_weight_employer_associated_traits_min_value
				max = task_contract_weight_employer_associated_traits_max_value
			}
			multiply = task_contract_weight_by_tier_value
			add = task_contract_weight_employer_contact_list_value
		}
	}

	valid_to_create = {
		valid_laamp_basic_trigger = {
			EMPLOYER = scope:employer
			LAAMP = root
		}
		employer_has_treasury_to_offer_job_trigger = yes
		valid_laamp_sensible_start_trigger = yes
		rule_out_dramatic_laamp_employers_trigger = yes
		scope:employer = {
			ppr_can_offer_preaching_contract_trigger = { LAAMP = root }
		}
	}
	valid_to_accept = {
		valid_laamp_basic_accept_only_trigger = yes
		valid_laamp_basic_trigger = {
			EMPLOYER = scope:employer
			LAAMP = root
		}
		faith = scope:employer.faith
	}
	valid_to_continue = {
		valid_laamp_basic_trigger = {
			EMPLOYER = root.task_contract_employer
			LAAMP = root.task_contract_taker
		}
		task_contract_taker = { faith = root.task_contract_employer.faith }
	}
	valid_to_keep = {
		valid_laamp_basic_trigger = {
			EMPLOYER = root.task_contract_employer
			LAAMP = root.task_contract_taker
		}
	}

	on_create = {
		scope:contract = {
			save_scope_as = task_contract
			grab_gold_fuzz_number_effect = yes
			set_variable = {
				name = gold_success_qualified
				value = task_contract_taker.task_contract_success_gold_gain_half_value
			}
			set_variable = {
				name = gold_success_standard
				value = task_contract_taker.task_contract_success_gold_gain_full_value
			}
			set_variable = {
				name = gold_success_critical
				value = task_contract_taker.task_contract_success_gold_gain_critical_value
			}
		}
	}

	on_accepted = {
		task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" }
		save_scope_as = task_contract
		increment_variable_effect = { VAR = ppr_score_tally VAL = 0 }
		increment_variable_effect = { VAR = ppr_sermons_left VAL = 3 }
		task_contract_taker = { trigger_event = ppr_contract_events.0010 }
	}

	on_invalidated = {
		task_contract_taker ?= {
			remove_character_flag ?= is_in_task_contract_event_chain
			current_travel_plan ?= {
				if = {
					limit = { is_paused = yes }
					resume_travel_plan = yes
				}
			}
		}
	}

	task_contract_reward = {
		success_qualified = {
			should_print_on_complete = yes
			effect = {
				task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
				save_scope_as = task_contract
				ppr_set_extra_reward_effect = yes
				laamp_rewards_disburse_ordinary_currency_effect = {
					GOLD = scope:task_contract.var:gold_success_qualified
					PRESTIGE = 0
					PIETY = task_contract_success_piety_gain_half_value
					PROVISIONS = 0
					OPINION = task_contract_opinion_reduced_reward_value
					OPINION_TYPE = succeeded_task_contract_opinion
					CONTACT = no
					CONTACT_HOOK = no
					EXTRA_REWARD = scope:extra_reward
				}
				task_contract_taker = { task_successful_noncrim_contract_count_effect = yes }
			}
		}
		success_standard = {
			should_print_on_complete = yes
			effect = {
				task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
				save_scope_as = task_contract
				ppr_set_extra_reward_effect = yes
				laamp_rewards_disburse_ordinary_currency_effect = {
					GOLD = scope:task_contract.var:gold_success_standard
					PRESTIGE = 0
					PIETY = task_contract_success_piety_gain_full_value
					PROVISIONS = 0
					OPINION = task_contract_opinion_standard_reward_value
					OPINION_TYPE = succeeded_task_contract_opinion
					CONTACT = yes
					CONTACT_HOOK = no
					EXTRA_REWARD = scope:extra_reward
				}
				task_contract_taker = {
					task_successful_noncrim_contract_count_effect = yes
					if = { limit = { has_pam_dlc_trigger = yes } change_spiritual_fulfillment = minor_spiritual_fulfillment_value }
				}
			}
		}
		success_critical = {
			should_print_on_complete = yes
			effect = {
				task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
				save_scope_as = task_contract
				ppr_set_extra_reward_effect = yes
				laamp_rewards_disburse_ordinary_currency_effect = {
					GOLD = scope:task_contract.var:gold_success_critical
					PRESTIGE = task_contract_success_prestige_gain_half_value
					PIETY = task_contract_success_piety_gain_critical_value
					PROVISIONS = 0
					OPINION = task_contract_opinion_excelled_reward_value
					OPINION_TYPE = critically_succeeded_task_contract_opinion
					CONTACT = yes
					CONTACT_HOOK = yes
					EXTRA_REWARD = scope:extra_reward
				}
				task_contract_taker = {
					task_successful_noncrim_contract_count_effect = yes
					if = { limit = { has_pam_dlc_trigger = yes } change_spiritual_fulfillment = medium_spiritual_fulfillment_value }
				}
			}
		}
		failure_standard = {
			positive = no
			should_print_on_complete = yes
			effect = {
				task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
				save_scope_as = task_contract
				save_scope_value_as = { name = extra_reward value = flag:no }
				laamp_rewards_disburse_ordinary_currency_effect = {
					GOLD = 0
					PRESTIGE = 0
					PIETY = task_contract_failure_piety_loss_full_value
					PROVISIONS = task_contract_failure_provisions_gain_minor_value
					OPINION = task_contract_opinion_standard_failure_value
					OPINION_TYPE = failed_task_contract_opinion
					CONTACT = no
					CONTACT_HOOK = no
					EXTRA_REWARD = scope:extra_reward
				}
			}
		}
	}
}

######################################################################
# Confront the Heresiarch
# Track down an (AI, unlanded) heresiarch of a heresy that troubles the
# employer's religion, and make them recant or discredit them.
# Works without the DLC: heresy outbreaks are part of the free update.
######################################################################
ppr_confront_heresiarch = {
	group = laamp_contracts_learning_group
	icon = "gfx/interface/icons/character_interactions/religious.dds"

	travel = no
	use_diplomatic_range = no

	weight = {
		value = task_contract_weight_interesting_almost_rare_value
		add = ppr_contracts_weight_up_religious_value
		add = laamp_contracts_weight_up_learning_value
		scope:employer = {
			add = {
				if = {
					limit = { has_trait = zealous }
					add = task_contract_weight_bonus_employer_has_associated_traits_value
				}
				if = {
					limit = { has_trait = cynical }
					add = task_contract_weight_malus_employer_has_associated_traits_value
				}
				min = task_contract_weight_employer_associated_traits_min_value
				max = task_contract_weight_employer_associated_traits_max_value
			}
			multiply = task_contract_weight_by_tier_value
			add = task_contract_weight_employer_contact_list_value
		}
	}

	valid_to_create = {
		valid_laamp_basic_trigger = {
			EMPLOYER = scope:employer
			LAAMP = root
		}
		employer_has_treasury_to_offer_job_trigger = yes
		valid_laamp_sensible_start_trigger = yes
		rule_out_dramatic_laamp_employers_trigger = yes
		faith = scope:employer.faith
		NOT = { has_trait = heresiarch }
		scope:employer = { ppr_can_offer_heresiarch_contract_trigger = yes }
	}
	valid_to_accept = {
		valid_laamp_basic_accept_only_trigger = yes
		valid_laamp_basic_trigger = {
			EMPLOYER = scope:employer
			LAAMP = root
		}
		faith = scope:employer.faith
	}
	valid_to_continue = {
		valid_laamp_basic_trigger = {
			EMPLOYER = root.task_contract_employer
			LAAMP = root.task_contract_taker
		}
		var:task_contract_target ?= {
			is_alive = yes
			has_trait = heresiarch
			is_imprisoned = no
		}
	}
	valid_to_keep = {
		valid_laamp_basic_trigger = {
			EMPLOYER = root.task_contract_employer
			LAAMP = root.task_contract_taker
		}
		var:task_contract_target ?= {
			is_alive = yes
			has_trait = heresiarch
		}
	}

	on_create = {
		scope:contract = {
			save_scope_as = task_contract
			task_contract_employer = { save_scope_as = ppr_contract_employer }
			random_in_global_list = {
				variable = ppr_heresiarch_list
				limit = {
					ppr_valid_heresiarch_target_trigger = { EMPLOYER = scope:ppr_contract_employer }
				}
				save_scope_as = ppr_heresiarch
			}
			if = {
				limit = { exists = scope:ppr_heresiarch }
				set_task_contract_target = scope:ppr_heresiarch
				set_variable = {
					name = task_contract_target
					value = scope:ppr_heresiarch
				}
			}
			grab_gold_fuzz_number_effect = yes
			set_variable = {
				name = gold_success_standard
				value = task_contract_taker.task_contract_success_gold_gain_full_value
			}
			set_variable = {
				name = gold_success_critical
				value = task_contract_taker.task_contract_success_gold_gain_critical_value
			}
		}
	}

	on_accepted = {
		task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" }
		save_scope_as = task_contract
		task_contract_taker = { trigger_event = ppr_contract_events.0020 }
	}

	on_invalidated = {
		task_contract_taker ?= {
			remove_character_flag ?= is_in_task_contract_event_chain
		}
	}

	task_contract_reward = {
		success_standard = {
			should_print_on_complete = yes
			effect = {
				task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
				save_scope_as = task_contract
				ppr_set_extra_reward_effect = yes
				laamp_rewards_disburse_ordinary_currency_effect = {
					GOLD = scope:task_contract.var:gold_success_standard
					PRESTIGE = task_contract_success_prestige_gain_half_value
					PIETY = task_contract_success_piety_gain_full_value
					PROVISIONS = 0
					OPINION = task_contract_opinion_standard_reward_value
					OPINION_TYPE = succeeded_task_contract_opinion
					CONTACT = yes
					CONTACT_HOOK = no
					EXTRA_REWARD = scope:extra_reward
				}
				task_contract_taker = {
					task_successful_noncrim_contract_count_effect = yes
					if = { limit = { has_pam_dlc_trigger = yes } change_spiritual_fulfillment = minor_spiritual_fulfillment_value }
				}
			}
		}
		success_critical = {
			should_print_on_complete = yes
			effect = {
				task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
				save_scope_as = task_contract
				ppr_set_extra_reward_effect = yes
				laamp_rewards_disburse_ordinary_currency_effect = {
					GOLD = scope:task_contract.var:gold_success_critical
					PRESTIGE = task_contract_success_prestige_gain_half_value
					PIETY = task_contract_success_piety_gain_critical_value
					PROVISIONS = 0
					OPINION = task_contract_opinion_excelled_reward_value
					OPINION_TYPE = critically_succeeded_task_contract_opinion
					CONTACT = yes
					CONTACT_HOOK = yes
					EXTRA_REWARD = scope:extra_reward
				}
				task_contract_taker = {
					task_successful_noncrim_contract_count_effect = yes
					if = { limit = { has_pam_dlc_trigger = yes } change_spiritual_fulfillment = medium_spiritual_fulfillment_value }
				}
			}
		}
		failure_standard = {
			positive = no
			should_print_on_complete = yes
			effect = {
				task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
				save_scope_as = task_contract
				save_scope_value_as = { name = extra_reward value = flag:no }
				laamp_rewards_disburse_ordinary_currency_effect = {
					GOLD = 0
					PRESTIGE = 0
					PIETY = task_contract_failure_piety_loss_full_value
					PROVISIONS = task_contract_failure_provisions_gain_minor_value
					OPINION = task_contract_opinion_standard_failure_value
					OPINION_TYPE = failed_task_contract_opinion
					CONTACT = no
					CONTACT_HOOK = no
					EXTRA_REWARD = scope:extra_reward
				}
			}
		}
	}
}
