sakuya452 发表于 2013-11-13 14:51:35

战场上生物攻击/伤害施法检查函数的地址及其调用形式

本帖最后由 sakuya452 于 2013-12-15 01:47 编辑

生物攻击或造成伤害施法时经由5A8950地址进行有效性检查,然后用返回值表示当次检查是否可以接受该魔法

5A8950转换为十进制为5933392

该函数是个thiscall,调用形式为

!!SN:E5933392/2/战场结构地址/魔法编号(0-80)/施法者(堆栈)所属边(左0,右1)/被施法堆栈地址/1/1;      

虽然ERM帮助里魔法编号范围是0-80,但是用蛮牛打黑龙可以出死亡凝视啊,感觉应该不算魔法,同理编号76,78,80的也一样,个人推测,如有错误,希望对WOG了解多的人能帮助指正

一个调用示例:
ZVSE
**检查21号堆栈对0-80号大部分魔法的接受情况,这原本是一个生物攻击/伤害施法时用于检查的函数,最好不要用于检查被英雄相关参数限制施放的魔法的接受情况
**调用5933392函数检查有抗魔技能的堆栈时自动检查几率,得出几率在抗魔几率内则返回0,否则其它条件通过的返回1

!?CM4&1000;   右键信息栏触发
!!CM:F?y1 I?y2 S?y3;
!!FU|y1<>512/y2<>2005/y3<>14:E;    不是右键信息栏则退出
!!UN:C6919200/4/?y1;   获取战场结构地址
!!VRy2:Sy1+21708;    0号堆栈地址
!!VRy3:S21*1352+y2;21号堆栈地址
!!VRy4:S0;            施法者所属边,0为左边,1为右边,影响一些判定结果,比如谁有永恒之球
!!DO50000/0/80/1:Py1/y3/y4;

!?FU50000;   x16为魔法编号
!!FU&x16=77:E;         排除空魔法编号
!!FU&x16>=0/x16<15|x16=64/x16=66/x16=67/x16=68/x16=69:E;    排除冒险及非受身非伤害性魔法,虽然这些也能获取一个返回值,但不知道是根据什么来得出的,有兴趣的可以测试看看。排除是因为这类魔法的接受情况没有用处,也不一定正确
!!FU|x16=35/x16=38/x16=39/x16=40:E;             排除需要检查英雄相关参数才能决定是否可接受的魔法,这类的魔法接受情况似乎是按左边的英雄的相关参数来决定的,比如英雄有中级水系魔法技能,则检查21号堆栈(要求有魔法状态)对35号魔法的接受情况在其它检查条件通过时便会返回真值(1),有兴趣的可以测试看看到底由什么决定的。排除掉是因为结果不可预知
!!FU|x16=76/x16=79/x16=80:E;                  排除似乎不算是魔法的编号,检查这些编号应该也不能获取正确的值,78例外,检查结果正确,予以保留
!!SN:E5933392/2/x1/x16/x3/x2/1/1;            调用生物施法检查函数来检查21号堆栈对相关魔法的接受情况,调用后v1存储返回值
!!IF:M^魔法编号x16=%X16,v1=%V1(1表示可接受,0表示不接受)^;                        显示目标堆栈对相应编号魔法的接受情况,可以正确检查出束缚(即缠绕)的接受情况,但是要怎么用对束缚的检查结果是另一个需要研究的问题了(或者干脆不靠该函数来检查束缚)

感谢 超级版主 @沧海一粟提供测试数据(我个人觉得,禁魔球只管得到英雄施法函数的检查,管不到生物施法函数的检查,永恒之球应该也可以检查出来:D),以下为该数据:   

生物自带特技有效;(火免、精神免疫、亡灵、生命体、免疫N级魔法...)
生物经验特技有效;(自动检查等级,4系免疫、精神免疫、魔法免疫...)
生物抗魔技能有效;(自动检查机率)
生物减少魔法伤害有效;(这个应该原本就有效)
抗魔大法有效;(自动检查等级)
英雄宝物技能有效;(我的毁灭之球啊!禁魔球应该属于特殊检查范围故无效)

再附上其的一个应用例子供参考:ZVSE
**雷神射击前闪电
!?BG0&1000;
!!BG:A?y1 E?y2 N?y3 Q?y4;
!!FU|y2<0/y2>41/y3<0/y3>41:E;
!!BMy2:P?y5;
!!BMy3:T?y6;
!!FU|y1<>7/y6<>152:E;
!!UN:C6919200/4/?y10;
!!VRy11:Sy3 *1352 +21708 +y10;
!!VRy12:Sy2 *1352 +21708 +y10;
!!SN:E5933392/2/y10/17/y4/y12/1/1;   楼主注:检查被攻击单位对17号魔法的接受情况,填正确的边
!!if&v1=1:;      
!!BMy3:C17/y5/1/1/1;
!!el:;
!!BMy2:V78;
!!en:;

