修改游戏文件后初始化失败


当你修改文件并且保存后,如果你的游戏打开游戏显示初始化失败,那么可能是你某个xml语法错误,导致那个xml无法使用。
除了xml外,某些原因也会导致初始化失败,不过出现的几率为0.01%,因为99.99%的人都是按照已有的语句来修改的,不会没事找事做去给xml元素乱加东西,自然就不会出现。(例如techtreey.xml&power.xml的type元素我尝试过调用神话时代xml的type,基本上都是初始化失败,因为帝国3主程序已经将神话时代那些设定删了;某些技能的type在主程序还能找到,但是放到power.xml后,立即初始化失败,这是帝国3内部程序错误,无法调用有问题的type。)


如何检查xml是否语法错误?

选择一个xml文件,按右键,选择用Internet Explorer打开


如果你的文件是正常的,那么会有语法高亮,简单来说就是文字会变色


如果你的文件是不正常的,语法有错误的,所有xml标签与元素将不会显示





另一种办法就用AOE3ED的FileConverter.exe,将你的xml文件拖动到FileConverter.exe转换xmb文件,如果你的xml语法有错误,肯定是无法转换xmb格式。








如何检查xml语法哪里出错了?


我用的软件是Dreamweaver CC 2018。其实Dreamweaver是一款制作网页的软件......因为我制作圣典会用到,所以就懒得用其他软件了,原理都是一样的。
使用Dreamweaver可以查出xml文件不对应的语法错误,但是你忘记加结束标语就没办法了,只能靠你自己眼力了。


没有Dreamweaver软件怎么办?去购买正版。











适当删掉一部分语句后再检测,可以缩短范围。或者把你刚才修改的语句,放到一个精简的xml文件中,检测是否存在语法错误。





什么是精简的xml?怎样能算精简的xml?

  protoy.xml - 记事本 ____ X
文件(F)  编辑(E)  格式(O)  查看(V)  帮助(H)
<?xml version="1.0"?>

