找回密码
 点一下
查看: 1563|回复: 9

如何编写自己的数据向导

[复制链接]
发表于 2018-12-6 23:16:35 | 显示全部楼层 |阅读模式
本帖最后由 花时雨 于 2018-12-7 17:13 编辑

说起研究这个东西,还要说我最近每个单位做了正好差不多15个升级项目,并且按钮有超过20个,每个单位的升级还是独立的,虽然同单位共享,但是不同单位都不一样。
经过我长达N>=10小时完成一个单位制作的辛酸苦辣过程之后,今天花了点时间研究数据向导,非常好用

  1. <wizardfile>
  2.         <wizard id="CreateUpgrade">
  3.                 <name>创建一个升级</name>
  4.                 <objecttypes create="Upgrade" />
  5.                 <instructions page="1">
  6.                         创建一个升级
  7.                 </instructions>
  8.         </wizard>
  9. </wizardfile>
复制代码
首先我们观察这段代码,ID指定了这个向导的唯一性,即同文件多个向导用来区分的,Name是向导菜单中显示的菜单名称。
Objecttypes 这个属性表示通过向导创建时支持的类型,类型就是数据编辑器里的标签页的英文单词。实在不知道,你可以比如我选中单位-雷诺,显示源数据,右侧的单位属性面板会显示属性名称的前缀,比如下图的CButton,雷诺当然就是CUnit,实际的类型是Unit。
屏幕截图(10).png

Instructions 这个属性表示这个数据向导的说明。page参数默认写1不用管。

  1. <input id="Id" type="CString">
  2.                         <name>Id</name>
  3.                         <default value="UnknownUpgrade" />
  4.                 </input>
  5. <input id="AffectedUnitArray" type="CUnitLink">
  6.                         <name>影响单位</name>
  7.                         <default value="()" />
  8.                 </input>
  9. <input id="Icon" type="CImagePath">
  10.                         <name>图标</name>
  11.                 </input>
  12. <input id="Tooltip" type="CStringLink">
  13.                         <name>鼠标提示</name>
  14.                 </input>
  15. <input id="EnableUpgrade" type="WizardCheckbox">
  16.                         <name>使用前置升级</name>
  17.                 </input>
复制代码
input 元素表示在向导中需要输入的东西。CString是个文本框,CUnitLink是个单位连接选择器,CImagePath是图片选择器,CStringLink是个可插入连接的文本框,WizardCheckbox是个选择按钮,当然还有弹出菜单啊什么的,这里就不说了。
每个id要不一样,我们在引用数据时需要^Tooltip^,就是表示我引用了鼠标提示文本框中的信息,其他的都是类似。

  1. <input id="EnableUpgrade" type="WizardCheckbox">
  2.                         <name>使用前置升级</name>
  3.                 </input>
  4.                 <condition id="IsEnableUpgrade" operator="equal" value="1" input="EnableUpgrade" />
  5.                 <input id="Upgrade" type="CUpgradeLink">
  6.                         <name>前置升级</name>
  7.                         <condition id="IsEnableUpgrade" />
  8.                 </input>
复制代码
比如我们希望有个开关能让一个控件是否显示,就可以用condition标签来达到效果。
这里使用前置升级开关就关联到前置升级这个控件上了,如果我没有选中这个按钮,那么就不会显示升级选择器。

  1. <entry type="CUpgrade" catalog="Upgrade">
  2.                         <id>^Id^</id>
  3.                         <parentid>CUpgrade</parentid>
  4.                         <field id="Name">
  5.                                 <value>^Name^</value>
  6.                         </field>
  7.                         <field id="EditorPrefix">
  8.                                 <value>^EditorPrefix^</value>
  9.                         </field>
  10.                         <field id="EditorSuffix">
  11.                                 <value>^EditorSuffix^</value>
  12.                         </field>
  13.                         <field id="MaxLevel">
  14.                                 <value>^MaxLevel^</value>
  15.                         </field>
  16.                         <field id="AffectedUnitArray">
  17.                                 <value>^AffectedUnitArray^</value>
  18.                         </field>
  19.                         <field id="Flags">
  20.                                 <index>0</index>
  21.                                 <value>1</value>
  22.                         </field>
  23.                         <field id="Flags">
  24.                                 <index>1</index>
  25.                                 <value>1</value>
  26.                         </field>
  27.                         <field id="Icon">
  28.                                 <value>^Icon^</value>
  29.                         </field>
  30.                 </entry>
