- 积分
- 34677
- 威望
- 499
- 魅力
- 507
- 经验
- 20326
- 热心度
- 9
- 注册时间
- 2006-3-13
- 最后登录
- 2024-9-30
- 主题
- 134
- 回帖
- 4949
- 精华
- 35
- 阅读权限
- 150
TA的每日心情 | 郁闷 2015-6-6 16:12 |
---|
签到天数: 52 天 连续签到: 1 天 [LV.5]女巫
超级版主
- 积分
- 34677
|
本帖最后由 贤知有您 于 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;[test]
- !!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,[ebp-18]
- !!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;
- *此时目标堆栈[ebp+08],写入的目标地址是[ebp-24]
- *计算目标堆栈的总HP,并写入目标地址
- *需提取地址: EBP (8)
- !!SN:X?y1/1;[按原命令执行]
- !!VRy2:Sy1+8;
- !!UN:Cy2/4/?y3; =ebp
- !!VRy4:Sy3+8;
- !!UN:Cy4/4/?y5; y5=目标堆栈[ebp+08]
- !!VRy6:Sy3-36; [ebp-24]
- !_!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,[esi+000000c0]
- !!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,目标堆栈[ebp+08],目标堆栈原总HP[ebp+14],写入目标地址是[edi](指针)
- *若本体堆栈拥有环击标志,但重算可吸血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=目标堆栈[ebp+08]
- !!VRy9:Sy6+20;
- !!UN:Cy9/4/?y10; y10=目标堆栈原总HP[ebp+14]
- !!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;[HP差额]
- !!VRy20&y20<0:S0;
- !!VRy18:&8388608;[是否克隆体]
- !!VRy20&y18>0/y20>1:S1;[按原作设定克隆体只为1hp]
- !!UN:Cy2/4/y20; 写入到 [edi]上
- *贤知有您 Hawaiing*
复制代码
|
评分
-
2
查看全部评分
-
|