hizhj 发表于 2021-5-17 13:59

关于道路和单位经验增强MOD及文明6长城加强版MOD(二楼)的测试历程及个人体会

本帖最后由 hizhj 于 2021-5-18 07:27 编辑

有前辈提供了道路和单位经验增强MOD:https://bbs.3dmgame.com/forum.php?mod=viewthread&tid=5332132

感觉文明6的道路跑的太慢了,单位升级也好难(我会说我经常到结束都没几个高级的兵吗),所以都增强了下:
道路由原来的远古1 古典1 工业时代0.75 现代0.5的移动力消耗改成远古0.65 中世纪0.45 工业时代0.35 现代0.3的消耗,并且建造者可以铺设道路,相应的军事工程师不在可以铺设道路(只能铺2格道路,简直逗{:3_94:})
所有单位的升级所需经验减少40%,并且由原来升一级后攻击蛮族经验变为1改成升两级后蛮族经验达到阈值


我将参数调整了下,
道路类型      原消耗      修改后      SupportsBridges      UnitType
ANCIENT                1      0.8      false      true      UNIT_MILITARY_ENGINEER      UNIT_BUILDER
MEDIEVAL      1      0.7      true      true      UNIT_MILITARY_ENGINEER      UNIT_BUILDER
INDUSTRIAL      0.75      0.60      true      true      UNIT_MILITARY_ENGINEER      UNIT_BUILDER
MODERN                0.50      0.4      true      true      UNIT_MILITARY_ENGINEER      UNIT_BUILDER

更改后的文件RoutesAndExp.xml内容中相关道路部分的代码:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<GameInfo>
      <Routes>
                <Update>
                        <Where RouteType="ROUTE_ANCIENT_ROAD"/>
                        <Set MovementCost="0.8"/>
                </Update>
      <Routes>
                <Update>
                        <Where RouteType="ROUTE_ANCIENT_ROAD"/>
                        <Set SupportsBridges="true"/>
                </Update>
                <Update>
                        <Where RouteType="ROUTE_MEDIEVAL_ROAD"/>
                        <Set MovementCost="0.70"/>
                </Update>
                <Update>
                        <Where RouteType="ROUTE_INDUSTRIAL_ROAD"/>
                        <Set MovementCost="0.6"/>
                </Update>
                <Update>
                        <Where RouteType="ROUTE_MODERN_ROAD"/>
                        <Set MovementCost="0.4"/>
                </Update>
      </Routes>

      <Route_ValidBuildUnits>
                <Update>
                        <Where RouteType="ROUTE_ANCIENT_ROAD"/>
                        <Set UnitType="UNIT_BUILDER"/>
                </Update>
                <Update>
                        <Where RouteType="ROUTE_MEDIEVAL_ROAD"/>
                        <Set UnitType="UNIT_BUILDER"/>
                </Update>
                <Update>
                        <Where RouteType="ROUTE_INDUSTRIAL_ROAD"/>
                        <Set UnitType="UNIT_BUILDER"/>
                </Update>
                <Update>
                        <Where RouteType="ROUTE_MODERN_ROAD"/>
                        <Set UnitType="UNIT_BUILDER"/>
                </Update>
                <Update>
                        <Where RouteType="ROUTE_RAILROAD"/>
                        <Set UnitType="UNIT_BUILDER"/>
                </Update>
      </Route_ValidBuildUnits>


</GameInfo>

能够正常进入游戏,但是好像感觉效果不对。
打开sqlite数据库的routes表,内容如下:

第一条好像是生效了,但是后面的道路类型数据和上面代码的设定不同。
在Database.log文件中有相应的错误信息:
ERROR: Database::XMLSerializer (RoutesAndExp.xml): 'Row' or 'Delete' expected, got 'Routes'.
: In XMLSerializer while updating table Routes from file RoutesAndExp.xml.
: Validating Foreign Key Constraints...
: Passed Validation.

但是从网上查了下XML文件中SQL语句的书写格式:https://www.bilibili.com/read/cv7179375
好像上面的语句应该没有问题。
为何设定没有生效?


[*]PS:求教一下,在MOD中设定修五种道路(包括铁路),以及隧道,使用建造者而不是军事工程师上文中的语句是不是正确?
[*]PS1:编辑了正文,因为使用“代码”模式的话,代码段的文字就没有换行效果了,读起来很累。
[*]PS1:如果要对已经存在的的行进行编辑,是用<ROW>还是<UPDATE>还是<REPLACE>


谢谢!




hizhj 发表于 2021-5-17 15:25

另外一个前辈的MOD在加载时也出错了。
文明6长城加强版MOD
https://bbs.3dmgame.com/thread-6097956-1-1.html
长城加强版 可修筑在山上 带有文化炸弹 可以无视地形地貌任意修筑
长城修到哪里 哪里就是你的 条件是无主之地

https://att.3dmgame.com/att/forum/202011/08/192231ym8hk9kt2kkyrryq.jpg
这个MOD很强大,功能很牛*!

MOD的XML文件相关内容:
<?xml version="1.0" encoding="utf-8"?>
<!-- GameData1 -->
<!-- Author: CHM -->
<!-- DateCreated: 2020/10/31 9:18:42 -->
<GameData>
        <Types>
                <Row Type="IMPROVEMENT_MING_GREAT_WALL" Kind="KIND_IMPROVEMENT"/>
        </Types>

        <Improvements>
                <Row ImprovementType="IMPROVEMENT_MING_GREAT_WALL" PrereqTech="TECH_MASONRY"Buildable="1" BuildInLine="true"    Description="LOC_IMPROVEMENT_MING_GREAT_WALL_DESCRIPTION" CanBuildOutsideTerritory="1" Icon="ICON_IMPROVEMENT_GREAT_WALL" Name="LOC_IMPROVEMENT_MING_GREAT_WALL_NAME"   PlunderType="PLUNDER_GOLD" PlunderAmount="200" DefenseModifier="8" GrantFortification="4" Housing="2" />/>
        </Improvements>


   <!-- 省略-->

