八、创建基础的Modifier数据

本章节讲述Modifier的基本内容,用于提供游戏效果。

终于!

你可以做游戏的功能了,这里我们先只讲领袖的功能是怎么做出来的,我们会用频繁大佬工具,来实现一些效果。

设计你的效果

契合原版特性

首先,你要知道,有些特性是无法在游戏中实现的,比如英雄特性,因为游戏的Dll并不支持这个特性,除非像文明5一样,有Dll扩展出现,我们才能够完成这一部分。

那么,还有一部分特性是需要通过Lua脚本语言实现的,比如政哥哥每次触发尤里卡或者鼓舞时所有城市的建造进度推进20%。

而剩下的,只需要通过游戏中的Modifier组合就可以实现,或者可以直接套用原版游戏中存在的特性。

这里我们为了简单,我们先来给卫宫设计几个比较容易的特性:

领土扩张速度+100%。

单位射程+4,战斗力-8,拥有工业化科技后抵消该效果。

拥有粮仓的城市人口成长速度+50%。

这三个特性还是比较好做的,我们先开始做:

认识大佬工具

第二个功能
现在我们来解释一下
  • 先选择列表:意思是这个Modifier绑定给谁,比如图中的Belief,是信仰,如果我们给领袖绑定,则是选择Trait

  • 所有者:这个意思是指属于谁,比如哪个建筑?哪个单位?哪个信仰?等等,我们根据第四章写的信息填写。

  • ModifierId:你做的每个Modifier都是有ID的,你必须给每个Modifier起个ID,并且保证与其他不重复。

  • ModifierType:这是指主要的效果类型,比如修改XXX城市的增长度啊等等。

  • EffectType:这是特效类型,目前我们不需要使用他,这个特效类型影响ModifierType,属于<DynamicModifiers>部分。

  • CollectionType:所属集合类型,这是指被赋予者相关的信息,也是<DynamicModifiers>,当前不需要使用。

  • OwnerRequirementSet:这是指所有者的条件集合,其中添加的Requirement会被当做条件进行判断,比如,这个特性所有者是不是拥有某个建筑或者某个区域。

  • SubjectRequirementSet:目标对象的条件集合,比如修改城市中区域的建造速度,那么城市就是OwnerRequirementSet,区域就是SubjectRequirementSet?

  • ModifierArguments:Modifier是需要值的,比如建造速度加快多少,单位射程加多少,都是在这里填写。

总而言之,我们首先需要找到ModifierType,然后为其加上条件(RequirementSet),最终我们就做成了。

领土扩张速度

我们通过ModifierType旁边的放大镜来搜索ModifierType
当我们选中之后,ModifierArguments提示我们输入值,也就是写一个加成率

MODIFIER_ALL_CITIES_CULTURE_BORDER_EXPANSION,字面意思非常完美,修改所有城市文化边境成长速度,但你需要注意的是,这个ALL_CITIES是指所有城市,没错,就是包括那些都不属于我们这位领袖的城市,这时候该怎么办呢?

下面二选一

(高级)手动创建DynamicModifiers

我们需要手动创建<DynamicModifiers>,现在,我们在ModBuddy中单独建立一个Xml:

我起了这个名字,因为在游戏中使用,所以放到了InGame中

然后我们来到游戏目录中:

找到这个Modifiers.xml

我们用Notepad打开,这里我用Notepad++打开的,我们搜索MODIFIER_ALL_CITIES_CULTURE_BORDER_EXPANSION

这是Types中的
这是DynamicModifiers中的

我们把这两个条目连同结构复制下来,粘贴到我们的XML中。

这个样子
<GameData>
	<Types>
		<Row Type="MODIFIER_ALL_CITIES_CULTURE_BORDER_EXPANSION" Kind="KIND_MODIFIER"/>
	</Types>
	<DynamicModifiers>
		<Row>
			<ModifierType>MODIFIER_ALL_CITIES_CULTURE_BORDER_EXPANSION</ModifierType>
			<CollectionType>COLLECTION_ALL_CITIES</CollectionType>
			<EffectType>EFFECT_ADJUST_CITY_CULTURE_BORDER_EXPANSION</EffectType>
		</Row>
	</DynamicModifiers>
