目前所做的修改器涉及到了对单字节的高、低位拆分,比如1FFF地址的一个字节ZX,低位的X=01 02 03 04 05 06 07,表示7种不同的倍率,而高位的Z=10 20 40 80,表示刀、剑、枪、弓这4种属性,属性和倍率配合控制对应的防御高低。在CM还是1.6X版时,只掌握了二进制的单bit拆分,例如高位的8 4 2 1=CheckListBox控件属性里关于数据集合中数据大小的4 3 2 1=实际内存数值80 40 20 10,低位8 4 2 1=8 7 6 5=08 04 02 01,但这次却是需要低位两个及以上bit位相加才行。之前在群里小提了一下,得知需要参考21和22这两种附加数值的处理方式。在仔细查看了1.6版和1.72ex版的电子文档后,重新测试了各种数据组合,始终无法达到理想的效果,水平实在有限,只得向大家来请教了。
需要说明一下,由于历史原因,目前本人所使用的主力CM还是1.7版,现阶段的成果是已经成功实现高、低位单独写入对应数值,高位多选+低位单选的整体写入以及对应的取消数值写入,简单来说只解决了写入方面的问题,想解决的还有数据读取和列表对应不上的问题。而且本人最终的处理方式是尝试各种组合自行探索出来的,和电子文档的说明稍有不同,虽然成功但也带了更大的困惑。还是上面的例子,1.6版的电子文档关于二进制多值有两种说明,一种是数值为1,数值大小填不同的bit位,比如1,2,6,表示将对应的bit置1从而得到组合后的数值;第二种是数值为1,0,1,数值大小还是1,2,6,表示可灵活控制对应bit位是置0还是置1。
对应到本人例子中的01 02 03就应该是这么填写:第一行数值1,数值大小8,第二行数值1,数值大小7,第三行数值还是1,但数值大小为7,8(第一种方式),或者将第三行的数值改为1,1,表示数值和数值大小的bit位要对应(第二种方式),不知为何,这两种方式的写入和读取要么无法进行,要么就是错误的。后来尝试参考使用附加数据21和22来分别控制高位和低位,同时将CheckListBox也分为两个,可结果还是错误的。在尝试了所有能想到的可能后,突然想到不管是在CE还是CM中,在某些方面对字母开头的地址有些“敏感”,需要在字母地址前面加个0才行,这里会不会也有类似的问题。再次尝试将第三行的数值改为0,1,1,数值大小改为6,7,8后果然实现了01 02 03的自由写入。最终在没有使用21或22这两种附加数据的情况下,凭借多补位一个0解决了数值的写入问题,最后在一个CheckListBox的数据集合里是这么填写的:
地址:1FFF 数值:1 数值大小:8 信息:01
地址:1FFF 数值:1 数值大小:7 信息:02
地址:1FFF 数值:0,0,1,1 数值大小:5,6,7,8 信息:03(由于后面的07涉及到3个bit加1个补位,所以一次扩展到位)
地址:1FFF 数值:1 数值大小:6 信息:04
地址:1FFF 数值:0,1,0,1 数值大小:5,6,7,8 信息:05
地址:1FFF 数值:0,1,1,0 数值大小:5,6,7,8 信息:06
地址:1FFF 数值:0,1,1,1 数值大小:5,6,7,8 信息:07
地址:1FFF 数值:1 数值大小:4 信息:刀
地址:1FFF 数值:1 数值大小:3 信息:剑
地址:1FFF 数值:1 数值大小:2 信息:枪
地址:1FFF 数值:1 数值大小:1 信息:弓
如上面所说,补0后成功写入了数值,但无法像高位的单bit那样,读取时无法自动正确勾选对应的数值,因此主要是想请问,像这种涉及重复bit位的读取判断是当前CM无法解决的还是本人在什么地方处理的不太对呢?
再后来准备上论坛提交此疑问时,又想到低位的01—07在实际应用中,大多数时候是单选的,只有高位的属性需要多选,既然如此,何不将这部份数据用一个ComboBox加数值列表来配合CheckListBox使用呢。可惜,两者在数值写入上有冲突,即便使用21或22附加数据也没能成功,因此想顺便问一下,ComboBox的数值列表支持二进制吗?或者说此控件在二进制方面有哪些应用呢?
在经过以上那么多的尝试后,为了找寻更好的解决方案,还尝试使用了20190204发布的CM,可能是新版CM改变了太多,导致上面的方法全部失效,不知新版关于二进制处理有哪些加强?新版的CheckListBox控件关于bit位的处理似乎和1.7版是相反的,老版中低位是5,6,7,8,而新版是1,2,3,4。另外,CheckListBox的数据集合里,数据大小给的默认1 2 4 8下拉选项框又是什么意思?最后还有一个小问题,20190204版中附带的数值自定义插件名称是Fix.dll,而其他版本中此插件的名称是Value_Fix.dll,但两者大小完全一样,不知功能上有没有什么差别?