</GameData>

static/image/hrline/line5.png


我在加载时,Database.log提示:
: Validating Foreign Key Constraints...
ERROR: Invalid Reference on Improvement_ValidFeatures.FeatureType - "FEATURE_FLOODPLAINS_GRASSLAND" does not exist in Features
ERROR: Invalid Reference on Improvement_ValidFeatures.FeatureType - "FEATURE_FLOODPLAINS_PLAINS" does not exist in Features
ERROR: Invalid Reference on Improvement_ValidFeatures.FeatureType - "FEATURE_GEOTHERMAL_FISSURE" does not exist in Features
ERROR: Invalid Reference on Improvement_ValidResources.ResourceType - "RESOURCE_AMBER" does not exist in Resources
ERROR: Invalid Reference on Improvement_ValidResources.ResourceType - "RESOURCE_HONEY" does not exist in Resources
ERROR: Invalid Reference on Improvement_ValidResources.ResourceType - "RESOURCE_MAIZE" does not exist in Resources
ERROR: Invalid Reference on Improvement_ValidResources.ResourceType - "RESOURCE_OLIVES" does not exist in Resources
ERROR: Invalid Reference on Improvement_ValidResources.ResourceType - "RESOURCE_TURTLES" does not exist in Resources
: Failed Validation.
ERROR: no such table: Types
: In Query - insert into Types('Type', 'Kind') values (?, ?);
: In XMLSerializer while updating table Types from file Improvements.xml.


好像提示,不存在“Types”表,这完全不可能啊!






可能是由于提示错误的问题,Types表中没有IMPROVEMENT_MING_GREAT_WALL:



MOD文件内容应该没问题,可为何会提示错误?

求战术指导!

hizhj 发表于 2021-5-17 17:23

继续对明长城MOD进行测试。对Ming Great Wall.modinfo进行修改,删除了整个<FrontEndActions>标签。
<InGameActions>标签中,每个<UpdateDatabase>中均加入下面的内容:
                <Properties>
                        <LoadOrder>200</LoadOrder>
                </Properties>
其他不动。
根据网上教程,剩下的内容,在游戏程序打开时应该不会载入此MOD的文件,但是实际上还是载入了:
: Validating Foreign Key Constraints...
ERROR: Invalid Reference on Improvement_ValidFeatures.FeatureType - "FEATURE_FLOODPLAINS_GRASSLAND" does not exist in Features
ERROR: Invalid Reference on Improvement_ValidFeatures.FeatureType - "FEATURE_FLOODPLAINS_PLAINS" does not exist in Features
ERROR: Invalid Reference on Improvement_ValidFeatures.FeatureType - "FEATURE_GEOTHERMAL_FISSURE" does not exist in Features
ERROR: Invalid Reference on Improvement_ValidResources.ResourceType - "RESOURCE_AMBER" does not exist in Resources
ERROR: Invalid Reference on Improvement_ValidResources.ResourceType - "RESOURCE_HONEY" does not exist in Resources
ERROR: Invalid Reference on Improvement_ValidResources.ResourceType - "RESOURCE_MAIZE" does not exist in Resources
ERROR: Invalid Reference on Improvement_ValidResources.ResourceType - "RESOURCE_OLIVES" does not exist in Resources
ERROR: Invalid Reference on Improvement_ValidResources.ResourceType - "RESOURCE_TURTLES" does not exist in Resources
: Failed Validation.

很奇怪啊!
新加入部分应该能控制文件在文明本体及DLC之后才载入,但是还是提前载入了。
查询Types、Improvements、Improvement_ValidTerrains等表,没有发现定义的新建筑及相关内容。

超出能力范围太多,积极寻求战术指导!

RoutesAndExp这个MOD也做了相似的修改,令人喜闻乐见的是,同样没有得到期待中的改变。




chenhuamin092 发表于 2021-5-17 20:01

我很久没试过长城了 因为我在研究新的东西 我看的没问题啊

hizhj 发表于 2021-5-17 21:42

chenhuamin092 发表于 2021-5-17 20:01
我很久没试过长城了 因为我在研究新的东西 我看的没问题啊

多谢回复。
是不是其他MOD影响的?
我所有的MOD都删了。先实验比较简单的一个,文明6(Sid Meier’s Civilization VI)道路和单位经验增强MOD,RoutesAndExp。
该MOD原版和我的修改的都没有提示错误。
有关道路除了铁路部分的没有生效,其他都生效了。
有关经验的也生效了。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<GameInfo>
        <Routes>
                <Update>
                        <Where RouteType="ROUTE_ANCIENT_ROAD"/>
                        <Set MovementCost="0.75" SupportsBridges="1"/>                       <!--SupportsBridges="1" 为新增项目 -->
                </Update>

                <Update>
                        <Where RouteType="ROUTE_MEDIEVAL_ROAD"/>
                        <Set MovementCost="0.50"/>
                </Update>

                <Update>
                        <Where RouteType="ROUTE_INDUSTRIAL_ROAD"/>
                        <Set MovementCost="0.3"/>
                </Update>

                <Update>
                        <Where RouteType="ROUTE_MODERN_ROAD"/>
                        <Set MovementCost="0.20"/>
                </Update>

                <Update>
                        <Where RouteType="ROUTE_RAILROAD"/>                                       <!--新增项目,未生效 -->
                        <Set MovementCost="0.15"/>
                </Update>
        </Routes>