</GameData>

我们分析一下代码:

<Types>在第四章已经讲过了,如果你想要添加新的东西,大部分都需要通过<Types>来注册声明,这里声明MODIFIER_ALL_CITIES_CULTURE_BORDER_EXPANSION,为一个Modifier。

<DynamicModifiers>,很多人可能不理解,为什么是动态(Dynamic)的?事实上这是说在游戏进行时,根据游戏变动和其中的参数而产生不同的效果(类似这种行为),所以称之为动态,而不是写死的(Static)。

<ModifierType>就是我们所声明的Type。

<CollectionType>是指所有者,比如这里的所有者就是所有城市。

<EffectType>是实际上的效果,大家可以看到这个效果是修改城市边境增长。

那么我们该怎么修改?当然是把所有城市改成玩家城市了,如下:


<GameData>
	<Types>
		<Row Type="MODIFIER_FATE_EMIYA_PLAYER_CITIES_CULTURE_BORDER_EXPANSION" Kind="KIND_MODIFIER"/>
	</Types>
	<DynamicModifiers>
		<Row>
			<ModifierType>MODIFIER_FATE_EMIYA_PLAYER_CITIES_CULTURE_BORDER_EXPANSION</ModifierType>
			<CollectionType>COLLECTION_PLAYER_CITIES</CollectionType>
			<EffectType>EFFECT_ADJUST_CITY_CULTURE_BORDER_EXPANSION</EffectType>
		</Row>
	</DynamicModifiers>
	
</GameData>

我们看这个代码,我们起了个新的Id,并加上了唯一的一段特殊标记FATE_EMIYA(因为其他Mod也可能会复写这个效果,为了防止冲突,我们自己加一段自己的‘识别码’)

然后,我们把CollectionType改成了COLLECTION_PLAYER_CITIES。

这样所有城市就会变成所属玩家城市了。

你可能会说,我把CollectionType改成COLLECTION_PLAYER_UNITS,会不会所属单位存在的城市就有这个效果了?

并不,因为你需要保证EffectType中的对象和CollectionType中的是同一类,比如目前的这两者,它们都是城市,所以可以这么修改。

(简单)大佬工具一键式生成

现在,我们回到大佬工具1.5,把ModifierId修改成我们自己的Id,把CollectionType选择为我们刚刚改过的样子(不选择也可以):

在所有者写上我们的<LeaderTraits>中的特性Id:TRAIT_LEADER_FSN_ARCHER_EMIYA_UBW,并为这个效果起了个新Id:MODIFIER_FATE_EMIYA_CITIES_CULTURE_BORDER_EXPANSION。

在ModifierArguments的值中填写100,即为该效果会增长100。

最终是这个样子

现在,我们点击生成。

啊哦,大佬工具已经帮我们做好Dynamic了……
我们在ModBuddy中新建一个SQL文件
复制粘贴后,写上正确的注释

就像这样,一个Modifiers被添加进去了!

Modifiers解释

实际上我在大佬工具1.5(上面)我已经讲解过了,这一部分和Xml没有多大区别。

我们在<TraitModifiers>中绑定TraitType(天赋类型)和ModifierId。

然后在<Modifiers>中协商ModiferId和和ModifierType。

在<ModifierArguments>中写上ModifierId和对应的键值(Name:Value)

这就是Xml的实现步骤,我贴一段查理曼的实现代码:

	<TraitModifiers>

		<Row TraitType="TRAIT_CHARLEMAGNE_SABER_JOYEUSE_ORDRE" ModifierId="TRAIT_CHARLEMAGNE_SABER_JOYEUSE_ORDRE_GREAT"/>
		
	</TraitModifiers>
	
	<Modifiers>

		<!-- GREAT PEOPLE -->

		<Row>
			<ModifierId>TRAIT_CHARLEMAGNE_SABER_JOYEUSE_ORDRE_GREAT</ModifierId>
			<ModifierType>MODIFIER_PLAYER_GOVERNMENT_FLAT_BONUS</ModifierType>
		</Row>
		
	</Modifiers>
	
	<ModifierArguments>

		<!-- Great People -->

		<Row>
			<ModifierId>TRAIT_CHARLEMAGNE_SABER_JOYEUSE_ORDRE_GREAT</ModifierId>
			<Name>BonusType</Name>
			<Value>GOVERNMENTBONUS_GREAT_PEOPLE</Value>
		</Row>
		<Row>
			<ModifierId>TRAIT_CHARLEMAGNE_SABER_JOYEUSE_ORDRE_GREAT</ModifierId>
			<Name>Amount</Name>
			<Value>100</Value>
		</Row>
		
	</ModifierArguments>
	
	<!-- 该效果为伟人点数增长+100% -->

