N3OW/common/scripted_effects/00_ep1_artifact_effects.txt
2026-07-30 17:56:40 +02:00

672 lines
15 KiB
Text

steal_artifact_in_siege_effect = {
if = {
limit = { NOT = { has_variable = artifact_prevent_transfer } }
# Save scopes for localization
$LOCATION$ = { save_scope_as = SAISE_location }
$ATTACKER$ = { save_scope_as = SAISE_attacker }
$DEFENDER$ = { save_scope_as = SAISE_defender }
$ARTIFACT$ = { save_scope_as = this_artifact }
scope:this_artifact = {
# Suppress generic notifications, as we will send custom ones
set_variable = {
name = suppress_artifact_notifications
value = yes
days = 1
}
if = {
limit = {
NOT = { has_variable = stolen_artifact }
}
set_variable = {
name = stolen_artifact
value = 1
}
}
else = {
change_variable = {
name = stolen_artifact
add = 1
}
}
# Transfer the artifact to its new owner
if = {
limit = {
has_variable = ai_to_ai_destroy_in_sieges
scope:SAISE_attacker = {
is_ai = yes
}
scope:SAISE_defender = {
is_ai = yes
}
}
destroy_artifact = this
}
else = {
set_owner = {
target = scope:SAISE_attacker
history = {
location = scope:SAISE_location
actor = scope:SAISE_defender
recipient = scope:SAISE_attacker
type = taken_in_siege
}
}
scope:SAISE_defender = { add_personal_artifact_claim = scope:this_artifact }
if = {
limit = {
scope:SAISE_attacker = {
has_ep3_dlc_trigger = yes
is_roman_emperor_trigger = yes
culture = { has_cultural_parameter = holds_triumphs }
}
}
scope:SAISE_attacker = {
set_variable = {
name = byz_valid_for_trophy
value = scope:this_artifact
years = 9
}
}
}
# Send notifications to the relevant parties
scope:SAISE_defender = {
send_interface_toast = {
type = msg_artifact_lost
title = artifact_lost_toast
left_icon = scope:this_artifact
right_icon = scope:SAISE_attacker
if = {
limit = { $IS_RAID$ = yes }
custom_tooltip = artifact_lost_in_raid
}
else = {
custom_tooltip = artifact_lost_in_siege
}
}
}
scope:SAISE_attacker = {
send_interface_toast = {
type = msg_artifact_gained
right_icon = scope:this_artifact
}
if = {
limit = {
NOT = { any_claimed_artifact = { this = scope:this_artifact } }
}
scope:this_artifact = {
set_variable = {
name = last_person_to_steal
value = scope:SAISE_attacker
}
}
}
}
}
}
}
}
steal_artifact_in_event_effect = {
if = {
limit = { exists = $VICTIM$.capital_province }
set_local_variable = {
name = location
value = $VICTIM$.capital_province
}
}
else_if = {
limit = { exists = $VICTIM$.location }
set_local_variable = {
name = location
value = $VICTIM$.location
}
}
$ARTIFACT$ = {
save_scope_as = artifact_to_steal
hidden_effect = {
if = {
limit = {
exists = local_var:location
}
set_owner = {
target = $THIEF$
history = {
type = stolen
actor = $VICTIM$ #stolen from
recipient = $THIEF$ #stealer
location = local_var:location
}
}
}
else = { #If no location exists it is "conquered"
set_owner = {
target = $THIEF$
history = {
type = conquest
actor = $THIEF$ #stealer
recipient = $VICTIM$ #stolen from
}
}
}
if = {
limit = {
NOT = { has_variable = stolen_artifact }
}
set_variable = {
name = stolen_artifact
value = 1
}
}
else = {
change_variable = {
name = stolen_artifact
add = 1
}
}
}
}
$VICTIM$ = {
add_personal_artifact_claim = scope:artifact_to_steal
}
}
damage_artifact_in_battle_effect = {
# Save scopes for localization
$OWNER$ = {
save_scope_as = DAIBE_owner
}
$OPPONENT$ = { save_scope_as = DAIBE_opponent }
$LOCATION$ = { save_scope_as = DAIBE_location }
$ARTIFACT$ = {
save_scope_as = DAIBE_artifact
# Suppress generic notifications, as we will send custom ones
set_variable = {
name = suppress_artifact_notifications
value = yes
days = 1
}
set_variable = {
name = DAIBE_damage
value = $DURABILITY_LOSS$
days = 1
}
# Damage the artifact by the specified amount
add_durability = {
value = 0
subtract = var:DAIBE_damage
}
}
# Transformed into an if / else as I found the following note somewhere else:
# NOTE: We must not run ANY script after we destroy an artifact, or we will cause errors
if = {
# If the artifact has no durability left, destroy it now.
limit = { scope:DAIBE_artifact.artifact_durability <= 0 }
destroy_artifact = scope:DAIBE_artifact
}
# Send notifications to the relevant party IF the artifact was not destroyed
else = {
$OWNER$ = {
# Send the toast
send_interface_toast = {
title = artifact_damaged_toast
left_icon = scope:DAIBE_artifact
right_icon = scope:DAIBE_opponent
if = {
limit = {
$IS_DUEL$ = yes
}
custom_tooltip = artifact_damaged_in_duel
}
else = {
custom_tooltip = artifact_damaged_in_siege
}
}
}
}
}
flag_as_trash_artifact = {
set_variable = {
name = ai_to_ai_destroy_in_sieges
value = yes
}
}
flag_as_unwanted_artifact = {
set_variable = {
name = unwanted_artifact
value = yes
}
}
flag_as_cursed_artifact = {
set_variable = {
name = cursed_artifact
value = yes
}
}
#For use with trinket looks / call this effect (set_up_trinket_adjective_effect = yes) in the line before creating the trinket
#Use this in the trinket's name/description in the loc-file [ROOT.Char.Custom('TrinketLookAdjective')] /and/ [ROOT.Char.Custom('TrinketLookAdverbFollowup')]
#Remember to clear the var:trinket_adjective_followup in your after = { ... }
set_up_trinket_adjective_effect = {
random_list = {
50 = {
set_variable = {
name = trinket_adjective_followup
value = flag:adorned
}
}
50 = {
set_variable = {
name = trinket_adjective_followup
value = flag:decorated
}
}
50 = {
set_variable = {
name = trinket_adjective_followup
value = flag:embellished
}
}
50 = {
set_variable = {
name = trinket_adjective_followup
value = flag:ornamented
}
}
}
}
# Grant claims on familial banners
grant_banner_house_claim_effect = {
save_scope_as = familial_banner
hidden_effect = {
if = { # Dynasty banner not owned or claimed by all child house's already
limit = {
exists = var:banner_dynasty
var:banner_dynasty = {
any_dynasty_member = {
this = house.house_head
house = { artifact_house_not_owns_or_claims_trigger = yes } # House not owns or claims already
}
}
}
var:banner_dynasty = {
every_dynasty_member = {
limit = {
this = house.house_head
house = { artifact_house_not_owns_or_claims_trigger = yes } # House not owns or claims already
}
house = { add_house_artifact_claim = scope:familial_banner }
}
}
}
else_if = { # House banner not owned or claimed by creating house already
limit = {
exists = var:banner_house
var:banner_house = { artifact_house_not_owns_or_claims_trigger = yes } # House not owns or claims already
}
var:banner_house = { add_house_artifact_claim = scope:familial_banner }
}
}
}
#Determine what type of artifact a court artifact is, for defacement
determine_artifact_damage_type_effect = {
$ARTIFACT$ = { save_scope_as = artifact_to_determine }
scope:artifact_to_determine = {
random_list = {
10 = {
trigger = {
OR = {
artifact_type = chest
artifact_type = box
artifact_type = cabinet
artifact_type = pedestal
artifact_type = tapestry
artifact_type = animal_hide
artifact_type = animal_hide_big
artifact_type = wall_big
artifact_type = wall_shield
artifact_type = throne
artifact_type = throne_special
artifact_type = book
}
}
set_variable = artifact_burned
}
10 = {
trigger = {
OR = {
artifact_type = sculpture
artifact_type = box
artifact_type = goblet
artifact_type = pedestal
artifact_type = book
artifact_type = elixir
artifact_type = panacea
artifact_type = philosophers_stone
}
}
set_variable = artifact_knocked_over
}
10 = {
trigger = {
OR = {
artifact_type = sculpture
artifact_type = chest
artifact_type = box
artifact_type = cabinet
artifact_type = goblet
artifact_type = pedestal
artifact_type = tapestry #cloth
artifact_type = animal_skull
artifact_type = animal_hide
artifact_type = animal_hide_big
artifact_type = wall_big #shields, banners
artifact_type = wall_small #animal trophy
artifact_type = wall_shield
artifact_type = wall_shield_special #kite shields
artifact_type = throne
artifact_type = throne_special
artifact_type = book
artifact_type = elixir
artifact_type = panacea
artifact_type = philosophers_stone #box
}
}
set_variable = artifact_smeared_food
}
10 = {
trigger = {
OR = {
artifact_type = chest
artifact_type = box
artifact_type = cabinet
artifact_type = pedestal
artifact_type = tapestry
artifact_type = animal_hide
artifact_type = animal_hide_big
artifact_type = wall_big
artifact_type = wall_small
artifact_type = throne
artifact_type = throne_special
artifact_type = book
}
}
set_variable = artifact_spilled_drink
}
10 = {
trigger = {
OR = {
artifact_type = tapestry
artifact_type = animal_hide
artifact_type = animal_hide_big
artifact_type = book
}
}
set_variable = artifact_tear
}
10 = {
trigger = {
OR = {
artifact_type = tapestry
artifact_type = animal_skull
artifact_type = animal_hide
artifact_type = animal_hide_big
artifact_type = wall_big
artifact_type = wall_small
artifact_type = wall_shield
artifact_type = wall_shield_special
}
}
set_variable = artifact_tear_down
}
10 = {
trigger = {
OR = {
artifact_type = chest
artifact_type = box
artifact_type = pedestal
artifact_type = tapestry
artifact_type = animal_hide
artifact_type = animal_hide_big
artifact_type = wall_big
artifact_type = wall_small
artifact_type = wall_shield
artifact_type = wall_shield_special
artifact_type = throne
artifact_type = throne_special
artifact_type = book
}
}
set_variable = artifact_threw_up
}
10 = {
trigger = {
OR = {
artifact_type = sculpture
artifact_type = chest
artifact_type = box
artifact_type = cabinet
artifact_type = goblet
artifact_type = pedestal
artifact_type = tapestry #cloth
artifact_type = animal_skull
artifact_type = animal_hide
artifact_type = animal_hide_big
artifact_type = wall_big #shields, banners
artifact_type = wall_small #animal trophy
artifact_type = wall_shield
artifact_type = wall_shield_special #kite shields
artifact_type = throne
artifact_type = throne_special
artifact_type = book
artifact_type = elixir
artifact_type = panacea
artifact_type = philosophers_stone #box
}
}
set_variable = artifact_unspeakable
}
10 = {
trigger = {
NOR = {
artifact_type = sculpture
artifact_type = chest
artifact_type = box
artifact_type = cabinet
artifact_type = goblet
artifact_type = pedestal
artifact_type = tapestry #cloth
artifact_type = animal_skull
artifact_type = animal_hide
artifact_type = animal_hide_big
artifact_type = wall_big #shields, banners
artifact_type = wall_small #animal trophy
artifact_type = wall_shield
artifact_type = wall_shield_special #kite shields
artifact_type = throne
artifact_type = throne_special
artifact_type = book
artifact_type = elixir
artifact_type = panacea
artifact_type = philosophers_stone #box
}
}
set_variable = artifact_damage_fallback
}
}
}
}
# Destroy Artifact effect
# DESTROYER = Character destroying the artifact
# ARTIFACT = The artifact to destroy
destroy_artifact_aniconist_effect = {
$ARTIFACT$ = {
save_temporary_scope_as = artifact
}
$DESTROYER$ = {
if = {
limit = {
OR = {
$DESTROYER$.faith = { has_doctrine_parameter = destroying_artifacts_is_pious }
$PIETY_BY_DEFAULT$ = yes
}
}
give_destroyed_artifact_piety = yes
}
if = {
limit = {
OR = {
$DESTROYER$.faith = { has_doctrine_parameter = destroying_artifacts_costs_piety }
$PIETY_BY_DEFAULT$ = yes
}
}
add_piety = medium_piety_loss
}
if = {
limit = {
$GIVE_GOLD$ = yes
}
add_gold = {
if = {
limit = {
scope:artifact = { rarity = illustrious }
}
add = {
value = 25
}
}
else_if = {
limit = {
scope:artifact = { rarity = famed }
}
add = {
value = 15
}
}
else_if = {
limit = {
scope:artifact = { rarity = masterwork }
}
add = {
value = 8
}
}
else = {
add = {
value = 4
}
}
# Boost the value up to something meaningful
multiply = {
value = 10
}
# multiply by durability percentage
multiply = {
add = scope:artifact.artifact_durability
divide = scope:artifact.artifact_max_durability
divide = 2
add = 0.5
}
#Nerf it to bits for LAAMPs
if = {
limit = {
$DESTROYER$ = { has_government = landless_adventurer_government }
}
multiply = {
value = 0.1
round = yes
}
}
if = {
limit = {
exists = scope:artifact.var:ai_to_ai_destroy_in_sieges # Trash artifact
}
max = {
value = $DESTROYER$.tiny_gold_value
multiply = 0.5
}
}
min = 1
}
}
destroy_owned_artifact = scope:artifact
}
}
give_destroyed_artifact_piety = {
add_piety = {
# Base value
value = 5
# Add the artifact's quality
if = {
limit = { exists = scope:artifact.var:quality }
add = scope:artifact.var:quality
}
# If none can be found, add its wealth
else_if = {
limit = { exists = scope:artifact.var:wealth }
add = scope:artifact.var:wealth
}
# Artifact has no quality or wealth (typical for court artifacts), add something based on rarity
else_if = {
limit = {
scope:artifact = { rarity = illustrious }
}
add = {
value = 20
}
}
else_if = {
limit = {
scope:artifact = { rarity = famed }
}
add = {
value = 12
}
}
else_if = {
limit = {
scope:artifact = { rarity = masterwork }
}
add = {
value = 8
}
}
else = {
add = {
value = 4
}
}
# Boost the value up to something meaningful
multiply = 20
# Relics are way cooler to burn, double the final value
if = {
limit = {
scope:artifact = { exists = var:relic }
}
multiply = {
value = 2
desc = aniconist_destroying_relic
}
}
}
}