Various Minor Fixes Relating to herder in Peasant Gov

This commit is contained in:
Fishedotjpg 2026-03-14 22:10:57 +00:00
parent e09b8834c9
commit 552de94e9f
23 changed files with 49535 additions and 38 deletions

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,357 @@
# Ask to Promote your Legend
ce1_ask_to_promote_legend_interaction = {
icon = icon_contract_modification_single
category = interaction_category_diplomacy
popup_on_receive = yes
pause_on_receive = yes
can_send_despite_rejection = yes
ai_maybe = yes
interface_priority = 5
desc = ce1_ask_to_promote_legend_interaction_desc
greeting = positive
notification_text = PROMOTE_LEGEND_NOTIFICATION
is_shown = {
scope:actor.promoted_legend.legend_owner ?= scope:actor
scope:actor != scope:recipient
scope:recipient = {
is_landed = yes
age >= 12
is_physically_able = yes
NOT = { government_has_flag = government_is_true_herder }
}
}
is_valid_showing_failures_only = {
scope:recipient = {
custom_tooltip = {
text = recipient_already_promoting_legend_tt
NOT = { exists = promoted_legend }
}
}
custom_tooltip = {
text = recipient_close_or_neighbor_tt
OR = {
scope:recipient.dynasty = scope:actor.dynasty
scope:recipient = { knows_language_of_culture = scope:actor.culture }
scope:actor = {
has_friendly_relationship_with_character_trigger = { CHARACTER = scope:recipient }
}
scope:recipient = {
any_character_to_title_neighboring_county = {
any_county_province = {
any_province_legend = {
this = scope:actor.promoted_legend
}
}
}
}
}
}
}
cooldown_against_recipient = { years = 5 }
ai_min_reply_days = 2
ai_max_reply_days = 7
ai_accept = {
base = -10
## Tier
modifier = {
add = -5
scope:recipient.primary_title = {
tier = 2
}
desc = TIER_REASON_COUNT
}
modifier = {
add = -10
scope:recipient.primary_title = {
tier = 3
}
desc = TIER_REASON_DUKE
}
modifier = {
add = -20
scope:recipient.primary_title = {
tier = 4
}
desc = TIER_REASON_KING
}
modifier = {
add = -30
scope:recipient.primary_title = {
tier = 5
}
desc = TIER_REASON_EMPEROR
}
## Legend
# How cool is the legend?
modifier = {
add = 10
desc = REASON_ILLUSTRIOUS_LEGEND
scope:actor = {
promoted_legend = {
legend_quality = illustrious
}
}
}
modifier = {
add = 20
desc = REASON_MYTHICAL_LEGEND
scope:actor = {
promoted_legend = {
legend_quality = mythical
}
}
}
# Are you using a hook?
modifier = {
trigger = {
scope:hook ?= yes
}
add = 100
desc = LEGEND_HOOK_USED
}
# Are you using Gold?
modifier = {
trigger = {
scope:gold_cost ?= yes
}
add = 40
desc = TRADE_GOLD_FOR_BETTER_AI_ACCEPTANCE_TT
}
## Opinion
# Do they like you?
opinion_modifier = {
who = scope:recipient
opinion_target = scope:actor
multiplier = 1
desc = AI_OPINION_REASON
}
## Personality
# Are they ambitious?
modifier = {
desc = DEMAND_SUBMISSION_RECIPIENT_IS_AMBITIOUS #re-using these
add = -15
scope:recipient = {
has_trait = ambitious
}
}
# Are they content?
modifier = {
desc = DEMAND_SUBMISSION_RECIPIENT_IS_CONTENT
add = 5
scope:recipient = { has_trait = content }
}
# Are they stubborn?
modifier = {
desc = DEMAND_SUBMISSION_RECIPIENT_IS_STUBBORN
add = -10
scope:recipient = { has_trait = stubborn }
}
# Are they arrogant?
modifier = {
desc = DEMAND_SUBMISSION_RECIPIENT_IS_ARROGANT
add = -10
scope:recipient = { has_trait = arrogant }
}
# Are they humble?
modifier = {
desc = DEMAND_SUBMISSION_RECIPIENT_IS_HUMBLE
add = 10
scope:recipient = { has_trait = humble }
}
# Are they trusting?
modifier = {
desc = DEMAND_SUBMISSION_RECIPIENT_IS_TRUSTING
add = 15
scope:recipient = { has_trait = trusting }
}
# Are they paranoid?
modifier = {
desc = DEMAND_SUBMISSION_RECIPIENT_IS_PARANOID
add = -10
scope:recipient = { has_trait = paranoid }
}
## Dread
modifier = {
add = intimidated_halved_reason_value
scope:recipient = {
has_dread_level_towards = {
target = scope:actor
level = 1
}
}
desc = INTIMIDATED_REASON
}
modifier = {
add = cowed_halved_reason_value
scope:recipient = {
has_dread_level_towards = {
target = scope:actor
level = 2
}
}
desc = COWED_REASON
}
## War
modifier = {
add = -50
scope:recipient = {
is_at_war = yes
}
desc = HOSTAGE_AT_WAR_REASON
}
## Low Gold
modifier = {
add = -100
scope:actor.promoted_legend = {
legend_quality = famed
}
scope:recipient = {
monthly_character_income < famed_legend_promoter_cost
}
desc = TOO_HIGH_PROMOTER_MAINTENANCE_REASON
}
modifier = {
add = -100
scope:actor.promoted_legend = {
legend_quality = illustrious
}
scope:recipient = {
monthly_character_income < illustrious_legend_promoter_cost
}
desc = TOO_HIGH_PROMOTER_MAINTENANCE_REASON
}
modifier = {
add = -100
scope:actor.promoted_legend = {
legend_quality = mythical
}
scope:recipient = {
monthly_character_income < mythical_legend_promoter_cost
}
desc = TOO_HIGH_PROMOTER_MAINTENANCE_REASON
}
modifier = {
add = 25
scope:recipient = {
is_contact_of = scope:actor
}
desc = IS_CONTACT_REASON
}
}
on_accept = {
scope:actor.promoted_legend = {
save_scope_as = promoted_legend
}
scope:actor = {
send_interface_toast = {
type = event_toast_effect_good
title = ce1_ask_to_promote_legend_acceptance_tt
left_icon = scope:actor
right_icon = scope:recipient
if = {
limit = { scope:hook = yes }
use_hook = scope:recipient
}
if = {
limit = { scope:gold_cost = yes }
pay_short_term_gold = {
target = scope:recipient
gold = medium_gold_value
}
promoted_legend = { # To prevent gold exploits
add_to_variable_list = {
name = accepted_promote_legend_var
target = scope:recipient
years = 10
}
}
}
scope:recipient = {
set_promoted_legend = scope:actor.promoted_legend
}
}
}
}
on_decline = {
scope:actor = {
send_interface_toast = {
type = event_toast_effect_bad
title = ce1_ask_to_promote_legend_decline_tt
left_icon = scope:actor
right_icon = scope:recipient
}
}
}
# Use gold to increase acceptance
send_option = {
flag = gold_cost
localization = TRADE_GOLD_FOR_BETTER_AI_ACCEPTANCE
}
send_option = {
flag = hook
is_valid = {
scope:actor = {
has_usable_hook = scope:recipient
}
}
localization = GENERIC_SPEND_A_HOOK
}
send_options_exclusive = no
ai_potential = {
is_physically_able = yes
}
ai_targets = {
ai_recipients = neighboring_rulers
}
ai_frequency_by_tier = {
barony = 0
county = 72
duchy = 36
kingdom = 12
empire = 12
hegemony = 12
}
# Very similar to ai_accept, but ignores effects that are < 10 in value for brevity's sake
ai_will_do = {
base = 0
## Legends
modifier = {
add = 25
exists = promoted_legend
}
modifier = {
add = 25
promoted_legend = {
legend_quality = mythical
}
}
## Gold
modifier = {
add = -100
debt_level >= 0
}
modifier = {
add = -50
gold <= major_gold_value
}
## Personality
modifier = {
add = 25
has_trait = arrogant
}
}
}

View file