<!--新增项目:Route_ValidBuildUnits -->
        <Route_ValidBuildUnits>
                <Update>
                        <Where RouteType="ROUTE_ANCIENT_ROAD"/>
                        <Set UnitType="UNIT_BUILDER"/>
                </Update>
                <Update>
                        <Where RouteType="ROUTE_MEDIEVAL_ROAD"/>
                        <Set UnitType="UNIT_BUILDER"/>
                </Update>
                <Update>
                        <Where RouteType="ROUTE_INDUSTRIAL_ROAD"/>
                        <Set UnitType="UNIT_BUILDER"/>
                </Update>
                <Update>
                        <Where RouteType="ROUTE_MODERN_ROAD"/>
                        <Set UnitType="UNIT_BUILDER"/>
                </Update>
                <Update>
                        <Where RouteType="ROUTE_RAILROAD"/>                                       <!-- 未生效 -->
                        <Set UnitType="UNIT_BUILDER"/>
                </Update>
        </Route_ValidBuildUnits>

        <GlobalParameters>
                <Update>
                        <Where Name="EXPERIENCE_MAX_BARB_LEVEL"/>
                        <Set Value="3"/>
                </Update>
                <Update>
                        <Where Name="EXPERIENCE_NEEDED_FOR_NEXT_LEVEL_MULTIPLIER"/>
                        <Set Value="3"/>
                </Update>
        </GlobalParameters>
</GameInfo>



Route表

Route_ValidBuildUnits表

