Merge branch 'Minority-Community-Branch'

This commit is contained in:
Fishedotjpg 2026-03-04 01:36:51 +00:00
commit a51a548e46
111 changed files with 194170 additions and 1017 deletions

View file

@ -0,0 +1,887 @@
activity_camp_party = {
is_shown = {
has_ep3_dlc_trigger = yes
has_government = landless_adventurer_government
is_adult = yes
#Every other activity must be blocked until an uncrowned AI crowns themselves
trigger_if = {
limit = {
is_ai = yes
}
NOT = {
has_realm_law = uncrowned
}
}
}
can_start_showing_failures_only = {
NOT = { is_activity_type_on_cooldown = activity_camp_party }
is_available = yes
age >= 16
}
is_valid = {
scope:host = {
is_alive = yes
is_imprisoned = no
has_government = landless_adventurer_government
NOT = { is_incapable = yes }
}
}
on_invalidated = {
# Host becomes incapable
if = {
limit = {
scope:host = { is_incapable = yes }
}
scope:activity = {
activity_type = { save_scope_as = activity_type }
}
scope:host = {
trigger_event = activity_system.0330
}
every_attending_character = {
limit = { this != scope:host }
trigger_event = activity_system.0331
}
}
}
province_filter = domicile_domain
ai_province_filter = domicile_domain
max_province_icons = 1
allow_zero_guest_invites = no
open_invite = no
province_description = {
desc = activity_camp_party_province_desc
}
province_score = {
add = camp_party_province_reference_value
}
cost = {
gold = {
add = {
add = {
value = standard_camp_party_activity_cost
desc = hunt_base_cost
}
if = {
limit = {
has_character_modifier = journey_communal_modifier
}
multiply = {
value = 0.8
desc = journey_communal_modifier
}
}
}
}
}
ui_predicted_cost = {
gold = {
# Base Cost
value = standard_camp_party_activity_cost
# Make it a multiple of 5 (rounded up)
divide = 5
ceiling = yes
multiply = 5
}
}
cooldown = { years = standard_camp_party_cooldown_time }
###################
# PHASES AND OPTIONS
###################
phases = {
phase_camp_party = {
is_predefined = yes
location_source = pickable
ai_will_do = {
value = 0
add = {
value = 30
desc = "Base test value"
}
}
on_phase_active = {
if = {
limit = { this = scope:host }
scope:host = {
trigger_event = {
id = ep3_camp_party.0009
days = 89
}
}
scope:activity = {
#Phase progression
progress_activity_phase_after = { days = 90 }
#Loc
activity_location = { save_scope_as = location }
}
#Arrival event
trigger_event = ep3_camp_party.0001
}
}
on_monthly_pulse = {
if = {
limit = { this = scope:host }
trigger_event = { on_action = camp_party_destination_events }
}
}
}
}
options = {
#Food options: upgrades locked behind Supply Tent
camp_party_option_food = {
camp_party_food_none = { #Default
default = yes
ai_will_do = {
value = 0
# Financial preference.
add = activity_option_likes_cheap_expense_value
# Quantity preference.
add = activity_option_food_prefers_small_volume_value
}
}
camp_party_food_simple = { #locked behind Supply Tent
is_shown = { always = yes }
is_valid = {
custom_tooltip = {
text = camp_party_food_options_invalid
domicile ?= {
has_domicile_parameter = camp_unlocks_camp_party_food_option
}
}
}
cost = {
gold = {
add = {
desc = camp_party_food_simple
add = {
value = 5
desc = camp_party_food_simple
}
add = {
value = 5
multiply = activity_cost_scale_by_tier
subtract = 5
desc = activity_cost_scale_by_tier_desc
}
add = {
value = 5
multiply = activity_cost_scale_by_era
subtract = 5
desc = activity_cost_scale_by_era_desc
}
if = {
limit = {
dynasty ?= {
has_dynasty_perk = law_legacy_1
}
}
subtract = {
value = 5
add = {
value = 5
multiply = activity_cost_scale_by_tier
subtract = 5
}
add = {
value = 5
multiply = activity_cost_scale_by_era
subtract = 5
}
multiply = law_legacy_cost_reduction_mult
desc = law_legacy_1_name
}
}
min = 0
}
}
}
ai_will_do = {
value = 0
# Financial preference.
add = activity_option_likes_middling_expense_value
# Quantity preference.
## We just use slightly reduced quantity prefs here.
add = {
value = activity_option_prefers_large_volume_value
multiply = 0.3
}
}
}
camp_party_food_lavish = {
is_shown = { always = yes }
is_valid = {
custom_tooltip = {
text = camp_party_food_options_invalid
domicile ?= {
has_domicile_parameter = camp_unlocks_camp_party_food_option
}
}
}
cost = {
gold = {
add = {
desc = camp_party_food_lavish
add = {
value = 15
desc = camp_party_food_lavish
}
add = {
value = 15
multiply = activity_cost_scale_by_tier
subtract = 15
desc = activity_cost_scale_by_tier_desc
}
add = {
value = 15
multiply = activity_cost_scale_by_era
subtract = 15
desc = activity_cost_scale_by_era_desc
}
if = {
limit = {
dynasty ?= {
has_dynasty_perk = law_legacy_1
}
}
subtract = {
value = 15
add = {
value = 15
multiply = activity_cost_scale_by_tier
subtract = 15
}
add = {
value = 15
multiply = activity_cost_scale_by_era
subtract = 15
}
multiply = law_legacy_cost_reduction_mult
desc = law_legacy_1_name
}
}
min = 0
}
}
}
ai_will_do = {
value = 0
# Financial preference.
add = activity_option_likes_middling_expense_value
# Quantity preference.
## We just use slightly reduced quantity prefs here.
add = {
value = activity_option_prefers_large_volume_value
multiply = 0.6
}
}
}
}
#Drinks options: upgrades locked behind Mess Tent & Mobile Brewery
camp_party_option_drinks = {
camp_party_drinks_none = { #Default
default = yes
ai_will_do = {
value = 0
# Financial preference.
add = activity_option_likes_cheap_expense_value
# Quantity preference.
add = activity_option_food_prefers_small_volume_value
}
}
camp_party_drinks_adequate = { #locked behind Mess Tent
is_shown = { always = yes }
is_valid = {
custom_tooltip = {
text = camp_party_drinks_adequate_invalid
domicile ?= {
has_domicile_building_or_higher = mess_tent_01
}
}
}
cost = {
gold = {
add = {
desc = camp_party_drinks_adequate
add = {
value = 10
desc = camp_party_drinks_adequate
}
add = {
value = 10
multiply = activity_cost_scale_by_tier
subtract = 10
desc = activity_cost_scale_by_tier_desc
}
add = {
value = 10
multiply = activity_cost_scale_by_era
subtract = 10
desc = activity_cost_scale_by_era_desc
}
if = {
limit = {
dynasty ?= {
has_dynasty_perk = law_legacy_1
}
}
subtract = {
value = 10
add = {
value = 10
multiply = activity_cost_scale_by_tier
subtract = 10
}
add = {
value = 10
multiply = activity_cost_scale_by_era
subtract = 10
}
multiply = law_legacy_cost_reduction_mult
desc = law_legacy_1_name
}
}
min = 0
}
}
}
ai_will_do = {
value = 0
# Financial preference.
add = activity_option_likes_middling_expense_value
# Quantity preference.
## We just use slightly reduced quantity prefs here.
add = {
value = activity_option_prefers_large_volume_value
multiply = 0.3
}
}
}
camp_party_drinks_abundant = { #locked behind Mobile Brewery
is_shown = { always = yes }
is_valid = {
custom_tooltip = {
text = camp_party_drinks_abundant_invalid
domicile ?= {
has_domicile_building_or_higher = mess_tent_brewers
}
}
}
cost = {
gold = {
add = {
desc = camp_party_drinks_abundant
add = {
value = 20
desc = camp_party_drinks_abundant
}
add = {
value = 20
multiply = activity_cost_scale_by_tier
subtract = 20
desc = activity_cost_scale_by_tier_desc
}
add = {
value = 20
multiply = activity_cost_scale_by_era
subtract = 20
desc = activity_cost_scale_by_era_desc
}
if = {
limit = {
dynasty ?= {
has_dynasty_perk = law_legacy_1
}
}
subtract = {
value = 35
add = {
value = 35
multiply = activity_cost_scale_by_tier
subtract = 35
}
add = {
value = 35
multiply = activity_cost_scale_by_era
subtract = 35
}
multiply = law_legacy_cost_reduction_mult
desc = law_legacy_1_name
}
}
min = 0
}
}
}
ai_will_do = {
value = 0
# Financial preference.
add = activity_option_likes_middling_expense_value
# Quantity preference.
## We just use slightly reduced quantity prefs here.
add = {
value = activity_option_prefers_large_volume_value
multiply = 0.6
}
}
}
}
}
max_guest_arrival_delay_time = { weeks = 1 }
###################
# ACTIVITY-SPECIFIC PULSES
###################
pulse_actions = {
entries = {
apa_bonded_by_fire
apa_taught_repair
apa_revelry_hangover_camp
apa_local_food_camp
apa_lauded_food_camp
apa_guest_of_honor_impressed
apa_cultural_acceptance
apa_camp_host_gifted
apa_fireside_chat_shared_stories_martial
apa_fireside_chat_shared_stories_learning
apa_fireside_chat_shared_stories_diplomacy
apa_fireside_chat_shared_stories_stewardship
apa_fireside_chat_shared_stories_intrigue
apa_fireside_chat_shared_drinks
apa_fireside_chat_inspiring_speech
apa_camp_party_sad_lonesome
apa_camp_party_shadows_in_the_dark
apa_camp_party_fortress_of_solitude
apa_camp_party_lecture
apa_camp_party_tales_of_distant_lands
apa_camp_party_tales_of_war
apa_camp_party_tales_of_lands_lost
apa_camp_party_blademaster_sparring
apa_camp_party_tales_of_piety
#Re-used
host_gains_diplo_xp
host_gains_intrigue_xp
hook_trusting_guest
}
chance_of_no_event = 2
}
on_start = {
scope:activity ?= {
activity_setup_special_type_progression_effect = yes
if = {
limit = {
has_activity_option = {
category = camp_party_option_food
option = camp_party_food_simple
}
}
activity_special_type_progression_variable = { NUM = 25 }
}
else_if = {
limit = {
has_activity_option = {
category = camp_party_option_food
option = camp_party_food_lavish
}
}
activity_special_type_progression_variable = { NUM = 50 }
}
}
}
###################
# AI VALUES
###################
# desc is only shown in debug AI watch window
ai_will_do = {
value = 50
if = {
limit = {
has_trait = lazy
}
add = -10
}
#Can you actually afford this?
if = {
limit = {
domicile.provisions <= 100
}
add = -75
}
}
ai_check_interval = 60
ai_will_select_province = {
value = 10
}
###################
# GUEST HANDLING
###################
host_intents = {
default = reduce_stress_intent
intents = { reduce_stress_intent befriend_attendee_intent fireside_chat_intent }
}
guest_intents = {
intents = { reduce_stress_intent befriend_attendee_intent }
default = reduce_stress_intent
}
can_be_activity_guest = {
OR = { #Follower
AND = {
is_healthy = yes
is_available = yes
age >= 16
is_ai = yes
liege = scope:host
location = scope:host.location
}
AND = { #Local lord
is_healthy = yes
is_available = yes
age >= 16
is_ai = yes
top_liege = this
location = scope:host.location
}
}
}
guest_invite_rules = {
defaults = {
1 = activity_invite_rule_followers
2 = activity_invite_rule_local_lord
2 = activity_invite_rule_friends
2 = activity_invite_rule_potential_friends
2 = activity_invite_rule_lovers
2 = activity_invite_rule_potential_lovers
}
}
special_guests = {
camp_party_honorary_guest = {
is_required = no
can_pick = {
this != scope:host
is_healthy = yes
is_available = yes
age >= 16
is_ai = yes
top_liege = this
location = scope:host.location
}
ai_will_do = {
value = 10
}
}
}
travel_entourage_selection = {
weight = {
value = 10
if = {
limit = {
NOT = { is_in_list = special_guests }
}
multiply = 0
}
}
invite_rule_order = 1
# Up to how many characters to select for a player
max = 2
# Up to how many characters to select for an AI
ai_max = 2
}
max_guests = 50 #Theoretically everyone, practically only around 2-10 usually
guest_join_chance = {
base = 50 #Everyone should accept, but...
base_activity_modifier = yes
# Scripted Modifiers
activity_guest_shared_ai_accept_modifier = yes
modifier = {
is_courtier_of = scope:host
scope:host = {
has_government = landless_adventurer_government
}
add = 100
desc = ACTIVITY_GUEST_ADVENTURER_REASON
}
modifier = { #Emperors
primary_title.tier = tier_empire
add = -100
desc = ACTIVITY_GUEST_LANDLESS_REASON
}
modifier = { #Kings
primary_title.tier = tier_kingdom
add = -75
desc = ACTIVITY_GUEST_LANDLESS_REASON
}
modifier = { #Dukes
primary_title.tier = tier_duchy
add = -50
desc = ACTIVITY_GUEST_LANDLESS_REASON
}
modifier = { #Counts
primary_title.tier = tier_county
add = -25
desc = ACTIVITY_GUEST_LANDLESS_REASON
}
modifier = { #Barons
primary_title.tier = tier_barony
add = -5
desc = ACTIVITY_GUEST_LANDLESS_REASON
}
}
###################
# GRAPHICS
###################
#Backgrounds mostly not needed here
background = { #Campfire
trigger = {
scope:host.location = scope:activity.activity_location
}
texture = "gfx/interface/illustrations/event_scenes/ep3_campfire.dds"
environment = "environment_event_bp1_bonfire"
ambience = "event:/SFX/Events/Backgrounds/burning_building"
}
### Plug in widgets
activity_window_widgets = {
activity_special_type_progression = "activity_plugin_widgets_summary"
}
window_characters = {
guest = {
camera = camera_body_right
effect = {
if = {
limit = {
scope:host.location = scope:activity.activity_location
}
every_attending_character = {
limit = {
location = scope:activity.activity_location
this != scope:host
}
add_to_list = characters
}
}
}
scripted_animation = {
triggered_animation = {
trigger = {
always = yes
}
animation = { drink_goblet happiness flirtation throne_room_conversation_3 throne_room_conversation_1 instrument_idle alto_flute_active }
}
}
}
#Guest of Honor
guest = {
camera = camera_body
effect = {
if = {
limit = {
scope:host.location = scope:activity.activity_location
any_attending_character = {
this = scope:activity.special_guest:camp_party_honorary_guest
location = scope:activity.activity_location
}
}
every_attending_character = {
limit = {
this = scope:activity.special_guest:camp_party_honorary_guest
location = scope:activity.activity_location
}
add_to_list = characters
}
}
else = {
every_attending_character = {
limit = {
location = scope:activity.activity_location
this != scope:host
}
add_to_list = characters
}
}
}
scripted_animation = {
triggered_animation = {
trigger = {
scope:character = { has_trait = shy }
}
animation = { worry stress boredom fear disbelief paranoia eyeroll drink drink_goblet }
}
triggered_animation = {
trigger = {
scope:character = {
NOT = { has_trait = shy }
}
}
animation = { ecstasy wedding_priest chaplain personality_honorable personality_bold hero_flex }
}
#Fallback
animation = toast_goblet
}
}
host = {
camera = camera_body
effect = {
if = {
limit = {
scope:host.location = scope:activity.activity_location
}
scope:host = {
add_to_list = characters
}
}
}
scripted_animation = {
triggered_animation = {
trigger = {
always = yes
}
animation = { toast_goblet toast lute_active }
}
}
}
guest = {
camera = camera_body
effect = {
if = {
limit = {
scope:host.location = scope:activity.activity_location
}
every_attending_character = {
limit = {
location = scope:activity.activity_location
this != scope:host
}
add_to_list = characters
}
}
}
scripted_animation = {
triggered_animation = {
trigger = {
scope:character = { has_trait = shy }
}
animation = { worry stress boredom fear disbelief paranoia eyeroll drink drink_goblet }
}
triggered_animation = {
trigger = {
scope:character = {
NOT = { has_trait = shy }
}
}
animation = { dancing laugh throne_room_conversation_2 }
}
#Fallback
animation = toast
}
}
guest = {
camera = camera_body_left
effect = {
if = {
limit = {
scope:host.location = scope:activity.activity_location
}
every_attending_character = {
limit = {
location = scope:activity.activity_location
this != scope:host
}
add_to_list = characters
}
}
}
scripted_animation = {
triggered_animation = {
trigger = {
scope:character = { has_trait = shy }
}
animation = { worry stress boredom fear disbelief paranoia eyeroll drink drink_goblet }
}
triggered_animation = {
trigger = {
scope:character = {
NOT = { has_trait = shy }
}
}
animation = { drink eavesdrop wedding_drunk instrument_active }
}
#Fallback
animation = toast
}
}
}
}

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

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

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

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