就是这样,如果你喜欢大佬工具1.5,你可以使用大佬工具1.5来做,如果你喜欢Xml,你就可以写Xml。

粮仓城市加人口成长速度

我们搜索后发现有一个非常完美的ModifierType

字面意思,修改玩家城市增长率,但是,我们需要的是有粮仓的城市,那么粮仓该怎么实现呢?

我们刚刚提到过

这时候,我们就需要使用RequirementSet,我们需要判断的是需要增长人口的城市有没有建筑,而不是玩家的城市们有没有建筑,所以们选择SubjectRequirementSet。

点击加号后,会出现一个条目
Requirement的详细信息

Requirement和Modifier一样,一个Id一个Type,但没有Collection和Effect,所以相对来说会简单一些。

点击下拉后,会有大量的REQUIREMENT

大佬工具1.5中,提示R&F的是迭起兴衰的特性,带叹号的特性可能没有效果。

这一行是指这个条件的特点

字面意思分别是:相似性、影响、颠倒、逆向、持续、进度、触发。

总而言之,你可以查查官方代码和论坛,因为我用的也很少……而且我也没有找到一些比较相似的说明。

所以我们把这几个勾都去掉。

我们简单选择了这些

BuildingType中的BUILDING_GRANARY是指粮仓这个建筑,你可以查阅官方wiki或者论坛来获取,或者查游戏文件,或者查游戏生成的数据库。

我们给ID附上一个比较易读的ID,然后点击OK。

在外层,我们给RequirementSet赋予一个ID:REQUIREMENT_SET_EMIYA_CITY_HAS_GRANARY,你可能会问,这不是多此一举吗?里一层外一层的。

这是关键

实际上,被称之为Set,即为一个集合,一个集合中可以有多条条件,这些条件,你可以选择满足其1即可生效,也可以选择满足所有才能生效,而Set中的功能就是这个意思。

比如我想要粮仓和军营同时存在的城市有这个效果,我就可以选择All,如果是其中一个存在,我就可以选择Any。

这里我们选择All和Any都一样,因为我们只有一条特性。

点击生成后
然后成了这个样子

我也给想用Xml的大佬们一段例子,这是村正的:

<GameData>


	<RequirementSets>

		<Row>
			<RequirementSetId>SENJI_MURAMASA_REQUIRES_UNIT_IS_MELEE</RequirementSetId>
			<RequirementSetType>REQUIREMENTSET_TEST_ALL</RequirementSetType>
		</Row>


		
	</RequirementSets>


	<RequirementSetRequirements>

		<Row>
			<RequirementSetId>SENJI_MURAMASA_REQUIRES_UNIT_IS_MELEE</RequirementSetId>
			<RequirementId>SENJI_MURAMASA_REQUIRES_UNIT_IS_MELEE</RequirementId>
		</Row>



		
		
	</RequirementSetRequirements>

		<Requirements>
		<Row>
			<RequirementId>SENJI_MURAMASA_REQUIRES_UNIT_IS_MELEE</RequirementId>
			<RequirementType>REQUIREMENT_UNIT_TAG_MATCHES</RequirementType>
		</Row>




	</Requirements>		
	
		<RequirementArguments>
			<Row>
				<RequirementId>SENJI_MURAMASA_REQUIRES_UNIT_IS_MELEE</RequirementId>
				<Name>Tag</Name>
				<Value>CLASS_MELEE</Value>
			</Row>


			
		</RequirementArguments>
	
</GameData>

<!-- 判断单位是不是近战 -->

远程单位射程+,战斗力-

这个需要两个Modifier来组合成一个效果,因为同一个Modifier不可能实现+射程和-战斗力。