@ -45,7 +45,7 @@ offer_vassalization_interaction = {
}
NOR = {
government_has_flag = cannot_be_vassal_or_liege
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
}
# Temujin cannot make Jamukha his subject once he leaves him

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,789 @@
#Give characters money to improve their opinion of you
gift_interaction = {
icon = icon_gold
category = interaction_category_friendly
common_interaction = yes
interface_priority = 65
desc = gift_interaction_desc
greeting = positive
notification_text = SEND_GIFT_PROPOSAL
answer_accept_key = SEND_GIFT_ACCEPT
answer_reject_key = SEND_GIFT_REJECT
ai_targets = {
ai_recipients = scripted_relations
ai_recipients = liege
ai_recipients = head_of_faith
}
ai_targets = {
ai_recipients = neighboring_rulers
ai_recipients = peer_vassals
max = 10
}
ai_targets = {
ai_recipients = vassals
max = 10
}
ai_target_quick_trigger = {
adult = yes
}
ai_frequency_by_tier = {
barony = 120
county = 60
duchy = 60
kingdom = 36
empire = 36
hegemony = 36
}
is_shown = {
scope:recipient != scope:actor
# Prioritize paying back loans first
scope:actor = {
trigger_if = {
limit = {
exists = var:loan_amount_owed
exists = var:loan_holder
}
NOT = { var:loan_holder = scope:recipient }
}
}
}
is_highlighted = {
scope:recipient = {
OR = {
house ?= {
OR = {
is_dominant_family = yes
is_powerful_family = yes
}
}
}
}
}
highlighted_reason = HIGHLIGHTED_FAMILY_RATING
is_valid_showing_failures_only = {
scope:actor.gold >= gift_value
scope:recipient = {
NOT = { is_imprisoned_by = scope:actor }
}
}
on_auto_accept = {
scope:recipient = {
trigger_event = char_interaction.0100
}
}
on_accept = {
scope:recipient = {
# Verify that they could become friend
if = {
limit = {
NAND = {
has_relation_friend = scope:actor
has_relation_lover = scope:actor
has_relation_soulmate = scope:actor
has_relation_best_friend = scope:actor
}
}
gifting_leads_towards_friendship_effect = yes
}
}
# HOUSE RELATIONS
if = {
limit = {
scope:actor = {
is_house_head = yes
}
scope:recipient = {
is_house_head = yes
NOT = {
has_opinion_modifier = {
target = scope:actor
modifier = gift_opinion
}
}
}
}
scope:recipient.house = {
change_house_relation_effect = {
HOUSE = scope:actor.house
VALUE = house_relation_improve_medium_value
REASON = sent_a_gift
CHAR = scope:actor
TARGET_CHAR = scope:recipient
TITLE = scope:dummy_gender
}
}
}
scope:actor = {
# Warning for multiple gifts
if = {
limit = {
scope:recipient = {
has_opinion_modifier = {
target = scope:actor
modifier = gift_opinion
}
}
}
custom_tooltip = ALREADY_SENT_GIFT_WARNING
}
send_interface_message = {
type = event_gold_neutral
title = gift_interaction_notification
right_icon = scope:recipient
pay_short_term_gold = {
gold = gift_value
target = scope:recipient
}
stress_impact = {
greedy = medium_stress_impact_gain
}
if = {
limit = {
scope:recipient = {
NOT = {
is_heir_of = scope:actor
}
}
}
stress_impact = {
generous = medium_stress_impact_loss
}
}
#FP3 Tenet Communal Possessions Perk - piety gain for gift giving.
if = {
limit = {
scope:actor = {
faith = {
has_doctrine_parameter = piety_from_gifts_active
}
}
}
scope:actor = {
add_piety = minor_piety_gain
}
}
# Check if the target already has been sent a gift or not. If not, apply the following effects
if = {
limit = {
NOT = {
scope:recipient = {
has_opinion_modifier = {
target = scope:actor
modifier = gift_opinion
}
}
}
}
# Struggle Catalyst
if = {
limit = {
scope:actor = {
any_character_struggle = {
involvement = involved
phase_has_catalyst = catalyst_gift_independent_ruler
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_gift_independent_ruler
CHAR = scope:recipient
}
}
}
}
hidden_effect = {
scope:actor = {
every_character_struggle = {
involvement = involved
limit = { phase_has_catalyst = catalyst_gift_independent_ruler }
activate_struggle_catalyst = {
catalyst = catalyst_gift_independent_ruler
character = scope:actor
}
}
}
}
}
if = {
limit = {
fp3_struggle_involves_one_supporter_and_one_detractor = {
FIRST = scope:actor
SECOND = scope:recipient
}
scope:actor = {
any_character_struggle = {
#involvement = involved
activate_struggle_catalyst_secondary_character_involvement_either_trigger = {
CATALYST = catalyst_gift_supporter_detractor_ruler
CHAR = scope:recipient
}
}
}
}
hidden_effect = {
scope:actor = {
every_character_struggle = {
#involvement = involved
limit = {
activate_struggle_catalyst_secondary_character_involvement_either_trigger = {
CATALYST = catalyst_gift_supporter_detractor_ruler
CHAR = scope:recipient
}
}
activate_struggle_catalyst = {
catalyst = catalyst_gift_supporter_detractor_ruler
character = scope:actor
}
log_debug_variable_for_persian_struggle_effect = { VAR = concession_catalyst_gift_supporter_detractor_ruler }
}
}
}
}
# FP2 Urbanism Legacy Perk 2: increase cultural acceptance when gifting a republican vassal
if = {
limit = {
scope:actor = {
dynasty ?= { has_dynasty_perk = fp2_urbanism_legacy_4 }
}
scope:recipient = {
AND = {
is_vassal_of = scope:actor
government_has_flag = government_is_republic
}
}
scope:actor.culture != scope:recipient.capital_province.county.culture
}
scope:recipient.capital_province.county.culture = {
change_cultural_acceptance = {
target = scope:actor.culture
value = {
value = 20
multiply = scope:recipient.capital_province.county.development_level
divide = 100
}
desc = cultural_acceptance_gain_gift_dynasty_perk
}
}
}
}
# Let's apply the opinion modifier last, as to apply everything else correctly first
scope:recipient = {
add_opinion = {
target = scope:actor
modifier = gift_opinion
opinion = send_gift_opinion
}
}
}
if = { # for tutorial purposes
limit = {
is_ai = no
scope:recipient = { is_child_of = scope:actor }
}
add_character_flag = {
flag = tutorial_sent_gift
days = 200
}
}
#Influence gain between admin rulers
if = {
limit = {
is_ruler = yes
government_allows = administrative
scope:recipient = {
is_ruler = yes
government_allows = administrative
any_held_title = {
is_noble_family_title = yes
}
}
}
if = {
limit = {
scope:recipient = {
OR = {
house = {
is_dominant_family = yes
}
this = scope:actor.top_liege
}
influence_level >= 5
}
}
change_influence = {
value = miniscule_influence_gain
multiply = 8
}
}
else_if = {
limit = {
scope:recipient = {
OR = {
house = {
is_dominant_family = yes
}
this = scope:actor.top_liege
}
influence_level >= 3
}
}
change_influence = {
value = miniscule_influence_gain
multiply = 7
}
}
else_if = {
limit = {
scope:recipient = {
OR = {
house = {
is_dominant_family = yes
}
this = scope:actor.top_liege
}
}
}
change_influence = {
value = miniscule_influence_gain
multiply = 6
}
}
else_if = {
limit = {
scope:recipient = {
OR = {
house = {
is_powerful_family = yes
}
this = scope:actor.top_liege
}
influence_level >= 5
}
}
change_influence = {
value = miniscule_influence_gain
multiply = 6
}
}
else_if = {
limit = {
scope:recipient = {
OR = {
house = {
is_powerful_family = yes
}
this = scope:actor.top_liege
}
influence_level >= 3
}
}
change_influence = {
value = miniscule_influence_gain
multiply = 5
}
}
else_if = {
limit = {
scope:recipient = {
OR = {
house = {
is_powerful_family = yes
}
this = scope:actor.top_liege
}
}
}
change_influence = {
value = miniscule_influence_gain
multiply = 4
}
}
else_if = {
limit = {
scope:recipient = { influence_level >= 5 }
}
change_influence = {
value = miniscule_influence_gain
multiply = 3
}
}
else_if = {
limit = {
scope:recipient = { influence_level >= 3 }
}
change_influence = {
value = miniscule_influence_gain
multiply = 2
}
}
else = {
change_influence = miniscule_influence_gain
}
}
}
}
ai_accept = {
base = 0
modifier = {
add = 100
desc = GOLD_REASON
}
# Struggle motive
modifier = {
desc = AI_STRUGGLE_INTENT
scope:recipient = {
top_liege = this
any_character_struggle = {
involvement = involved
}
}
add = {
value = 0
if = {
limit = {
scope:recipient = {
any_character_struggle = {
phase_has_catalyst = catalyst_gift_independent_ruler
}
has_character_flag = agenda_towards_escalation
}
}
add = -100
}
else_if = {
limit = {
scope:recipient = {
any_character_struggle = {
phase_has_catalyst = catalyst_gift_independent_ruler
}
}
}
add = 200
}
}
}
}
ai_potential = {
is_available_at_peace_ai_adult = yes
ai_greed < medium_positive_ai_value
short_term_gold >= gift_interaction_cutoff
NOT = {
has_trait = greedy
}
NOT = { has_variable = conqueror }
ai_should_focus_on_building_in_their_capital = no
}
auto_accept = {
custom_description = {
text = auto_accept_interaction_ai
object = scope:recipient
scope:recipient = {
is_ai = yes
}
}
}
ai_min_reply_days = 1
ai_max_reply_days = 1
ai_will_do = {
base = 100
modifier = { # Do not send double-gifts
factor = 0
scope:recipient = {
has_opinion_modifier = {
target = scope:actor
modifier = gift_opinion
}
}
}
modifier = { # Basic Filtering
factor = 0
scope:recipient = {
NOR = {
AND = { # Bankrupt lovers, friends and a bankrupt liege should be considered
OR = {
scope:actor = {
any_liege_or_above = {
this = scope:recipient
}
}
has_secret_relation_lover = scope:actor
has_relation_lover = scope:actor
has_relation_soulmate = scope:actor
has_relation_friend = scope:actor
has_relation_best_friend = scope:actor
}
gold < 0
}
AND = { # Generous characters will give gifts to their friends/lovers
is_ruler = yes
OR = {
has_secret_relation_lover = scope:actor
has_relation_lover = scope:actor
has_relation_soulmate = scope:actor
has_relation_friend = scope:actor
has_relation_best_friend = scope:actor
}
scope:actor = {
OR = {
ai_greed <= high_negative_ai_value
AND = {
ai_greed < 0
culture = {
has_cultural_parameter = gives_more_gifts
}
}
}
}
}
AND = { # Characters with the Generous Cultural Tradition will give gifts to more people
is_ruler = yes
OR = {
is_allied_to = scope:actor
is_close_or_extended_family_of = scope:actor
}
scope:actor = {
ai_greed < 0
culture = {
has_cultural_parameter = gives_more_gifts
}
}
}
AND = { # Characters with the loyal trait more likely to give gifts to friends/lieges
OR = {
scope:actor.liege ?= this
has_relation_friend = scope:actor
has_relation_best_friend = scope:actor
is_allied_to = scope:actor
is_close_or_extended_family_of = scope:actor
}
scope:actor = {
ai_greed <= 0
has_trait = loyal
}
}
AND = { # Zealous characters want to support the defending side in GHW's
gold < 200
any_character_war = {
OR = {
using_cb = undirected_great_holy_war
using_cb = directed_great_holy_war
}
primary_defender = scope:recipient
}
scope:actor = {
ai_zeal >= 50
}
}
AND = { # Powerful vassals should be considered
is_powerful_vassal_of = scope:actor
opinion = {
target = scope:actor
value < 0
}
NOT ={
has_opinion_modifier = {
target = scope:actor
modifier = gift_opinion
}
}
}
AND = { # Factioneering vassals should be considered
is_vassal_of = scope:actor
is_a_faction_member = yes
NOT ={
has_opinion_modifier = {
target = scope:actor
modifier = gift_opinion
}
}
}
AND = { # Realm Priests should be considered
scope:actor = {
faith = { has_doctrine = doctrine_theocracy_temporal }
exists = cp:councillor_court_chaplain
cp:councillor_court_chaplain = scope:recipient
}
opinion = {
target = scope:actor
value <= 25
}
NOT = {
has_opinion_modifier = {
target = scope:actor
modifier = gift_opinion
}
}
}
AND = { # Rulers at war with your rivals deserve gold if they're bankrupt
gold < 0
is_at_war = yes
any_war_enemy = {
has_relation_rival = scope:actor
}
}
AND = { # Independent ruler within the struggle should be considered
any_character_struggle = {
phase_has_catalyst = catalyst_gift_independent_ruler
}
}
}
}
}
# Struggle
modifier = {
scope:recipient = {
any_character_struggle = {
involvement = involved
phase_has_catalyst = catalyst_gift_independent_ruler
}
}
scope:actor = {
any_character_struggle = {
involvement = involved
phase_has_catalyst = catalyst_gift_independent_ruler
}
NOT = {
has_relation_rival = scope:recipient
}
}
add = {
value = 0
if = {
limit = {
scope:actor = {
has_character_flag = agenda_towards_escalation
}
}
add = -100
}
else_if = {
limit = {
scope:actor = {
has_character_flag = agenda_towards_deescalation
}
scope:recipient = {
has_character_flag = agenda_towards_deescalation
}
}
add = {
value = 150
if = {
limit = { scope:recipient = { is_ai = no} }
add = 150 # higher for human player to Prioritize them
}
# Then lower the intent depending on the gold reserve
# Base value applied if the AI has 3x the gold cutoff
multiply = {
value = short_term_gold
divide = {
value = gift_interaction_cutoff
multiply = 3
}
}
}
}
else_if = {
limit = {
scope:actor = {
has_character_flag = agenda_towards_deescalation
}
}
add = {
value = 25
if = {
limit = { scope:recipient = { is_ai = no} }
add = 150 # higher for human player to Prioritize them
}
# Then lower the intent depending on the gold reserve
# Base value applied if the AI has 3x the gold cutoff
multiply = {
value = short_term_gold
divide = {
value = gift_interaction_cutoff
multiply = 3
}
}
}
}
}
}
modifier = {
factor = 0.1
scope:recipient = {
opinion = {
target = scope:actor
value < 0
}
NAND = {
is_vassal_of = scope:actor
scope:actor = {
ai_rationality > 50
}
}
}
}
modifier = {
add = 100
scope:actor = {
is_at_war = no
has_trait = fp3_struggle_supporter
any_character_struggle = { is_struggle_type = persian_struggle }
}
scope:recipient = {
title:d_sunni.holder ?= this
gold < 0
}
}
# Nomads are slightly less likely to do this since they'd prefer to send Herd instead
modifier = {
add = -10
scope:actor = {
government_has_flag = government_is_nomadic
}
scope:recipient = {
government_has_flag = government_is_nomadic
}
}
modifier = {
factor = 0.1
scope:recipient = {
has_relation_rival = scope:actor
}
}
modifier = {
factor = 2
scope:actor.house.house_confederation ?= {
has_cohesion_level_parameter = bloc_members_send_leader_gifts
leading_house.house_head ?= scope:recipient
}
}
}
}

