文明6mod制作(4):自制修改器Modifier
前言准备
这次主要运用SQL语言写MOD,只需要掌握SQL添加数据库的方法即可,只有三个英文单词INSERT INTO VALUES
写法示例:
假设这样一个成绩表,要往里面添加学生信息,可以这么写:
1 | INSERT INTO 成绩表 (学号, 姓名, 分数) VALUES |
以上代码成绩表后面括号是表头用逗号加一个空格隔开,下面括号内是添加的信息,多个信息用逗号隔开,结束这条语句用分号
文明6修改器结结构
比如金字塔可以修改建造者使用次数,那么这个修改器发起者就是金字塔(BUILDING_PYRAMIDS),修改类型是调节建造者的使用次数(MODIFIER_PLAYER_UNITS_ADJUSTER_BUILDER_CHARGES),修改的参数是次数Amount = 1
总结:修改器三步骤:
1.谁要改(谁拥有的修改器)
2.改什么
3.改多少
每一步都对应一个特定的表,只有第二三步是确定的,第一步的表取决于发起者
第一步表中每一个对应修改器:
以纪念碑为例,若要给它加上金字塔的功能
第一步:由于纪念碑是建筑,建筑拥有的修改器要添加到表BuildingModifiers中,这个表的表头分别是BuildingType和ModifierId,前者对应纪念碑本身(BUILDING_MONUMENT),后者是修改器的名字(可以随便取)
第二步:给这个修改器指定一个修改类型,这个表的表头主要是ModifierId和ModifierType,前者是刚刚给修改器取的名字,后者是游戏自带的修改类型
第三步:这个表有三个表头,分别是ModifierId、Name、Value,分别是修改器的名字、修改的参数名、修改的参数值
具体如下:
总结如下:
查找参数以及推荐软件
为了做出更多功能,有必要熟悉游戏中各种自带的修改器,推荐以下软件:
https://sqlitestudio.pl 用于查看游戏数据库中的数据,具体操作如下:
点击工具栏上的Add a database,数据类型选择SQLite 3,文件选择文档\My Games\Sid Meier’s Civilization VI\Cache\DebugGameplay.sqlite,然后点ok
然后右键选择connect to the database,就有了游戏数据库中的内容
表头也在其中
在数据里可以查看到参数名,具体如下(这是刚刚金字塔的参数AMOUNT)
https://www.bilibili.com/read/cv1743674/ B站大佬的MOD辅助工具
进入自定义修改器
上面那个纪念碑的例子可以这样用,点击生成即可一键生成代码
其中的RunOnce等三个选项具体作用如下:
添加约束条件
下图一个是对所有者的约束,一个是对被影响者的约束
修改器的生效条件如下,即一个或以上的子条件必须包含在条件集中才能被传到Modifiers里生效
接下来举例说明
根据上面的结构图,一个单独的条件有两个步骤
①先往Requirements这个表中添加两个内容,其中RequirementId是自己取的名字,RequirementType是游戏自带的的(可以用辅助工具)
②第二个表RequirementArguments里面填相对应的参数,同样包含参数名和参数值
实例的子条件代码如下:
1
2
3
4
5
6INSERT INTO Requirements (RequirementId, RequirementType) VALUES
("Has_Tech", "REQUIREMENT_PLAYER_HAS_TECHNOLOGY"),
("Is_Human", "REQUIREMENT_PLAYER_IS_HUMAN");
INSERT INTO RequirementArguments (RequirementId, Name, Value) VALUES
("Has_Tech", "TechnologyType", "TECH_POTTERY")接下来打包这两个子条件
先在RequirementSets表里面创建一个条件集
1
2INSERT INTO RequirementSets (RequirementSetId, RequirementSetType) VALUES
("ReqSet", "REQUIREMENTSET_TEST_ALL");其中第二项是决定两个子条件是全都符合还是全不符合,具体数值如下:
然后在RequirementSetRequirements这个表中往里面加入条件集和子条件的名字,把所有子条件集合起来,有多少个子条件就写多少行:
1
2
3INSERT INTO RequirementSetRequirements (RequirementSetId, RequirementId) VALUES
("ReqSet", "Has_Tech"),
("ReqSet", "Is_Human");总结代码如下:
用B站大佬的工具能节省难度和时间:
先设置条件集的名称
再加入两个子条件:
每个条件都取名字、设置类型、设置参数即可
做好后建议放在Components或者InGame Actions里面,开始游玩后才加载