文明6吧 关注:514,155贴子:4,609,301

回复:最基础用官方工具制作mod和mod打包上传的教程。

只看楼主收藏回复

我先简单的介绍一下xml的语法规则
一对<>称之为标记(所有的标记都是官方规定的,你不能做任何形式的更改,编写是注意标记的大小写)。像<GameDate>我们可以叫它为GameDate标记(游戏数据)
</ GameDate >这样的代表当前标记结束,每个标记总是会跟着一个结束标记,这中间的部分我们称之为一个区块,像这样

这就是Types区块,如果A标记处于B标记的区块之内,我们称A标记为B标记的子标记,像上图的Row标记就是Types标记的子标记。
细心的同学可能会发现中间有个特殊的标记Row,它是这样的
<Row Type="POLICY_IMPERIAL_EXAMINATION" Kind="KIND_POLICY" />
它有两个属性即Type和 Kind,这两个属性的值分别是POLICY_IMPERIAL_EXAMINATION和KIND_POLICY这两个值就是游戏运行是会读取的内容,也是我们要修改的内容
其实这段完全可以写成这样


IP属地:辽宁17楼2017-02-25 17:02
回复
    它们的内容和效果是完全一样的,前者是后者的省略写法,其中,如果某个子标记的区块中只含有值的话,我们可以把它当作其父标记的属性,来写在父标记的<>内部(而不是区块内)
    比如<Type> POLICY_IMPERIAL_EXAMINATION</Type>可以写成<Row Type="POLICY_IMPERIAL_EXAMINATION" />注意标记和父标记和属性直间的空格和值的双引号。而如果一个标记其区块内没有任何子标记或者所有的子标记都改写成了属性,那么我们可以把结束标记省简写,变成在标记的最后加一个“/”如<Row Type="POLICY_IMPERIAL_EXAMINATION" Kind="KIND_POLICY" />这样。但是如果区块内还有子标记(或者值),则必须加上</Row>这样的结束标记。结束标记可以简写,但绝对不能省略。
    一个XML文档通常由头和主标记组成的
    文件头像这样<?xml version="1.0" encoding="utf-8"?>它表示这是一个xml文件,版本号为1.0,编码格式为UTF-8(如果你以其它的格式进行保存,会出现中文乱码,但不会影响文件运行),文件头不需要我们做任何更改。
    每个xml文件都会有一个主标记,它包含几个子标记,而它的子标记又会包含其他的子标记,如此越分越细,直到能够找到我们需要的值为止。它的结构如下图


    IP属地:辽宁18楼2017-02-25 17:04
    回复
      2025-08-01 01:10:43
      广告
      不感兴趣
      开通SVIP免广告
      另外像这样

      在<!-- -->中的内容称之为注释,这些内容不会对程序产生任何影响,你可以写一些东西来防止你忘记它们。


      IP属地:辽宁19楼2017-02-25 17:05
      回复
        现在我们了解了xml文件的语法规则之后,我们就可以着手修改了。


        IP属地:辽宁20楼2017-02-25 17:05
        回复
          第一部分

          Types这个标记定义了政策,所有的政策必须在这里出现一次才有效(事实上你在游戏中新增的任何内容都必须首先在types标记里声明一下,只有这样游戏才会读取它)
          这里我给我的政策起名为 POLICY_IMPERIAL_EXAMINATION 你可以给你的政策按照这个格式来起名,比如POLICY_XXXXX_XXXXXX(如果你的政策名包含多个单词,每个单词之前用“_”隔开)注意所有字母都是大写(其实如果你不按照这个格式来起名也可以,但看起来不标准,我建议大家用这个格式来起名字,哪怕只是汉语拼音)。后边的kind属性表示你定义的内容是什么,这里我们用KIND_POLICY来表示这是一个政策,(KIND_UNIT表示单位等,还有好多,你可以在游戏的date文件夹下查看)


          IP属地:辽宁21楼2017-02-25 17:07
          回复(2)
            第二部分
            我们新声明了一个政策,它叫POLICY_IMPERIAL_EXAMINATION,现在,我们需要在Policies标记下添加一些它的基本信息。

            其中PolicyType属性的值就是我们刚刚起的名字,Name和Description则是两个新建的属性,你可以同样按照LOC_POLICY_xxxxx_xxxx_NAME和LOC_POLICY_xxxxx_xxxx_DESCRIPTION来给他们起名,这两个值代表游戏中显示的名字和描述的文本,会在后面的翻译文件中使用。
            PrereqCivic属性代表的是它是由那个人文科技解锁的,这里我选择的是CIVIC_RECORDED_HISTORY(历史记录)代表科举制是由历史记录这个科技解锁的。(所有的人文科技都的名字都可以在date文件夹下的Civics文件中查看,如果你的英语不好,你可以对照文明六中文百科)。
            GovernmentSlotType属性表示的是这个政策属于那种类型的政策。目前游戏一共有五种类型的政策: SLOT_ECONOMIC 经济
            SLOT_MILITARY 军事
            SLOT_DIPLOMATIC 外交
            SLOT_GREAT_PERSON 伟人
            SLOT_WILDCARD 通用
            你可以根据需求选择,这里我选则的是经济。


            IP属地:辽宁22楼2017-02-25 17:08
            回复
              支持一下教程


              IP属地:四川23楼2017-02-25 17:09
              收起回复
                第三部分:
                这里指定的是失效政策,即什么政策会使你当前的政策淘汰(可以不选,那么你增加的政策就会永久生效)
                因为我觉得进入工业时代后科举制会失效,所以我选择的是歌剧与芭蕾这个科技研发后当前政策被淘汰,那么我在属性里写的是歌剧与芭蕾下的一个政策即大歌剧(注意是科技下的一个政策使你的政策淘汰,而不是科技本身)

                同样的PolicyType后边跟的是你的名字,而ObsoletePolicy则是淘汰你的政策的政策的名字,同样的,游戏自带政策的名字可以在date文件夹下的policies文件查看


                IP属地:辽宁25楼2017-02-25 17:11
                回复
                  2025-08-01 01:04:43
                  广告
                  不感兴趣
                  开通SVIP免广告
                  第四部分:
                  这里我把这两个标记区块放到一起来讲,因为它们的关系很紧密。
                  第一个区块PolicyModifiers定义了政策加成的名字,注意的是一次加成就应当定义一次,比如我的设计,加2文化和2科技,其实它是两个加成效果,所有我把它们分成两部分来写,即
                  <RowPolicyType="POLICY_IMPERIAL_EXAMINATION"ModifierId="POLICY_IMPERIAL_EXAMINATION_MODIFIER"/>和<RowPolicyType="POLICY_IMPERIAL_EXAMINATION"ModifierId="POLICY_IMPERIAL_EXAMINATION_MODIFIER_CULTURE"/>
                  PolicyType属性就是政策的名字,ModifierId就是加成效果的名字
                  这两个效果前者我起名为POLICY_IMPERIAL_EXAMINATION_MODIFIER,负责增加科技,后者起名为POLICY_IMPERIAL_EXAMINATION_MODIFIER_CULTURE负责增加文化。
                  这个名字是你自己起的,注意遵循官方格式。
                  第二个Modifiers区块定义了加成目标的类型,像这样
                  <RowModifierId="POLICY_IMPERIAL_EXAMINATION_MODIFIER"ModifierType="MODIFIER_PLAYER_CITIES_ADJUST_BUILDING_YIELD_MODIFIER"/>
                  其中ModifierId是你刚刚起的加成效果的名字,而ModifierType属性的值则是官方定义好的,它在date文件夹下的Modifiers文件中,这里定义了上百种加成方式,你可以根据你的需要来选择一种。这里我选择的是建筑加成。(图书馆属于建筑)


                  IP属地:辽宁26楼2017-02-25 17:12
                  回复(2)
                    求工具链接


                    IP属地:安徽27楼2017-02-25 17:13
                    收起回复
                      第五部分:
                      这部分就是对效果的实际定义了,像这样

                      一个完整的加成效果由两到三个不等的标记组成,比如图书馆加2科技这个效果,就可以这么写(我们之前已经定义过加成类型为建筑加成了,这一点请不要忘记)。
                      <RowModifierId="POLICY_IMPERIAL_EXAMINATION_MODIFIER"Name="BuildingType" Value="BUILDING_LIBRARY" />
                      <RowModifierId="POLICY_IMPERIAL_EXAMINATION_MODIFIER" Name="YieldType"Value="YIELD_SCIENCE" />
                      <RowModifierId="POLICY_IMPERIAL_EXAMINATION_MODIFIER"Name="Amount" Value="2" />
                      这三句话的含义分别是
                      第一句,定义了受到加成的类型为建筑,建筑是图书馆。
                      其中Name的属性是收到加成的类型,可以是建筑或者商路,或者城区,也可以是地块,地形,改良设施,当然单位也可以。具体的内容可以在date文件夹中查看。这里我选择的是建筑,即BuildingType(单位是UnitType,地形是TerrainType等等),value的属性就是具体的那一个建筑了,建筑的名字可以在date的building文件中查看,这里我选择的是BUILDING_LIBRARY(图书馆)
                      第二句。定义了加成点数的类型,
                      <RowModifierId="POLICY_IMPERIAL_EXAMINATION_MODIFIER"Name="YieldType" Value="YIELD_SCIENCE" />
                      其中Name属性我选的是点数加成(其他的还有视野加成,移动力加成,甚至有巨作和遗物加成)
                      而value属性后边的值同样可以在date文件夹下查看,这里我选择的是YIELD_SCIENCE(科技值)
                      第三句:就是具体加成多少点了
                      <RowModifierId="POLICY_IMPERIAL_EXAMINATION_MODIFIER"Name="Amount" Value="2" />
                      Name属性的值Amount代表点数,你可以写一个数字,比如2,代表加成2点,3就是三点咯。
                      但如果你写一百,那将意味着100%的加成,而不是增加100点(这其中的规律我也暂时没搞懂,等我慢慢研究吧)
                      这样一个完整的加成效果就完成了,即图书馆加2科技值
                      另外一个加成效果同样可以这样做,我们只需要把科技改成文化即可。
                      更多更复杂的加成效果(比如加视野,商路加金币,发现奇观加遗物,甚至于发现奇观加金币,你都可以仿照date文件加下的一些文件中的内容制作,几乎能满足你的任何需求)


                      IP属地:辽宁28楼2017-02-25 17:15
                      回复
                        支持楼主,请问市民工作范围的代码在哪个文件


                        来自Android客户端29楼2017-02-25 17:21
                        收起回复
                          下一个文件是ICON文件,这个文件指定了政策所用图标(即黄卡,红卡等等)

                          你只需把Name属性改成你ICON_POLICY_xxxx_xxxx后边的Atlas是具体的图标
                          ICON_ATLAS_ECONOMIC经济
                          ICON_ATLAS_MILITARY军事
                          ICON_ATLAS_DIPLOMATIC外交
                          ICON_ATLAS_PERSON伟人
                          ICON_ATLAS_WILDCARD通用
                          按照你的需求改,这里我改成经济
                          拓展:因为政策的图标每一类都是相同的,所以可以这样指定,但如果是文明或者领袖的图标,就需要你自己制作了,你需要用PS等软件制作一个DDS图标,因为比较复杂,这里我就不详细叙述了,有需要的可以上网上搜索一下。
                          特别指出的是,通过观察相关文件发现。城邦图标实际上是有三个部分组成的,即底色,背景,和丝带(logo)。底色,即城邦类型底色,像是宗教城邦都是白色的。背景是由几个大小不同的图片渲染完成的,它们完成了城邦图标的颜色渲染。丝带就是白色的logo,需要单独在ICON.xml文件中指定


                          IP属地:辽宁30楼2017-02-25 17:23
                          收起回复
                            额 我补充一点 有些mod初学者可能会碰到自己创建的中文文本明明都没问题 但是显示全部乱码 其实就是楼主所说的编码格式问题 自己注意一点 把xml格式改为utf-8编码就能解决


                            IP属地:浙江31楼2017-02-25 17:24
                            回复
                              2025-08-01 00:58:43
                              广告
                              不感兴趣
                              开通SVIP免广告
                              最后一个文件,text文件是用来翻译成各国语言的,我建议大家只需要翻译英语和汉语即可
                              你可以按照这种格式来翻译

                              其中Tag是你要翻译的词条,还记得我们在gameplay文件中定义的NAME和DESCRIPTION吗,这里我们要写出它们的具体内容,Language属性就是目标语言(一些特殊的语言有不同的翻译格式,比如西班牙语,但我猜你们用不上吧)
                              en_US代表美式英语,汉语像这样

                              需要指出的是,英式英语翻译格式跟其它语言也不同,但我们一般用美式英语就够了


                              IP属地:辽宁32楼2017-02-25 17:28
                              收起回复