编写modinfo

Modinfo文件其实也用xml语言写成。我们拿官方教程的Tutorial.modinfo文件来学习modinfo的结构:

<?xml version="1.0" encoding="utf-8"?>
<Mod id="17462E0F-1EE1-4819-AAAA-052B5896B02A" version="1">
    <Properties>
        <Name>LOC_MOD_TITLE</Name>
        <Teaser>LOC_MOD_TEASER</Teaser>
        <Description>LOC_MOD_DESCRIPTION</Description>
        <Authors>LOC_MOD_AUTHORS</Authors>

        <Trusted>1784197304</Trusted>
        <ShowInBrowser>AlwaysHidden</ShowInBrowser>
        <EnabledAtStartup>0</EnabledAtStartup>
    </Properties>
    <Components>
        <UpdateDatabase id="TUTORIAL_DATBASE_UPDATES">
            <Properties>
                <RuleSet>RULESET_TUTORIAL</RuleSet>
            </Properties>
            <Items>
                <File>Tutorial_Technologies.xml</File>
            </Items>
        </UpdateDatabase>
        <ImportFiles id="TUTORIAL_IMPORT_FILES">
            <Properties>
                <RuleSet>RULESET_TUTORIAL</RuleSet>
            </Properties>
            <Items>
                <File>TutorialScenarioBase.lua</File>
            </Items>
        </ImportFiles>
    </Components>
    <Settings>
        <Map id="TUTORIAL_MAP">
            <Properties>
                <Group>Tutorial_Maps</Group>
                <Name>LOC_TUTORIAL_MAP_NAME</Name>
                <Description>LOC_TUTORIAL_MAP_DESCRIPTION</Description>
            </Properties>
            <Items>
                <File>Tutorial.Civ6Map</File>
            </Items>
        </Map>
        <Custom id="TUTORIAL_SETTINGS">
            <Items>
                <File>Tutorial_Config.xml</File>
            </Items>
        </Custom>
    </Settings>
    <LocalizedText>
        <Text id="LOC_MOD_TITLE">
            <en_US>Tutorial</en_US>
        </Text>
        <Text id="LOC_MOD_TEASER">
            <en_US>A basic tutorial.</en_US>
        </Text>
        <Text id="LOC_MOD_DESCRIPTION">
            <en_US>This is a basic tutorial</en_US>
        </Text>
        <Text id="LOC_MOD_AUTHORS">
            <en_US>Firaxis</en_US>
        </Text>
        <Text id="LOC_TUTORIAL_MAP_NAME">
            <en_US>Tutorial Map</en_US>
        </Text>
        <Text id="LOC_TUTORIAL_MAP_DESCRIPTION">
            <en_US>A basic tutorial</en_US>
        </Text>
    </LocalizedText>
    <Files>
        <File>Tutorial.Civ6Map</File>
        <File>Tutorial.lua</File>
        <File>Tutorial_Config.xml</File>
        <File>Tutorial_Technologies.xml</File>
        <File>TutorialScenarioBase.lua</File>
    </Files>
</Mod>

一级标签 TagMod,它有两个属性 Propertiesidversionid是一个Mod的唯一序列号,不能与其它的Mod重复,生成id的方法一般来说是计算一段字符的哈希值(Hash),比如说你这个Mod叫做LOLI.modinfo,那么就可以把LOLI的Hash值c5a19b9ca363404934080167e5689330写到id里。当然偷懒的方法就是脸滚键盘,随便写一个长度相同的放上去。version是Mod的版本号,我们第一次写,所以就填1好了。

一个Mod的二级标签一般来说有5个,它们是:属性Properties元件Components设置Settings地区文本LocalizedText文件Files。(注:这可以在Assets/Database/Modding.sql文件里找到定义)

属性Properties

<Properties>
    <Name>LOC_MOD_TITLE</Name>
    <Teaser>LOC_MOD_TEASER</Teaser>
    <Description>LOC_MOD_DESCRIPTION</Description>
    <Authors>LOC_MOD_AUTHORS</Authors>

    <Trusted>1784197304</Trusted>
    <ShowInBrowser>AlwaysHidden</ShowInBrowser>
    <EnabledAtStartup>0</EnabledAtStartup>
</Properties>

定义Mod的基本信息,比如名称Name副标题Teaser描述Description作者Authors等等。这里它赋值都用了变量LOC_MOD_*,这些变量在LocalizedText标签中会有声明。

元件Components

定义了所有对游戏内容的修改。