我们先做加射程,因为ModifierType已经很明确的描述是远程单位了,所以我们不需要加一个Requirement,直接修改:

这是射程+4

而战斗力-8,拥有工业化后抵消该效果,就需要我们使用:MODIFIER_PLAYER_UNITS_ATTACH_MODIFIER,为玩家的单位赋予特性。

拥有X科技反转后即为未拥有X科技,通过这个实现,我们可以在满足该条件下战斗力-8
先生成,参数中的ModifierId不去管
复制粘贴到SQL中

现在我们来做单位-攻击力的效果

你可能会想,我们要修改的是玩家的所有单位,而不是单独的单位,为什么要这么做?

结合MODIFIER_FATE_EMIYA_UNITS_ATTACH_MODIFIER,我们可以为玩家的每个单位附上这个效果,这样,我们可以即判断玩家是否拥有科技,又可以给每个单位添加效果。

我们不需要上面这一部分

因为我们绑定给Modifier,就不需要把这个特性的TraitModifiers部分复制下来。

应该是这个样子
现在我们填上刚才没有写的值
填上之后

然而,攻击力部分我们还需要一个文本专门在战斗力缩略图那个地方显示:

	<ModifierStrings>
		<Row ModifierId="MODIFIER_FATE_EMIYA_UNIT_COMBAT_STRENGTH" Context="Preview" Text="LOC_ABILITY_EMIYA_COMBAT_STRENGTH"/>
	</ModifierStrings>

把这一部分复制到Leader_Data中,而相同的,我还需要添加ingame的文本:

		<Row Tag="LOC_ABILITY_EMIYA_COMBAT_STRENGTH" Language="zh_Hans_CN">

			<Text>-8 赝品</Text>
		</Row>

		<Row Tag="LOC_ABILITY_EMIYA_COMBAT_STRENGTH" Language="zh_Hant_HK">

			<Text>-8 贋品</Text>
		</Row>

		<Row Tag="LOC_ABILITY_EMIYA_COMBAT_STRENGTH" Language="en_US">

			<Text>-8 Fake</Text>
		</Row>

最终数据

-- FSN_Emiya_Arhcer_Leader_Modifiers
-- Author: HaoJun0823
-- DateCreated: 8/30/2019 12:29:54 PM
--------------------------------------------------------------

-- 领土扩张速度+100%

INSERT INTO TraitModifiers (TraitType, ModifierId) VALUES 
("TRAIT_LEADER_FSN_ARCHER_EMIYA_UBW", "MODIFIER_FATE_EMIYA_CITIES_CULTURE_BORDER_EXPANSION");

INSERT INTO Modifiers (ModifierId, ModifierType, RunOnce, Permanent, NewOnly, OwnerRequirementSetId, SubjectRequirementSetId) VALUES 
("MODIFIER_FATE_EMIYA_CITIES_CULTURE_BORDER_EXPANSION", "MODIFIER_FATE_EMIYA_PLAYER_CITIES_CULTURE_BORDER_EXPANSION", 0, 0, 0, NULL, NULL);

INSERT INTO ModifierArguments (ModifierId, Name, Value) VALUES 
("MODIFIER_FATE_EMIYA_CITIES_CULTURE_BORDER_EXPANSION", "Amount", 100);

-- Custom ModifierType

INSERT INTO Types (Type, Kind) VALUES 
("MODIFIER_FATE_EMIYA_PLAYER_CITIES_CULTURE_BORDER_EXPANSION", "KIND_MODIFIER");

INSERT INTO DynamicModifiers (ModifierType, CollectionType, EffectType) VALUES 
("MODIFIER_FATE_EMIYA_PLAYER_CITIES_CULTURE_BORDER_EXPANSION", "COLLECTION_PLAYER_CITIES", "EFFECT_ADJUST_CITY_CULTURE_BORDER_EXPANSION");

-- 拥有粮仓的城市人口增长+50%

INSERT INTO TraitModifiers (TraitType, ModifierId) VALUES 
("TRAIT_LEADER_FSN_ARCHER_EMIYA_UBW", "MODIFIER_FATE_EMIYA_CITIES_GROWTH_REQUIREMENT_GRANARY");

