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

Offer Ward

No costAccepted automatically in some cases; otherwise the AI weighs it

Offer the recipient a Ward, making them, or someone in their Court, the Guardian of the chosen child

What you need

You

To send it

  • None of these

    • You: Is at war with the target
  • If a check the game hides passes: the same again (4 lines)
    • The character you send:
      • Is not imprisoned
      • … is traveling to become a Ward
      • … is traveling to become a Hostage
      • If

        a check the game hides

        Then

        • var:ward_waiting_for_guardian: … is traveling to become a Guardian
  • If a check the game hides passes: the same again (4 lines)
    • The other character:
      • Is not imprisoned
      • … is traveling to become a Guardian
      • … is traveling to become a Hostage
      • If

        a check the game hides

        Then

        • var:guardian_waiting_for_ward: … is traveling to become a Ward
  • If

    Then

To see it in the menu

  • If played by the AI:
    • Any courtier:
      • Is a child
      • Is a child of you
      • num_of_relation_guardian = 0
      • Is available (not imprisoned, not incapable)
    • Any vassal:
      • primary_title.tier >= tier_county
      • Opinion of them at most -25
  • If

    a check the game hides

    Then

    • The other character:
      • Is an Adult
      • Is not Leasing holdings from their Liege
      • Is not the target’s consort
  • If

    Then

    • The character you target: Is a courtier of you

The character you target

To send it

  • Also needed: not imprisoned

