开关城门

这个是城门开门与锁门的教程,像帝国时代2那样,城门可以根据玩家需要开门或锁门,只可惜敌人不能穿过打开的城门。


方法:
1.在protounitcommands.xml将开城门按钮的语句复制,顺便把那个图标提取出来


2.随便找一个游戏内没有出现过的按钮,然后修改。(怎样判断游戏内没有这个按钮?去protoy.xml搜索按钮调用名,搜索不出就是游戏内没有的。)

	将截图所说的语句替换到你修改的按钮,我随便找了一个没有用上Stance1按钮
	修改前:
	<protounitcommand>
		<name>Stance1</name>
		<icon>art\ui\command\stance_aggresive_on</icon>
		<command>unitSetStanceAggressive</command>
		<rollovertextid>19143</rollovertextid>
		<helptopic>stances</helptopic>
	</protounitcommand>
	
	
	修改后:
	<protounitcommand>
		<name>Stance1</name>
		<icon>art\ui\command\close</icon>
		<command>uiTransformSelectedUnit("CWallGate2")</command>
		<rollovertextid>00301</rollovertextid>
	</protounitcommand>

3. 复制一个城门,注意一下调用名,你的命令写什么调用名,这个城门的调用名就应该写什么。你在复制城门之前,应该先给城门添加你刚才修改的按钮,顺便把城门的建造成本删掉。
	(原有的)城门
	<Unit id ='482' name ='CWallGate'>
		<DBID>523</DBID>
		<DisplayNameID>29634</DisplayNameID>
		<ObstructionRadiusX>5.0000</ObstructionRadiusX>
		<ObstructionRadiusZ>1.0000</ObstructionRadiusZ>
		<MaxVelocity>0.0000</MaxVelocity>
		<MovementType>land</MovementType>
		<AnimFile>buildings\wall\wall_gate.xml</AnimFile>
		<AllowedHeightVariance>4.0000</AllowedHeightVariance>
		<ImpactType>Stone</ImpactType>
		<Icon>buildings\wall\wall_portrait</Icon>
		<PortraitIcon>buildings\wall\gate_portrait</PortraitIcon>
		<RolloverTextID>29633</RolloverTextID>
		<ShortRolloverTextID>29632</ShortRolloverTextID>
		<InitialHitpoints>3000.0000</InitialHitpoints>
		<MaxHitpoints>3000.0000</MaxHitpoints>
		<LOS>7.0000</LOS>
		<BuildPoints>15.0000</BuildPoints>
		<Cost resourcetype ='Wood'>0.0000</Cost>			<!-- 建造成本改成0或删掉 -->
		<BuildingWorkRate>1.0000</BuildingWorkRate>
		<AllowedAge>0</AllowedAge>
		<Decay delay ='0.0000' duration ='0.0000'></Decay>
		<Armor type ='Siege' value ='0.0000'></Armor>
		<UnitType>LogicalTypeValidSabotage</UnitType>
		<UnitType>LogicalTypeVillagersAttack</UnitType>
		<UnitType>LogicalTypeHandUnitsAttack</UnitType>
		<UnitType>LogicalTypeShipsAndBuildings</UnitType>
		<UnitType>LogicalTypeRangedUnitsAttack</UnitType>
		<UnitType>LogicalTypeMinimapFilterMilitary</UnitType>
		<UnitType>BuildingClass</UnitType>
		<UnitType>ColonyBuilding</UnitType>
		<UnitType>AbstractWall</UnitType>
		<UnitType>MilitaryBuilding</UnitType>
		<UnitType>Building</UnitType>
		<UnitType>CountsTowardMilitaryScore</UnitType>
		<UnitType>HasBountyValue</UnitType>
		<Flag>CollidesWithProjectiles</Flag>
		<Flag>Doppled</Flag>
		<Flag>Immoveable</Flag>
		<Flag>NoBloodOnDeath</Flag>
		<Flag>NonAutoFormedUnit</Flag>
		<Flag>ObscuresUnits</Flag>
		<Flag>PlayerOwnsObstruction</Flag>
		<Flag>SelectWithObstruction</Flag>
		<Flag>UseAlignedObstructionOnMinimap</Flag>
		<Flag>wallBuild</Flag>
		<Flag>ColonyBuilding</Flag>
		<Flag>Tracked</Flag>
		<Command page ='10' column ='1'>Delete</Command>
		<Command page ='6' column ='1'>Stance1</Command>		<!-- 把按钮加上去 -->
	</Unit>
	