INSERT INTO Modifiers (ModifierId, ModifierType, RunOnce, Permanent, NewOnly, OwnerRequirementSetId, SubjectRequirementSetId) VALUES 
("MODIFIER_FATE_EMIYA_CITIES_GROWTH_REQUIREMENT_GRANARY", "MODIFIER_PLAYER_CITIES_ADJUST_CITY_GROWTH", 0, 0, 0, NULL, "REQUIREMENT_SET_EMIYA_CITY_HAS_GRANARY");

INSERT INTO ModifierArguments (ModifierId, Name, Value) VALUES 
("MODIFIER_FATE_EMIYA_CITIES_GROWTH_REQUIREMENT_GRANARY", "Amount", 50);

-- Single Conditions

INSERT INTO Requirements (RequirementId, RequirementType, ProgressWeight) VALUES 
("REQUIREMENT_EMIYA_CITY_HAS_GRANARY", "REQUIREMENT_CITY_HAS_BUILDING", 0);

INSERT INTO RequirementArguments (RequirementId, Name, Value) VALUES 
("REQUIREMENT_EMIYA_CITY_HAS_GRANARY", "BuildingType", "BUILDING_GRANARY");

-- Conditions Group

INSERT INTO RequirementSets (RequirementSetId, RequirementSetType) VALUES 
("REQUIREMENT_SET_EMIYA_CITY_HAS_GRANARY", "REQUIREMENTSET_TEST_ALL");

INSERT INTO RequirementSetRequirements (RequirementSetId, RequirementId) VALUES 
("REQUIREMENT_SET_EMIYA_CITY_HAS_GRANARY", "REQUIREMENT_EMIYA_CITY_HAS_GRANARY");

-- 单位射程+4

INSERT INTO TraitModifiers (TraitType, ModifierId) VALUES 
("TRAIT_LEADER_FSN_ARCHER_EMIYA_UBW", "MODIFIER_FATE_EMIYA_UNITS_ATTACK_RANGE");

INSERT INTO Modifiers (ModifierId, ModifierType, RunOnce, Permanent, NewOnly, OwnerRequirementSetId, SubjectRequirementSetId) VALUES 
("MODIFIER_FATE_EMIYA_UNITS_ATTACK_RANGE", "MODIFIER_PLAYER_UNITS_ADJUST_ATTACK_RANGE", 0, 0, 0, NULL, NULL);

INSERT INTO ModifierArguments (ModifierId, Name, Value) VALUES 
("MODIFIER_FATE_EMIYA_UNITS_ATTACK_RANGE", "Amount", 4);



-- 未拥有工业化单位攻击力-8

INSERT INTO TraitModifiers (TraitType, ModifierId) VALUES 
("TRAIT_LEADER_FSN_ARCHER_EMIYA_UBW", "MODIFIER_FATE_EMIYA_UNITS_ATTACH_MODIFIER");

INSERT INTO Modifiers (ModifierId, ModifierType, RunOnce, Permanent, NewOnly, OwnerRequirementSetId, SubjectRequirementSetId) VALUES 
("MODIFIER_FATE_EMIYA_UNITS_ATTACH_MODIFIER", "MODIFIER_PLAYER_UNITS_ATTACH_MODIFIER", 0, 0, 0, "REQUIREMENT_SET_EMIYA_NOT_HAVE_INDUSTRIALIZATION", NULL);

INSERT INTO ModifierArguments (ModifierId, Name, Value) VALUES 
("MODIFIER_FATE_EMIYA_UNITS_ATTACH_MODIFIER", "ModifierId", "MODIFIER_FATE_EMIYA_UNIT_COMBAT_STRENGTH");

-- Single Conditions

INSERT INTO Requirements (RequirementId, RequirementType, Inverse) VALUES 
("REQUIREMENT_EMIYA_NOT_HAVE_INDUSTRIALIZATION", "REQUIREMENT_PLAYER_HAS_TECHNOLOGY", 1);

INSERT INTO RequirementArguments (RequirementId, Name, Value) VALUES 
("REQUIREMENT_EMIYA_NOT_HAVE_INDUSTRIALIZATION", "TechnologyType", "TECH_INDUSTRIALIZATION");