复制代码
按照我们之前查找类型的方式,就可以发现每个东西的属性面板中,都是以CXXX类型开头,加上 _XXX这样组成CXXX_XXX这样的名字,所以field字段里的id就是下划线后边的部分。
比如我这里Name用的是^Name^,表示我创建了一个升级,并且这个升级的名字是我输出在名字这个文本框中的文字。
如果这个标签是个数组的型式怎么办呢,我们可以使用index标签来达到目的,这里的索引值是从0开始的。
比如我这里Flags就是升级的作弊标旗,0表示禁用,1表示开启。索引0是科技树作弊,1是作弊。
基本的东西就讲完了,下边开始来做一个比较操蛋的东西叫做所需条件和条件节点。

——————————————————————————————————————————————————————————————————————————————————————

比如枪兵的强化剂,他就属于是使用类型的所需条件。使用类型的条件关联的按钮或者技能有个特点,就是可以在面板上看到,没有研究会提示需要科技升级。
另外一种就是显示类型的,他如果没有达成条件,是不会显示在面板上的。

但是比如我们在编辑器中,编辑条件都是点几下各种选出来的,这个东西我不知道怎么弄怎么办?
打开这个条件的信息面板,还是显示源数据。

屏幕截图(12).png

这里我们可以看见,他这个条件节点是属于数组,正好上边讲过我们需要index来给他数据。但是里边的Count什么的,看不懂是啥东西啊怎么办?
我们在接着找到关联的这个条件节点,双击左侧的这个节点,就可以看见他的Id和名字,以及类型。

屏幕截图(14).png

这里的ID是不是很惊喜,就是他。这个就是我们需要给这个条件的数据,其实编辑器的很多东西复制粘贴的连接都是ID相关的路径。比如Unit.XXX.Name 这种的,XXX就是ID。
那我们就按照这个ID的格式来做一个节点的生成。

  1. <entry type="CRequirementCountUpgrade" catalog="RequirementNode">
  2.                         <id>CountUpgrade^Id^CompleteOnly</id>
  3.                         <parentid>CRequirementCountUpgrade</parentid>
  4.                         <field id="Name">
  5.                                 <value>CountUpgrade(^Id^,CompleteOnly)</value>
  6.                         </field>
  7.                         <field id="EditorPrefix">
  8.                                 <value>^EditorPrefix^</value>
  9.                         </field>
  10.                         <field id="EditorSuffix">
  11.                                 <value>^EditorSuffix^</value>
  12.                         </field>
  13.                         <field id="Flags">
  14.                                 <value>1</value>
  15.                         </field>
  16.                         <field id="Count_Link">
  17.                                 <index>0</index>
  18.                                 <value>^Id^</value>
  19.                         </field>
  20.                         <field id="Count_State">
  21.                                 <index>1</index>
  22.                                 <value>CompleteOnly</value>
  23.                         </field>
  24.                 </entry>
复制代码
这里最后像个字段,link 和 state 比较奇怪,因为之前我们的数组都是相同的id,这里也是数组,但是id又不一样。
打开节点的所有子字段

屏幕截图(16).png

看起来其实很容易猜,包括其他的各种复杂的结构中,我们都可以这样来使用,只要字段的名字符合这种规律。
这里这个节点本质上是说在升级完成时统计计数,数学的真假判断其实就是0 和非0.
双节节点,我们可以看见很多的类型,比如大于啊小于啊等等,这些条件运算都是组成一个科技升级条件的组成部分。
只需要嵌套几层就可以达到复杂的判断,比如GT是大于,Eq是等于。加上与或等等节点,就可以非常复杂啦。

  1. <!-- 创建显示类型所需条件在升级已达到最大次数时 -->
  2.                 <condition id="IsEnableViewMax" operator="equal" value="1" input="EnableViewMax" />
  3.                 <entry type="CRequirement" catalog="Requirement">  
  4.                         <id>ViewHaveMax^Id^</id>
  5.                         <parentid>CRequirement</parentid>
  6.                         <field id="EditorPrefix">
  7.                                 <value>^EditorPrefix^</value>
  8.                         </field>
  9.                         <field id="EditorSuffix">
  10.                                 <value>^EditorSuffix^</value>
  11.                         </field>
  12.                         <field id="Name">
  13.                                 <value>ViewHaveMax^Id^</value>
  14.                         </field>
  15.                         <field id="NodeArray">
  16.                                 <index>0</index>
  17.                                 <value>Eq^MaxLevel^CountUpgrade^Id^CompleteOnly</value>
  18.                         </field>
  19.                         <condition id="IsEnableUseCompelete" />
  20.                 </entry>