(新增的)已关闭的城门 <Unit id ='1482' name ='CWallGate2'> <DBID>523</DBID> <DisplayNameID>00300</DisplayNameID> <ObstructionRadiusX>5.0000</ObstructionRadiusX> <ObstructionRadiusZ>1.0000</ObstructionRadiusZ> <MaxVelocity>0.0000</MaxVelocity> <MovementType>land</MovementType> <AnimFile>buildings\wall\wall_gate.xml</AnimFile> <AllowedHeightVariance>0.0000</AllowedHeightVariance> <!-- 4.0修改成0.0 --> <ImpactType>Stone</ImpactType> <Icon>buildings\wall\wall_portrait</Icon> <PortraitIcon>buildings\wall\gate_portrait</PortraitIcon> <RolloverTextID>29633</RolloverTextID> <ShortRolloverTextID>29632</ShortRolloverTextID> <InitialHitpoints>3000.0000</InitialHitpoints> <MaxHitpoints>3000.0000</MaxHitpoints> <LOS>7.0000</LOS> <BuildPoints>15.0000</BuildPoints> <Cost resourcetype ='Wood'>0.0000</Cost> <!-- 建造成本改成0或删掉--> <BuildingWorkRate>1.0000</BuildingWorkRate> <AllowedAge>0</AllowedAge> <Decay delay ='0.0000' duration ='0.0000'></Decay> <Armor type ='Siege' value ='0.0000'></Armor> <UnitType>LogicalTypeValidSabotage</UnitType> <UnitType>LogicalTypeVillagersAttack</UnitType> <UnitType>LogicalTypeHandUnitsAttack</UnitType> <UnitType>LogicalTypeShipsAndBuildings</UnitType> <UnitType>LogicalTypeRangedUnitsAttack</UnitType> <UnitType>LogicalTypeMinimapFilterMilitary</UnitType> <UnitType>BuildingClass</UnitType> <UnitType>ColonyBuilding</UnitType> <UnitType>AbstractWall</UnitType> <UnitType>MilitaryBuilding</UnitType> <UnitType>Building</UnitType> <UnitType>CountsTowardMilitaryScore</UnitType> <UnitType>HasBountyValue</UnitType> <Flag>CollidesWithProjectiles</Flag> <Flag>Doppled</Flag> <Flag>Immoveable</Flag> <Flag>NoBloodOnDeath</Flag> <Flag>NonAutoFormedUnit</Flag> <Flag>ObscuresUnits</Flag> <Flag>ShowTactics</Flag> <!-- 添加<Flag>ShowTactics</Flag> --> <!-- <Flag>PlayerOwnsObstruction</Flag> --> <!-- 删掉<Flag>PlayerOwnsObstruction</Flag> --> <Flag>SelectWithObstruction</Flag> <Flag>UseAlignedObstructionOnMinimap</Flag> <Flag>wallBuild</Flag> <Flag>ColonyBuilding</Flag> <Flag>Tracked</Flag> <Command page ='10' column ='1'>Delete</Command> <Command page ='6' column ='1'>Transform</Command> <!-- 将开城门的按钮加上去 --> </Unit>
把名称与按钮的介绍写上: <String _locID="00300">已关闭的城门</String> <String _locID="00301">关闭这座城门,任何人均不能通过这座城门。</String>
4.添加声音,最简单的办法是在Sound文件夹的SoundXML.bar提取原有的城门的文件(CWallGate_snds),然后直接把调用名修改了,放到sound文件夹。 CWallGate2_snds.xml
<?xml version="1.0" encoding="utf-8"?>

<protounitsounddef>
	<protounit name="CWallGate2">
		<soundtype name="Select">
			<soundset name="UI_Building_Economic"/>
		</soundtype>
		<soundtype name="Death">
			<soundset name="BuildingDestruction"/>
		</soundtype>
		<soundtype name="Creation">
			<soundset name="UI_Building_Economic"/>
		</soundtype>
	</protounit>
</protounitsounddef>





(如果你是旧版亚洲王朝玩家,可以忽略这里的第5步)
5.如果是决定版,因为决定版对转换命令作了严格限制,你还要从Data.bar提取unittransform.xml,打开文件后你自己也懂了,不需要我去解释。
unittransform.xml
<?xml version="1.0" encoding="utf-8"?>
<unittransforms>
  <transform>
    <from>WallStraight5</from>
    <to>CWallGate</to>
  </transform>
  <transform>
    <from>CWallGate</from>
    <to>CWallGate2</to>
  </transform>
  <transform>
    <from>CWallGate2</from>
    <to>CWallGate</to>
  </transform>
</unittransforms>
  <transform>
    <from>deBuilderKingdom</from>
    <to>deCrateofInfluenceSokoto</to>
    <tech>DEHCSokotoChronicle</tech>
  </transform>
  <transform>
    <from>TownCenter</from>
    <to>CoveredWagon</to>
    <tech>DEHCCampMovements</tech>
    <command>deTownCenterTransformTravois</command>
  </transform>
  <transform>
    <from>CommunityPlaza</from>
    <to>deCommunityPlazaTravois</to>
    <tech>DEHCCampMovements</tech>
    <command>deCommunityPlazaTransformTravois</command>
  </transform>
  <transform>
    <from>Market</from>
    <to>deMarketTravois</to>
    <tech>DEHCCampMovements</tech>
    <command>deMarketTransformTravois</command>
  </transform>
  <transform>
    <from>Corral</from>
    <to>deCorralTravois</to>
    <tech>DEHCCampMovements</tech>
    <command>deCorralTransformTravois</command>
  </transform>
  <transform>
    <from>WarHut</from>
    <to>WarHutTravois</to>
    <tech>DEHCCampMovements</tech>
    <command>deWarHutTransformTravois</command>
  </transform>
  <transform>
    <from>Farm</from>
    <to>FarmTravois</to>
    <tech>DEHCCampMovements</tech>
    <command>deFarmTransformTravois</command>
  </transform>
  <transform>
    <from>NativeEmbassy</from>
    <to>deEmbassyTravois</to>
    <tech>DEHCCampMovements</tech>
    <command>deEmbassyTransformTravois</command>
  </transform>
  <transform>
    <from>Plantation</from>
    <to>dePlantationTravois</to>
    <tech>DEHCCampMovements</tech>
    <command>dePlantationTransformTravois</command>
  </transform>





完成了,进入游戏看看吧,效果图跟顶部两张截图一样。



有人可能会问,为什么不多改一个按钮,然后制作一个新城门,这样就不需要使用建造城门那个按钮了,其实我也想这样做,但是城门的动画直接写到主程序里面去了,开门动画只认城门的调用名,导致新添加的城门有单位经过时,不会自动上升。 为了平衡性,适当把所有城墙的价格与生命值调高吧,将墙柱、2号城墙、5号城墙成本改成20木头,生命值改成4000,城门与已关闭的城门生命值也改成4000。