[ERM_HOOK]解决环击和吸血共存的问题
本帖最后由 贤知有您 于 2015-10-3 23:40 编辑好吧.这个其实不算BUG.也许是硬编码偷懒吧.
实际的吸血过程有2部分.
1.肉搏攻击时,会记录被攻击者的当前总HP.
2.吸血过程时,通过目标当前总HP(伤害后)和原总HP对比来确定攻击者能吸血多少.
另外有个特定设置是,当被攻击者(被吸血者)是个镜像体时,纵使目标一下全灭,也只吸1HP.
以下脚本分别针对2个过程来解决共存问题的.
需要指出的时,环击的吸血也只针对目标一个,而非群体.群体吸血虽然在技术上可行,但却是非常麻烦.
早写好了,论坛ERM技术有点冷清,放出来测试下.
ZVSE
*by贤知有您 Hawaiing 2015-7-31
*bloodsuck&retaliation
*用于解决环击和吸血无法共存的问题.修复后,环击时吸血生物可以对目标吸血(非群体吸血).
*需要erm_hooker.era插件才能运行.不能与其它修改过相关地方的脚本混用.
*FU111217-FU111218
*FU111219-FU111220
!?PI;
!!MA:X63/?i;
!!VRi:|524288;
!!MA:X63/i;[吸血鬼王为环击-用于测试]
*--------------------SetHook&UnsetHook---------------
!?BA0&1000;[战斗前]
!!FU111217:P0;
!!FU111219:P0;
!?BA1&1000;[战斗后]
!!FU111217:P1;
!!FU111219:P1;
*------------------------------------------------------------
!?FU111217;[肉搏攻击,环击进行前]
*004415FE - 8d 45 e8 - lea eax,
!!SN:L^EraPlugins\erm_hooker.era^/?y1 Ay1/^SetHook^/?y2 Ay1/^UnsetHook^/?y3;
!!SN&x1=0:Ey2/1/4462078/111218; hook at 004415FE => FU111218
!!SN&x1=1:Ey3/1/4462078;
!?FU111218;
*此时目标堆栈,写入的目标地址是
*计算目标堆栈的总HP,并写入目标地址
*需提取地址: EBP (8)
!!SN:X?y1/1;[按原命令执行]
!!VRy2:Sy1+8;
!!UN:Cy2/4/?y3; =ebp
!!VRy4:Sy3+8;
!!UN:Cy4/4/?y5; y5=目标堆栈
!!VRy6:Sy3-36;
!_!UN:Cy6/4/?y7; 原值
!!VRy8:Sy5+192; BM:H
!!VRy9:Sy5+76; BM:N
!!VRy10:Sy5+88; BM:L
!!UN:Cy8/4/?y11 Cy9/4/?y12 Cy10/4/?y13;
!!VRy14:Sy11*y12-y13;
!!VRy14&y14<0:S0;
!!UN:Cy6/4/y14;[写入数据]
*------------------------------------------------------------
!?FU111219;[吸血过程中]
*0044095A - 8b 8e c0 00 00 00 - mov ecx,
!!SN:L^EraPlugins\erm_hooker.era^/?y1 Ay1/^SetHook^/?y2 Ay1/^UnsetHook^/?y3;
!!SN&x1=0:Ey2/1/4458842/111220; hook at 0044095A => FU111220
!!SN&x1=1:Ey3/1/4458842;
!?FU111220;
*此时,本体堆栈esi,目标堆栈,目标堆栈原总HP,写入目标地址是(指针)
*若本体堆栈拥有环击标志,但重算可吸血HP.用原总HP-当前目标堆栈总HP获得.并写入到相应内存上.
*需提取地址:EDI (0),ESI (4), EBP (8)
!!SN:X?y1/1;[按原命令执行]
!!UN:Cy1/4/?y2; y2=edi
!!VRy3:Sy1+4;
!!UN:Cy3/4/?y4; y4=esi
!!VRy21:Sy4+132;
!!UN:Cy21/4/?y22; y22=本体堆栈标志
!!VRy22:&524288;是否环击
!!FU&y22=0:E;
!!VRy5:Sy1+8;
!!UN:Cy5/4/?y6; y6=ebp
!!VRy7:Sy6+8;
!!UN:Cy7/4/?y8; y8=目标堆栈
!!VRy9:Sy6+20;
!!UN:Cy9/4/?y10; y10=目标堆栈原总HP
!!VRy11:Sy8+192; BM:H
!!VRy12:Sy8+76; BM:N
!!VRy13:Sy8+88; BM:L
!!VRy14:Sy8+132;BM:F
!!UN:Cy11/4/?y15 Cy12/4/?y16 Cy13/4/?y17 Cy14/4/?y18;
!!VRy19:Sy15*y16-y17;目标当前总HP
!!VRy20:Sy10-y19;
!!VRy20&y20<0:S0;
!!VRy18:&8388608;[是否克隆体]
!!VRy20&y18>0/y20>1:S1;[按原作设定克隆体只为1hp]
!!UN:Cy2/4/y20; 写入到 上
*贤知有您 Hawaiing*
群体吸血我记得寻梦人的李多海变态之旅这个地图的吸魂就是啊 兽哥哥 发表于 2015-9-18 10:50
群体吸血我记得寻梦人的李多海变态之旅这个地图的吸魂就是啊
特定的模拟和内存修改是两码事.
纯ERM是无法解决 环击和吸血问题的.
只有修改硬编码才行.(内存修改) 环击吸血,是否说打了鸡血的九头也有可能每个头都孤注一掷?这样的九头生猛呀! 贤知有您 发表于 2015-9-18 11:56
特定的模拟和内存修改是两码事.
纯ERM是无法解决 环击和吸血问题的.
只有修改硬编码才行.(内存修改)
明白了 zhuran0822 发表于 2015-9-18 16:33
感谢好帖,如果集成到封神,那鬼族要再创巅峰,吸血鬼王海要彻底压下骷髅海、僵尸海了
苍老师表示鬼族已经强到吐了……;cool; :buxie:有些时候还挺期盼这个问题不解决的……
吸血本身就是超级逆天的能力了,和环击集合到同一个单位身上实在是……有个龙息玩也挺不错了吧 内存修改,007特长 神物。
能否环击和龙息共存呢? 本帖最后由 贤知有您 于 2015-9-19 09:20 编辑
wuxiangjinxing 发表于 2015-9-19 07:35
神物。
能否环击和龙息共存呢?
这两个属于同种类的技能.即都是生物的标志技能.
在硬编码层面,首先判断是否环击(包括三首犬的攻击),没有环击才去继续判断龙息的.
两段代码都涉及到真正目标的伤害计算,如果共存让两者都运行,那么目标将被处理了2次.
要动大手术是很困难的.
另外一个可行的解决方案是:
给玩家一个选择框,提示用龙息还是环击攻击.
楼主可自行编写这类脚本.
本帖最后由 贤知有您 于 2015-9-20 08:05 编辑
zhuran0822 发表于 2015-9-19 14:12
封神的元素族魔法元素是怎么实现双格环击的?环击的格数是参数可控的吗?目前见到的最牛的攻击方式就是这 ...
!!if|y10=120/y10=121:;元素范围攻击
!!VRy35:Sy3 :21 *21;
!!VRy36:Sy35 +19;
!!if&y5=6:;
!!VRz9:S^Fireblst.wav^;
!!SN:Pz9;
!!VRz3:S^DesODoS.def^;灭世之门
!!FU16042:P0/3/y1/1/1/1;//调用指定堆栈施放外调DEF函数 By 007
!!DO17005/y35/y36/1:P360/y1/y3/y4;检查敌方堆栈
!!VRz10:Sz220590;
!!MM:Sz10;
!!en:;
!!en:;
!?FU17005&x1=360;
!!BMx16:T?y10 N?y11 P?y12 F?k;
!!FU|x16=x3/y10=149/y11<1:E;
!!FU16011:Px2/x16/?y13; //调用计算生物之间距离函数 By Besry
!!if&y13=2:; 只对周围2格部队有效
!!BMx16:Kx4;
!!en:;
只是个模拟的效果.
原理很简单:遍历敌方所有部队与魔法元素之间的距离,距离为2时给它一个特定直接伤害.
这里y13就是计算堆栈和堆栈的距离.设置为2时,就是2格外,同时排除了本来是环击的情况(1格).
但模拟是不同于本来的环击的,有2点需要注意:
1.模拟伤害是以环击时目标的伤害为基准,而不是每队都产生不同的伤害.
2.模拟伤害时直接BM:K伤害,它不执行大部分WOG特征.比如不会触发格挡偏移之类.
另外由于是在 MF1触发器下触发,也就是说,需要ERM作者排除所有其它MF1伤害.因为环击会产生多种MF1.
本帖最后由 wuxiangjinxing 于 2015-10-3 12:31 编辑
本楼作废………… 可是我不会用!! 上面的编码有个小错:
第48行
!!SN:L^EraPlugins\erm_hooker.era^/?y1 Ay1/^SetHook^/?y2 Ay1/^UnsetHook^/?y2;
这个y2应该是y3
@贤知有您 wuxiangjinxing 发表于 2015-10-3 12:30
上面的编码有个小错:
第48行
确实是笔误写错了.
当时x1=0和x1=1分开2个FU函数,后来整合时写错了.
谢谢反馈. 好东西 可是作为小白应该怎么用捏 好高端。。。那些代码完全看不懂,捧个人场,楼主有心了 学习了。赶紧下一个体验下 请问楼主,那个hook.era插件要去哪里下载?然后这些代码放哪里? 本帖最后由 chenmissjin 于 2017-1-13 21:55 编辑
贤知大大,我把这些代码粘贴到新建的erm文件中(放在data/s),的确是解决了鬼魂吸魂和环击的冲突,然而进入游戏第一次开始战斗和战斗结束都会erm报错并且第二次进入战斗后失效。请问应该如何解决?
页:
[1]