文明六自定义领袖特色建筑
StringOD Lv2

只允许主机、特定领袖、特定文明使用特定功能的模组

背景

一直想实现一个在联机模式下,只允许主机,特定领袖,特定文明使用特定功能的模组.

模组介绍

这是一个建筑添加与德国特色工业区下,每回合建筑生产一定的资源并修改城市每回合所产出的资源.

建筑本身加成:黄金 + 5, 食物 + 5, 文化 + 1, 科技 + 1, 信仰 + 5, 生产力 + 5

城市资源加成:黄金 + 116, 信仰 + 116, 文化 + 5, 生产力 + 20, 食物 + 20, 科技 + 5

建筑名称加成类型建筑每回合生产城市每回合生产
少年的野心/DefinCivilizationTraitBuilding黄金+5+116
食物+5+116
文化+1+5
科技+1+5
信仰+5+116
生产力+5+20

订阅地址

你可以直接订阅这个模组:Stem 创意工坊

参考链接

思路记录

玉皇大帝开发者终于回复我了

下午打开 Steam 时收到来自玉皇大帝模组开发者的回复.

墨影斋主人:在你的建筑下添加一个修改器,判定建造条件是 “玩家”,如果是绑定领袖或者文明,就直接用 TraitType

我迫不及待想要去尝试下

打开 HBX(HBuilderX) 检索一下 TraitType 看下这玩意怎么写的.

我在 Civilizations.xml 文件中的 第 200 行 找到了一条相关有可能的但与玉皇大帝作者说的完全不同的代码

1
<Row CivilizationType="CIVILIZATION_GERMANY" LeaderType="LEADER_BARBAROSSA"

第 2657 - 2659 行有点像

1
2
3
<Row CivilizationType="CIVILIZATION_GERMANY" TraitType="TRAIT_CIVILIZATION_IMPERIAL_FREE_CITIES"/>
<Row CivilizationType="CIVILIZATION_GERMANY" TraitType="TRAIT_CIVILIZATION_DISTRICT_HANSA"/>
<Row CivilizationType="CIVILIZATION_GERMANY" TraitType="TRAIT_CIVILIZATION_UNIT_GERMAN_UBOAT"/>

我没有在修改器文件Modifiers.xml文件中找到相关代码,据猜测这可能是自由添加,或许游戏源文件没有可能说明那只是一部分示例代码,并且游戏开发商不可能想象到各种可能性.

修改器文件如何编写

第一种可能性

他说的是修改器Modifiers 应该不可能是 ModifierArgumentsBuildingModifiers这两个修改器.

我没有见过单独绑定领袖的写法,在读一遍修改器文件吧Modifiers.xml

这两千多行代码全都是一个写法

1
2
3
4
5
6
7
8
9
10
<Types>
<Row Type="MODIFIER_ALL_PLAYERS_ATTACH_MODIFIER" Kind="KIND_MODIFIER"/>
</Types>
<DynamicModifiers>
<Row>
<ModifierType>MODIFIER_ALL_PLAYERS_ATTACH_MODIFIER</ModifierType>
<CollectionType>COLLECTION_ALL_PLAYERS</CollectionType>
<EffectType>EFFECT_ATTACH_MODIFIER</EffectType>
</Row>
</DynamicModifiers>

根据这段代码,可以猜测出一种可能性.

  • 第六行代码的修改器类型和第 2 行的类型相等,这说明引用的是建筑名称
  • 后面第7和8行不知道表达的什么意思
  • 可能需要拼接代码
1
2
3
4
5
6
7
8
9
10
11
12
13
<Types>
<Row Type="BUILDING_DEFIN_CIVILIZATION_TRAIT_BUILDING" Kind="KIND_BUILDING" />
</Types>
<Modifiers>
<Row>
<!-- 声明建筑要修改的建筑名称 -->
<ModifierType>BUILDING_DEFIN_CIVILIZATION_TRAIT_BUILDING</ModifierType>
<!-- 绑定玩家拥有使用当前建筑权限 -->
<OwnerRequirementSetId>PLAYER_IS_HUMAN</OwnerRequirementSetId>
<!-- 绑定指定的领袖使用当前建筑: 德国 -->
<TraitType>CIVILIZATION_GERMANY</TraitType>
</Row>
</Modifiers>

第 10 行完全是文明类型和区域类型的两种结合写法,先构建一下试试效果吧.

woc难道我成功了

试了下其他文明是否有这个建筑,很遗憾,并没有成功绑定领袖

第二种可能性

我打开了领袖Leaders.xml 文件,终于发现了一个比较合理的代码.

换了好几个关键字,终于用巴巴罗萨的英译名在第 828 行找到了LEADER_BARBAROSSA

1
<Row LeaderType="LEADER_BARBAROSSA" TraitType="TRAIT_LEADER_HOLY_ROMAN_EMPEROR"/>

应该是这一行了,很遗憾,也不是这个

第三种可能性

我阅读了玉皇大帝的领袖文件,我猜测写法应该是这样.

1
2
3
4
5
6
7
8
<Row 
BuildingType="BUILDING_DEFIN_CIVILIZATION_TRAIT_BUILDING"

PrereqDistrict="DISTRICT_CITY_CENTER"
PurchaseYield="YIELD_GOLD"
Cost="0"
AdvisorType="ADVISOR_GENERIC"
TraitType="TRAIT_LEADER_HOLY_ROMAN_EMPEROR"/>

我直接追加到了建筑名称的后面,当我使用其它领袖的时候,他成功的没有显示出来.当然不排除是我写错了,在没有写正确的情况下是不会显示的.

我再试试德国,万一我写对了呢.对吧!

这下才是真正成功了

竟然真成功了,再试试一下热座模式,因为仅允许玩家使用和德国使用,看看这两个条件冲突不

还真能用,没有任何冲突,终于完成了

总结

即时在不依靠国内的各种文档,视频教程,依然可以依靠阅读英文文档和官网的帮助以及自己的猜测和摸索一样能达成目标.

虽然我最后实现功能的方式和玉皇大帝模组开发者说的答案有点出入,但还是他提醒了我,我愣是依靠一条信息找到了答案"领袖,文明,特征TraitType"才完成了我一直以来的目标.