To see it in the menu

  • Is a ruler
  • One of these

    • Cannot play landless rulers without having an Estate
    • or

      If

      • One of these

        • Is landed
        • or

          Government is a Theocratic-type Government

      Then

    • or

      All of these

      • Their liege:
        • All of these

          • Holds China
          • Government is Celestial
          • Their government has the government uses ministry budget flag
      • One of these

    • or

      Has “laamp transition” (a variable the game's script sets)

Which character you can pick

  • Is available (not in an army, not imprisoned, not incapable)
  • Has none of the traits: Consumption, Typhus, Bubonic Plague, Smallpox, Measles, Bloody Flux
  • You are currently busy …
  • You are already planning another Activity
  • You are currently busy in a Mandala succession
  • Already under negotiation to become someone's Ward
  • Already under negotiation to become someone's Guardian
  • … is traveling to become a Hostage

Offer Ward is a friendly character interaction in Crusader Kings III. The character you target needs: Is not imprisoned. Accepted automatically in some cases; otherwise the AI weighs it. Reasons the AI weighs include Your own Child (+200), Educating you (+200), Your Courtier's Child (+200) and 17 more. Patch 1.20.1.2, from game/common/character_interactions/00_education_interactions.txt.

for a guide, post or blog
Quick answers (2)
What are the requirements for Offer Ward in CK3?
The character you target: Is not imprisoned. (patch 1.20.1.2)
How do I get the AI to accept Offer Ward?
Accepted automatically in some cases; otherwise the AI weighs it. Its reasons: Your own Child +200, Educating you +200, Your Courtier's Child +200, Weak Hook used +100, You … their Liege +50, Their Child +100, Their Child +100, … Opinion of …, Not of the same Culture -10, Not of the same Culture -20, Your Tolerance Towards my Faith, Guardian's Diplomacy Skill, Guardian's Martial Skill, Guardian's Stewardship Skill, Guardian's Intrigue Skill, Guardian's Learning Skill, Guardian's Diplomacy Skill, Guardian's Martial Skill, Guardian's Stewardship Skill, Guardian's Intrigue Skill, Guardian's Learning Skill, Rank Difference +20, Rank Difference +30, Rank Difference +40, Rank Difference +50, Rank Difference +60, Rank Difference -20, Rank Difference -30, Rank Difference -40, Rank Difference -50, Rank Difference -60, Intimidated by you, Terrified of you, Intimidated by you, Terrified of you, Responsibility as Regent +50 and Wants to increase House Unity.

Will they accept?

Accepted automatically when:

  • They use their Hook on …

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

ReasonAmount
Base0
Your own Child
when
  • The character you send:
    • Is a child
    • Is a child of you
+200
Educating you
when
  • The character you send is you
+200
Your Courtier's Child+200
Weak Hook used
when
  • The option “education hook” is chosen
  • Does not have a Strong Hook on the target
+100
You … their Liege
when
  • The character you target: Is a vassal (or below) of you
+50
Their Child
when
  • The character you send:
    • Is a child of the target
    • Is a child
+100
Their Child
when
  • The character you send:
    • Is a child
    • Is a child of the other character
+100
… Opinion of …varies
Not of the same Culture
when
  • The character you send:
    • Their culture:
      • has_same_culture_heritage = scope:recipient.culture
    • NOT = { has_same_culture_as = scope:recipient }
-10
Not of the same Culture
when
  • The character you send:
    • None of these

      • Their culture:
        • has_same_culture_heritage = scope:recipient.culture
-20
Your Tolerance Towards my Faith
when
  • The target’s faith is not your
varies
Guardian's Diplomacy Skill
when
  • step = 4
  • offset = -2
  • max = 0
  • The other character: Diplomacy at least 10
diplomacy
Guardian's Martial Skill
when
  • step = 4
  • offset = -2
  • max = 0
  • The other character: Martial at least 10
martial
Guardian's Stewardship Skill
when
  • step = 4
  • offset = -2
  • max = 0
  • The other character: Stewardship at least 10
stewardship
Guardian's Intrigue Skill
when
  • step = 4
  • offset = -2
  • max = 0
  • The other character: Intrigue at least 10
intrigue
Guardian's Learning Skill
when
  • step = 4
  • offset = -2
  • max = 0
  • The other character: Learning at least 10
learning
Guardian's Diplomacy Skill
when
  • You are the character you send
  • You: Diplomacy at least 11
  • step = 4
  • offset = -5
  • min = 0
diplomacy
Guardian's Martial Skill
when
  • You are the character you send
  • You: Martial at least 11
  • step = 4
  • offset = -5
  • min = 0
martial
Guardian's Stewardship Skill
when
  • You are the character you send
  • You: Stewardship at least 11
  • step = 4
  • offset = -5
  • min = 0
stewardship
Guardian's Intrigue Skill
when
  • You are the character you send
  • You: Intrigue at least 11
  • step = 4
  • offset = -5
  • min = 0
intrigue
Guardian's Learning Skill
when
  • You are the character you send
  • You: Learning at least 11
  • step = 4
  • offset = -5
  • min = 0
learning
Rank Difference
when
  • tier_difference = { target = scope:recipient value = 1 }
+20
Rank Difference
when
  • tier_difference = { target = scope:recipient value = 2 }
+30
Rank Difference
when
  • tier_difference = { target = scope:recipient value = 3 }
+40
Rank Difference
when
  • tier_difference = { target = scope:recipient value = 4 }
+50
Rank Difference
when
  • tier_difference = { target = scope:recipient value = 5 }
+60
Rank Difference
when
  • tier_difference = { target = scope:recipient value = -1 }
-20
Rank Difference
when
  • tier_difference = { target = scope:recipient value = -2 }
-30
Rank Difference
when
  • tier_difference = { target = scope:recipient value = -3 }
-40
Rank Difference
when
  • tier_difference = { target = scope:recipient value = -4 }
-50
Rank Difference
when
  • tier_difference = { target = scope:recipient value = -5 }
-60
Intimidated by you
when
  • The character you target:
    • Is a vassal (or below) of you
    • has_dread_level_towards = { target = scope:puppet_or_actor level = 1 }
intimidated_reason_value
Terrified of you
when
  • The character you target:
    • Is a vassal (or below) of you
    • has_dread_level_towards = { target = scope:puppet_or_actor level = 2 }
cowed_reason_value
Intimidated by you
when
  • The character you target:
    • Is not a vassal (or below) of you
    • has_dread_level_towards = { target = scope:puppet_or_actor level = 1 }
intimidated_external_reason_value
Terrified of you
when
  • The character you target:
    • Is not a vassal (or below) of you
    • has_dread_level_towards = { target = scope:puppet_or_actor level = 2 }
cowed_external_reason_value
Responsibility as Regent
when
  • root.diarch ?= scope:recipient
+50
Wants to increase House Unity
when
varies
Acceptance (ai_accept) (277 lines of game script)
base = 0
modifier = {
	add = 200
	scope:secondary_actor = {
		is_adult = no
		is_child_of = scope:puppet_or_actor
	}
	desc = AI_YOUR_OWN_CHILD
}
modifier = {
	add = 200
	scope:secondary_actor = scope:puppet_or_actor
	desc = AI_EDUCATE_YOU
}
modifier = {
	add = 200
	scope:secondary_actor = {
		is_adult = no
		NOT = {
			is_child_of = scope:puppet_or_actor
		}
		is_courtier_of = scope:puppet_or_actor
	}
	scope:secondary_recipient ?= {
		OR = {
			is_of_major_or_minor_interest_trigger = {
				CHARACTER = scope:puppet_or_actor
			}
			is_of_major_or_minor_interest_trigger = {
				CHARACTER = scope:secondary_actor
			}
			highest_held_title_tier <= scope:puppet_or_actor.highest_held_title_tier
		}
	}
	desc = AI_YOUR_COURTIER_CHILD
}
modifier = {
	scope:education_hook = yes
	add = 100
	scope:puppet_or_actor = {
		NOT = {
			has_strong_hook = scope:recipient
		}
	}
	desc = SCHEME_WEAK_HOOK_USED
}
modifier = {
	add = 50
	scope:recipient = {
		target_is_liege_or_above = scope:puppet_or_actor
	}
	desc = EDUCATE_CHILD_ACTOR_IS_MY_LIEGE
}
modifier = {
	add = 100
	scope:secondary_actor = {
		is_child_of = scope:recipient
		is_adult = no
	}
	desc = AI_MY_CHILD
}
modifier = {
	add = 100
	exists = scope:secondary_recipient
	scope:secondary_actor = {
		is_adult = no
		is_child_of = scope:secondary_recipient
	}
	desc = AI_MY_CHILD
}
opinion_modifier = {
	opinion_target = scope:puppet_or_actor
	who = scope:recipient
	multiplier = 0.5
	desc = AI_OPINION_REASON
}
modifier = {
	add = -10
	trigger = {
		scope:secondary_actor = {
			culture = {
				has_same_culture_heritage = scope:recipient.culture
			}
			NOT = {
				has_same_culture_as = scope:recipient
			}
		}
	}
	desc = AI_NOT_CULTURE
}
modifier = {
	add = -20
	trigger = {
		scope:secondary_actor = {
			NOT = {
				culture = {
					has_same_culture_heritage = scope:recipient.culture
				}
			}
		}
	}
	desc = AI_NOT_CULTURE
}
modifier = {
	add = {
		value = -5
		if = {
			limit = {
				scope:recipient.faith = {
					faith_hostility_level = {
						target = scope:puppet_or_actor.faith
						value >= faith_hostile_level
					}
				}
			}
			subtract = 5
		}
		if = {
			limit = {
				scope:recipient.faith = {
					faith_hostility_level = {
						target = scope:puppet_or_actor.faith
						value >= faith_evil_level
					}
				}
			}
			subtract = 10
		}
	}
	trigger = {
		scope:recipient.faith != scope:puppet_or_actor.faith
	}
	desc = AI_RELIGION
}
compare_modifier = {
	trigger = {
		scope:secondary_recipient ?= {
			diplomacy >= 10
		}
		scope:puppet_or_actor != scope:secondary_actor
	}
	target = scope:secondary_recipient
	value = diplomacy
	step = 4
	multiplier = -0.5
	offset = -2
	max = 0
	desc = AI_GUARDIAN_SKILL_DIPLOMACY
}
compare_modifier = {
	trigger = {
		scope:secondary_recipient ?= {
			martial >= 10
		}
		scope:puppet_or_actor != scope:secondary_actor
	}
	target = scope:secondary_recipient
	value = martial
	step = 4
	multiplier = -0.5
	offset = -2
	max = 0
	desc = AI_GUARDIAN_SKILL_MARTIAL
}
compare_modifier = {
	trigger = {
		scope:secondary_recipient ?= {
			stewardship >= 10
		}
		scope:puppet_or_actor != scope:secondary_actor
	}
	target = scope:secondary_recipient
	value = stewardship
	step = 4
	multiplier = -0.5
	offset = -2
	max = 0
	desc = AI_GUARDIAN_SKILL_STEWARDSHIP
}
compare_modifier = {
	trigger = {
		scope:secondary_recipient ?= {
			intrigue >= 10
		}
		scope:puppet_or_actor != scope:secondary_actor
	}
	target = scope:secondary_recipient
	value = intrigue
	step = 4
	multiplier = -0.5
	offset = -2
	max = 0
	desc = AI_GUARDIAN_SKILL_INTRIGUE
}
compare_modifier = {
	trigger = {
		scope:secondary_recipient ?= {
			learning >= 10
		}
		scope:puppet_or_actor != scope:secondary_actor
	}
	target = scope:secondary_recipient
	value = learning
	step = 4
	multiplier = -0.5
	offset = -2
	max = 0
	desc = AI_GUARDIAN_SKILL_LEARNING
}
compare_modifier = {
	trigger = {
		AND = {
			scope:puppet_or_actor = scope:secondary_actor
			scope:puppet_or_actor = {
				diplomacy >= 11
			}
		}
	}
	target = scope:puppet_or_actor
	value = diplomacy
	step = 4
	multiplier = 0.75
	offset = -5
	min = 0
	desc = AI_GUARDIAN_SKILL_DIPLOMACY
}
compare_modifier = {
	trigger = {
		AND = {
			scope:puppet_or_actor = scope:secondary_actor
			scope:puppet_or_actor = {
				martial >= 11
			}
		}
	}
	target = scope:puppet_or_actor
	value = martial
	step = 4
	multiplier = 0.75
	offset = -5
	min = 0
	desc = AI_GUARDIAN_SKILL_MARTIAL
}
compare_modifier = {
	trigger = {
		AND = {
			scope:puppet_or_actor = scope:secondary_actor
			scope:puppet_or_actor = {
				stewardship >= 11
			}
		}
	}
	target = scope:puppet_or_actor
	value = stewardship
	step = 4
	multiplier = 0.75
	offset = -5
	min = 0
	desc = AI_GUARDIAN_SKILL_STEWARDSHIP
}
compare_modifier = {
	trigger = {
		AND = {
			scope:puppet_or_actor = scope:secondary_actor
			scope:puppet_or_actor = {
				intrigue >= 11
			}
		}
	}
	target = scope:puppet_or_actor
	value = intrigue
	step = 4
	multiplier = 0.75
	offset = -5
	min = 0
	desc = AI_GUARDIAN_SKI
# … (cut here; the rest is in the file)

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

What happens

If they accept

  • If

    • The option “education hook” is chosen
    • Has a usable Hook on the target

    Then

    • Use a Hook on the target
  • If

    • scope:ward.age >= 15

    Then

    • … will soon be an adult
  • The ward › If any relation:
    • One random relation:
    • You:
      • The old guardian:
        • remove_relation_ward = scope:ward
        • If

          • is_foreign_court_guest = yes
          • None of these

            • host = liege
            • is_playable_character = { }
            • Any relation:
              • is_playable_character = { }
              • this = scope:old_guardian.host

          Then

          • return_to_court = yes
      • If

        • always = yes

        Then

        • The ward:
          • return_ward_travel_effect = { }

        Otherwise

        • If

          a check the game hides

          Then

          • The old guardian:
            • If

              Then

              • remove_opinion = { modifier = guardian_of_heir_opinion target = scope:ward.liege }

              Else if

              • Has the opinion “Guardian of Your Relative”
              • None of these

                • Any relation:
                  • is_close_family_of = scope:ward.liege

              Then

              • remove_opinion = { modifier = guardian_of_relative_opinion target = scope:ward.liege }
            • If

              Then

              • remove_opinion = { modifier = guardian_of_heir_parochial_opinion target = scope:ward.liege }

              Else if

              • Has the opinion “Parochial Guardian of Your Relative”
              • None of these

                • Any relation:
                  • is_close_family_of = scope:ward.liege

              Then

              • remove_opinion = { modifier = guardian_of_relative_parochial_opinion target = scope:ward.liege }
          • The ward:
            • If

              a check the game hides

              Then

              • var:guardian_liege:
                • If

                  Then

                  • remove_opinion = { modifier = guardian_of_heir_opinion target = scope:ward.liege }

                  Else if

                  • Has the opinion “Guardian of Your Relative”
                  • None of these

                    • Any relation:
                      • is_close_family_of = scope:ward.liege

                  Then

                  • remove_opinion = { modifier = guardian_of_relative_opinion target = scope:ward.liege }
                • If

                  Then

                  • remove_opinion = { modifier = guardian_of_heir_parochial_opinion target = scope:ward.liege }

                  Else if

                  • Has the opinion “Parochial Guardian of Your Relative”
                  • None of these

                    • Any relation:
                      • is_close_family_of = scope:ward.liege

                  Then

                  • remove_opinion = { modifier = guardian_of_relative_parochial_opinion target = scope:ward.liege }
      • If

        • scope:ward.var:character_requested_as_educator = scope:old_guardian
        • scope:ward.var:character_making_education_request:
          • One of these

            • Is the old guardian
            • or

              The old guardian:
              • is_courtier_of = prev

        Then

        • scope:ward.var:character_making_education_request: Opinion: Insulted (-15)
  • The guardian:
    • set_relation_ward = scope:ward
  • The ward:
    • If

      • Never
      • One of these

        • The character you target:
          • One of these

            • Any realm province:
              • is_higher_studies_location = { }
            • or

              Any realm county: The county has the modifier “Pandidakterion”
        • or

          You:
          • Is the character you send
          • Any realm province:
            • is_higher_studies_location = { }

      Then

      • You:
        • remove_short_term_gold = { … }
      • If

        • The university:
          • is_province_valid_confucian_education_trigger = { }
        • None of these

      • … (more in the script below)
    • … (more in the script below)
  • … (more in the script below)

If they refuse

  • If

    • None of these

      • You: Has the opinion “Declined Ward” of the target

    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

      • Yes
      • 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 = { … }
  • Event char_interaction.0081
  • Opinion: Declined Ward

Options when sending

  • Convert CultureAttempt to convert the character you send to the other character's Culture (…).
  • Convert RiteAttempt to convert the character you send to the other character's Rite (…).
  • Send to UniversityAccess to University at the recipient's Court allows a Ward to get a better Education Trait
  • Use a Hook

Events it fires: char_interaction.0090, char_interaction.0080, char_interaction.0081

• 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) (45 lines of game script)
is_available = trigger_if = {
	limit = {
		is_ai = yes
	}
	any_courtier = {
		is_adult = no
		is_child_of = root
		num_of_relation_guardian = 0
		is_physically_able = yes
	}
	any_vassal = {
		primary_title.tier >= tier_county
		opinion = {
			target = root
			value <= -25
		}
	}
}
is_shown = scope:recipient = {
	this != scope:puppet_or_actor
	is_playable_character = yes
	is_alive = yes
}
trigger_if = {
	limit = {
		exists = scope:secondary_recipient
	}
	scope:secondary_recipient = {
		is_adult = yes
		NOR = {
			is_theocratic_lessee = yes
			is_consort_of = scope:recipient
		}
	}
}
trigger_if = {
	limit = {
		scope:puppet_or_actor = {
			has_government = landless_adventurer_government
		}
	}
	scope:recipient = {
		is_courtier_of = scope:puppet_or_actor
	}
}

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

Can be sent when (is_valid…) (147 lines of game script)
custom_description = {
	text = character_to_guard_exists
	subject = scope:recipient
	scope:recipient = {
		OR = {
			AND = {
				is_adult = yes
				num_of_relation_ward < 2
			}
			any_courtier = {
				is_adult = yes
				num_of_relation_ward < 2
			}
		}
	}
}
custom_description = {
	text = character_to_educate_exists
	object = scope:puppet_or_actor
	scope:puppet_or_actor = {
		OR = {
			any_courtier = {
				is_adult = no
				is_physically_able = yes
				NOR = {
					any_relation = {
						type = guardian
						this = scope:recipient
					}
					any_relation = {
						type = guardian
						OR = {
							is_at_war_with = scope:puppet_or_actor
							any_liege_or_above = {
								is_at_war_with = scope:puppet_or_actor
							}
						}
					}
				}
			}
			AND = {
				is_adult = no
				is_physically_able = yes
				NOR = {
					any_relation = {
						type = guardian
						this = scope:recipient
					}
					any_relation = {
						type = guardian
						OR = {
							is_at_war_with = scope:puppet_or_actor
							any_liege_or_above = {
								is_at_war_with = scope:puppet_or_actor
							}
						}
					}
				}
			}
		}
	}
}
NOT = {
	scope:puppet_or_actor = {
		is_at_war_with = scope:recipient
	}
}
scope:recipient = {
	is_imprisoned = no
}
trigger_if = {
	limit = {
		exists = scope:secondary_actor
	}
	scope:secondary_actor = {
		is_imprisoned = no
		custom_tooltip = {
			text = ward_travelling_tt
			NOT = {
				exists = var:ward_travelling_to_guardian
			}
		}
		custom_tooltip = {
			text = hostage_travelling_tt
			NOT = {
				exists = var:hostage_travelling_to_warden
			}
		}
		trigger_if = {
			limit = {
				exists = var:ward_waiting_for_guardian
			}
			var:ward_waiting_for_guardian = {
				custom_tooltip = {
					text = guardian_travelling_tt
					NOT = {
						exists = scope:secondary_actor.var:ward_waiting_for_guardian
					}
				}
			}
		}
	}
}
trigger_if = {
	limit = {
		exists = scope:secondary_recipient
	}
	scope:secondary_recipient = {
		is_imprisoned = no
		custom_tooltip = {
			text = guardian_travelling_tt
			NOT = {
				exists = var:guardian_travelling_to_ward
			}
		}
		custom_tooltip = {
			text = hostage_travelling_tt
			NOT = {
				exists = var:hostage_travelling_to_warden
			}
		}
		trigger_if = {
			limit = {
				exists = var:guardian_waiting_for_ward
			}
			var:guardian_waiting_for_ward = {
				custom_tooltip = {
					text = ward_travelling_tt
					NOT = {
						exists = scope:secondary_recipient.var:guardian_waiting_for_ward
					}
				}
			}
		}
	}
}
trigger_if = {
	limit = {
		scope:puppet_or_actor = {
			has_government = landless_adventurer_government
		}
	}
	ep3_laamp_diplo_range_trigger = {
		TARGET = scope:recipient
		LAAMP = scope:puppet_or_actor
	}
}

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

Effects (on_send, on_accept, on_decline) (184 lines of game script)
on_send = scope:secondary_recipient = {
	add_character_flag = {
		flag = under_offer_as_guardian_flag
		months = 1
	}
}
scope:secondary_actor = {
	add_character_flag = {
		flag = under_offer_as_ward_flag
		months = 1
	}
}
on_accept = scope:secondary_actor = {
	save_scope_as = ward
}
scope:puppet_or_actor = {
	save_scope_as = ward_liege
}
scope:recipient = {
	save_scope_as = guardian_liege
}
scope:secondary_recipient = {
	save_scope_as = guardian
}
scope:puppet_or_actor = {
	if = {
		limit = {
			scope:education_hook ?= yes
			has_usable_hook = scope:recipient
		}
		use_hook = scope:recipient
	}
	if = {
		limit = {
			is_ai = no
		}
		scope:ward = {
			add_character_flag = player_educated
		}
	}
}
if = {
	limit = {
		scope:ward.age >= 15
	}
	custom_description_no_bullet = {
		text = ward_nearing_adulthood_tt
		object = scope:ward
	}
}
scope:ward = {
	if = {
		limit = {
			any_relation = {
				type = guardian
				this != scope:guardian
			}
		}
		random_relation = {
			type = guardian
			save_scope_as = old_guardian
			if = {
				limit = {
					scope:old_guardian != scope:puppet_or_actor
				}
				scope:old_guardian = {
					trigger_event = char_interaction.0090
				}
			}
		}
		scope:puppet_or_actor = {
			send_interface_message = {
				type = event_childhood_neutral
				title = remove_guardian_interaction_notification
				left_icon = scope:old_guardian
				right_icon = scope:ward
				remove_guardian_effect = {
					GUARDIAN = scope:old_guardian
					WARD = scope:ward
					RETURN_WARD = yes
					HIDE_OPINION = no
				}
				if = {
					limit = {
						exists = scope:ward.var:character_requested_as_educator
						scope:ward.var:character_requested_as_educator = scope:old_guardian
						exists = scope:ward.var:character_making_education_request
						scope:ward.var:character_making_education_request = {
							is_alive = yes
							OR = {
								this = scope:old_guardian
								scope:old_guardian = {
									is_courtier_of = prev
								}
							}
							this != scope:puppet_or_actor
						}
					}
					scope:ward.var:character_making_education_request = {
						add_opinion = {
							modifier = insult_opinion
							target = scope:puppet_or_actor
							opinion = -15
						}
					}
				}
			}
		}
	}
}
show_as_tooltip = {
	scope:guardian = {
		set_relation_ward = scope:ward
	}
	educate_child_interaction_effect = yes
}
scope:puppet_or_actor = {
	if = {
		limit = {
			this != scope:recipient
			scope:ward = {
				NOR = {
					any_relation = {
						type = guardian
						this = scope:recipient
					}
					any_relation = {
						type = guardian
						OR = {
							is_at_war_with = scope:puppet_or_actor
							any_liege_or_above = {
								is_at_war_with = scope:puppet_or_actor
							}
						}
					}
				}
			}
			scope:guardian = {
				num_of_relation_ward < 2
			}
		}
		trigger_event = char_interaction.0080
	}
}
add_clan_unity_interaction_effect = {
	CHARACTER = scope:puppet_or_actor
	TARGET = scope:recipient
	VALUE = miniscule_unity_gain
	DESC = clan_unity_ward_offerage.desc
	REVERSE_NON_HOUSE_TARGET = yes
}
accolade_ward_education_notification_effect = yes
on_decline = if = {
	limit = {
		NOT = {
			scope:puppet_or_actor = {
				has_opinion_modifier = {
					modifier = declined_ward_opinion
					target = scope:recipient
				}
			}
		}
	}
	add_clan_unity_interaction_effect = {
		CHARACTER = scope:puppet_or_actor
		TARGET = scope:recipient
		VALUE = miniscule_unity_loss
		DESC = clan_unity_ward_decline.desc
		REVERSE_NON_HOUSE_TARGET = yes
	}
}
scope:puppet_or_actor = {
	trigger_event = char_interaction.0081
	add_opinion = {
		modifier = declined_ward_opinion
		target = scope:recipient
	}
}
scope:secondary_recipient = {
	remove_character_flag = under_offer_as_guardian_flag
}
scope:secondary_actor = {
	remove_character_flag = under_offer_as_ward_flag
}

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

Category
Friendly actions
In the menu
under More…
ID
offer_ward_interaction

Source: game/common/character_interactions/00_education_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?