CK3 DatabaseCrusader Kings III · 1.20.1.2 “Crozier” · unofficial
Silk & Silverout Tue, Nov 17What's free, what needs the DLC, price →

Interaction · Vassal actions

Exact Tribute

No costThe AI weighs it (the answer is partly random)

Request that the recipient send Tribute to you

What you need

You

The character you target

To send it

  • … recently went on a Tribute Mission to you
  • If

    Then

    • can_execute_decision = tribute_mission_decision_mandala

    Else if

    • root.primary_title = title:h_china

    Then

    • can_execute_decision = tribute_mission_decision_china

    Else if

    • root.primary_title = title:h_roman_empire

    Then

    • can_execute_decision = tribute_mission_decision_roman_empire

    Else if

    • root.primary_title = title:h_eastern_roman_empire

    Then

    • can_execute_decision = tribute_mission_decision_eastern_roman_empire

    Else if

    • root.primary_title = title:h_dar_al_islam

    Then

    • can_execute_decision = tribute_mission_decision_dar_al_islam

    Else if

    • root.primary_title = title:h_india

    Then

    • can_execute_decision = tribute_mission_decision_india

    Otherwise

    • Never
  • If

    Then

    Otherwise

  • If

    • Declined requested tribute recently is not scope:actor
    • Requested tribute mission is not scope:actor

    Then

    • … does not have any suitable Tribute to send
  • … has recently refused to perform a Tribute Mission
  • … is already preparing a Tribute Mission
  • Also needed: available (an adult, not in an army, not imprisoned, not incapable) · none of the traits Consumption, Typhus, Bubonic Plague, Smallpox, Measles, Bloody Flux · not busy in an Activity · not planning another Activity

To see it in the menu

  • Is played by the AI

Exact Tribute is a vassal character interaction in Crusader Kings III. The character you target needs: Is available (an adult, not in an army, not imprisoned, not incapable), Has none of the traits: Consumption, Typhus, Bubonic Plague, Smallpox, Measles, Bloody Flux, Busy participating in an Activity and 1 more. The AI weighs it (the answer is partly random). Reasons the AI weighs include Base (-25), You … in an Unstable Cycle (-50), You … not meet Expected Legitimacy (-25) and 6 more. Patch 1.20.1.2, from game/common/character_interactions/00_tributary_interactions.txt.

for a guide, post or blog
Quick answers (2)
What are the requirements for Exact Tribute in CK3?
The character you target: Is available (an adult, not in an army, not imprisoned, not incapable), Has none of the traits: Consumption, Typhus, Bubonic Plague, Smallpox, Measles, Bloody Flux, Busy participating in an Activity and You are already planning another Activity. (patch 1.20.1.2)
How do I get the AI to accept Exact Tribute?
The AI weighs it (the answer is partly random). Its reasons: Base -25, The recipient hold… the …, You … in an Unstable Cycle -50, You … not meet Expected Legitimacy -25, You exceed… Expected Legitimacy +25, The recipient's Boldness, The recipient's Greed, You … the recipient's Rival -30, You … the recipient's Nemesis -100, They belongs to the recipient's Dynasty +10, Suzerain Mandala has Prosperity Decree +15, Your Level of Devotion is … +10, Your Mandala Radiance (max +200), Threat from held Claims, Similar Military Power (current), Relative Military Power, Relative Military Power, Military Power including Allies and Military Power including Allies.

Will they accept?

The AI adds these up and accepts above zero; near zero the answer is partly random (ai_maybe). Reasons in italics are the script's, with no label in the game.

ReasonAmount
Base0
Base
when
-25
The recipient hold… the …
when
varies
You … in an Unstable Cycle
when
  • Highest held Title is at least Hegemony Rank
  • Dynastic Cycle:
    • One of these

      • situation_current_phase = situation_dynastic_cycle_phase_instability
      • or

        situation_current_phase = situation_dynastic_cycle_phase_instability_conquest
-50
You … not meet Expected Legitimacy
when
  • Highest held Title is at least Hegemony Rank
  • legitimacy_level < dynastic_cycle_legitimacy_expectation
  • Dynastic Cycle:
    • NOT = { situation_current_phase = situation_dynastic_cycle_phase_instability }
    • NOT = { situation_current_phase = situation_dynastic_cycle_phase_instability_conquest }