<Proto version ='4'>
	<Unit id ='0' name ='InvisibleProjectile'>
		<DBID>20</DBID>
		<DisplayNameID>22885</DisplayNameID>
		<EditorNameID>22890</EditorNameID>
		<ObstructionRadiusX>0.1000</ObstructionRadiusX>
		<ObstructionRadiusZ>0.1000</ObstructionRadiusZ>
		<MaxVelocity>60.0000</MaxVelocity>
		<MovementType>air</MovementType>
		<AnimFile>effects\projectiles\musket_ball.xml</AnimFile>
		<Lifespan>2.0000</Lifespan>
		<LOS>0.0000</LOS>
		<UnitType>EmbellishmentClass</UnitType>
		<UnitType>Projectile</UnitType>
		<Flag>NoIdleActions</Flag>
		<Flag>NonCollideable</Flag>
		<Flag>DestroyProjectile</Flag>
		<Flag>DoNotCreateUnitGroupAutomatically</Flag>
		<Flag>NoBloodOnDeath</Flag>
		<Flag>NotSearchable</Flag>
		<Flag>Projectile</Flag>
		<Flag>NoTieToGround</Flag>
		<Flag>DoNotShowOnMiniMap</Flag>
		<Flag>NotSelectable</Flag>
		<Flag>DoNotDieAtZeroHitpoints</Flag>
		<Flag>NoHPBar</Flag>
		<Flag>NonAutoFormedUnit</Flag>
		<Flag>DontRotateObstruction</Flag>
		<Flag>AdjustPositionOnTerrainCollision</Flag>
		<Flag>NotPlayerPlaceable</Flag>
		<Flag>Invulnerable</Flag>
		<Flag>NoUnitAI</Flag>
		<Flag>InvulnerableIfGaia</Flag>
	</Unit>
	<Unit id ='1462' name ='ypBlockhouseWagon'>
		<DBID>2141</DBID>
		<DisplayNameID>70486</DisplayNameID>
		<EditorNameID>70487</EditorNameID>
		<ObstructionRadiusX>0.9900</ObstructionRadiusX>
		<ObstructionRadiusZ>0.9900</ObstructionRadiusZ>
		<FormationCategory>Protected</FormationCategory>
		<MaxVelocity>4.0000</MaxVelocity>
		<MaxRunVelocity>6.0000</MaxRunVelocity>
		<MovementType>land</MovementType>
		<TurnRate>5.0000</TurnRate>
		<AnimFile>units\trade\supply_cart\supply_cart_outpost.xml</AnimFile>
		<ImpactType>Wood</ImpactType>
		<Icon>units\trade\outpost_wagon_icon_64x64</Icon>
		<PortraitIcon>units\trade\outpost_wagon_portrait</PortraitIcon>
		<RolloverTextID>70485</RolloverTextID>
		<ShortRolloverTextID>70484</ShortRolloverTextID>
		<InitialHitpoints>250.0000</InitialHitpoints>
		<MaxHitpoints>250.0000</MaxHitpoints>
		<LOS>18.0000</LOS>
		<ProjectileProtoUnit>InvisibleProjectile</ProjectileProtoUnit>
		<UnitAIType>Civilian</UnitAIType>
		<TrainPoints>60.0000</TrainPoints>
		<Bounty>60.0000</Bounty>
		<CarryCapacity resourcetype ='Food'>1.0000</CarryCapacity>
		<CarryCapacity resourcetype ='Wood'>1.0000</CarryCapacity>
		<CarryCapacity resourcetype ='Gold'>1.0000</CarryCapacity>
		<AllowedAge>0</AllowedAge>
		<Armor type ='Siege' value ='0.2000'></Armor>
		<UnitType>LogicalTypeMinimapFilterEconomic</UnitType>
		<UnitType>LogicalTypeHealed</UnitType>
		<UnitType>LogicalTypeHandUnitsAutoAttack</UnitType>
		<UnitType>LogicalTypeGarrisonInShips</UnitType>
		<UnitType>LogicalTypeRangedUnitsAutoAttack</UnitType>
		<UnitType>LogicalTypeVillagersAttack</UnitType>
		<UnitType>LogicalTypeHandUnitsAttack</UnitType>
		<UnitType>LogicalTypeRangedUnitsAttack</UnitType>
		<UnitType>AbstractWagon</UnitType>
		<UnitType>ConvertsHerds</UnitType>
		<UnitType>CannotConvertHill</UnitType>
		<UnitType>HasBountyValue</UnitType>
		<UnitType>CountsTowardEconomicScore</UnitType>
		<UnitType>ValidIdleVillager</UnitType>
		<UnitType>Economic</UnitType>
		<UnitType>UnitClass</UnitType>
		<UnitType>Unit</UnitType>
		<Train row ='0' page ='6' column ='0'>Blockhouse</Train>
		<Flag>CollidesWithProjectiles</Flag>
		<Flag>ApplyHandicapTraining</Flag>
		<Flag>CorpseDecays</Flag>
		<Flag>ShowGarrisonButton</Flag>
		<Flag>DontRotateObstruction</Flag>
		<Flag>ObscuredByUnits</Flag>
		<Flag>DeadReplacementWhenDestroyed</Flag>
		<Flag>ConstrainOrientation</Flag>
		<Flag>OrientUnitWithGround</Flag>
		<Flag>Tracked</Flag>
		<Command page ='10' column ='0'>Garrison</Command>
		<Command page ='10' column ='1'>Stop</Command>
		<Command page ='10' column ='2'>Delete</Command>
		<Tactics>coveredwagon.tactics</Tactics>
		<ProtoAction>
			<Name>Build</Name>
			<Rate type ='WarHut'>2.000000</Rate>
			<Rate type ='Blockhouse'>2.000000</Rate>
			<Rate type ='Outpost'>2.000000</Rate>
			<Rate type ='YPOutpostAsian'>2.000000</Rate>
		</ProtoAction>
	</Unit>
</Proto>



<!-- 现在懂什么是精简的xml没? -->








PS:像最后一张图(不是protoy.xml那个假截图,而是Dreamweaver软件的最后一张截图。)那种忘记自己修改哪里,而且因为没有添加结束标语,导致软件不能定位错误的情况,可以使用找茬大法:将xml文件不停删除语句(删除一半),直到没错误为止,那么错误的位置范围就确定了。基本上是半个小时能找出一个错误。


曾经有一个不守信用的人,我花37分钟帮他从protoy.xml(从3000个单位[官方版本只有1462个单位])中(使用找茬大法,把整个poroty删到只有不到300个单位)找出一个忘记添加结束标语的错误,然后那个人不想守信用,后来那个人再来求我的时候,被我强迫让他花几个小时批量修改文件。



另外,不一定要使用Dreamweaver,你也可以使用Internet Explore(仅限win7系统以上),右键Internet Explore打开,选择查看源或者按F12,会弹出一个F12 开发人员工具,这时候回到Internet Explore,选择允许阻止的内容,再回到F12 开发人员工具,会出现类似上面Dreamweaver教程的提示。


点击后会跳转到错误处: