祝大家新年快乐!
今天来给大家介绍一下scripted_guis。
scripted_guis文件夹。scripted_guis是一项非常强大的功能,它允许修改程序实现自定义GUI界面和逻辑,给了模组制作者一个给游戏加入新系统、新ui的机会。它可以把你新创建的,不属于游戏本体的gui文件(interface文件夹中的后缀为gui文件)接入游戏中,让玩家可以与原版游戏不同的ui界面进行交互。以著名模组TNO为例,其开始游戏时弹出的国家介绍是用scripted_guis接入游戏中的

GER的军事gui也是靠scripted_guis接入

新增的两个GDP显示框也是靠scripted_guis接入

人民革命委员会的红军决议ui也是靠scripted_guis接入

scripted_guis的应用范围十分广泛,它支持游戏中的大部分接口。今天将以我自己模组的一个修仙ui为例向大家介绍一下scripted_guis的基本原理。

修仙ui
scripted_guis通常需要与gui文件配合使用,即我们在gui文件中设置好ui中各个部件的位置、类型(以图标类型、文本类型、按钮类型为主),再通过scripted_guis接入游戏,并在scripted_guis中设置ui交互的条件与效果。

修仙ui的部分gui代码
看过我关于gui修改的那期视频的朋友应该知道,以上代码是创建了一个新窗口和一些按钮,那我们怎么把他们放进游戏中呢?这个时候就需要scripted_guis了

修仙scripted_gui的部分代码
接下来我们来逐句解析代码
context_type 是gui的作用范围,它支持4种类型
1、player_context,即常规的玩家界面
2、selected_country_context,即在地图上单击一个符合条件的国家时出现ui(似乎不常用)
3、selected_state_context,即在地图上单击一个符合条件的state时出现ui
4、Decision category,即把gui接入到决议组中,如前面人民革命委员会那种。这种还需要对决议组添加代码。如

dao_container是我设置的一个Decision category类型的scripted_gui
我们可以通过修改common/decison/category中的文件使此script_gui接入决议

window_name是需要接入的窗口名,需要与gui文件中设置的窗口名一样。
可供接入的窗口有:
top_bar
decision_tab
technology_tab
trade_tab
construction_tab
production_tab
deployment_tab
logistics_tab
diplomacy_tab (only when no country is selected)
politics_tab
tech_infantry_folder
tech_support_folder
tech_armor_folder
tech_artillery_folder
tech_land_doctrine_folder
tech_naval_folder
tech_naval_doctrine_folder
tech_air_techs_folder
tech_air_doctrine_folder
tech_electronics_folder
tech_industry_folder
national_focus
不设置此项的话,新加的窗口默认出现在地图画面中。

visible,此窗口的可见条件。满足条件时新接入的ui才可见,可通过这里设置窗口开关。
effects,新建ui的交互效果。
1、部件名_click = {xxx},如CTM_focus_boost_rate_click的意思是左键点击CTM_focus_boost_rate按钮(在gui文件中预设的按钮型部件)时会发生xxx的效果。
2、部件名_修正名_click = {xxx},
修正名有right、alt、control、shift
部件名_right_click = {xxx}即鼠标右键点击的效果
部件名_alt_click = {xxx}即先按住alt键再点击的效果
部件名_control_click = {xxx}即先按住control键再点击的效果
部件名_shift_click = {xxx}即先按住shift键再点击的效果
事实上不是只有按钮型部件才能点击,图标型、文本型等类型的部件也可以使用此语句设置点击效果,但是不会像按钮型那样有按下的特效。
triggers,可以设置部件是否可点击和是否可见的条件。
是否可见条件:部件名_visible = {xxx}满足条件xxx部件可见,不满足则不可见;默认皆为可见。
是否可点击条件:
部件名_click_enabled = {xxx} 满足xxx条件时可点击或者说点击后有效果,不满足条件,点击时设置的效果不生效。
部件名_修正名_click_enabled = {xxx} 与effects语句类似。
注意,部件名_click_enabled = {xxx}可覆盖 部件名_修正名_click_enabled = {xxx} 。
properties
使用properties可以改变gui中指定、部件的属性
properties = {
部件名 = {
image = 图片名 #更改部件的图片,需要在interface的gfx文件中设置路径。
frame = 数值 #更改部件图片的帧数,需要该部件的图片在设置路径时划分帧数。
x = 数值
y = 数值 #更改部件的x或y坐标大小,可达到移动效果。 } }
还有一些关于ai的内容,在此暂且不说。
放入一个来自钢丝wiki的scripted_gui例子以作参考。


今日到此为止。