-25
You exceed… Expected Legitimacy
when
  • Highest held Title is at least Hegemony Rank
  • legitimacy_level > dynastic_cycle_legitimacy_expectation
  • Dynastic Cycle:
    • NOT = { situation_current_phase = situation_dynastic_cycle_phase_instability }
    • NOT = { situation_current_phase = situation_dynastic_cycle_phase_instability_conquest }
+25
The recipient's Boldness
when
  • NOT = { ai_boldness = 0 }
varies
The recipient's Greed
when
  • Ai greed more than 0
varies
You … the recipient's Rival
when
  • The character you target:
    • Has you as rival
    • Does not have you as nemesis
-30
You … the recipient's Nemesis
when
  • The character you target: Has you as nemesis
-100
They belongs to the recipient's Dynasty
when
  • The character you target: Is of the same dynasty as you
+10
Suzerain Mandala has Prosperity Decree
when
  • The character you target:
    • Is a Tributary
    • suzerain = { has_realm_law = mandala_decree_prosperity }
+15
Your Level of Devotion is …
when
+10
Your Mandala Radiance (max +200)
when
  • Your capital province:
your mandala radiance value × 2
Their opinion of youvaries
Threat from held Claims
when
  • has_claim_on = scope:title_temp
  • The character you target › Any held title: Title tier at least County
varies
Similar Military Power (current)
when
  • scope:recipient.current_power_ninety_percent_value < scope:actor.military_power
  • scope:recipient.military_power > scope:actor.current_power_ninety_percent_value
varies
Relative Military Power
when
  • scope:recipient.current_power_ninety_percent_value > scope:actor.military_power
varies
Relative Military Power
when
  • scope:recipient.current_power_ninety_percent_value < scope:actor.military_power
varies
Military Power including Allies
when
  • scope:recipient.current_power_ninety_percent_value < scope:actor.military_power
  • scope:recipient.current_power_with_allies_value > scope:actor.current_power_with_allies_value
  • The character you target: Any ally:
varies
Military Power including Allies
when
  • Any ally:
  • scope:recipient.current_power_ninety_percent_value > scope:actor.military_power
  • scope:recipient.current_power_with_allies_value < scope:actor.current_power_with_allies_value
varies
Acceptance (ai_accept) (150 lines of game script)
base = 0
modifier = {
	government_has_flag = government_is_mandala
	add = -25
	desc = base_with_value
}
modifier = {
	scope:actor = {
		highest_held_title_tier >= tier_hegemony
	}
	add = {
		add = 25
		if = {
			limit = {
				OR = {
					NOT = {
						scope:recipient.primary_title = title:h_china
					}
					government_has_flag = government_is_meritocratic
				}
			}
			add = 25
		}
	}
	desc = tributary_interaction_aibehavior_recipient_hegemon_tier_tt
}
modifier = {
	scope:actor = {
		highest_held_title_tier >= tier_hegemony
	}
	situation:dynastic_cycle ?= {
		OR = {
			situation_current_phase = situation_dynastic_cycle_phase_instability
			situation_current_phase = situation_dynastic_cycle_phase_instability_conquest
		}
	}
	add = -50
	desc = tributary_interaction_aibehavior_actor_unstable_cycle_tt
}
modifier = {
	scope:actor = {
		highest_held_title_tier >= tier_hegemony
		legitimacy_level < dynastic_cycle_legitimacy_expectation
	}
	situation:dynastic_cycle ?= {
		NOR = {
			situation_current_phase = situation_dynastic_cycle_phase_instability
			situation_current_phase = situation_dynastic_cycle_phase_instability_conquest
		}
	}
	add = -25
	desc = tributary_interaction_aibehavior_actor_low_legitimacy_tt
}
modifier = {
	scope:actor = {
		highest_held_title_tier >= tier_hegemony
		legitimacy_level > dynastic_cycle_legitimacy_expectation
	}
	situation:dynastic_cycle ?= {
		NOR = {
			situation_current_phase = situation_dynastic_cycle_phase_instability
			situation_current_phase = situation_dynastic_cycle_phase_instability_conquest
		}
	}
	add = 25
	desc = tributary_interaction_aibehavior_actor_high_legitimacy_tt
}
modifier = {
	NOT = {
		ai_boldness = 0
	}
	add = {
		value = ai_boldness
		multiply = -1
		divide = 4
	}
	desc = TRIBUTARY_BOLDNESS_REASON
}
modifier = {
	ai_greed > 0
	add = {
		value = ai_greed
		multiply = -1
		divide = 4
	}
	desc = TRIBUTARY_GREED_REASON
}
modifier = {
	desc = embrace_tributarization_interaction_aibehavior_rival_tt
	trigger = {
		scope:recipient = {
			has_relation_rival = scope:actor
			NOT = {
				has_relation_nemesis = scope:actor
			}
		}
	}
	add = -30
}
modifier = {
	desc = embrace_tributarization_interaction_aibehavior_nemesis_tt
	trigger = {
		scope:recipient = {
			has_relation_nemesis = scope:actor
		}
	}
	add = -100
}
modifier = {
	desc = embrace_tributarization_interaction_aibehavior_dynasty_tt
	trigger = {
		scope:recipient = {
			dynasty = scope:actor.dynasty
		}
	}
	add = 10
}
modifier = {
	desc = is_prosperity_mandala_tributary
	scope:recipient = {
		is_tributary = yes
		suzerain = {
			has_realm_law = mandala_decree_prosperity
		}
	}
	add = 15
}
mandala_devaraja_piety_level_add_weight_modifier = {
	DEVARAJA = scope:actor
}
modifier = {
	scope:actor = {
		has_unruined_mandala_capital_trigger = yes
	}
	add = {
		value = scope:actor.mandala_radiance_value
		multiply = 2
	}
	desc = actor_positive_mandala_radiance
}
opinion_modifier = {
	who = scope:recipient
	opinion_target = scope:actor
	multiplier = 1
}
ai_military_threat_modifier = {
	SENDER = scope:recipient
	RECEIVER = scope:actor
	MULTIPLIER = 1
}