@ -0,0 +1,388 @@
# Interaction used to convert people when you hybridize or diverge culture
# Note that it will only be applied to vassals of the parent culture(s)
# Acceptance is checked *before* culture conversion happens so that it'll be correct in the UI
# This has the culture traits available in the traits list:
# modifier = {
# add = 10
# desc = TEST
# culture_pillar:ethos_bellicose = { is_in_list = traits }
# }
request_culture_conversion_interaction = {
category = interaction_category_religion
special_interaction = request_culture_conversion_interaction
popup_on_receive = yes
desc = ask_for_conversion_interaction_desc
hidden = yes
is_shown = {
scope:actor.culture != scope:recipient.culture
scope:recipient.liege = scope:actor
NOT = { scope:recipient = { government_has_flag = government_is_landless_minority } }
}
is_valid_showing_failures_only = {
}
ai_accept = {
base = -10
opinion_modifier = {
opinion_target = scope:actor
who = scope:recipient
multiplier = 1
}
modifier = {
desc = ASK_FOR_CONVERSION_SAME_CULTURE_PRESTIGE_LEVEL
add = {
value = 10
multiply = scope:actor.prestige_level
}
scope:actor.prestige_level > 0
scope:recipient.culture = scope:actor.culture
}
modifier = {
desc = ASK_FOR_CONVERSION_RECIPIENT_DIPLOMACY
add = {
value = scope:actor.diplomacy
subtract = scope:recipient.diplomacy
multiply = 5
}
}
modifier = {
desc = ASK_FOR_CONVERSION_RECIPIENT_IS_CYNICAL
add = 30
scope:recipient = {
has_trait = cynical
}
}
modifier = {
desc = ASK_FOR_CONVERSION_RECIPIENT_IS_STUBBORN
add = -30
scope:recipient = {
has_trait = stubborn
}
}
modifier = {
add = intimidated_external_reason_value
scope:recipient = {
has_dread_level_towards = {
target = scope:actor
level = 1
}
}
desc = INTIMIDATED_REASON
}
modifier = {
add = cowed_external_reason_value
scope:recipient = {
has_dread_level_towards = {
target = scope:actor
level = 2
}
}
desc = COWED_REASON
}
# Unity modifiers
evaluate_action_increasing_house_unity = {
VALUE = 100
}
}
ai_min_reply_days = 1
ai_max_reply_days = 5
on_accept = {
new_culture_created_vassal_conversion_effect = {
CONVERTEE = scope:recipient
CONVERTER = scope:actor
CULTURE = scope:actor.culture
}
}
}
ai_cultural_hybridization_interaction = {
hidden = yes
auto_accept = yes
ai_potential = {
has_dlc_feature = hybridize_culture
OR = {
top_liege = this
highest_held_title_tier >= tier_kingdom
}
sub_realm_size >= 4
is_physically_able_adult = yes
is_at_war = no
NOT = {
has_game_rule = none_hybrid_culture_ai_frequency
}
}
is_shown = {
scope:actor = {
is_ai = yes
}
}
has_valid_target = {
exists = scope:target
}
ai_set_target = {
scope:actor = {
if = {
limit = {
any_sub_realm_county = {
culture != scope:actor.culture
culture = {
cultural_acceptance = { target = scope:actor.culture value >= hybridization_ai_threshold_value }
scope:actor = {
can_hybridize = prev
}
}
}
}
every_sub_realm_county = {
limit = {
culture != scope:actor.culture
culture = {
cultural_acceptance = { target = scope:actor.culture value >= hybridization_ai_threshold_value }
scope:actor = {
can_hybridize = prev
}
}
}
culture = {
add_to_list = culture_list
}
}
ordered_in_list = {
list = culture_list
limit = { culture_realm_size >= 3 }
order_by = culture_realm_size
save_scope_as = target
}
}
}
}
on_accept = {
# Global cooldowns for the lower frequency game rule settings
if = {
limit = {
has_game_rule = less_common_hybrid_culture_ai_frequency
}
set_global_variable = { name = has_ai_hybrid_event_cooldown value = yes days = 3650 }
}
scope:actor = {
create_hybrid_culture_with_side_effects = scope:target
}
}
ai_targets = {
ai_recipients = self
}
ai_frequency_by_tier = {
barony = 0
county = 120
duchy = 60
kingdom = 60
empire = 60
hegemony = 60
}
ai_will_do = {
base = 100
# Unity modifiers
evaluate_action_increasing_house_unity = {
VALUE = 100
}
modifier = {
factor = 0.2
has_game_rule = less_common_hybrid_culture_ai_frequency
}
modifier = {
factor = 0
exists = global_var:has_ai_hybrid_event_cooldown
}
modifier = {
factor = 0
culture = {
has_cultural_parameter = harder_to_hybridize
}
}
modifier = { # The AI should only want to hybridize if they're the second ruler of their culture for their primary title
factor = 0
OR = {
NOT = {
exists = primary_title.previous_holder
}
AND = {
exists = primary_title.previous_holder
primary_title.previous_holder.culture != scope:actor.culture
}
}
}
modifier = { # The AI doesn't want to hybridize if their culture is more than X% bigger than the targeted culture within the same realm (unless it's in the capital, and the capital is the De Jure capital of the primary title)
factor = 0
scope:actor.culture.culture_realm_size > scope:target.culture_realm_size_larger_30_percent
NAND = {
scope:actor.primary_title.title_capital_county = scope:actor.capital_county
scope:actor.capital_county.culture = scope:target
}
}
modifier = { # Do not hybridize if 30% or more of your vassals of the relevant culture/s dislike you
factor = 0
scope:actor = {
any_vassal = {
percent >= 0.3
OR = {
culture = scope:actor.culture
culture = scope:target
}
highest_held_title_tier >= tier_county
opinion = {
target = scope:actor
value <= 0
}
}
}
}
modifier = { # The AI does not want to create multiple hybrids from the same cultures
factor = 0
any_in_global_list = {
variable = hybrid_cultures
any_parent_culture = { this = scope:target }
any_parent_culture = { this = scope:actor.culture }
}
}
# Loose requirements
modifier = { # The AI does not want to create a hybrid with a hybrid culture that has the same roots
factor = 0
has_game_rule = very_relaxed_hybrid_culture_ai_restrictions
scope:target = { is_hybrid_culture = yes }
scope:actor.culture = {
is_hybrid_culture = yes
any_parent_culture = {
save_temporary_scope_as = parent_culture_check
scope:target = {
any_parent_culture = {
this = scope:parent_culture_check
}
}
}
}
}
modifier = { # The AI does not want to create a hybrid with a hybrid culture (unless a historical hybrid)
factor = 0
has_game_rule = relaxed_hybrid_culture_ai_restrictions
scope:target = {
is_hybrid_culture = yes
culture_is_not_historical_hybrid_trigger = yes
}
scope:actor.culture = {
is_hybrid_culture = yes
culture_is_not_historical_hybrid_trigger = yes
}
}
modifier = { # The AI does not want to create a hybrid with a hybrid culture or if the target is a hybrid (unless a historical hybrid)
factor = 0
has_game_rule = default_hybrid_culture_ai_restrictions
OR = {
scope:target = {
is_hybrid_culture = yes
culture_is_not_historical_hybrid_trigger = yes
}
scope:actor.culture = {
is_hybrid_culture = yes
culture_is_not_historical_hybrid_trigger = yes
}
}
}
modifier = { # The AI does not want to create a hybrid with a hybrid culture that their culture is a parent of, or share heritage of
factor = 0
scope:target = {
is_hybrid_culture = yes
any_parent_culture = {
OR = {
this = scope:actor.culture
has_same_culture_heritage = scope:actor.culture
}
}
}
}
modifier = { # The AI does not want to create a hybrid if their culture is a hybrid of the target culture, or share heritage of
factor = 0
scope:actor.culture = {
is_hybrid_culture = yes
any_parent_culture = {
OR = {
this = scope:target
has_same_culture_heritage = scope:target
}
}
}
}
modifier = { # Avoid hybridizing if your realm is of a significant size and elective, we don't want the HRE Emperor to hybdridize in ugly ways...
factor = 0
primary_title = {
has_order_of_succession = election
tier >= tier_kingdom
}
realm_size >= 50
any_vassal = {
highest_held_title_tier >= tier_county
culture != scope:actor.culture
}
}
modifier = { # Theocrats such as the Pope shouldn't hybridize; they have an influx of different cultures, it's just weird
factor = 0
government_has_flag = government_is_theocracy
}
modifier = { # Block for Scots and Gaelic specifically
factor = 0
scope:actor.culture = {
OR = {
this = culture:scottish
this = culture:gaelic
}
}
scope:target = {
OR = {
this = culture:scottish
this = culture:gaelic
}
}
}
# Note: As we're checking if we can hybridize with a culture *right now*, a suboptimal culture might be checked. A buffer of 10 acceptance is used by the AI to alleviate this.
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,492 @@
# Character Interactions for EP1
##################
# Fund someone's inspiration
# by Linnéa Thimrén
##################
fund_inspiration_interaction = {
icon = inspiration
interface_priority = 30
common_interaction = yes
category = interaction_category_vassal
desc = fund_inspiration_interaction_desc
is_shown = {
scope:recipient = {
is_ruler = no
inspiration ?= {
NOT = {
exists = inspiration_sponsor
}
}
}
scope:actor = {
any_courtier_or_guest = {
this = scope:recipient
}
}
}
is_highlighted = {
always = yes
}
is_valid_showing_failures_only = {
scope:recipient = {
is_physically_able = yes
is_ruler = no
trigger_if = {
limit = {
NOT = { is_courtier_of = scope:actor }
}
can_recruit_character_to_court_trigger = {
RECRUITER = scope:actor
RECRUITEE = scope:recipient
}
}
}
scope:actor = {
can_sponsor_inspiration = scope:recipient.inspiration
gold >= scope:recipient.inspiration.base_inspiration_gold_cost
}
}
on_accept = {
fund_inspiration_effect = yes
if = {
limit = { scope:recipient.inspiration = { has_inspiration_type = weapon_inspiration } }
custom_description_no_bullet = { text = weapon_inspiration_cost_tt }
}
else_if = {
limit = { scope:recipient.inspiration = { has_inspiration_type = armor_inspiration } }
custom_description_no_bullet = { text = armor_inspiration_cost_tt }
}
else_if = {
limit = { scope:recipient.inspiration = { has_inspiration_type = book_inspiration } }
custom_description_no_bullet = { text = book_inspiration_cost_tt }
}
else_if = {
limit = { scope:recipient.inspiration = { has_inspiration_type = weaver_inspiration } }
custom_description_no_bullet = { text = weaver_inspiration_cost_tt }
}
else_if = {
limit = { scope:recipient.inspiration = { has_inspiration_type = adventure_inspiration } }
custom_description_no_bullet = { text = adventure_inspiration_cost_tt }
}
else_if = {
limit = { scope:recipient.inspiration = { has_inspiration_type = artisan_inspiration } }
custom_description_no_bullet = { text = artisan_inspiration_cost_tt }
}
else_if = {
limit = { scope:recipient.inspiration = { has_inspiration_type = smith_inspiration } }
custom_description_no_bullet = { text = smith_inspiration_cost_tt }
}
else_if = {
limit = { scope:recipient.inspiration = { has_inspiration_type = alchemy_inspiration } }
custom_description_no_bullet = { text = alchemy_inspiration_cost_tt }
}
else_if = {
limit = { scope:recipient.inspiration = { has_inspiration_type = bow_inspiration } }
custom_description_no_bullet = { text = bow_inspiration_cost_tt }
}
# Add a flag on AI to have an extra cooldown of 3 years
if = {
limit = {
scope:actor = {
is_ai = yes
NOT = {
gold >= 1000
}
OR = {
short_term_gold < ai_inspiration_desired_gold_value
ai_greed >= 50
}
}
}
scope:actor = {
add_character_flag = {
flag = recently_fund_inspiration
years = 3
}
}
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = miniscule_unity_gain
DESC = clan_unity_inspo.desc
REVERSE_NON_HOUSE_TARGET = no
}
#Mandala Creation Aspect
scope:actor = {
if = {
limit = { government_has_flag = government_is_mandala }
increment_variable_effect = {
VAR = num_commissioned_artifacts
VAL = 1
}
}
}
}
auto_accept = {
custom_description = {
text = auto_accept_interaction_ai
object = scope:recipient
scope:recipient = {
is_ai = yes
}
}
}
ai_frequency_by_tier = {
barony = 0
county = 0
duchy = 0
kingdom = 10
empire = 10
hegemony = 10
}
ai_targets = {
ai_recipients = guests
ai_recipients = courtiers
}
ai_target_quick_trigger = {
adult = yes
}
ai_potential = {
is_at_war = no
OR = {
has_royal_court = yes
OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority }
}
gold > ai_inspiration_desired_gold_value
NOT = { has_character_flag = recently_fund_inspiration }
NOT = { has_variable = conqueror }
ai_should_focus_on_building_in_their_capital = no
}
ai_will_do = {
base = 100
modifier = { # Not as likely to fund inspirations if they already have some going (max three for very prestigious courts)
add = {
if = {
limit = {
highest_held_title_tier >= tier_empire
any_sponsored_inspiration = {
count >= 3
}
}
add = -50
}
else_if = {
limit = {
highest_held_title_tier >= tier_kingdom
any_sponsored_inspiration = {
count >= 2
}
}
add = -50
}
}
}
# Do not pointlessly fund inspirations you do not need
modifier = { # Weapons
factor = 0
scope:recipient.inspiration = {
has_inspiration_type = weapon_inspiration
}
OR = {
any_character_artifact = { # Has a fantastic item already
artifact_slot_type = primary_armament
rarity = illustrious
}
AND = { # Have a lot of artifacts already, and the inspired person isn't even very good
scope:recipient = {
weapon_inspiration_average_skill_value < 15
}
any_character_artifact = {
count >= 2
artifact_slot_type = primary_armament
}
}
}
}
modifier = { # Armor
factor = 0
scope:recipient.inspiration = {
has_inspiration_type = armor_inspiration
}
OR = {
any_character_artifact = { # Has a fantastic item already
artifact_slot_type = armor
rarity = illustrious
}
AND = { # Have a lot of artifacts already, and the inspired person isn't even very good
scope:recipient = {
armor_inspiration_average_skill_value < 15
}
any_character_artifact = {
count >= 2
artifact_slot_type = armor
}
}
}
}
modifier = { # Warlike AI's only sponsor if they've been at peace for a long time
factor = 0
ai_has_warlike_personality = yes
days_of_continuous_peace < 1825 # 5 years
}
modifier = { # Cautious AI's only sponsor if they feel safe enough
factor = 0
ai_has_cautious_personality = yes
war_chest_gold < cautious_ai_minimum_war_chest_gold
}
}
}
##################
# Indebt Guest
# by Ewan Cowhig Croft
##################
indebt_guest_interaction = {
icon = icon_hostile
interface_priority = 120
common_interaction = yes
ai_max_reply_days = 0
cooldown = { years = 5 }
category = interaction_category_hostile
ai_maybe = yes
desc = indebt_guest_interaction_desc
greeting = negative
pre_answer_maybe_key = ANSWER_MIGHT_SUCCEED
pre_answer_no_key = ANSWER_CANT_SUCCEED
pre_answer_yes_key = ANSWER_WILL_SUCCEED
pre_answer_maybe_breakdown_key = ANSWER_SUM_CHANCE
ai_potential = {
# Repeat some is_shown triggers for performance gains.
indebt_guest_interaction_basic_checks_trigger = { ACTOR = this }
}
is_shown = {
scope:actor != scope:recipient
# Repeat some ai_potential triggers for performance gains.
indebt_guest_interaction_basic_checks_trigger = { ACTOR = scope:actor }
# Scope:recipient must be a guest.
scope:recipient = { is_pool_guest_of = scope:actor }
}
is_valid_showing_failures_only = {
scope:actor = { is_imprisoned = no }
scope:actor = { is_commanding_army = no }
# Scope:actor can't have a hook of any kind on scope:recipient already.
NOT = {
scope:actor = { has_hook = scope:recipient }
}
# Scope:actor must be able to afford the cost of the decision going wrong.
scope:actor.court_grandeur_current >= indebt_guest_interaction_lost_test_grandeur_cost_value
}
can_send = {
scope:actor = {
custom_description = {
text = "character_interactions_hostile_actions_disabled_delay"
NOT = { has_character_flag = flag_hostile_actions_disabled_delay }
}
}
}
on_send = {
scope:actor = {
add_character_flag = {
flag = flag_hostile_actions_disabled_delay
days = 10
}
}
}
on_accept = {
scope:actor = {
# On accept, you gain a hook & lose some opinion.
## Which we only show as a tooltip for now, since it's applied in the event.
show_as_tooltip = { indebt_guest_interaction_accepted_effect = yes }
# Pop the event.
trigger_event = ep1_character_interaction.0001
# Reminder that you'll have a chance to direct where they go.
custom_tooltip = indebt_guest_interaction.tt.direct_indebted_guest
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = miniscule_unity_loss
DESC = clan_unity_indebt_guest.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
on_decline = {
# Send a toast.
scope:actor = {
send_interface_toast = {
type = event_toast_effect_bad
title = indebt_guest_interaction.tt.failure
left_icon = scope:recipient
# On decline, scope:recipient leaves your court...
scope:recipient = { select_and_move_to_pool_effect = yes }
# ... and you lose a bit of extra grandeur for your audacity.
change_current_court_grandeur = indebt_guest_interaction_lost_test_grandeur_cost_value
}
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = miniscule_unity_loss
DESC = clan_unity_indebt_guest_failure.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
auto_accept = no
ai_accept = {
base = 50
# Standard intrigue duel.
modifier = {
add = {
value = scope:actor.intrigue
multiply = 2
}
desc = INDEBT_GUEST_INTRIGUE_ACTOR
}
modifier = {
add = {
value = scope:recipient.intrigue
multiply = -1
}
desc = INDEBT_GUEST_INTRIGUE_RECIPIENT
}
# Weight it a bit more in your favour for every point of excess CGV you have.
modifier = {
add = scope:actor.current_cgv_above_expected_exact_value
desc = INDEBT_GUEST_CURRENT_CGV_ABOVE_EXPECTED
scope:actor.current_cgv_above_expected_exact_value >= 1
}
# Some traits may also affect the chances for scope:actor...
modifier = {
add = 10
scope:actor = { has_trait = schemer }
}
modifier = {
add = 10
scope:actor = { has_trait = education_intrigue }
}
modifier = {
add = 5
scope:actor = { has_trait = deceitful }
}
modifier = {
add = 5
scope:actor = { has_trait = vengeful }
}
modifier = {
add = -10
scope:actor = { has_trait = honest }
}
modifier = {
add = -5
scope:actor = { has_trait = forgiving }
}
# ... or else for scope:recipient.
modifier = {
add = -10
scope:recipient = { has_trait = schemer }
}
modifier = {
add = -5
scope:recipient = { has_trait = education_intrigue }
}
modifier = {
add = -5
scope:recipient = { has_trait = deceitful }
}
modifier = {
add = 10
scope:recipient = { has_trait = honest }
}
}
# AI
ai_targets = {
ai_recipients = guests
chance = 0.5
}
ai_frequency_by_tier = {
barony = 0
county = 0
duchy = 0
kingdom = 10
empire = 10
hegemony = 10
}
ai_will_do = {
base = -100
# This is a silly way for the AI to spend its CGV, so we keep 'em off it most of the time.
# Unless they've got a scheme on the go at their nemesis' court...
modifier = {
add = 100
scope:actor = {
any_relation = { type = nemesis }
any_scheme = {
count >= 1
scheme_target_character = {
any_relation = {
type = nemesis
count >= 1
this = scope:actor
}
}
}
}
}
# ... *and* they're likely to win due to having higher intrigue, but without scope:recipient being too terrible.
modifier = {
add = 25
indebt_guest_interaction_get_intrigue_difference_value >= indebt_guest_interaction_likely_success_control_value
scope:recipient = { intrigue >= high_skill_rating }
}
modifier = {
add = 25
indebt_guest_interaction_get_intrigue_difference_value >= indebt_guest_interaction_likely_success_control_value
scope:recipient = { intrigue >= very_high_skill_rating }
}
modifier = {
add = 50
indebt_guest_interaction_get_intrigue_difference_value >= indebt_guest_interaction_likely_success_control_value
scope:recipient = { intrigue >= extremely_high_skill_rating }
}
}
}

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

File diff suppressed because it is too large Load diff

View file

@ -888,6 +888,26 @@ GetGovernmentIcon = {
}
localization_key = adventurer_icon_concept
}
text = { # Republic
trigger = {
trigger_if = {
limit = {
is_alive = no
}
has_government = landless_minority_government
}
trigger_else = {
trigger_if = {
limit = { is_ruler = yes }
government_has_flag = government_is_landless_minority
}
trigger_else = {
liege ?= { government_has_flag = government_is_landless_minority }
}
}
}
localization_key = minority_community_icon_concept
}
text = { # Nomad
trigger = {
trigger_if = {

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,592 @@
### Convert to Local Culture ###
convert_to_local_culture_decision = {
picture = {
reference = "gfx/interface/illustrations/decisions/decision_realm.dds"
}
desc = convert_to_local_culture_decision_desc
selection_tooltip = convert_to_local_culture_decision_tooltip
is_shown = {
is_playable_character = yes
primary_title.tier > tier_barony
culture != capital_province.culture
NAND = {
is_ai = yes
OR = {
has_character_flag = converted_culture_this_lifetime
has_character_flag = converted_culture_this_lifetime_ai
}
}
NOT = { government_has_flag = government_is_landless_minority }
}
is_valid_showing_failures_only = {
is_physically_able_adult = yes
is_at_war = no
custom_description = {
text = can_only_change_culture_once
NOT = { has_character_flag = converted_culture_this_lifetime }
}
}
cost = {
prestige = {
value = convert_to_local_culture_base_cost
if = { # Cheaper to convert to a hybrid culture made from your culture
limit = {
capital_province.culture = {
any_parent_culture = {
this = root.culture
}
}
}
multiply = 0.5
}
# Similarities in culture
if = {
limit = {
capital_province.culture = {
has_same_culture_ethos = root.culture
}
}
multiply = 0.75
}
if = {
limit = {
capital_province.culture = {
has_same_culture_heritage = root.culture
}
}
multiply = 0.75
}
if = {
limit = {
capital_province.culture = {
has_same_culture_language = root.culture
}
}
multiply = 0.5
}
if = {
limit = {
NOT = {
capital_province.culture = {
has_same_culture_martial_tradition = root.culture
}
}
}
multiply = 1.25
}
if = {
limit = {
culture = {
has_cultural_parameter = expensive_convert_to_local_culture
}
}
multiply = 3
}
if = {
limit = {
culture = {
has_cultural_parameter = cheaper_convert_to_local_culture
}
}
multiply = 0.25
}
else_if = {
limit = {
NOT = {
government_has_flag = government_is_nomadic
}
has_trait = nomadic_philosophy
}
multiply = 0.25
}
# Account for struggle phase.
if = {
limit = { is_struggle_parameter_active_cheaper_to_convert_to_struggle_culture_trigger = yes }
multiply = 0.25
}
# Make sure it's never dumb numbers.
min = 25
}
}
effect = {
if = {
limit = {
culture = {
has_cultural_parameter = less_likely_to_culture_convert
}
OR = {
has_trait = compassionate
has_trait = gregarious
has_trait = diligent
has_trait = fickle
has_trait = humble
has_trait = trusting
}
}
add_stress = medium_stress_gain
}
else_if = {
limit = {
culture = {
has_cultural_parameter = less_likely_to_culture_convert
}
}
add_stress = major_stress_gain
}
# Struggle Catalysts
if = {
limit = {
any_character_struggle = {
involvement = involved
phase_has_catalyst = catalyst_convert_local_culture_faith
is_culture_involved_in_struggle = root.capital_province.culture
}
}
every_character_struggle = {
involvement = involved
activate_struggle_catalyst = {
catalyst = catalyst_convert_local_culture_faith
character = root
}
}
}
convert_family_culture_and_notify_vassals_effect = {
CONVERTER = root
OLD_CULTURE = root.culture
NEW_CULTURE = capital_province.culture
}
}
ai_check_interval_by_tier = {
barony = 0
county = 60
duchy = 60
kingdom = 60
empire = 60
hegemony = 60
}
ai_potential = {
is_playable_character = yes
culture != capital_province.culture
is_landless_adventurer = no
}
ai_will_do = {
base = 3
modifier = { # If your liege is the same culture as your capital, better get on with it! This should combat scattered wrong-culture Counts and such.
add = 77
capital_province.culture = liege.culture
}
modifier = { # Motivate vassals to assimilate if they are different culture from their liege. If they can't curry their liege's favor, better get the peasants on your side at least...
add = 27
NOR = {
culture = capital_province.culture
culture = liege.culture
}
}
# Reduced chance for every vassal who has your old culture
modifier = {
factor = {
value = 1
every_vassal = {
limit = {
OR = {
highest_held_title_tier = tier_kingdom
highest_held_title_tier = tier_duchy
AND = {
root = {
highest_held_title_tier = tier_duchy
}
primary_title.tier = tier_county
}
}
culture = root.culture
}
add = -0.3
}
}
}
modifier = { # This factor 0 is not misplaced; Loyal Subjects should not culture convert unless it's to a hybrid!
factor = 0
top_liege != this
exists = liege
culture != liege.culture
culture = {
has_cultural_tradition = tradition_loyal_soldiers
}
}
modifier = { # You're an independent count that has become landed somewhere, as you can't increase acceptance, it's best to assimilate.
add = 200
top_liege = this
primary_title.tier = tier_county
domain_size <= 3
culture = {
NOR = {
has_cultural_parameter = easier_to_hybridize # Not for hybrid-loving cultures
has_cultural_parameter = expensive_convert_to_local_culture # Nor staunch traditionalists
}
cultural_acceptance = { target = root.capital_province.culture value < 50 }
}
}
modifier = { # Do convert to hybrids of your own culture
add = 200
capital_province.culture = {
is_hybrid_culture = yes
any_parent_culture = {
this = root.culture
}
}
}
modifier = { # Farewell, norse culture (unless the player is running a norse empire)
add = 200
OR = {
top_liege = this
AND = {
top_liege != this
NOT = {
any_liege_or_above = {
culture = culture:norse
}
}
}
}
culture = culture:norse
capital_province.culture = {
OR = {
this = culture:swedish
this = culture:norwegian
this = culture:danish
}
}
}
modifier = { # Iberian Struggle modifiers
any_character_struggle = {
involvement = involved
}
add = {
value = 0
if = {
limit = {
any_character_struggle = {
phase_has_catalyst = catalyst_convert_local_culture_faith
}
has_character_flag = agenda_towards_escalation
}
add = -300
}
else_if = { # Slight boost, so players can't exploit landing lots of characters to bump catalyst progress
limit = {
any_character_struggle = {
phase_has_catalyst = catalyst_convert_local_culture_faith
}
}
add = 20
}
}
}
modifier = { # If you're the same culture as your liege, and your Capital is in a Duchy with your culture in it, never convert
factor = 0
top_liege != this
exists = liege
culture = liege.culture
capital_province.duchy = {
any_in_de_jure_hierarchy = {
tier = tier_county
any_county_province = {
culture = root.culture
}
}
}
}
modifier = { # If your capital borders a province with the correct culture, do not convert
factor = 0
top_liege != this
exists = liege
culture = liege.culture
capital_province.county = {
any_neighboring_county = {
any_county_province = {
culture = root.culture
}
}
}
}
modifier = { # If your liege is your parent, do not convert
factor = 0
top_liege != this
exists = liege
culture = liege.culture
OR = {
liege = root.mother
liege = root.father
}
}
# Some cultures should not assimilate to certain others
modifier = {
factor = 0
has_culture = culture:andalusian
capital_province = {
culture = { has_cultural_pillar = heritage_iberian }
}
NOT = {
capital_province = {
culture = {
is_hybrid_culture = yes
any_parent_culture_or_above = {
this = root.culture
}
}
}
}
}
modifier = {
factor = 0
culture = { has_cultural_pillar = heritage_iberian }
capital_province.culture = culture:andalusian
}
# Don't overwrite historically scripted developments
modifier = {
factor = 0
OR = {
has_culture = culture:norman
has_culture = culture:english
}
capital_province.culture = culture:anglo_saxon
}
modifier = {
factor = 0
has_culture = culture:turkish
capital_province = {
culture = {
OR = {
has_cultural_pillar = heritage_byzantine
has_cultural_pillar = heritage_caucasian
}
}
}
NOT = {
capital_province = {
culture = {
is_hybrid_culture = yes
any_parent_culture_or_above = {
this = root.culture
}
}
}
}
}
modifier = {
factor = 0
has_culture = culture:turkish
primary_title.tier >= tier_empire
}
modifier = {
factor = 0
OR = {
has_title = title:k_jerusalem
has_title = title:e_outremer
any_liege_or_above = {
OR = {
has_title = title:k_jerusalem
has_title = title:e_outremer
}
}
}
NOR = {
capital_province = { # Convert to Hybrids of your culture in the Holy Land
culture = {
is_hybrid_culture = yes
any_parent_culture_or_above = {
this = root.culture
}
}
}
AND = {
top_liege != this
exists = liege
capital_province.culture = liege.culture
}
}
}
modifier = {
factor = 0
has_title = title:e_latin_empire
NOT = {
capital_province = {
culture = {
is_hybrid_culture = yes
any_parent_culture_or_above = {
this = root.culture
}
}
}
}
}
# Scots needs a bit of help to dominate as it did historically
modifier = {
factor = 0
has_culture = culture:scottish
capital_province.culture = culture:gaelic
}
# Pictish should usually disappear
modifier = {
factor = 0
has_culture = culture:gaelic
capital_province.culture = culture:pictish
}
# Don't go back on a previous conversion
modifier = {
factor = 0
has_character_flag = converted_culture_this_lifetime
}
#Some traditions reeeallly don't like doing this
modifier = {
factor = 0.1
culture = {
OR = {
has_cultural_parameter = less_likely_to_culture_convert
has_cultural_parameter = expensive_convert_to_local_culture
}
}
}
}
}
### Have the Realm Embrace Local Traditions ###
assimilate_local_traditions_decision = {
picture = {
reference = "gfx/interface/illustrations/decisions/fp1_decision_raise_runestone.dds"
}
sort_order = 75
desc = assimilate_local_traditions_decision_desc
selection_tooltip = assimilate_local_traditions_decision_tooltip
is_shown = {
culture = culture:norse
is_landed = yes
primary_title.tier > tier_barony
culture != capital_province.culture
NAND = {
is_ai = yes
OR = {
has_character_flag = converted_culture_this_lifetime
has_character_flag = converted_culture_this_lifetime_ai
}
}
}
is_valid_showing_failures_only = {
top_liege = this
is_physically_able_adult = yes
is_at_war = no
custom_description = {
text = can_only_change_culture_once
NOT = { has_character_flag = converted_culture_this_lifetime }
}
capital_province = {
NOT = {
geographical_region = world_europe_north
}
}
}
cost = {
prestige = {
value = 300
if = {
limit = {
is_ai = yes
capital_province = {
geographical_region = world_europe_east
}
}
multiply = 0
}
# Account for struggle phase.
if = {
limit = { is_struggle_parameter_active_cheaper_to_convert_to_struggle_culture_trigger = yes }
multiply = 0.25
}
# Make sure it's never dumb numbers.
min = 25
}
}
effect = {
norse_assimilate_local_traditions_effect = {
CONVERTER = root
OLD_CULTURE = root.culture
OLD_FAITH = root.faith
NEW_CULTURE = capital_province.culture
NEW_FAITH = capital_province.faith
}
}
ai_check_interval_by_tier = {
barony = 0
county = 60
duchy = 60
kingdom = 60
empire = 60
hegemony = 60
}
ai_potential = {
culture = culture:norse
is_playable_character = yes
culture != capital_province.culture
}
ai_will_do = {
base = 100
# Don't do it too early
modifier = {
factor = 0
NOT = {
primary_title.title_held_years > 30
}
}
# Don't do it if you're zealous
modifier = {
factor = 0
has_trait = zealous
capital_province.faith != root.faith
}
# Historical Exceptions
modifier = {
add = 100
capital_province = {
geographical_region = world_europe_east
}
}
}
}

View file

@ -3768,7 +3768,7 @@ go_fishing_decision = {
is_shown = {
#DLC check.
has_ep3_dlc_trigger = yes
has_government = landless_adventurer_government
OR = { has_government = landless_adventurer_government has_government = landless_minority_government }
}
is_valid_showing_failures_only = {

File diff suppressed because it is too large Load diff

View file

@ -43,7 +43,7 @@ NSetup = {
# chance that a courtless character is sent to a court as a guest instead of a regular courtier on game start (0..1)
COURTLESS_CHARACTER_GUEST_CHANCE = 0
# Random range for number of characters per pool (duchy) generated at the start of the game
GENERATED_POOL_CHARACTERS = { 2 6 }
GENERATED_POOL_CHARACTERS = { 2 9 }
# Templates used for the pool character. The weights correspond to the template names at the same index.
# The scope of the template is a random ruler whose capital is in that pool.
GENERATED_POOL_CHARACTER_TEMPLATES = {
@ -549,6 +549,7 @@ NGovernment = {
"holy_order_government"
"administrative_government"
"landless_adventurer_government"
"landless_minority_government"
"nomad_government"
"herder_government"
"celestial_government"

View file

@ -4469,7 +4469,7 @@ proving_grounds_01 = {
}
proving_grounds_02 = {
construction_time = @camp_building_main_slot_construction_duration_t2
allowed_domicile_types = { camp }
allowed_domicile_types = { camp}
previous_building = proving_grounds_01
internal_slots = 2
@ -4518,7 +4518,7 @@ proving_grounds_02 = {
}
proving_grounds_03 = {
construction_time = @camp_building_main_slot_construction_duration_t3
allowed_domicile_types = { camp }
allowed_domicile_types = { camp}
previous_building = proving_grounds_02
internal_slots = 3
@ -4567,7 +4567,7 @@ proving_grounds_03 = {
}
proving_grounds_04 = {
construction_time = @camp_building_main_slot_construction_duration_t4
allowed_domicile_types = { camp }
allowed_domicile_types = { camp}
previous_building = proving_grounds_03
internal_slots = 4
@ -4619,7 +4619,7 @@ proving_grounds_04 = {
}
proving_grounds_05 = {
construction_time = @camp_building_main_slot_construction_duration_t5
allowed_domicile_types = { camp }
allowed_domicile_types = { camp}
previous_building = proving_grounds_04
internal_slots = 5
@ -4670,7 +4670,7 @@ proving_grounds_05 = {
}
proving_grounds_06 = {
construction_time = @camp_building_main_slot_construction_duration_t6
allowed_domicile_types = { camp }
allowed_domicile_types = { camp}
previous_building = proving_grounds_05
internal_slots = 6
@ -4725,7 +4725,7 @@ proving_grounds_06 = {
proving_grounds_horse_run = { # Horse Run
slot_type = internal
construction_time = @camp_building_internal_slot_construction_duration_t2
allowed_domicile_types = { camp }
allowed_domicile_types = { camp}
previous_building = proving_grounds_01
cost = { gold = proving_grounds_horse_run_domicile_building_gold_cost_value }
@ -4790,7 +4790,7 @@ proving_grounds_horse_run = { # Horse Run
proving_grounds_camel_run = { # Camel Run
slot_type = internal
construction_time = @camp_building_internal_slot_construction_duration_t2
allowed_domicile_types = { camp }
allowed_domicile_types = { camp}
previous_building = proving_grounds_01
cost = { gold = proving_grounds_camel_run_domicile_building_gold_cost_value }
@ -4859,7 +4859,7 @@ proving_grounds_camel_run = { # Camel Run
proving_grounds_elephantry_reserve = { # Elephantry Reserve
slot_type = internal
construction_time = @camp_building_internal_slot_construction_duration_t3
allowed_domicile_types = { camp }
allowed_domicile_types = { camp}
previous_building = proving_grounds_01
cost = { gold = proving_grounds_elephantry_reserve_domicile_building_gold_cost_value }
@ -4922,7 +4922,7 @@ proving_grounds_elephantry_reserve = { # Elephantry Reserve
proving_grounds_nightly_barding_drills = { # Nightly Barding Drills
slot_type = internal
construction_time = @camp_building_internal_slot_construction_duration_t3
allowed_domicile_types = { camp }
allowed_domicile_types = { camp}
previous_building = proving_grounds_01
cost = { gold = proving_grounds_nightly_barding_drills_domicile_building_gold_cost_value }
@ -4987,7 +4987,7 @@ proving_grounds_nightly_barding_drills = { # Nightly Barding Drills
proving_grounds_life_in_the_saddle = { # Life in the Saddle
slot_type = internal
construction_time = @camp_building_internal_slot_construction_duration_t3
allowed_domicile_types = { camp }
allowed_domicile_types = { camp}
previous_building = proving_grounds_01
cost = { gold = proving_grounds_life_in_the_saddle_domicile_building_gold_cost_value }
@ -5065,7 +5065,7 @@ proving_grounds_life_in_the_saddle = { # Life in the Saddle
proving_grounds_the_stump = { # The Stump
slot_type = internal
construction_time = @camp_building_internal_slot_construction_duration_t3
allowed_domicile_types = { camp }
allowed_domicile_types = { camp}
previous_building = proving_grounds_01
cost = { gold = proving_grounds_the_stump_domicile_building_gold_cost_value }
@ -5130,7 +5130,7 @@ proving_grounds_the_stump = { # The Stump
proving_grounds_personal_bouts = { # Personal Bouts
slot_type = internal
construction_time = @camp_building_internal_slot_construction_duration_t3
allowed_domicile_types = { camp }
allowed_domicile_types = { camp}
previous_building = proving_grounds_01
cost = { gold = proving_grounds_personal_bouts_domicile_building_gold_cost_value }
@ -5196,7 +5196,7 @@ proving_grounds_personal_bouts = { # Personal Bouts
proving_grounds_training_circle = { # Training Circle
slot_type = internal
construction_time = @camp_building_internal_slot_construction_duration_t3
allowed_domicile_types = { camp }
allowed_domicile_types = { camp}
previous_building = proving_grounds_01
cost = { gold = proving_grounds_training_circle_domicile_building_gold_cost_value }
@ -5262,7 +5262,7 @@ proving_grounds_training_circle = { # Training Circle
proving_grounds_mock_battle_drills = { # Mock Battle Drills
slot_type = internal
construction_time = @camp_building_internal_slot_construction_duration_t3
allowed_domicile_types = { camp }
allowed_domicile_types = { camp}
previous_building = proving_grounds_01
cost = { gold = proving_grounds_mock_battle_drills_domicile_building_gold_cost_value }
@ -5327,7 +5327,7 @@ proving_grounds_mock_battle_drills = { # Mock Battle Drills
proving_grounds_lockwagon = { # Lockwagon
slot_type = internal
construction_time = @camp_building_internal_slot_construction_duration_t2
allowed_domicile_types = { camp }
allowed_domicile_types = { camp}
previous_building = proving_grounds_01
cost = { gold = proving_grounds_lockwagon_domicile_building_gold_cost_value }
@ -5392,7 +5392,7 @@ proving_grounds_lockwagon = { # Lockwagon
proving_grounds_martial_study = { # Martial Study
slot_type = internal
construction_time = @camp_building_internal_slot_construction_duration_t3
allowed_domicile_types = { camp }
allowed_domicile_types = { camp}
previous_building = proving_grounds_01
cost = { gold = proving_grounds_martial_study_domicile_building_gold_cost_value }
@ -5454,7 +5454,7 @@ proving_grounds_martial_study = { # Martial Study
proving_grounds_the_stick_game = { # The Stick Game
slot_type = internal
construction_time = @camp_building_internal_slot_construction_duration_t1
allowed_domicile_types = { camp }
allowed_domicile_types = { camp}
previous_building = proving_grounds_01
cost = { gold = proving_grounds_the_stick_game_domicile_building_gold_cost_value }
@ -5514,7 +5514,7 @@ proving_grounds_the_stick_game = { # The Stick Game
proving_grounds_bodyguard_drills = { # Bodyguard Drills
slot_type = internal
construction_time = @camp_building_internal_slot_construction_duration_t3
allowed_domicile_types = { camp }
allowed_domicile_types = { camp}
previous_building = proving_grounds_01
cost = { gold = proving_grounds_bodyguard_drills_domicile_building_gold_cost_value }

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

@ -27,6 +27,10 @@ belpois_dynasty = {
culture = bourguignon
}
kohn_dynasty = {
name = dynn_britannia_kohn
culture = ashkenazi
}
giry_dynasty = {
name = dynn_giry
culture = bourguignon

View file

@ -500,6 +500,12 @@ duchy_landless_adventurer_camp = {
governments = { landless_adventurer_government }
}
duchy_landless_minority_community = {
type = title
tier = duchy
priority = 30
governments = { landless_minority_government }
}
### Devaraja ###
#devaraja = {
# type = character

View file

@ -10262,6 +10262,52 @@ emperor_administrative_female_brit = {
# name_lists = { name_list_roman }
#}
### LANDLESS ADVENTURERS
duke_landless_minority_community_male_minority_community = {
type = character
gender = male
special = holder
tier = duchy
domicile_type = minority_community
priority = 25
governments = { landless_minority_government }
flavourization_rules = {
spouse_takes_title = no
}
}
duke_landless_minority_community_female_minority_community = {
type = character
gender = female
special = holder
tier = duchy
domicile_type = minority_community
priority = 25
governments = { landless_minority_government }
flavourization_rules = {
spouse_takes_title = no
}
}
spouse_landless_minority_community_male = {
type = character
gender = male
special = domicile
domicile_type = minority_community
priority = 25
governments = { landless_minority_government }
}
spouse_landless_minority_community_holder_female = {
type = character
gender = female
special = domicile
domicile_type = minority_community
priority = 25
governments = { landless_minority_government }
}
duke_landless_adventurer_male_camp = {
type = character
gender = male

View file

@ -19,3 +19,13 @@ domicile_estate = {
top_liege = no
}
}
domicile_minority_community = {
type = domicile
domicile_type = minority_community
priority = 26
governments = { landless_minority_government }
flavourization_rules = {
top_liege = no
}
}

File diff suppressed because it is too large Load diff

View file

@ -11,4 +11,18 @@ airship = {
}
chemical_weapons = {
texture = "gfx/interface/icons/regimenttypes/chemical_weapons.dds"
}
minority_community_building = {
texture = "gfx/interface/icons/government_types/landless_minority_government.dds"
alias = { minority_community_buildings minority_community_building }
parent = domicile_building
}
minority_community = {
texture = "gfx/interface/icons/government_types/landless_minority_government.dds"
alias = { minority_communities minority_community_i }
parent = domicile
}
minority_government = {
texture = "gfx/interface/icons/government_types/landless_minority_government.dds"
parent = domicile
}

View file

@ -6,7 +6,7 @@ feudal_government = {
government_rules = {
create_cadet_branches = yes
rulers_should_have_dynasty = yes
dynasty_named_realms = yes
dynasty_named_realms = no
legitimacy = yes
}
@ -121,7 +121,7 @@ clan_government = {
create_cadet_branches = yes
rulers_should_have_dynasty = yes
legitimacy = yes
dynasty_named_realms = yes
dynasty_named_realms = no
always_use_patronym = yes
}
@ -543,6 +543,70 @@ landless_adventurer_government = {
realm_mask_scale = { 1 1 }
}
landless_minority_government = {
government_rules = {
create_cadet_branches = yes
court_generate_spouses = yes
council = yes
always_use_patronym = yes
create_cadet_branches = yes
rulers_should_have_dynasty = yes
landless_playable = yes
use_title_tier_modifiers = no
mercenary = yes
allow_out_of_realm_inheritance = yes
use_as_base_on_landed = yes
regiments_use_barter_goods_as_gold = yes
barter = yes
}
domicile_type = minority_community
court_generate_commanders = yes
can_get_government = {
any_held_title = {
title_tier = duchy
is_landless_type_title = yes
}
culture = {
has_cultural_tradition = tradition_diasporic
}
}
valid_holdings = { tribal_holding church_holding castle_holding city_holding temple_citadel_holding }
character_modifier = {
active_accolades = -100
knight_limit = 2
character_travel_speed = 20
siege_weapon_siege_value_mult = -0.5
mercenary_hire_cost_mult = 1
short_reign_duration_mult = -5
long_reign_bonus_mult = -1
domicile_travel_speed = -0.75
monthly_wanderer_lifestyle_xp_gain_mult = 0.15
}
ai = {
use_goals = yes
use_scripted_guis = no
perform_religious_reformation = yes
use_legends = yes
}
# Use flags instead of has_government for moddability if possible (i.e., wherever not visible to the player).
flags = {
government_is_barterer
landless_can_be_vassalised
government_is_landless_minority
government_devassalises
}
mechanic_type = landless_adventurer
color = hsv{ 0.00 0.00 0.90 }
realm_mask_offset = { 0.0 0.0 }
realm_mask_scale = { 1 1 }
}
### Brief: nomad_government
# Default nomad government, used for the Steppe Region
#

View file

@ -15,6 +15,20 @@ d_laamp_zolt = {
ai_primary_priority = { add = @never_primary_score }
}
d_laamp_test_jewish = {
color = { 100 100 100 }
capital = c_london
definite_form = yes
landless = yes
ruler_uses_title_name = no
always_follows_primary_heir = yes
no_automatic_claims = yes
noble_family = yes
destroy_if_invalid_heir = yes
ai_primary_priority = { add = @never_primary_score }
}
d_laamp_bookwyrm = {
color = { 100 100 100 }
capital = c_guines

File diff suppressed because it is too large Load diff

View file

@ -389,19 +389,24 @@ NEOW_militia = {
camel_cavalry = 1
}
can_recruit = {
militia_raise_limit_existing_militia_units < militia_raise_limit_existing_militia_buildings
OR = {
has_trait = education_martial_1
has_trait = education_martial_2
has_trait = education_martial_3
has_trait = education_martial_4
has_trait = education_martial_5
has_trait = peasant_leader
has_trait = heresiarch
has_trait = populist_leader
has_lifestyle = martial_lifestyle
has_martial_lifestyle_trait_trigger = yes
cp:councillor_marshal = { martial = 13 }
AND = {
militia_raise_limit_existing_militia_units < militia_raise_limit_existing_militia_buildings
OR = {
has_trait = education_martial_1
has_trait = education_martial_2
has_trait = education_martial_3
has_trait = education_martial_4
has_trait = education_martial_5
has_trait = peasant_leader
has_trait = heresiarch
has_trait = populist_leader
has_lifestyle = martial_lifestyle
has_martial_lifestyle_trait_trigger = yes
cp:councillor_marshal = { martial = 13 }
}
}
can_recruit_militia = yes
}
}
@ -614,10 +619,10 @@ toxic_gas_slingers = {
airships = {
type = airship
damage = 300
damage = 250
toughness = 100
pursuit = 0
screen = 300
screen = 250
siege_value = 0.5

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

@ -755,6 +755,138 @@ yearly_global_pulse = {
# Root is the character
yearly_playable_pulse = {
effect = {
if = {
limit = {
government = landless_minority_government
domicile ?= {
OR = {
has_domicile_building_or_higher = village_rice_field_05
has_domicile_building_or_higher = village_grain_fields_05
}
}
}
domicile ?= {
change_provisions = {
value = 600
}
}
}
else_if = {
limit = {
government = landless_minority_government
domicile ?= {
OR = {
has_domicile_building_or_higher = village_rice_field_03
has_domicile_building_or_higher = village_grain_fields_03
}
}
}
domicile ?= {
change_provisions = {
value = 400
}
}
}
else_if = {
limit = {
government = landless_minority_government
domicile ?= {
OR = {
has_domicile_building_or_higher = village_rice_field_01
has_domicile_building_or_higher = village_grain_fields_01
}
}
}
domicile ?= {
change_provisions = {
value = 200
}
}
}
else = {
}
if = {
limit = {
government = landless_minority_government
domicile ?= {
has_domicile_building_or_higher = village_grazing_land_05
}
}
domicile ?= {
change_provisions = {
value = 600
}
}
}
else_if = {
limit = {
government = landless_minority_government
domicile ?= {
has_domicile_building_or_higher = village_grazing_land_03
}
}
domicile ?= {
change_provisions = {
value = 400
}
}
}
else_if = {
limit = {
government = landless_minority_government
domicile ?= {
has_domicile_building_or_higher = village_grazing_land_01
}
}
domicile ?= {
change_provisions = {
value = 200
}
}
}
else = {
}
if = {
limit = {
government = landless_minority_government
domicile ?= {
has_domicile_building_or_higher = communal_gardens_fruit_05
}
}
domicile ?= {
change_provisions = {
value = 600
}
}
}
else_if = {
limit = {
government = landless_minority_government
domicile ?= {
has_domicile_building_or_higher = communal_gardens_03
}
}
domicile ?= {
change_provisions = {
value = 400
}
}
}
else_if = {
limit = {
government = landless_minority_government
domicile ?= {
has_domicile_building_or_higher = communal_gardens_01
}
}
domicile ?= {
change_provisions = {
value = 200
}
}
}
else = {
}
ai_budget_manipulation_effect = yes
#Mandala

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,934 @@
###TRIGGER LIST
#has_contagious_deadly_disease_trigger
#is_healthy
#is_available
#is_available_ai
#is_available_adult
#is_available_healthy_adult
#is_available_ai_adult
#is_available_healthy_ai_adult
#is_capable_adult
#is_capable_adult_ai
#liege_is_boss_trigger
#can_select_lifestyle_focus
#can_marry
#can_become_concubine
has_contagious_deadly_disease_trigger = {
has_trait_with_flag = contagious_deadly_disease
}
is_healthy = {
custom_tooltip = {
text = not_poor_health_tt
health >= fine_health
}
NOT = {
has_trait_with_flag = is_healthy_trigger_flag
}
has_contagious_deadly_disease_trigger = no
}
basic_is_available_ai = {
is_available_quick = {
ai = yes
alive = yes
imprisoned = no
incapable = no
}
has_contagious_deadly_disease_trigger = no
}
is_available_allow_travelling = {
is_available_quick = {
alive = yes
imprisoned = no
incapable = no
in_army = no
}
has_contagious_deadly_disease_trigger = no
custom_description = {
text = ALREADY_IN_ACTIVITY
NOR = {
exists = involved_activity
has_variable = {
name = homage_liege_scope
name = meditation_character_flag
name = local_shrine_rite
name = petition_liege_character_flag
name = holding_court_character_flag
}
is_being_visited_on_tour_strict = yes
}
}
custom_description = {
text = ALREADY_PLANNING_ACTIVITY
NOT = { has_character_flag = planning_an_activity }
}
# Variable set within the adventure inspiration events
NOT = { has_variable = gone_adventuring }
# Variable set on Mandala succession
custom_tooltip = {
text = busy_in_mandala_succession
NOT = { has_variable = busy_in_mandala_succession }
}
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_available = {
is_available_quick = {
alive = yes
travel = no
in_army = no
imprisoned = no
incapable = no
}
has_contagious_deadly_disease_trigger = no
custom_description = {
text = ALREADY_IN_ACTIVITY
NOR = {
exists = involved_activity
has_variable = {
name = homage_liege_scope
name = meditation_character_flag
name = local_shrine_rite
name = petition_liege_character_flag
name = holding_court_character_flag
}
is_being_visited_on_tour_strict = yes
}
}
custom_description = {
text = ALREADY_PLANNING_ACTIVITY
NOT = { has_character_flag = planning_an_activity }
}
# Variable set within the adventure inspiration events
NOT = { has_variable = gone_adventuring }
# Variable set on Mandala succession
custom_tooltip = {
text = busy_in_mandala_succession
NOT = { has_variable = busy_in_mandala_succession }
}
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_available_travelling = {
is_available_quick = {
alive = yes
in_army = no
imprisoned = no
incapable = no
travel = yes
}
has_contagious_deadly_disease_trigger = no
NOR = {
has_character_flag = is_in_task_contract_event_chain
has_variable = gone_adventuring
}
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_available_travelling_adult = {
is_available_quick = {
travel = yes
adult = yes
alive = yes
in_army = no
imprisoned = no
incapable = no
}
has_contagious_deadly_disease_trigger = no
NOR = {
has_character_flag = is_in_task_contract_event_chain
has_variable = gone_adventuring
}
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_available_travelling_ai_adult = {
is_available_quick = {
travel = yes
adult = yes
ai = yes
alive = yes
in_army = no
imprisoned = no
incapable = no
}
has_contagious_deadly_disease_trigger = no
NOR = {
has_character_flag = is_in_task_contract_event_chain
has_variable = gone_adventuring
}
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_physically_able = {
is_available_quick = {
alive = yes
imprisoned = no
incapable = no
}
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_physically_able_ai = {
is_available_quick = {
ai = yes
alive = yes
imprisoned = no
incapable = no
}
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_physically_able_adult = {
is_available_quick = {
adult = yes
alive = yes
imprisoned = no
incapable = no
}
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_physically_able_ai_adult = {
is_available_quick = {
ai = yes
adult = yes
alive = yes
imprisoned = no
incapable = no
}
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_available_ai = {
is_available_quick = {
ai = yes
alive = yes
travel = no
in_army = no
imprisoned = no
incapable = no
}
has_contagious_deadly_disease_trigger = no
custom_description = {
text = ALREADY_IN_ACTIVITY
NOR = {
exists = involved_activity
has_variable = {
name = homage_liege_scope
name = meditation_character_flag
name = local_shrine_rite
name = petition_liege_character_flag
name = holding_court_character_flag
}
is_being_visited_on_tour_strict = yes
}
}
custom_description = {
text = ALREADY_PLANNING_ACTIVITY
NOT = { has_character_flag = planning_an_activity }
}
# Variable set within the adventure inspiration events
NOT = { has_variable = gone_adventuring }
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_available_child = {
is_available_quick = {
adult = no
alive = yes
travel = no
in_army = no
imprisoned = no
incapable = no
}
has_contagious_deadly_disease_trigger = no
custom_description = {
text = ALREADY_IN_ACTIVITY
NOR = {
exists = involved_activity
has_variable = {
name = homage_liege_scope
name = meditation_character_flag
name = local_shrine_rite
name = petition_liege_character_flag
name = holding_court_character_flag
}
is_being_visited_on_tour_strict = yes
}
}
custom_description = {
text = ALREADY_PLANNING_ACTIVITY
NOT = { has_character_flag = planning_an_activity }
}
# Variable set within the adventure inspiration events
NOT = { has_variable = gone_adventuring }
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_available_child_allow_travel = {
is_available_quick = {
adult = no
alive = yes
in_army = no
imprisoned = no
incapable = no
}
has_contagious_deadly_disease_trigger = no
custom_description = {
text = ALREADY_IN_ACTIVITY
NOR = {
exists = involved_activity
has_variable = {
name = homage_liege_scope
name = meditation_character_flag
name = local_shrine_rite
name = petition_liege_character_flag
name = holding_court_character_flag
}
is_being_visited_on_tour_strict = yes
}
}
custom_description = {
text = ALREADY_PLANNING_ACTIVITY
NOT = { has_character_flag = planning_an_activity }
}
# Variable set within the adventure inspiration events
NOT = { has_variable = gone_adventuring }
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_available_ai_child = {
is_available_quick = {
adult = no
ai = yes
alive = yes
travel = no
in_army = no
imprisoned = no
incapable = no
}
has_contagious_deadly_disease_trigger = no
custom_description = {
text = ALREADY_IN_ACTIVITY
NOR = {
exists = involved_activity
has_variable = {
name = homage_liege_scope
name = meditation_character_flag
name = local_shrine_rite
name = petition_liege_character_flag
name = holding_court_character_flag
}
is_being_visited_on_tour_strict = yes
}
}
custom_description = {
text = ALREADY_PLANNING_ACTIVITY
NOT = { has_character_flag = planning_an_activity }
}
# Variable set within the adventure inspiration events
NOT = { has_variable = gone_adventuring }
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_available_healthy_child = {
is_available_quick = {
adult = no
alive = yes
travel = no
in_army = no
imprisoned = no
incapable = no
}
is_healthy = yes
custom_description = {
text = ALREADY_IN_ACTIVITY
NOR = {
exists = involved_activity
has_variable = {
name = homage_liege_scope
name = meditation_character_flag
name = local_shrine_rite
name = petition_liege_character_flag
name = holding_court_character_flag
}
is_being_visited_on_tour_strict = yes
}
}
custom_description = {
text = ALREADY_PLANNING_ACTIVITY
NOT = { has_character_flag = planning_an_activity }
}
# Variable set within the adventure inspiration events
NOT = { has_variable = gone_adventuring }
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_available_healthy_ai_child = {
is_available_quick = {
ai = yes
adult = no
alive = yes
travel = no
in_army = no
imprisoned = no
incapable = no
}
is_healthy = yes
custom_description = {
text = ALREADY_IN_ACTIVITY
NOR = {
exists = involved_activity
has_variable = {
name = homage_liege_scope
name = meditation_character_flag
name = local_shrine_rite
name = petition_liege_character_flag
name = holding_court_character_flag
}
is_being_visited_on_tour_strict = yes
}
}
custom_description = {
text = ALREADY_PLANNING_ACTIVITY
NOT = { has_character_flag = planning_an_activity }
}
# Variable set within the adventure inspiration events
NOT = { has_variable = gone_adventuring }
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_available_adult = {
is_available_quick = {
adult = yes
alive = yes
travel = no
in_army = no
imprisoned = no
incapable = no
}
has_contagious_deadly_disease_trigger = no
custom_description = {
text = ALREADY_IN_ACTIVITY
NOR = {
exists = involved_activity
has_variable = {
name = homage_liege_scope
name = meditation_character_flag
name = local_shrine_rite
name = petition_liege_character_flag
name = holding_court_character_flag
}
is_being_visited_on_tour_strict = yes
}
}
custom_description = {
text = ALREADY_PLANNING_ACTIVITY
NOT = { has_character_flag = planning_an_activity }
}
# Variable set within the adventure inspiration events
NOT = { has_variable = gone_adventuring }
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_available_ai_adult = {
is_available_quick = {
ai = yes
adult = yes
alive = yes
travel = no
in_army = no
imprisoned = no
incapable = no
}
has_contagious_deadly_disease_trigger = no
custom_description = {
text = ALREADY_IN_ACTIVITY
NOR = {
exists = involved_activity
has_variable = {
name = homage_liege_scope
name = meditation_character_flag
name = local_shrine_rite
name = petition_liege_character_flag
name = holding_court_character_flag
}
is_being_visited_on_tour_strict = yes
}
}
custom_description = {
text = ALREADY_PLANNING_ACTIVITY
NOT = { has_character_flag = planning_an_activity }
}
# Variable set within the adventure inspiration events
NOT = { has_variable = gone_adventuring }
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_available_healthy_adult = {
is_available_quick = {
adult = yes
alive = yes
travel = no
in_army = no
imprisoned = no
incapable = no
}
is_healthy = yes
custom_description = {
text = ALREADY_IN_ACTIVITY
NOR = {
exists = involved_activity
has_variable = {
name = homage_liege_scope
name = meditation_character_flag
name = local_shrine_rite
name = petition_liege_character_flag
name = holding_court_character_flag
}
is_being_visited_on_tour_strict = yes
}
}
custom_description = {
text = ALREADY_PLANNING_ACTIVITY
NOT = { has_character_flag = planning_an_activity }
}
# Variable set within the adventure inspiration events
NOT = { has_variable = gone_adventuring }
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_available_healthy_ai_adult = {
is_available_quick = {
ai = yes
adult = yes
alive = yes
travel = no
in_army = no
imprisoned = no
incapable = no
}
is_healthy = yes
custom_description = {
text = ALREADY_IN_ACTIVITY
NOR = {
exists = involved_activity
has_variable = {
name = homage_liege_scope
name = meditation_character_flag
name = local_shrine_rite
name = petition_liege_character_flag
name = holding_court_character_flag
}
is_being_visited_on_tour_strict = yes
}
}
custom_description = {
text = ALREADY_PLANNING_ACTIVITY
NOT = { has_character_flag = planning_an_activity }
}
# Variable set within the adventure inspiration events
NOT = { has_variable = gone_adventuring }
}
is_available_adult_or_is_commanding = {
OR = {
is_commanding_army = yes
is_available_adult = yes
}
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_available_at_peace = {
is_available_quick = {
at_war = no
alive = yes
travel = no
in_army = no
imprisoned = no
incapable = no
}
has_contagious_deadly_disease_trigger = no
custom_description = {
text = ALREADY_IN_ACTIVITY
NOR = {
exists = involved_activity
has_variable = {
name = homage_liege_scope
name = meditation_character_flag
name = local_shrine_rite
name = petition_liege_character_flag
name = holding_court_character_flag
}
is_being_visited_on_tour_strict = yes
}
}
custom_description = {
text = ALREADY_PLANNING_ACTIVITY
NOT = { has_character_flag = planning_an_activity }
}
# Variable set within the adventure inspiration events
NOT = { has_variable = gone_adventuring }
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_available_at_peace_adult = {
is_available_quick = {
at_war = no
adult = yes
alive = yes
travel = no
in_army = no
imprisoned = no
incapable = no
}
has_contagious_deadly_disease_trigger = no
custom_description = {
text = ALREADY_IN_ACTIVITY
NOR = {
exists = involved_activity
has_variable = {
name = homage_liege_scope
name = meditation_character_flag
name = local_shrine_rite
name = petition_liege_character_flag
name = holding_court_character_flag
}
is_being_visited_on_tour_strict = yes
}
}
custom_description = {
text = ALREADY_PLANNING_ACTIVITY
NOT = { has_character_flag = planning_an_activity }
}
# Variable set within the adventure inspiration events
NOT = { has_variable = gone_adventuring }
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_available_at_peace_ai_adult = {
is_available_quick = {
ai = yes
adult = yes
alive = yes
imprisoned = no
incapable = no
travel = no
in_army = no
at_war = no
}
has_contagious_deadly_disease_trigger = no
custom_description = {
text = ALREADY_IN_ACTIVITY
NOR = {
exists = involved_activity
has_variable = {
name = homage_liege_scope
name = meditation_character_flag
name = local_shrine_rite
name = petition_liege_character_flag
name = holding_court_character_flag
}
is_being_visited_on_tour_strict = yes
}
}
custom_description = {
text = ALREADY_PLANNING_ACTIVITY
NOT = { has_character_flag = planning_an_activity }
}
# Variable set within the adventure inspiration events
NOT = { has_variable = gone_adventuring }
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_available_at_peace_adult_lenient = {
is_available_quick = {
adult = yes
alive = yes
travel = no
in_army = no
imprisoned = no
incapable = no
at_war = no
}
has_contagious_deadly_disease_trigger = no
custom_description = {
text = ALREADY_IN_ACTIVITY
NOR = {
exists = involved_activity
has_variable = {
name = homage_liege_scope
name = meditation_character_flag
name = local_shrine_rite
name = petition_liege_character_flag
name = holding_court_character_flag
}
is_being_visited_on_tour_strict = yes
}
}
custom_description = {
text = ALREADY_PLANNING_ACTIVITY
NOT = { has_character_flag = planning_an_activity }
}
# Variable set within the adventure inspiration events
NOT = { has_variable = gone_adventuring }
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
# Meaning you may be at war, but you're still located in your capital.
is_available_even_at_war_adult = {
is_available_quick = {
adult = yes
alive = yes
travel = no
in_army = no
imprisoned = no
incapable = no
}
has_contagious_deadly_disease_trigger = no
custom_description = {
text = ALREADY_IN_ACTIVITY
NOR = {
exists = involved_activity
has_variable = {
name = homage_liege_scope
name = meditation_character_flag
name = local_shrine_rite
name = petition_liege_character_flag
name = holding_court_character_flag
}
is_being_visited_on_tour_strict = yes
}
}
custom_description = {
text = ALREADY_PLANNING_ACTIVITY
NOT = { has_character_flag = planning_an_activity }
}
# Variable set within the adventure inspiration events
NOT = { has_variable = gone_adventuring }
}
is_capable_adult = {
is_available_quick = {
adult = yes
incapable = no
}
}
is_capable_adult_ai = {
is_available_quick = {
ai = yes
adult = yes
incapable = no
}
}
can_select_lifestyle_focus = {
is_capable_adult = yes
is_playable_character = yes
}
is_not_hostile_towards_root = {
NOR = {
is_a_faction_member = yes
any_scheme = {
hostile_scheme_trigger = yes
scheme_target_character = root
}
is_at_war_with = root
}
}
player_target_available_for_personal_scheme_ongoing_events_trigger = {
$TARGET$ = {
trigger_if = {
limit = {
is_ai = no
$OWNER$ = { is_ruler = no }
}
is_at_war = no
}
trigger_else = {
always = yes
}
}
}
basic_is_valid_for_yearly_events_trigger = {
is_playable_character = yes
is_available_quick = {
imprisoned = no
incapable = no
}
OR = {
is_travelling = no
has_government = landless_adventurer_government
}
NOR = {
has_character_flag = is_in_task_contract_event_chain
exists = involved_activity
}
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_valid_for_narrow_yearly_events = {
is_available_quick = {
at_war = no
imprisoned = no
incapable = no
}
is_commanding_army = no
is_playable_character = yes
OR = {
is_travelling = no
has_government = landless_adventurer_government
}
NOR = {
has_character_flag = is_in_task_contract_event_chain
exists = involved_activity
}
}
# If you update one of the available triggers, update all of them. It's a lot better for performance to not have scripted triggers within scripted triggers when they're checked as often as these ones are.
is_valid_for_narrow_yearly_events_adult = {
is_available_quick = {
adult = yes
at_war = no
imprisoned = no
incapable = no
}
is_commanding_army = no
is_playable_character = yes
OR = {
is_travelling = no
has_government = landless_adventurer_government
}
NOR = {
has_character_flag = is_in_task_contract_event_chain
exists = involved_activity
}
}
is_within_diplo_range = {
capital_province ?= {
save_temporary_scope_as = my_capital
$CHARACTER$.capital_province ?= {
squared_distance = {
target = scope:my_capital
value < 200000
}
}
}
}
# This trigger checks if a character is a Nomad
is_nomad = {
government_has_flag = government_is_nomadic
is_ruler = yes
}
# This trigger checks if a character is a landed Nomad
is_landed_nomad = {
government_has_flag = government_is_nomadic
is_available_quick = {
ruler = yes
landed = yes
}
}
# Checks if a character is a landless nomad with a domicile
is_landless_nomad = {
government_has_flag = government_is_nomadic
is_landed = no
has_domicile = yes
}
# This trigger checks if a character is a landless adventurer
is_landless_adventurer = {
OR = {
government_has_flag = government_is_landless_adventurer
government_has_flag = government_is_landless_minority
}
}
# This trigger checks if a character is a governor in an admin realm (implying they are landed)
is_governor = {
government_allows = administrative
is_landed = yes
top_liege != this
OR = {
highest_held_title_tier >= main_administrative_tier
highest_held_title_tier >= min_title_maa_tier
}
tgp_is_ceremonial_liege_trigger = no
}
is_governor_or_admin_count = {
government_allows = administrative
is_landed = yes
top_liege != this
highest_held_title_tier >= tier_county
tgp_is_ceremonial_liege_trigger = no
}
# Checks if a character is a landless house_head within an admin realm
is_landless_administrative = {
government_allows = administrative
is_landed = no
is_house_head = yes
has_domicile = yes
}
# Checks if a character is a landless house_head within a feudal realm
is_landless_soryo = {
government_has_flag = government_is_japan_feudal
is_landed = no
is_house_head = yes
has_domicile = yes
}
# Checks if a character is either landed or an unlanded house head within an admin realm
is_landed_or_landless_administrative = {
OR = {
is_landed = yes
is_landless_administrative = yes
}
}
# Checks if a character is either landed, a landless house head within an admin realm, a landless nomad, a landless adventurer, a landless soryo, or a minister
is_playable_character = {
OR = {
is_landed = yes
is_landless_administrative = yes
is_landless_adventurer = yes
is_landless_nomad = yes
is_landless_soryo = yes
tgp_is_any_minister = yes # To keep ministers playable, regardless of having a nobel family title or not
}
}
roman_restoration_is_valid_roman_empire_trigger = {
is_ai = no
is_roman_emperor_trigger = yes
OR = {
religion = religion:christianity_religion #Either Christian
religion = religion:hellenism_religion #Or Hellenic
}
NOT = { has_ep3_dlc_trigger = yes }
}
is_eunuch_trigger = {
OR = {
has_trait = eunuch_1
has_trait = beardless_eunuch
}
}

View file

@ -267,17 +267,8 @@ building_paddy_fields_requirement_terrain = {
text = building_paddy_fields_requirement_terrain_tt
OR = {
terrain = terraced_hills
AND = {
terrain = floodplains
OR = {
geographical_region = graphical_east_asia
geographical_region = custom_viet_lands
}
}
AND = {
terrain = wetlands
county.culture = { has_cultural_parameter = champa_rice_wet_land_paddies }
}
terrain = floodplains
terrain = wetlands
AND = {
OR = {
terrain = hills
@ -289,6 +280,20 @@ building_paddy_fields_requirement_terrain = {
}
}
building_potato_fields_requirement_terrain = {
custom_tooltip = {
text = building_potato_fields_requirement_terrain_tt
OR = {
terrain = farmlands
terrain = hills
terrain = tells
terrain = plains
terrain = steppe
terrain = mountains
}
}
}
building_cereal_fields_requirement_terrain = {
OR = {
terrain = farmlands

View file

@ -126,6 +126,20 @@ portrait_wear_armor_trigger = {
limit = { portrait_sickness_trigger = yes }
is_in_army = yes
}
trigger_if = {
limit = { government_allows = barter }
OR = {
is_at_war = yes
involved_activity = { has_activity_type = activity_tournament }
# Serving Varangian
has_character_flag = is_currently_varangian
# In a Duel
has_character_flag = single_combat_duel_armor
has_character_flag = forced_knight_armor
# In a Tournament
activity_tournament_armor_trigger = yes
}
}
OR = {
# Mercenaries, Holy Orders, Adventurers
AND = {

View file

@ -15,7 +15,7 @@ maa_regiments_valid_for_cheap_reinforcement_trigger = {
}
maa_regiments_cost_more_to_reinforce_per_soldier_trigger = {
regiment_owner = { government_has_flag = government_is_landless_adventurer }
regiment_owner = { OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } }
OR = {
is_unit_type = elephant_cavalry
is_unit_type = siege_weapon
@ -26,7 +26,7 @@ maa_regiments_valid_to_refill_trigger = {
maa_current_troops_count < maa_max_troops_count
trigger_if = {
limit = {
scope:actor = { government_has_flag = government_is_landless_adventurer }
scope:actor = { OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } }
is_unit_type = elephant_cavalry
}
scope:actor.domicile ?= { has_domicile_parameter = camp_reinforce_elephant_regiments_anywhere }
@ -193,11 +193,6 @@ is_valid_for_laampdom = {
ai_boldness >= low_negative_ai_value
ai_energy >= low_negative_ai_value
}
NOR = {
has_trait = content # Too chill to adventure
has_trait = craven # Too scared to adventure
has_trait = lazy # Too lazy to adventure
}
# Block admin members of noble families
NOT = {
house ?= {
@ -405,7 +400,7 @@ valid_laamp_basic_trigger = {
$EMPLOYER$ = {
OR = {
employer = $LAAMP$
NOT = { government_has_flag = government_is_landless_adventurer }
NOT = { OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } }
}
}
# Don't offer to work with those who've wronged us.
@ -435,7 +430,7 @@ valid_laamp_basic_trigger = {
}
}
}
$LAAMP$ = { government_has_flag = government_is_landless_adventurer }
$LAAMP$ = { OR = { government_has_flag = government_is_landless_adventurer government_has_flag = government_is_landless_minority } }
$LAAMP$ = {
trigger_if = {
limit = { is_at_war = no }

View file

@ -0,0 +1,511 @@

character_gender_can_rule_title_trigger = {
trigger_if = {
limit = {
$GENDER$ = { is_male = yes }
exists = $TITLE$
$TITLE$ = {
NOT = {
has_title_law = female_only_law
}
}
}
always = yes
}
trigger_else_if = {
limit = {
$GENDER$ = { is_female = yes }
exists = $TITLE$
$TITLE$ = {
NOT = {
has_title_law = male_only_law
}
}
}
always = yes
}
trigger_else = {
always = no
}
}
character_gender_can_inherit_from_trigger = {
save_temporary_scope_as = heir
trigger_if = {
limit = {
$CHARACTER$ = { exists = primary_title }
}
$CHARACTER$ = {
character_gender_can_rule_title_trigger = {
GENDER = scope:heir
TITLE = primary_title
}
}
}
trigger_else = {
always = no
}
}
has_partition_succession_realm_law_trigger = {
OR = {
has_realm_law = confederate_partition_succession_law
has_realm_law = partition_succession_law
has_realm_law = high_partition_succession_law
has_realm_law = clan_antagonistic_partition_succession_law
has_realm_law = clan_competitive_partition_succession_law
has_realm_law = clan_impassive_partition_succession_law
has_realm_law = clan_friendly_partition_succession_law
has_realm_law = clan_harmonious_partition_succession_law
}
}
realm_law_use_crown_authority = {
government_has_flag = government_uses_crown_authority
}
realm_law_use_tribal_authority = {
government_has_flag = government_is_tribal
}
realm_law_use_camp_purpose = {
government_has_flag = government_is_landless_adventurer
}
realm_law_use_imperial_bureaucracy = {
government_allows = administrative
NOR = {
government_has_flag = government_is_celestial
government_has_flag = government_is_meritocratic
government_has_flag = government_is_steppe_admin
government_has_flag = government_is_japan_administrative
}
}
realm_law_use_nomadic_authority = {
government_has_flag = government_is_nomadic
}
realm_law_use_celestial_bureaucracy = {
government_has_flag = government_is_celestial
}
realm_law_is_mandala = {
government_has_flag = government_is_mandala
}
realm_law_use_meritocratic_bureaucracy = {
OR = {
government_has_flag = government_is_meritocratic
government_has_flag = government_is_steppe_admin
}
}
realm_uses_treasury_laws_trigger = {
government_allows = treasury
}
realm_law_use_japanese_bureaucracy = {
government_is_japanese_trigger = yes
}
can_have_confederate_partition_succession_law_trigger = {
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_tribal
government_has_flag = government_is_minority
# TGP
AND = {
government_has_flag = government_is_japan_feudal
tgp_realm_has_ceremonial_liege_trigger = yes
is_independent_ruler = no
}
}
}
can_keep_partition_succession_law_trigger = {
# The 'can_keep' triggers are dependent on actually having the law. If they aren't, the trigger breakdown for the player breaks and shows incomplete information.
trigger_if = {
limit = {
has_realm_law = partition_succession_law
}
OR = {
can_have_partition_succession_law_trigger = yes
# Mongol Empires
has_title = title:e_mongol_empire
has_title = title:e_ilkhanate
has_title = title:e_golden_horde
has_title = title:e_chagatai
has_title = title:e_red_horde
has_title = title:e_white_horde
has_title = title:e_aarlud_khanate
has_title = title:e_togskol_khanate
has_title = title:e_baruun_khanate
has_title = title:e_great_yuan
has_title = title:e_blue_horde
has_title = title:e_omnod_dalai_khanate
}
}
NOT = { government_has_flag = government_is_clan }
}
can_have_partition_succession_law_trigger = {
culture = {
has_innovation = innovation_hereditary_rule
}
custom_description = {
text = succession_laws_must_have_organised_government_tooltip
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
government_has_flag = government_is_japan_feudal
}
}
}
can_keep_high_partition_succession_law_trigger = {
# The 'can_keep' triggers are dependent on actually having the law. If they aren't, the trigger breakdown for the player breaks and shows incomplete information.
trigger_if = {
limit = {
has_realm_law = high_partition_succession_law
}
OR = {
can_have_high_partition_succession_law_trigger = yes
# Mongol Empires
has_title = title:e_mongol_empire
has_title = title:e_ilkhanate
has_title = title:e_golden_horde
has_title = title:e_chagatai
has_title = title:e_red_horde
has_title = title:e_white_horde
has_title = title:e_aarlud_khanate
has_title = title:e_togskol_khanate
has_title = title:e_baruun_khanate
has_title = title:e_great_yuan
has_title = title:e_blue_horde
has_title = title:e_omnod_dalai_khanate
}
}
NOT = { government_has_flag = government_is_clan}
}
can_have_high_partition_succession_law_trigger = {
trigger_if = {
limit = {
NOT = {
culture = { has_cultural_parameter = can_enact_high_partition_succession_law }
}
}
culture = { has_innovation = innovation_heraldry }
}
custom_description = {
text = succession_laws_must_have_organised_government_tooltip
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
government_has_flag = government_is_japan_feudal
}
}
}
can_keep_single_heir_succession_law_trigger = {
# The 'can_keep' triggers are dependent on actually having the law. If they aren't, the trigger breakdown for the player breaks and shows incomplete information.
trigger_if = {
limit = {
has_realm_law = single_heir_succession_law
}
OR = {
can_have_single_heir_succession_law_trigger = yes
# Byzantine Empire / Ceremonial Liege
historical_succession_access_single_heir_succession_law_trigger = yes
has_variable = purge_oath_previous_law # ACH Purge Pretenders Oath
}
}
}
can_have_single_heir_succession_law_trigger = {
trigger_if = { # Celestial/Meritocratic/Soryo
limit = {
OR = {
government_allows = merit
government_has_flag = government_is_japan_feudal
}
}
custom_tooltip = { # You are independent, have the innovation or are Ceremonial Monarch
text = can_have_single_heir_succession_law_trigger_merit_or_japan_tt
OR = {
is_independent_ruler = yes
culture = {
has_innovation = innovation_primogeniture
}
tgp_has_ceremonial_liege_title_trigger = yes
}
}
}
trigger_else_if = {
limit = { tgp_realm_has_ceremonial_liege_trigger = yes }
tgp_has_ceremonial_liege_title_trigger = yes
}
trigger_else = {
culture = {
has_innovation = innovation_primogeniture
}
}
# Non-tribals only
trigger_if = { # We split the tooltip into two, to make sure we don't show admin unless you actually have it
limit = {
has_ep3_dlc_trigger = yes
}
custom_tooltip = {
text = must_be_feudal_clan_or_admin
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
government_allows = administrative
government_has_flag = government_is_japan_feudal
tgp_has_ceremonial_liege_title_trigger = yes
}
}
}
trigger_else = {
custom_description = {
text = succession_laws_must_have_organised_government_tooltip
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
government_allows = merit
government_has_flag = government_is_japan_feudal
tgp_has_ceremonial_liege_title_trigger = yes
}
}
}
# Admin rules
trigger_if = {
limit = { government_allows = administrative }
trigger_if = {
limit = { tgp_realm_has_ceremonial_liege_trigger = yes }
tgp_has_ceremonial_liege_title_trigger = yes
}
trigger_else = { is_independent_ruler = yes }
}
}
can_keep_single_heir_youngest_succession_law_trigger = {
# The 'can_keep' triggers are dependent on actually having the law. If they aren't, the trigger breakdown for the player breaks and shows incomplete information.
trigger_if = {
limit = {
has_realm_law = single_heir_succession_law_youngest
}
OR = {
can_have_single_heir_youngest_succession_law_trigger = yes
historical_succession_access_single_heir_succession_law_youngest_trigger = yes
}
}
}
can_have_single_heir_youngest_succession_law_trigger = {
culture = {
has_innovation = innovation_primogeniture
}
# Non-tribals only
trigger_if = { # We split the tooltip into two, to make sure we don't show admin unless you actually have it
limit = {
has_ep3_dlc_trigger = yes
}
custom_tooltip = {
text = must_be_feudal_clan_or_admin
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
government_allows = administrative
government_has_flag = government_is_japan_feudal
}
}
}
trigger_else = {
custom_description = {
text = succession_laws_must_have_organised_government_tooltip
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
government_has_flag = government_is_japan_feudal
}
}
}
trigger_if = {
limit = {
government_allows = administrative
}
is_independent_ruler = yes
}
}
can_keep_single_heir_dynasty_house_trigger = {
# The 'can_keep' triggers are dependent on actually having the law. If they aren't, the trigger breakdown for the player breaks and shows incomplete information.
trigger_if = {
limit = {
has_realm_law = single_heir_dynasty_house
}
OR = {
can_have_single_heir_dynasty_house_trigger = yes
historical_succession_access_single_heir_dynasty_house_trigger = yes
}
}
}
can_have_single_heir_dynasty_house_trigger = {
exists = house
trigger_if = {
limit = {
culture = {
OR = {
this = culture:czech
this = culture:slovien
any_parent_culture_or_above = {
this = culture:czech
}
any_parent_culture_or_above = {
this = culture:slovien
}
NOT = { has_innovation = innovation_heraldry }
}
}
}
culture = {
has_innovation = innovation_table_of_princes
}
}
trigger_else = {
culture = {
has_innovation = innovation_heraldry
}
}
custom_description = {
text = succession_laws_must_have_organised_government_tooltip
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
government_has_flag = government_is_japan_feudal
}
}
NOT = { government_allows = administrative }
}
can_have_bishop_theocratic_succession_law_trigger = {
OR = {
is_theocratic_lessee = yes
government_has_flag = government_is_theocracy
}
}
is_temporal_head_of_faith_trigger = {
is_head_of_faith = yes
holder.faith = { has_doctrine = doctrine_temporal_head }
}
can_title_have_law_general_trigger = {
tier >= tier_duchy
is_temporal_head_of_faith_trigger = no
}
can_have_holy_order_succession_law_trigger = {
government_has_flag = government_is_holy_order
}
can_have_mercenary_succession_law_trigger = {
government_has_flag = government_is_mercenary
}
can_have_city_succession_law_trigger = {
government_has_flag = government_is_republic
}
can_have_herder_succession_law_trigger = {
government_has_flag = government_is_herder
}
title_can_reduce_partition_law_trigger = {
holder ?= {
OR = {
has_realm_law = single_heir_succession_law
can_have_high_partition_succession_law_trigger = yes
}
OR = {
has_realm_law = high_partition_succession_law
can_have_high_partition_succession_law_trigger = yes
}
OR = {
has_realm_law = partition_succession_law
can_have_confederate_partition_succession_law_trigger = yes
}
}
}
can_pass_law_ca1_trigger = {
culture = { has_innovation = innovation_plenary_assemblies }
}
can_pass_law_ca2_trigger = {
culture = { has_innovation = innovation_royal_prerogative }
}
can_pass_law_ca3_trigger = {
culture = { has_innovation = innovation_royal_prerogative }
}
can_have_acclamation_succession_law_trigger = {
has_ep3_dlc_trigger = yes
top_liege = this
government_allows = administrative
NOR = {
government_has_flag = government_is_celestial
government_has_flag = government_is_japan_administrative
government_has_flag = government_is_meritocratic
government_has_flag = government_is_steppe_admin
}
}
can_keep_acclamation_succession_law_trigger = {
has_ep3_dlc_trigger = yes
trigger_if = {
limit = {
has_realm_law = acclamation_succession_law
}
OR = {
can_have_acclamation_succession_law_trigger = yes
has_title = title:e_byzantium
}
}
}
can_change_acclamation_succession_law_trigger = {
has_ep3_dlc_trigger = yes
}
can_have_appointment_succession_law_trigger = {
has_ep3_dlc_trigger = yes
government_allows = administrative
NOR = {
government_has_flag = government_is_celestial
government_has_flag = government_is_japan_administrative
government_has_flag = government_is_meritocratic
}
is_independent_ruler = no
}
can_keep_appointment_succession_law_trigger = {
has_ep3_dlc_trigger = yes
trigger_if = {
limit = {
has_realm_law = appointment_succession_law
}
can_have_appointment_succession_law_trigger = yes
}
}
can_change_appointment_succession_law_trigger = {
has_ep3_dlc_trigger = yes
}

View file

@ -0,0 +1,176 @@

### Legal trigger list
opposes_succession_law_change_trigger = {
is_imprisoned = no
opinion = {
target = liege
value < 0
}
custom_description = {
text = law_change_approval_is_cowed
has_dread_level_towards = {
target = liege
level < 2
}
}
}
can_change_succession_laws_realm_flag_trigger = {
trigger_if = {
limit = { realm_law_use_tribal_authority = yes }
custom_description = {
text = "has_tribal_law_allowing_succession_law_change"
has_realm_law_flag = can_change_succession_laws
}
}
trigger_else_if = {
limit = { realm_law_use_imperial_bureaucracy = yes }
custom_description = {
text = has_imperial_bureaucracy_law_allowing_succession_law_change
has_realm_law_flag = can_change_succession_laws
}
}
trigger_else = {
custom_description = {
text = "has_crown_law_allowing_succession_law_change"
has_realm_law_flag = can_change_succession_laws
}
}
}
can_change_succession_law_trigger = {
can_change_succession_laws_realm_flag_trigger = yes
custom_description = {
text = "no_powerful_vassal_with_negative_opinion"
NOT = {
any_vassal = {
is_powerful_vassal = yes
opposes_succession_law_change_trigger = yes
}
}
}
}
can_change_single_heir_dynasty_house_succession_law_trigger = {
trigger_if = {
limit = {
culture = {
OR = {
this = culture:czech
this = culture:slovien
any_parent_culture_or_above = {
this = culture:czech
}
any_parent_culture_or_above = {
this = culture:slovien
}
}
}
NOT = {
has_realm_law_flag = can_change_succession_laws
}
}
culture = {
has_innovation = innovation_table_of_princes
}
}
trigger_else = {
can_change_succession_laws_realm_flag_trigger = yes
}
custom_description = {
text = "no_powerful_vassal_with_negative_opinion"
NOT = {
any_vassal = {
is_powerful_vassal = yes
opposes_succession_law_change_trigger = yes
}
}
}
}
can_change_to_equal_succession_law_trigger = {
trigger_if = {
limit = {
NOT = { has_realm_law_flag = can_change_succession_laws }
}
OR = {
culture = { has_cultural_parameter = gender_equal_inheritance }
faith = { has_doctrine = doctrine_gender_equal }
}
}
trigger_else = {
can_change_succession_laws_realm_flag_trigger = yes
}
custom_description = {
text = "no_powerful_vassal_with_negative_opinion"
NOT = {
any_vassal = {
is_powerful_vassal = yes
opposes_succession_law_change_trigger = yes
}
}
}
}
can_change_partition_succession_law_trigger = {
custom_description = {
text = "has_law_allowing_partition_succession_law_change"
OR = {
has_realm_law_flag = can_change_partition_succession_laws
has_realm_law_flag = can_change_succession_laws
}
}
custom_description = {
text = "no_powerful_vassal_with_negative_opinion"
NOT = {
any_vassal = {
is_powerful_vassal = yes
opposes_succession_law_change_trigger = yes
}
}
}
}
## Can this character assign a dedicated heir?
#
# Check if a character can assign some designated heir,
# but not if the heir is a valid candidate.
#
# root: Character that will assign an heir
#
can_designate_heir_trigger = {
trigger_if = {
# Admin always has access to this
limit = { government_allows = administrative }
custom_description = {
text = "has_admin_allowing_designate_heir"
any_held_title = {
is_noble_family_title = yes
}
}
}
trigger_else_if = {
# Feudal and clan can get this by increasing crown authority
limit = { has_realm_law_in_group = crown_authority }
custom_description = {
text = "has_crown_authority_designate_heir"
has_realm_law_flag = can_designate_heirs
}
}
trigger_else = {
# Everyone else also needs a law to gain access to this interaction
custom_description = {
text = "has_law_allowing_designate_heir"
has_realm_law_flag = can_designate_heirs
}
}
}
can_change_title_law_trigger = {
is_at_war = no
}

File diff suppressed because it is too large Load diff

View file

@ -898,3 +898,32 @@ tgp_capital_not_in_chinese_naming_region = {
}
}
}
farm_estates_3_4_trigger = {
custom_tooltip = {
text = farm_estates_3_4_trigger
OR = {
AND = {
building_requirement_castle_city_church = { LEVEL = 02 }
scope:holder.culture = {
has_innovation = innovation_manorialism
}
building_farm_estates_requirement_terrain = yes
}
AND = {
has_building_or_higher = pastures_04
culture = {
has_cultural_parameter = farm_estates_pastures_unlock
}
}
AND = {
building_paddy_fields_requirement_terrain = yes
scope:holder.culture = {
has_innovation = innovation_champa_rice
has_innovation = innovation_manorialism
}
building_requirement_castle_city_church = { LEVEL = 02 }
}
}
}
}

View file

@ -0,0 +1,104 @@
<key> = {
# for grouping together contract types, e.g. mercenary, potentially determines map icon
group = test_group
# Icon used in the UI
icon = "path/to/image.dds"
# Description or 'back-story' of the task contract, defaults to "<key>_desc"
# root = task_contract_type
desc = ""
# Description for request telling 'what to do' in order to complete the contract, defaults to "<key>_request"
# root = task_contract_type
task_contract_request = ""
# Contract owner should travel to contract location to accept and stay there for the duration of the contract
travel = no
# Contract is of a criminal nature
is_criminal = no
# Range setting
# yes - uses diplomatic range to contract employer
# no - uses ADVENTURER_DISTANCE_RESTRICTION define as radius
use_diplomatic_range = no
# Validity Triggers
## Can contract appear? (if triggers are true)
# root - contract owner
# scope:employer - contract employer, can be empty
valid_to_create = {
<trigger>
}
# Can contract be accepted? (if triggers are true)
# root - contract owner
# scope:employer - contract employer, can be empty
valid_to_accept = {
<trigger>
}
# Should contract invalidate? (if triggers are false)
# root - existing contract
valid_to_continue = {
<trigger>
}
# Should not taken contract invalidate? (if triggers are false)
# root - existing contract
valid_to_keep = {
<trigger>
}
# On-Action Effects
## Effects called when contract is created (create_task_contract effect)
on_create = {
<effects>
}
## Effects called when contract is accepted (accept_task_contract effect)
on_accepted = {
<effects>
}
# Effects called when contract is completed successfully, along with rewards (complete_task_contract effect)
on_completed = {
<effects>
}
# Effects called when contract is invalidated (valid_to_continue is false, or invalidate_task_contract effect)
on_invalidated = {
<effects>
}
# Default = no, showing completed contract toast animation
should_show_toast_on_complete = no
# Contract Reward Effects
task_contract_reward = {
#reward name
<string> = {
# Default = no, showing completed contract reward effect desription
should_print_on_complete = no
effect = {
<effects>
}
# Should this possible reward be shown in the UI. It will still be displayed in the effect on completion
# if that's what owner gets
visible = yes
# Is this reward positive 'Upon Success' or negative 'Upon Failure'
# default is yes
positive = yes
}
}
# scripted value how likely this contract type is to be picked when populating for area
# root - contract owner
# scope:employer - contract employer, can be empty
weight = {
value = 0
}
}

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

@ -0,0 +1,969 @@
##################################################
# INFO
# Extra contracts for laamps.
##################################################
laamp_boost_legitimacy_contract = {
group = laamp_contracts_diplomacy_group
icon = "gfx/interface/icons/scheme_types/diplomacy.dds"
travel = yes
use_diplomatic_range = yes
valid_to_create = {
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
employer_has_treasury_to_offer_job_trigger = yes
valid_laamp_sensible_start_trigger = yes
scope:employer = {
legitimacy_level <= 2
top_liege = this
is_landed = yes
is_ai = yes
NOR = {
location = root.location
government_has_flag = government_is_theocracy
}
highest_held_title_tier > tier_county
location = {
squared_distance = {
target = root.location
value <= squared_distance_large
}
}
}
}
valid_to_accept = {
# Standard triggers.
valid_laamp_basic_accept_only_trigger = yes
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
}
valid_to_continue = {
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
valid_to_keep = {
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
weight = {
# Standard weights.
value = task_contract_weight_interesting_somewhat_rare_value
add = laamp_contracts_weight_up_diplomacy_value
add = laamp_contracts_weight_up_diplomacy_slight_value
add = task_contract_weight_employer_contact_list_value
scope:employer = { multiply = task_contract_weight_by_tier_value }
}
on_create = {
scope:contract = {
save_scope_as = task_contract
task_contract_employer = {
save_scope_as = task_contract_employer
capital_province = {
save_scope_as = task_contract_destination
}
}
set_variable = {
name = task_contract_employer
value = scope:task_contract_employer
}
set_variable = {
name = task_contract_destination
value = scope:task_contract_destination
}
# Make our gold rewards static.
grab_gold_fuzz_number_effect = yes
save_scope_as = task_contract
set_variable = {
name = gold_success_standard
value = task_contract_taker.task_contract_success_gold_gain_full_value
}
}
}
on_accepted = {
save_scope_as = task_contract
task_contract_taker = {
trigger_event = {
id = ep3_contract_event.0510
delayed = yes
}
}
}
task_contract_reward = {
success_standard = {
should_print_on_complete = yes
effect = {
save_scope_as = task_contract
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_value_as = { name = extra_reward value = flag:no }
task_contract_taker = {
send_interface_toast = {
title = laamp_transport_contract.success #Re-using
left_icon = scope:task_contract.task_contract_taker
right_icon = scope:task_contract.task_contract_employer
scope:task_contract = {
# Standard Rewards.
laamp_rewards_disburse_ordinary_currency_effect = {
GOLD = scope:task_contract.var:gold_success_standard
PRESTIGE = task_contract_success_prestige_gain_full_value
PIETY = 0
PROVISIONS = 0
OPINION = task_contract_opinion_standard_reward_value
OPINION_TYPE = succeeded_task_contract_opinion
CONTACT = yes
CONTACT_HOOK = no
EXTRA_REWARD = scope:extra_reward
}
task_contract_employer = {
add_legitimacy = minor_legitimacy_gain
}
}
}
}
}
}
failure_standard = {
positive = no
effect = {
save_scope_as = task_contract
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
save_scope_value_as = { name = extra_reward value = flag:no }
# Standard Penalties.
laamp_rewards_disburse_ordinary_currency_effect = {
GOLD = 0
PRESTIGE = task_contract_failure_prestige_loss_full_value
PIETY = 0
PROVISIONS = task_contract_failure_provisions_gain_minor_value
OPINION = task_contract_opinion_standard_failure_value
OPINION_TYPE = failed_task_contract_opinion
CONTACT = no
CONTACT_HOOK = no
EXTRA_REWARD = scope:extra_reward
}
task_contract_employer = {
add_legitimacy = miniscule_legitimacy_loss
}
}
}
failure_critical = {
positive = no
effect = {
save_scope_as = task_contract
# Standard Penalties.
laamp_rewards_disburse_ordinary_currency_effect = {
GOLD = 0
PRESTIGE = task_contract_failure_prestige_loss_double_value
PIETY = 0
PROVISIONS = task_contract_failure_provisions_gain_minor_value
OPINION = task_contract_opinion_critical_failure_value
OPINION_TYPE = failed_task_contract_opinion
CONTACT = no
CONTACT_HOOK = no
EXTRA_REWARD = scope:extra_reward
}
task_contract_employer = {
add_legitimacy = medium_legitimacy_loss
add_prestige = task_contract_failure_prestige_loss_double_value
add_stress = medium_stress_gain
}
}
}
}
}
laamp_rid_councillor_contract = {
group = laamp_contracts_martial_group
icon = "gfx/interface/icons/scheme_types/martial.dds"
travel = yes
use_diplomatic_range = yes
is_criminal = yes
valid_to_create = {
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
employer_has_treasury_to_offer_job_trigger = yes
valid_laamp_sensible_start_trigger = yes
scope:employer = {
top_liege = this
is_landed = yes
is_ai = yes
NOT = {
government_has_flag = government_is_theocracy
}
highest_held_title_tier > tier_county #Requires a council
location = { #Not too far away
squared_distance = {
target = root.location
value <= squared_distance_large
}
}
any_councillor = { #Has a councillor who they hate
count > 1
is_ai = yes
reverse_opinion = {
target = scope:employer
value <= high_negative_opinion
}
}
}
}
valid_to_accept = {
# Standard triggers.
valid_laamp_basic_accept_only_trigger = yes
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
}
valid_to_continue = {
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
valid_to_keep = {
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
weight = {
# Standard weights.
value = task_contract_weight_interesting_somewhat_rare_value
add = laamp_contracts_weight_up_martial_value
add = laamp_contracts_weight_up_martial_slight_value
add = task_contract_weight_employer_contact_list_value
scope:employer = { multiply = task_contract_weight_by_tier_value }
}
on_create = {
scope:contract = {
save_scope_as = task_contract
task_contract_employer = {
save_scope_as = task_contract_employer
capital_province = {
save_scope_as = task_contract_destination
}
}
set_variable = {
name = task_contract_employer
value = scope:task_contract_employer
}
set_variable = {
name = task_contract_destination
value = scope:task_contract_destination
}
# Make our gold rewards static.
grab_gold_fuzz_number_effect = yes
save_scope_as = task_contract
set_variable = {
name = gold_success_critical
value = task_contract_success_gold_gain_full_value
}
set_variable = {
name = gold_success_standard
value = task_contract_success_gold_gain_half_value
}
}
}
on_accepted = {
save_scope_as = task_contract
task_contract_taker = {
trigger_event = {
id = ep3_contract_event.0550
delayed = no
}
}
}
task_contract_reward = {
success_critical = {
should_print_on_complete = yes
effect = {
save_scope_value_as = { name = extra_reward value = flag:no }
save_scope_as = task_contract
laamp_rewards_disburse_ordinary_currency_effect = {
GOLD = scope:task_contract.var:gold_success_critical
PRESTIGE = task_contract_success_prestige_gain_full_value
PIETY = 0
PROVISIONS = task_contract_success_provisions_gain_major_value
OPINION = task_contract_opinion_excelled_reward_value
OPINION_TYPE = critically_succeeded_task_contract_opinion
CONTACT = yes
CONTACT_HOOK = yes
EXTRA_REWARD = scope:extra_reward
}
}
}
success_standard = {
should_print_on_complete = yes
effect = {
save_scope_value_as = { name = extra_reward value = flag:no }
save_scope_as = task_contract
laamp_rewards_disburse_ordinary_currency_effect = {
GOLD = scope:task_contract.var:gold_success_standard
PRESTIGE = task_contract_success_prestige_gain_half_value
PIETY = 0
PROVISIONS = task_contract_success_provisions_gain_minor_value
OPINION = task_contract_opinion_standard_reward_value
OPINION_TYPE = succeeded_task_contract_opinion
CONTACT = yes
CONTACT_HOOK = no
EXTRA_REWARD = scope:extra_reward
}
task_contract_taker = {
# Update gallowsbait score.
laamp_rewards_apply_criminal_xp_effect = {
TRACK = marauder
XP_MIN = gallowsbait_xp_medium_gain
XP_MAX = gallowsbait_xp_medium_gain
}
}
}
}
failure_standard = {
positive = no
effect = {
save_scope_value_as = { name = extra_reward value = flag:no }
save_scope_as = task_contract
task_contract_taker = {
add_prestige = task_contract_failure_prestige_loss_full_value
add_piety = minor_piety_loss
reverse_add_opinion = {
opinion = -35
modifier = failed_task_contract_opinion
target = scope:task_contract.task_contract_employer
}
# Update gallowsbait score.
laamp_rewards_apply_criminal_xp_effect = {
TRACK = marauder
XP_MIN = gallowsbait_xp_medium_gain
XP_MAX = gallowsbait_xp_medium_gain
}
}
}
}
failure_critical = {
positive = no
effect = {
save_scope_as = task_contract
task_contract_taker = {
add_prestige = task_contract_failure_prestige_loss_double_value
add_piety = medium_piety_loss
add_stress = minor_stress_gain
reverse_add_opinion = {
opinion = -65
modifier = failed_task_contract_opinion
target = scope:task_contract.task_contract_employer
}
# Update gallowsbait score.
laamp_rewards_apply_criminal_xp_effect = {
TRACK = marauder
XP_MIN = gallowsbait_xp_major_gain
XP_MAX = gallowsbait_xp_major_gain
}
}
}
}
}
}
laamp_gain_wanderer_contract = {
group = laamp_contracts_martial_group
icon = "gfx/interface/icons/scheme_types/martial.dds"
travel = yes
use_diplomatic_range = yes
valid_to_create = {
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
valid_laamp_sensible_start_trigger = yes
prestige_level >= 2
scope:employer = {
is_landed = no
is_ai = yes
in_diplomatic_range = root
prestige_level < root.prestige_level
location = { #Not too far away
squared_distance = {
target = root.location
value <= squared_distance_large
}
}
primary_title = {
is_mercenary_company = no
}
NOR = {
government_has_flag = government_is_theocracy
government_allows = administrative
}
}
}
valid_to_accept = {
valid_laamp_basic_accept_only_trigger = yes
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
is_available = yes
prestige_level >= 2
scope:employer = {
is_landed = no
is_ai = yes
in_diplomatic_range = root
prestige_level < root.prestige_level
location = { #Not too far away
squared_distance = {
target = root.location
value <= squared_distance_large
}
}
primary_title = {
is_mercenary_company = no
}
NOR = {
government_has_flag = government_is_theocracy
government_allows = administrative
}
}
}
weight = {
# Keep it rare and use it to fill in gaps between other contracts
value = task_contract_weight_interesting_very_rare_value
}
on_create = {
scope:contract = {
save_scope_as = task_contract
task_contract_employer = {
save_scope_as = task_contract_employer
capital_province = {
save_scope_as = task_contract_destination
}
}
set_variable = {
name = task_contract_employer
value = scope:task_contract_employer
}
set_variable = {
name = task_contract_destination
value = scope:task_contract_destination
}
# Make our gold rewards static.
grab_gold_fuzz_number_effect = yes
save_scope_as = task_contract
set_variable = {
name = gold_success_standard
value = task_contract_success_gold_gain_half_value
}
}
}
on_accepted = {
save_scope_as = task_contract
task_contract_employer = {
save_scope_as = task_contract_employer
capital_province = {
save_scope_as = task_contract_destination
}
}
task_contract_taker = {
trigger_event = {
id = ep3_contract_event.0570
delayed = no
}
}
}
task_contract_reward = {
success_standard = {
should_print_on_complete = yes
effect = {
save_scope_value_as = { name = extra_reward value = flag:no }
save_scope_as = task_contract
laamp_rewards_disburse_ordinary_currency_effect = {
GOLD = scope:task_contract.var:gold_success_standard
PRESTIGE = task_contract_success_prestige_gain_half_value
PIETY = 0
PROVISIONS = 0
OPINION = task_contract_opinion_standard_reward_value
OPINION_TYPE = succeeded_task_contract_opinion
CONTACT = no
CONTACT_HOOK = no
EXTRA_REWARD = scope:extra_reward
}
task_contract_taker = {
add_intrigue_lifestyle_xp = medium_lifestyle_xp
add_courtier = scope:task_contract.task_contract_employer
}
}
}
failure_standard = {
positive = no
effect = {
save_scope_as = task_contract
task_contract_taker = {
add_stress = medium_stress_gain
add_character_modifier = {
modifier = ep3_clumsy_rescuer_modifier
years = 5
}
reverse_add_opinion = {
opinion = -50
modifier = failed_task_contract_opinion
target = scope:task_contract.task_contract_employer
}
}
}
}
}
}
laamp_find_secret_contract = {
group = laamp_contracts_intrigue_group
icon = "gfx/interface/icons/scheme_types/intrigue.dds"
travel = yes
use_diplomatic_range = yes
valid_to_create = {
valid_laamp_basic_accept_only_trigger = yes
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
valid_laamp_sensible_start_trigger = yes
scope:employer = {
is_ai = yes
location = { #Not too far away
squared_distance = {
target = root.location
value <= squared_distance_large
}
}
NOT = {
government_has_flag = government_is_theocracy
}
OR = {
any_courtier_or_guest = {
any_secret = {
count > 0
NOT = { is_known_by = scope:employer }
}
}
any_vassal = {
any_secret = {
count > 0
NOT = { is_known_by = scope:employer }
}
}
}
}
}
valid_to_accept = {
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
scope:employer = {
is_ai = yes
location = { #Not too far away
squared_distance = {
target = root.location
value <= squared_distance_large
}
}
NOT = {
government_has_flag = government_is_theocracy
}
}
}
valid_to_continue = {
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
valid_to_keep = {
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
scope:employer = {
OR = {
any_courtier_or_guest = {
any_secret = {
count > 0
NOT = { is_known_by = scope:employer }
}
}
any_vassal = {
any_secret = {
count > 0
NOT = { is_known_by = scope:employer }
}
}
}
}
}
weight = {
value = task_contract_weight_default_value
add = laamp_contracts_weight_up_intrigue_value
add = task_contract_weight_employer_contact_list_value
scope:employer = { multiply = task_contract_weight_by_tier_value }
}
on_create = {
scope:contract = {
save_scope_as = task_contract
task_contract_employer = {
save_scope_as = task_contract_employer
if = {
limit = {
any_vassal = {
any_secret = {
count > 0
NOT = { is_known_by = scope:task_contract_employer }
}
}
}
random_vassal = {
limit = {
any_secret = {
count > 0
NOT = { is_known_by = scope:task_contract_employer }
}
}
save_scope_as = secret_haver
}
}
else = {
random_courtier_or_guest = {
save_scope_as = secret_haver
}
}
scope:secret_haver.location = {
save_scope_as = task_contract_destination
}
}
set_variable = {
name = task_contract_employer
value = scope:task_contract_employer
}
set_variable = {
name = task_contract_destination
value = scope:task_contract_destination
}
}
scope:contract = {
# Make our gold rewards static.
grab_gold_fuzz_number_effect = yes
save_scope_as = task_contract
set_variable = {
name = gold_success_standard
value = task_contract_success_gold_gain_half_value
}
}
}
on_accepted = {
save_scope_as = task_contract
task_contract_employer = {
save_scope_as = task_contract_employer
if = {
limit = {
any_vassal = {
any_secret = {
count > 0
NOT = { is_known_by = scope:task_contract_employer }
}
}
}
random_vassal = {
limit = {
any_secret = {
count > 0
NOT = { is_known_by = scope:task_contract_employer }
}
}
save_scope_as = secret_haver
}
}
else = {
random_courtier_or_guest = {
save_scope_as = secret_haver
}
}
scope:secret_haver.location = {
save_scope_as = task_contract_destination
}
}
task_contract_taker = {
trigger_event = {
id = ep3_contract_event.0580
delayed = no
}
}
}
task_contract_reward = {
success_standard = {
should_print_on_complete = yes
effect = {
save_scope_value_as = { name = extra_reward value = flag:no }
save_scope_as = task_contract
laamp_rewards_disburse_ordinary_currency_effect = {
GOLD = scope:task_contract.var:gold_success_standard
PRESTIGE = task_contract_success_prestige_gain_half_value
PIETY = 0
PROVISIONS = task_contract_success_provisions_gain_minor_value
OPINION = task_contract_opinion_standard_reward_value
OPINION_TYPE = succeeded_task_contract_opinion
CONTACT = no
CONTACT_HOOK = no
EXTRA_REWARD = scope:extra_reward
}
}
}
failure_standard = {
positive = no
effect = {
save_scope_as = task_contract
task_contract_taker = {
add_stress = minor_stress_gain
add_prestige = task_contract_failure_prestige_loss_full_value
reverse_add_opinion = {
opinion = -50
modifier = failed_task_contract_opinion
target = scope:task_contract.task_contract_employer
}
}
}
}
}
}
laamp_eliminate_heir_contract = {
group = laamp_contracts_intrigue_group
icon = "gfx/interface/icons/scheme_types/intrigue.dds"
travel = yes
use_diplomatic_range = yes
is_criminal = yes
valid_to_create = {
valid_laamp_basic_accept_only_trigger = yes
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
valid_laamp_sensible_start_trigger = yes
scope:employer = {
is_ai = yes
in_diplomatic_range = root
is_landed = yes
location = { #Not too far away
squared_distance = {
target = root.location
value <= squared_distance_large
}
}
NOR = {
government_has_flag = government_is_theocracy
government_allows = administrative
}
AND = { #They have a primary heir they dislike, and another one they like
primary_heir ?= {
reverse_opinion = {
target = scope:employer
value <= high_negative_opinion
}
age > 16 #No murderin' babies
}
any_heir = {
count > 1
}
}
}
}
valid_to_accept = {
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
}
valid_to_continue = {
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
valid_to_keep = {
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
weight = { #Let's not have this happen too often
value = task_contract_weight_interesting_very_rare_value
add = task_contract_weight_employer_contact_list_value
}
on_create = {
scope:contract = {
save_scope_as = task_contract
task_contract_employer = {
save_scope_as = task_contract_employer
random_heir = {
limit = {
is_primary_heir_of = scope:task_contract_employer
reverse_opinion = {
target = scope:task_contract_employer
value <= high_negative_opinion
}
age > 16 #No murderin' babies
}
save_scope_as = heir
}
scope:heir.location = {
save_scope_as = task_contract_destination
}
}
set_variable = {
name = task_contract_employer
value = scope:task_contract_employer
}
set_variable = {
name = task_contract_destination
value = scope:task_contract_destination
}
# Make our gold rewards static.
grab_gold_fuzz_number_effect = yes
save_scope_as = task_contract
set_variable = {
name = gold_success_standard
value = task_contract_success_gold_gain_full_value
}
}
}
on_accepted = {
save_scope_as = task_contract
task_contract_employer = {
save_scope_as = task_contract_employer
random_heir = {
limit = {
is_primary_heir_of = scope:task_contract_employer
reverse_opinion = {
target = scope:task_contract_employer
value <= high_negative_opinion
}
age > 16 #No murderin' babies
}
save_scope_as = heir
}
random_heir = {
limit = {
NOT = {
is_primary_heir_of = scope:task_contract_employer
}
reverse_opinion = {
target = scope:task_contract_employer
value >= low_positive_opinion
}
}
save_scope_as = favoured_heir
}
scope:heir.location = {
save_scope_as = task_contract_destination
}
}
task_contract_taker = {
trigger_event = {
id = ep3_contract_event.0590
delayed = no
}
}
}
task_contract_reward = {
success_standard = {
should_print_on_complete = yes
effect = {
save_scope_value_as = { name = extra_reward value = flag:no }
save_scope_as = task_contract
laamp_rewards_disburse_ordinary_currency_effect = {
GOLD = scope:task_contract.var:gold_success_standard
PRESTIGE = task_contract_success_prestige_gain_full_value
PIETY = 0
PROVISIONS = task_contract_success_provisions_gain_major_value
OPINION = task_contract_opinion_excelled_reward_value
OPINION_TYPE = succeeded_task_contract_opinion
CONTACT = yes
CONTACT_HOOK = yes
EXTRA_REWARD = scope:extra_reward
}
}
}
failure_standard = {
positive = no
effect = {
save_scope_value_as = { name = extra_reward value = flag:no }
save_scope_as = task_contract
laamp_rewards_disburse_ordinary_currency_effect = {
GOLD = 0
PRESTIGE = task_contract_failure_prestige_loss_full_value
PIETY = 0
PROVISIONS = task_contract_failure_provisions_gain_minor_value
OPINION = task_contract_opinion_standard_failure_value
OPINION_TYPE = failed_task_contract_opinion
CONTACT = no
CONTACT_HOOK = no
EXTRA_REWARD = scope:extra_reward
}
}
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,468 @@
#############################
# NOMADIC MIGRATION CONTRACTS
#############################
nomadic_migration_contract_1 = { # Disagreeable Herders
group = nomadic_settling_group
icon = "gfx/interface/icons/government_types/government_type_herder.dds"
use_diplomatic_range = no
travel = no
valid_to_create = { settlement_issue_valid_to_create_default_trigger = yes }
valid_to_keep = { settlement_issue_valid_to_keep_default_trigger = yes }
valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes }
valid_to_accept = { is_available = yes }
on_create = { settlement_issue_on_create_effect = yes }
on_accepted = {
settlement_issue_on_accepted_default_effect = {
NUMBER = 1
ARRIVAL_ID = 0005
RESET_ID = 0003
}
}
on_completed = {
task_contract_taker = { remove_variable = nomadic_migration_contract_1 }
}
on_invalidated = {
settlement_issue_on_invalidated_default_effect = yes
}
task_contract_reward = {
control = { effect = { settlement_issue_control_reward_effect = yes } }
herd = { effect = { settlement_issue_herd_reward_effect = yes } }
fertility = { effect = { settlement_issue_fertility_reward_effect = yes } }
}
}
nomadic_migration_contract_2 = { # The Wild Herd
group = nomadic_settling_group
icon = "gfx/interface/icons/icon_herd.dds"
use_diplomatic_range = no
travel = no
valid_to_create = { settlement_issue_valid_to_create_default_trigger = yes }
valid_to_keep = { settlement_issue_valid_to_keep_default_trigger = yes }
valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes }
valid_to_accept = { is_available = yes }
on_create = { settlement_issue_on_create_effect = yes }
on_accepted = {
settlement_issue_on_accepted_default_effect = {
NUMBER = 2
ARRIVAL_ID = 0015
RESET_ID = 0013
}
}
on_completed = {
task_contract_taker = { remove_variable = nomadic_migration_contract_2 }
}
on_invalidated = {
settlement_issue_on_invalidated_default_effect = yes
}
task_contract_reward = {
control = { effect = { settlement_issue_control_reward_effect = yes } }
herd = { effect = { settlement_issue_herd_reward_effect = yes } }
gold = { effect = { settlement_issue_gold_reward_effect = yes } }
opinion = { effect = { settlement_issue_opinion_reward_effect = { MODIFIER = mpo_si_slaughtered_for_a_feast } } }
}
}
nomadic_migration_contract_3 = { # Contentious Grazelands
group = nomadic_settling_group
icon = "gfx/interface/icons/icon_county_fertility.dds"
use_diplomatic_range = no
travel = no
valid_to_create = {
any_knight = {
count >= 2
is_landed = no
}
any_held_county = {
county_control < 90
NOT = { has_county_modifier = ongoing_settlement_contract }
}
}
valid_to_keep = { settlement_issue_valid_to_keep_default_trigger = yes }
valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes }
valid_to_accept = { is_available = yes }
on_create = { settlement_issue_on_create_effect = yes }
on_accepted = {
settlement_issue_on_accepted_default_effect = {
NUMBER = 3
ARRIVAL_ID = 0025
RESET_ID = 0023
}
}
on_completed = {
task_contract_taker = { remove_variable = nomadic_migration_contract_3 }
}
on_invalidated = {
settlement_issue_on_invalidated_default_effect = yes
}
task_contract_reward = {
control = { effect = { settlement_issue_control_reward_effect = yes } }
herd = { effect = { settlement_issue_herd_reward_effect = yes } }
opinion = {
effect = {
settlement_issue_character_opinion_reward_effect = {
CHARACTER = root.task_contract_employer
}
}
}
}
}
nomadic_migration_contract_4 = { # A Lack of Tools
group = nomadic_settling_group
icon = "gfx/interface/icons/court_position_types/royal_architect_court_position.dds"
use_diplomatic_range = no
travel = no
valid_to_create = { settlement_issue_valid_to_create_default_trigger = yes }
valid_to_keep = { settlement_issue_valid_to_keep_default_trigger = yes }
valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes }
valid_to_accept = { is_available = yes }
on_create = { settlement_issue_on_create_effect = yes }
on_accepted = {
settlement_issue_on_accepted_default_effect = {
NUMBER = 4
ARRIVAL_ID = 0035
RESET_ID = 0033
}
}
on_completed = {
task_contract_taker = { remove_variable = nomadic_migration_contract_4 }
}
on_invalidated = {
settlement_issue_on_invalidated_default_effect = yes
}
task_contract_reward = {
control = { effect = { settlement_issue_control_reward_effect = yes } }
}
}
nomadic_migration_contract_5 = { # Fragmentation of the Tribe
group = nomadic_settling_group
icon = "gfx/interface/icons/casus_bellis/ducal_conquest_cb.dds"
use_diplomatic_range = no
travel = no
valid_to_create = { settlement_issue_valid_to_create_default_trigger = yes }
valid_to_keep = { settlement_issue_valid_to_keep_default_trigger = yes }
valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes }
valid_to_accept = { is_available = yes }
on_create = { settlement_issue_on_create_effect = yes }
on_accepted = {
settlement_issue_on_accepted_default_effect = {
NUMBER = 5
ARRIVAL_ID = 0045
RESET_ID = 0043
}
}
on_completed = {
task_contract_taker = { remove_variable = nomadic_migration_contract_5 }
}
on_invalidated = {
settlement_issue_on_invalidated_default_effect = yes
}
task_contract_reward = {
control = { effect = { settlement_issue_control_reward_effect = yes } }
}
}
nomadic_migration_contract_6 = { # Poisonous Lands
group = nomadic_settling_group
icon = "gfx/interface/icons/court_position_types/court_physician_court_position.dds"
use_diplomatic_range = no
travel = no
valid_to_create = { settlement_issue_valid_to_create_default_trigger = yes }
valid_to_keep = { settlement_issue_valid_to_keep_default_trigger = yes }
valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes }
valid_to_accept = { is_available = yes }
on_create = { settlement_issue_on_create_effect = yes }
on_accepted = {
settlement_issue_on_accepted_default_effect = {
NUMBER = 6
ARRIVAL_ID = 0055
RESET_ID = 0053
}
}
on_completed = {
task_contract_taker = { remove_variable = nomadic_migration_contract_6 }
}
on_invalidated = {
settlement_issue_on_invalidated_default_effect = yes
}
task_contract_reward = {
control = { effect = { settlement_issue_control_reward_effect = yes } }
}
}
nomadic_migration_contract_7 = { # Troublesome Neighbors
group = nomadic_settling_group
icon = "gfx/interface/icons/casus_bellis/ducal_conquest_cb.dds"
use_diplomatic_range = no
travel = no
valid_to_create = { settlement_issue_valid_to_create_default_trigger = yes }
valid_to_keep = {
custom_tooltip = {
text = migration_contract_county_ownership_text
OR = {
task_contract_location.province_owner = task_contract_taker
task_contract_location.province_owner.liege = task_contract_taker
task_contract_location.province_owner.top_liege = task_contract_taker
}
}
custom_tooltip = {
text = migration_contract_county_alt_text
task_contract_location.county = {
county_control < 90
any_neighboring_county = {
NOT = { owner.top_liege ?= root.top_liege }
}
}
}
}
valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes }
valid_to_accept = { is_available = yes }
on_create = { settlement_issue_on_create_effect = yes }
on_accepted = {
settlement_issue_on_accepted_default_effect = {
NUMBER = 7
ARRIVAL_ID = 0065
RESET_ID = 0063
}
}
on_completed = {
task_contract_taker = { remove_variable = nomadic_migration_contract_7 }
}
on_invalidated = {
settlement_issue_on_invalidated_default_effect = yes
}
task_contract_reward = {
control = { effect = { settlement_issue_control_reward_effect = yes } }
herd = { effect = { settlement_issue_herd_reward_effect = yes } }
}
}
nomadic_migration_contract_8 = { # The Leftovers
group = nomadic_settling_group
icon = "gfx/interface/icons/icon_herd.dds"
use_diplomatic_range = no
travel = no
valid_to_create = { settlement_issue_valid_to_create_default_trigger = yes }
valid_to_keep = { settlement_issue_valid_to_keep_default_trigger = yes }
valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes }
valid_to_accept = { is_available = yes }
on_create = { settlement_issue_on_create_effect = yes }
on_accepted = {
settlement_issue_on_accepted_default_effect = {
NUMBER = 8
ARRIVAL_ID = 0075
RESET_ID = 0073
}
}
on_completed = {
task_contract_taker = { remove_variable = nomadic_migration_contract_8 }
}
on_invalidated = {
settlement_issue_on_invalidated_default_effect = yes
}
task_contract_reward = {
control = { effect = { settlement_issue_control_reward_effect = yes } }
herd = { effect = { settlement_issue_herd_reward_effect = yes } }
gold = { effect = { settlement_issue_gold_reward_effect = yes } }
fertility = { effect = { settlement_issue_fertility_reward_effect = yes } }
}
}
nomadic_migration_contract_9 = { # Drawing Lines
group = nomadic_settling_group
icon = "gfx/interface/icons/icon_county_fertility.dds"
use_diplomatic_range = no
travel = no
valid_to_create = { settlement_issue_valid_to_create_default_trigger = yes }
valid_to_keep = {
custom_tooltip = {
text = migration_contract_county_ownership_text
OR = {
task_contract_location.province_owner = task_contract_taker
task_contract_location.province_owner.liege = task_contract_taker
task_contract_location.province_owner.top_liege = task_contract_taker
}
}
custom_tooltip = {
text = migration_contract_county_alt_text
task_contract_location.county = {
county_control < 90
any_neighboring_county = {
holder = root.task_contract_taker
}
}
}
}
valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes }
valid_to_accept = { is_available = yes }
on_create = { settlement_issue_on_create_effect = yes }
on_accepted = {
settlement_issue_on_accepted_default_effect = {
NUMBER = 9
ARRIVAL_ID = 0085
RESET_ID = 0083
}
}
on_completed = {
task_contract_taker = { remove_variable = nomadic_migration_contract_9 }
}
on_invalidated = {
settlement_issue_on_invalidated_default_effect = yes
}
task_contract_reward = {
control = { effect = { settlement_issue_control_reward_effect = yes } }
fertility = { effect = { settlement_issue_fertility_reward_effect = yes } }
}
}
nomadic_migration_contract_10 = { # The Old Tribe
group = nomadic_settling_group
icon = "gfx/interface/icons/icon_culture.dds"
use_diplomatic_range = no
travel = no
valid_to_create = { settlement_issue_valid_to_create_default_trigger = yes }
valid_to_keep = {
custom_tooltip = {
text = migration_contract_county_ownership_text
OR = {
task_contract_location.province_owner = task_contract_taker
task_contract_location.province_owner.liege = task_contract_taker
task_contract_location.province_owner.top_liege = task_contract_taker
}
}
custom_tooltip = {
text = migration_contract_county_alt_text
task_contract_location.county = {
county_control < 90
has_variable = migration_previous_culture
NOT = { var:migration_previous_culture = root.task_contract_taker.culture }
}
}
}
valid_to_continue = { settlement_issue_valid_to_continue_default_trigger = yes }
valid_to_accept = { is_available = yes }
on_create = { settlement_issue_on_create_effect = yes }
on_accepted = {
settlement_issue_on_accepted_default_effect = {
NUMBER = 10
ARRIVAL_ID = 0095
RESET_ID = 0093
}
}
on_completed = {
task_contract_taker = { remove_variable = nomadic_migration_contract_10 }
}
on_invalidated = {
settlement_issue_on_invalidated_default_effect = yes
}
task_contract_reward = {
control = { effect = { settlement_issue_control_reward_effect = yes } }
herd = { effect = { settlement_issue_herd_reward_effect = yes } }
success = { effect = { settlement_issue_culture_reward_effect = yes } }
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,651 @@
# Unsanctioned deity: Village worships excessively
unsanctioned_deity = {
group = admin_governance_group
icon = "gfx/interface/icons/message_feed/heresy.dds"
valid_to_create = {
valid_governor_contract_trigger = yes
}
valid_to_keep = {
task_contract_taker = { valid_governor_contract_trigger = yes }
valid_governor_contract_basic_trigger = yes
}
valid_to_accept = {
valid_governor_contract_trigger = yes
custom_tooltip = {
text = has_active_governance_issue
num_taken_task_contracts < 1
}
is_available = yes
}
valid_to_continue = {
task_contract_taker = {
valid_governor_contract_trigger = yes
}
}
on_accepted = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
trigger_event = governor_contract_events_tova.0050
}
}
on_completed = {
}
on_invalidated = {
if = {
limit = { governor_contract_invalidated_message_trigger = yes }
governor_contract_invalidated_message_effect = yes
}
}
task_contract_reward = {
success = {
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
custom_tooltip = tgp_admin_contract_success_tt_rewards
}
}
success_failure = {
positive = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
custom_tooltip = tgp_admin_contract_failure_tt
}
}
sanction_deity = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
increase_governance_effect = { VALUE = 10 }
change_merit = {
value = minor_merit_gain
multiply = governance_task_contract_tier_value
}
}
task_contract_location.county = {
add_county_modifier = {
modifier = tgp_sanctioned_deity_modifier
years = 10
}
}
}
}
burn_shrine = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
increase_governance_effect = { VALUE = 6 }
change_merit = {
value = miniscule_merit_gain
multiply = governance_task_contract_tier_value
}
}
}
}
claim_offerings = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
add_gold = {
value = scope:task_contract.task_contract_location.monthly_income
multiply = 40
}
change_merit = {
value = miniscule_merit_loss
multiply = governance_task_contract_tier_value
}
if = {
limit = {
secret_siphoned_treasury_is_valid_trigger = {
OWNER = scope:task_contract.task_contract_taker
TARGET = top_liege
}
}
add_secret = {
type = secret_siphoned_treasury
target = top_liege
}
}
}
}
}
debunk_deity = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
increase_governance_effect = { VALUE = 4 }
change_merit = {
value = miniscule_merit_gain
multiply = governance_task_contract_tier_value
}
add_character_modifier = {
modifier = tgp_debunked_deity_modifier
years = 10
}
}
}
}
deity_monks = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
change_influence = {
value = miniscule_influence_gain
multiply = governance_task_contract_tier_value
}
add_piety = {
value = medium_piety_gain
multiply = governance_task_contract_tier_value
}
}
}
}
failure_standard = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
task_contract_taker ?= {
change_influence = minor_influence_loss
if = {
limit = {
has_trait = governor
has_trait_xp = {
trait = governor
value > 0
}
}
add_trait_xp = {
trait = governor
value = -5
}
}
}
}
}
}
}
#Escaped Justice
escaped_justice = {
group = admin_governance_group
icon = "gfx/interface/icons/message_feed/marshal_job.dds"
valid_to_create = {
valid_governor_contract_trigger = yes
}
valid_to_keep = {
task_contract_taker = { valid_governor_contract_trigger = yes }
valid_governor_contract_basic_trigger = yes
task_contract_target = {
is_travelling = no
is_imprisoned = no
is_commanding_army = no
}
}
valid_to_accept = {
valid_governor_contract_trigger = yes
custom_tooltip = {
text = has_active_governance_issue
num_taken_task_contracts < 1
}
is_available = yes
}
valid_to_continue = {
task_contract_taker = {
valid_governor_contract_trigger = yes
}
}
on_accepted = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
trigger_event = governor_contract_events_tova.0055
}
}
on_completed = {
}
on_invalidated = {
if = {
limit = { governor_contract_invalidated_message_trigger = yes }
governor_contract_invalidated_message_effect = yes
}
}
task_contract_reward = {
success = {
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
custom_tooltip = tgp_admin_contract_success_tt_rewards
}
}
success_failure = {
positive = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
custom_tooltip = tgp_admin_contract_failure_tt
}
}
escapee_persuade = { #Diplomacy
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
increase_governance_effect = { VALUE = 6 }
change_merit = {
value = minor_merit_gain
multiply = governance_task_contract_tier_value
}
}
}
}
escapee_slain = { #Martial duel
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
add_dread = {
value = medium_dread_gain
multiply = governance_task_contract_tier_value
}
}
task_contract_location.county = {
if = {
limit = { county_control < 100 }
change_county_control = 10
}
}
}
}
escapee_join_monastery = { #Increase Piety
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
add_piety = {
value = medium_piety_gain
multiply = governance_task_contract_tier_value
}
}
}
}
escapee_shunned = { #Influence Gain
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
increase_governance_effect = { VALUE = 4 }
change_influence = {
value = minor_influence_gain
multiply = governance_task_contract_tier_value
}
}
}
}
failure_standard = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
task_contract_taker ?= {
change_influence = minor_influence_loss
}
task_contract_location.county = {
change_county_control = -5
}
}
}
}
}
#Forced Conscription
forced_conscription = {
group = admin_governance_group
icon = "gfx/interface/icons/message_feed/marshal_job.dds"
travel = no
valid_to_create = {
valid_governor_contract_trigger = yes
}
valid_to_keep = {
task_contract_taker = { valid_governor_contract_trigger = yes }
valid_governor_contract_basic_trigger = yes
}
valid_to_accept = {
valid_governor_contract_trigger = yes
custom_tooltip = {
text = has_active_governance_issue
num_taken_task_contracts < 1
}
is_available = yes
}
valid_to_continue = {
task_contract_taker = {
valid_governor_contract_trigger = yes
}
task_contract_employer = {
is_alive = yes
}
}
on_accepted = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" }
save_scope_as = task_contract
task_contract_employer = {
save_scope_as = recruitment_employer
}
task_contract_taker ?= {
trigger_event = governor_contract_events_tova.0060
}
}
on_completed = {
}
on_invalidated = {
if = {
limit = { governor_contract_invalidated_message_trigger = yes }
governor_contract_invalidated_message_effect = yes
}
}
task_contract_reward = {
success = {
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
custom_tooltip = tgp_admin_contract_success_tt_rewards
}
}
success_failure = {
positive = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
custom_tooltip = tgp_admin_contract_failure_tt
}
}
conscripts_bribed = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_location = {
add_province_modifier = {
modifier = tgp_fattened_vanguard_modifier
years = 10
}
}
task_contract_taker ?= {
remove_short_term_gold = {
value = minor_gold_value
multiply = governance_task_contract_tier_value
}
}
}
}
conscripts_forced = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_location = {
add_province_modifier = {
modifier = tgp_fattened_vanguard_modifier
years = 10
}
}
task_contract_location.county = {
change_county_control = medium_county_control_loss
}
task_contract_taker ?= {
change_influence = {
value = minor_influence_gain
multiply = governance_task_contract_tier_value
}
}
}
}
conscripts_convinced = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_location = {
add_province_modifier = {
modifier = tgp_fattened_vanguard_modifier
years = 10
}
}
task_contract_taker ?= {
change_merit = {
value = minor_merit_gain
multiply = governance_task_contract_tier_value
}
}
}
}
conscripts_trade = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_location.county = {
add_county_modifier = {
modifier = tgp_diligent_workers_modifier
years = 10
}
}
task_contract_taker ?= {
change_merit = {
value = minor_merit_loss
multiply = governance_task_contract_tier_value
}
}
}
}
failure_standard = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
task_contract_taker ?= {
change_influence = minor_influence_loss
}
task_contract_location.county = {
change_county_control = -5
}
}
}
}
}
#Teach Monks Martial Arts
combat_train_monks = {
group = admin_governance_group
icon = "gfx/interface/icons/message_feed/marshal_job.dds"
valid_to_create = {
valid_governor_contract_trigger = yes
}
valid_to_keep = {
task_contract_taker = { valid_governor_contract_trigger = yes }
valid_governor_contract_basic_trigger = yes
}
valid_to_accept = {
valid_governor_contract_trigger = yes
custom_tooltip = {
text = has_active_governance_issue
num_taken_task_contracts < 1
}
is_available = yes
}
valid_to_continue = {
task_contract_taker = {
valid_governor_contract_trigger = yes
}
}
on_accepted = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
trigger_event = governor_contract_events_tova.0065
}
}
on_completed = {
}
on_invalidated = {
if = {
limit = {governor_contract_invalidated_message_trigger = yes }
governor_contract_invalidated_message_effect = yes
}
}
task_contract_reward = {
success = {
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
custom_tooltip = tgp_admin_contract_success_tt_rewards
}
}
success_failure = {
positive = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
custom_tooltip = tgp_admin_contract_failure_tt
}
}
hire_monks_as_maa = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
increase_governance_effect = { VALUE = 4 }
}
}
}
hire_monk_as_knight = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
change_influence = minor_influence_loss
}
}
}
train_monks = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
change_influence = {
value = miniscule_influence_gain
multiply = governance_task_contract_tier_value
}
increase_governance_effect = { VALUE = 4 }
}
scope:task_contract.task_contract_location = {
add_province_modifier = {
modifier = tgp_trained_monks_modifier
years = 10
}
}
scope:task_contract.task_contract_location.county = {
if = {
limit = { county_control < 100 }
change_county_control = 10
}
}
}
}
station_troops = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
}
scope:task_contract.task_contract_location = {
add_province_modifier = {
modifier = tgp_stationed_troops_modifier
years = 10
}
}
scope:task_contract.task_contract_location.county = {
if = {
limit = { county_control < 100 }
change_county_control = 10
}
}
}
}
let_marshal_handle = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
scope:task_contract.task_contract_location = {
add_province_modifier = {
modifier = tgp_adequately_trained_monks_modifier
years = 10
}
}
scope:task_contract.task_contract_location.county = {
if = {
limit = { county_control < 100 }
change_county_control = 10
}
}
}
}
failure_standard = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
task_contract_taker ?= {
change_influence = minor_influence_loss
}
task_contract_location.county = {
change_county_control = -5
}
}
}
}
}

View file

@ -0,0 +1,180 @@
missing_equipment = {
group = admin_governance_group
icon = "gfx/interface/icons/message_feed/marshal_job.dds"
valid_to_create = {
valid_governor_contract_trigger = yes
}
valid_to_keep = {
task_contract_taker = { valid_governor_contract_trigger = yes }
valid_governor_contract_basic_trigger = yes
}
valid_to_accept = {
valid_governor_contract_trigger = yes
custom_tooltip = {
text = has_active_governance_issue
num_taken_task_contracts < 1
}
is_available = yes
}
valid_to_continue = {
task_contract_taker = {
valid_governor_contract_trigger = yes
}
}
on_accepted = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
root.task_contract_location.barony = {
save_scope_as = task_contract_location
}
trigger_event = tgp_governor_contract_event.2000
}
}
on_completed = {
}
on_invalidated = {
if = {
limit = { governor_contract_invalidated_message_trigger = yes }
governor_contract_invalidated_message_effect = yes
}
}
task_contract_reward = {
success = {
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
custom_tooltip = tgp_admin_contract_success_tt_rewards
}
}
success_failure = {
positive = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
custom_tooltip = tgp_admin_contract_failure_tt
}
}
secure_future_deliveries = { # Good governance option
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
increase_governance_effect = { VALUE = 10 }
change_merit = {
value = medium_merit_value
multiply = governance_task_contract_tier_value
}
every_held_title = {
limit = { tier = tier_county }
custom = custom.every_held_county_capital
title_province = {
add_province_modifier = {
modifier = tgp_well_equipped_soldiers_modifier
years = 15
}
}
}
}
scope:task_contract.task_contract_location.county = {
if = {
limit = { county_control < 100 }
change_county_control = 5
}
}
}
}
demand_extra_shipment = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
increase_governance_effect = { VALUE = 6 }
every_held_title = {
limit = { tier = tier_county }
custom = custom.every_held_county_capital
title_province = {
add_province_modifier = {
modifier = tgp_well_equipped_soldiers_modifier
years = 10
}
}
}
}
}
}
demand_gold = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
increase_governance_effect = { VALUE = 2 }
add_gold = medium_gold_value
}
}
}
demand_best_equipment = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
increase_governance_effect = { VALUE = 4 }
capital_province ?= {
add_province_modifier = {
modifier = tgp_greatly_equipped_soldiers_modifier
years = 15
}
}
}
}
}
offered_replacements = { # Default outcome if you visit the workshop. Same as "buy_replacements" but without the cost.
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
increase_governance_effect = { VALUE = 4 }
}
}
}
buy_replacements = { # Safe opt-out if you don't want to travel
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
remove_short_term_gold = medium_gold_value
increase_governance_effect = { VALUE = 4 }
}
}
}
failure_standard = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
change_influence = {
value = minor_influence_loss
multiply = governance_task_contract_tier_value
}
}
}
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,685 @@
#TODO_CD_TGP_AJ; merit needs to be added for all relevant options (positive and negative) for use in China
tgp_food_shortage = { #Food Shortage
group = admin_governance_group
icon = "gfx/interface/icons/situation_types/natural_disaster_generic.dds"
valid_to_create = {
valid_governor_contract_trigger = yes
}
valid_to_keep = {
task_contract_taker = { valid_governor_contract_trigger = yes }
valid_governor_contract_basic_trigger = yes
}
valid_to_accept = {
valid_governor_contract_trigger = yes
custom_tooltip = {
text = has_active_governance_issue
num_taken_task_contracts < 1
}
is_available = yes
}
valid_to_continue = {
task_contract_taker = {
valid_governor_contract_trigger = yes
}
}
on_accepted = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
root.task_contract_location.barony = {
save_scope_as = task_contract_location
}
trigger_event = tgp_natural_disaster_contract_event.0001
}
}
on_completed = {
}
on_invalidated = {
if = {
limit = { governor_contract_invalidated_message_trigger = yes }
governor_contract_invalidated_message_effect = yes
}
}
task_contract_reward = {
success = {
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
custom_tooltip = tgp_admin_contract_natural_disaster_tt_rewards
}
}
failure = {
positive = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
custom_tooltip = tgp_admin_contract_natural_disaster_failure_tt
}
}
distribution_of_food = { # Good governance option
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
increase_governance_effect = { VALUE = 10 }
add_diplomacy_lifestyle_xp = medium_lifestyle_xp
add_character_modifier = {
modifier = tgp_distribution_of_food_character_modifier
years = 10
}
change_influence = minor_influence_loss
every_vassal = {
limit = {
is_adult = yes
}
add_stress = minor_stress_impact_gain
remove_short_term_gold = minor_gold_value
}
}
scope:task_contract.task_contract_location.county = {
add_county_modifier = {
modifier = tgp_distribution_of_food_modifier
years = 10
}
}
}
}
pay_from_own_pocket = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
add_learning_lifestyle_xp = minor_lifestyle_xp
add_piety = minor_piety_gain
add_character_modifier = {
modifier = tgp_pay_from_own_pocket_character_modifier
years = 10
}
remove_short_term_gold = medium_gold_value
}
scope:task_contract.task_contract_location.county = {
add_county_modifier = {
modifier = tgp_pay_from_own_pocket_modifier
years = 10
}
}
}
}
haggle_with_merchants = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
send_interface_toast = {
title = tgp_natural_disaster_contract_event.0002.c.tt.success
left_icon = scope:task_contract.task_contract_taker
scope:task_contract.task_contract_location.county = {
add_county_modifier = {
modifier = tgp_haggle_with_merchants_modifier
years = 10
}
}
add_stewardship_lifestyle_xp = medium_lifestyle_xp
remove_short_term_gold = minor_gold_value
}
}
}
}
haggle_with_merchants_failure = {
visible = no
effect = {
task_contract_taker ?= {
send_interface_toast = {
title = tgp_natural_disaster_contract_event.0002.c.tt.failure
left_icon = scope:task_contract.task_contract_taker
add_prestige = minor_prestige_loss
}
}
}
}
demand_food_from_nobles = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
change_influence = minor_influence_loss
add_diplomacy_lifestyle_xp = minor_lifestyle_xp
}
scope:task_contract.task_contract_location.county = {
add_county_modifier = {
modifier = tgp_demand_food_from_nobles_modifier
years = 10
}
}
}
}
failure_standard = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
change_influence = {
value = medium_influence_loss
multiply = governance_task_contract_tier_value
}
add_piety = {
value = minor_piety_loss
multiply = governance_task_contract_tier_value
}
}
}
}
}
}
tgp_ravaged_buildings = { #Destroyed by Nature
group = admin_governance_group
icon = "gfx/interface/icons/situation_types/natural_disaster_generic.dds"
valid_to_create = {
valid_governor_contract_trigger = yes
}
valid_to_keep = {
task_contract_taker = { valid_governor_contract_trigger = yes }
valid_governor_contract_basic_trigger = yes
}
valid_to_accept = {
valid_governor_contract_trigger = yes
custom_tooltip = {
text = has_active_governance_issue
num_taken_task_contracts < 1
}
is_available = yes
}
valid_to_continue = {
task_contract_taker = {
valid_governor_contract_trigger = yes
}
}
on_accepted = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
root.task_contract_location.barony = {
save_scope_as = task_contract_location
}
trigger_event = tgp_natural_disaster_contract_event.0005
}
}
on_completed = {
}
on_invalidated = {
if = {
limit = { governor_contract_invalidated_message_trigger = yes }
governor_contract_invalidated_message_effect = yes
}
}
task_contract_reward = {
success = {
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
custom_tooltip = tgp_admin_contract_natural_disaster_tt_rewards
}
}
failure = {
positive = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
custom_tooltip = tgp_admin_contract_natural_disaster_failure_tt
}
}
rebuild_settlement = { # Good governance option
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
increase_governance_effect = { VALUE = 10 }
add_stewardship_lifestyle_xp = medium_lifestyle_xp
add_character_modifier = {
modifier = tgp_rebuild_settlement_character_modifier
years = 10
}
}
scope:task_contract.task_contract_location.county = {
add_county_modifier = {
modifier = tgp_rebuild_settlement_modifier
years = 10
}
}
}
}
temporary_shelters = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
add_diplomacy_lifestyle_xp = minor_lifestyle_xp
add_piety = minor_piety_gain
}
scope:task_contract.task_contract_location.county = {
add_county_modifier = {
modifier = tgp_temporary_shelters_modifier
years = 10
}
}
}
}
remove_debris = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
send_interface_toast = {
title = tgp_natural_disaster_contract_event.0006.c.tt.success
left_icon = scope:task_contract.task_contract_taker
add_piety = minor_piety_gain
add_stewardship_lifestyle_xp = minor_lifestyle_xp
scope:task_contract.task_contract_location.county = {
add_county_modifier = {
modifier = tgp_remove_debris_modifier
years = 10
}
}
}
}
}
}
remove_debris_failure = {
visible = no
effect = {
task_contract_taker ?= {
send_interface_toast = {
title = tgp_natural_disaster_contract_event.0006.c.tt.failure
left_icon = root
change_influence = minor_influence_loss
}
}
}
}
labor_exchange = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
add_character_modifier = {
modifier = tgp_labor_exchange_character_modifier
years = 10
}
}
}
}
failure_standard = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
change_influence = {
value = medium_influence_loss
multiply = governance_task_contract_tier_value
}
add_piety = {
value = minor_piety_loss
multiply = governance_task_contract_tier_value
}
}
}
}
}
}
tgp_medieval_medicine = { #Treating the Unfortunate
group = admin_governance_group
icon = "gfx/interface/icons/situation_types/natural_disaster_generic.dds"
valid_to_create = {
valid_governor_contract_trigger = yes
}
valid_to_keep = {
task_contract_taker = { valid_governor_contract_trigger = yes }
valid_governor_contract_basic_trigger = yes
}
valid_to_accept = {
valid_governor_contract_trigger = yes
custom_tooltip = {
text = has_active_governance_issue
num_taken_task_contracts < 1
}
is_available = yes
}
valid_to_continue = {
task_contract_taker = {
valid_governor_contract_trigger = yes
}
}
on_accepted = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
root.task_contract_location.barony = {
save_scope_as = task_contract_location
}
trigger_event = tgp_natural_disaster_contract_event.0010
}
}
on_completed = {
}
on_invalidated = {
if = {
limit = { governor_contract_invalidated_message_trigger = yes }
governor_contract_invalidated_message_effect = yes
}
}
task_contract_reward = {
success = {
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
custom_tooltip = tgp_admin_contract_natural_disaster_tt_rewards
}
}
failure = {
positive = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
custom_tooltip = tgp_admin_contract_natural_disaster_failure_tt
}
}
assisting_physician = { # Good governance option
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
increase_governance_effect = { VALUE = 10 }
if = {
limit = {
employs_court_position = court_physician_court_position
}
random = {
chance = 50
court_position:court_physician_court_position = {
add_learning_skill = 1
}
add_learning_lifestyle_xp = medium_lifestyle_xp
}
}
}
scope:task_contract.task_contract_location.county = {
add_county_modifier = {
modifier = tgp_assisting_physician_modifier
years = 10
}
}
}
}
medical_assistance = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
send_interface_toast = {
title = tgp_natural_disaster_contract_event.0011.b.tt.success
left_icon = scope:task_contract.task_contract_taker
add_character_modifier = {
modifier = tgp_medical_assistance_character_modifier
years = 10
}
add_learning_lifestyle_xp = minor_lifestyle_xp
add_piety = minor_piety_gain
}
}
}
}
medical_assistance_failure = {
visible = no
effect = {
task_contract_taker ?= {
send_interface_toast = {
title = tgp_natural_disaster_contract_event.0011.b.tt.failure
left_icon = scope:task_contract.task_contract_taker
scope:task_contract.task_contract_location.county = {
add_county_modifier = {
modifier = tgp_medical_assistance_modifier
years = 10
}
}
}
}
}
}
prayers_to_the_people = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
add_learning_lifestyle_xp = minor_lifestyle_xp
add_piety = minor_piety_gain
add_character_modifier = {
modifier = tgp_prayers_to_the_people_character_modifier
years = 10
}
}
}
}
better_pay_up = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
add_gold = medium_gold_value
add_piety = medium_piety_loss
}
}
}
failure_standard = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
change_influence = {
value = medium_influence_loss
multiply = governance_task_contract_tier_value
}
add_piety = {
value = minor_piety_loss
multiply = governance_task_contract_tier_value
}
}
}
}
}
}
tgp_disaster_displacement = { #Provisional Relocation
group = admin_governance_group
icon = "gfx/interface/icons/situation_types/natural_disaster_generic.dds"
valid_to_create = {
valid_governor_contract_trigger = yes
}
valid_to_keep = {
task_contract_taker = { valid_governor_contract_trigger = yes }
valid_governor_contract_basic_trigger = yes
}
valid_to_accept = {
valid_governor_contract_trigger = yes
custom_tooltip = {
text = has_active_governance_issue
num_taken_task_contracts < 1
}
is_available = yes
}
valid_to_continue = {
task_contract_taker = {
valid_governor_contract_trigger = yes
}
}
on_accepted = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
root.task_contract_location.barony = {
save_scope_as = task_contract_location
}
trigger_event = tgp_natural_disaster_contract_event.0015
}
}
on_completed = {
}
on_invalidated = {
if = {
limit = { governor_contract_invalidated_message_trigger = yes }
governor_contract_invalidated_message_effect = yes
}
}
task_contract_reward = {
success = {
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
custom_tooltip = tgp_admin_contract_natural_disaster_tt_rewards
}
}
failure = {
positive = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
custom_tooltip = tgp_admin_contract_natural_disaster_failure_tt
}
}
deployed_troops = { # Good governance option
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
send_interface_toast = {
title = tgp_natural_disaster_contract_event.0016.a.tt.success
left_icon = scope:task_contract.task_contract_taker
increase_governance_effect = { VALUE = 10 }
add_martial_lifestyle_xp = medium_lifestyle_xp
add_character_modifier = {
modifier = tgp_deployed_troops_character_modifier
years = 10
}
}
}
}
}
deployed_troops_failure = {
visible = no
effect = {
save_scope_as = task_contract
task_contract_taker ?= {
send_interface_toast = {
title = tgp_natural_disaster_contract_event.0016.a.tt.failure
left_icon = scope:task_contract.task_contract_taker
scope:task_contract.task_contract_location.county = {
add_county_modifier = {
modifier = tgp_deployed_troops_modifier
years = 10
}
}
}
}
}
}
setting_an_example = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
add_dread = medium_dread_gain
add_character_modifier = {
modifier = tgp_setting_an_example_character_modifier
years = 10
}
}
}
}
confiscate_for_personal_inspection = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
add_gold = medium_gold_value
add_piety = medium_piety_loss
}
}
}
paying_off_the_looters = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
remove_short_term_gold = medium_gold_value
scope:task_contract.task_contract_location.county = {
add_county_modifier = {
modifier = tgp_paying_off_the_looters_modifier
years = 10
}
}
}
}
}
failure_standard = {
visible = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
save_scope_as = task_contract
task_contract_taker ?= {
change_influence = {
value = medium_influence_loss
multiply = governance_task_contract_tier_value
}
add_piety = {
value = minor_piety_loss
multiply = governance_task_contract_tier_value
}
}
}
}
}
}