﻿befriend = {
	# Basic Setup
	skill = diplomacy
	desc = befriend_desc_general
	success_desc = "BEFRIEND_SUCCESS_DESC"
	icon = icon_scheme_befriend
	illustration = "gfx/interface/illustrations/event_scenes/corridor.dds"
	category = personal
	target_type = character
	is_secret = no
	is_basic = yes
	uses_resistance = no
	cooldown = { years = 30 }

	# Parameters
	speed_per_skill_point = -2.5
	spymaster_speed_per_skill_point = 0	
	# uses_resistance = no #Unop ck3-tiger Duplicated from above
	base_progress_goal = 365
	base_maximum_success = 95
	minimum_success = 5
	
	# Core Triggers
	allow = {
		can_use_befriend_scheme_trigger = { TARGET = scope:target }
		is_adult = yes
		is_imprisoned = no
		scope:target = {
			is_adult = yes
			is_imprisoned = no
		}
		this != scope:target

		is_below_ai_friend_soft_cap_trigger = yes
		trigger_if = {
			limit = { is_ai = yes }
			scope:target = {
				is_below_ai_friend_soft_cap_trigger = yes
				NOT = {
					any_targeting_scheme = {
						scheme_type = befriend
					}
				}
			}
		}
	}
	valid = {
		is_incapable = no
		scope:target = {
			is_adult = yes
			is_imprisoned = no
			exists = location
		}
		NOR = {
			is_at_war_with = scope:target
			custom_description = {
				text = "befriend_already_lover"
				object = scope:target
				has_relation_lover = scope:target
			}
		}

		#we're already friends
		NOT = {
			custom_description = {
				text = befriend_already_friend
				object = scope:target
				has_relation_friend = scope:target
			}
		}
	}

	odds_prediction = {
		add = base_odds_prediction_target_is_char_value
		add = odds_skill_contribution_diplomacy_value
		add = odds_befriend_scheme_misc_value
		min = 0
	}

	# Base Chances
	base_success_chance = {
		base = 5
		scheme_type_skill_success_chance_modifier = { SKILL = DIPLOMACY }
		#SCHEME OWNER#
		opinion_modifier = {
			desc = SCHEME_BEFRIEND_THEIR_OPINION
			who = scope:target
			opinion_target = scope:owner
			max = 30
			min = -30
			multiplier = 0.75
		}
		#Language
		modifier = {
			add = 4
			desc = YOU_SPEAK_THE_LANGUAGE
			scope:owner = { knows_language_of_culture = scope:target.culture }
		}

		# Countermeasures.
		apply_opportunistic_scheme_success_chance_adjustments_modifier = yes
		
		# Their friend told you what they like
		modifier = {
			add = 15
			desc = "SCHEME_WBANQUET_FRIEND_INSIGHT"
			scope:owner = {
				exists = var:wbanquet_friend_insight_var
				var:wbanquet_friend_insight_var = scope:target
			}
		}
		
		#Owner Traits
		modifier = {
			add = 2
			scope:owner = { has_trait = education_diplomacy_1 }
			desc = "SCHEME_BEFRIEND_MY_EDUCATION"
		}
		modifier = {
			add = 4
			scope:owner = { has_trait = education_diplomacy_2 }
			desc = "SCHEME_BEFRIEND_MY_EDUCATION"
		}
		modifier = {
			add = 6
			scope:owner = { has_trait = education_diplomacy_3 }
			desc = "SCHEME_BEFRIEND_MY_EDUCATION"
		}
		modifier = {
			add = 8
			scope:owner = { has_trait = education_diplomacy_4 }
			desc = "SCHEME_BEFRIEND_MY_EDUCATION"
		}
		modifier = {
			add = 10
			scope:owner = { has_trait = education_diplomacy_5 }
			desc = "SCHEME_BEFRIEND_MY_EDUCATION"
		}
		modifier = {
			scope:owner = {
				OR = {
					has_trait = diplomat
					has_trait = family_first
					has_trait = august
				}
			}
			add = {
				value = 0
				if = {
					limit = {
						scope:owner = { has_trait = diplomat }
					}
					add = 4
				}
				if = {
					limit = {
						scope:owner = { has_trait = family_first }
					}
					add = 8
				}
				if = {
					limit = {
						scope:owner = { has_trait = august }
					}
					add = 12
				}
			}
			desc = "SCHEME_BEFRIEND_MY_LIFESTYLE"
		}
		modifier = {
			add = 4
			scope:owner = {
				has_trait = lifestyle_reveler
				has_trait_xp = {
					trait = lifestyle_reveler
					value < 50
				}
			}
			desc = "SCHEME_BEFRIEND_MY_REVELRY"
		}
		modifier = {
			add = 6
			scope:owner = {
				has_trait = lifestyle_reveler
				has_trait_xp = {
					trait = lifestyle_reveler
					value >= 50
				}
				has_trait_xp = {
					trait = lifestyle_reveler
					value < 100
				}
			}
			desc = "SCHEME_BEFRIEND_MY_REVELRY"
		}
		modifier = {
			add = 8
			scope:owner = {
				has_trait = lifestyle_reveler
				has_trait_xp = {
					trait = lifestyle_reveler
					value = 100
				}
			}
			desc = "SCHEME_BEFRIEND_MY_REVELRY"
		}
		modifier = {
			add = -5
			scope:owner = { has_trait = shy }
			desc = "SCHEME_BEFRIEND_MY_SHYNESS"
		}
		modifier = {
			add = 5
			scope:owner = { has_trait = gregarious }
			desc = "SCHEME_BEFRIEND_MY_GREGARIOUSNESS"
		}
		modifier = {
			add = -4
			scope:owner = { has_trait = callous }
			desc = "SCHEME_BEFRIEND_MY_CALLOUSNESS"
		}
		#Target Traits
		modifier = {
			add = -5
			scope:target = { has_trait = shy }
			desc = "SCHEME_BEFRIEND_THEIR_SHYNESS"
		}
		modifier = {
			add = 5
			scope:target = { has_trait = gregarious }
			desc = "SCHEME_BEFRIEND_THEIR_GREGARIOUSNESS"
		}
		modifier = {
			add = -4
			scope:target = { has_trait = callous }
			desc = "SCHEME_BEFRIEND_THEIR_CALLOUSNESS"
		}
		modifier = {
			add = -4
			scope:target = { has_trait = paranoid }
			desc = "SCHEME_BEFRIEND_THEIR_PARANOIA"
		}
		modifier = {
			add = 4
			scope:target = { has_trait = trusting }
			desc = "SCHEME_BEFRIEND_THEIR_TRUST"
		}
		modifier = {
			add = 4
			scope:target = {
				has_trait = lifestyle_reveler
				has_trait_xp = {
					trait = lifestyle_reveler
					value < 50
				}
			}
			desc = "SCHEME_BEFRIEND_MY_REVELRY"
		}
		modifier = {
			add = 6
			scope:target = {
				has_trait = lifestyle_reveler
				has_trait_xp = {
					trait = lifestyle_reveler
					value >= 50
				}
				has_trait_xp = {
					trait = lifestyle_reveler
					value < 100
				}
			}
			desc = "SCHEME_BEFRIEND_MY_REVELRY"
		}
		modifier = {
			add = 8
			scope:target = {
				has_trait = lifestyle_reveler
				has_trait_xp = {
					trait = lifestyle_reveler
					value = 100
				}
			}
			desc = "SCHEME_BEFRIEND_MY_REVELRY"
		}
		modifier = {
			add = scope:target.var:recipient_stubborness_scheme
			scope:target = {
				has_trait = stubborn
				exists = var:recipient_stubborness_scheme
			}
			desc = "SCHEME_BEFRIEND_THEIR_STUBBORNESS"
		}
		modifier = {
			add = scope:target.var:recipient_fickleness_scheme
			scope:target = {
				has_trait = fickle
				exists = var:recipient_fickleness_scheme
				var:recipient_fickleness_scheme != 0
			}
			desc = "SCHEME_BEFRIEND_THEIR_FICKLENESS"
		}
		
		#Trait similarity to owner
		compatibility_modifier = {
			who = scope:target
			compatibility_target = scope:owner
			min = -50
			max = 50
			multiplier = 2
		}
		
		#Rank tier difference (landed target/target whose liege doesn't care)
		modifier = { #3 or more higher rank
			trigger = { personal_scheme_should_not_evaluate_tier_differences_trigger = yes }
			add = 50
			desc = "HIGHER_RANK_THAN_SCHEME_TARGET"
			scope:target = {
				personal_scheme_success_compare_target_liege_tier_trigger = no
				NOT = {
					is_theocratic_lessee = yes
				}
			}
			scope:owner = {
				tier_difference = {
					target = scope:target
					value >= 3
				}
			}
		}
		modifier = { #2 higher rank
			trigger = { personal_scheme_should_not_evaluate_tier_differences_trigger = yes }
			add = 25
			desc = "HIGHER_RANK_THAN_SCHEME_TARGET"
			scope:target = {
				personal_scheme_success_compare_target_liege_tier_trigger = no
				NOT = {
					is_theocratic_lessee = yes
				}
			}
			scope:owner = {
				tier_difference = {
					target = scope:target
					value = 2
				}
			}
		}
		modifier = { #1 higher rank
			trigger = { personal_scheme_should_not_evaluate_tier_differences_trigger = yes }
			add = 10
			desc = "HIGHER_RANK_THAN_SCHEME_TARGET"
			scope:target = {
				personal_scheme_success_compare_target_liege_tier_trigger = no
				NOT = {
					is_theocratic_lessee = yes
				}
			}
			scope:owner = {
				tier_difference = {
					target = scope:target
					value = 1
				}
			}
		}
		modifier = { #1 lower rank
			trigger = { personal_scheme_should_not_evaluate_tier_differences_trigger = yes }
			add = -10
			desc = "LOWER_RANK_THAN_SCHEME_TARGET"
			scope:target = {
				personal_scheme_success_compare_target_liege_tier_trigger = no
			}
			scope:owner = {
				tier_difference = {
					target = scope:target
					value = -1
				}
			}
		}
		modifier = { #2 lower rank
			trigger = { personal_scheme_should_not_evaluate_tier_differences_trigger = yes }
			add = -25
			desc = "LOWER_RANK_THAN_SCHEME_TARGET"
			scope:target = {
				personal_scheme_success_compare_target_liege_tier_trigger = no
			}
			scope:owner = {
				tier_difference = {
					target = scope:target
					value = -2
				}
			}
		}
		modifier = { #3 or less lower rank
			trigger = { personal_scheme_should_not_evaluate_tier_differences_trigger = yes }
			add = -50
			desc = "LOWER_RANK_THAN_SCHEME_TARGET"
			scope:target = {
				personal_scheme_success_compare_target_liege_tier_trigger = no
			}
			scope:owner = {
				tier_difference = {
					target = scope:target
					value <= -3
				}
			}
		}
		#Rank tier difference (unlanded character)
		modifier = { #3 or more higher rank
			trigger = { personal_scheme_should_not_evaluate_tier_differences_trigger = yes }
			add = 15
			desc = "HIGHER_RANK_THAN_SCHEME_TARGET_LIEGE"
			scope:target = {
				personal_scheme_success_compare_target_liege_tier_trigger = yes
				NOT = {
					is_theocratic_lessee = yes
				}
			}
			scope:owner = {
				tier_difference = {
					target = scope:target.liege
					value >= 3
				}
			}
		}
		modifier = { #2 higher rank
			trigger = { personal_scheme_should_not_evaluate_tier_differences_trigger = yes }
			add = 10
			desc = "HIGHER_RANK_THAN_SCHEME_TARGET_LIEGE"
			scope:target = {
				personal_scheme_success_compare_target_liege_tier_trigger = yes
				NOT = {
					is_theocratic_lessee = yes
				}
			}
			scope:owner = {
				tier_difference = {
					target = scope:target.liege
					value = 2
				}
			}
		}
		modifier = { #1 higher rank
			trigger = { personal_scheme_should_not_evaluate_tier_differences_trigger = yes }
			add = 5
			desc = "HIGHER_RANK_THAN_SCHEME_TARGET_LIEGE"
			scope:target = {
				personal_scheme_success_compare_target_liege_tier_trigger = yes
				NOT = {
					is_theocratic_lessee = yes
				}
			}
			scope:owner = {
				tier_difference = {
					target = scope:target.liege
					value = 1
				}
			}
		}
		modifier = { #1 lower rank
			trigger = { personal_scheme_should_not_evaluate_tier_differences_trigger = yes }
			add = -5
			desc = "LOWER_RANK_THAN_SCHEME_TARGET_LIEGE"
			scope:target = {
				personal_scheme_success_compare_target_liege_tier_trigger = yes
			}
			scope:owner = {
				tier_difference = {
					target = scope:target.liege
					value = -1
				}
			}
		}
		modifier = { #2 lower rank
			trigger = { personal_scheme_should_not_evaluate_tier_differences_trigger = yes }
			add = -10
			desc = "LOWER_RANK_THAN_SCHEME_TARGET_LIEGE"
			scope:target = {
				personal_scheme_success_compare_target_liege_tier_trigger = yes
			}
			scope:owner = {
				tier_difference = {
					target = scope:target.liege
					value = -2
				}
			}
		}
		modifier = { #3 or less lower rank
			trigger = { personal_scheme_should_not_evaluate_tier_differences_trigger = yes }
			add = -15
			desc = "LOWER_RANK_THAN_SCHEME_TARGET_LIEGE"
			scope:target = {
				personal_scheme_success_compare_target_liege_tier_trigger = yes
			}
			scope:owner = {
				tier_difference = {
					target = scope:target.liege
					value <= -3
				}
			}
		}
		#Extra rank bonus/penalty if target is arrogant/ambitious
		modifier = {
			desc = SCHEME_SOCIAL_CLIMBER_RANK_BONUS
			add = 10
			scope:target = {
				OR = {
					has_trait = arrogant
					has_trait = ambitious
					has_trait = greedy
				}
				NOT = {
					is_theocratic_lessee = yes
				}
			}
			OR = {
				AND = {
					scope:target = { personal_scheme_success_compare_target_liege_tier_trigger = yes }
					scope:owner.highest_held_title_tier > scope:target.liege.highest_held_title_tier
				}
				AND = {
					scope:target = { personal_scheme_success_compare_target_liege_tier_trigger = no }
					scope:owner.highest_held_title_tier > scope:target.highest_held_title_tier
				}
			}
		}
		modifier = {
			desc = SCHEME_SOCIAL_CLIMBER_RANK_PENALTY
			add = -10
			scope:target = {
				OR = {
					has_trait = arrogant
					has_trait = ambitious
					has_trait = greedy
				}
			}
			OR = {
				AND = {
					scope:target = { personal_scheme_success_compare_target_liege_tier_trigger = yes }
					scope:owner.highest_held_title_tier < scope:target.liege.highest_held_title_tier
				}
				AND = {
					scope:target = { personal_scheme_success_compare_target_liege_tier_trigger = no }
					scope:owner.highest_held_title_tier < scope:target.highest_held_title_tier
				}
			}
		}
		# Diarchs are better at schemes within their liege's realm
		diarch_scheming_within_realm_bonus_modifier = yes
		#Religious Heads
		modifier = {
			add = -50
			desc = "SCHEME_VS_RELIGIOUS_HEAD"
			scope:target = {
				faith = scope:owner.faith
				faith = {
					religious_head ?= {
			 			this = scope:target
			 		}
				}
			}
		}
		modifier = { # Realm Priests care about Piety Level
			add = {
				add = 5
				multiply = scope:owner.piety_level
			}
			desc = "I_AM_PIOUS"
			scope:owner.piety_level > 1
			scope:target = {
				is_theocratic_lessee = yes
			}
		}
		modifier = { # Realm Priests care about Piety Level
			add = -50
			desc = "I_AM_PIOUS"
			scope:owner.piety_level < 0
			scope:target = {
				is_theocratic_lessee = yes
			}
		}

		# Dynasty Kin Personal Scheme Success Chance on Dynasty Perk
		modifier = {
			add = kin_legacy_4_success_chance
			desc = KIN_LEGACY_DESC
			exists = scope:owner.dynasty
			scope:owner.dynasty = {
				has_dynasty_perk = kin_legacy_4
			}
			scope:target.dynasty = scope:owner.dynasty
		}

		# House Personal Scheme Success Chance on Cultural Parameter
		modifier = {
			add = cultural_house_personal_scheme_success_chance
			desc = KIN_PARAMETER_DESC
			exists = scope:owner.house
			exists = scope:target.house
			scope:owner.culture = {
				has_cultural_parameter = cultural_house_personal_scheme_success_chance
			}
			scope:target.house = scope:owner.house
		}

		#Rival penalty
		modifier = {
			add = -20
			desc = sway_my_rival
			scope:owner = { has_relation_rival = scope:target }
		}

		#Family Feud
		house_feud_sway_scheme_success_modifier = yes

		# Modifiers
		modifier = {
			scope:owner = { has_character_modifier = poet_for_diplo_schemes_modifier }
			desc = poet_for_diplo_schemes_modifier
			add = 15
		}

		#Mandala Serenity Aspect
		modifier = {
			scope:owner = { 
				house ?= { has_house_head_parameter = improved_befriend_schemes }
				is_house_head = yes
			}
			desc = has_aspect_of_serenity #Unop Use the loc key, not the raw parameter token
			add = 25
		}

		# Personal Scheme Shared
		personal_scheme_base_success_chance_modifiers = yes
	}

	# On Actions
	on_start = {
		set_variable = {
			name = apply_countermeasures
			value = flag:opportunistic
		}
	}
	on_phase_completed = {
		# Grab our scopes.
		save_scope_as = scheme
		scheme_target_character = { save_scope_as = target }
		scheme_owner = { save_scope_as = owner }
		#Outcome system by Mathilda Bjarnehed
		scope:scheme.scheme_owner = {
			trigger_event = befriend_outcome.0001 #Hidden event rolling success/failure, discover/no discovery and sending on_actions or player choice event
		}
	}
	on_invalidated = {
		save_scope_as = scheme
		scheme_target_character = {
			save_scope_as = target
		}
		scheme_owner = {
			save_scope_as = owner
		}
		scope:owner = {
			# Invalidation due to war.
			if = {
				limit = { is_at_war_with = scope:target }
				trigger_event = befriend_ongoing.0903
			}

			if = {
				limit = {
					scope:target = { is_imprisoned = yes }
				}
				trigger_event = {
					id = befriend_ongoing.0902
					days = 2
				}
			}

			# Invalidation due to death
			if = {
				limit = {
					scope:target = { is_alive = no }
					NOT = { block_death_event_trigger = { DEAD = scope:target } }
				}
				trigger_event = befriend_ongoing.0901
			}
		}
		if = { #Already friends
			limit = {
				scope:owner = { has_relation_friend = scope:target }
				NOT = { scheme_progress = scope:scheme.scheme_phase_duration }
			}
			scope:target = { save_scope_as = recipient } #For the message
			scope:owner = {
				send_interface_toast = {
					type = event_toast_effect_neutral
					title = befriend_invalidated_title
					left_icon = scope:target
					custom_tooltip = befriend_already_friend
				}
			}
		}
		if = {
			limit = {
				scope:target = { 
					NOT = { in_diplomatic_range = scope:owner } 
				}
			}
			scope:owner = {
				send_interface_toast = {
					type = event_generic_neutral
					title = befriend_invalidated_title
					left_icon = scope:target
					custom_tooltip = befriend_invalid
				}
			}
		}
	}
	on_monthly = {
		#Unop ck3-tiger Save scopes as they are needed by player_target_available_for_personal_scheme_ongoing_events_trigger
		save_scope_as = scheme
		scheme_owner = { save_scope_as = owner }
		scheme_target_character = { save_scope_as = target }
		#Fickleness
		if = {
			limit = {
				scheme_target_character = {
					has_trait = fickle
					OR = {
						NOT = { exists = var:recipient_fickleness_scheme }
						var:recipient_fickleness_scheme >= 30 #Keep within reason.
						var:recipient_fickleness_scheme <= -30
					}
				}
			}
			scheme_target_character = {
				set_variable = {
					name = recipient_fickleness_scheme
					value = 10
				}
			}
		}
		if = {
			limit = {
				scheme_target_character = {
					has_trait = fickle
					exists = var:recipient_fickleness_scheme
				}
			}
			scheme_target_character = {
				random_list = {
					70 = {
					}
					15 = {
						change_variable = {
							name = recipient_fickleness_scheme
							add = -5
						}
					}
					15 = {
						change_variable = {
							name = recipient_fickleness_scheme
							add = 5
						}
					}
					25 = {
						trigger = {
							var:recipient_fickleness_scheme >= 15
						}
						change_variable = {
							name = recipient_fickleness_scheme
							add = -10
						}
					}
					25 = {
						trigger = {
							var:recipient_fickleness_scheme <= -15
						}
						change_variable = {
							name = recipient_fickleness_scheme
							add = 10
						}
					}
				}
			}
		}
		#Sending an ongoing event
		if = {
			limit = {
				scheme_owner = { is_available = yes }
				scheme_target_character = { is_available = yes }
				player_target_available_for_personal_scheme_ongoing_events_trigger = {
					OWNER = scope:owner
					TARGET = scope:target
				}
			}
			# Separate event sets for "Standard" and for a target that dislikes you strongly.
			if = {
				limit = {
					scheme_target_character = {
						has_relation_rival = scope:owner
					}
				}
				scheme_owner = {
					trigger_event = { on_action = befriend_rival_ongoing }
				}
			}
			else_if = {
				limit = {
					scheme_target_character = {
						opinion = {
							target = scope:owner
							value >= -20
						}
					}
				}
				scheme_owner = {
					trigger_event = { on_action = befriend_ongoing }
				}
			}
			else = {
				scheme_owner = {
					trigger_event = { on_action = befriend_dislike_ongoing }
				}
			}
		}
	}
}