As written in game/common/character_interactions/00_tributary_interactions.txt.

What happens

If they accept

  • If played by a person: Event tribute_mission.9010
  • The character you target:
    • Event tribute_mission.9500 (after requested_tribute_mission_deadline_years years)
    • Depending on yes:
      • When yes is scope:gold: … will bring Gold
      • When yes is scope:herd: … will bring Herd
      • When yes is scope:artifact: … will bring an Artifact as Tribute
      • When yes is scope:concubine: … will bring a Concubine as Tribute
      • When yes is scope:eunuch: … will bring a Eunuch
    • If

      Then

      • execute_decision = tribute_mission_decision_mandala

      Else if

      • root.primary_title = title:h_china

      Then

      • execute_decision = tribute_mission_decision_china

      Else if

      • root.primary_title = title:h_roman_empire

      Then

      • execute_decision = tribute_mission_decision_roman_empire

      Else if

      • root.primary_title = title:h_eastern_roman_empire

      Then

      • execute_decision = tribute_mission_decision_eastern_roman_empire

      Else if

      • root.primary_title = title:h_dar_al_islam

      Then

      • execute_decision = tribute_mission_decision_dar_al_islam

      Else if

      • root.primary_title = title:h_india

      Then

      • execute_decision = tribute_mission_decision_india

If they refuse

Options when sending

  • Request Gold as Tribute
  • Request Herd as Tribute
  • Request an Artifact as Tribute
  • Request a Concubine as Tribute
  • Request a Eunuch as Tribute

Events it fires: tribute_mission.9010, tribute_mission.9500, tribute_mission.9000

• the game's own tooltip text · ◦ our reading of the script line · code the script where neither exists

Who can use it and sees it (is_available, is_shown) (14 lines of game script)
is_shown = scope:recipient = {
	is_ai = yes
}
scope:actor = {
	OR = {
		highest_held_title_tier >= tier_hegemony
		AND = {
			government_has_flag = government_is_mandala
			scope:recipient = {
				is_tributary_of = scope:actor
			}
		}
	}
}

As written in game/common/character_interactions/00_tributary_interactions.txt.