View file

@ -42,7 +42,7 @@ grant_titles_interaction = {
limit = {
scope:actor = { government_has_flag = government_is_nomadic NOT = { government_has_flag = government_allows_nomad_domicile_titles }}
}
scope:recipient = { NOT = { government_has_flag = government_is_herder } }
scope:recipient = { NOT = { government_has_flag = government_is_true_herder } }
}
}

View file

@ -0,0 +1,844 @@

invite_agent_to_scheme_interaction = {
special_interaction = invite_to_scheme_interaction
hidden = yes
# Delaying the response makes it possible to invite multiple agents to the same slot.
ai_instant_response = yes
on_accept = {
scope:recipient = {
if = {
limit = {
OR = {
always = scope:mandala_trickster
always = scope:gift
always = scope:gift_significant
always = scope:offer_hook
always = scope:offer_hook_strong
always = scope:hook
always = scope:opportunities_t1
always = scope:opportunities_t2
always = scope:prestige
always = scope:influence
always = scope:council_rights
always = scope:de_jure_title
always = scope:claimed_title
always = scope:piety
always = scope:herd
var:devotee_agent_var ?= scope:actor
}
}
force_add_to_agent_slot = {
agent_slot = scope:agent_slot
years = 5
}
}
else = { add_to_agent_slot = scope:agent_slot }
}
scope:actor = {
# No bribe.
## We hack this in to stop the window jumping around as you add or remove bribes.
if = {
limit = {
NOR = {
always = scope:mandala_trickster
always = scope:gift
always = scope:gift_significant
always = scope:offer_hook
always = scope:offer_hook_strong
always = scope:hook
always = scope:opportunities_t1
always = scope:opportunities_t2
always = scope:prestige
always = scope:influence
always = scope:council_rights
always = scope:de_jure_title
always = scope:claimed_title
always = scope:piety
always = scope:herd
}
}
custom_tooltip = offer_bribes.tt.window_jump_fix
}
# Mandala Trickster
if = {
limit = { always = scope:mandala_trickster }
add_piety = {
value = trickster_mandala_force_agent_bribe_value
multiply = -1
}
}
# Bribe
if = {
limit = { always = scope:gift }
pay_short_term_gold = {
gold = bribe_value
target = scope:recipient
}
stress_impact = { greedy = minor_stress_impact_gain }
}
# Big Bribe
if = {
limit = { always = scope:gift_significant }
pay_short_term_gold = {
gold = greater_bribe_value
target = scope:recipient
}
stress_impact = { greedy = medium_stress_impact_gain }
}
# Offer Hook
if = {
limit = { always = scope:offer_hook }
stress_impact = {
base = minor_stress_impact_gain
paranoid = major_stress_impact_gain
}
scope:recipient = {
add_hook = {
type = favor_hook
target = scope:actor
}
}
}
# Offer Strong Hook
if = {
limit = { always = scope:offer_hook_strong }
stress_impact = { base = major_stress_impact_gain }
scope:recipient = {
add_hook = {
type = strong_favor_hook
target = scope:actor
}
}
}
# Use Hook
if = {
limit = { always = scope:hook }
use_hook = scope:recipient
}
# Burn Opportunities
if = {
limit = { always = scope:opportunities_t1 }
custom_tooltip = {
text = spend_agent_charges.tt.t1
scope:scheme = {
change_opportunities = {
value = invite_agent_opportunities_t1_value
multiply = -1
}
}
}
}
# Burn More Opportunities
if = {
limit = { always = scope:opportunities_t2 }
custom_tooltip = {
text = spend_agent_charges.tt.t2
scope:scheme = {
change_opportunities = {
value = invite_agent_opportunities_t2_value
multiply = -1
}
}
}
}
# Prestige
if = {
limit = { always = scope:prestige }
add_prestige = {
value = prestige_bribe_value
multiply = -1
}
scope:recipient = { add_prestige = prestige_bribe_value }
}
# Influence
if = {
limit = { always = scope:influence }
change_influence = {
value = influence_bribe_value
multiply = -1
}
scope:recipient = { change_influence = influence_bribe_value }
}
# Council Rights
if = {
limit = { always = scope:council_rights }
scope:recipient = {
vassal_contract_set_obligation_level = {
type = council_rights
level = 1
}
set_subject_contract_modification_blocked = yes
}
}
create_title_and_vassal_change = {
type = granted
save_scope_as = change
}
# De Jure County
if = {
limit = { always = scope:de_jure_title }
random_held_title = {
limit = {
actor_has_valid_de_jure_enticement_county_trigger = yes
any_this_title_or_de_jure_above = {
holder ?= { this = scope:recipient }
}
}
change_title_holder = {
holder = scope:recipient
change = scope:change
}
}
}
# Claimed County
if = {
limit = { always = scope:claimed_title }
random_held_title = {
limit = {
actor_has_valid_claimed_enticement_county_trigger = yes
scope:recipient = { has_claim_on = prev }
}
change_title_holder = {
holder = scope:recipient
change = scope:change
}
}
}
resolve_title_and_vassal_change = scope:change
# Piety
if = {
limit = { always = scope:piety }
scope:actor = {
add_piety = {
value = piety_bribe_value
multiply = -1
}
}
scope:recipient = { add_piety = piety_bribe_value }
}
# Herd
if = {
limit = { always = scope:herd }
if = {
limit = {
scope:recipient.domicile ?= {
herd > 0
}
}
scope:actor = {
pay_herd = {
target = scope:recipient
value = domicile.herd_bribe_value
}
}
}
else = {
scope:actor = { custom_tooltip = scheme_change_herd_value }
hidden_effect = {
scope:actor.domicile = {
change_herd = {
value = herd_bribe_value
multiply = -1
}
}
scope:recipient = {
add_gold = {
value = domicile.herd_bribe_value
multiply = 0.1
}
}
}
}
}
}
# Stress.
## For scope: recipient.
scope:recipient = {
if = {
limit = {
scope:scheme = { is_scheme_category = contract }
}
# Honourable characters don't like being forced into criminal schemes.
if = {
limit = {
OR = {
has_trait = just
has_trait = compassionate
}
scope:scheme.task_contract ?= { is_criminal = yes }
}
add_opinion = {
target = scope:actor
modifier = forced_me_to_help_crimes_opinion
opinion = -20
}
stress_impact = {
just = minor_stress_impact_gain
compassionate = miniscule_stress_impact_gain
}
}
# Lazy characters don't like being made to work at all.
else_if = {
limit = { has_trait = lazy }
add_opinion = {
target = scope:actor
modifier = forced_me_to_work_opinion
opinion = -10
}
stress_impact = { lazy = miniscule_stress_impact_gain }
}
}
}
}
ai_accept = {
base = 0
scheme_modifier = {
object = scope:scheme
target = scope:recipient
}
# You should not add modifiers here! If you want to add modifiers, they should be added to either:
## - ai_agent_join_chance_hostile_general_suite_modifier
## - ai_agent_join_chance_personal_general_suite_modifier
}
auto_accept = {
trigger_if = {
limit = {
scope:recipient.var:devotee_agent_var ?= scope:actor # They are a devotee of yours
}
custom_tooltip = devotee_agent_desc
}
trigger_else_if = {
limit = { scope:mandala_trickster = yes }
custom_tooltip = {
text = SCHEME_AGENT_MANDALA_TRICKSTER
always = yes
}
}
trigger_else_if = {
limit = {
scope:hook = yes
scope:actor = { has_strong_hook = scope:recipient }
}
custom_description = {
text = "spending_hook"
subject = scope:actor
object = scope:recipient
always = yes
}
}
trigger_else_if = {
limit = {
scope:scheme = { is_scheme_category = contract }
}
# Should be synced with the modifiers in ai_agent_join_chance_laamp_contract_modifier, else agents'll leave the scheme immediately after joining.
scope:recipient = {
is_courtier_of = scope:actor
NOR = {
has_relation_rival = scope:actor
custom_tooltip = {
text = invite_agent_to_scheme_interaction.tt.no_stooges
AND = {
scope:actor = { has_court_position = stooge_camp_officer }
is_court_position_employer = {
court_position = stooge_camp_officer
who = scope:actor
}
}
}
}
}
}
trigger_else = { always = no }
}
options_heading = invite_agent_to_scheme_interaction.t.options_header
# Everyone
## Spend opportunities.
### x1.
send_option = {
flag = opportunities_t1
is_shown = {
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
custom_tooltip = {
text = offer_opportunities.tt.need_an_opportunity.t1
scope:scheme = { scheme_agent_charges >= invite_agent_opportunities_t1_value }
}
custom_tooltip = {
text = offer_opportunities.tt.cannot_offer_multiple_sets
scope:opportunities_t2 = no
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_OPPORTUNITIES_T1
}
### x3.
send_option = {
flag = opportunities_t2
is_shown = {
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
custom_tooltip = {
text = offer_opportunities.tt.need_an_opportunity.t2
scope:scheme = { scheme_agent_charges >= invite_agent_opportunities_t2_value }
}
custom_tooltip = {
text = offer_opportunities.tt.cannot_offer_multiple_sets
scope:opportunities_t1 = no
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_OPPORTUNITIES_T2
}
## Mandala Trickery Aspect
send_option = {
flag = mandala_trickster
is_shown = {
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
scope:actor = {
government_has_flag = government_is_mandala
house = { has_house_head_parameter = unlock_force_agent_using_piety }
is_house_head = yes
}
}
is_valid = {
scope:actor.piety >= trickster_mandala_force_agent_bribe_value
custom_tooltip = {
text = offer_gold.tt.cannot_offer_both_bribes
scope:piety = no
}
custom_tooltip = {
text = not_two_overrides
trigger_if = {
limit = { scope:hook = yes }
NOT = {
scope:actor = { has_strong_hook = scope:recipient }
}
}
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_MANDALA_TRICKSTER
current_description = {
# Triggered desc so that we don't get a weird double tooltip.
triggered_desc = {
trigger = { scope:actor.piety >= trickster_mandala_force_agent_bribe_value }
desc = SCHEME_AGENT_MANDALA_TRICKSTER_VALID
}
}
}
## Gold
send_option = {
flag = gift
is_shown = {
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
scope:actor.gold >= bribe_value
custom_tooltip = {
text = offer_gold.tt.cannot_offer_both_bribes
scope:gift_significant = no
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_GOLD
current_description = {
# Triggered desc so that we don't get a weird double tooltip.
triggered_desc = {
trigger = { scope:actor.gold >= bribe_value }
desc = SCHEME_AGENT_GOLD_VALID
}
}
}
## Even more gold
send_option = {
flag = gift_significant
is_shown = {
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
scope:actor.gold >= greater_bribe_value
custom_tooltip = {
text = offer_gold.tt.cannot_offer_both_bribes
scope:gift = no
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_GOLD_SIGNIFICANT
current_description = {
# Triggered desc so that we don't get a weird double tooltip.
triggered_desc = {
trigger = { scope:actor.gold >= greater_bribe_value }
desc = SCHEME_AGENT_GOLD_SIGNIFICANT_VALID
}
}
}
## Offer a hook
send_option = {
flag = offer_hook
is_shown = {
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
custom_tooltip = {
text = offer_hook.tt.cannot_offer_both_hooks
scope:offer_hook_strong = no
}
NOT = {
scope:recipient = { has_hook = scope:actor }
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_HOOK
}
## Offer a strong hook
send_option = {
flag = offer_hook_strong
is_shown = {
scope:actor = { has_trait_with_flag = can_offer_strong_hook_to_agents }
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
custom_tooltip = {
text = offer_hook.tt.cannot_offer_both_hooks
scope:offer_hook = no
}
NOT = {
scope:recipient = { has_strong_hook = scope:actor }
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_HOOK_STRONG
}
## Use hook.
### Weak hook bonus is added through the scheme's agent join chance.
### Strong hook is in the auto_accept block.
send_option = {
flag = hook
is_valid = {
scope:actor = { has_usable_hook = scope:recipient }
custom_tooltip = {
text = not_two_overrides
trigger_if = {
limit = {
scope:actor = { has_strong_hook = scope:recipient }
}
scope:mandala_trickster = no
}
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_HOOK_EXPLICIT
}
# Rulers
## Prestige
send_option = {
flag = prestige
is_shown = {
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
scope:actor.prestige >= prestige_bribe_value
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_PRESTIGE
current_description = {
# Triggered desc so that we don't get a weird double tooltip.
triggered_desc = {
trigger = { scope:actor.prestige >= prestige_bribe_value }
desc = SCHEME_AGENT_PRESTIGE_VALID
}
}
}
## Influence
send_option = {
flag = influence
is_shown = {
scope:actor.top_liege ?= scope:recipient.top_liege
scope:actor = { government_allows = administrative }
scope:recipient = {
OR = {
government_allows = administrative
host = { government_allows = administrative }
AND = {
highest_held_title_tier = tier_barony
liege = { government_allows = administrative }
}
}
}
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
scope:actor.influence >= influence_bribe_value
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_INFLUENCE
current_description = {
# Triggered desc so that we don't get a weird double tooltip.
triggered_desc = {
trigger = { scope:actor.influence >= influence_bribe_value }
desc = SCHEME_AGENT_INFLUENCE_VALID
}
}
}
## Council Rights
send_option = {
flag = council_rights
is_shown = {
would_actor_consider_dramatic_enticement_trigger = yes
scope:recipient.liege ?= scope:actor
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
scope:recipient = { vassal_contract_has_modifiable_obligations = yes }
NOT = {
scope:recipient = { has_trait = lazy }
}
custom_tooltip = {
text = council_rights.tt.already_has_council_rights
scope:recipient = {
NOR = {
vassal_contract_has_flag = can_demand_council_seat
vassal_contract_has_flag = can_demand_kurultai_seat
}
}
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_COUNCIL_RIGHTS
}
## De jure county of theirs you hold.
send_option = {
flag = de_jure_title
is_shown = {
would_actor_consider_dramatic_enticement_trigger = yes
scope:recipient = {
is_landed = yes
any_liege_or_above = { this = scope:actor }
}
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
custom_tooltip = {
text = de_jure_title.tt.no_suitable_county
scope:actor = {
any_held_title = {
actor_has_valid_de_jure_enticement_county_trigger = yes
any_this_title_or_de_jure_above = {
holder ?= { this = scope:recipient }
}
}
}
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_DE_JURE_TITLE
}
# Landless Chars
## County they hold a claim to that you hold.
send_option = {
flag = claimed_title
is_shown = {
would_actor_consider_dramatic_enticement_trigger = yes
trigger_if = {
limit = {
exists = scope:scheme.scheme_target_character
}
scope:recipient = {
is_ruler = no
# And you don't want them _because_ they're in your target's court.
host != scope:scheme.scheme_target_character
}
}
trigger_if = {
limit = {
exists = scope:scheme.scheme_target_title
}
scope:recipient = {
is_ruler = no
# And you don't want them _because_ they're in your target's court.
host != scope:scheme.scheme_target_title.holder
}
}
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
scope:recipient = {
trigger_if = {
limit = {
any_claim = { }
}
custom_tooltip = {
text = claimed_title.tt.no_valid_county
any_claim = { actor_has_valid_claimed_enticement_county_trigger = yes }
}
}
trigger_else = {
custom_tooltip = {
text = claimed_title.tt.no_claims
always = no
}
}
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_CLAIMED_TITLE
}
# Nomad Chars
## Use Herd
send_option = {
flag = herd
is_shown = {
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
scope:actor = {
government_has_flag = government_is_nomadic
is_ai = no
}
scope:recipient = {
government_has_flag = government_is_nomadic
exists = domicile
}
}
is_valid = {
scope:actor.domicile.herd >= herd_bribe_value
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_HERD
current_description = {
# Triggered desc so that we don't get a weird double tooltip.
triggered_desc = {
trigger = { scope:actor.domicile.herd >= herd_bribe_value }
desc = SCHEME_AGENT_HERD_VALID
}
}
}
# Cofaithists
## Piety
send_option = {
flag = piety
is_shown = {
trigger_if = { #Mandala override
limit = {
scope:actor = { government_has_flag = government_is_mandala }
}
scope:actor = {
house = { has_house_head_parameter = unlock_agent_piety_bribe }
is_house_head = yes
}
}
trigger_else = { #Everyone else
## Target amenable to this argument.
scope:recipient = {
OR = {
has_trait = devoted
has_trait = zealous
has_council_position = councillor_court_chaplain
government_has_flag = government_is_theocracy
}
}
## In-group out-group requirements.
OR = {
## Either we share a faith.
scope:actor.faith = scope:recipient.faith
## Or our faiths *really* get along.
scope:recipient.faith = {
faith_hostility_level = {
target = scope:actor.faith
value <= faith_fully_accepted_level
}
}
}
}
# We don't show bribes for schemes where agents will always auto-accept or else deny.
NAND = {
scope:scheme = { is_scheme_category = contract }
scope:recipient = { is_courtier_of = scope:actor }
}
}
is_valid = {
scope:actor.piety >= piety_bribe_value
trigger_if = { #Mandala override
limit = {
scope:actor = {
NOT = { government_has_flag = government_is_mandala }
}
}
NOT = {
scope:recipient = { has_trait = cynical }
}
}
custom_tooltip = {
text = offer_gold.tt.cannot_offer_both_bribes
scope:mandala_trickster = no
}
would_agent_accept_petty_bribes_against_target_trigger = yes
}
localization = SCHEME_AGENT_PIETY
current_description = {
# Triggered desc so that we don't get a weird double tooltip.
triggered_desc = {
trigger = { scope:actor.piety >= piety_bribe_value }
desc = SCHEME_AGENT_PIETY_VALID
}
}
}
send_options_exclusive = no
}

View file

@ -3224,7 +3224,7 @@ offer_concubine = {
}
}
scope:recipient = {
#NOT = { government_has_flag = government_is_herder }
#NOT = { government_has_flag = government_is_true_herder }
allowed_concubines = yes
is_adult = yes
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -826,7 +826,7 @@ demand_conversion_vassal_ruler_interaction = {
is_ruler = yes
OR = {
government_has_flag = government_is_nomadic
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
}
}
@ -836,7 +836,7 @@ demand_conversion_vassal_ruler_interaction = {
scope:recipient = {
OR = {
government_has_flag = government_is_nomadic
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
}
}

View file

@ -72,7 +72,7 @@
is_shown = {
scope:recipient = {
NOT = { government_has_flag = government_is_herder } # They have their own interaction without cooldowns/maluses
NOT = { government_has_flag = government_is_true_herder } # They have their own interaction without cooldowns/maluses
is_landed_or_landless_administrative = yes
# should be shown but be disabled for indirect vassals
target_is_liege_or_above = scope:actor
@ -667,7 +667,7 @@
limit = {
scope:landed_title.tier != tier_barony
NOT = {
scope:recipient = { government_has_flag = government_is_herder }
scope:recipient = { government_has_flag = government_is_true_herder }
}
}
scope:actor = {
@ -677,7 +677,7 @@
}
if = {
limit = {
scope:recipient = { government_has_flag = government_is_herder }
scope:recipient = { government_has_flag = government_is_true_herder }
}
scope:recipient = {
add_opinion = {
@ -703,7 +703,7 @@
limit = {
scope:actor = { has_realm_law_flag = vassal_refusal_is_treason }
NOT = {
scope:recipient = { government_has_flag = government_is_herder }
scope:recipient = { government_has_flag = government_is_true_herder }
}
}
scope:actor = {
@ -828,7 +828,7 @@
modifier = {
scope:recipient = {
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
add = 40
desc = MIGRATION_INTERACTION_HERDER

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,948 @@
feudalize_holding_interaction = {
category = interaction_category_uncategorized
hidden = yes
special_interaction = feudalize_holding
desc = feudalize_holding_interaction_desc
target_type = title
target_filter = actor_domain_titles
auto_accept = yes
is_shown = {
scope:actor = {
this = scope:recipient
NOR = {
government_has_flag = government_is_tribal
government_has_flag = government_is_nomadic
government_has_flag = government_is_true_herder
}
}
}
can_be_picked_title = {
scope:target = {
holder = scope:actor
is_capital_barony = no # we'll use the county in that case
trigger_if = {
limit = { tier <= tier_county }
title_province = {
OR = {
has_holding_type = tribal_holding
has_holding_type = nomad_holding
has_holding_type = herder_holding
}
}
}
trigger_else = {
custom_description = {
text = "feudalize_holding_interaction_title_not_county_or_below"
always = no
}
}
}
}
has_valid_target_showing_failures_only = {
scope:target = {
trigger_if = {
limit = { tier <= tier_county }
title_province = {
barony_controller = scope:actor
has_ongoing_construction = no
}
}
}
}
cost = {
treasury_or_gold = {
scope:actor = {
if = {
limit = {
scope:target.county = {
has_variable = was_razed
}
}
add = {
value = 50
desc = BASE
}
}
else_if = {
limit = {
scope:target.county = {
culture = scope:actor.culture
}
}
add = {
value = 200
desc = BASE
}
}
else = {
add = {
value = feudalize_holding_interaction_cost
desc = BASE
}
}
if = {
limit = { # More expensive for admin to make barbarians civilized...
government_has_flag = government_is_administrative
}
add = {
value = feudalize_holding_interaction_cost
multiply = 0.25
desc = has_admin_government
}
if = {
limit = { # Admin get a bonus for high bureaucracy levels
OR = {
has_realm_law = imperial_bureaucracy_2
has_realm_law = imperial_bureaucracy_3
}
}
subtract = {
value = feudalize_holding_interaction_cost
multiply = {
value = 0.1
if = {
limit = {
has_realm_law = imperial_bureaucracy_3
}
add = 0.15
}
}
desc = imperial_bureaucracy
}
}
}
}
}
}
on_accept = {
scope:actor = {
send_interface_toast = {
type = event_toast_effect_good
title = feudalize_holding_interaction_notification
right_icon = scope:actor
if = {
limit = {
scope:target.title_province = {
OR = {
has_holding_type = nomad_holding
has_holding_type = herder_holding
}
}
}
if = {
limit = {
OR = {
scope:target.county.culture = scope:actor.culture
scope:target.county = { has_variable = was_razed }
}
}
}
else_if = {
limit = {
OR = {
government_has_flag = government_is_tribal
scope:target.county.culture = { has_same_culture_heritage = scope:actor.culture }
}
}
scope:target.county = {
add_county_modifier = {
modifier = mpo_feudalize_nomadic_land_modifier
years = 5
}
}
}
else = {
scope:target.county = {
add_county_modifier = {
modifier = mpo_feudalize_nomadic_land_modifier
years = 30
}
}
}
# SILK ROAD
scope:target = {
tgp_silk_road_feudalize_holding_effect = yes
}
}
if = {
limit = { exists = scope:target.title_province }
scope:target.title_province = {
set_holding_type = castle_holding
}
}
if = {
limit = {
scope:target = {
title_province = {
geographical_region = geographical_region:mpo_region_permafrost
}
}
}
if = {
limit = {
scope:target = { has_county_modifier = mpo_siberian_permafrost_modifier }
}
scope:target = { remove_county_modifier = mpo_siberian_permafrost_modifier }
}
else_if = {
limit = {
scope:target = { has_county_modifier = mpo_siberian_permafrost_modifier_bad }
}
scope:target = { remove_county_modifier = mpo_siberian_permafrost_modifier_bad }
}
}
}
}
}
# Interaction frequency determined by code, do not change
ai_frequency = 0
# Used to determine which holding should be feudalized over another AND how important this AI goal is compared to others, like creating titles and constructing new holdings
ai_will_do = {
base = 1500
}
}
tribalize_holding_interaction = {
category = interaction_category_uncategorized
hidden = yes
special_interaction = tribalize_holding
desc = tribalize_holding_interaction_desc
target_type = title
target_filter = actor_domain_titles
auto_accept = yes
is_shown = {
scope:actor = {
this = scope:recipient
government_has_flag = government_is_tribal
}
}
can_be_picked_title = {
scope:target = {
holder = scope:actor
is_capital_barony = no # we'll use the county in that case
trigger_if = {
limit = { tier <= tier_county }
title_province = {
OR = {
has_holding_type = nomad_holding
has_holding_type = herder_holding
}
}
}
trigger_else = {
custom_description = {
text = "feudalize_holding_interaction_title_not_county_or_below"
always = no
}
}
}
}
has_valid_target_showing_failures_only = {
scope:target = {
trigger_if = {
limit = { tier <= tier_county }
title_province = {
barony_controller = scope:actor
has_ongoing_construction = no
}
}
}
}
cost = {
gold = {
scope:actor = {
if = {
limit = {
scope:target.county = {
has_variable = was_razed
}
}
add = {
value = 15
desc = BASE
}
}
else = {
add = {
value = 50
desc = BASE
}
}
}
}
prestige = {
scope:actor = {
if = {
limit = {
scope:target.county = {
has_variable = was_razed
}
}
add = {
value = 25
desc = BASE
}
}
else_if = {
limit = {
scope:target.county.culture = scope:actor.culture
}
add = {
value = 50
desc = BASE
}
}
else_if = {
limit = {
scope:target.county.culture = { has_same_culture_heritage = scope:actor.culture }
}
add = {
value = 100
desc = BASE
}
}
else = {
add = {
value = 300
desc = BASE
}
}
}
}
}
on_accept = {
scope:actor = {
send_interface_toast = {
type = event_toast_effect_good
title = feudalize_holding_interaction_notification
right_icon = scope:actor
if = {
limit = {
OR = {
scope:target.county.culture = scope:actor.culture
scope:target.county = {
has_variable = was_razed
}
}
}
}
else = {
scope:target.county = {
add_county_modifier = {
modifier = mpo_feudalize_nomadic_land_modifier
years = 5
}
}
}
if = {
limit = { exists = scope:target.title_province }
scope:target.title_province = {
set_holding_type = tribal_holding
}
}
if = {
limit = {
scope:target = {
title_province = {
geographical_region = geographical_region:mpo_region_permafrost
}
}
}
if = {
limit = {
scope:target = { has_county_modifier = mpo_siberian_permafrost_modifier }
}
scope:target = { remove_county_modifier = mpo_siberian_permafrost_modifier }
}
else_if = {
limit = {
scope:target = { has_county_modifier = mpo_siberian_permafrost_modifier_bad }
}
scope:target = { remove_county_modifier = mpo_siberian_permafrost_modifier_bad }
}
}
}
}
}
# Interaction frequency determined by code, do not change
ai_frequency = 0
# Used to determine which holding should be feudalized over another AND how important this AI goal is compared to others, like creating titles and constructing new holdings
ai_will_do = {
base = 1500
}
}
support_feudalize_tribal_holding_interaction = {
category = interaction_category_vassal
icon = request_funding_interaction
desc = support_feudalize_tribal_holding_interaction_desc
target_type = title
target_filter = recipient_domain_titles
auto_accept = yes
is_shown = {
scope:actor = {
NOR = {
government_has_flag = government_is_tribal
government_has_flag = government_is_nomadic
}
}
scope:recipient = {
target_is_liege_or_above = scope:actor
NOR = {
government_has_flag = government_is_tribal
government_has_flag = government_is_nomadic
}
this != scope:actor
any_held_title = {
tier <= tier_county
title_province = {
OR = {
has_holding_type = tribal_holding
has_holding_type = nomad_holding
has_holding_type = herder_holding
}
}
}
}
}
can_be_picked_title = {
scope:target = {
is_capital_barony = no # we'll use the county in that case
trigger_if = {
limit = { tier <= tier_county }
title_province = {
barony_controller = scope:recipient
has_ongoing_construction = no
}
}
}
}
has_valid_target_showing_failures_only = {
scope:target = {
trigger_if = {
limit = { tier <= tier_county }
title_province = {
OR = {
has_holding_type = tribal_holding
has_holding_type = nomad_holding
has_holding_type = herder_holding
}
}
}
trigger_else = {
custom_description = {
text = "feudalize_holding_interaction_title_not_county_or_below"
always = no
}
}
}
}
cost = {
gold = {
value = 0
scope:actor = {
if = {
limit = {
has_treasury = no
}
add = {
value = feudalize_holding_interaction_cost
desc = BASE
}
if = {
limit = { # More expensive for admin to make these barbarians civilized...
government_has_flag = government_is_administrative
}
add = {
value = feudalize_holding_interaction_cost
multiply = 0.25
desc = has_admin_government
}
if = {
limit = { # Admin get a bonus for high bureaucracy levels
OR = {
has_realm_law = imperial_bureaucracy_2
has_realm_law = imperial_bureaucracy_3
}
}
subtract = {
value = feudalize_holding_interaction_cost
multiply = {
value = 0.1
if = {
limit = {
has_realm_law = imperial_bureaucracy_3
}
add = 0.15
}
}
desc = imperial_bureaucracy
}
}
}
}
}
}
treasury = {
value = 0
scope:actor = {
if = {
limit = {
has_treasury = yes
}
add = {
value = feudalize_holding_interaction_cost
desc = BASE
}
if = {
limit = { # More expensive for admin to make these barbarians civilized...
government_has_flag = government_is_administrative
}
add = {
value = feudalize_holding_interaction_cost
multiply = 0.25
desc = has_admin_government
}
if = {
limit = { # Admin get a bonus for high bureaucracy levels
OR = {
has_realm_law = imperial_bureaucracy_2
has_realm_law = imperial_bureaucracy_3
}
}
subtract = {
value = feudalize_holding_interaction_cost
multiply = {
value = 0.1
if = {
limit = {
has_realm_law = imperial_bureaucracy_3
}
add = 0.15
}
}
desc = imperial_bureaucracy
}
}
}
}
}
}
}
is_highlighted = {
# Highlight the interaction if we have the gold to spare
scope:actor = {
gold >= {
value = feudalize_holding_interaction_cost
if = {
limit = { # More expensive for admin to convert these... Barbarians...
government_has_flag = government_is_administrative
}
multiply = {
value = 1.25
desc = has_admin_government
}
}
}
}
}
on_accept = {
scope:recipient = {
# Add some opinion to make it worthwhile
add_opinion = {
target = scope:actor
modifier = grateful_opinion
opinion = 30
}
if = {
limit = {
scope:target.title_province = {
OR = {
has_holding_type = nomad_holding
has_holding_type = herder_holding
}
}
}
if = {
limit = {
OR = {
scope:target.culture = scope:recipient.culture
scope:target = { has_variable = was_razed }
}
}
}
else_if = {
limit = {
OR = {
government_has_flag = government_is_tribal
scope:target.culture = { has_same_culture_heritage = scope:recipient.culture }
}
}
scope:target = {
add_county_modifier = {
modifier = mpo_feudalize_nomadic_land_modifier
years = 5
}
}
}
else = {
scope:target = {
add_county_modifier = {
modifier = mpo_feudalize_nomadic_land_modifier
years = 30
}
}
}
# SILK ROAD
scope:target = {
tgp_silk_road_feudalize_holding_effect = yes
}
}
# Notify actor and recipient
scope:actor = {
if = { #Temple Citadel
limit = { government_has_flag = government_is_mandala }
send_interface_toast = {
type = event_toast_effect_good
title = sanctified_holding_interaction_notification
left_icon = scope:actor
right_icon = scope:target
if = {
limit = { exists = scope:target.title_province }
scope:target.title_province = {
set_holding_type = temple_citadel_holding
}
}
mandala_piety_gain_effect = { PIETY_AMOUNT = massive_piety_gain }
add_legitimacy_effect = { LEGITIMACY = medium_legitimacy_gain }
}
hidden_effect = {
scope:recipient = {
send_interface_toast = {
type = event_toast_effect_good
title = liege_sanctified_holding_interaction_notification
left_icon = scope:actor
right_icon = scope:target
show_as_tooltip = {
if = {
limit = { exists = scope:target.title_province }
scope:target.title_province = {
set_holding_type = temple_citadel_holding
}
}
}
}
}
}
}
else = { #Castle
send_interface_toast = {
type = event_toast_effect_good
title = feudalize_holding_interaction_notification
left_icon = scope:actor
right_icon = scope:target
if = {
limit = { exists = scope:target.title_province }
scope:target.title_province = {
set_holding_type = castle_holding
}
}
add_legitimacy_effect = { LEGITIMACY = medium_legitimacy_gain }
}
hidden_effect = {
scope:recipient = {
send_interface_toast = {
type = event_toast_effect_good
title = liege_feudalized_holding_interaction_notification
left_icon = scope:actor
right_icon = scope:target
show_as_tooltip = {
if = {
limit = { exists = scope:target.title_province }
scope:target.title_province = {
set_holding_type = castle_holding
}
}
}
}
}
}
}
}
}
scope:actor = {
# If you are admin, you get some influence for your efforts
if = {
limit = { government_has_flag = government_is_administrative }
change_influence = medium_influence_gain
}
}
}
# The AI doesn't check this very often - So if they have more important expenses, they will put their gold to better use first.
ai_frequency_by_tier = {
barony = 0
county = 0
duchy = 72
kingdom = 72
empire = 72
hegemony = 72
}
ai_targets = {
ai_recipients = vassals
max = 10
}
ai_potential = {
# Some basic triggers
is_at_war = no
is_adult = yes
# The AI only does this if they have plenty of gold to spare
gold >= { value = feudalize_holding_interaction_cost multiply = 4 }
# Warring AI don't do this - They want to spend their gold on war!
ai_has_warlike_personality = no
# Piety and Legitimacy, you say... ?
ai_has_pious_builder_personality = yes
NOT = { has_variable = conqueror }
}
ai_will_do = {
base = 25
modifier = {
scope:actor = { ai_has_economical_boom_personality = yes }
add = 50
}
modifier = {
scope:actor = { ai_has_pious_builder_personality = yes }
add = 100
}
}
}
turn_subject_into_mandala_interaction = {
category = interaction_category_vassal
icon = icon_scheme_coerce_tributary
ai_maybe = yes
ai_min_reply_days = 4
ai_max_reply_days = 9
can_send_despite_rejection = yes
ai_accept_negotiation = yes
popup_on_receive = yes
common_interaction = no
interface_priority = 4
ai_targets = {
ai_recipients = vassals
}
ai_target_quick_trigger = {
adult = yes
}
ai_frequency_by_tier = {
barony = 0
county = 0
duchy = 12
kingdom = 12
empire = 12
hegemony = 12
}
desc = turn_subject_into_mandala_interaction_desc
is_shown = {
scope:actor = { government_has_flag = government_is_mandala }
scope:recipient = {
NOT = { government_has_flag = government_is_mandala }
is_ai = yes
highest_held_title_tier >= tier_county
is_landed = yes
is_ruler = yes
OR = {
liege = scope:actor
AND = {
overlord = scope:actor
scope:actor = {
has_realm_law_flag = can_convert_all_subjects_to_mandalas
}
}
}
}
}
cooldown_against_recipient = { years = 10 }
is_valid_showing_failures_only = {
#Dharmic Mandalas require Dharmic converts
#Reformed Pagan Mandalas require reformed faiths
scope:actor.religion = {
switch = {
trigger = is_in_family
rf_eastern = {
scope:recipient.religion = {
is_in_family = rf_eastern
}
}
rf_pagan = {
scope:recipient.faith = { NOT = { has_doctrine_parameter = unreformed } }
scope:recipient.religion = {
is_in_family = rf_pagan
}
}
}
}
scope:recipient = {
NOT = { has_strong_hook = scope:actor }
is_at_war = no
}
scope:actor = { is_at_war = no }
custom_tooltip = {
text = cannot_take_overt_hostile_actions_against_diarch.tt
NOT = { scope:recipient ?= scope:actor.diarch }
}
custom_tooltip = {
text = head_of_faith_unable_to_change_government_desc
NOT = {
scope:recipient = { faith.religious_head ?= this }
}
}
}
#Spend piety
send_option = {
flag = piety
is_valid = {
scope:actor.piety >= piety_bribe_value
}
localization = PAY_PIETY
current_description = {
# Triggered desc so that we don't get a weird double tooltip.
triggered_desc = {
trigger = { scope:actor.piety >= piety_bribe_value }
desc = SCHEME_AGENT_PIETY_VALID
}
}
}
#Use hook
send_option = {
is_valid = {
scope:actor = { has_usable_hook = scope:recipient }
}
flag = hook
localization = SCHEME_HOOK
}
should_use_extra_icon = {
scope:actor = { has_usable_hook = scope:recipient }
}
extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds"
send_options_exclusive = no
auto_accept = {
custom_description = {
text = "spending_hook"
subject = scope:actor
object = scope:recipient
scope:hook = yes
}
}
on_send = {
scope:recipient = {
primary_title = { save_scope_as = demanded_mandala }
trigger_event = {
id = tgp_east_asia_interaction_events.1002
days = 5
}
}
}
on_accept = {
show_as_tooltip = {
change_to_mandala_interaction_effect = yes
}
}
on_decline = {
scope:recipient = { custom_tooltip = demand_mandala_interaction_vassal_refuses }
}
ai_potential = {
government_has_flag = government_is_mandala
is_adult = yes
}
ai_will_do = {
base = 100
modifier = {
factor = 0
scope:recipient = { highest_held_title_tier >= tier_county }
gold >= 300
}
modifier = {
factor = 0
scope:recipient = { highest_held_title_tier >= tier_duchy }
gold >= 600
}
modifier = {
factor = 0
scope:recipient = { highest_held_title_tier >= tier_kingdom }
gold >= 2000
}
}
ai_accept = {
base = -50
turn_subject_into_mandala_acceptance_modifier = yes
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -3189,7 +3189,7 @@ contract_assistance_interaction = {
is_shown = {
# Actor is Involved in Struggle
scope:actor = {
NOT = { government_has_flag = government_is_herder }
NOT = { government_has_flag = government_is_true_herder }
OR = {
any_character_struggle = {
involvement = involved

File diff suppressed because it is too large Load diff

View file

@ -179,7 +179,7 @@
faith = scope:actor.faith
faith = { has_doctrine = doctrine_pluralism_pluralistic }
government_has_flag = government_is_nomadic
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
}
}
@ -218,7 +218,7 @@
faith = scope:actor.faith
scope:actor.faith = { has_doctrine = doctrine_pluralism_pluralistic }
government_has_flag = government_is_nomadic
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
faith = { has_doctrine = doctrine_pluralism_pluralistic }
}
@ -257,7 +257,7 @@
NOR = {
faith = scope:actor.faith
government_has_flag = government_is_nomadic
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
scope:actor.faith = { has_doctrine = doctrine_pluralism_pluralistic }
faith = { has_doctrine = doctrine_pluralism_pluralistic }
@ -1199,7 +1199,7 @@
desc = CONFEDERATION_HERDER_REASON
trigger = {
scope:recipient = {
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
}
}
@ -1778,7 +1778,7 @@ promote_divergent_or_hybrid_culture_interaction = {
scope:recipient = {
OR = {
government_has_flag = government_is_nomadic
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
}
}
@ -1886,7 +1886,7 @@ promote_divergent_or_hybrid_culture_interaction = {
desc = CONFEDERATION_HERDER_REASON
trigger = {
scope:recipient = {
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
}
}
@ -2161,7 +2161,7 @@ inspire_conversion_interaction = {
scope:recipient = {
OR = {
government_has_flag = government_is_nomadic
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
}
}
@ -2270,7 +2270,7 @@ inspire_conversion_interaction = {
desc = CONFEDERATION_HERDER_REASON
trigger = {
scope:recipient = {
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
}
}
@ -2828,7 +2828,7 @@ migration_interaction = {
scope:recipient = {
NOR = {
government_has_flag = government_is_nomadic
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
}
}
@ -2847,7 +2847,7 @@ migration_interaction = {
}
modifier = { # Herders move away immediately
trigger = {
scope:recipient = { government_has_flag = government_is_herder }
scope:recipient = { government_has_flag = government_is_true_herder }
}
add = 150
desc = MIGRATION_INTERACTION_HERDER
@ -3109,7 +3109,7 @@ migration_interaction = {
desc = JUST_SETTLED_REASON
scope:recipient = {
is_tributary = yes
NOT = { government_has_flag = government_is_herder }
NOT = { government_has_flag = government_is_true_herder }
capital_county = {
title_held_years < 3
}
@ -3214,7 +3214,7 @@ migration_interaction = {
# The recipient is a Herder
modifier = {
scope:recipient = { government_has_flag = government_is_herder }
scope:recipient = { government_has_flag = government_is_true_herder }
add = 10
}
@ -4859,7 +4859,7 @@ mpo_ask_for_herd_interaction = {
}
scope:recipient = {
NOT = {
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
}
}
@ -5033,7 +5033,7 @@ mpo_ask_for_herd_interaction = {
if = {
limit = { #herders cannot give you more herd
scope:recipient = {
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
}
scope:actor = {
@ -7033,7 +7033,7 @@ feudalize_nomadic_holding_interaction = {
this = scope:recipient
NOR = {
government_has_flag = government_is_nomadic
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
}
}
@ -7289,7 +7289,7 @@ feudalize_herder_holding_interaction = {
this = scope:recipient
NOR = {
government_has_flag = government_is_nomadic
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
}
}
@ -8339,7 +8339,7 @@ mpo_offer_submission_or_ruin = {
#HERDER
modifier = {
scope:recipient = { government_has_flag = government_is_herder }
scope:recipient = { government_has_flag = government_is_true_herder }
add = 10000
desc = HERDER_REASON
}
@ -9261,7 +9261,7 @@ mpo_offer_submission_or_ruin = {
add = -50
scope:recipient = {
NOT = {
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
}
scope:send_tribute = yes
@ -9497,7 +9497,7 @@ mpo_offer_submission_or_ruin = {
is_shown = {
scope:recipient = {
NOT = {
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
}
}
@ -9511,7 +9511,7 @@ mpo_offer_submission_or_ruin = {
scope:recipient = {
OR = {
highest_held_title_tier < tier_duchy
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
}
}
@ -9524,7 +9524,7 @@ mpo_offer_submission_or_ruin = {
is_shown = {
scope:recipient = {
NOT = {
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
highest_held_title_tier >= tier_duchy
}
@ -9543,7 +9543,7 @@ mpo_offer_submission_or_ruin = {
is_shown = {
scope:recipient = {
NOR = {
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
government_has_flag = government_is_tribal
government_has_flag = government_is_nomadic
}
@ -9565,7 +9565,7 @@ mpo_offer_submission_or_ruin = {
is_shown = {
scope:recipient = {
NOT = {
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
}
}
@ -10264,7 +10264,7 @@ join_confederation_interaction = {
faith = scope:actor.faith
faith = { has_doctrine = doctrine_pluralism_pluralistic }
government_has_flag = government_is_nomadic
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
}
}
@ -10303,7 +10303,7 @@ join_confederation_interaction = {
faith = scope:actor.faith
scope:actor.faith = { has_doctrine = doctrine_pluralism_pluralistic }
government_has_flag = government_is_nomadic
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
faith = { has_doctrine = doctrine_pluralism_pluralistic }
}
@ -10342,7 +10342,7 @@ join_confederation_interaction = {
NOR = {
faith = scope:actor.faith
government_has_flag = government_is_nomadic
government_has_flag = government_is_herder
government_has_flag = government_is_true_herder
}
scope:actor.faith = { has_doctrine = doctrine_pluralism_pluralistic }
faith = { has_doctrine = doctrine_pluralism_pluralistic }

View file

@ -0,0 +1,911 @@

#Tribute Missions - a set of hidden Character Interactions, triggered by the Pay Tribute decision - what do you send?
tribute_mission_gold_interaction = {
hidden = yes
popup_on_receive = yes
pause_on_receive = yes
ai_min_reply_days = 0
ai_max_reply_days = 0
#Small Tribute
send_option = {
flag = small_gold_tribute
is_valid = {
scope:actor = {
gold >= {
value = small_gold_tribute_value
if = {
limit = { has_variable = offered_gold_value }
add = var:offered_gold_value
}
}
}
}
}
#Adequate Tribute
send_option = {
flag = adequate_gold_tribute
is_valid = {
scope:actor = {
gold >= {
value = adequate_gold_tribute_value
if = {
limit = { has_variable = offered_gold_value }
add = var:offered_gold_value
}
}
}
}
}
#Excessive Tribute
send_option = {
flag = excessive_gold_tribute
is_valid = {
scope:actor = {
gold >= {
value = excessive_gold_tribute_value
if = {
limit = { has_variable = offered_gold_value }
add = var:offered_gold_value
}
}
}
}
}
on_accept = {
scope:actor = {
#Gold
switch = {
trigger = yes
scope:small_gold_tribute ?= {
#Define how much gold it is
set_variable = {
name = tribute_mission_type
value = flag:small_gold_tribute
}
set_or_change_offered_tribute_value_effect = {
TYPE = gold
VALUE = small_gold_tribute_value
}
custom_tooltip = tribute_mission_gold_interaction.small_reserved_gold
}
scope:adequate_gold_tribute ?= {
#Define how much gold it is
set_variable = {
name = tribute_mission_type
value = flag:adequate_gold_tribute
}
set_or_change_offered_tribute_value_effect = {
TYPE = gold
VALUE = adequate_gold_tribute_value
}
custom_tooltip = tribute_mission_gold_interaction.adequate_reserved_gold
}
scope:excessive_gold_tribute ?= {
#Define how much gold it is
set_variable = {
name = tribute_mission_type
value = flag:excessive_gold_tribute
}
set_or_change_offered_tribute_value_effect = {
TYPE = gold
VALUE = excessive_gold_tribute_value
}
custom_tooltip = tribute_mission_gold_interaction.excessive_reserved_gold
}
}
#Some Mandala piety
show_as_tooltip = { tribute_mission_mandala_piety_effect = yes }
#Travel
tribute_mission_set_up_tribute_travel_effect = yes
}
}
auto_accept = yes
ai_will_do = {
base = 50
}
}
tribute_mission_herd_interaction = {
hidden = yes
popup_on_receive = yes
pause_on_receive = yes
ai_min_reply_days = 0
ai_max_reply_days = 0
#Small Tribute
send_option = {
flag = small_herd_tribute
is_valid = {
scope:actor = {
domicile ?= {
herd >= {
value = {
add = small_herd_tribute_value
if = {
limit = { has_variable = offered_herd_value }
add = var:offered_herd_value
}
}
}
}
}
}
}
#Adequate Tribute
send_option = {
flag = adequate_herd_tribute
is_valid = {
scope:actor = {
domicile ?= {
herd >= {
value = {
add = adequate_herd_tribute_value
if = {
limit = { has_variable = offered_herd_value }
add = var:offered_herd_value
}
}
}
}
}
}
}
#Excessive Tribute
send_option = {
flag = excessive_herd_tribute
is_valid = {
scope:actor = {
domicile ?= {
herd >= {
value = {
add = excessive_herd_tribute_value
if = {
limit = { has_variable = offered_herd_value }
add = var:offered_herd_value
}
}
}
}
}
}
}
on_accept = {
scope:actor = {
#Herd
switch = {
trigger = yes
scope:small_herd_tribute ?= {
#Define how much herd it is
set_variable = {
name = tribute_mission_type
value = flag:small_herd_tribute
}
#set_or_change_offered_tribute_value_effect = { #Herd value scale by era shenanigans here
# TYPE = herd
# VALUE = small_herd_tribute_value
#}
set_variable = {
name = offered_herd_value
value = domicile.small_herd_tribute_value
}
custom_tooltip = tribute_mission_herd_interaction.small_reserved_herd
}
scope:adequate_herd_tribute ?= {
#Define how much herd it is
set_variable = {
name = tribute_mission_type
value = flag:adequate_herd_tribute
}
#set_or_change_offered_tribute_value_effect = {
# TYPE = herd
# VALUE = adequate_herd_tribute_value
#}
set_variable = {
name = offered_herd_value
value = domicile.adequate_herd_tribute_value
}
custom_tooltip = tribute_mission_herd_interaction.adequate_reserved_herd
}
scope:excessive_herd_tribute ?= {
#Define how much herd it is
set_variable = {
name = tribute_mission_type
value = flag:excessive_herd_tribute
}
#set_or_change_offered_tribute_value_effect = {
# TYPE = herd
# VALUE = excessive_herd_tribute_value
#}
set_variable = {
name = offered_herd_value
value = domicile.excessive_herd_tribute_value
}
custom_tooltip = tribute_mission_herd_interaction.excessive_reserved_herd
}
}
#Some Mandala piety
show_as_tooltip = { tribute_mission_mandala_piety_effect = yes }
#Travel
tribute_mission_set_up_tribute_travel_effect = yes
}
}
auto_accept = yes
ai_will_do = {
base = 50
}
}
tribute_mission_artifact_interaction = {
hidden = yes
target_type = artifact
target_filter = actor_artifacts
ai_min_reply_days = 0
ai_max_reply_days = 0
can_be_picked_artifact = {
scope:target = {
is_suitable_artifact_tribute_trigger = yes
}
}
on_accept = {
scope:target = {
set_variable = is_tribute_mission_artifact
}
scope:actor = {
#Save the Artifact
set_variable = {
name = tribute_mission_type
value = flag:artifact_tribute
}
set_variable = {
name = offered_artifact
value = scope:target
}
custom_tooltip = tribute_mission_artifact_interaction.tooltip
#Some Mandala piety
show_as_tooltip = { tribute_mission_mandala_piety_effect = yes }
#Travel
tribute_mission_set_up_tribute_travel_effect = yes
}
}
auto_accept = {
OR = {
scope:actor = { subject_standing >= 0 }
scope:recipient = { is_ai = no }
}
}
ai_accept = {
base = 0
modifier = {
add = 100
desc = ARTIFACT_REASON
}
modifier = {
add = -80
NOT = {
can_equip_artifact = scope:target
}
desc = ARTIFACT_NOT_EQUIPPABLE_REASON
}
modifier = {
add = -40
NOT = {
can_benefit_from_artifact = scope:target
}
desc = ARTIFACT_NOT_BENEFIT_REASON
}
modifier = {
add = -500
scope:target = {
has_variable = unwanted_artifact
}
#No harm in reusing the wording
desc = ARTIFACT_CURSED_REASON
}
modifier = {
add = -1000
scope:target = {
has_variable = cursed_artifact
}
desc = ARTIFACT_CURSED_REASON
}
modifier = {
add = 100
exists = scope:target.var:banner_dynasty
exists = scope:recipient.dynasty
scope:recipient = scope:target.var:banner_dynasty.dynast
desc = ARTIFACT_DYNASTY_BANNER_REASON
}
modifier = {
add = -200
OR = {
exists = scope:target.var:banner_dynasty
exists = scope:target.var:banner_house
}
exists = scope:recipient.house
trigger_if = {
limit = { exists = scope:target.var:banner_dynasty }
scope:target.var:banner_dynasty != scope:recipient.dynasty
}
trigger_else = {
scope:target.var:banner_house != scope:recipient.house
}
desc = ARTIFACT_USELESS_BANNER_REASON
}
}
ai_will_do = {
base = 50
}
}
tribute_mission_concubine_interaction = {
hidden = yes
populate_recipient_list = {
scope:actor = {
every_courtier_or_guest = {
limit = {
can_be_offered_as_concubine_to_character_trigger = {
GIVER = scope:actor
CHARACTER = scope:actor.overlord
}
has_any_disease_trigger = no
has_easily_mocked_physical_attribute_trigger = no
}
add_to_list = characters
}
}
}
ai_min_reply_days = 0
ai_max_reply_days = 0
can_be_picked = {
is_adult = yes
}
auto_accept = {
OR = {
scope:actor = { subject_standing >= 0 }
scope:recipient = { is_ai = no }
}
}
on_accept = {
scope:actor = {
#Save the concubine
set_variable = {
name = tribute_mission_type
value = flag:concubine_tribute
}
set_variable = {
name = offered_concubine
value = scope:secondary_recipient
}
scope:secondary_recipient = {
add_character_flag = {
flag = cannot_be_diarch # just enough to make sure they don't succeed to the diarchy while en route
years = 2
}
}
custom_tooltip = tribute_mission_concubine_interaction.tooltip
#Some Mandala piety
show_as_tooltip = { tribute_mission_mandala_piety_effect = yes }
#Travel
tribute_mission_set_up_tribute_travel_effect = yes
}
}
ai_accept = {
base = 50
modifier = {
add = {
value = 50
multiply = scope:secondary_recipient.num_of_good_genetic_traits
}
scope:secondary_recipient = {
num_of_good_genetic_traits > 0
trigger_if = {
limit = {
is_female = yes
}
is_aging_character = no
}
}
desc = AI_POSITIVE_TRAIT_REASON
}
modifier = {
add = {
value = 50
}
scope:secondary_recipient = {
is_lowborn = no
trigger_if = {
limit = {
is_female = yes
}
is_aging_character = no
}
}
desc = AI_DYNASTY_PRESTIGE_REASON_NOBLE
}
modifier = {
add = {
value = -50
multiply = scope:secondary_recipient.num_of_bad_genetic_traits
}
scope:secondary_recipient = {
OR = {
num_of_bad_genetic_traits > 0
}
trigger_if = {
limit = {
is_female = yes
}
is_aging_character = no
}
}
desc = AI_NEGATIVE_TRAIT_REASON
}
modifier = {
add = {
value = -50
}
scope:secondary_recipient = {
is_lowborn = yes
num_of_good_genetic_traits = 0
trigger_if = {
limit = {
is_female = yes
}
is_aging_character = no
}
}
desc = AI_DYNASTY_PRESTIGE_REASON_LOWBORN_NO_POSITIVE_TRAIT
}
opinion_modifier = { # Opinion of you
who = scope:recipient
opinion_target = scope:actor
multiplier = 1.0
desc = AI_OPINION_REASON
}
opinion_modifier = { # Opinion of concubine
who = scope:recipient
opinion_target = scope:secondary_recipient
multiplier = 0.25
desc = AI_OPINION_REASON
}
compare_modifier = { # Recipient is reluctant to marry old women (procreation is a key factor)
trigger = {
scope:secondary_recipient = {
is_young_character = no
is_female = yes
}
}
target = scope:secondary_recipient
value = age
multiplier = -5.0
step = 1
offset = -29
desc = MARRY_AGE
}
modifier = { # A Recipient is unwilling to take a same-sex concubine if their faith doesn't support it
add = -1000
scope:recipient = {
allowed_to_marry_same_sex_trigger = no
sex_same_as = scope:secondary_recipient
}
desc = SAME_SEX_MARRIAGE_FAITH_REASON_RECIPIENT
}
modifier = { # Unwilling if they don't have a batch of kids and opposite sex consorts to handle that situation
add = -200
scope:recipient = {
allowed_to_marry_same_sex_trigger = yes
sex_same_as = scope:secondary_recipient
trigger_if = {
limit = {
NOT = {
any_consort = {
can_have_children_with = { CHARACTER = scope:recipient }
fertility > 0.1
}
}
}
any_child = { is_player_heir_of = root }
}
trigger_else = {
always = no
}
}
desc = AI_NO_FERTILITY_REASON
}
modifier = {
add = 50
scope:recipient = {
is_attracted_to_gender_of = scope:secondary_recipient
}
desc = AI_ATTRACTION_REASON
}
#More/Less likely based on difference in rank between actor and recipient
modifier = {
add = 20
scope:actor = {
tier_difference = {
target = scope:recipient
value = 1
}
}
desc = AI_RANK_DIFF
}
modifier = {
add = 30
scope:actor = {
tier_difference = {
target = scope:recipient
value = 2
}
}
desc = AI_RANK_DIFF
}
modifier = {
add = 40
scope:actor = {
tier_difference = {
target = scope:recipient
value = 3
}
}
desc = AI_RANK_DIFF
}
modifier = {
add = 50
scope:actor = {
tier_difference = {
target = scope:recipient
value = 4
}
}
desc = AI_RANK_DIFF
}
modifier = {
add = 60
scope:actor = {
tier_difference = {
target = scope:recipient
value = 5
}
}
desc = AI_RANK_DIFF
}
modifier = {
add = -20
scope:actor = {
tier_difference = {
target = scope:recipient
value = -1
}
}
desc = AI_RANK_DIFF
}
modifier = {
add = -30
scope:actor = {
tier_difference = {
target = scope:recipient
value = -2
}
}
desc = AI_RANK_DIFF
}
modifier = {
add = -40
scope:actor = {
tier_difference = {
target = scope:recipient
value = -3
}
}
desc = AI_RANK_DIFF
}
modifier = {
add = -50
scope:actor = {
tier_difference = {
target = scope:recipient
value = -4
}
}
desc = AI_RANK_DIFF
}
modifier = {
add = -60
scope:actor = {
tier_difference = {
target = scope:recipient
value = -5
}
}
desc = AI_RANK_DIFF
}
modifier = {
add = -250
scope:secondary_recipient = {
has_std_trigger = yes
}
desc = AI_STD_REASON
}
modifier = {
add = -250
scope:secondary_recipient = {
has_epidemic_disease_trigger = yes
}
desc = AI_CONTAGIOUS_REASON
}
modifier = {
add = -5000
scope:secondary_recipient = {
fertility <= 0
}
desc = AI_FERTILITY_REASON
}
# Unity modifiers
evaluate_action_increasing_house_unity = {
VALUE = 100
}
}
ai_will_do = {
base = 50
}
}
tribute_mission_eunuch_interaction = {
hidden = yes
populate_recipient_list = {
scope:actor = {
every_courtier = {
limit = {
tribute_mission_is_available_eunuch_trigger = yes
NAND = {
faith = { has_doctrine = doctrine_theocracy_temporal }
this = scope:actor.cp:councillor_court_chaplain
}
}
add_to_list = characters
}
}
}
ai_min_reply_days = 0
ai_max_reply_days = 0
can_be_picked = {
has_any_disease_trigger = no
}
auto_accept = {
OR = {
scope:actor = { subject_standing >= 0 }
scope:recipient = { is_ai = no }
}
}
on_accept = {
scope:actor = {
#Save the eunuch
set_variable = {
name = tribute_mission_type
value = flag:eunuch_tribute
}
set_variable = {
name = offered_eunuch
value = scope:secondary_recipient
}
custom_tooltip = tribute_mission_eunuch_interaction.tooltip
stress_impact = {
compassionate = medium_stress_impact_gain
sadistic = minor_stress_impact_loss
}
#Some Mandala piety
show_as_tooltip = { tribute_mission_mandala_piety_effect = yes }
#Travel
tribute_mission_set_up_tribute_travel_effect = yes
}
scope:secondary_recipient = {
if = {
limit = { is_eunuch_trigger = no }
add_opinion = {
modifier = slated_for_castration_opinion
target = scope:actor
opinion = -50
}
custom_tooltip = tribute_mission_eunuch_interaction.slated_for_castration
#Escape or no escape?
hidden_effect = {
random_list = {
30 = {
modifier = {
has_trait = brave
add = 10
}
modifier = {
has_trait = wrathful
add = 10
}
modifier = {
add = prowess
}
#I'm outta here!
add_character_flag = tribute_mission_attempt_escape
scope:actor = {
trigger_event = {
id = tribute_mission.9760
days = { 10 20 }
}
}
}
70 = {
modifier = {
has_trait = craven
add = 10
}
modifier = {
has_trait = lazy
add = 10
}
#No escape
}
}
}
}
}
}
ai_accept = {
base = -50
######### OPINION OF TRIBUTARY
opinion_modifier = {
who = scope:recipient
opinion_target = scope:actor
multiplier = 0.5
desc = AI_OPINION_REASON
}
######### OPINION OF EUNUCH
opinion_modifier = {
who = scope:recipient
opinion_target = scope:secondary_recipient
multiplier = 0.5
desc = AI_OPINION_REASON
}
######## EUNUCH AGE
modifier = {
add = {
value = 50
subtract = scope:secondary_recipient.age
}
desc = AI_REASON_EUNUCH_AGE
}
######## EUNUCH SKILLS
modifier = {
add = {
add = scope:secondary_recipient.diplomacy
add = scope:secondary_recipient.intrigue
add = scope:secondary_recipient.stewardship
add = scope:secondary_recipient.martial
add = scope:secondary_recipient.learning
}
desc = AI_REASON_EUNUCH_SKILLS
}
######## EUNUCH SKILLS
modifier = {
scope:secondary_recipient = {
has_trait = beardless_eunuch
}
add = 25
desc = AI_REASON_BEARDLESS_EUNUCH
}
}
ai_will_do = {
base = 50
}
}
#Player only
tribute_mission_bunga_mas_interaction = {
hidden = yes
target_type = artifact
target_filter = actor_artifacts
ai_min_reply_days = 0
ai_max_reply_days = 0
can_be_picked_artifact = {
scope:target = { var:bunga_mas_created_by ?= scope:actor }
}
on_accept = {
scope:target = {
set_variable = is_tribute_mission_artifact
}
scope:actor = {
#Save the Artifact
set_variable = {
name = tribute_mission_type
value = flag:bunga_mas_tribute
}
set_variable = {
name = offered_bunga_mas
value = scope:target
}
custom_tooltip = tribute_mission_bunga_mas_interaction.tooltip
#Some Mandala piety
show_as_tooltip = { tribute_mission_mandala_piety_effect = yes }
#Travel
tribute_mission_set_up_tribute_travel_effect = yes
}
}
auto_accept = {
always = yes
}
ai_accept = {
base = 100
}
ai_will_do = {
base = 50
}
}