N3OW/common/task_contracts/laamp_extra_contracts.txt
2026-04-25 18:55:31 -04:00

5579 lines
149 KiB
Text

##################################################
# INFO
# Extra contracts for laamps. Various types of contracts with interesting things to get and do, like wars, travel, artifacts and more.
#
##################################################
##################################################
# GROUPS (for populate_task_contracts_for_area)
#
# laamp_contracts_war_group
# laamp_contracts_criminal_group
# laamp_contracts_transport_group
# laamp_contracts_diplomacy_group
# laamp_contracts_intrigue_group
#
#
# NOTICEBOARD GROUPS (for Visit Settlement - ep3_laamp_decision_event.1025)
# laamp_contracts_noticeboard_group
#
##################################################
#
# laamp_raid_contract - Raid for Captives
# laamp_join_war_contract - Stand with Us
# laamp_help_claimant_contract - Press My Claims
# laamp_steal_artifact_contract - Reclaim Artifact
# laamp_construction_contract - Construction Work
# laamp_treasure_hunting_contract - Treasure Hunting
# laamp_cultural_minority_contract - Protect Heritage
# laamp_religious_minority_contract - Reward the Faithful
# laamp_prison_break_contract - Prison Break
# laamp_treasure_map_contract - Treasure Map
# laamp_legitimist_support_contract
# laamp_join_faction_contract - Support Faction
# laamp_help_faith_conversion_contract - Missionary Duties
# laamp_fight_faith_conversion_contract - Protect the Adherents
# laamp_help_train_commanders_contract - Knight's Coach
# laamp_help_find_secrets_contract - Private Eye
# laamp_help_fabricate_claim_contract - Forgotten Claims
# laamp_help_increase_control_contract - Fight Corruption
#
##################################################
## Raid for Captives
# scope:employer = ruler wanting to capture prisoners
# task_contract_target = character to declare war on
# task_contract_destination = capital of task_contract_target
laamp_raid_contract = {
group = laamp_contracts_war_group
icon = "gfx/interface/icons/casus_bellis/request_mercenary.dds"
travel = no
use_diplomatic_range = no
# Validity Triggers
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
# Specific flavour triggers.
scope:employer = {
OR = {
any_relation = {
type = rival
is_ai = yes
is_adult = yes
is_landed = yes
capital_province.building_max_garrison < root.current_military_strength
is_within_diplo_range = { CHARACTER = scope:employer }
any_courtier_or_guest = {
count >= 3
OR = {
AND = {
has_dynasty = yes
dynasty = prev.dynasty
}
is_consort_of = prev
}
}
}
any_neighboring_top_liege_realm_owner = {
is_ai = yes
is_adult = yes
is_landed = yes
capital_province.building_max_garrison < root.current_military_strength
house_has_feud_relation_with_trigger = { TARGET = scope:employer }
any_courtier_or_guest = {
count >= 3
OR = {
AND = {
has_dynasty = yes
dynasty = prev.dynasty
}
is_consort_of = prev
}
}
}
}
}
}
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_mercenary_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
if = {
limit = {
NOT = { exists = scope:task_contract.task_contract_target }
}
if = {
limit = {
any_neighboring_top_liege_realm_owner = {
is_ai = yes
is_adult = yes
is_landed = yes
capital_province.building_max_garrison < root.current_military_strength
house_has_feud_relation_with_trigger = { TARGET = scope:task_contract_employer }
any_courtier_or_guest = {
count >= 3
OR = {
AND = {
has_dynasty = yes
dynasty = prev.dynasty
}
is_consort_of = prev
}
}
}
}
random_neighboring_top_liege_realm_owner = {
limit = {
is_ai = yes
is_adult = yes
is_landed = yes
capital_province.building_max_garrison < root.current_military_strength
house_has_feud_relation_with_trigger = { TARGET = scope:task_contract_employer }
any_courtier_or_guest = {
count >= 3
OR = {
AND = {
has_dynasty = yes
dynasty = prev.dynasty
}
is_consort_of = prev
}
}
}
save_scope_as = task_contract_target
capital_province = {
save_scope_as = task_contract_destination
}
}
}
else = {
random_relation = {
type = rival
limit = {
is_ai = yes
is_adult = yes
is_landed = yes
capital_province.building_max_garrison < root.current_military_strength
is_within_diplo_range = { CHARACTER = scope:task_contract_employer }
any_courtier_or_guest = {
count >= 3
OR = {
AND = {
has_dynasty = yes
dynasty = prev.dynasty
}
is_consort_of = prev
}
}
}
save_scope_as = task_contract_target
capital_province = {
save_scope_as = task_contract_destination
}
}
}
}
else_if = {
limit = {
NOT = { exists = scope:task_contract.task_contract_destination }
}
scope:task_contract_target = {
capital_province = {
save_scope_as = task_contract_destination
}
}
}
}
set_task_contract_target = scope:task_contract_target
set_variable = {
name = task_contract_employer
value = scope:task_contract_employer
}
set_variable = {
name = task_contract_target
value = scope:task_contract_target
}
set_variable = {
name = task_contract_destination
value = scope:task_contract_destination
}
}
}
# On_Actions
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 = ep3_contract_event.0003
}
}
on_invalidated = {
if = {
limit = {
root.task_contract_taker = {
any_character_active_contract = {
this = root
}
}
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
save_scope_value_as = {
name = task_contract_tier
value = root.task_contract_tier
}
var:task_contract_destination = {
save_scope_as = task_contract_destination
}
var:task_contract_target = {
save_scope_as = task_contract_target
}
task_contract_taker = {
set_variable = {
name = invalidated_task_contract_type
value = flag:laamp_raid_contract
}
}
if = {
limit = {
task_contract_employer = {
is_alive = no
}
}
task_contract_employer.primary_title.holder ?= {
save_scope_as = employer_heir
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:employer_dead
}
trigger_event = ep3_contract_event.0012
}
}
else_if = {
limit = {
scope:task_contract_target = {
is_alive = no
}
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:target_dead
}
trigger_event = ep3_contract_event.0012
}
}
}
}
# Rewards
task_contract_reward = {
success_standard = {
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.var:task_contract_employer = {
save_scope_as = task_contract_employer
}
#saving scopes for custom tooltip
save_scope_as = attacker
scope:task_contract.var:task_contract_target = {
save_scope_as = defender
}
custom_tooltip = ep3_laamp_raid_contract_cb_prisoners.tt_attacker
custom_tooltip = ep3_laamp_raid_contract_cb_prisoners.tt_gold
trigger_event = ep3_contract_event.0004
show_as_tooltip = {
if = {
limit = {
faith != scope:defender.faith
}
add_piety = minor_piety_gain
}
}
# Huck 'em into our contact list.
add_contact = scope:task_contract_employer
# Give hook as well as contact
add_hook_if_possible_default_length_effect = {
TARGET = scope:task_contract_employer
TYPE = contact_list_weak_hook
}
war_contracts_completed_tracker_effect = yes
}
}
}
failure_standard = {
positive = 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 = {
scope:task_contract.task_contract_employer = {
save_scope_as = task_contract_employer
}
save_scope_value_as = {
name = task_contract_outcome
value = flag:failure
}
save_scope_value_as = {
name = task_contract_tier
value = scope:task_contract.task_contract_tier
}
trigger_event = ep3_contract_event.0004
}
show_as_tooltip = {
task_contract_taker = {
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
}
}
}
}
}
}
}
## Stand with Us
# scope:employer = ruler needing help in a civil/religious/de_hure war
# scope:task_contract_war = civil/religious/de_hure war to join on the side of employer
laamp_join_war_contract = {
group = laamp_contracts_war_group
icon = "gfx/interface/icons/trait_level_tracks/mercenary.dds"
travel = no
use_diplomatic_range = no
# Validity Triggers
valid_to_create = {
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
employer_has_treasury_to_offer_job_trigger = yes
# Specific flavour triggers.
scope:employer = {
any_character_war = {
ep3_adventurer_mercenary_war_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
save_temporary_scope_as = temp_war
}
}
#don't spawn contracts for the same wars
NOT = {
any_character_task_contract = {
task_contract_type = laamp_join_war_contract
var:task_contract_war ?= scope:temp_war
}
}
#or if you are already an ally in a war with someone in that war, to prevent being an ally and an enemy at the same time
scope:temp_war = {
any_war_participant = {
NOT = {
is_allied_in_war = root
}
}
}
}
valid_to_accept = {
# Standard triggers.
valid_laamp_basic_accept_only_trigger = yes
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
custom_tooltip = {
text = laamp_join_war_contract.valid_war
any_character_task_contract = {
task_contract_type = laamp_join_war_contract
exists = var:task_contract_war
task_contract_employer = scope:employer
}
}
}
valid_to_continue = {
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
valid_to_keep = {
exists = root.var:task_contract_war
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
weight = {
# Standard weights.
value = task_contract_weight_interesting_very_rare_value
add = laamp_contracts_weight_up_mercenary_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 = {
random_character_war = {
limit = {
is_war_leader = prev
OR = {
using_civil_war_cb_trigger = yes
using_non_ghw_holy_war_cb_trigger = yes
using_de_jure_cb_trigger = yes
using_conquest_cb_trigger = yes
}
any_war_participant = {
this != scope:task_contract.task_contract_taker
}
}
save_scope_as = task_contract_war
}
save_scope_as = task_contract_employer
}
set_variable = {
name = task_contract_war
value = scope:task_contract_war
}
set_variable = {
name = task_contract_employer
value = scope:task_contract_employer
}
scope:task_contract_war = {
if = {
limit = {
is_attacker = scope:task_contract_employer
}
primary_defender = {
save_scope_as = task_contract_target
}
}
else = {
primary_attacker = {
save_scope_as = task_contract_target
}
}
}
set_task_contract_target = scope:task_contract_target
set_variable = {
name = task_contract_target
value = scope:task_contract_target
}
}
}
# On_Actions
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 = ep3_contract_event.0008
}
set_variable = {
name = task_contract_grace_period
days = 90
}
}
on_invalidated = {
if = {
limit = {
root.task_contract_taker = {
any_character_active_contract = {
this = root
}
}
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
save_scope_value_as = {
name = task_contract_tier
value = root.task_contract_tier
}
var:task_contract_target = {
save_scope_as = task_contract_target
}
task_contract_taker = {
set_variable = {
name = invalidated_task_contract_type
value = flag:laamp_join_war_contract
}
}
if = {
limit = {
task_contract_employer = {
is_alive = no
}
}
task_contract_employer.primary_title.holder ?= {
save_scope_as = employer_heir
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:employer_dead
}
trigger_event = ep3_contract_event.0012
}
}
else_if = {
limit = {
scope:task_contract_target = {
is_alive = no
}
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:target_dead
}
trigger_event = ep3_contract_event.0012
}
}
}
}
task_contract_reward = {
success_standard = {
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
var:task_contract_war = {
save_scope_as = war
}
task_contract_employer = {
save_scope_as = task_contract_employer
save_scope_as = attacker
}
task_contract_taker = {
save_scope_as = task_contract_taker
save_scope_as = defender
custom_tooltip = laamp_join_war_contract.contribution_based_reward_gold
if = {
limit = {
faith != scope:task_contract.var:task_contract_target.faith
}
custom_tooltip = laamp_join_war_contract.contribution_based_reward_piety
}
save_scope_value_as = {
name = task_contract_reward
value = flag:success_standard
}
save_scope_value_as = {
name = war_contribution_value
value = "scope:war.war_contribution(scope:task_contract_taker)"
}
if = {
limit = {
exists = scope:task_contract_employer.var:valuable_prisoners
}
save_scope_value_as = {
name = war_valuable_prisoners
value = scope:task_contract_employer.var:valuable_prisoners
}
}
save_scope_value_as = {
name = task_contract_tier
value = scope:task_contract.task_contract_tier
}
trigger_event = ep3_contract_event.0013
# Huck 'em into our contact list.
add_contact = scope:task_contract_employer
# Give hook as well as contact
add_hook_if_possible_default_length_effect = {
TARGET = scope:task_contract_employer
TYPE = contact_list_weak_hook
}
war_contracts_completed_tracker_effect = yes
}
}
}
failure_standard = {
positive = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
if = {
limit = {
NOT = { has_variable = task_contract_grace_period }
}
save_scope_as = task_contract
var:task_contract_war = {
save_scope_as = war
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
task_contract_taker = {
add_prestige = task_contract_failure_prestige_loss_full_value
save_scope_value_as = {
name = task_contract_reward
value = flag:failure_standard
}
save_scope_value_as = {
name = task_contract_tier
value = scope:task_contract.task_contract_tier
}
trigger_event = ep3_contract_event.0013
}
}
}
}
}
}
## Help Legitimate claim
# scope:employer = ruler with a valid claim
# task_contract_target = character to declare war on
# task_contract_destination = capital of task_contract_target
laamp_help_claimant_contract = {
group = laamp_contracts_war_group
icon = "gfx/interface/icons/casus_bellis/claim_cb.dds"
travel = no
use_diplomatic_range = no
# Validity Triggers
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
# Specific flavour triggers.
scope:employer = {
is_at_war = no
NAND = {
government_allows = administrative
liege = { government_allows = administrative }
}
liege = { has_realm_law_flag = vassal_all_wars_banned }
NOT = {
vassal_contract_has_flag = vassal_contract_war_override
}
any_claim = {
holder ?= {
NOT = { is_allied_to = scope:employer }
NOT = { any_liege_or_above = { this = scope:employer } }
scope:employer = {
has_cb_on = {
target = prev
cb = claim_cb
}
}
}
}
}
}
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_mercenary_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
if = {
limit = {
NOT = { exists = scope:task_contract.task_contract_target }
}
random_claim = {
limit = {
holder ?= {
NOT = { is_allied_to = root }
NOT = { any_liege_or_above = { this = root } }
scope:task_contract_employer = {
has_cb_on = {
target = prev
cb = claim_cb
}
}
}
}
save_scope_as = task_contract_title
holder = {
save_scope_as = task_contract_target
}
}
}
}
set_task_contract_target = scope:task_contract_target
set_variable = {
name = task_contract_employer
value = scope:task_contract_employer
}
set_variable = {
name = task_contract_target
value = scope:task_contract_target
}
set_variable = {
name = task_contract_title
value = scope:task_contract_title
}
}
}
# On_Actions
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 = ep3_contract_event.0060
}
}
on_invalidated = {
if = {
limit = {
root.task_contract_taker = {
any_character_active_contract = {
this = root
}
}
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
save_scope_value_as = {
name = task_contract_tier
value = root.task_contract_tier
}
var:task_contract_target = {
save_scope_as = task_contract_target
}
task_contract_taker = {
set_variable = {
name = invalidated_task_contract_type
value = flag:laamp_help_claimant_contract
}
}
if = {
limit = {
task_contract_employer = {
is_alive = no
}
}
task_contract_employer.primary_title.holder ?= {
save_scope_as = employer_heir
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:employer_dead
}
trigger_event = ep3_contract_event.0012
}
}
else_if = {
limit = {
scope:task_contract_target = {
is_alive = no
}
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:target_dead
}
trigger_event = ep3_contract_event.0012
}
}
}
}
task_contract_reward = {
success_standard = {
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
var:task_contract_title = {
save_scope_as = task_contract_title
}
task_contract_employer = {
save_scope_as = task_contract_employer
save_scope_as = attacker
show_as_tooltip = {
get_title = scope:task_contract_title
}
}
task_contract_taker = {
save_scope_as = task_contract_taker
save_scope_as = defender
custom_tooltip = laamp_join_war_contract.contribution_based_reward_gold
if = {
limit = {
faith != scope:task_contract.var:task_contract_target.faith
}
custom_tooltip = laamp_join_war_contract.contribution_based_reward_piety
}
save_scope_value_as = {
name = task_contract_reward
value = flag:success_standard
}
save_scope_value_as = {
name = task_contract_tier
value = scope:task_contract.task_contract_tier
}
trigger_event = ep3_contract_event.0013
# Huck 'em into our contact list.
add_contact = scope:task_contract_employer
# Give hook as well as contact
add_hook_if_possible_default_length_effect = {
TARGET = scope:task_contract_employer
TYPE = contact_list_weak_hook
}
war_contracts_completed_tracker_effect = yes
}
}
}
failure_standard = {
positive = 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
var:task_contract_title = {
save_scope_as = task_contract_title
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
task_contract_taker = {
add_prestige = task_contract_failure_prestige_loss_full_value
save_scope_value_as = {
name = task_contract_reward
value = flag:failure_standard
}
save_scope_value_as = {
name = task_contract_tier
value = scope:task_contract.task_contract_tier
}
trigger_event = ep3_contract_event.0013
}
}
}
}
}
## Reclaim Artifact
# scope:employer = ruler wanting to steal an artifact
# task_contract_target = character to steal an artifact from
# task_contract_object = an artifact to steal
laamp_steal_artifact_contract = {
group = laamp_contracts_criminal_group
icon = "gfx/interface/icons/character_interactions/icon_scheme_steal_back_artifact.dds"
travel = yes
use_diplomatic_range = no
is_criminal = yes
# Validity Triggers
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
# Specific flavour triggers.
scope:employer = {
OR = {
#target any artifact you have a claim on
any_claimed_artifact = {
artifact_owner = {
is_within_diplo_range = { CHARACTER = root }
}
}
#or if you are greedy target at least a masterwork artifact of someone that is up to 1 tier above you
AND = {
ai_greed >= 50
any_neighboring_top_liege_realm_owner = {
highest_held_title_tier <= {
value = scope:employer.highest_held_title_tier
add = 1
}
any_character_artifact = {
artifact_high_rarity_trigger = yes
}
}
}
}
}
}
valid_to_keep = {
exists = root.var:task_contract_object
root.var:task_contract_object = {
artifact_owner != root.task_contract_employer
}
task_contract_target = {
NOT = {
has_opinion_modifier = {
target = root.task_contract_taker
modifier = stole_artifact_from_me
}
}
}
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
valid_to_accept = {
# Standard triggers.
valid_laamp_basic_accept_only_trigger = yes
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
}
valid_to_continue = {
exists = root.var:task_contract_object
root.var:task_contract_object = {
artifact_owner != root.task_contract_employer
}
task_contract_target = {
NOT = {
has_opinion_modifier = {
target = root.task_contract_taker
modifier = stole_artifact_from_me
}
}
}
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
weight = {
# Standard weights.
value = task_contract_weight_interesting_quite_rare_value
add = laamp_contracts_weight_up_intrigue_value
if = {
limit = {
employs_court_position = master_thief_camp_officer
}
add = 50
}
add = task_contract_weight_employer_contact_list_value
scope:employer = { multiply = task_contract_weight_by_tier_value }
}
# On_Actions
on_create = {
scope:contract = {
save_scope_as = task_contract
task_contract_employer = {
if = {
limit = {
any_claimed_artifact = {
artifact_owner = {
is_within_diplo_range = { CHARACTER = scope:task_contract.task_contract_taker }
}
save_temporary_scope_as = claimed_artifact
}
}
scope:claimed_artifact = {
save_scope_as = task_contract_object
artifact_owner = {
save_scope_as = task_contract_target
}
}
}
else = {
random_neighboring_top_liege_realm_owner = {
limit = {
highest_held_title_tier <= {
value = scope:task_contract.task_contract_employer.highest_held_title_tier
add = 1
}
any_character_artifact = {
artifact_high_rarity_trigger = yes
save_temporary_scope_as = claimed_artifact
}
}
scope:claimed_artifact = {
save_scope_as = task_contract_object
}
save_scope_as = task_contract_target
}
}
}
set_task_contract_target = scope:task_contract_target
set_variable = {
name = task_contract_employer
value = scope:task_contract.task_contract_employer
}
set_variable = {
name = task_contract_target
value = scope:task_contract_target
}
set_variable = {
name = task_contract_object
value = scope:task_contract_object
}
# Make our gold rewards static.
grab_gold_fuzz_number_effect = yes
set_variable = {
name = gold_success_standard
value = task_contract_taker.task_contract_success_gold_gain_full_value
}
}
}
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 = ep3_contract_event.0009
}
}
on_invalidated = {
if = {
limit = {
root.task_contract_taker = {
any_character_active_contract = {
this = root
}
}
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
save_scope_value_as = {
name = task_contract_tier
value = root.task_contract_tier
}
var:task_contract_destination = {
save_scope_as = task_contract_destination
}
var:task_contract_target = {
save_scope_as = task_contract_target
}
task_contract_taker = {
set_variable = {
name = invalidated_task_contract_type
value = flag:laamp_steal_artifact_contract
}
}
if = {
limit = {
task_contract_employer = {
is_alive = no
}
}
task_contract_employer.primary_title.holder ?= {
save_scope_as = employer_heir
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:employer_dead
}
trigger_event = ep3_contract_event.0012
}
}
else_if = {
limit = {
scope:task_contract_target = {
is_alive = no
}
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:target_dead
}
trigger_event = ep3_contract_event.0012
}
}
}
}
task_contract_reward = {
success_standard = {
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
var:task_contract_object = {
save_scope_as = task_contract_object
}
task_contract_taker = {
send_interface_toast = {
title = laamp_transport_contract.success
left_icon = scope:task_contract.task_contract_taker
right_icon = scope:task_contract.task_contract_employer
root = {
save_scope_value_as = { name = extra_reward value = flag:no }
# 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 = task_contract_success_provisions_gain_minor_value
OPINION = task_contract_opinion_standard_reward_value
OPINION_TYPE = succeeded_task_contract_opinion
CONTACT = yes
CONTACT_HOOK = yes
EXTRA_REWARD = scope:extra_reward
}
}
}
# Update gallowsbait score.
laamp_rewards_apply_criminal_xp_effect = {
TRACK = thief
XP_MIN = gallowsbait_xp_medium_gain
XP_MAX = gallowsbait_xp_medium_gain
}
}
hidden_effect = {
scope:task_contract_object = {
set_owner = scope:task_contract.task_contract_employer
}
}
}
}
failure_standard = {
positive = 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
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_taker = {
# Update gallowsbait score.
laamp_rewards_apply_criminal_xp_effect = {
TRACK = thief
XP_MIN = gallowsbait_xp_minor_gain
XP_MAX = gallowsbait_xp_minor_gain
}
}
}
}
}
}
## Construction Work
# scope:employer = ruler wanting to build a holding
# task_contract_destination = province where the holding is being built
laamp_construction_contract = {
group = laamp_contracts_transport_group
icon = "gfx/interface/icons/vassal_stances/builder.dds"
travel = no
use_diplomatic_range = no
# Validity Triggers
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
# Specific flavour triggers.
scope:employer = {
NOT = { government_has_flag = government_is_tribal }
any_held_title = {
county_has_empty_province_trigger = yes
}
short_term_gold > main_building_tier_1_cost
OR = {
has_trait = architect
AND = {
has_royal_court = yes
employs_court_position = royal_architect_court_position
any_court_position_holder = {
type = royal_architect_court_position
is_available_ai_adult = yes
}
}
ai_has_builder_or_pious_builder_personality = yes
}
}
}
valid_to_keep = {
var:task_contract_destination ?= {
has_ongoing_construction = yes
}
}
valid_to_accept = {
# Standard triggers.
valid_laamp_basic_accept_only_trigger = yes
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
}
valid_to_continue = {
#once you are there, you need to stay to complete the contract
trigger_if = {
limit = {
var:task_contract_destination.county = {
has_county_modifier = massive_construction_efforts_modifier
}
}
task_contract_taker.capital_county = var:task_contract_destination.county
}
NOT = { #start_city_construction_decision invalidation
var:task_contract_destination = {
has_variable = laamp_city_construction
}
}
}
weight = {
# Standard weights.
value = task_contract_weight_default_value
add = laamp_contracts_weight_up_transport_value
add = task_contract_weight_employer_contact_list_value
scope:employer = { multiply = task_contract_weight_by_tier_value }
}
# On_Actions
on_create = {
scope:contract = {
save_scope_as = task_contract
if = {
limit = {
NOT = { has_variable = task_contract_destination }
}
task_contract_employer = {
ordered_held_title = {
limit = { county_has_empty_province_trigger = yes }
order_by = development_level
random_county_province = {
limit = { province_has_no_holding_trigger = yes }
save_scope_as = task_contract_destination
random_list = {
1 = {
begin_create_holding = {
type = castle_holding
refund_cost = { gold = 0 }
}
}
1 = {
modifier = {
add = 10
county = { county_has_no_city_trigger = yes }
}
begin_create_holding = {
type = church_holding
refund_cost = { gold = 0 }
}
}
1 = {
modifier = {
add = 10
county = { county_has_no_church_trigger = yes }
}
begin_create_holding = {
type = city_holding
refund_cost = { gold = 0 }
}
}
}
}
}
remove_short_term_gold = main_building_tier_1_cost
}
set_variable = {
name = task_contract_destination
value = scope:task_contract_destination
}
}
else = {
var:task_contract_destination = {
save_scope_as = task_contract_destination
}
}
# Make our gold rewards static.
grab_gold_fuzz_number_effect = yes
set_variable = {
name = gold_success_standard
value = task_contract_taker.task_contract_success_gold_gain_full_value
}
# Make sure critical values are a bit higher.
save_scope_value_as = { name = gold_safety_margin value = flag:yes }
set_variable = {
name = gold_success_critical
value = task_contract_taker.task_contract_success_gold_gain_critical_value
}
}
}
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 = ep3_contract_event.0001
}
}
on_invalidated = {
if = {
limit = {
root.task_contract_taker = {
any_character_active_contract = {
this = root
}
}
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
save_scope_value_as = {
name = task_contract_tier
value = root.task_contract_tier
}
var:task_contract_destination = {
save_scope_as = task_contract_destination
}
task_contract_taker = {
set_variable = {
name = invalidated_task_contract_type
value = flag:laamp_construction_contract
}
}
if = {
limit = {
task_contract_employer = {
is_alive = no
}
}
task_contract_employer.primary_title.holder ?= {
save_scope_as = employer_heir
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:employer_dead
}
trigger_event = ep3_contract_event.0012
}
}
var:task_contract_destination.county = {
remove_county_modifier = massive_construction_efforts_modifier
}
task_contract_taker = {
remove_character_modifier = ep3_construction_contract_modifier
}
}
}
task_contract_reward = {
success_standard = {
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 = laamp_transport_contract.success
left_icon = scope:task_contract.task_contract_taker
right_icon = scope:task_contract.task_contract_employer
scope:task_contract.var:task_contract_destination = {
switch = {
trigger = has_holding_type
castle_holding = {
scope:task_contract.task_contract_taker = {
add_prestige = task_contract_success_prestige_gain_critical_value
}
}
church_holding = {
scope:task_contract.task_contract_taker = {
add_piety = task_contract_success_piety_gain_critical_value
}
}
city_holding = {
scope:task_contract.task_contract_taker = {
add_gold = scope:task_contract.var:gold_success_standard
}
}
}
}
if = {
limit = {
is_ai = no
}
scope:task_contract.task_contract_employer = {
pay_short_term_gold = {
target = scope:task_contract.task_contract_taker
gold = scope:task_contract.var:gold_success_standard
}
}
}
else = {
add_gold = scope:task_contract.var:gold_success_standard
}
reverse_add_opinion = {
modifier = succeeded_task_contract_opinion
target = scope:task_contract.task_contract_employer
opinion = 20
}
# Huck 'em into our contact list.
add_contact = scope:task_contract.task_contract_employer
}
}
}
}
success_critical = {
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 = laamp_transport_contract.success
left_icon = scope:task_contract.task_contract_taker
right_icon = scope:task_contract.task_contract_employer
scope:task_contract.var:task_contract_destination = {
switch = {
trigger = has_holding_type
castle_holding = {
scope:task_contract.task_contract_taker = {
add_prestige = task_contract_success_prestige_gain_full_value
}
}
church_holding = {
scope:task_contract.task_contract_taker = {
add_piety = task_contract_success_piety_gain_full_value
}
}
city_holding = {
scope:task_contract.task_contract_taker = {
add_gold = scope:task_contract.var:gold_success_critical
}
}
}
}
if = {
limit = {
is_ai = no
}
scope:task_contract.task_contract_employer = {
pay_short_term_gold = {
target = scope:task_contract.task_contract_taker
gold = scope:task_contract.var:gold_success_critical
}
}
}
else = {
add_gold = scope:task_contract.var:gold_success_critical
}
reverse_add_opinion = {
modifier = critically_succeeded_task_contract_opinion
target = scope:task_contract.task_contract_employer
opinion = 50
}
# Huck 'em into our contact list.
add_contact = scope:task_contract.task_contract_employer
# Give hook as well as contact
add_hook_if_possible_default_length_effect = {
TARGET = scope:task_contract.task_contract_employer
TYPE = contact_list_weak_hook
}
}
}
}
}
failure_standard = {
positive = 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 = {
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
}
}
var:task_contract_destination.county ?= {
remove_county_modifier = massive_construction_efforts_modifier
}
}
}
}
}
## Treasure Hunting
# scope:employer = ruler wanting a treasure
# task_contract_destination = province where you go to find a treasure - set in the treasure_hunting_contract_decision decision
laamp_treasure_hunting_contract = {
group = laamp_contracts_transport_group
icon = "gfx/interface/icons/inspirations/adventure_inspiration.dds"
travel = no
use_diplomatic_range = no
# Validity Triggers
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
# Specific flavour triggers.
#There can only be one contract of this type at a time, so that the decision is easier to manage
any_character_task_contract = {
NOT = { has_task_contract_type = laamp_treasure_hunting_contract }
}
scope:employer = {
highest_held_title_tier > tier_duchy
}
}
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_transport_value
add = task_contract_weight_employer_contact_list_value
scope:employer = { multiply = task_contract_weight_by_tier_value }
}
# On_Actions
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 = {
save_scope_as = task_contract_taker
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
scope:task_contract_taker = {
trigger_event = ep3_contract_event.0005
}
}
on_invalidated = {
if = {
limit = {
root.task_contract_taker = {
any_character_active_contract = {
this = root
}
}
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
save_scope_value_as = {
name = task_contract_tier
value = root.task_contract_tier
}
var:task_contract_destination ?= {
save_scope_as = task_contract_destination
}
task_contract_taker = {
set_variable = {
name = invalidated_task_contract_type
value = flag:laamp_treasure_hunting_contract
}
}
if = {
limit = {
task_contract_employer = {
is_alive = no
}
}
task_contract_employer.primary_title.holder ?= {
save_scope_as = employer_heir
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:employer_dead
}
trigger_event = ep3_contract_event.0012
}
}
}
}
task_contract_reward = {
success_standard = {
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 = laamp_transport_contract.success
left_icon = scope:task_contract.task_contract_taker
right_icon = scope:task_contract.task_contract_employer
add_prestige = task_contract_success_prestige_gain_full_value
if = {
limit = {
is_ai = no
}
scope:task_contract.task_contract_employer = {
pay_short_term_gold = {
target = scope:task_contract.task_contract_taker
gold = task_contract_success_gold_gain_full_value
}
}
}
else = {
add_short_term_gold = task_contract_success_gold_gain_full_value
}
reverse_add_opinion = {
modifier = succeeded_task_contract_opinion
target = scope:task_contract.task_contract_employer
opinion = 20
}
# Huck 'em into our contact list.
add_contact = scope:task_contract.task_contract_employer
# Give hook as well as contact
add_hook_if_possible_default_length_effect = {
TARGET = scope:task_contract.task_contract_employer
TYPE = contact_list_weak_hook
}
}
}
}
}
failure_standard = {
positive = 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 = {
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
}
}
}
}
}
}
## Protect Heritage
# scope:employer = a minority vassal of the same culture as root wanting to get title revocation rights vassal contract
# task_contract_target = liege of task_contract_employer
# task_contract_destination = capital of task_contract_employer
laamp_cultural_minority_contract = {
group = laamp_contracts_diplomacy_group
icon = "gfx/interface/icons/character_interactions/icon_culture.dds"
travel = yes
use_diplomatic_range = no
# Validity Triggers
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
# Specific flavour triggers.
scope:employer = {
top_liege != this
has_vassal_stance = minority
liege ?= {
is_ai = yes
}
vassal_contract_obligation_level_can_be_increased = title_revocation_rights
culture = {
this != scope:employer.liege.culture
}
}
}
valid_to_accept = {
# Standard triggers.
valid_laamp_basic_accept_only_trigger = yes
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
}
valid_to_continue = {
save_temporary_scope_as = task_contract
var:task_contract_target = {
any_vassal = {
scope:task_contract.var:task_contract_employer = this
}
}
# 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_almost_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_Actions
on_create = {
scope:contract = {
save_scope_as = task_contract
task_contract_employer = {
liege = {
save_scope_as = task_contract_target
}
capital_province = {
save_scope_as = task_contract_destination
}
}
set_task_contract_target = scope:task_contract_target
set_variable = {
name = task_contract_employer
value = scope:task_contract.task_contract_employer
}
set_variable = {
name = task_contract_target
value = scope:task_contract_target
}
set_variable = {
name = task_contract_destination
value = scope:task_contract_destination
}
# Make our gold rewards static.
grab_gold_fuzz_number_effect = yes
set_variable = {
name = gold_success_standard
value = task_contract_taker.task_contract_success_gold_gain_full_value
}
}
}
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 = ep3_contract_event.0020
}
}
on_invalidated = {
if = {
limit = {
root.task_contract_taker = {
any_character_active_contract = {
this = root
}
}
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
save_scope_value_as = {
name = task_contract_tier
value = root.task_contract_tier
}
var:task_contract_destination = {
save_scope_as = task_contract_destination
}
var:task_contract_target = {
save_scope_as = task_contract_target
}
task_contract_taker = {
set_variable = {
name = invalidated_task_contract_type
value = flag:laamp_cultural_minority_contract
}
}
if = {
limit = {
task_contract_employer = {
is_alive = no
}
}
task_contract_employer.primary_title.holder ?= {
save_scope_as = employer_heir
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:employer_dead
}
trigger_event = ep3_contract_event.0012
}
}
else_if = {
limit = {
scope:task_contract_target = {
is_alive = no
}
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:target_dead
}
trigger_event = ep3_contract_event.0012
}
}
else_if = {
limit = {
scope:task_contract_target = {
any_vassal = {
count = all
scope:task_contract_employer != this
}
}
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:not_vassal
}
trigger_event = ep3_contract_event.0012
}
}
}
}
# Rewards
task_contract_reward = {
success_standard = {
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 = {
type = event_toast_effect_good
title = laamp_transport_contract.success
left_icon = scope:task_contract.task_contract_taker
right_icon = scope:task_contract.task_contract_employer
root = {
save_scope_value_as = { name = extra_reward value = flag:no }
# 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 = task_contract_success_provisions_gain_minor_value
OPINION = task_contract_opinion_standard_reward_value
OPINION_TYPE = succeeded_task_contract_opinion
CONTACT = yes
CONTACT_HOOK = yes
EXTRA_REWARD = scope:extra_reward
}
}
if = {
limit = {
scope:task_contract.task_contract_taker.culture != scope:task_contract.task_contract_employer.culture
}
scope:task_contract.task_contract_taker.culture = {
change_cultural_acceptance = {
target = scope:task_contract.task_contract_employer.culture
value = low_positive_culture_acceptance
desc = cultural_acceptance_laamp_cultural_minority_contract
}
}
}
show_as_tooltip = {
scope:task_contract.task_contract_employer = {
vassal_contract_set_obligation_level = {
type = title_revocation_rights
level = 1
}
}
}
}
}
}
}
failure_standard = {
positive = 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 = {
send_interface_toast = {
type = event_toast_effect_bad
title = laamp_transport_contract.transport_failed
root = {
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
}
}
}
}
}
}
}
}
## Reward the Faithful
# scope:employer = a minority vassal of the same faith as root wanting to get religious rights vassal contract
# task_contract_target = liege of task_contract_employer
# task_contract_destination = capital of task_contract_employer
laamp_religious_minority_contract = {
group = laamp_contracts_diplomacy_group
icon = "gfx/interface/icons/character_interactions/religious.dds"
travel = yes
use_diplomatic_range = no
# Validity Triggers
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
# Specific flavour triggers.
scope:employer = {
top_liege != this
has_vassal_stance = minority
liege ?= {
is_ai = yes
}
vassal_contract_obligation_level_can_be_increased = religious_rights
faith != liege.faith
}
}
valid_to_accept = {
# Standard triggers.
valid_laamp_basic_accept_only_trigger = yes
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
}
valid_to_continue = {
save_temporary_scope_as = task_contract
var:task_contract_target = {
any_vassal = {
scope:task_contract.var:task_contract_employer = this
}
}
# 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_almost_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_Actions
on_create = {
scope:contract = {
save_scope_as = task_contract
task_contract_employer = {
liege = {
save_scope_as = task_contract_target
}
capital_province = {
save_scope_as = task_contract_destination
}
}
set_task_contract_target = scope:task_contract_target
set_variable = {
name = task_contract_employer
value = scope:task_contract.task_contract_employer
}
set_variable = {
name = task_contract_target
value = scope:task_contract_target
}
set_variable = {
name = task_contract_destination
value = scope:task_contract_destination
}
# Make our gold rewards static.
grab_gold_fuzz_number_effect = yes
set_variable = {
name = gold_success_standard
value = task_contract_taker.task_contract_success_gold_gain_full_value
}
}
}
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 = ep3_contract_event.0021
}
}
on_invalidated = {
if = {
limit = {
root.task_contract_taker = {
any_character_active_contract = {
this = root
}
}
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
save_scope_value_as = {
name = task_contract_tier
value = root.task_contract_tier
}
var:task_contract_destination = {
save_scope_as = task_contract_destination
}
var:task_contract_target = {
save_scope_as = task_contract_target
}
task_contract_taker = {
set_variable = {
name = invalidated_task_contract_type
value = flag:laamp_religious_minority_contract
}
}
if = {
limit = {
task_contract_employer = {
is_alive = no
}
}
task_contract_employer.primary_title.holder ?= {
save_scope_as = employer_heir
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:employer_dead
}
trigger_event = ep3_contract_event.0012
}
}
else_if = {
limit = {
scope:task_contract_target = {
is_alive = no
}
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:target_dead
}
trigger_event = ep3_contract_event.0012
}
}
else_if = {
limit = {
scope:task_contract_target = {
any_vassal = {
count = all
scope:task_contract_employer != this
}
}
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:not_vassal
}
trigger_event = ep3_contract_event.0012
}
}
}
}
# Rewards
task_contract_reward = {
success_standard = {
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 = {
type = event_toast_effect_good
title = laamp_transport_contract.success
left_icon = scope:task_contract.task_contract_taker
right_icon = scope:task_contract.task_contract_employer
save_scope_value_as = { name = extra_reward value = flag:no }
root = {
# Standard Rewards.
laamp_rewards_disburse_ordinary_currency_effect = {
GOLD = 0
PRESTIGE = 0
PIETY = task_contract_success_piety_gain_full_value
PROVISIONS = 0
OPINION = task_contract_opinion_standard_reward_value
OPINION_TYPE = succeeded_task_contract_opinion
CONTACT = yes
CONTACT_HOOK = yes
EXTRA_REWARD = scope:extra_reward
}
}
show_as_tooltip = {
scope:task_contract.task_contract_employer = {
vassal_contract_set_obligation_level = {
type = religious_rights
level = 1
}
}
}
}
}
}
}
failure_standard = {
positive = 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 = {
send_interface_toast = {
type = event_toast_effect_bad
title = laamp_transport_contract.transport_failed
save_scope_value_as = { name = extra_reward value = flag:no }
root = {
# Standard Penalties.
laamp_rewards_disburse_ordinary_currency_effect = {
GOLD = 0
PRESTIGE = 0
PIETY = task_contract_failure_piety_loss_full_value
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
}
}
}
}
}
}
}
}
## Prison Break
# scope:employer = a character that has a spouse, family member, soulmate or best friend imprisoned by another character
# task_contract_target = imprisoner
# task_contract_destination = capital of task_contract_target
# task_contract_object = the imprisoned character to be rescued
laamp_prison_break_contract = {
group = laamp_contracts_intrigue_group
icon = "gfx/interface/icons/casus_bellis/fp3_free_house_member.dds"
travel = no
use_diplomatic_range = no
# Validity Triggers
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
# Specific flavour triggers.
scope:employer = {
OR = {
any_spouse = {
is_imprisoned = yes
NOR = {
is_imprisoned_by = scope:employer
is_imprisoned_by = root
}
}
any_close_family_member = {
is_imprisoned = yes
NOR = {
is_imprisoned_by = scope:employer
is_imprisoned_by = root
}
}
any_relation = {
type = soulmate
is_imprisoned = yes
NOR = {
is_imprisoned_by = scope:employer
is_imprisoned_by = root
}
}
any_relation = {
type = best_friend
is_imprisoned = yes
NOR = {
is_imprisoned_by = scope:employer
is_imprisoned_by = root
}
}
}
}
}
valid_to_keep = {
exists = root.var:task_contract_object
root.var:task_contract_object = {
is_imprisoned = yes
}
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
valid_to_accept = {
# Standard triggers.
valid_laamp_basic_accept_only_trigger = yes
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
}
valid_to_continue = {
var:task_contract_object ?= {
is_imprisoned = yes
is_alive = yes
}
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
weight = {
# Standard weights.
value = task_contract_weight_interesting_very_rare_value
add = laamp_contracts_weight_up_intrigue_value
scope:employer = {
if = {
limit = { has_trait = compassionate }
add = task_contract_weight_bonus_employer_has_associated_traits_value
}
multiply = task_contract_weight_by_tier_value
}
add = task_contract_weight_employer_contact_list_value
}
on_create = {
scope:contract = {
save_scope_as = task_contract
task_contract_employer = {
every_spouse = {
limit = {
is_imprisoned = yes
NOR = {
is_imprisoned_by = scope:task_contract.task_contract_employer
is_imprisoned_by = scope:task_contract.task_contract_taker
}
}
add_to_list = character_to_breakout
}
every_close_family_member = {
limit = {
is_imprisoned = yes
NOR = {
is_imprisoned_by = scope:task_contract.task_contract_employer
is_imprisoned_by = scope:task_contract.task_contract_taker
}
}
add_to_list = character_to_breakout
}
every_relation = {
type = soulmate
limit = {
is_imprisoned = yes
NOR = {
is_imprisoned_by = scope:task_contract.task_contract_employer
is_imprisoned_by = scope:task_contract.task_contract_taker
}
}
add_to_list = character_to_breakout
}
every_relation = {
type = best_friend
limit = {
is_imprisoned = yes
NOR = {
is_imprisoned_by = scope:task_contract.task_contract_employer
is_imprisoned_by = scope:task_contract.task_contract_taker
}
}
add_to_list = character_to_breakout
}
ordered_in_list = {
list = character_to_breakout
order_by = prison_break_value
save_scope_as = task_contract_object
}
}
set_variable = {
name = task_contract_employer
value = scope:task_contract.task_contract_employer
}
set_variable = {
name = task_contract_object
value = scope:task_contract_object
}
scope:task_contract_object = {
imprisoner = {
save_scope_as = task_contract_target
capital_province = {
save_scope_as = task_contract_destination
}
}
add_character_flag = being_prisonbroken_by_laamp
}
set_task_contract_target = scope:task_contract_target
set_variable = {
name = task_contract_target
value = scope:task_contract_target
}
set_variable = {
name = task_contract_destination
value = scope:task_contract_destination
}
# Make our gold rewards static.
grab_gold_fuzz_number_effect = yes
set_variable = {
name = gold_success_standard
value = task_contract_taker.task_contract_success_gold_gain_full_value
}
}
}
# On_Actions
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 = ep3_contract_event.0030
}
}
on_invalidated = {
if = {
limit = {
root.task_contract_taker = {
any_character_active_contract = {
this = root
}
}
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
save_scope_value_as = {
name = task_contract_tier
value = root.task_contract_tier
}
var:task_contract_destination = {
save_scope_as = task_contract_destination
}
var:task_contract_target = {
save_scope_as = task_contract_target
}
var:task_contract_object = {
save_scope_as = task_contract_object
}
task_contract_taker = {
set_variable = {
name = invalidated_task_contract_type
value = flag:laamp_prison_break_contract
}
}
if = {
limit = {
task_contract_employer = {
is_alive = no
}
}
task_contract_employer.primary_title.holder ?= {
save_scope_as = employer_heir
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:employer_dead
}
trigger_event = ep3_contract_event.0012
}
}
else_if = {
limit = {
scope:task_contract_target = {
is_alive = no
}
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:target_dead
}
trigger_event = ep3_contract_event.0012
}
}
else_if = {
limit = {
scope:task_contract_object = {
is_alive = no
}
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:escortee_dead
}
trigger_event = ep3_contract_event.0012
}
}
else_if = {
limit = {
scope:task_contract_object = {
is_imprisoned = no
}
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:prisoner_free
}
trigger_event = ep3_contract_event.0012
}
}
}
}
# Rewards
task_contract_reward = {
success_standard = {
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 = {
type = event_toast_effect_good
title = laamp_transport_contract.success
left_icon = scope:task_contract.task_contract_taker
right_icon = scope:task_contract.task_contract_employer
save_scope_value_as = { name = extra_reward value = flag:no }
# Standard Rewards.
scope: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_minor_value
OPINION = task_contract_opinion_standard_reward_value
OPINION_TYPE = succeeded_task_contract_opinion
CONTACT = yes
CONTACT_HOOK = yes
EXTRA_REWARD = scope:extra_reward
}
}
scope:task_contract.var:task_contract_object = {
scope:task_contract.var:task_contract_target = {
save_scope_as = imprisoner
}
escape_from_prison_effect = yes
}
}
}
}
}
failure_standard = {
positive = 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 = {
send_interface_toast = {
type = event_toast_effect_bad
title = laamp_transport_contract.transport_failed
left_icon = scope:task_contract.task_contract_taker
right_icon = scope:task_contract.task_contract_employer
save_scope_value_as = { name = extra_reward value = flag:no }
# Standard Penalties.
scope: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
}
}
}
}
}
}
}
}
## Treasure Map
# scope:employer = root
# task_contract_target = root
# contract_treasure_location = ep3_laamp_decision_event.1025
# contract_picked_up_in_location = ep3_laamp_decision_event.1025
laamp_treasure_map_contract = {
group = laamp_contracts_noticeboard_group #These are created in the Visit Local Settlement-decision
icon = "gfx/interface/icons/character_interactions/icon_contract_escort.dds"
# Validity Triggers
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
# Specific flavour triggers.
#There can only be one contract of this type at a time
any_task_contract = {
NOT = { has_task_contract_type = laamp_treasure_map_contract }
}
}
valid_to_accept = {
# Standard triggers.
valid_laamp_basic_accept_only_trigger = yes
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
#We're not already enrolled in a treasure map contract
NOT = {
any_character_artifact = { has_variable = 1025_treasure_map }
}
}
valid_to_continue = {
#We haven't already located the treasure
trigger_if = {
limit = {
NOT = { has_variable = 0045_used_map }
}
root.task_contract_taker = {
any_character_artifact = { has_variable = 1025_treasure_map }
}
}
#The employer is still alive and free
root.task_contract_employer = {
is_alive = yes
is_imprisoned = no
NOT = { has_trait = incapable }
}
# 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_transport_value
add = task_contract_weight_employer_contact_list_value
scope:employer = { multiply = task_contract_weight_by_tier_value }
}
# On_Actions
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 = { save_scope_as = task_contract_taker }
task_contract_employer = { save_scope_as = task_contract_employer }
#Create quest item Treasure Map
scope:task_contract_taker = {
create_artifact = {
name = treasure_map
description = treasure_map_desc
modifier = artifact_monthly_minor_prestige_1_modifier
type = miscellaneous
visuals = pocket_map
max_durability = 10
history = {
type = given
actor = scope:task_contract_employer
recipient = scope:task_contract_taker
location = scope:task_contract.var:contract_picked_up_in_location
}
save_scope_as = newly_created_map
}
#Set variables
scope:newly_created_map ?= {
set_variable = 1025_treasure_map
set_variable = {
name = picked_up_in_location
value = scope:task_contract.var:contract_picked_up_in_location
}
set_variable = {
name = artifact_treasure_location
value = scope:task_contract.var:contract_treasure_location
}
if = {
limit = {
exists = var:picked_up_in_location
exists = var:artifact_treasure_location
}
set_artifact_description = treasure_map_desc
}
}
#Chuck the employer in there as well
add_courtier = scope:task_contract_employer
scope:task_contract_employer = {
add_character_flag = {
flag = blocked_from_leaving
years = 11 #The map should break first, and is set to 10 years
}
}
trigger_event = ep3_contract_event.0043
}
}
#Employer died? Map decayed?
on_invalidated = {
#Employer unavailable
if = {
limit = {
task_contract_employer = {
OR = {
is_alive = no
has_trait = incapable
is_imprisoned = yes
}
}
}
task_contract_employer = { save_scope_as = task_contract_employer }
#Save the location of the employer
var:contract_picked_up_in_location = { save_scope_as = original_contract_location }
#Save contract
save_scope_as = task_contract
#Save tier, realistically always 1
save_scope_value_as = {
name = task_contract_tier
value = root.task_contract_tier
}
#Save the destination
var:contract_treasure_location ?= { save_scope_as = task_contract_destination }
#Destroy the historical artifact if the LAAMP is an AI
if = {
limit = {
has_variable = has_unique_historical_artifact
task_contract_taker = { is_ai = yes }
}
var:has_unique_historical_artifact = { save_scope_as = historical_artifact }
hidden_effect = { destroy_artifact = scope:historical_artifact }
}
#Send the appropriate event
task_contract_taker = {
set_variable = {
name = invalidated_task_contract_type
value = flag:laamp_treasure_map_contract
}
#Dead
if = {
limit = {
scope:task_contract_employer = { is_alive = no }
}
trigger_event = ep3_contract_event.0041
}
#Incapable
if = {
limit = {
scope:task_contract_employer = { has_trait = incapable }
}
trigger_event = ep3_contract_event.0041
}
#Imprisoned
if = {
limit = {
scope:task_contract_employer = { is_imprisoned = yes }
}
#Save the invalidation flag
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:unlanded_employer_is_imprisoned
}
trigger_event = ep3_contract_event.0012
}
}
#No longer excavating
remove_variable ?= ep3_laamp_decision_1000_is_excavating
}
#Decay-destroyed map is handled via on_artifact_broken_through_decay, leading to ep3_contract_event.0040
}
task_contract_reward = {
#Something to display in the Contract Reward window. Not actually used.
success_qualified = {
effect = {
save_scope_as = task_contract
if = { # Camp building extra Criminal Rewards: +50%.
limit = {
task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_criminal_contract_rewards }
}
save_scope_value_as = { name = extra_reward value = flag:yes }
}
else = { # Standard Reward.
save_scope_value_as = { name = extra_reward value = flag:no }
}
#Check for provision overflows
save_scope_value_as = {
name = provisions_to_add_value
value = {
value = task_contract_taker.domicile.max_provisions
max = old_adventurer_stashed_provisions_value
}
}
save_scope_value_as = {
name = total_provisions_after_reward_value
value = {
value = task_contract_taker.domicile.provisions
add = scope:provisions_to_add_value
}
}
#If there is an overflow
if = {
limit = { scope:total_provisions_after_reward_value > task_contract_taker.domicile.max_provisions }
save_scope_value_as = {
name = provisions_to_add_value
value = {
value = task_contract_taker.domicile.max_provisions
subtract = task_contract_taker.domicile.provisions
}
}
save_scope_value_as = {
name = provisions_overflow_value
value = {
value = scope:total_provisions_after_reward_value
subtract = task_contract_taker.domicile.max_provisions
}
}
save_scope_value_as = {
name = provisions_transformed_to_gold_value
value = {
value = scope:total_provisions_after_reward_value
subtract = task_contract_taker.domicile.max_provisions
multiply = 0.05
}
}
}
task_contract_taker = {
scope:task_contract.task_contract_employer = {
pay_short_term_gold = {
target = scope:task_contract.task_contract_taker
gold = {
value = {
value = old_adventurer_stashed_gold_value
#Extra rewards
if = {
limit = { scope:extra_reward = flag:yes }
multiply = task_contract_extra_reward_multiplier_value
}
}
}
}
}
stress_impact = {
base = major_stress_impact_loss
honest = minor_stress_impact_loss
}
#1000 seems like a fine, round number for some old adventurer to have stashed somewhere
domicile ?= {
change_provisions = {
#We're capped
if = {
limit = { provisions >= max_provisions }
value = 0 #No provisions, you're full
}
#We're not capped and our max cap is less than 1000
else_if = {
limit = { max_provisions < old_adventurer_stashed_provisions_value }
value = {
value = max_provisions
subtract = provisions
}
}
#We're not capped and our max cap is equal to -or more- than 1000
else = {
value = {
value = max_provisions
subtract = provisions
max = old_adventurer_stashed_provisions_value
}
}
}
}
#Inform the player about the overflow
if = {
limit = { exists = scope:provisions_transformed_to_gold_value }
custom_tooltip = {
text = overflowing_provisions_to_gold.tt
add_gold = scope:provisions_transformed_to_gold_value
}
}
}
}
}
#Handled in ep3_contract_event.0050
success_standard = {
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
if = { # Camp building extra Criminal Rewards: +50%.
limit = {
task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_criminal_contract_rewards }
}
save_scope_value_as = { name = extra_reward value = flag:yes }
}
else = { # Standard Reward.
save_scope_value_as = { name = extra_reward value = flag:no }
}
#Check for provision overflows
if = {
limit = { task_contract_taker.domicile.max_provisions < old_adventurer_stashed_provisions_value }
save_scope_value_as = {
name = provisions_to_add_value
value = task_contract_taker.domicile.max_provisions
}
}
else = {
save_scope_value_as = {
name = provisions_to_add_value
value = old_adventurer_stashed_provisions_value
}
}
save_scope_value_as = {
name = total_provisions_after_reward_value
value = {
value = task_contract_taker.domicile.provisions
add = scope:provisions_to_add_value
}
}
#If there is an overflow
if = {
limit = { scope:total_provisions_after_reward_value > task_contract_taker.domicile.max_provisions }
save_scope_value_as = {
name = provisions_to_add_value
value = {
value = task_contract_taker.domicile.max_provisions
subtract = task_contract_taker.domicile.provisions
}
}
save_scope_value_as = {
name = provisions_overflow_value
value = {
value = scope:total_provisions_after_reward_value
subtract = task_contract_taker.domicile.max_provisions
}
}
save_scope_value_as = {
name = provisions_transformed_to_gold_value
value = {
value = scope:total_provisions_after_reward_value
subtract = task_contract_taker.domicile.max_provisions
multiply = 0.05
}
}
}
#The actual toast
task_contract_taker = {
send_interface_toast = {
title = laamp_transport_contract.success
left_icon = scope:task_contract.task_contract_taker
right_icon = scope:task_contract.task_contract_employer
#Historical Artifact 'transferred owner'
if = {
limit = {
scope:task_contract = { has_variable = has_unique_historical_artifact }
}
scope:task_contract = {
var:has_unique_historical_artifact = { save_scope_as = historical_artifact }
}
show_as_tooltip = {
scope:historical_artifact = { set_owner = scope:task_contract.task_contract_employer }
}
}
#Random Jewellry 'transferred owner'
if = {
limit = {
scope:task_contract = { has_variable = has_jewelry_artifact }
}
scope:task_contract = {
var:has_jewelry_artifact = { save_scope_as = jewelry_artifact }
}
show_as_tooltip = {
scope:jewelry_artifact = { set_owner = scope:task_contract.task_contract_employer }
}
}
#Gold reward
if = {
limit = { is_ai = no }
scope:task_contract.task_contract_employer = {
if = {
limit = { exists = scope:historical_artifact }
scope:task_contract.task_contract_employer = {
pay_short_term_gold = {
target = scope:task_contract.task_contract_taker
gold = {
value = {
value = old_adventurer_stashed_gold_value
multiply = 4
#Extra rewards
if = {
limit = { scope:extra_reward = flag:yes }
multiply = task_contract_extra_reward_multiplier_value
}
}
}
}
}
}
else_if = {
limit = { exists = scope:jewelry_artifact }
pay_short_term_gold = {
target = scope:task_contract.task_contract_taker
gold = {
value = {
value = old_adventurer_stashed_gold_value
multiply = {
value = scope:task_contract.var:has_jewelry_artifact.artifact_rarity
subtract = 1
}
#Extra rewards
if = {
limit = { scope:extra_reward = flag:yes }
multiply = task_contract_extra_reward_multiplier_value
}
}
}
}
}
else_if = {
limit = {
scope:task_contract = { has_variable = treasure_gold_great }
}
pay_short_term_gold = {
target = scope:task_contract.task_contract_taker
gold = {
value = {
value = old_adventurer_stashed_gold_value
multiply = 1.5
#Extra rewards
if = {
limit = { scope:extra_reward = flag:yes }
multiply = task_contract_extra_reward_multiplier_value
}
}
}
}
}
else_if = {
limit = {
scope:task_contract = {
OR = {
has_variable = treasure_gold_mediocre
has_variable = treasure_gold_poor
}
}
}
pay_short_term_gold = {
target = scope:task_contract.task_contract_taker
gold = {
value = {
value = old_adventurer_stashed_gold_value
multiply = 1.25
#Extra rewards
if = {
limit = { scope:extra_reward = flag:yes }
multiply = task_contract_extra_reward_multiplier_value
}
}
}
}
}
else_if = {
limit = {
scope:task_contract = { has_variable = treasure_pillaged }
}
pay_short_term_gold = {
target = scope:task_contract.task_contract_taker
gold = {
value = {
value = old_adventurer_stashed_gold_value
#Extra rewards
if = {
limit = { scope:extra_reward = flag:yes }
multiply = task_contract_extra_reward_multiplier_value
}
}
}
}
}
}
}
#For AI
else = {
add_short_term_gold = {
value = {
value = old_adventurer_stashed_gold_value
#Extra rewards
if = {
limit = { scope:extra_reward = flag:yes }
multiply = task_contract_extra_reward_multiplier_value
}
}
}
}
#Prestige reward
if = {
limit = { exists = scope:historical_artifact }
add_prestige = {
value = {
value = major_prestige_gain
#Extra rewards
if = {
limit = { scope:extra_reward = flag:yes }
multiply = task_contract_extra_reward_multiplier_value
}
}
}
}
#Stress loss -- less stress loss if you gained more gold and vice versa (for doing a good thing)
if = {
limit = {
NOT = { exists = scope:historical_artifact }
}
if = {
limit = {
OR = {
exists = scope:jewelry_artifact
scope:task_contract = { has_variable = treasure_gold_great }
}
}
stress_impact = {
base = minor_stress_impact_loss
honest = minor_stress_impact_loss
}
}
else_if = {
limit = {
scope:task_contract = {
OR = {
has_variable = treasure_gold_mediocre
has_variable = treasure_gold_poor
}
}
}
stress_impact = {
base = medium_stress_impact_loss
honest = minor_stress_impact_loss
}
}
else_if = {
limit = {
scope:task_contract = { has_variable = treasure_pillaged }
}
stress_impact = {
base = major_stress_impact_loss
honest = minor_stress_impact_loss
}
}
}
#Lose some Gallowsbait xp
if = {
limit = {
#... you can't steal a view
NOT = {
scope:task_contract = { has_variable = has_scenic_riches }
}
}
#Lose some Gallowsbait xp
if = {
limit = {
has_trait = gallowsbait
has_trait_xp = {
trait = gallowsbait
track = thief
value > 0
}
}
laamp_rewards_apply_criminal_xp_effect = {
TRACK = thief
XP_MIN = negative_small_lifestyle_random_xp_low
XP_MAX = negative_small_lifestyle_random_xp_low
}
}
}
#Inform the player about the overflow
if = {
limit = { exists = scope:provisions_transformed_to_gold_value }
custom_tooltip = {
text = overflowing_provisions_to_gold.tt
add_gold = scope:provisions_transformed_to_gold_value
}
}
#Throw the historical artifact back in the pool
if = {
limit = { exists = scope:historical_artifact }
hidden_effect = { destroy_artifact = scope:historical_artifact }
}
}
#1000 seems like a fine, round number for some old adventurer to have stashed somewhere
domicile ?= {
change_provisions = {
#We're capped
if = {
limit = { provisions = max_provisions }
value = 0 #No provisions, you're full
}
#We're not capped and our max cap is less than 1000
else_if = {
limit = { max_provisions < old_adventurer_stashed_provisions_value }
value = {
value = max_provisions
subtract = provisions
}
}
#We're not capped and our max cap is equal to -or more- than 1000
else = {
value = {
value = max_provisions
subtract = provisions
max = old_adventurer_stashed_provisions_value
}
}
}
}
#Sweep, sweep.
hidden_effect = {
if = {
limit = {
any_character_artifact = { has_variable = 1025_treasure_map }
}
random_character_artifact = {
limit = { has_variable = 1025_treasure_map }
destroy_artifact = this
}
}
}
#No longer excavating
remove_variable ?= ep3_laamp_decision_1000_is_excavating
}
}
}
#Handled in ep3_contract_event.0045
failure_standard = {
positive = 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
scope:task_contract = {
if = {
limit = { has_variable = has_unique_historical_artifact }
task_contract_taker = { #Pretty inconsequential, since you couldn't really determine ahead of time
send_interface_toast = {
title = laamp_transport_contract.transport_failed
left_icon = scope:task_contract.task_contract_taker
right_icon = scope:task_contract.task_contract_employer
#And this adventurer doesn't want to see you again
progress_towards_rival_effect = {
REASON = rival_mia_contract
CHARACTER = scope:task_contract.task_contract_employer
OPINION = 0
}
reverse_add_opinion = {
modifier = stole_artifact_from_me
target = scope:task_contract.task_contract_employer
opinion = -50
}
add_prestige = medium_prestige_loss
}
}
}
else = {
task_contract_taker = { #Pretty inconsequential, since you couldn't really determine ahead of time
send_interface_toast = {
title = laamp_transport_contract.transport_failed
left_icon = scope:task_contract.task_contract_taker
right_icon = scope:task_contract.task_contract_employer
#And this adventurer doesn't want to see you again
hidden_effect = { #For narrative reasons. For mechanical reasons, this character won't get picked in Visit Settlement again
progress_towards_rival_effect = {
REASON = rival_mia_contract
CHARACTER = scope:task_contract.task_contract_employer
OPINION = 0
}
}
reverse_add_opinion = {
modifier = disappointed_opinion
target = scope:task_contract.task_contract_employer
opinion = -30
}
add_prestige = minor_prestige_loss
}
}
}
task_contract_taker = {
#Sweep, sweep. (Let the player know the map will be destroyed when failing)
if = {
limit = {
any_character_artifact = { has_variable = 1025_treasure_map }
}
random_character_artifact = {
limit = { has_variable = 1025_treasure_map }
destroy_artifact = this
}
}
#No longer excavating
remove_variable ?= ep3_laamp_decision_1000_is_excavating
}
}
}
}
}
}
laamp_legitimist_support_contract = {
group = laamp_contracts_legitimist_group
icon = "gfx/interface/icons/scheme_types/diplomacy.dds"
travel = yes
use_diplomatic_range = yes
weight = {
value = task_contract_weight_interesting_very_rare_value
add = task_contract_weight_employer_contact_list_value
}
valid_to_create = {
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
has_realm_law = camp_purpose_legitimists
scope:employer = {
opinion = {
target = root
value > 60
}
}
scope:employer.primary_title.tier >= tier_kingdom
any_claim = {
exists = holder
tier >= tier_kingdom
holder != scope:employer
}
}
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
}
}
on_create = {
scope:contract = {
task_contract_employer = {
add_character_flag = legitimist_supporter
}
}
}
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 = petitioned_ruler
}
task_contract_taker = {
trigger_event = ep3_laamps.8101
}
}
task_contract_reward = {
success_standard = {
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
task_contract_employer = {
save_scope_as = recipient
}
task_contract_taker = {
custom_tooltip = laamp_legitimist_support_contract_success
}
}
}
failure_standard = {
positive = no
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
task_contract_taker = {
custom_tooltip = laamp_legitimist_support_contract_failure
}
}
}
}
}
## Support Faction
# scope:employer = ruler needing help in a faction
# scope:task_contract_faction = faction to join
laamp_join_faction_contract = {
group = laamp_contracts_war_group
icon = "gfx/interface/icons/character_interactions/faction.dds"
travel = no
use_diplomatic_range = no
# Validity Triggers
valid_to_create = {
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
employer_has_treasury_to_offer_job_trigger = yes
# Specific flavour triggers.
scope:employer = {
is_a_faction_member = yes
joined_faction = {
save_temporary_scope_as = temp_faction
}
}
is_a_faction_member = no
#don't spawn contracts for the same factions or faction targets
NOT = {
any_character_task_contract = {
task_contract_type = laamp_join_faction_contract
OR = {
var:task_contract_faction ?= scope:temp_faction
task_contract_employer = scope:temp_faction.faction_target
}
}
}
is_adult = yes
is_imprisoned = no
NOR = {
is_allied_to = scope:temp_faction.faction_target
scope:temp_faction.faction_target = { has_strong_hook = root }
has_trait = incapable
has_character_flag = joining_faction_block
has_relation_friend = scope:temp_faction.faction_target
has_relation_lover = scope:temp_faction.faction_target
has_secret_relation_lover = scope:temp_faction.faction_target
scope:temp_faction.faction_target = { is_contact_of = root }
}
}
valid_to_keep = {
exists = root.var:task_contract_faction
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
valid_to_accept = {
# Standard triggers.
valid_laamp_basic_accept_only_trigger = yes
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
custom_tooltip = {
text = NOT_FACTION_JOIN_CREATE_CONDITION_NOT_FACTION_MEMBER
is_a_faction_member = no
}
#passes_faction_hard_block from 00_rules.txt
scope:employer ?= {
joined_faction ?= {
faction_target ?= {
save_temporary_scope_as = target
}
}
}
custom_description = {
text = "FACTION_CANT_JOIN_CREATE_ADULT"
is_adult = yes
}
custom_description = {
text = "FACTION_CANT_JOIN_CREATE_ALLIED"
trigger_if = {
limit = { exists = scope:target }
NOT = { is_allied_to = scope:target }
}
}
custom_description = {
text = "FACTION_CANT_JOIN_CREATE_HOOK"
trigger_if = {
limit = { exists = scope:target }
scope:target = {
NOT = { has_strong_hook = root }
}
}
}
custom_description = {
text = "FACTION_CANT_JOIN_CREATE_IMPRISONED"
trigger_if = {
limit = {
joined_faction ?= {
faction_is_at_war = yes
}
}
}
trigger_else = {
is_imprisoned = no
}
}
custom_description = {
text = "FACTION_CANT_JOIN_CREATE_INCAPABLE"
NOT = { has_trait = incapable }
}
custom_description = {
text = "character_blocked_from_joining"
NOT = { has_character_flag = joining_faction_block }
}
custom_description = {
text = "faction_relation_blocks_joining_friend"
trigger_if = {
limit = { exists = scope:target }
NOT = {
root = { has_relation_friend = scope:target }
}
}
}
custom_description = {
text = "faction_relation_blocks_joining_lover"
trigger_if = {
limit = { exists = scope:target }
NOR = {
root = { has_relation_lover = scope:target }
root = { has_secret_relation_lover = scope:target }
}
}
}
}
valid_to_continue = {
exists = root.var:task_contract_faction
var:task_contract_faction = {
any_faction_member = {
this = root.task_contract_taker
}
}
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
weight = {
# Standard weights.
value = task_contract_weight_interesting_almost_rare_value
add = laamp_contracts_weight_up_mercenary_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 = {
joined_faction = {
save_scope_as = task_contract_faction
}
save_scope_as = task_contract_employer
}
set_variable = {
name = task_contract_faction
value = scope:task_contract_faction
}
set_variable = {
name = task_contract_employer
value = scope:task_contract_employer
}
scope:task_contract_faction = {
faction_target = {
save_scope_as = task_contract_target
}
}
set_task_contract_target = scope:task_contract_target
set_variable = {
name = task_contract_target
value = scope:task_contract_target
}
}
}
# On_Actions
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 = ep3_contract_event.0070
}
}
on_invalidated = {
if = {
limit = {
root.task_contract_taker = {
any_character_active_contract = {
this = root
}
}
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
save_scope_value_as = {
name = task_contract_tier
value = root.task_contract_tier
}
var:task_contract_target = {
save_scope_as = task_contract_target
}
task_contract_taker = {
set_variable = {
name = invalidated_task_contract_type
value = flag:laamp_join_faction_contract
}
}
if = {
limit = {
task_contract_employer = {
is_alive = no
}
}
task_contract_employer.primary_title.holder ?= {
save_scope_as = employer_heir
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:employer_dead
}
trigger_event = ep3_contract_event.0012
}
}
else_if = {
limit = {
scope:task_contract_target = {
is_alive = no
}
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:target_dead
}
trigger_event = ep3_contract_event.0012
}
}
else_if = {
limit = {
NOT = { exists = scope:task_contract_faction }
NOT = { exists = var:suppress_invalidation_event }
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:faction_disbanded
}
trigger_event = ep3_contract_event.0012
}
}
}
task_contract_taker = {
remove_variable = task_contract_faction
}
}
task_contract_reward = {
success_standard = {
effect = {
task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
save_scope_as = task_contract
var:task_contract_faction = {
save_scope_as = faction
}
task_contract_employer = {
save_scope_as = task_contract_employer
save_scope_as = attacker
}
task_contract_taker = {
save_scope_as = task_contract_taker
save_scope_as = defender
custom_tooltip = laamp_join_war_contract.contribution_based_reward_gold
if = {
limit = {
faith != scope:task_contract.var:task_contract_target.faith
}
custom_tooltip = laamp_join_war_contract.contribution_based_reward_piety
}
save_scope_value_as = {
name = task_contract_reward
value = flag:success_standard
}
save_scope_value_as = {
name = task_contract_tier
value = scope:task_contract.task_contract_tier
}
war_contracts_completed_tracker_effect = yes
send_interface_toast = {
title = laamp_transport_contract.success
left_icon = scope:task_contract.task_contract_taker
right_icon = scope:task_contract.task_contract_employer
# Huck 'em into our contact list.
add_contact = scope:task_contract.task_contract_employer
# Give hook as well as contact
add_hook_if_possible_default_length_effect = {
TARGET = scope:task_contract.task_contract_employer
TYPE = contact_list_weak_hook
}
if = {
limit = {
exists = scope:task_contract.var:task_contract_title
}
scope:attacker = {
save_scope_as = actor
}
save_scope_as = recipient
scope:task_contract.var:task_contract_title = {
add_to_list = offered_titles
}
negotiate_settlement_interaction_effect = yes
}
}
}
}
}
failure_standard = {
positive = 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
var:task_contract_faction = {
save_scope_as = faction
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_reward
value = flag:failure_standard
}
save_scope_value_as = {
name = task_contract_tier
value = scope:task_contract.task_contract_tier
}
send_interface_toast = {
title = laamp_transport_contract.transport_failed
left_icon = scope:task_contract.task_contract_taker
right_icon = scope:task_contract.task_contract_employer
add_prestige = task_contract_failure_prestige_loss_full_value
}
}
}
}
}
}
## Missionary Duties
# scope:employer = ruler converting the county
# scope:task_contract_target = court chaplain doing the convert council task
# scope:task_contract_destination = county that has the council task active
# scope:task_contract_councillor = always the councillor performing the task
laamp_help_faith_conversion_contract = {
group = laamp_contracts_learning_group
icon = "/gfx/interface/icons/council_task_types/task_conversion.dds"
travel = yes
use_diplomatic_range = yes
valid_to_create = {
any_task_contract = {
task_contract_type = laamp_help_faith_conversion_contract
NOT = { task_contract_location = scope:employer.location }
}
council_task_contract_valid_employer_trigger = {
COUNCILLOR_TYPE = councillor_court_chaplain
COUNCIL_TASK_TYPE = task_conversion
}
}
valid_to_accept = {
council_task_contract_valid_employer_trigger = {
COUNCILLOR_TYPE = councillor_court_chaplain
COUNCIL_TASK_TYPE = task_conversion
}
}
valid_to_keep = {
exists = root.var:task_contract_councillor_liege
exists = root.var:task_contract_councillor
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
valid_to_continue = {
exists = root.var:task_contract_councillor_liege
exists = root.var:task_contract_councillor
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
weight = {
# Standard weights.
value = task_contract_weight_interesting_almost_rare_value
add = laamp_contracts_weight_up_learning_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 = {
scope:task_contract_employer.cp:councillor_court_chaplain ?= { is_performing_council_task = task_conversion }
}
set_task_contract_target = scope:task_contract_employer.cp:councillor_court_chaplain
scope:task_contract_employer.cp:councillor_court_chaplain = { save_scope_as = task_contract_councillor }
}
else = {
set_task_contract_target = scope:task_contract_employer.liege
scope:task_contract_employer = { save_scope_as = task_contract_councillor }
}
set_variable = {
name = task_contract_destination
value = root.task_contract_target.councillor_task_target
}
set_variable = {
name = task_contract_employer
value = scope:task_contract_employer
}
set_variable = {
name = task_contract_target
value = root.task_contract_target
}
set_variable = {
name = task_contract_councillor
value = scope:task_contract_councillor
}
# Make our gold rewards static.
grab_gold_fuzz_number_effect = yes
set_variable = {
name = gold_success_standard
value = task_contract_taker.task_contract_success_gold_gain_full_value
}
}
}
# On_Actions
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 = ep3_contract_event.0085
}
}
on_invalidated = {
if = {
limit = {
root.task_contract_taker = {
any_character_active_contract = {
this = root
}
}
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
save_scope_value_as = {
name = task_contract_tier
value = root.task_contract_tier
}
var:task_contract_destination = {
save_scope_as = task_contract_destination
}
var:task_contract_target = {
save_scope_as = task_contract_target
}
task_contract_taker = {
set_variable = {
name = invalidated_task_contract_type
value = flag:laamp_help_faith_conversion_contract
}
}
if = {
limit = {
task_contract_employer = {
is_alive = no
}
}
task_contract_employer.primary_title.holder ?= {
save_scope_as = employer_heir
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:employer_dead
}
trigger_event = ep3_contract_event.0012
}
}
else_if = {
limit = {
scope:task_contract_target = {
is_alive = no
}
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:target_dead
}
trigger_event = ep3_contract_event.0012
}
}
}
}
# Rewards
task_contract_reward = {
success_standard = {
effect = {
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 }
laamp_rewards_disburse_ordinary_currency_effect = {
GOLD = scope:task_contract.var:gold_success_standard
PRESTIGE = task_contract_success_prestige_gain_half_value
PIETY = task_contract_success_piety_gain_full_value
PROVISIONS = task_contract_failure_provisions_gain_minor_value
OPINION = task_contract_opinion_standard_reward_value
OPINION_TYPE = succeeded_task_contract_opinion
CONTACT = yes
CONTACT_HOOK = yes
EXTRA_REWARD = scope:extra_reward
}
gain_patron_and_hook_from_council_task_contract_effect = yes
}
}
failure_standard = {
positive = no
effect = {
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
}
}
}
}
}
## Protect the Adherents
# scope:employer = pool character resisting county conversion
# scope:task_contract_target = court chaplain doing the convert council task
# scope:task_contract_destination = county that has the council task active
# scope:task_contract_object = task_contract_target's liege
laamp_fight_faith_conversion_contract = {
group = laamp_contracts_learning_group
icon = "/gfx/interface/icons/council_task_types/task_conversion.dds"
travel = no
use_diplomatic_range = yes
valid_to_create = {
NOT = {
any_task_contract = {
task_contract_type = laamp_fight_faith_conversion_contract
task_contract_location = scope:employer.location
}
}
scope:employer = {
top_liege != this
any_liege_or_above = {
cp:councillor_court_chaplain ?= {
is_performing_council_task = task_conversion
councillor_task_target = scope:employer.location
}
faith != root.faith
faith != scope:employer.faith
}
}
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 = {
exists = root.var:task_contract_councillor_liege
exists = root.var:task_contract_councillor
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
valid_to_accept = {
# Standard triggers.
valid_laamp_basic_accept_only_trigger = yes
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
}
weight = {
# Standard weights.
value = task_contract_weight_interesting_almost_rare_value
add = laamp_contracts_weight_up_learning_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 = {
NOT = { exists = scope:task_contract.task_contract_destination }
}
random_liege_or_above = {
limit = {
cp:councillor_court_chaplain ?= {
is_performing_council_task = task_conversion
councillor_task_target = scope:task_contract_employer.location
save_temporary_scope_as = temp_councillor
}
faith != scope:task_contract.task_contract_taker.faith
faith != scope:task_contract_employer.faith
}
save_scope_as = task_contract_councillor_liege
scope:temp_councillor = {
save_scope_as = task_contract_councillor
}
}
scope:task_contract = {
#save how the contract was generated for easier debugging
set_variable = {
name = spawned_by
value = flag:populate_effect
}
}
}
else = {
scope:task_contract = {
task_contract_target = {
save_scope_as = task_contract_councillor
liege = {
save_scope_as = task_contract_councillor_liege
}
}
#save how the contract was generated for easier debugging
set_variable = {
name = spawned_by
value = flag:on_action
}
}
}
}
# Error suppression
if = {
limit = { exists = var:spawned_by
OR = {
var:spawned_by = flag:populate_effect
var:spawned_by = flag:on_action
}
}
}
set_variable = {
name = task_contract_councillor_liege
value = scope:task_contract_councillor_liege
}
set_variable = {
name = task_contract_councillor
value = scope:task_contract_councillor
}
if = {
limit = {
NOT = { exists = scope:task_contract.task_contract_target }
}
set_task_contract_target = scope:task_contract.var:task_contract_councillor
}
set_variable = {
name = task_contract_employer
value = scope:task_contract_employer
}
set_variable = {
name = task_contract_target
value = scope:task_contract.task_contract_target
}
if = {
limit = {
exists = scope:task_contract.task_contract_destination
}
set_variable = {
name = task_contract_destination
value = scope:task_contract.task_contract_destination
}
}
else = {
set_variable = {
name = task_contract_destination
value = scope:task_contract.var:task_contract_councillor.councillor_task_target
}
}
# Make our gold rewards static.
grab_gold_fuzz_number_effect = yes
set_variable = {
name = gold_success_standard
value = task_contract_taker.task_contract_success_gold_gain_full_value
}
}
}
# On_Actions
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 = ep3_contract_event.0082
}
}
on_invalidated = {
if = {
limit = {
root.task_contract_taker = {
any_character_active_contract = {
this = root
}
}
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
save_scope_value_as = {
name = task_contract_tier
value = root.task_contract_tier
}
var:task_contract_destination = {
save_scope_as = task_contract_destination
}
var:task_contract_target = {
save_scope_as = task_contract_target
}
task_contract_taker = {
set_variable = {
name = invalidated_task_contract_type
value = flag:laamp_fight_faith_conversion_contract
}
}
if = {
limit = {
task_contract_employer = {
is_alive = no
}
}
task_contract_employer.primary_title.holder ?= {
save_scope_as = employer_heir
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:employer_dead
}
trigger_event = ep3_contract_event.0012
}
}
else_if = {
limit = {
scope:task_contract_target = {
is_alive = no
}
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:target_dead
}
trigger_event = ep3_contract_event.0012
}
}
}
}
# Rewards
task_contract_reward = {
success_standard = {
effect = {
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 }
# Standard Rewards.
laamp_rewards_disburse_ordinary_currency_effect = {
GOLD = scope:task_contract.var:gold_success_standard
PRESTIGE = task_contract_success_prestige_gain_half_value
PIETY = task_contract_success_piety_gain_full_value
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 = yes
EXTRA_REWARD = scope:extra_reward
}
}
}
failure_standard = {
positive = no
effect = {
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 = 0
PIETY = -25
PROVISIONS = 0
OPINION = task_contract_opinion_standard_failure_value
OPINION_TYPE = failed_task_contract_opinion
CONTACT = no
CONTACT_HOOK = no
EXTRA_REWARD = scope:extra_reward
}
}
}
}
}
## Knight's Coach
# scope:employer = ruler or marshal needing help in train commanders council task
# scope:task_contract_target = marshal or ruler, depending on who's the employer
# var:knights_to_train = list of all knights you have to train
laamp_help_train_commanders_contract = {
group = laamp_contracts_martial_group
icon = "/gfx/interface/icons/council_task_types/task_train_commanders.dds"
travel = yes
use_diplomatic_range = yes
valid_to_create = {
council_task_contract_valid_employer_trigger = {
COUNCILLOR_TYPE = councillor_marshal
COUNCIL_TASK_TYPE = task_train_commanders
}
trigger_if = {
limit = {
scope:employer.cp:councillor_marshal ?= {
is_performing_council_task = task_train_commanders
}
}
scope:employer = {
any_knight = { }
}
}
trigger_else = {
scope:employer.liege = {
any_knight = { }
}
}
}
valid_to_accept = {
council_task_contract_valid_employer_trigger = {
COUNCILLOR_TYPE = councillor_marshal
COUNCIL_TASK_TYPE = task_train_commanders
}
}
valid_to_keep = {
exists = root.var:task_contract_councillor_liege
exists = root.var:task_contract_councillor
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
valid_to_continue = {
time_since_contract_taken <= 720
has_variable_list = knights_to_train
any_in_list = {
variable = knights_to_train
is_alive = yes
is_knight = yes
}
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
weight = {
# Standard weights.
value = task_contract_weight_interesting_almost_rare_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
}
set_variable = {
name = task_contract_employer
value = scope:task_contract_employer
}
assign_council_task_scopes_in_contract_effect = {
COUNCILLOR_TYPE = councillor_marshal
COUNCIL_TASK_TYPE = task_train_commanders
}
#save all knights to train
scope:task_contract_councillor_liege = {
ordered_knight = {
order_by = {
value = prowess
multiply = -1
}
max = 3
add_to_list = knights_list
scope:task_contract = {
add_to_variable_list = {
name = knights_to_train
target = prev
}
}
}
}
#keep track of success and failure
set_variable = {
name = knights_trained
value = 0
}
set_variable = {
name = knights_failed
value = 0
}
set_variable = {
name = knights_limit
value = {
value = list_size:knights_list
subtract = 1
}
}
#get a list of traits you can teach
task_contract_taker = {
every_character_trait = {
limit = {
has_trait_category = commander
}
scope:task_contract = {
add_to_variable_list = {
name = takers_commander_traits
target = prev
}
}
}
}
# Make our gold rewards static.
grab_gold_fuzz_number_effect = yes
set_variable = {
name = gold_success_standard
value = task_contract_taker.task_contract_success_gold_gain_full_value
}
# Make sure critical values are a bit higher.
save_scope_value_as = { name = gold_safety_margin value = flag:yes }
set_variable = {
name = gold_success_critical
value = task_contract_taker.task_contract_success_gold_gain_critical_value
}
}
}
# On_Actions
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 = ep3_contract_event.0090
}
}
on_invalidated = {
save_scope_as = task_contract
if = {
limit = {
root.task_contract_taker = {
any_character_active_contract = {
this = root
}
}
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
save_scope_value_as = {
name = task_contract_tier
value = root.task_contract_tier
}
task_contract_target = {
save_scope_as = task_contract_target
}
task_contract_taker = {
set_variable = {
name = invalidated_task_contract_type
value = flag:laamp_help_train_commanders_contract
}
}
if = {
limit = {
task_contract_employer = {
is_alive = no
}
}
task_contract_employer.primary_title.holder ?= {
save_scope_as = employer_heir
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:employer_dead
}
trigger_event = ep3_contract_event.0012
}
}
else_if = {
limit = {
scope:task_contract_target = {
is_alive = no
}
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:target_dead
}
trigger_event = ep3_contract_event.0012
}
}
else = {
scope:task_contract = {
if = {
limit = {
NAND = {
var:knights_trained = 0
var:knights_failed = 0
}
}
if = {
limit = {
var:knights_trained >= scope:task_contract.var:knights_failed
}
complete_task_contract = success_standard
}
else = {
complete_task_contract = failure_standard
}
}
}
}
}
}
task_contract_reward = {
success_critical = {
effect = {
save_scope_value_as = { name = extra_reward value = flag:no }
save_scope_as = task_contract
task_contract_taker = {
play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract"
send_interface_toast = {
title = laamp_transport_contract.success
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_critical
PRESTIGE = task_contract_success_prestige_gain_half_value
PIETY = 0
PROVISIONS = task_contract_success_provisions_gain_minor_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
}
gain_patron_and_hook_from_council_task_contract_effect = yes
}
}
}
}
}
success_standard = {
effect = {
save_scope_value_as = { name = extra_reward value = flag:no }
save_scope_as = task_contract
task_contract_taker = {
play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract"
send_interface_toast = {
title = laamp_transport_contract.success
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_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 = 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
task_contract_taker = {
play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract"
send_interface_toast = {
title = laamp_transport_contract.transport_failed
left_icon = scope:task_contract.task_contract_taker
right_icon = scope:task_contract.task_contract_employer
scope:task_contract = {
# 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
}
}
}
}
}
}
}
}
## Private Eye
# scope:employer = spymaster or ruler finding secrets
# scope:task_contract_target = holder of the claimed title
# scope:task_contract_destination = county that has the council task active
# scope:task_contract_object = employer's liege or court chaplain, depending on who's the employer
laamp_help_find_secrets_contract = {
group = laamp_contracts_intrigue_group
icon = "/gfx/interface/icons/council_task_types/task_find_secrets.dds"
travel = yes
use_diplomatic_range = yes
valid_to_create = {
council_task_contract_valid_employer_trigger = {
COUNCILLOR_TYPE = councillor_spymaster
COUNCIL_TASK_TYPE = task_find_secrets
}
}
valid_to_keep = {
exists = root.var:task_contract_councillor_liege
exists = root.var:task_contract_councillor
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
valid_to_accept = {
council_task_contract_valid_employer_trigger = {
COUNCILLOR_TYPE = councillor_spymaster
COUNCIL_TASK_TYPE = task_find_secrets
}
}
valid_to_continue = {
time_since_contract_taken <= 720
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
weight = {
# Standard weights.
value = task_contract_weight_interesting_almost_rare_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
}
set_variable = {
name = task_contract_employer
value = scope:task_contract_employer
}
set_variable = {
name = task_contract_destination
value = scope:task_contract.task_contract_location
}
set_variable = {
name = secrets_found
value = 0
}
assign_council_task_scopes_in_contract_effect = {
COUNCILLOR_TYPE = councillor_spymaster
COUNCIL_TASK_TYPE = task_find_secrets
}
# Make our gold rewards static.
grab_gold_fuzz_number_effect = yes
set_variable = {
name = gold_success_standard
value = task_contract_taker.task_contract_success_gold_gain_full_value
}
}
}
# On_Actions
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 = ep3_contract_event.0100
}
}
on_invalidated = {
save_scope_as = task_contract
if = {
limit = {
root.task_contract_taker = {
any_character_active_contract = {
this = root
}
}
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
save_scope_value_as = {
name = task_contract_tier
value = root.task_contract_tier
}
task_contract_target = {
save_scope_as = task_contract_target
}
task_contract_taker = {
set_variable = {
name = invalidated_task_contract_type
value = flag:laamp_help_find_secrets_contract
}
}
if = {
limit = {
task_contract_employer = {
is_alive = no
}
}
task_contract_employer.primary_title.holder ?= {
save_scope_as = employer_heir
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:employer_dead
}
trigger_event = ep3_contract_event.0012
}
}
else_if = {
limit = {
scope:task_contract_target = {
is_alive = no
}
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:target_dead
}
trigger_event = ep3_contract_event.0012
}
}
else = {
scope:task_contract = {
if = {
limit = {
var:knights_trained >= scope:task_contract.var:knights_failed
}
complete_task_contract = success_standard
}
else = {
complete_task_contract = failure_standard
}
}
}
}
}
task_contract_reward = {
success_standard = {
effect = {
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 }
# Standard Rewards.
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 = yes
EXTRA_REWARD = scope:extra_reward
}
gain_patron_and_hook_from_council_task_contract_effect = yes
}
}
failure_standard = {
positive = no
effect = {
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 = -25
PIETY = 0
PROVISIONS = 0
OPINION = task_contract_opinion_standard_failure_value
OPINION_TYPE = failed_task_contract_opinion
CONTACT = no
CONTACT_HOOK = no
EXTRA_REWARD = scope:extra_reward
}
}
}
}
}
## Forgotten Claims
# scope:employer = court chaplain or ruler fabricating a claim
# scope:task_contract_target = holder of the claimed title
# scope:task_contract_destination = county that has the council task active
# scope:task_contract_councillor_liege = always liege of the councillor performing the task
# scope:task_contract_councillor = always the councillor performing the task
laamp_help_fabricate_claim_contract = {
group = laamp_contracts_intrigue_group
icon = "/gfx/interface/icons/council_task_types/task_fabricate_claim.dds"
travel = yes
use_diplomatic_range = yes
valid_to_create = {
council_task_contract_valid_employer_trigger = {
COUNCILLOR_TYPE = councillor_court_chaplain
COUNCIL_TASK_TYPE = task_fabricate_claim
}
}
valid_to_keep = {
exists = root.var:task_contract_councillor_liege
exists = root.var:task_contract_councillor
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
valid_to_accept = {
council_task_contract_valid_employer_trigger = {
COUNCILLOR_TYPE = councillor_court_chaplain
COUNCIL_TASK_TYPE = task_fabricate_claim
}
}
valid_to_continue = {
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
weight = {
# Standard weights.
value = task_contract_weight_interesting_almost_rare_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
assign_council_task_scopes_in_contract_effect = {
COUNCILLOR_TYPE = councillor_court_chaplain
COUNCIL_TASK_TYPE = task_fabricate_claim
}
if = {
limit = {
exists = scope:task_contract.task_contract_destination
}
set_variable = {
name = task_contract_destination
value = scope:task_contract.task_contract_destination
}
}
else = {
set_variable = {
name = task_contract_destination
value = scope:task_contract_councillor.councillor_task_target
}
}
set_variable = {
name = task_contract_employer
value = scope:task_contract.task_contract_employer
}
set_variable = {
name = task_contract_target
value = scope:task_contract.var:task_contract_destination.province_owner
}
set_task_contract_target = scope:task_contract.var:task_contract_target
# Make our gold rewards static.
grab_gold_fuzz_number_effect = yes
set_variable = {
name = gold_success_critical
value = task_contract_taker.task_contract_success_gold_gain_full_value
}
set_variable = {
name = gold_success_standard
value = task_contract_taker.task_contract_success_gold_gain_full_value
}
}
}
# On_Actions
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 = ep3_contract_event.0080
}
}
on_invalidated = {
if = {
limit = {
root.task_contract_taker = {
any_character_active_contract = {
this = root
}
}
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
save_scope_value_as = {
name = task_contract_tier
value = root.task_contract_tier
}
var:task_contract_destination = {
save_scope_as = task_contract_destination
}
var:task_contract_target = {
save_scope_as = task_contract_target
}
task_contract_taker = {
set_variable = {
name = invalidated_task_contract_type
value = flag:laamp_help_fabricate_claim_contract
}
}
if = {
limit = {
task_contract_employer = {
is_alive = no
}
}
task_contract_employer.primary_title.holder ?= {
save_scope_as = employer_heir
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:employer_dead
}
trigger_event = ep3_contract_event.0012
}
}
else_if = {
limit = {
scope:task_contract_target = {
is_alive = no
}
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:target_dead
}
trigger_event = ep3_contract_event.0012
}
}
}
}
# Rewards
task_contract_reward = {
success_critical = {
effect = {
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 }
# Standard Rewards.
laamp_rewards_disburse_ordinary_currency_effect = {
GOLD = scope:task_contract.var:gold_success_critical
PRESTIGE = task_contract_success_prestige_gain_half_value
PIETY = 0
PROVISIONS = task_contract_success_provisions_gain_minor_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
}
if = {
limit = {
exists = var:attached_scheme
}
var:attached_scheme = {
scheme_target_title = {
save_scope_as = claimed_title
}
}
}
else = {
scope:task_contract.var:task_contract_destination.county = {
save_scope_as = claimed_title
}
}
var:task_contract_councillor_liege = {
add_pressed_claim = scope:claimed_title
}
task_contract_taker = {
show_as_tooltip = {
add_pressed_claim = scope:claimed_title
}
}
gain_patron_and_hook_from_council_task_contract_effect = yes
}
}
success_standard = {
effect = {
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 }
# Standard Rewards.
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
}
if = {
limit = {
exists = var:attached_scheme
}
var:attached_scheme = {
scheme_target_title = {
save_scope_as = claimed_title
}
}
}
else = {
scope:task_contract.var:task_contract_destination.county = {
save_scope_as = claimed_title
}
}
var:task_contract_councillor_liege = {
add_pressed_claim = scope:claimed_title
}
task_contract_taker = {
hidden_effect = {
remove_claim = scope:claimed_title
}
}
gain_patron_and_hook_from_council_task_contract_effect = yes
}
}
failure_standard = {
positive = no
effect = {
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
}
}
}
}
}
## Fight Corruption
# scope:employer = marshal or ruler increasing control
# scope:task_contract_target = holder of the claimed title
# scope:task_contract_destination = county that has the council task active
# scope:task_contract_councillor_liege = always liege of the councillor performing the task
# scope:task_contract_councillor = always the councillor performing the task
laamp_help_increase_control_contract = {
group = laamp_contracts_intrigue_group
icon = "/gfx/interface/icons/council_task_types/task_increase_control.dds"
travel = no
use_diplomatic_range = yes
valid_to_create = {
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = root
}
OR = {
scope:employer = {
NOT = { var:issued_help_increase_control_contract_recently ?= root }
top_liege = this
any_councillor = {
OR = {
has_council_position = councillor_marshal
AND = {
is_kurultai_trigger = yes
highest_skill = martial
}
}
}
any_sub_realm_county = {
OR = {
has_county_corruption_trigger = yes
county_control <= low_county_control
}
}
}
scope:employer = {
NOT = { var:issued_help_increase_control_contract_recently ?= root }
OR = {
has_council_position = councillor_marshal
AND = {
is_kurultai_trigger = yes
highest_skill = martial
}
}
is_councillor_of = top_liege
top_liege = {
NOT = {
has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:employer }
}
any_sub_realm_county = {
OR = {
has_county_corruption_trigger = yes
county_control <= low_county_control
}
}
}
}
}
}
valid_to_keep = {
var:task_contract_councillor_liege ?= {
any_sub_realm_county = {
OR = {
has_county_corruption_trigger = yes
county_control <= low_county_control
}
}
}
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
valid_to_continue = {
# Standard triggers.
valid_laamp_basic_trigger = {
EMPLOYER = root.task_contract_employer
LAAMP = root.task_contract_taker
}
}
valid_to_accept = {
}
weight = {
# Standard weights.
value = task_contract_weight_interesting_almost_rare_value
add = laamp_contracts_weight_up_martial_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 = {
set_variable = {
name = issued_help_increase_control_contract_recently
value = scope:task_contract.task_contract_taker
years = 10
}
save_scope_as = task_contract_employer
if = {
limit = {
top_liege = this
}
scope:task_contract_employer = {
save_scope_as = task_contract_councillor_liege
random_councillor = {
limit = {
OR = {
has_council_position = councillor_marshal
AND = {
is_kurultai_trigger = yes
highest_skill = martial
}
}
}
save_scope_as = task_contract_councillor
}
}
}
else = {
scope:task_contract_employer = {
save_scope_as = task_contract_councillor
top_liege = {
save_scope_as = task_contract_councillor_liege
}
}
}
}
set_variable = {
name = task_contract_councillor_liege
value = scope:task_contract_councillor_liege
}
set_variable = {
name = task_contract_councillor
value = scope:task_contract_councillor
}
set_variable = {
name = task_contract_employer
value = scope:task_contract.task_contract_employer
}
set_variable = {
name = support
value = 0
}
set_variable = {
name = control
value = 0
}
set_variable = {
name = num_of_corrupt_counties
value = 0
}
#save the liege as the target
set_task_contract_target = scope:task_contract_councillor_liege
#save all counties with low control or corruption modifier in liege's realm
scope:task_contract_councillor_liege = {
ordered_sub_realm_county = {
order_by = {
value = county_opinion
multiply = -1
}
max = 6
check_range_bounds = no
limit = {
OR = {
has_county_corruption_trigger = yes
county_control <= low_county_control
}
}
scope:task_contract = {
add_to_variable_list = {
name = corrupt_counties
target = prev
}
}
}
}
# We do this a bit later on because otherwise it was having some slight issues if only one county was valid.
set_variable = {
name = num_of_corrupt_counties
value = {
every_in_list = {
variable = corrupt_counties
add = 1
}
}
}
random_in_list = {
variable = corrupt_counties
title_province = {
save_scope_as = destination
}
}
set_variable = {
name = task_contract_destination
value = scope:destination
}
# Make our gold rewards static.
grab_gold_fuzz_number_effect = yes
set_variable = {
name = gold_success_critical
value = {
value = task_contract_taker.task_contract_success_gold_gain_full_value
multiply = scope:task_contract.var:num_of_corrupt_counties
}
}
set_variable = {
name = gold_success_standard
value = {
value = task_contract_taker.task_contract_success_gold_gain_full_value
multiply = scope:task_contract.var:num_of_corrupt_counties
multiply = 0.5
}
}
}
}
# On_Actions
on_accepted = {
save_scope_as = task_contract
task_contract_taker = {
trigger_event = ep3_contract_event.0092
}
}
on_invalidated = {
if = {
limit = {
root.task_contract_taker = {
any_character_active_contract = {
this = root
}
}
}
task_contract_employer = {
save_scope_as = task_contract_employer
}
save_scope_value_as = {
name = task_contract_tier
value = root.task_contract_tier
}
var:task_contract_destination = {
save_scope_as = task_contract_destination
}
var:task_contract_target = {
save_scope_as = task_contract_target
}
task_contract_taker = {
set_variable = {
name = invalidated_task_contract_type
value = flag:laamp_help_increase_control_contract
}
}
if = {
limit = {
task_contract_employer = {
is_alive = no
}
}
task_contract_employer.primary_title.holder ?= {
save_scope_as = employer_heir
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:employer_dead
}
trigger_event = ep3_contract_event.0012
}
}
else_if = {
limit = {
scope:task_contract_target = {
is_alive = no
}
}
task_contract_taker = {
save_scope_value_as = {
name = task_contract_invalidation_reason
value = flag:target_dead
}
trigger_event = ep3_contract_event.0012
}
}
}
}
# Rewards
task_contract_reward = {
success_critical = {
effect = {
save_scope_value_as = { name = extra_reward value = flag:no }
save_scope_as = task_contract
set_variable = {
name = gold_success_critical
value = {
value = task_contract_taker.task_contract_success_gold_gain_full_value
multiply = var:control
}
}
set_variable = {
name = gold_success_standard
value = {
value = task_contract_taker.task_contract_success_gold_gain_full_value
multiply = var:control
multiply = 0.5
}
}
# Standard Rewards.
laamp_rewards_disburse_ordinary_currency_effect = {
GOLD = scope:task_contract.var:gold_success_critical
PRESTIGE = task_contract_success_prestige_gain_half_value
PIETY = 0
PROVISIONS = task_contract_success_provisions_gain_minor_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
}
gain_patron_and_hook_from_council_task_contract_effect = yes
hidden_effect = {
scope:task_contract.task_contract_taker= { return_home = yes }
}
}
}
success_standard = {
effect = {
save_scope_value_as = { name = extra_reward value = flag:no }
save_scope_as = task_contract
set_variable = {
name = gold_success_critical
value = {
value = task_contract_taker.task_contract_success_gold_gain_full_value
multiply = var:control
}
}
set_variable = {
name = gold_success_standard
value = {
value = task_contract_taker.task_contract_success_gold_gain_full_value
multiply = var:control
multiply = 0.5
}
}
# Standard Rewards.
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
}
gain_patron_and_hook_from_council_task_contract_effect = yes
hidden_effect = {
scope:task_contract.task_contract_taker = {
return_home = yes
}
}
}
}
failure_standard = {
positive = no
effect = {
save_scope_value_as = { name = extra_reward value = flag:no }
save_scope_as = task_contract
# 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
}
hidden_effect = {
scope:task_contract.task_contract_taker = {
return_home = yes
}
}
}
}
}
}