Can be sent when (is_valid…) (117 lines of game script)
scope:recipient = {
	is_available_adult = yes
	custom_tooltip = {
		text = exact_tribute_interaction_recently_tribute_missioned_tt
		NOT = {
			var:tribute_mission_grace ?= scope:actor
		}
	}
	trigger_if = {
		limit = {
			scope:actor = {
				government_has_flag = government_is_mandala
			}
		}
		can_execute_decision = tribute_mission_decision_mandala
	}
	trigger_else_if = {
		limit = {
			scope:actor.primary_title = title:h_china
		}
		can_execute_decision = tribute_mission_decision_china
	}
	trigger_else_if = {
		limit = {
			scope:actor.primary_title = title:h_roman_empire
		}
		can_execute_decision = tribute_mission_decision_roman_empire
	}
	trigger_else_if = {
		limit = {
			scope:actor.primary_title = title:h_eastern_roman_empire
		}
		can_execute_decision = tribute_mission_decision_eastern_roman_empire
	}
	trigger_else_if = {
		limit = {
			scope:actor.primary_title = title:h_dar_al_islam
		}
		can_execute_decision = tribute_mission_decision_dar_al_islam
	}
	trigger_else_if = {
		limit = {
			scope:actor.primary_title = title:h_india
		}
		can_execute_decision = tribute_mission_decision_india
	}
	trigger_else = {
		always = no
	}
	trigger_if = {
		limit = {
			scope:actor = {
				highest_held_title_tier >= tier_hegemony
			}
		}
		scope:recipient = {
			trigger_if = {
				limit = {
					is_tributary_of = scope:actor
				}
				subject_standing < exact_tribute_subject_standing_value
			}
			trigger_else = {
				is_independent_ruler = yes
				highest_held_title_tier < tier_hegemony
				is_tributary = no
				custom_tooltip = {
					text = exact_tribute_interaction_hegemony_not_neighbor_tt
					any_neighboring_realm_with_tributaries_owner = {
						this = scope:actor
					}
				}
			}
		}
	}
	trigger_else = {
		scope:actor = {
			government_has_flag = government_is_mandala
		}
		scope:recipient = {
			is_tributary_of = scope:actor
		}
	}
	trigger_if = {
		limit = {
			NOR = {
				var:declined_requested_tribute_recently ?= scope:actor
				var:requested_tribute_mission ?= scope:actor
			}
		}
		custom_tooltip = {
			text = exact_tribute_interaction_no_tribute_tt
			OR = {
				tribute_mission_decision_generic_trigger = yes
				tribute_mission_decision_concubine_trigger = {
					OVERLORD = scope:actor
				}
				tribute_mission_decision_eunuch_trigger = {
					OVERLORD = scope:actor
				}
			}
		}
	}
	custom_tooltip = {
		text = exact_tribute_interaction_recently_refused_tt
		NOT = {
			var:declined_requested_tribute_recently ?= scope:actor
		}
	}
	custom_tooltip = {
		text = exact_tribute_interaction_already_engaged_tt
		NOR = {
			var:requested_tribute_mission ?= scope:actor
			has_variable = tribute_mission_type
		}
	}
}

As written in game/common/character_interactions/00_tributary_interactions.txt.

