tiger_lib/ck3/data/
scripted_costs.rs

1use crate::block::Block;
2use crate::ck3::validate::validate_cost;
3use crate::context::ScopeContext;
4use crate::db::{Db, DbKind};
5use crate::everything::Everything;
6use crate::game::GameFlags;
7use crate::item::{Item, ItemLoader};
8use crate::scopes::Scopes;
9use crate::token::Token;
10
11#[derive(Clone, Debug)]
12pub struct ScriptedCost {}
13
14inventory::submit! {
15    ItemLoader::Normal(GameFlags::Ck3, Item::ScriptedCost, ScriptedCost::add)
16}
17
18impl ScriptedCost {
19    pub fn add(db: &mut Db, key: Token, block: Block) {
20        db.add(Item::ScriptedCost, key, block, Box::new(Self {}));
21    }
22}
23
24impl DbKind for ScriptedCost {
25    fn validate(&self, key: &Token, block: &Block, data: &Everything) {
26        let mut sc = ScopeContext::new(Scopes::Character, key);
27        match key.as_str() {
28            "hybridize_culture" => {
29                sc.define_name("culture", Scopes::Culture, key);
30            }
31            "reforge_artifact" | "repair_artifact" => {
32                sc = ScopeContext::new(Scopes::None, key);
33                sc.define_name("artifact", Scopes::Artifact, key);
34            }
35            "travel_leader" => {
36                sc.define_name("speed_aptitude", Scopes::Value, key);
37                sc.define_name("safety_aptitude", Scopes::Value, key);
38            }
39            "deactivate_accolade" => {
40                sc = ScopeContext::new(Scopes::Accolade, key);
41            }
42            "create_accolade" => {
43                sc.define_name("owner", Scopes::Character, key);
44            }
45            "reassign_title_troops" => {
46                sc = ScopeContext::new(Scopes::LandedTitle, key);
47                sc.define_name("actor", Scopes::Character, key);
48            }
49            "reform_culture_ethos" | "reform_culture_language" | "reform_culture_martial" => {
50                sc = ScopeContext::new(Scopes::Culture, key);
51            }
52            _ => {
53                sc.set_strict_scopes(false);
54            }
55        }
56
57        validate_cost(block, data, &mut sc);
58    }
59}