复制代码
根据我们创建的节点,就可以生成条件了。
这里用了很多的数据引用,比如字段NodeArray,index0表示使用类型,1就是显示类型了。
value我这里用大于节点Eq,Maxlevel表示我输入的最大升级次数,CountUpgrade表示统计升级的次数, ^Id^ 是我输入的ID文本。
CompleteOnly表示在完成时进行统计。
整个这句话其实就是一个大于节点的ID。
其他的也是类似,因为条件的这个节点数组其实是排他的,你不能又有显示又有使用。虽然也可以这么写,但是显示判断会覆盖使用判断。
意思就是说,你这么干了以后,升级完,他就消失了,不会像兴奋剂那种的他还在那显示。

————————————————————————————————————————————————————————————————————————————————————————————————————————————————

最后总结一下,能做的东西其实非常多,所有重复机械的任务都可以用数据模板来快速搞定。时间就是生命啊。
其他的东西也不难,比如创建单位啊,创建模型啊,这些只要你对这一块的数据比较了解是都没问题的。
比如升级里的效果这东西,他很复杂,但是他就是个数组,可以打开源数据,看一下他的这个格式,我们可以动态的拼接达到目的。

附件是完整的升级的向导文件,可以直接用的。如果对于条件这块有想法,你可以直接把Name相关的东西自己改改成中文的,自己选个格式,就可以了。

Create Upgrade.zip (3.07 KB, 下载次数: 18)
发表于 2018-12-7 00:21:52 | 显示全部楼层
我对这个不太懂,挺好的教程,写的也很详细,支持..........

点评

超超超简单的,这个你可以下载下来,用文本或者xml编辑器查看下,剩下的别的东西基本上就是类型和字段不一样,顶多研究下某些字段的格式,不过在源数据下都有显示那条字符串的,按照那个写法就行  详情 回复 发表于 2018-12-7 08:01
回复

使用道具 举报

 楼主| 发表于 2018-12-7 08:01:17 | 显示全部楼层
hzmwe 发表于 2018-12-7 00:21
我对这个不太懂,挺好的教程,写的也很详细,支持..........

超超超简单的,这个你可以下载下来,用文本或者xml编辑器查看下,剩下的别的东西基本上就是类型和字段不一样,顶多研究下某些字段的格式,不过在源数据下都有显示那条字符串的,按照那个写法就行

点评

昨天已经下载了个,我以前还从没这么细致的去描述一个单位,学习一下.........  发表于 2018-12-7 14:43
回复

使用道具 举报

发表于 2018-12-7 21:57:42 来自手机 | 显示全部楼层
你是否看过我的帖子了呢?http://bbs.islga.org/forum.php?mod=viewthread&tid=5485253

点评

顺便提一嘴,你那个向导生成的小软件,适配有问题,按钮全是一个_的东西,界面也没法看。。。。  发表于 2018-12-7 23:15
话说你这个帖子新手根本没法看  发表于 2018-12-7 23:13
回复

使用道具 举报

发表于 2018-12-8 13:36:56 | 显示全部楼层
如果你觉得软件有问题,何不打开你自己的向导试一下

点评

我就是先看了你的软件,发现很难用,然后就自己写xml了  详情 回复 发表于 2018-12-8 15:22
回复

使用道具 举报

 楼主| 发表于 2018-12-8 15:22:00 | 显示全部楼层
priceles 发表于 2018-12-8 13:36
如果你觉得软件有问题,何不打开你自己的向导试一下

我就是先看了你的软件,发现很难用,然后就自己写xml了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-24 11:10 , Processed in 0.095559 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表