zsyf - 2019/7/10 15:45:29
目前所做的修改器涉及到了对单字节的高、低位拆分,比如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,但两者大小完全一样,不知功能上有没有什么差别?
zsyf - 2019/7/11 14:37:10
为了尽量详细说明问题,减少大家不必要的麻烦,本来是好意,可在如今的快节奏时代似乎成了“缺点”,唉,没办法,可能是“潜水”过多造成的吧。
liziy - 2019/7/24 23:29:38
看的不大懂
就是想高位多选低位单选?
我拿新的svn做了个demo
- demo.zip (, 下载次数:1104)
liziy - 2019/7/25 2:17:41
回复 2楼银河漫步的帖子顺便借楼问下Listbox相关
能让ListBox只显示从第 x 行开始的 y 个数据吗
liziy - 2019/7/25 11:06:38
回复 6楼银河漫步的帖子就是List里设置了10个数据 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10
从Text1读出3,Text2读出6(会变动
然后List上就只显示03到08 , 从3开始总共6个数据
看SVN帖子里好像只能在脚本里一个一个写。。。
天枫十一郎 - 2019/9/20 13:34:03
新版的bit位和老版本置反了.
所有bin位操作包括CheckListBox都是遵循0,1数值.当数据匹配则会勾选,不匹配则会取消勾选.
当你有多个方法同时操作一个bit位的或字节的话,写入和读取的先后顺序肯定会影响最终结果.如你所说,一般一次操作只对一个bin位进行一次操作
系统带的名称为Value_Fix.dll可以随意改名不影响使用.是不是同一个插件可以在程序中用鼠标放上去看说明
我没有全部看明白.但可以简单描述你需要实现的功能.