GlobalParameters表
铁路不能生效,是不是这个MOD装载时,还没有装载铁路的相关定义?还是被别的内容冲掉了?
我用Everything软件搜索了整个CIV6目录,查找包含LoadOrder的文件
(everything快速搜索文件夹和文件软件。下载链接:链接: https://pan.baidu.com/s/1zD-NnzxjIdCZjj6ODEOs6Q 提取码: u6bd)
搜索目标:nowholeword:H:\Civ6.v1.0.9.9\ content:LoadOrder
结果:
H:\Civ6.v1.0.9.9\DLC\AlexanderScenario\AlexanderScenario.modinfo
H:\Civ6.v1.0.9.9\DLC\AustraliaScenario\AustraliaScenario.modinfo
H:\Civ6.v1.0.9.9\DLC\BlackDeathScenario\BlackDeathScenario.modinfo
H:\Civ6.v1.0.9.9\DLC\CivRoyaleScenario\CivRoyaleScenario.modinfo
H:\Civ6.v1.0.9.9\DLC\Expansion1\Expansion1.modinfo
H:\Civ6.v1.0.9.9\DLC\Expansion2\Expansion2.modinfo
H:\Civ6.v1.0.9.9\DLC\Indonesia_KhmerScenario\Indonesia_KhmerScenario.modinfo
H:\Civ6.v1.0.9.9\DLC\NubiaScenario\NubiaScenario.modinfo
H:\Civ6.v1.0.9.9\DLC\PiratesScenario\PiratesScenario.modinfo
H:\Civ6.v1.0.9.9\DLC\PolandScenario\PolandScenario.modinfo
H:\Civ6.v1.0.9.9\DLC\VikingsScenario\VikingsScenario.modinfo
H:\Civ6.v1.0.9.9\DLC\WarMachineScenario\WarMachineScenario.modinfo
除了Expansion2.modinfo中,LoadOrder是-100,其他都是100,还有很多DLC没有这个设置值;原版也没有这个值。
这说明Expansion2是最先装载,是否要先于原版?
用户的MOD的装载顺序是大于100还是小于-100?
文明6启动时,原版,各模组,包括DLC和用户MOD,装载的顺序是什么?
是否后面装载的模组会覆盖早装载的模组?


hizhj 发表于 2021-5-17 22:00

chenhuamin092 发表于 2021-5-17 20:01
我很久没试过长城了 因为我在研究新的东西 我看的没问题啊

包含铁路的文件
H:\Civ6.v1.0.9.9\DLC\BlackDeathScenario\Data\BlackDeathScenario_RemoveData.xml
H:\Civ6.v1.0.9.9\DLC\Expansion2\Data\Expansion2_Routes.xml
H:\Civ6.v1.0.9.9\DLC\Expansion2\Binaries\Win64\GameCore_XP2_FinalRelease.map
H:\Civ6.v1.0.9.9\Base\ArtDefs\Routes.artdef
H:\Civ6.v1.0.9.9\DLC\Expansion2\ArtDefs\Routes.artdef
H:\Civ6.v1.0.9.9\DLC\Expansion2\UI\Loaders\TutorialLoader_Expansion2.lua
H:\Civ6.v1.0.9.9\DLC\Expansion2\UI\Replacements\UnitPanel_Expansion2.lua
H:\Civ6.v1.0.9.9\DLC\WarMachineScenario\Data\WarMachineScenario_GameplayData.xml
H:\Civ6.v1.0.9.9\DLC\Expansion2\ArtDefs\WorldViewRoutes.artdef
上面的文件中,根据文件名来判断,只有Expansion2_Routes.xml是有关铁路定义的文件。.lua文件应该只是有关铁路的控制部分。
Expansion2_Routes.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<GameInfo>
        <Types>
                <Row Type="ROUTE_RAILROAD" Kind="KIND_ROUTE"/>
        </Types>
        <Routes>
    <!-- Note: For AI purposes, we must assume that anything with this placement value or higher needs to be built with a unit. -->
                <Row RouteType="ROUTE_RAILROAD" Name="LOC_ROUTE_RAILROAD_NAME" Description="LOC_ROUTE_RAILROAD_DESCRIPTION" MovementCost="0.25" SupportsBridges="true" PlacementValue="5" PlacementRequiresRoutePresent="false" PlacementRequiresOwnedTile="false"/>
        </Routes>
<Routes_XP2>
    <Row RouteType="ROUTE_ANCIENT_ROAD" BuildWithUnitChargeCost="1"/>
    <Row RouteType="ROUTE_MEDIEVAL_ROAD" BuildWithUnitChargeCost="1"/>
    <Row RouteType="ROUTE_INDUSTRIAL_ROAD" BuildWithUnitChargeCost="1"/>
    <Row RouteType="ROUTE_MODERN_ROAD" BuildWithUnitChargeCost="1"/>
    <Row RouteType="ROUTE_RAILROAD" BuildWithUnitChargeCost="0" BuildOnlyWithUnit="true" PrereqTech="TECH_STEAM_POWER"/>
</Routes_XP2>
<Route_ResourceCosts>
    <Row RouteType="ROUTE_RAILROAD" ResourceType="RESOURCE_IRON" BuildWithUnitCost="1"/>
    <Row RouteType="ROUTE_RAILROAD" ResourceType="RESOURCE_COAL" BuildWithUnitCost="1"/>
</Route_ResourceCosts>
        <Route_ValidBuildUnits>
                <Row RouteType="ROUTE_RAILROAD" UnitType="UNIT_MILITARY_ENGINEER"/>
        </Route_ValidBuildUnits>
</GameInfo>

UnitPanel_Expansion2.lua文件相关内容:
function LateCheckOperationBeforeAdd( tResults: table, kActionsTable: table, actionHash:number, isDisabled:boolean, tooltipString:string, overrideIcon:string )
        if (tResults ~= nil and tResults == "ROUTE_RAILROAD") then
                overrideIcon = "ICON_ROUTE_RAILROAD";
                return isDisabled, tooltipString, overrideIcon;
        end

        -- Not a railroad, fall through to the base version.
        return BASE_LateCheckOperationBeforeAdd( tResults, kActionsTable, actionHash, isDisabled, tooltipString, overrideIcon );
end

可见,文明6目录中有关铁路的定义/修改的文件,只有Expansion2_Routes.xml文件。
既然在MOD中修改有关铁路的参数没有生效,原因大致有:
1、MOD运行时还没有有关铁路的数据库记录(会不会报错?);
2、MOD运行后,XP2的数值更新了MOD的设定值(即,XP2运行晚于MOD);
3,语句有问题。
4、其他原因。


hizhj 发表于 2021-5-17 22:10

hizhj 发表于 2021-5-17 22:00
包含铁路的文件
H:\Civ6.v1.0.9.9\DLC\BlackDeathScenario\Data\BlackDeathScenario_RemoveData.xml
H:\C ...

宾果!
这下OK了。
RoutesAndExp MOD的RoutesAndExp.modinfo文件中,设置该MOD的启动顺序延后:
        <Components>
                <UpdateDatabase id="RoutesAndExp_GAMEPLAY_DATA">
                        <Properties>
                                <LoadOrder>200</LoadOrder>
                        </Properties>
                        <Items>
                                <File>RoutesAndExp.xml</File>
                        </Items>
                </UpdateDatabase>
        </Components>

这样,有关铁路的设置都生效了。
哇咔咔。
下面再测试@chenhuamin092 老大的长城MOD。

hizhj 发表于 2021-5-18 00:41

本帖最后由 hizhj 于 2021-5-18 07:35 编辑

chenhuamin092 发表于 2021-5-17 20:01
我很久没试过长城了 因为我在研究新的东西 我看的没问题啊
长城加强MOD测试

static/image/hrline/line6.png


1、长城加强MOD原版+RoutesAndExp MOD一起
SELECT ImprovementType,Housing
FROM Improvements
WHERE ImprovementType LIKE "IMPROVEMENT_MING%";

SELECT ImprovementType, TerrainType
FROM Improvement_ValidTerrains
WHERE ImprovementType LIKE "IMPROVEMENT_MING%";
都没有返回。
Database.log
: StartupErrorMessages.xml
: Input XML does not contain database entry tags. GameData, GameInfo or Database
: Validating Foreign Key Constraints...
: Passed Validation.
: Validating Foreign Key Constraints...
: Passed Validation.
: Initializing FullTextSearch
: Validating Foreign Key Constraints...
: Passed Validation.
ERROR: no such table: Types
: In Query - insert into Types('Type', 'Kind') values (?, ?);
: In XMLSerializer while updating table Types from file Improvements.xml.
: Validating Foreign Key Constraints...
: Passed Validation.
: Database found. Checking versions...
: Database is up-to-date!
: FTS - Creating Context
: Validating Foreign Key Constraints...
: Passed Validation.
: Validating Foreign Key Constraints...
: Passed Validation.
: FTS - Creating Context
: FTS - Creating Context
: FTS - Creating Context
: FTS - Creating Context
: FTS - Creating Context
Types表难道原版没有?
2、只有原版长城加强MOD
游戏程序完成加载但没有读入存档:
: StartupErrorMessages.xml
: Input XML does not contain database entry tags. GameData, GameInfo or Database
: Validating Foreign Key Constraints...
: Passed Validation.
: Validating Foreign Key Constraints...
: Passed Validation.
: Initializing FullTextSearch
: Validating Foreign Key Constraints...
: Passed Validation.
ERROR: no such table: Types
: In Query - insert into Types('Type', 'Kind') values (?, ?);
: In XMLSerializer while updating table Types from file Improvements.xml.
: Validating Foreign Key Constraints...
: Passed Validation.
: Database found. Checking versions...
: Database is up-to-date!
: FTS - Creating Context
测试:
SELECT *
FROM Improvement_ValidBuildUnits
WHERE ImprovementType="IMPROVEMENT_MING_GREAT_WALL";
无结果返回。
#
SELECT ImprovementType, PrereqTech, Housing
FROM Improvements
WHERE ImprovementType LIKE "IMPROVEMENT_MING%";
无结果返回。
#
此阶段该MOD有部分功能被激发,但是不知什么原因没有成功。
#
新建游戏/加载存档后:
: FTS - Creating Context
ERROR: no such table: Types
: In Query - insert into Types('Type', 'Kind') values (?, ?);
: In XMLSerializer while updating table Types from file Improvements.xml.
: Validating Foreign Key Constraints...
: Passed Validation.
ERROR: UNIQUE constraint failed: Improvement_ValidBuildUnits.ImprovementType, Improvement_ValidBuildUnits.UnitType
: While executing - 'insert into Improvement_ValidBuildUnits('ImprovementType', 'UnitType') values (?, ?);'
: In XMLSerializer while inserting row into table insert into Improvement_ValidBuildUnits('ImprovementType', 'UnitType') withvalues (IMPROVEMENT_MING_GREAT_WALL, UNIT_BUILDER, ).
: In XMLSerializer while updating table Improvement_ValidBuildUnits from file Improvements.xml.
ERROR: UNIQUE constraint failed: Improvement_ValidBuildUnits.ImprovementType, Improvement_ValidBuildUnits.UnitType
: Validating Foreign Key Constraints...
: Passed Validation.
: FTS - Creating Context
: FTS - Creating Context
: FTS - Creating Context
: FTS - Creating Context
: FTS - Creating Context
#
测试:
SELECT Type, Kind
FROM Types
WHERE Type="IMPROVEMENT_MING_GREAT_WALL";
结果:
IMPROVEMENT_MING_GREAT_WALL      KIND_IMPROVEMENT
#
SELECT ImprovementType, PrereqTech, Housing
FROM Improvements
WHERE ImprovementType LIKE "IMPROVEMENT_MING%";
结果:
IMPROVEMENT_MING_GREAT_WALL      TECH_MASONRY      2
#
SELECT *
FROM Improvements_XP2
WHERE ImprovementType="IMPROVEMENT_MING_GREAT_WALL";
结果:
IMPROVEMENT_MING_GREAT_WALL      0      1      0      1
#
SELECT ImprovementType, TerrainType
FROM Improvement_ValidTerrains
WHERE ImprovementType LIKE "IMPROVEMENT_MING%";
结果:
IMPROVEMENT_MING_GREAT_WALL      TERRAIN_DESERT
IMPROVEMENT_MING_GREAT_WALL      TERRAIN_DESERT_HILLS
IMPROVEMENT_MING_GREAT_WALL      TERRAIN_DESERT_MOUNTAIN
IMPROVEMENT_MING_GREAT_WALL      TERRAIN_GRASS
IMPROVEMENT_MING_GREAT_WALL      TERRAIN_GRASS_HILLS
IMPROVEMENT_MING_GREAT_WALL      TERRAIN_GRASS_MOUNTAIN
IMPROVEMENT_MING_GREAT_WALL      TERRAIN_PLAINS
IMPROVEMENT_MING_GREAT_WALL      TERRAIN_PLAINS_HILLS
IMPROVEMENT_MING_GREAT_WALL      TERRAIN_PLAINS_MOUNTAIN
IMPROVEMENT_MING_GREAT_WALL      TERRAIN_SNOW
IMPROVEMENT_MING_GREAT_WALL      TERRAIN_SNOW_HILLS
IMPROVEMENT_MING_GREAT_WALL      TERRAIN_SNOW_MOUNTAIN
IMPROVEMENT_MING_GREAT_WALL      TERRAIN_TUNDRA
IMPROVEMENT_MING_GREAT_WALL      TERRAIN_TUNDRA_HILLS
IMPROVEMENT_MING_GREAT_WALL      TERRAIN_TUNDRA_MOUNTAIN
#
SELECT *
FROM Improvement_ValidFeatures
WHERE ImprovementType="IMPROVEMENT_MING_GREAT_WALL";
结果:
IMPROVEMENT_MING_GREAT_WALL      FEATURE_BURNING_FOREST               
IMPROVEMENT_MING_GREAT_WALL      FEATURE_BURNING_JUNGLE               
IMPROVEMENT_MING_GREAT_WALL      FEATURE_BURNT_FOREST               
IMPROVEMENT_MING_GREAT_WALL      FEATURE_BURNT_JUNGLE               
IMPROVEMENT_MING_GREAT_WALL      FEATURE_FLOODPLAINS               
IMPROVEMENT_MING_GREAT_WALL      FEATURE_FLOODPLAINS_GRASSLAND               
IMPROVEMENT_MING_GREAT_WALL      FEATURE_FLOODPLAINS_PLAINS               
IMPROVEMENT_MING_GREAT_WALL      FEATURE_FOREST               
IMPROVEMENT_MING_GREAT_WALL      FEATURE_GEOTHERMAL_FISSURE               
IMPROVEMENT_MING_GREAT_WALL      FEATURE_JUNGLE               
IMPROVEMENT_MING_GREAT_WALL      FEATURE_MARSH               
IMPROVEMENT_MING_GREAT_WALL      FEATURE_OASIS               
IMPROVEMENT_MING_GREAT_WALL      FEATURE_VOLCANIC_SOIL               
#
SELECT *
FROM Improvement_ValidBuildUnits
WHERE ImprovementType="IMPROVEMENT_MING_GREAT_WALL";
结果:
ImprovementType      UnitType      ConsumesCharge      ValidRepairOnly
IMPROVEMENT_MING_GREAT_WALL      UNIT_BUILDER      1      0
#
SELECT *
FROM Improvement_ValidResources
WHERE ImprovementType="IMPROVEMENT_MING_GREAT_WALL";
结果:
ImprovementType      ResourceType      MustRemoveFeature
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_ALUMINUM      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_AMBER      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_ANTIQUITY_SITE      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_BANANAS      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_CATTLE      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_CINNAMON      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_CITRUS      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_CLOVES      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_COAL      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_COCOA      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_COFFEE      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_COPPER      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_COSMETICS      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_COTTON      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_CRABS      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_DEER      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_DIAMONDS      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_DYES      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_FISH      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_FURS      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_GYPSUM      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_HONEY      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_HORSES      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_INCENSE      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_IRON      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_IVORY      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_JADE      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_JEANS      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_MAIZE      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_MARBLE      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_MERCURY      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_NITER      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_OIL      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_OLIVES      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_PEARLS      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_PERFUME      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_RICE      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_SALT      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_SHEEP      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_SHIPWRECK      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_SILK      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_SILVER      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_SPICES      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_STONE      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_SUGAR      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_TOBACCO      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_TOYS      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_TRUFFLES      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_TURTLES      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_URANIUM      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_WHALES      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_WHEAT      0
IMPROVEMENT_MING_GREAT_WALL      RESOURCE_WINE      0
#
SELECT *
FROM Improvement_YieldChanges
WHERE ImprovementType="IMPROVEMENT_MING_GREAT_WALL";
结果:
ImprovementType      YieldType      YieldChange
IMPROVEMENT_MING_GREAT_WALL      YIELD_CULTURE      1
IMPROVEMENT_MING_GREAT_WALL      YIELD_FAITH      1
IMPROVEMENT_MING_GREAT_WALL      YIELD_FOOD      2
IMPROVEMENT_MING_GREAT_WALL      YIELD_GOLD      2
IMPROVEMENT_MING_GREAT_WALL      YIELD_PRODUCTION      1
IMPROVEMENT_MING_GREAT_WALL      YIELD_SCIENCE      1
#
SELECT *
FROM Improvement_Tourism
WHERE ImprovementType="IMPROVEMENT_MING_GREAT_WALL";
结果:
ImprovementType      TourismSource      PrereqCivic      PrereqTech      ScalingFactor
IMPROVEMENT_MING_GREAT_WALL      TOURISMSOURCE_CULTURE                TECH_FLIGHT      200
#
SELECT *
FROM Improvement_Adjacencies
WHERE ImprovementType="IMPROVEMENT_MING_GREAT_WALL";
结果:
ImprovementType      YieldChangeId
IMPROVEMENT_MING_GREAT_WALL      Wall_Culture
IMPROVEMENT_MING_GREAT_WALL      Wall_Faith
IMPROVEMENT_MING_GREAT_WALL      Wall_Food
IMPROVEMENT_MING_GREAT_WALL      Wall_Gold
IMPROVEMENT_MING_GREAT_WALL      Wall_Production
IMPROVEMENT_MING_GREAT_WALL      Wall_Science
#
SELECT *
FROM Adjacency_YieldChanges
WHERE AdjacentImprovement="IMPROVEMENT_MING_GREAT_WALL";
结果:
ID      Description      YieldType      YieldChange      TilesRequired      OtherDistrictAdjacent      AdjacentSeaResource      AdjacentTerrain      AdjacentFeature      AdjacentRiver      AdjacentWonder      AdjacentNaturalWonder      AdjacentImprovement      AdjacentDistrict      PrereqCivic      PrereqTech      ObsoleteCivic      ObsoleteTech      AdjacentResource      AdjacentResourceClass      Self
Wall_Gold      Placeholder      YIELD_GOLD      1      1      0      0                        0      0      0      IMPROVEMENT_MING_GREAT_WALL                        TECH_MASONRY                        0      NO_RESOURCECLASS      0
Wall_Culture      Placeholder      YIELD_CULTURE      1      1      0      0                        0      0      0      IMPROVEMENT_MING_GREAT_WALL                        TECH_CASTLES                        0      NO_RESOURCECLASS      0
Wall_Food      Placeholder      YIELD_FOOD      1      1      0      0                        0      0      0      IMPROVEMENT_MING_GREAT_WALL                        TECH_MASONRY                        0      NO_RESOURCECLASS      0
Wall_Production      Placeholder      YIELD_PRODUCTION      1      1      0      0                        0      0      0      IMPROVEMENT_MING_GREAT_WALL                        TECH_CASTLES                        0      NO_RESOURCECLASS      0
Wall_Science      Placeholder      YIELD_SCIENCE      1      1      0      0                        0      0      0      IMPROVEMENT_MING_GREAT_WALL                        TECH_BRONZE_WORKING                        0      NO_RESOURCECLASS      0
Wall_Faith      Placeholder      YIELD_FAITH      1      1      0      0                        0      0      0      IMPROVEMENT_MING_GREAT_WALL                        TECH_ASTROLOGY                        0      NO_RESOURCECLASS      0
#
SELECT *
FROM Improvement_ValidBuildUnits
WHERE ImprovementType="IMPROVEMENT_MING_GREAT_WALL";
结果:
ImprovementType      UnitType      ConsumesCharge      ValidRepairOnly
IMPROVEMENT_MING_GREAT_WALL      UNIT_BUILDER      1      0
#
至此,虽然log提示错误,但是,Improvements.xml文件中的所有定义和操作都已经反映在数据库中了。

3、修改Ming Great Wall.modinfo文件
文件:Ming Great Wall.modinfo
<!-- 删除了FrontEndActions标签内的语句,因为GlobalParameters.xml文件不存在-->
<!-- 设置了LoadOrder数值 -->
<InGameActions>
    <UpdateDatabase id="data">
                <Properties>
                        <LoadOrder>150</LoadOrder>
                </Properties>
      <File>Improvements.xml</File>
    </UpdateDatabase>

    <UpdateArt id="art">
                <Properties>
                        <LoadOrder>200</LoadOrder>
                </Properties>
      <File>Ming Great Wall.dep</File>
    </UpdateArt>

    <UpdateText id="NewAction">
                <Properties>
                        <LoadOrder>200</LoadOrder>
                </Properties>
      <File>text.xml</File>
    </UpdateText>

    <UpdateDatabase id="NewAction">
                <Properties>
                        <LoadOrder>200</LoadOrder>
                </Properties>
      <File>bomb.sql</File>
      <File>GameData1.sql</File>
    </UpdateDatabase>
</InGameActions>
错误信息:
: StartupErrorMessages.xml
: Input XML does not contain database entry tags. GameData, GameInfo or Database
: Validating Foreign Key Constraints...
: Passed Validation.
: Validating Foreign Key Constraints...
: Passed Validation.
: Initializing FullTextSearch
: Validating Foreign Key Constraints...
: Passed Validation.
: Validating Foreign Key Constraints...
: Passed Validation.
: Database found. Checking versions...
: Database is up-to-date!
: FTS - Creating Context
: Validating Foreign Key Constraints...
: Passed Validation.
ERROR: UNIQUE constraint failed: Improvement_ValidBuildUnits.ImprovementType, Improvement_ValidBuildUnits.UnitType
: While executing - 'insert into Improvement_ValidBuildUnits('ImprovementType', 'UnitType') values (?, ?);'
: In XMLSerializer while inserting row into table insert into Improvement_ValidBuildUnits('ImprovementType', 'UnitType') withvalues (IMPROVEMENT_MING_GREAT_WALL, UNIT_BUILDER, ).
: In XMLSerializer while updating table Improvement_ValidBuildUnits from file Improvements.xml.
ERROR: UNIQUE constraint failed: Improvement_ValidBuildUnits.ImprovementType, Improvement_ValidBuildUnits.UnitType
: Validating Foreign Key Constraints...
: Passed Validation.
: FTS - Creating Context
: FTS - Creating Context
: FTS - Creating Context
: FTS - Creating Context
: FTS - Creating Context
不再提示ERROR: no such table: Types了。
#
#
ERROR: UNIQUE constraint failed: Improvement_ValidBuildUnits.ImprovementType, Improvement_ValidBuildUnits.UnitType
: While executing - 'insert into Improvement_ValidBuildUnits('ImprovementType', 'UnitType') values (?, ?);'
: In XMLSerializer while inserting row into table insert into Improvement_ValidBuildUnits('ImprovementType', 'UnitType') withvalues (IMPROVEMENT_MING_GREAT_WALL, UNIT_BUILDER, ).
: In XMLSerializer while updating table Improvement_ValidBuildUnits from file Improvements.xml.
ERROR: UNIQUE constraint failed: Improvement_ValidBuildUnits.ImprovementType, Improvement_ValidBuildUnits.UnitType
: Validating Foreign Key Constraints...
: Passed Validation.
Improvement_ValidBuildUnits表主键由两个字段组成:ImprovementType和UnitType。
错误提示意思是,Improvements.xml文件试图向表Improvement_ValidBuildUnits插入一行时触发了唯一冲突。

4、Replace操作替代Insert
将Improvements.xml文件中最后的一段:
      <Improvement_ValidBuildUnits>
                <Reow ImprovementType="IMPROVEMENT_MING_GREAT_WALL" UnitType="UNIT_BUILDER"/>
      </Improvement_ValidBuildUnits>
改为:
      <Improvement_ValidBuildUnits>
                <Replace ImprovementType="IMPROVEMENT_MING_GREAT_WALL" UnitType="UNIT_BUILDER"/>      <!-- 用Replace代替Row -->
      </Improvement_ValidBuildUnits>
即:用Replace操作替代Insert。
日志中不再提示错误。是不是能用没试。

5、恢复<FrontEndActions>段代码
文件:Ming Great Wall.modinfo
结果:
: StartupErrorMessages.xml
: Input XML does not contain database entry tags. GameData, GameInfo or Database
: Validating Foreign Key Constraints...
: Passed Validation.
: Validating Foreign Key Constraints...
: Passed Validation.
: Initializing FullTextSearch
: Validating Foreign Key Constraints...
: Passed Validation.
ERROR: no such table: Types
: In Query - insert into Types('Type', 'Kind') values (?, ?);
: In XMLSerializer while updating table Types from file Improvements.xml.
: Validating Foreign Key Constraints...
: Passed Validation.
: Database found. Checking versions...
: Database is up-to-date!
: FTS - Creating Context
ERROR: no such table: Types
: In Query - insert into Types('Type', 'Kind') values (?, ?);
: In XMLSerializer while updating table Types from file Improvements.xml.
: Validating Foreign Key Constraints...
: Passed Validation.
: Validating Foreign Key Constraints...
: Passed Validation.
: FTS - Creating Context
: FTS - Creating Context
: FTS - Creating Context
: FTS - Creating Context
: FTS - Creating Context
重新提示错误。

6、<FrontEndActions>设置LoadOrder=150,<InGameActions>标签不设置LoadOrder。
文件:Ming Great Wall.modinfo
<FrontEndActions>
    <UpdateDatabase id="NewAction">
                <Properties>
                        <LoadOrder>150</LoadOrder>
                </Properties>
      <File>Improvements.xml</File>
    </UpdateDatabase>
    <UpdateDatabase id="NewAction">
                <Properties>
                        <LoadOrder>150</LoadOrder>
                </Properties>
      <File>GlobalParameters.xml</File>
    </UpdateDatabase>
</FrontEndActions>
<InGameActions>标签内不设置LoadOrder。
错误提示:
: StartupErrorMessages.xml
: Input XML does not contain database entry tags. GameData, GameInfo or Database
: Validating Foreign Key Constraints...
: Passed Validation.
: Validating Foreign Key Constraints...
: Passed Validation.
: Initializing FullTextSearch
: Validating Foreign Key Constraints...
: Passed Validation.
ERROR: no such table: Types
: In Query - insert into Types('Type', 'Kind') values (?, ?);
: In XMLSerializer while updating table Types from file Improvements.xml.
: Validating Foreign Key Constraints...
: Passed Validation.
: Database found. Checking versions...
: Database is up-to-date!
: FTS - Creating Context
: FTS - Creating Context
ERROR: no such table: Types
: In Query - insert into Types('Type', 'Kind') values (?, ?);
: In XMLSerializer while updating table Types from file Improvements.xml.
: Validating Foreign Key Constraints...
: Passed Validation.
: Validating Foreign Key Constraints...
: Passed Validation.
: FTS - Creating Context
: FTS - Creating Context
: FTS - Creating Context
: FTS - Creating Context
: FTS - Creating Context

7、<FrontEndActions>、<InGameActions>标签都不设置LoadOrder。
: StartupErrorMessages.xml
: Input XML does not contain database entry tags. GameData, GameInfo or Database
: Validating Foreign Key Constraints...
: Passed Validation.
: Validating Foreign Key Constraints...
: Passed Validation.
: Initializing FullTextSearch
: Validating Foreign Key Constraints...
: Passed Validation.
ERROR: no such table: Types
: In Query - insert into Types('Type', 'Kind') values (?, ?);
: In XMLSerializer while updating table Types from file Improvements.xml.
: Validating Foreign Key Constraints...
: Passed Validation.
: Database found. Checking versions...
: Database is up-to-date!
: FTS - Creating Context
ERROR: no such table: Types
: In Query - insert into Types('Type', 'Kind') values (?, ?);
: In XMLSerializer while updating table Types from file Improvements.xml.
: Validating Foreign Key Constraints...
: Passed Validation.
: Validating Foreign Key Constraints...
: Passed Validation.
: FTS - Creating Context
: FTS - Creating Context
: FTS - Creating Context
: FTS - Creating Context
: FTS - Creating Context
没有变化。
注意,这些错误都是在打开游戏程序,没有加载游戏存档时出现的,加载存档后没有新增错误。
上面的各种查询都能正确返回结果。

8、综合
<FrontEndActions>段的语句可能有问题,但是以我的这点知识储备看不出来原因;
加载游戏存档,还是会继续报错,但是Improvements.xml文件中各种设置都已经写入数据库中;
如果屏蔽或删除<FrontEndActions>段,并将<InGameActions>端<LoadOrder>设置为150,绝大部分错误会消失;
如果将Improvements.xml文件<Improvement_ValidBuildUnits>Replace操作替代Insert,就不再提示错误;
没有在游戏内测试效果,不清楚MOD是否生效。



hizhj 发表于 2021-5-18 07:44

作为一个MOD小白,请教如下问题:
modinfo文件中,<FrontEndActions>标签段内语句是不是在游戏启动时加载?而<InGameActions>标签段内语句是不是在游戏载入存档或新开游戏进入游戏世界时生效?
从对RoutesAndExp MOD的测试来看,如果不设置延后加载(<LoadOrder>200</LoadOrder>),有关Railway的设定值不会生效。那其他包含类似于铁路这样XP2引入的元素的MOD是怎么生效的?
长城MOD,开发者老大和很多玩家朋友都正常,为何我的文明会报错,且游戏中(测试之前包含其他MOD时)好像没有效果?比如YIELD_FOOD等在长城格点及邻接格点并没有生效,而且也没有明长城的建造图标,只有原版的长城。
我的文明是1.0.9.9学习版,是不是因为版本或学习版的问题?

a451143538 发表于 2021-5-30 01:56

楼主真辛苦了,玩个游戏比我认真,:P:P:P

momofor 发表于 2022-1-19 11:24

用了这个MOD后,建筑直接没有长城的选项,要怎么破。 有删除了Cache了

lkszwdd 发表于 2022-3-1 00:11

部分总结:虽然生效优先级上Mod要高于DLC,但是由于读取顺序是先Mod再DLC导致部分DLC中才出现的新数据无法在加载Mod时提前加载,造成错误。
比如风云变幻后才有的铁路、多次改版的老秦等。
应对方法是加一句
<Properties>
      <LoadOrder>200</LoadOrder>
</Properties>
延缓Mod的加载

tbmdst1 发表于 2022-7-16 22:12

hizhj 发表于 2021-5-17 15:25
另外一个前辈的MOD在加载时也出错了。
文明6长城加强版MOD
https://bbs.3dmgame.com/thread-6097956-1-1.ht ...

Housing="2"那行的结尾重复了吧,有2个 />/>
页: [1]
查看完整版本: 关于道路和单位经验增强MOD及文明6长城加强版MOD(二楼)的测试历程及个人体会