CK3 DatabaseCrusader Kings III · 1.20.1.2 “Crozier” · unofficial
Silk & Silverout Tue, Nov 17What's free, what needs the DLC, price →

Interaction · Friendly actions

Gift Artifact

No costThe AI weighs it

Give an Artifact to the recipient to increase their opinion of you

What you need

You

To send it

  • Is not at war with the target
  • Also needed: not imprisoned

To see it in the menu

  • has_any_unequipped_artifact = yes
  • If played by the AI:
    • One of these

      • All of these

      • or

        Any character artifact › var:banner_dynasty.dynast › You:
        • None of these

          • One of these

            • has_any_mild_bad_relationship_with_character_trigger = { CHARACTER = scope:recipient_temp }
            • or

              has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = scope:recipient_temp }

Which artifact you can pick

  • The target: Is not equipped
  • Any character artifact:
  • If

    • Your activity:
      • activity_host = scope:puppet_or_actor
      • has_activity_type = activity_coronation

    Then

    • The target:
      • NOT = { artifact_slot_type = helmet }
      • NOT = { artifact_slot_type = regalia }
  • The target:
    • has_none_of_variables = { … }
    • If

      • None of these

        • The character you target:
          • has_artifact_claim = prev

      Then

      • If has “banner dynasty” (a variable the game's script sets):
        • scope:recipient.dynasty ?= var:banner_dynasty
        • artifact_owner = { … }
      • If has “banner house” (a variable the game's script sets):
        • scope:recipient.house ?= var:banner_house
        • artifact_owner = { … }
      • If

        • is_holy_relic_for = artifact_owner.faith

        Then

        • scope:recipient.faith = artifact_owner.faith
      • If has “relic religion” (a variable the game's script sets):
        • One of these

          • artifact_owner.religion != var:relic_religion
          • or

            scope:recipient.religion = var:relic_religion
      • If

        • var:artifact_succession_title: Title already created

        Then

        • One of these

          • var:artifact_succession_title.holder = scope:recipient
          • or

            var:artifact_succession_title.holder != artifact_owner

Gift Artifact is a friendly character interaction in Crusader Kings III. You need: Is not at war with the target and Is not imprisoned. The AI weighs it. Reasons the AI weighs include Artifacts are rare and precious (+100), This artifact is useless to the recipient (-80), This artifact is not relevant to the recipient (-40) and 2 more. Patch 1.20.1.2, from game/common/character_interactions/00_artifact_interactions.txt.

for a guide, post or blog
Quick answers (2)
What are the requirements for Gift Artifact in CK3?
You: Is not at war with the target and Is not imprisoned. (patch 1.20.1.2)
How do I get the AI to accept Gift Artifact?
The AI weighs it. Its reasons: Artifacts are rare and precious +100, This artifact is useless to the recipient -80, This artifact is not relevant to the recipient -40, This is the recipient's Dynasty Banner +100, This banner has no connection to the recipient -200, Struggle agenda and Wants to increase House Unity.

Will they accept?

The AI adds these up and accepts above zero. Reasons in italics are the script's, with no label in the game.

ReasonAmount
Base0
Artifacts are rare and precious+100
This artifact is useless to the recipient
when
  • NOT = { can_equip_artifact = scope:target }
-80
This artifact is not relevant to the recipient
when
  • NOT = { can_benefit_from_artifact = scope:target }
-40
This is the recipient's Dynasty Banner
when
  • scope:recipient = scope:target.var:banner_dynasty.dynast
+100
This banner has no connection to the recipient
when
  • One of these

    • exists = scope:target.var:banner_dynasty
    • or

      exists = scope:target.var:banner_house
  • If

    a check the game hides

    Then

    • scope:target.var:banner_dynasty != scope:recipient.dynasty

    Otherwise

    • scope:target.var:banner_house != scope:recipient.house
-200
Struggle agenda
when
  • The character you target:
varies
Wants to increase House Unity
when
varies
Acceptance (ai_accept) (80 lines of game script)
base = 0
modifier = {
	add = 100
	desc = ARTIFACT_REASON
}
modifier = {
	add = -80
	NOT = {
		can_equip_artifact = scope:target
	}
	desc = ARTIFACT_NOT_EQUIPPABLE_REASON
}
modifier = {
	add = -40
	NOT = {
		can_benefit_from_artifact = scope:target
	}
	desc = ARTIFACT_NOT_BENEFIT_REASON
}
modifier = {
	add = 100
	exists = scope:target.var:banner_dynasty
	exists = scope:recipient.dynasty
	scope:recipient = scope:target.var:banner_dynasty.dynast
	desc = ARTIFACT_DYNASTY_BANNER_REASON
}
modifier = {
	add = -200
	OR = {
		exists = scope:target.var:banner_dynasty
		exists = scope:target.var:banner_house
	}
	exists = scope:recipient.house
	trigger_if = {
		limit = {
			exists = scope:target.var:banner_dynasty
		}
		scope:target.var:banner_dynasty != scope:recipient.dynasty
	}
	trigger_else = {
		scope:target.var:banner_house != scope:recipient.house
	}
	desc = ARTIFACT_USELESS_BANNER_REASON
}
modifier = {
	desc = AI_STRUGGLE_INTENT
	scope:recipient = {
		top_liege = this
		any_character_struggle = {
			involvement = involved
		}
	}
	add = {
		value = 0
		if = {
			limit = {
				scope:recipient = {
					any_character_struggle = {
						phase_has_catalyst = catalyst_gift_independent_ruler
					}
					has_character_flag = agenda_towards_escalation
				}
			}
			add = -100
		}
		else_if = {
			limit = {
				scope:recipient = {
					any_character_struggle = {
						phase_has_catalyst = catalyst_gift_independent_ruler
					}
				}
			}
			add = 200
		}
	}
}
evaluate_action_increasing_house_unity = {
	VALUE = 100
}

As written in game/common/character_interactions/00_artifact_interactions.txt.

What happens

If they accept

  • If

    • The character you target: Has the opinion “Received Artifact” of you

    Then

    • You have already sent a Gift to …, sending another one will override the existing Opinion modifier!
  • The character you target:
    • If

      • Not all of these

        • Has you as friend
        • Has you as lover
        • Has you as soulmate
        • Has you as best friend

      Then

      • If

        • Not all of these

          • Their culture is the same as that of puppet or actor
          • Their faith is the same as that of puppet or actor
        • You › Any character struggle:
          • involvement = involved
        • Any character struggle:
          • involvement = involved
          • has_struggle_phase_parameter = struggle_gifts_involved_diff_faith_culture_leads_to_friendship

        Then

        • If

          • Has the target char as potential friend
          • Does not have the target char as friend
          • Does not have the target char as best friend
          • Does not have the target char as rival
          • Does not have the target char as nemesis

          Then

          • If a check the game hides passes: the same again (1 line)
            Else if a check the game hides passes: the same again (1 line)
            Else if a check the game hides passes: the same again (1 line)

            Otherwise

          • If

            • has_activity_intent = befriend_attendee_intent
            • intent_target ?= scope:target_char
            • intent_target.involved_activity ?= this.involved_activity

            Then

            • complete_activity_intent = yes

          Otherwise

          • If

            • can_set_relation_potential_friend_trigger = { CHARACTER = scope:target_char }
            • If

              • Is played by the AI
              • The target char: Is played by the AI

              Then

              • The target char: Opinion of prev at least -25

              Otherwise

              • always = yes

            Then

            • set_relation_potential_friend = scope:target_char
          • If

            • scope:friend_opinion != 0

            Then

            • If

              • The target char: Is played by the AI

              Then

              • The target char gains the opinion “Friendly” of them
            • Opinion: Friendly
  • The character you target:
    • If

      • The target:
        • can_be_claimed_by = scope:recipient

      Then

      • If any personal claimed artifact:
        • remove_personal_artifact_claim = scope:target
      • Otherwise › Their house:
        • remove_house_artifact_claim = scope:target
  • The target:
    • set_owner = scope:recipient
  • If

    • The target:
      • is_unique = yes

    Then

    • If

      • You: Government is Clan
      • The character you target: Government is Clan
      • Your house is the target’s
      • If

        • You are not the target

        Then

        • You are not the target

      Then

      • Your house:
        • add_unity_value = { … }

      Else if

      • No
      • You: Government is Clan
      • Your house: Has you as house head
      • One of these

        • All of these

          • exists = scope:recipient.house
          • Your house is not the target’s
        • or

          The character you target: Is Lowborn

      Then

      • Your house:
        • add_unity_value = { … }
    • Stress and fulfillment impact: by trait: Greedy +80, Generous -65

    Else if

    • The target:
      • rarity = masterwork

    Then

    • If

      • You: Government is Clan
      • The character you target: Government is Clan
      • Your house is the target’s
      • If all of these hold:
        • … (more in the script below)
    • … (more in the script below)
  • … (more in the script below)

• the game's own tooltip text · ◦ our reading of the script line · code the script where neither exists

Who can use it and sees it (is_available, is_shown) (30 lines of game script)
is_available = has_any_unequipped_artifact = yes
trigger_if = {
	limit = {
		is_ai = yes
	}
	OR = {
		AND = {
			ai_greed <= high_positive_ai_value
			is_adult = yes
			NOT = {
				has_trait = greedy
			}
		}
		any_character_artifact = {
			var:banner_dynasty.dynast ?= {
				save_temporary_scope_as = recipient_temp
				root = {
					NOT = {
						has_any_bad_relationship_with_character_trigger = {
							CHARACTER = scope:recipient_temp
						}
					}
				}
			}
		}
	}
}
is_shown = scope:puppet_or_actor ?= {
	this != scope:recipient
}

As written in game/common/character_interactions/00_artifact_interactions.txt.

Can be sent when (is_valid…) (16 lines of game script)
scope:puppet_or_actor = {
	NOT = {
		is_at_war_with = scope:recipient
	}
	is_imprisoned = no
}
trigger_if = {
	limit = {
		exists = scope:target.var:banner_dynasty
		exists = scope:recipient.dynasty
	}
	custom_description = {
		text = gift_artifact_dynasty_banner_head_tt
		scope:recipient = scope:target.var:banner_dynasty.dynast
	}
}

As written in game/common/character_interactions/00_artifact_interactions.txt.

Effects (on_send, on_accept, on_decline) (228 lines of game script)
on_accept = if = {
	limit = {
		scope:recipient = {
			has_opinion_modifier = {
				target = scope:puppet_or_actor
				modifier = gift_artifact_opinion
			}
		}
	}
	custom_tooltip = ALREADY_SENT_GIFT_WARNING
}
if = {
	limit = {
		scope:puppet_or_actor = {
			any_character_struggle = {
				involvement = involved
				activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
					CATALYST = catalyst_gift_independent_ruler
					CHAR = scope:recipient
				}
			}
		}
	}
	hidden_effect = {
		scope:puppet_or_actor = {
			every_character_struggle = {
				involvement = involved
				activate_struggle_catalyst = {
					catalyst = catalyst_gift_independent_ruler
					character = scope:puppet_or_actor
				}
			}
		}
	}
}
else_if = {
	limit = {
		fp3_struggle_involves_one_supporter_and_one_detractor = {
			FIRST = scope:puppet_or_actor
			SECOND = scope:recipient
		}
		scope:puppet_or_actor = {
			any_character_struggle = {
				activate_struggle_catalyst_secondary_character_involvement_either_trigger = {
					CATALYST = catalyst_gift_supporter_detractor_ruler
					CHAR = scope:recipient
				}
			}
		}
	}
	hidden_effect = {
		scope:puppet_or_actor = {
			every_character_struggle = {
				limit = {
					activate_struggle_catalyst_secondary_character_involvement_either_trigger = {
						CATALYST = catalyst_gift_supporter_detractor_ruler
						CHAR = scope:recipient
					}
				}
				activate_struggle_catalyst = {
					catalyst = catalyst_gift_supporter_detractor_ruler
					character = scope:puppet_or_actor
				}
				log_debug_variable_for_persian_struggle_effect = {
					VAR = concession_catalyst_gift_supporter_detractor_ruler
				}
			}
		}
	}
}
scope:target = {
	set_variable = {
		name = suppress_artifact_notifications
		value = yes
		days = 1
	}
	set_variable = {
		name = gifted_artifact
		value = yes
		days = 9125
	}
}
scope:recipient = {
	if = {
		limit = {
			NAND = {
				has_relation_friend = scope:puppet_or_actor
				has_relation_lover = scope:puppet_or_actor
				has_relation_soulmate = scope:puppet_or_actor
				has_relation_best_friend = scope:puppet_or_actor
			}
		}
		gifting_leads_towards_friendship_effect = yes
	}
}
scope:puppet_or_actor = {
	send_interface_toast = {
		type = event_toast_effect_neutral
		title = gift_artifact_interaction_notification
		left_icon = scope:recipient
		right_icon = scope:target
		scope:recipient = {
			if = {
				limit = {
					scope:target = {
						can_be_claimed_by = scope:recipient
					}
				}
				if = {
					limit = {
						any_personal_claimed_artifact = {
							this = scope:target
						}
					}
					show_as_tooltip = {
						remove_personal_artifact_claim = scope:target
					}
				}
				else = {
					show_as_tooltip = {
						house = {
							remove_house_artifact_claim = scope:target
						}
					}
				}
			}
		}
		scope:target = {
			set_owner = scope:recipient
		}
		if = {
			limit = {
				scope:target = {
					is_unique = yes
				}
			}
			add_clan_unity_interaction_effect = {
				CHARACTER = scope:puppet_or_actor
				TARGET = scope:recipient
				VALUE = medium_unity_gain
				DESC = clan_unity_given_artifact.desc
				REVERSE_NON_HOUSE_TARGET = no
			}
			stress_and_fulfillment_impact = {
				greedy = major_stress_impact_gain
				generous = major_stress_impact_loss
			}
		}
		else_if = {
			limit = {
				scope:target = {
					rarity = masterwork
				}
			}
			add_clan_unity_interaction_effect = {
				CHARACTER = scope:puppet_or_actor
				TARGET = scope:recipient
				VALUE = minor_unity_gain
				DESC = clan_unity_given_artifact.desc
				REVERSE_NON_HOUSE_TARGET = no
			}
			stress_and_fulfillment_impact = {
				greedy = minor_stress_impact_gain
				generous = minor_stress_impact_loss
			}
		}
		else_if = {
			limit = {
				scope:target = {
					rarity = famed
				}
			}
			add_clan_unity_interaction_effect = {
				CHARACTER = scope:puppet_or_actor
				TARGET = scope:recipient
				VALUE = minor_unity_gain
				DESC = clan_unity_given_artifact.desc
				REVERSE_NON_HOUSE_TARGET = no
			}
			stress_and_fulfillment_impact = {
				greedy = medium_stress_impact_gain
				generous = medium_stress_impact_loss
			}
		}
		else_if = {
			limit = {
				scope:target = {
					rarity = illustrious
				}
			}
			add_clan_unity_interaction_effect = {
				CHARACTER = scope:puppet_or_actor
				TARGET = scope:recipient
				VALUE = minor_unity_gain
				DESC = clan_unity_given_artifact.desc
				REVERSE_NON_HOUSE_TARGET = no
			}
			stress_and_fulfillment_impact = {
				greedy = major_stress_impact_gain
				generous = major_stress_impact_loss
			}
		}
		if = {
			limit = {
				scope:recipient = {
					is_ai = yes
				}
			}
			reverse_add_opinion = {
				target = scope:recipient
				modifier = gift_artifact_opinion
				opinion = gift_artifact_opinion
			}
		}
		if = {
			limit = {
				scope:puppet_or_actor = {
					rite = {
						rite_has_parameter = piety_from_gifts_active
					}
				}
			}
			scope:puppet_or_actor = {
				if = {
					limit = {
						scope:target = {
							r
# … (cut here; the rest is in the file)

As written in game/common/character_interactions/00_artifact_interactions.txt.

Category
Friendly actions
In the menu
under More…
ID
gift_artifact_interaction

Source: game/common/character_interactions/00_artifact_interactions.txt and the English localisation, Crusader Kings III 1.20.1.2. “You” is the character who sends it (scope:actor, or a puppet acting for you); “the character you target” is the recipient.

Spotted a mistake on this page?