tiger_lib/ck3/data/
scripted_costs.rs1use 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}