﻿# Pilgrims and Preachers - helper effects for events/ppr_preaching_events.txt
# Saved scopes: see common/scripted_triggers/ppr_preaching_event_triggers.txt

######################################################################
# The roll (called from ppr_on_preaching_completion, in scope:barterer)
######################################################################

# Barterer scope. One sermon, at most one event; then the county rests for five years.
#   Friendly county: 40% a positive / choice event (55 in 103 with a Wandering Preacher in
#   command, scope:preach_holy_commander), 12% a risk event.
#   Hostile county:  30% a hostile-land event.
ppr_preaching_roll_event_effect = {
	if = {
		limit = {
			is_ai = no
			NOT = { has_character_flag = ppr_preaching_event_cooldown }
			scope:preach_county = {
				NOT = { has_variable = ppr_recently_preached }
			}
			ppr_preaching_event_base_trigger = yes
		}
		if = {
			limit = { ppr_preaching_county_hostile_trigger = yes }
			random = {
				chance = 30
				random_list = {
					75 = {
						trigger = { ppr_preaching_hostile_land_valid_trigger = yes }
						ppr_preaching_set_event_cooldown_effect = yes
						trigger_event = { id = ppr_preaching.0200 days = { 2 4 } }
					}
					25 = {
						trigger = { ppr_preaching_hostile_land_valid_trigger = yes }
						ppr_preaching_set_event_cooldown_effect = yes
						trigger_event = { id = ppr_preaching.0210 days = { 2 4 } }
					}
				}
			}
		}
		else = {
			random_list = {
				40 = {
					# A Wandering Preacher in command (common/traits/ppr_traits.txt)
					modifier = {
						add = 15
						exists = scope:preach_holy_commander
					}
					ppr_preaching_pick_positive_event_effect = yes
				}
				12 = { ppr_preaching_pick_risk_event_effect = yes }
				48 = { }
			}
		}
	}
	scope:preach_county = {
		set_variable = {
			name = ppr_recently_preached
			value = yes
			years = 5
		}
	}
}

# Barterer scope. Weighted pick among the positive events that are valid here.
ppr_preaching_pick_positive_event_effect = {
	random_list = {
		15 = {
			trigger = { ppr_preaching_lord_listens_valid_trigger = yes }
			ppr_preaching_set_event_cooldown_effect = yes
			trigger_event = { id = ppr_preaching.0001 days = { 2 4 } }
		}
		20 = {
			trigger = { ppr_preaching_crowd_converts_valid_trigger = yes }
			ppr_preaching_set_event_cooldown_effect = yes
			trigger_event = { id = ppr_preaching.0010 days = { 2 4 } }
		}
		15 = {
			trigger = { ppr_preaching_fathers_rite_valid_trigger = yes }
			ppr_preaching_set_event_cooldown_effect = yes
			trigger_event = { id = ppr_preaching.0020 days = { 2 4 } }
		}
		20 = {
			trigger = { ppr_preaching_tenets_valid_trigger = yes }
			ppr_preaching_set_event_cooldown_effect = yes
			trigger_event = { id = ppr_preaching.0030 days = { 2 4 } }
		}
		15 = {
			trigger = { ppr_preaching_vocation_valid_trigger = yes }
			ppr_preaching_set_event_cooldown_effect = yes
			trigger_event = { id = ppr_preaching.0040 days = { 2 4 } }
		}
		15 = {
			trigger = { ppr_preaching_friendly_land_valid_trigger = yes }
			ppr_preaching_set_event_cooldown_effect = yes
			trigger_event = { id = ppr_preaching.0050 days = { 2 4 } }
		}
	}
}

# Barterer scope. Weighted pick among the risk events.
ppr_preaching_pick_risk_event_effect = {
	random_list = {
		35 = {
			trigger = { ppr_preaching_friendly_land_valid_trigger = yes }
			ppr_preaching_set_event_cooldown_effect = yes
			trigger_event = { id = ppr_preaching.0100 days = { 2 4 } }
		}
		35 = {
			trigger = { ppr_preaching_friendly_land_valid_trigger = yes }
			ppr_preaching_set_event_cooldown_effect = yes
			trigger_event = { id = ppr_preaching.0110 days = { 2 4 } }
		}
		30 = {
			trigger = { ppr_preaching_friendly_land_valid_trigger = yes }
			ppr_preaching_set_event_cooldown_effect = yes
			trigger_event = { id = ppr_preaching.0120 days = { 2 4 } }
		}
	}
}

