tiger_lib/ck3/data/
succession.rs1use crate::block::Block;
2use crate::context::ScopeContext;
3use crate::db::{Db, DbKind};
4use crate::everything::Everything;
5use crate::game::GameFlags;
6use crate::item::{Item, ItemLoader};
7use crate::scopes::Scopes;
8use crate::token::Token;
9use crate::validator::Validator;
10
11#[derive(Clone, Debug)]
12pub struct SuccessionAppointment {}
13
14inventory::submit! {
15 ItemLoader::Normal(GameFlags::Ck3, Item::SuccessionAppointment, SuccessionAppointment::add)
16}
17
18impl SuccessionAppointment {
19 pub fn add(db: &mut Db, key: Token, block: Block) {
20 db.add(Item::SuccessionAppointment, key, block, Box::new(Self {}));
21 }
22}
23
24impl DbKind for SuccessionAppointment {
25 fn validate(&self, key: &Token, block: &Block, data: &Everything) {
26 let mut vd = Validator::new(block, data);
27 let mut sc = ScopeContext::new(Scopes::Character, key);
28 sc.define_name("title", Scopes::LandedTitle, key);
29
30 vd.field_script_value("candidate_score", &mut sc);
31 vd.field_list_choice("default_candidates", CANDIDATE_TYPES);
32 vd.advice_field("invested_candidates", "removed in 1.18");
33 vd.field_choice("level", &["merit", "prestige", "piety", "influence"]);
34
35 vd.field_bool("allow_children");
36 vd.field_bool("allow_same_tier_candidates");
37 }
38}
39
40const CANDIDATE_TYPES: &[&str] = &[
41 "holder_close_family",
42 "holder_close_extended_family",
43 "holder_house_member",
44 "landed_vassal",
45 "landed_vassal_close_family",
46 "landed_vassal_close_extended_family",
47 "landed_vassal_house_member",
48 "unlanded_noble_house_head",
49 "unlanded_noble_close_family",
50 "unlanded_noble_close_extended_family",
51 "unlanded_noble_house_member",
52 "holder_councilor",
53 "holder_court_position",
54 "direct_subject",
55 "direct_landed_vassal",
57];