-- Conditions Group

INSERT INTO RequirementSets (RequirementSetId, RequirementSetType) VALUES 
("REQUIREMENT_SET_EMIYA_NOT_HAVE_INDUSTRIALIZATION", "REQUIREMENTSET_TEST_ALL");

INSERT INTO RequirementSetRequirements (RequirementSetId, RequirementId) VALUES 
("REQUIREMENT_SET_EMIYA_NOT_HAVE_INDUSTRIALIZATION", "REQUIREMENT_EMIYA_NOT_HAVE_INDUSTRIALIZATION");


-- 未拥有工业化单位攻击力-8 特性

INSERT INTO Modifiers (ModifierId, ModifierType, RunOnce, Permanent, NewOnly, OwnerRequirementSetId, SubjectRequirementSetId) VALUES 
("MODIFIER_FATE_EMIYA_UNIT_COMBAT_STRENGTH", "MODIFIER_UNIT_ADJUST_COMBAT_STRENGTH", 0, 0, 0, NULL, NULL);

INSERT INTO ModifierArguments (ModifierId, Name, Value) VALUES 
("MODIFIER_FATE_EMIYA_UNIT_COMBAT_STRENGTH", "Amount", -8);

这是全部代码,你可以参考,并且从中获取灵感,这些差不多大概也许是所有比较有特性的组合了,当然,还有更多,我们将在文明章节讲解。

议程<Agenda>

议程也是用TraitModifier实现的,然而里面包括了几个参数:

首先我们找到第四章中<AgendaTraits>写下的Id:TRAIT_AGENDA_FSN_ARCHER_EMIYA

就是这个

然后我们手动创建两个TraitModifiers:

一个是宣布友好,一个是宣布谴责

然后创建Modifiers

分别是宣布友好和宣布谴责的特性

接下来创建是什么?没错,就是ModifierArguments

乱七八糟

然后还需要两个玄学ModifierStrings

就是这些

终于,添加完了!我会讲一讲比较特殊的地方:

	<Modifiers>
		<Row>
			<ModifierId>AGENDA_CHARLEMAGNE_SABER_HOLY_KNIGHT_EMPEROR_EX_FRIEND</ModifierId>
			<ModifierType>MODIFIER_PLAYER_DIPLOMACY_SIMPLE_MODIFIER</ModifierType>
			<SubjectRequirementSetId>PLAYER_DECLARED_FRIEND</SubjectRequirementSetId>
		</Row>
		<Row>
			<ModifierId>AGENDA_CHARLEMAGNE_SABER_HOLY_KNIGHT_EMPEROR_EX_DENOUNCED_FRIEND</ModifierId>
			<ModifierType>MODIFIER_PLAYER_DIPLOMACY_SIMPLE_MODIFIER</ModifierType>
			<SubjectRequirementSetId>PLAYER_FRIEND_DENOUNCED</SubjectRequirementSetId>
		</Row>
	</Modifiers>

这里的ModifierType是固定的,只能使用这个,意思是修改外交。