# Barterer scope. Several missions may preach at once: one event every six months at most.
ppr_preaching_set_event_cooldown_effect = {
	add_character_flag = {
		flag = ppr_preaching_event_cooldown
		days = 180
	}
}

######################################################################
# Shared event helpers (root = the preacher)
######################################################################

# Saves the county's faith and rite for the event texts.
ppr_preaching_event_setup_effect = {
	scope:preach_county.faith = { save_scope_as = preach_county_faith }
	scope:preach_county.rite = { save_scope_as = preach_county_rite }
}

# Converts the (AI) holder to the preacher's faith and rite, as the vanilla adventurer
# conversion interaction does (convert_to_religion_adventurer_interaction).
ppr_preaching_convert_holder_effect = {
	scope:preach_holder = {
		hidden_effect = {
			faith = { save_scope_as = old_faith }
			rite = { save_scope_as = old_rite }
		}
		set_character_faith = scope:preacher.faith
		set_character_rite = scope:preacher.rite
		# Each soul won strengthens the faith (vanilla fervor, shown in its breakdown).
		scope:preacher.faith = {
			change_fervor = {
				value = ppr_preaching_fervor_lord_value
				desc = ppr_fervor_gain_preaching_lord
			}
		}
		trigger_event = {
			on_action = on_faith_conversion
		}
		hidden_effect = { add_character_flag = ai_will_not_convert }
		add_opinion = {
			modifier = showed_me_the_light_opinion
			target = scope:preacher
			opinion = 40
		}
	}
}

# The Lord Listens: the holder is won over. An AI converts at once; a player is asked by letter.
ppr_preaching_lord_listens_success_effect = {
	if = {
		limit = {
			# An AI whose realm is not ruled by another player
			scope:preach_holder = {
				is_ai = yes
				top_liege = { is_ai = yes }
			}
		}
		ppr_preaching_convert_holder_effect = yes
		add_piety = major_piety_gain
		add_prestige = medium_prestige_gain
		if = {
			limit = { has_pam_dlc_trigger = yes }
			change_spiritual_fulfillment = medium_spiritual_fulfillment_value
		}
	}
	else_if = {
		limit = {
			scope:preach_holder = { is_ai = no }
		}
		custom_tooltip = ppr_preaching.0001.letter_tt
		add_piety = minor_piety_gain
		hidden_effect = {
			scope:preach_holder = { trigger_event = ppr_preaching.0002 }
		}
	}
	else = {
		# AI vassal of another player: their liege's lands are not ours to change
		custom_tooltip = ppr_preaching.0001.liege_tt
		add_piety = minor_piety_gain
	}
}

# The Lord Listens: the holder is unmoved.
ppr_preaching_lord_listens_failure_effect = {
	add_prestige = minor_prestige_loss
	scope:preach_holder = {
		add_opinion = {
			modifier = annoyed_opinion
			target = scope:preacher
			opinion = -15
		}
	}
}

# Leaves (or renews) the Seeds of Faith in the county.
ppr_preaching_sow_seeds_effect = {
	scope:preach_county = {
		if = {
			limit = { has_county_modifier = ppr_seeds_of_faith_modifier }
			remove_county_modifier = ppr_seeds_of_faith_modifier
		}
		add_county_modifier = {
			modifier = ppr_seeds_of_faith_modifier
			years = 10
		}
	}
}