Effects (on_send, on_accept, on_decline) (230 lines of game script)
on_accept = scope:actor = {
	if = {
		limit = {
			is_ai = no
		}
		trigger_event = tribute_mission.9010
	}
}
scope:recipient = {
	set_variable = {
		name = requested_tribute_mission
		value = scope:actor
		years = requested_tribute_mission_deadline_years
	}
	trigger_event = {
		id = tribute_mission.9500
		years = requested_tribute_mission_deadline_years
	}
	switch = {
		trigger = yes
		scope:gold ?= {
			set_variable = {
				name = requested_tribute_mission_type_gold
				years = requested_tribute_mission_deadline_years
			}
			custom_tooltip = exact_tribute_interaction_gold_tt
		}
		scope:herd ?= {
			set_variable = {
				name = requested_tribute_mission_type_herd
				years = requested_tribute_mission_deadline_years
			}
			custom_tooltip = exact_tribute_interaction_herd_tt
		}
		scope:artifact ?= {
			set_variable = {
				name = requested_tribute_mission_type_artifact
				years = requested_tribute_mission_deadline_years
			}
			custom_tooltip = exact_tribute_interaction_artifact_tt
			random_character_artifact = {
				limit = {
					is_suitable_artifact_tribute_trigger = yes
				}
				scope:recipient = {
					set_variable = {
						name = predetermined_artifact_tribute
						value = prev
					}
				}
			}
		}
		scope:concubine ?= {
			set_variable = {
				name = requested_tribute_mission_type_concubine
				years = requested_tribute_mission_deadline_years
			}
			custom_tooltip = exact_tribute_interaction_concubine_tt
			every_courtier_or_guest = {
				limit = {
					can_be_offered_as_concubine_to_character_trigger = {
						GIVER = scope:recipient
						CHARACTER = scope:actor
					}
					tribute_mission_is_available_concubine_trigger = yes
				}
				add_to_list = potential_concubine_tribute_list
				random_in_list = {
					list = potential_concubine_tribute_list
					weight = {
						base = 0
						modifier = {
							add = 10
							NOR = {
								is_councillor = yes
								has_any_court_position = yes
							}
						}
						modifier = {
							add = 5
							is_knight = no
						}
						modifier = {
							add = 20
							NOT = {
								exists = inspiration
							}
						}
						modifier = {
							add = 15
							NOT = {
								is_close_or_extended_family_of = scope:recipient
							}
						}
						modifier = {
							add = 20
							NOT = {
								has_relation_friend = scope:recipient
							}
						}
						modifier = {
							add = 25
							NOT = {
								is_child_of = scope:recipient
							}
						}
					}
					scope:recipient = {
						set_variable = {
							name = predetermined_concubine_tribute
							value = prev
						}
					}
				}
			}
		}
		scope:eunuch ?= {
			set_variable = {
				name = requested_tribute_mission_type_eunuch
				years = requested_tribute_mission_deadline_years
			}
			custom_tooltip = exact_tribute_interaction_eunuch_tt
			every_courtier = {
				limit = {
					tribute_mission_is_available_eunuch_trigger = yes
					NAND = {
						rite = {
							rite_has_doctrine = doctrine_theocracy_temporal
						}
						this = scope:actor.cp:councillor_court_chaplain
					}
					has_any_disease_trigger = no
				}
				add_to_list = potential_eunuch_tribute_list
				random_in_list = {
					list = potential_eunuch_tribute_list
					weight = {
						base = 0
						modifier = {
							add = 10
							NOR = {
								is_councillor = yes
								has_any_court_position = yes
							}
						}
						modifier = {
							add = 5
							is_knight = no
						}
						modifier = {
							add = 20
							NOT = {
								exists = inspiration
							}
						}
						modifier = {
							add = 15
							NOT = {
								is_close_or_extended_family_of = scope:recipient
							}
						}
						modifier = {
							add = 20
							NOT = {
								has_relation_friend = scope:recipient
							}
						}
						modifier = {
							add = 25
							NOT = {
								is_child_of = scope:recipient
							}
						}
					}
					scope:recipient = {
						set_variable = {
							name = predetermined_eunuch_tribute
							value = prev
						}
					}
				}
			}
		}
	}
	if = {
		limit = {
			scope:actor = {
				government_has_flag = government_is_mandala
			}
		}
		execute_decision = tribute_mission_decision_mandala
	}
	else_if = {
		limit = {
			scope:actor.primary_title = title:h_china
		}
		execute_decision = tribute_mission_decision_china
	}
	else_if = {
		limit = {
			scope:actor.primary_title = title:h_roman_empire
		}
		execute_decision = tribute_mission_decision_roman_empire
	}
	else_if = {
		limit = {
			scope:actor.primary_title = title:h_eastern_roman_empire
		}
		execute_decision = tribute_mission_decision_eastern_roman_empire
	}
	else_if = {
		limit = {
			scope:actor.primary_title = title:h_dar_al_islam
		}
		execute_decision = tribute_mission_decision_dar_al_islam
	}
	else_if = {
		limit = {
			scope:actor.primary_title = title:h_india
		}
		execute_decision = tribute_mission_decision_india
	}
}
on_decline = scope:recipient = {
	if = {
		limit = {
			has_legitimacy = yes
		}
		add_legitimacy = minor_legitima
# … (cut here; the rest is in the file)

As written in game/common/character_interactions/00_tributary_interactions.txt.

Category
Vassal actions
In the menu
under More…
ID
exact_tribute_interaction

Source: game/common/character_interactions/00_tributary_interactions.txt and the English localisation, Crusader Kings III 1.20.1.2. “You” is the character who sends it (scope:actor, or a puppet acting for you); “the character you target” is the recipient.

Spotted a mistake on this page?