N3OW/common/on_action/army_on_actions.txt

826 lines
20 KiB
Text
Raw Normal View History

2026-02-08 17:09:40 +00:00
# On actions for army events, triggered automatically by the game
# called for armies every 30 days; exact date dependent on army ID
# root is the owner of the army
# scope:army is the army
on_army_monthly = {
events = {
}
effect = {
scope:army ?= {
if = {
limit = {
exists = army_commander
NOT = { has_variable = commander_death_events_pulse_cooldown }
}
set_variable = {
name = commander_death_events_pulse_cooldown
value = yes
days = 365
}
army_commander = {
trigger_event = { on_action = commander_death_events_pulse }
}
}
}
ROOT = {
if = {
limit = {
ROOT = { is_at_war = yes }
NOT = {
has_character_modifier = armies_raised_modifier
}
}
add_character_modifier = {
modifier = armies_raised_modifier
years = 5
}
}
else_if = {
limit = {
ROOT = { NOT = { is_at_war = yes } }
has_character_modifier = armies_raised_modifier
}
remove_character_modifier = armies_raised_modifier
}
else = {
}
}
}
}
# called when a county is (fully) occupied. Does not fire on reoccupation by province owner
# root is the occupant
# scope:county is the county title
# scope:barony is the barony title that got occupied
# scope:previous_controller is the previous controller of the county
# scope:war is the war causing the previous controller and the occupant to be hostile
on_county_occupied = {
effect = {
scope:county = {
if = {
limit = {
holder = {
NOT = { has_perk = enduring_hardships_perk }
}
}
change_county_control = county_control_loss_value
random_list = {
25 = {
change_development_progress_with_overflow = -10
}
25 = {
change_development_progress_with_overflow = -15
}
25 = {
change_development_progress_with_overflow = -20
}
25 = {
change_development_progress_with_overflow = -25
}
}
}
if = { #used by hold_court.6000
limit = {
holder.top_liege = {
is_ai = no
}
}
scope:barony.holder = {
add_character_flag = {
flag = recently_occupied_flag
days = 720
}
}
}
}
# Mongol Devastation
if = {
limit = {
# Check that it's relevant so we don't fire it *all* the time
OR = {
AND = {
exists = global_var:mongol_empire_has_spawned
NOT = { exists = global_var:mongol_story_has_ended }
any_owned_story = {
type = story_mongol_invasion
}
}
any_owned_story = {
type = story_greatest_of_khans
}
}
NOT = { exists = scope:county.var:looted_by_mongols }
}
# Each County should only be devastated once
scope:county = {
set_variable = {
name = looted_by_mongols
value = yes
years = 25
}
}
# Send a message (and gold!) to the Mongol Emperor
send_interface_message = {
type = event_war_good
title = mongols_sieged_county.t
left_icon = scope:previous_controller
right_icon = scope:county
#Herd from nomad counties if nomadic
if = {
limit = {
scope:county = {
any_county_province = {
OR = {
has_holding_type = nomad_holding
has_holding_type = herder_holding
}
}
}
government_has_flag = government_is_nomadic
}
domicile = {
change_herd = miniscule_herd_gain
}
}
else = {
if = {
limit = {
scope:county.development_level >= 1
}
add_gold = {
add = scope:county.development_level
multiply = 5
}
}
}
if = {
limit = {
dread < 150
}
add_dread = 2
}
show_as_tooltip = {
scope:county = {
mongols_devastate_county_effect = yes
}
}
}
save_scope_as = mongol_emperor
# Send a message to the County's owner
scope:county.holder = {
send_interface_message = {
type = event_war_bad
title = mongols_sieged_county.t
left_icon = scope:mongol_emperor
right_icon = scope:county
scope:county = {
mongols_devastate_county_effect = yes
}
}
}
}
# Admin house power bonus for getting influence
if = {
limit = {
house ?= {
OR = {
has_house_power_parameter = occupations_give_bonuses_1
has_house_power_parameter = occupations_give_bonuses_2
has_house_power_parameter = occupations_give_bonuses_3
}
}
}
send_interface_message = {
type = msg_siege_effect
title = tactical_besiegers_house_power
left_icon = root
right_icon = scope:barony
if = {
limit = {
house = { has_house_power_parameter = occupations_give_bonuses_3 }
}
add_gold = occupations_give_bonuses_3_value
change_influence = occupations_give_bonuses_3_value
}
else_if = {
limit = {
house = { has_house_power_parameter = occupations_give_bonuses_2 }
}
add_gold = occupations_give_bonuses_2_value
change_influence = occupations_give_bonuses_2_value
}
else = {
add_gold = occupations_give_bonuses_1_value
change_influence = occupations_give_bonuses_1_value
}
}
}
}
}
# called when a siege completes. Does *not* fire on reoccupation by province order
# root is the occupant
# scope:barony is the barony title that got occupied
# scope:county is the county title for the barony
# scope:previous_controller is the previous controller of the county
# scope:war is the war causing the previous controller and the occupant to be hostile
# occupied_baronies is a list of all baronies that the siege caused the occupier to control (I.E., can include baronies with no fort level)
on_siege_completion = {
events = {
siege.0101 # Notify holders/lieges that the county was lost to siege
siege.0001 # Capture/kill prisoners
siege.0031 # Chance to steal an artifact
faction_demand.1010 #Reinforce populist rebels
faction_demand.1110 #Reinforce peasant rebels
siege.1001 #Someone I care about was immured here...
intrigue_scheming.1804 # I had genuine/fake info about the defenses. Follows up intrigue_scheming.1801 so this won't actually trigger after every siege
}
effect = {
save_scope_as = occupant
scope:barony = {
if = {
limit = { title_province = holder.capital_province }
holder = {
random = {
chance = 50
trigger_event = fp3_decision.0002 #FP3 Event to possibly lose your royal fire
}
}
}
}
# If you have the Sacred Destruction tenet get piety/destroy development
if = {
limit = {
faith = { has_doctrine_parameter = successful_sieges_give_piety }
}
send_interface_toast = {
title = successful_sieges_give_piety_toast
left_icon = root
add_piety = minor_piety_gain
scope:barony.county = { change_development_progress_with_overflow = -2 }
}
}
# We change your legend to reflect this siege
if = {
limit = {
has_legend_chapter_trigger = { CHAPTER = extra_deed }
scope:barony.county.development_level >= good_development_level
NOT = {
promoted_legend ?= {
has_legend_chapter = {
name = extra_deed
localization_key = legend_chapter_extra_deed_recent_siege
}
}
}
}
random = {
chance = 25
send_interface_toast = {
title = legend_chapter_change_toast
left_icon = root
promoted_legend = {
set_legend_chapter = {
name = extra_deed
localization_key = legend_chapter_extra_deed_recent_siege
}
}
}
}
}
# Commander trait leveling
scope:barony.title_province = {
every_army_in_location = {
army_commander ?= {
if = {
limit = {
has_trait = military_engineer
is_commanding_army = yes
location.barony = scope:barony
}
add_trait_xp = {
trait = military_engineer
value = {
value = location.fort_level
divide = 2
min = 1
add = {
value = martial
divide = 20
}
}
}
}
}
army_commander ?= {
if = {
limit = {
has_trait = reaver
is_commanding_army = yes
location.barony = scope:barony
}
add_trait_xp = {
trait = reaver
value = {
value = 0.2
add = {
value = martial
divide = 20
}
}
}
}
}
army_commander ?= {
if = {
limit = {
has_trait = peasant_leader
is_commanding_army = yes
}
add_trait_xp = {
trait = peasant_leader
value = {
value = 0.1
add = {
value = martial
divide = 20
}
}
}
}
}
}
}
#Mandalas be looting other Mandala's capital
if = {
limit = {
has_realm_law_flag = piety_for_sieging_capital_temple_complexes
scope:previous_controller = { has_same_government = root }
scope:barony.title_province = { has_building_with_flag = mandala_capital_building }
}
send_interface_message = {
type = msg_siege_piety
if = {
limit = {
scope:barony.title_province = { has_building_with_flag = final_tier_mandala_capital_building }
}
add_piety = monumental_piety_gain
}
else_if = {
limit = {
scope:barony.title_province = { has_building_with_flag = fourth_tier_mandala_capital_building }
}
add_piety = massive_piety_gain
}
else_if = {
limit = {
scope:barony.title_province = { has_building_with_flag = third_tier_mandala_capital_building }
}
add_piety = major_piety_gain
}
else_if = {
limit = {
scope:barony.title_province = { has_building_with_flag = second_tier_mandala_capital_building }
}
add_piety = medium_piety_gain
}
else = { add_piety = minor_piety_gain }
scope:county = {
if = {
limit = { has_county_modifier = mandala_capital_sacked_modifier }
hidden_effect = { remove_county_modifier = mandala_capital_sacked_modifier }
}
if = {
limit = { has_county_modifier = mandala_capital_restored_modifier }
hidden_effect = { remove_county_modifier = mandala_capital_restored_modifier }
}
add_county_modifier = {
modifier = mandala_capital_sacked_modifier
years = 10
}
}
}
}
}
}
# Called when a siege loots a holding
# root is sieging character
# scope:barony is the barony title that got looted
# scope:county is the county title for the barony
# scope:previous_controller is the previous controller
on_siege_looting = {
events = {
}
effect = {
scope:barony.title_province ?= {
# Adventurer Siege replenish
every_army_in_location = {
limit = {
OR = {
AND = {
root = { is_landless_adventurer = yes }
army_owner = root
}
army_owner = {
is_landless_adventurer = yes
is_at_war = yes
any_war_ally = { this = root }
}
}
}
every_army_maa_regiment = {
limit = {
maa_current_troops_count < maa_max_troops_count
}
change_maa_troops_count = adventurer_siege_replenish_amount
}
}
# Strict Organization
every_army_in_location = {
limit = {
OR = {
AND = {
root = {
is_landless_adventurer = yes
has_perk = strict_organization_perk
}
army_owner = root
}
army_owner = {
is_landless_adventurer = yes
has_perk = strict_organization_perk
is_at_war = yes
any_war_ally = { this = root }
}
}
}
army_owner = {
domicile ?= { change_provisions = adventurer_siege_provisions_amount }
}
}
add_province_modifier = {
modifier = recently_looted_modifier
years = 5
}
}
#Gain some gold on top of the siege loot from the Master of Spoils Camp Officer
if = {
limit = {
employs_court_position = master_of_spoils_camp_officer
}
add_gold = {
value = court_position:master_of_spoils_camp_officer.aptitude:master_of_spoils_camp_officer
add = 1
multiply = 5
}
}
tgp_treasury_raided_effect = yes
}
}
# called for armies whenever they enter a province
# root is the owner of the army
# scope:army is the army
on_army_enter_province = {
events = {
great_holy_war.0060 # Give Crusaders their trait upon reaching the holy land.
ep3_emperor_yearly.3010 # Byzantine emperor sends fireships to defend the strait of Marmara
game_rule.1021 # Figure out whether we should fire a conclusion event during the Conquest.
}
random_events = {
chance_of_no_event = 97
100 = bp2_yearly.4030 # Winter province event
1 = epidemic_events.1120 # Corpse catapult event
}
effect = {
# Commander trait leveling
scope:army.army_commander ?= {
if = {
limit = {
has_trait = logistician
}
add_trait_xp = {
trait = logistician
value = {
value = 0.2
add = {
value = martial
divide = 20
}
}
}
}
if = {
limit = {
has_trait = organizer
}
add_trait_xp = {
trait = organizer
value = {
value = 0.2
add = {
value = martial
divide = 20
}
}
}
}
}
}
}
# Called when a raid action starts
# root is the raid army
# scope:raider is the person owning the raid army
# scope:barony is the barony title that got raided
# scope:county is the county title for the barony
on_raid_action_start = {
events = {
fp1_trade_events.0001 # A fearsome target causes scope:raider to reconsider their intent.
}
effect = { # The target isn't too keen on the raider...
scope:barony.holder = {
if = {
limit = {
has_opinion_modifier = {
target = scope:raider
modifier = raided_me_opinion
}
}
remove_opinion = { # We reapply it so that the counter is reset
target = scope:raider
modifier = raided_me_opinion
}
}
add_opinion = {
target = scope:raider
modifier = raided_me_opinion
}
every_liege_or_above = {
if = {
limit = {
has_opinion_modifier = {
target = scope:raider
modifier = raided_me_opinion
}
}
remove_opinion = { # We reapply it so that the counter is reset
target = scope:raider
modifier = raided_me_opinion
}
}
add_opinion = {
target = scope:raider
modifier = raided_me_opinion
}
}
}
}
random_events = {
100 = fp1_yearly.0692 # FP1 - setup event for one of your knights converting to a reformed faith.
}
}
# Called when a raid action finishes
# root is the raid army
# scope:raider is the person owning the raid army
# scope:barony is the barony title that got raided
# scope:county is the county title for the barony
on_raid_action_completion = {
events = {
raiding.0001 # An independent liege personally raids a county capital.
raiding.0021 # Adjust raider completion tally.
raiding.0022 # Chance to fire viking/raider acquisition event
raiding.0013 # Chance to kidnap prisoners
raiding.0014 # Chance to steal an artifact
bp2_yearly.8031 # Steal a doll
raiding.0031 # Hereward adds XP
raiding.0040 # Raid Intent Effects
}
effect = {
scope:raider = {
send_interface_message = {
type = msg_raid_completed
left_icon = scope:county.holder
right_icon = scope:barony
}
if = {
limit = {
scope:county = {
any_county_province = { has_special_building = yes }
}
NOT = { has_character_flag = raider_legend }
has_dlc_feature = legends
NOT = { has_game_rule = historical_legends_only }
}
random = {
chance = legend_seed_chance_low
add_character_flag = raider_legend
create_legend_seed = {
type = heroic
quality = famed
chronicle = legendary_battle
properties = {
winner = scope:raider
loser = scope:county.holder
location = scope:barony.title_province
}
}
}
}
house ?= {
if = {
limit = {
exists = scope:county.holder.house
}
change_house_relation_effect = {
HOUSE = scope:county.holder.house
VALUE = house_relation_damage_minor_value
REASON = raid
CHAR = scope:raider
TARGET_CHAR = scope:county.holder
TITLE = scope:dummy_gender
}
}
}
}
scope:barony.title_province = {
add_province_modifier = {
modifier = recently_looted_modifier
years = 5
}
county = {
if = {
limit = {
holder = {
NOT = { has_perk = enduring_hardships_perk }
}
}
change_county_control = raid_county_control_loss_value
random_list = {
25 = {
change_development_progress_with_overflow = -2
}
25 = {
change_development_progress_with_overflow = -3
}
25 = {
change_development_progress_with_overflow = -4
}
25 = {
change_development_progress_with_overflow = -5
}
}
}
# Silk Road
tgp_silk_road_raid_effect = yes
}
}
scope:county.holder = { add_to_list = raid_targets }
scope:county.holder.liege ?= { add_to_list = raid_targets }
scope:county.holder.liege.liege ?= { add_to_list = raid_targets }
scope:county.holder.liege.liege.liege ?= { add_to_list = raid_targets }
every_in_list = {
list = raid_targets
send_interface_message = {
type = msg_raid_lost
left_icon = scope:raider
right_icon = scope:barony
}
}
## Struggles
if = {
limit = {
scope:raider = {
any_character_struggle = {
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_raided_involved
CHAR = scope:county.holder
}
}
}
scope:county.holder = { # Theoretical edge case where X is from one struggle, Y from another one and they trigger catalysts. But unlikely to be an issue.
any_character_struggle = {
involvement = involved
phase_has_catalyst = catalyst_raided_involved
}
}
}
scope:raider = {
every_character_struggle = {
limit = {
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_raided_involved
CHAR = scope:county.holder
}
}
activate_struggle_catalyst = {
catalyst = catalyst_raided_involved
character = scope:raider
}
log_debug_variable_for_persian_struggle_effect = { VAR = concession_catalyst_raided_involved }
}
}
}
# Commander trait leveling
root.army_commander ?= {
if = {
limit = {
has_trait = reaver
is_commanding_army = yes
}
add_trait_xp = {
trait = reaver
value = {
value = 0.5
add = {
value = martial
divide = 10
}
}
}
}
}
tgp_treasury_raided_effect = yes
}
}
# Called every 7 days during a raid action (except if the raid is stalled due to combat). First call might be anywhere from 1 to 7 days after the raid action begins
# root is the raid army
# scope:raider is the person owning the raid army
# scope:barony is the barony title that got raided
# scope:county is the county title for the barony
on_raid_action_weekly = {
}
# Called when a raider returns to their own territory and deposits loot
# Use root.raid_loot to see how much was deposited
# root is the raid army
# scope:raider is the person owning the raid army
# scope:raid_loot is the loot that you gained from the raid
on_raid_loot_delivered = {
effect = {
# If the ruler led their own army, flag that for events.
if = {
limit = { army_commander = scope:raider }
scope:raider = {
add_character_flag = {
flag = has_recently_performed_raid
years = 3
}
}
}
}
events = {
}
random_events = {
chance_to_happen = 25
200 = 0
100 = fp1_yearly.0622 # FP1 - setup event for a child demanding some of your loot.
100 = fp1_yearly.0632 # FP1 - setup event for noticing a cynical knight refuse to sacrifice.
}
}
# Called when a raid army is defeated in battle and gets its loot (if any) stolen
# Use root.raid_loot to see how they're carrying
# root is the raid army
# scope:raider is the person owning the raid army
# scope:receiver is the person getting the raid loot
on_defeat_raid_army = {
events = {
raiding.0012 # Defending army take raider loot notifications.
}
}
# Called when a raid intent is invalidated
on_raid_intent_invalidated = {
effect = {
scope:raider = {
send_interface_message = {
type = msg_raid_intent_invalidated
left_icon = scope:raider
localization_values = {
raiding_army = root
}
}
}
}
}