欢迎光临散文网 会员登陆 & 注册

Vic3 mod 制作教程 第六章 本地化和GUI初步(写到一半没星宇了)

2023-08-14 16:58 作者:普洛斯佩罗亲王  | 我要投稿

事先文件结构准备:

/localization/simp_chinese/modding_l_simp_chinese.yml

/gui/

/customizable_localization/

* 如有必要: journal_entries
* 如需要多语言 /localization/english/ 等

本章所称呼的引号均为半角英文符号`"`, 感叹号均为半角英文符号`!`

##  最基本的本地化, 从key到中文

用双引号括起来的字符虽然能用, 但是既不好维护, 也不方便翻译, 因此, P社给了一个经典的localization选项

使用就仅需要随便新建一个后缀为`_l_simp_chinese.yml`的文件, 当然, 如果希望是英语就是`_l_english.yml`结尾

然后在开头写`l_simp_chinese:`, 如果是英语就是`l_english:`

然后根据`key:0 文本内容`就获得了一个localization, 我们就用, `example_key:0 "这是一个文本内容"`写, 然后在我们上一章说到的事件里面替换掉, 请注意, 因为是变成了localization所以不建议双引号括起来(你要括起来其实也还行)

localization是比较卡的内容, 一开始热刷新会导致很卡, 请注意。

localization之间可以相互引用, 使用$括起key即可, 如`display_exampe_key:0 "这将会展示 $example_key$"`

### 本地化的格式化

localization还能使用#<格式化><文本>#!实现格式化引用, 常见的格式化如下

| 名称 | 含义 |
----
| header | 顶层标题 |

此外还能使用@<texticon>!实现文本图标的引用,创建文本图标在本章后续详述。

## 本地化引用界面代码

本地化之所以单独列一行的原因,因为本地化的文本可以是界面代码风格的文本,仅需要用`"[<界面代码>]"`即可,如果需要进一步格式化,只需要`"[<界面代码>|<格式化>]"`就可以实现。

界面代码是,从头到尾都和文本代码完全不一样的代码,用以展示界面的一类代码,由于这不是hoi4mod制作,`/common/`中完全不能插入任何的界面代码。所谓的在界面展示变量就是通过界面代码实现。

请注意,本地化的引用并不是任何时候都对应界面代码风格的文本,在一些GUI里面的关键词是完全不能用本地化的。

更为详细的会在本章下文描述,但是总之还是先说完文本代码中localization的特殊用法吧

## 文本代码中localization的特殊用法

文本代码有时候可以根据不同情景使用,可以分为必须要定义在定义文本代码中的`first_vaild`型和与scope强绑定的customizable_localization

first_vaild型使用起来没有customizable_localization这么繁琐,应当优先考虑使用

所有的都是上面的优先级大于下面的,上面一旦满足优先显示上面的

实例文本如下:
```perl
first_valid = {
            triggered_desc = {
                desc = journal_entry_key_status_1
                trigger = {
                    has_variable = mining_strike
                }
            }
            triggered_desc = {
                desc = journal_entry_key_status_2
                trigger = {
                    has_variable = industrial_strike
                }
            }
            triggered_desc = {
                desc = journal_entry_key_status_2
                trigger = {
                    has_variable = railway_strike
                }
            }
            desc = commander_rank_1_fallback # 均不满足时,使用这个
        }
```

event的title,desc,flavor均支持first_vaild型


customizable_localization需要在`
customizable_localization`里面定义,然后在界面代码里面通过Scope.GetCustom('custom_key')引用,嗯,挺繁琐的。

定义的文本代码如下:

```perl
example_custom = {
    type = country # 界定root的,custom对于Scope选择很严格的。
    random_valid = no # 如果为yes,随机选择,而不考虑上下位置的优先级
    # log_loc_errors = no # 不在error.log打印本地化错误
    text = {
        trigger = {
            has_law = law_type:law_council_republic
        }
        localization_key = custom_newspaper_truth
    }

    text = {
        trigger = {
            has_law = law_type:law_council_republic
            cu:russian = {
                is_primary_culture_of = root
            }
        }
        localization_key = custom_newspaper_pravda
    }

    text = {
        localization_key = custom_generic_newspaper
    }

}
```

此外还有一些前后缀和继承的用法,展示一下就可以了。简单来说就是继承某个上级本地化key加上前缀或者后缀。

## GUI初步

GUI代码使用一系列类似文本代码但是完全不能代入进去的代码在gui文件里定义一系列gui

定义一个gui需要以下定义

```
widget = { # gui的类型,可以自定义也可以是预设的
    parentanchor = top|right
    widgetanchor = top|left

    size = { 500 500 }
    
    visible = "" # 不能使用本地化
    # enable = "" # 不能使用本地化,仅能用于特殊的gui类型

    # datacontext = "" # 数据上下文,内填界面代码,有的是要求datamodel
    # datamodel = ""
}
```

### 界面代码概述

简单而言,界面代码就是通过一系列界面获取数据的代码,用"[<界面代码>]"描述,使用.连接,使用括号和里面的参数输入参数。

如果涉及到datacontext或者datamodel(前者一般是单个,后者一般是一个列表),可以事先获取相关的Scope然后在直接在后续使用匿名的Scope

例如:
```
widget = { # gui的类型,可以自定义也可以是预设的
    parentanchor = top|right
    widgetanchor = top|left

    size = { 500 500 }
    
    visible = "" # 不能使用本地化
    # enable = "" # 不能使用本地化,仅能用于特殊的gui类型

    datacontext = "[AccessPlayer.GetCountry]" # 数据上下文,内填界面代码,有的是要求datamodel
    # datamodel = ""
    
    text_single = {
        text = "[Counrty.MakeScope.Var('flag_name').GetValue]" # 直接使用Country这一匿名Scope
    }
}
```
顺便也能看到如何展示变量的做法,先把支持转换为`Scope`类型的类型用MakeScope转换为`Scope`类型,然后使用Scope.Var(Arg0),使用变量名称作为参数,获取`Scope`类型的变量,最后用Scope.GetValue获取数字。可以看到前后文之间的类型关系需要非常明确

### 界面代码的初步的判断流程以及字符串拼接

界面代码的流程控制自然不会给你循环,但是给出判断流程是可以的,使用Select系列的界面代码就可以,Select系列包括大量的函数,均用Select开头,三个参数,第一个是条件,第二个是满足条件的文本,第三个是不满足条件的文本,不同的函数决定了返回值类型的不同(界面代码的类型要求相当严格)。

可以通过Concatenate( Arg0, Arg1 ),输入两个Cstring类型以获取结合起来的字符串。

# 列举GUI

(这里就没星宇了写下去了,有一个基本的示例可以看看就是了)

作为按钮的图片(需要转为dds)
相关代码,在information pannel那边

(上图为对比测试)

因为V3的音效几乎可以说无法添加所以星宇没了

也不要问为什么CK3可以V3不可以,因为V3没有播放音乐的effect,而CK3有。

Vic3 mod 制作教程 第六章 本地化和GUI初步(写到一半没星宇了)的评论 (共 条)

分享到微博请遵守国家法律