而SubjectRequirement指的是目标领袖的行为,现在是只目标领袖谴责/宣布友好时触发这两个Modifier,当然,你可以添加更多的Modifier。

	<ModifierArguments>
		<Row>
			<ModifierId>AGENDA_CHARLEMAGNE_SABER_HOLY_KNIGHT_EMPEROR_EX_FRIEND</ModifierId>
			<Name>InitialValue</Name>
			<Value>18</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_CHARLEMAGNE_SABER_HOLY_KNIGHT_EMPEROR_EX_FRIEND</ModifierId>
			<Name>ReductionTurns</Name>
			<Value>10</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_CHARLEMAGNE_SABER_HOLY_KNIGHT_EMPEROR_EX_FRIEND</ModifierId>
			<Name>ReductionValue</Name>
			<Value>1</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_CHARLEMAGNE_SABER_HOLY_KNIGHT_EMPEROR_EX_FRIEND</ModifierId>
			<Name>MessageThrottle</Name>
			<Value>20</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_CHARLEMAGNE_SABER_HOLY_KNIGHT_EMPEROR_EX_FRIEND</ModifierId>
			<Name>StatementKey</Name>
			<Value>LOC_DIPLO_KUDO_LEADER_CHARLEMAGNE_SABER_REASON_ANY</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_CHARLEMAGNE_SABER_HOLY_KNIGHT_EMPEROR_EX_FRIEND</ModifierId>
			<Name>SimpleModifierDescription</Name>
			<Value>LOC_DIPLO_MODIFIER_CHARLEMAGNE_SABER_HOLY_KNIGHT_EMPEROR_EX_DECLARED_FRIEND</Value>
		</Row>
		
		<Row>
			<ModifierId>AGENDA_CHARLEMAGNE_SABER_HOLY_KNIGHT_EMPEROR_EX_DENOUNCED_FRIEND</ModifierId>
			<Name>InitialValue</Name>
			<Value>-18</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_CHARLEMAGNE_SABER_HOLY_KNIGHT_EMPEROR_EX_DENOUNCED_FRIEND</ModifierId>
			<Name>ReductionTurns</Name>
			<Value>10</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_CHARLEMAGNE_SABER_HOLY_KNIGHT_EMPEROR_EX_DENOUNCED_FRIEND</ModifierId>
			<Name>ReductionValue</Name>
			<Value>-1</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_CHARLEMAGNE_SABER_HOLY_KNIGHT_EMPEROR_EX_DENOUNCED_FRIEND</ModifierId>
			<Name>MessageThrottle</Name>
			<Value>20</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_CHARLEMAGNE_SABER_HOLY_KNIGHT_EMPEROR_EX_DENOUNCED_FRIEND</ModifierId>
			<Name>StatementKey</Name>
			<Value>LOC_DIPLO_WARNING_LEADER_CHARLEMAGNE_SABER_REASON_ANY</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_CHARLEMAGNE_SABER_HOLY_KNIGHT_EMPEROR_EX_DENOUNCED_FRIEND</ModifierId>
			<Name>SimpleModifierDescription</Name>
			<Value>LOC_DIPLO_MODIFIER_CHARLEMAGNE_SABER_HOLY_KNIGHT_EMPEROR_EX_DENOUNCED_FRIEND</Value>
		</Row>		
	</ModifierArguments>

这一部分是MODIFIER_PLAYER_DIPLOMACY_SIMPLE_MODIFIER的参数。

  • InitialValue:初始值,意思应该是最初的预设值,友好是正数,不友好是负数。(也许是指第一次触发时直接减少/增加的数据)

  • ReductionTurns:大概是判断回合,每10回合检查一次条件?

  • ReductionValue:检查后条件满足时的变化?

  • MessageThrottle:这个完全不知道。

  • StatementKey:友好/谴责你

  • SimpleModifierDescription:当你查看对方领袖的外交界面时,下面有一行小字会写着这句话,是因为什么和你变化了好感。

	<ModifierStrings>
		<Row ModifierId="AGENDA_FSN_ARCHER_EMIYA_FRIEND" Context="Sample" Text="LOC_TOOLTIP_SAMPLE_DIPLOMACY_ALL"/>
		<Row ModifierId="AGENDA_FSN_ARCHER_EMIYA_DENOUNCED_FRIEND" Context="Sample" Text="LOC_TOOLTIP_SAMPLE_DIPLOMACY_ALL"/>
	</ModifierStrings>

这两个不解释,必须要添加,你的每一个MODIFIER_PLAYER_DIPLOMACY_SIMPLE_MODIFIER都需要一条ModifierStrings来显示消息,并且你需要注意Context的类型。