# The Crowd Converts: a successful sermon. Only an AI holder's county can change faith:
# 10% base, +20% after earlier Seeds of Faith, +10% if the crowd was stirred up
# (scope:ppr_stirred_crowd saved by option b).
ppr_preaching_crowd_success_effect = {
	add_piety = medium_piety_gain
	if = {
		limit = { has_pam_dlc_trigger = yes }
		change_spiritual_fulfillment = minor_spiritual_fulfillment_value
	}
	if = {
		limit = { ppr_preaching_county_held_by_ai_trigger = yes }
		random_list = {
			10 = {
				modifier = {
					add = 20
					scope:preach_county = { has_county_modifier = ppr_seeds_of_faith_modifier }
				}
				modifier = {
					add = 10
					exists = scope:ppr_stirred_crowd
				}
				# A Wandering Preacher led the missionaries
				modifier = {
					add = 10
					exists = scope:preach_holy_commander
				}
				desc = ppr_preaching.0010.converted
				scope:preach_county = {
					if = {
						limit = { has_county_modifier = ppr_seeds_of_faith_modifier }
						remove_county_modifier = ppr_seeds_of_faith_modifier
					}
					set_county_faith = scope:preacher.faith
					scope:preacher.faith = {
						change_fervor = {
							value = ppr_preaching_fervor_county_value
							desc = ppr_fervor_gain_preaching_county
						}
					}
					set_county_rite = scope:preacher.rite
				}
				add_prestige = medium_prestige_gain
			}
			90 = {
				desc = ppr_preaching.0010.seeds
				ppr_preaching_sow_seeds_effect = yes
			}
		}
	}
	else = {
		ppr_preaching_sow_seeds_effect = yes
	}
}

# Our Fathers' Rite: the people take up the preacher's rite (AI holder only), else Seeds of Faith.
ppr_preaching_rite_success_effect = {
	add_piety = minor_piety_gain
	if = {
		limit = { ppr_preaching_county_held_by_ai_trigger = yes }
		random_list = {
			25 = {
				modifier = {
					add = 20
					scope:preach_county = { has_county_modifier = ppr_seeds_of_faith_modifier }
				}
				desc = ppr_preaching.0020.converted
				scope:preach_county = {
					if = {
						limit = { has_county_modifier = ppr_seeds_of_faith_modifier }
						remove_county_modifier = ppr_seeds_of_faith_modifier
					}
					set_county_rite = scope:preacher.rite
				}
				add_prestige = minor_prestige_gain
			}
			75 = {
				desc = ppr_preaching.0010.seeds
				ppr_preaching_sow_seeds_effect = yes
			}
		}
	}
	else = {
		ppr_preaching_sow_seeds_effect = yes
	}
}

# Risk events: harm to the county only when an AI holds it (a player's lands are never
# damaged by another player's choice); the holder's opinion suffers either way.
ppr_preaching_county_control_loss_effect = {
	if = {
		limit = { ppr_preaching_county_held_by_ai_trigger = yes }
		scope:preach_county = { change_county_control = $VALUE$ }
	}
}

ppr_preaching_trample_fields_effect = {
	if = {
		limit = { ppr_preaching_county_held_by_ai_trigger = yes }
		scope:preach_county = {
			change_development_progress_with_overflow = ppr_preaching_trampled_fields_value
		}
	}
}

# $OPINION$: a negative opinion value for annoyed_opinion.
ppr_preaching_annoy_holder_effect = {
	if = {
		limit = { ppr_preaching_holder_present_trigger = yes }
		scope:preach_holder = {
			add_opinion = {
				modifier = annoyed_opinion
				target = scope:preacher
				opinion = $OPINION$
			}
		}
	}
}

ppr_preaching_please_holder_effect = {
	if = {
		limit = { ppr_preaching_holder_present_trigger = yes }
		scope:preach_holder = {
			add_opinion = {
				modifier = ppr_blessed_my_lands_opinion
				target = scope:preacher
			}
		}
	}
}

# Tenets: $CHANGE$ popularity for the tenet saved as scope:ppr_preach_tenet.
ppr_preaching_spread_tenet_effect = {
	pam_tenet_popularity_on_evangelized_tenet_effect = {
		TENET = scope:ppr_preach_tenet
		CHANGE = $CHANGE$
	}
}

# A character created by an event who is not taken along goes quietly home.
ppr_preaching_dismiss_character_effect = {
	$CHARACTER$ = { silent_disappearance_effect = yes }
}