mywog 发表于 2013-11-13 16:49:48

牛啊,这个生物检查机制和原来的有区别吗?感觉差不多啊。

sakuya452 发表于 2013-11-13 16:53:25

本帖最后由 sakuya452 于 2013-11-13 20:27 编辑

mywog 发表于 2013-11-13 16:49
牛啊,这个生物检查机制和原来的有区别吗?感觉差不多啊。
和原来同时点的检查一致,有了这个,配合BM:C就可以添加任意个几乎等同于原效果的几率或非几率的攻击前施法/攻击后施法的技能了

新丁一枚 发表于 2013-11-13 17:06:25

赶脚好深奥啊其实我游戏的执着不在这里啊

贤知有您 发表于 2013-11-13 21:25:37

本帖最后由 贤知有您 于 2013-11-13 21:27 编辑

我很纠结.
原来雷鸟出闪电时曾经调用过5A8950,我怎么没认真看呢.
呵呵, 原来看汇编也并不是那么无法接受的.以前总感觉是天书.
楼主的出现,让我又明白了不少关于汇编的情况.得感谢楼主,我才对内存和汇编有了更深入的了解.

sakuya452 发表于 2013-11-13 21:38:32

本帖最后由 sakuya452 于 2013-11-13 23:04 编辑

贤知有您 发表于 2013-11-13 21:25
我很纠结.
原来雷鸟出闪电时曾经调用过5A8950,我怎么没认真看呢.
呵呵, 原来看汇编也并不是那么无法接受 ...
汇编程序其实就是甲骨文写的书,但是要在别人的程序里进行修改,添加或删除功能,更需要的是逆向分析能力,逆向分析能力就是在反汇编后(即将程序转换成汇编指令组成的程序后)能逆序阅读甲骨文的书还能理解其意思的能力

:deyi:纠结那么多干吗,既然能看懂就多深入学习造福WOG众呗,;fas;到时就是我等小白来佩服你了

而且贤知又认识FEA汇编大师,有空多交流交流,回来论坛传授点经验好让多点人也能学会点啊,多点人会总是好的,而且我也能从中学到点别人在逆向分析中的经验。

其实我挺好奇贤知怎么不多向FEA大师学习呢,再怎么说人家都比我这个才学不久的人会的多而且经验丰富。;bf;怎么都不至于你来感谢我啊,难道是因为我比较好欺负吗?

贤知有您 发表于 2013-11-14 08:51:35

sakuya452 发表于 2013-11-13 21:38
汇编程序其实就是甲骨文写的书,但是要在别人的程序里进行修改,添加或删除功能,更需要的是逆向分析能力 ...

楼主太谦虚了.
我是正在像楼主这等高手学习了.论坛没有你的加入,我想我还不知道汇编这么好玩.
至于FEA大师我不认识,他神龙见首不见尾.只是在HC论坛或者代码上能看到他的一些足迹.况且人家是外国人,沟通不了.
我倒是喜欢什么都研究一下,有楼主带领着我们,我想我又进步了.呵呵.

sakuya452 发表于 2013-11-14 12:22:22

本帖最后由 sakuya452 于 2013-11-14 12:34 编辑

贤知有您 发表于 2013-11-14 08:51
楼主太谦虚了.
我是正在像楼主这等高手学习了.论坛没有你的加入,我想我还不知道汇编这么好玩.
至于FEA ...
原来评分功能的回复才支持几个字啊。

想说学习研究仅需要认真严谨的态度,其它的会带来一些不必要的麻烦,所以还是希望能普通的交流讨论,互相进步

其实你之前看到的那个附加效果处理的子程序也是可以调用的,只是调用效果似乎不理想,你试试调用看看

沧海一粟 发表于 2013-11-15 21:01:17

这个功能的战略意义是非常巨大的,非常感谢楼主出手帮忙解决这个代码无法完全解决的问题;hap;;hap;
经测试,除了特殊的ERM定制召唤生物会出现小小插曲外,其它没有任何问题,非常实用好用,希望楼主能多多出手啊

hochibt1234 发表于 2013-11-15 22:28:35

学习了,感谢分享,正在研究中
页: [1]
查看完整版本: 战场上生物攻击/伤害施法检查函数的地址及其调用形式

捐赠