tiger_lib/ck3/data/
dynasty_legacies.rs1use crate::block::Block;
2use crate::ck3::modif::ModifKinds;
3use crate::context::ScopeContext;
4use crate::db::{Db, DbKind};
5use crate::everything::Everything;
6use crate::game::GameFlags;
7use crate::item::{Item, ItemLoader};
8use crate::modif::validate_modifs;
9use crate::scopes::Scopes;
10use crate::token::Token;
11use crate::tooltipped::Tooltipped;
12use crate::validator::Validator;
13
14#[derive(Clone, Debug)]
15pub struct DynastyLegacy {}
16
17inventory::submit! {
18 ItemLoader::Normal(GameFlags::Ck3, Item::DynastyLegacy, DynastyLegacy::add)
19}
20
21impl DynastyLegacy {
22 pub fn add(db: &mut Db, key: Token, block: Block) {
23 db.add(Item::DynastyLegacy, key, block, Box::new(Self {}));
24 }
25}
26
27impl DbKind for DynastyLegacy {
28 fn validate(&self, key: &Token, block: &Block, data: &Everything) {
29 let mut vd = Validator::new(block, data);
30 let mut sc = ScopeContext::new(Scopes::Character, key);
31
32 let loca = format!("{key}_name");
33 data.verify_exists_implied(Item::Localization, &loca, key);
34 let loca = format!("{key}_desc");
35 data.verify_exists_implied(Item::Localization, &loca, key);
36
37 if let Some(path) = data.get_defined_string_warn(key, "NGameIcons|LEGACY_TRACK_ICON_PATH") {
38 let pathname = format!("{path}/{key}.dds");
39 data.verify_exists_implied(Item::File, &pathname, key);
40 }
41 if let Some(path) = data.get_defined_string_warn(key, "NGameIcons|LEGACY_ICON_PATH") {
42 let pathname = format!("{path}/{key}.dds");
43 data.verify_exists_implied(Item::File, &pathname, key);
44 }
45
46 vd.field_trigger("is_shown", Tooltipped::No, &mut sc);
47 }
48}
49
50#[derive(Clone, Debug)]
51pub struct DynastyPerk {}
52
53inventory::submit! {
54 ItemLoader::Normal(GameFlags::Ck3, Item::DynastyPerk, DynastyPerk::add)
55}
56
57impl DynastyPerk {
58 pub fn add(db: &mut Db, key: Token, block: Block) {
59 db.add(Item::DynastyPerk, key, block, Box::new(Self {}));
60 }
61}
62
63impl DbKind for DynastyPerk {
64 fn validate(&self, key: &Token, block: &Block, data: &Everything) {
65 let mut vd = Validator::new(block, data);
66 let mut sc = ScopeContext::new(Scopes::Character, key);
67
68 let loca = format!("{key}_name");
69 data.verify_exists_implied(Item::Localization, &loca, key);
70
71 vd.field_item("legacy", Item::DynastyLegacy);
72
73 vd.field_trigger("can_be_picked", Tooltipped::Yes, &mut sc);
74 vd.field_effect("effect", Tooltipped::Yes, &mut sc);
75
76 vd.multi_field_validated_block("character_modifier", |block, data| {
77 let mut vd = Validator::new(block, data);
78 vd.field_item("name", Item::Localization);
79 validate_modifs(block, data, ModifKinds::Character, vd);
80 });
81 vd.multi_field_validated_block("doctrine_character_modifier", |block, data| {
82 let mut vd = Validator::new(block, data);
83 vd.field_item("name", Item::Localization);
84 vd.field_item("doctrine", Item::Doctrine);
85 validate_modifs(block, data, ModifKinds::Character, vd);
86 });
87
88 vd.advice_field("unlock_maa", "removed in 1.16");
89 vd.field_item("trait", Item::Trait);
90 vd.field_validated_block("traits", |block, data| {
91 let mut vd = Validator::new(block, data);
92 vd.unknown_value_fields(|key, value| {
93 data.verify_exists(Item::Trait, key);
94 value.expect_integer();
95 });
96 });
97
98 vd.field_script_value_no_breakdown("ai_chance", &mut sc);
99 }
100}