<Components>
    <UpdateDatabase id="TUTORIAL_DATBASE_UPDATES">
        <Properties>
            <RuleSet>RULESET_TUTORIAL</RuleSet>
        </Properties>
        <Items>
            <File>Tutorial_Technologies.xml</File>
        </Items>
    </UpdateDatabase>
    <ImportFiles id="TUTORIAL_IMPORT_FILES">
        <Properties>
            <RuleSet>RULESET_TUTORIAL</RuleSet>
        </Properties>
        <Items>
            <File>TutorialScenarioBase.lua</File>
        </Items>
    </ImportFiles>
</Components>

在这个标签下我们要加入相应类型的修改文件,用<Items>列出,以及它们适用的规则(RuleSet),自定义的规则(RuleSet)需要在Settings中定义,默认为标准规则Standard RuleSet(规则是比较进阶的内容在此不涉及),可以省略(通常省略)。

Components下可以包含6种类别的修改,每种类别的修改都可以放复数个,从常用到冷门排列如下:

  • UpdateDatabase,更新数据库。用于修改游戏内容,比如在数据库章节中提到的各种操作就是属于这个类型,阿兹特克DLC中的文明特性、领袖特性和特殊建筑也都属于这一类别。(非常重要,最最常用)

  • LocalizedText,地区文本。用于添加不同语言的文本信息(中、英等等),文本信息都会放在单独的_Text.xml文件中,与数据库信息区别开来。(非常重要)

  • ImportFiles,导入文件。其实这个是万金油的类型,一般来说所有的Lua文件、sql文件都通过这种方法导入,以至于下面三种类型基本不会使用。(比较重要)

  • GameplayScripts,游戏脚本。用于添加游戏运行所需的自定义函数,一般都是Lua文件。

  • ModArt,多媒体文件。可以定义单位、建筑、改良等的模型。

  • UserInterface,用户界面,如文明百科等。

设置Settings

用于定制游戏的设置界面。比如说一旦新加了一个文明,我们需要在选择文明的那个选择框下加入一个新的条目(可以参考阿兹特克DLC)。这一项比较进阶,我们暂时不涉及。

地区文本LocalizedText

<LocalizedText>
    <Text id="LOC_MOD_TITLE">
        <en_US>Tutorial</en_US>
    </Text>
    ...
</LocalizedText>

这里的地区文本与元件设置里的地区文本不同,它仅被用于本Modinfo文件(在属性Properties二级标签,之前介绍过)之类的信息,可以理解为变量替换。当然图省力大可不必这么做,只要在前面直接写就可以了,不需要用到“变量替换”这种东西。

文件Files

<Files>
    <File>Tutorial.Civ6Map</File>
    <File>Tutorial.lua</File>
    <File>Tutorial_Config.xml</File>
    <File>Tutorial_Technologies.xml</File>
    <File>TutorialScenarioBase.lua</File>
</Files>

需要包含所有Mod包含的文件,否则相应的修改不能起到效果。

一个简单的例子

我们觉得沿海1粮1金实在是太不友好了,想做一个Mod修改。Mod名称可以叫做:RichCoast。我们可以这么写RichCoast.modinfo

<?xml version="1.0" encoding="utf-8"?>
<!-- 这里的id 是RichCoast的hash值 -->
<Mod id="8a1e553b-1acf-e4fe-af41-a514008b7672" version="1">
    <Properties>
        <Name>Rich Coast</Name>
        <Teaser>LOC_MOD_TEASER</Teaser> <!-- 这里用了变量替换,替换的文字在下面 -->

        <ShowInBrowser>Visible</ShowInBrowser>
        <EnabledByDefault>1</EnabledByDefault> <!-- 默认开启这个Mod -->
        <EnabledAtStartup>1</EnabledAtStartup>
    </Properties>
    <LocalizedText>
        <Text id="LOC_MOD_TEASER">
            <en_US>Coast tile now yields more.</en_US>
            <zh_Hans_CN>沿海地块产量增加。</zh_Hans_CN>
        </Text>
    </LocalizedText>
    <Components>
        <UpdateDatabase id="RICH_COAST_DATBASE_UPDATES">
            <Items>
                <File>Change.xml</File>
            </Items>
        </UpdateDatabase>
    </Components>
    <Files>
        <File>Change.xml</File>
    </Files>
</Mod>

Change.xmlRichCoast.modinfo被放在一个目录RichCoast下,它的内容是这个样子的:

<?xml version="1.0" encoding="UTF-8"?>
<GameInfo>
    <Terrain_YieldChanges>
        <Update>
            <Where TerrainType="TERRAIN_COAST" YieldType="YIELD_FOOD" />
            <Set YieldChange="2" />
        </Update>
    </Terrain_YieldChanges>
</GameInfo>

这样,我们的海岸产量就从1粮1金变为了2粮1金。

RichCoast文件夹复制到游戏的Mods文件夹下,便可以完成安装,打开游戏看看效果吧。

results matching ""

    No results matching ""