全部代码如下:


	<TraitModifiers>
		<Row TraitType="TRAIT_AGENDA_FSN_ARCHER_EMIYA" ModifierId="AGENDA_FSN_ARCHER_EMIYA_FRIEND"/>
		<Row TraitType="TRAIT_AGENDA_FSN_ARCHER_EMIYA" ModifierId="AGENDA_FSN_ARCHER_EMIYA_DENOUNCED_FRIEND"/>
	</TraitModifiers>

	<Modifiers>
		<Row>
			<ModifierId>AGENDA_FSN_ARCHER_EMIYA_FRIEND</ModifierId>
			<ModifierType>MODIFIER_PLAYER_DIPLOMACY_SIMPLE_MODIFIER</ModifierType>
			<SubjectRequirementSetId>PLAYER_DECLARED_FRIEND</SubjectRequirementSetId>
		</Row>
		<Row>
			<ModifierId>AGENDA_FSN_ARCHER_EMIYA_DENOUNCED_FRIEND</ModifierId>
			<ModifierType>MODIFIER_PLAYER_DIPLOMACY_SIMPLE_MODIFIER</ModifierType>
			<SubjectRequirementSetId>PLAYER_FRIEND_DENOUNCED</SubjectRequirementSetId>
		</Row>
	</Modifiers>

	<ModifierArguments>
		<Row>
			<ModifierId>AGENDA_FSN_ARCHER_EMIYA_FRIEND</ModifierId>
			<Name>InitialValue</Name>
			<Value>10</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_FSN_ARCHER_EMIYA_FRIEND</ModifierId>
			<Name>ReductionTurns</Name>
			<Value>10</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_FSN_ARCHER_EMIYA_FRIEND</ModifierId>
			<Name>ReductionValue</Name>
			<Value>1</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_FSN_ARCHER_EMIYA_FRIEND</ModifierId>
			<Name>MessageThrottle</Name>
			<Value>20</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_FSN_ARCHER_EMIYA_FRIEND</ModifierId>
			<Name>StatementKey</Name>
			<Value>LOC_DIPLO_KUDO_LEADER_FSN_ARCHER_EMIYA_REASON_ANY</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_FSN_ARCHER_EMIYA_FRIEND</ModifierId>
			<Name>SimpleModifierDescription</Name>
			<Value>LOC_DIPLO_KUDO_EXIT_LEADER_FSN_ARCHER_EMIYA_ANY</Value>
		</Row>

		<Row>
			<ModifierId>AGENDA_FSN_ARCHER_EMIYA_DENOUNCED_FRIEND</ModifierId>
			<Name>InitialValue</Name>
			<Value>-10</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_FSN_ARCHER_EMIYA_DENOUNCED_FRIEND</ModifierId>
			<Name>ReductionTurns</Name>
			<Value>10</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_FSN_ARCHER_EMIYA_DENOUNCED_FRIEND</ModifierId>
			<Name>ReductionValue</Name>
			<Value>-1</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_FSN_ARCHER_EMIYA_DENOUNCED_FRIEND</ModifierId>
			<Name>MessageThrottle</Name>
			<Value>20</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_FSN_ARCHER_EMIYA_DENOUNCED_FRIEND</ModifierId>
			<Name>StatementKey</Name>
			<Value>LOC_DIPLO_WARNING_LEADER_FSN_ARCHER_EMIYA_REASON_ANY</Value>
		</Row>
		<Row>
			<ModifierId>AGENDA_FSN_ARCHER_EMIYA_DENOUNCED_FRIEND</ModifierId>
			<Name>SimpleModifierDescription</Name>
			<Value>LOC_DIPLO_WARNING_EXIT_LEADER_FSN_ARCHER_EMIYA_ANY</Value>
		</Row>
	</ModifierArguments>

	<ModifierStrings>
		<Row ModifierId="AGENDA_FSN_ARCHER_EMIYA_FRIEND" Context="Sample" Text="LOC_TOOLTIP_SAMPLE_DIPLOMACY_ALL"/>
		<Row ModifierId="AGENDA_FSN_ARCHER_EMIYA_DENOUNCED_FRIEND" Context="Sample" Text="LOC_TOOLTIP_SAMPLE_DIPLOMACY_ALL"/>
	</ModifierStrings>

慢慢看吧,重点在于<SubjectRequirementSetId>和ReductionValue和InitialValue和ReductionTurns,还有两个文本。

举个例子:判断同性?REQUIREMENT_PLAYER_IS_SAME_SEX。

就是这样,这个功能如此实现的。

扫尾

我们刚刚做了新的特性,现在来给刚才没有添加的领袖特性说明添加新的说明。

新说明,用大佬工具1.5生成的
很好用,感谢大佬
InGame附加刚才的SQL

现在!运行游戏!

特性已经被显示出来了
最终的加载界面
效果是有效的

完成!接下来我们来讲如何上传!

Last updated

Was this helpful?