佳丽云

英雄无敌3-WoG中文站

 找回密码
 英雄注册|Register
查看: 3668|回复: 17

为什么负运气脚本单独拿出来会出错...SN:E错误...

[复制链接]

该用户从未签到

1066

回帖

7228

金币

1

精华

5级 Honorable Hero

Rank: 5Rank: 5

积分
6026
发表于 2017-5-5 21:27:46 | 显示全部楼层 |阅读模式
直接放入图里...就会出现SN:E; 出错的提示..

ZVSE
*作者:贤知有您 (Hawaiing 007)
*需要ERM_HOOKER插件支持.
*******************************************************************
肉搏攻击或射击攻击所有攻击动作之后触发器模块——最后更新 2014-9-22
*******************************************************************
;   EDI (0), ESI (4), EBP (8), ESP (12), EBX (16), EDX (20), ECX (24), EAX (28)
;   RetAddr (32)
*FU777710[] 生物射击或攻击之后 (FU111105-FU111106)(所有攻击反击双击完成之后,FU77006之前,BR之前,BG1之前)
*-----------------------------初始化HOOK或解除HOOK---------------
!?BA0&1000;[战斗前]
!!FU111105:P0;[生物射击或攻击之后]
!?BA1&1000;[战斗后]
!!FU111105:P1;[生物射击或攻击之后]
*--------------------------------------------
!?FU111105&x1=0;[射击或攻击之后]
*004459D7 5F pop edi <-----这里HOOK入
*004459D8 5E pop esi
*004459D9 B001 mov al,01h
*004459DB 5B pop ebx
*004459DC 8BE5 mov esp,ebp <-----返回
!!SN:L^EraPlugins\erm_hooker.era^/?y1 Ay1/^SetHook^/?y2;
!!SN:Ey2/1/4479447/111106; hook at 0x004459D7 => FU111106

!?FU111105&x1=1;[射击或攻击之后]解除HOOK
!!SN:L^EraPlugins\erm_hooker.era^/?y1 Ay1/^UnsetHook^/?y2;
!!SN:Ey2/1/4479447;

!?FU111106;[射击或攻击之后,连接FU拦截式触发器]
!!SN:X?y1/1; [运行原来的代码]
!!FU777710:P;[这是个触发器,没有参数,可以使用几乎所有的BG参数]

*******************************************************************
                   厄运效果模块——最后更新 2014-10-23
*******************************************************************
*实现霉运效果(或厄运效果)(BadLuck),霉运时伤害减半
*去掉原官方版本中,需要有英雄带领生物才能拥有幸运一击的限制(无需英雄带领)

!?PI;
*0043F642 - 0f 84 ae 00 00 00 - je 0043f6f6 射击时判断
*00441524 - 0f 84 b4 00 00 00 - je 004415de 肉搏判断
!!UN:C4453954/4/2425393296;
!!UN:C4453958/2/37008;
!!UN:C4461860/4/2425393296;
!!UN:C4461864/2/37008;
!!FU111201:P;
!!FU111203:P;
!!FU111205:P;

!?GM0;
!!UN:C4453954/4/2425393296;
!!UN:C4453958/2/37008;
!!UN:C4461860/4/2425393296;
!!UN:C4461864/2/37008;
!!FU111201:P;
!!FU111203:P;
!!FU111205:P;

!?FU111201;[射击判断幸运一击之后]esi为堆栈
*0043F6F6 - 8b 7d 08 - mov edi,[ebp+08] #幸运一击处理完毕后(HOOK入)
*0043F6F9 - 8b ce - mov ecx,esi
!!SN:L^EraPlugins\erm_hooker.era^/?y1 Ay1/^SetHook^/?y2;
!!SN:Ey2/1/4454134/111202; hook at 0x0043F6F6 => FU111202

!?FU111202;[射击判断幸运一击之后]
*此时esi为堆栈内存*
!!SN:X?y1/1; [运行原来的代码]
!!VRy2:Sy1+4;[ESI地址]
!!UN:Cy2/4/?y4;[堆栈内存=y4]
!!UN:C6919200/4/?y10;
!!VRy11:Sy4-y10-21708:1352;[攻击者堆栈号]
!!VRy12:Sy4-y10-21708%1352;
!!FU|y12<>0/y11<0/y11>41:E;[堆栈错误]
!!BMy11:T?y13 G213/?y20/d;[当前运气值]
!!FU|y13<0/y13=149/y20>=0:E;
!!VRy21:Sy20*-1;
*!VRy21&y21>3:S3;
!!VRy21&y21>10:S10;   封神特殊改动
!!UN:P616/=1;
!!VRy23:S23;
!!VRy23&1:S13;
!!VRy22:S1Ry23;[随机1-24(S1R23)]
!!FU&y22>y21:E;[1-3对应几率分别是1/24,1/12,1/8]
!!VRz-2:S^Misfort.wav^;[优先播放声效]
!!SN:Pz-2;
!!BMy11:G-74/-1/d V48;[设定一个标志](用于后面的计算伤害)
!!UN:N3/2/y13/0;
!!VRz-1:S^%Z2交上了恶运!^;
!!BU:Mz-1;

!?FU111203;[肉搏判断幸运一击之后]esi
*004415DE - 8b 96 84 00 00 00 - mov edx,[esi+00000084] #判断幸运一击完毕之后(HOOK入)
*004415E4 - 89 7d f0 - mov [ebp-10],edi
!!SN:L^EraPlugins\erm_hooker.era^/?y1 Ay1/^SetHook^/?y2;
!!SN:Ey2/1/4462046/111204; hook at 0x004415DE => FU111204

!?FU111204;[肉搏判断幸运一击之后]esi(与射击段一样)
*此时esi为堆栈内存*
!!SN:X?y1/1; [运行原来的代码]
!!VRy2:Sy1+4;[ESI地址]
!!UN:Cy2/4/?y4;[堆栈内存=y4]
!!UN:C6919200/4/?y10;
!!VRy11:Sy4-y10-21708:1352;[攻击者堆栈号]
!!VRy12:Sy4-y10-21708%1352;
!!FU|y12<>0/y11<0/y11>41:E;[堆栈错误]
!!BMy11:T?y13 G213/?y20/d;[当前运气值]
!!FU|y13<0/y13=149/y20>=0:E;
!!VRy21:Sy20*-1;
*!VRy21&y21>3:S3;
!!VRy21&y21>10:S10;   封神特殊改动
!!UN:P616/=1;
!!VRy23:S23;
!!VRy23&1:S13;
!!VRy22:S1Ry23;[随机1-24(S1R23)]
!!FU&y22>y21:E;[1-3对应几率分别是1/24,1/12,1/8]
!!VRz-2:S^Misfort.wav^;[优先播放声效]
!!SN:Pz-2;
!!BMy11:G-74/-1/d V48;[设定一个标志](用于后面的计算伤害)
!!UN:N3/2/y13/0;
!!VRz-1:S^%Z2交上了恶运!^;
!!BU:Mz-1;

!?FU111205;[计算堆栈伤害时考虑幸运一击之后]ebx
*004430A3 - 8b 43 70 - mov eax,[ebx+70] #幸运一击的标志
*004430A6 - 85 c0 - test eax,eax
*004430A8 - 7e 0b - jle 004430b5 #非大于0则跳转
*004430AA - 8b 45 08 - mov eax,[ebp+08] #第二参数(伤害值)*
*004430AD - 8b 4d f0 - mov ecx,[ebp-10] #[ebp-10]用于返回伤害
*004430B0 - 03 c8 - add ecx,eax #幸运时伤害翻倍
*004430B2 - 89 4d f0 - mov [ebp-10],ecx #
*这里插入检测是否有霉运(标志值为-1),需要更新[ebp-10],原传递伤害为[ebp+08]
*004430B5 - 8b 4d 0c                   - mov ecx,[ebp+0c] #第三参数 (HOOK入)
*004430B8 - 51                         - push ecx #第三参数
!!SN:L^EraPlugins\erm_hooker.era^/?y1 Ay1/^SetHook^/?y2;
!!SN:Ey2/1/4468917/111206; hook at 0x004430B5 => FU111206

!?FU111206;[计算堆栈伤害时考虑幸运一击之后]ebx
*需要ebx,ebp
!!SN:X?y1/1; [运行原来的代码]
!!VRy2:Sy1+4;[EBX地址]
!!VRy3:Sy1+8;[EBP地址]
!!UN:Cy2/4/?y5;[EBX值=堆栈内存]
!!UN:Cy3/4/?y6;[ebp]
!!VRy20:Sy6-16;[[EBP-10]为返回的伤害值]
!!VRy21:Sy6+8;[[EBP+8]为原函数传递的参数中的伤害值(第二参数)]
!!UN:Cy20/4/?y7;[[EBP-10]得当前伤害值]
!!UN:Cy21/4/?y8;[原传递伤害值]
!!UN:C6919200/4/?y10;
!!VRy11:Sy5-y10-21708:1352;[攻击者堆栈号y11]
!!VRy12:Sy5-y10-21708%1352;
!!FU|y12<>0/y11<0/y11>41:E;[堆栈错误]
!!BMy11:G-74/?y13/d;[y13=幸运标志的值]
!!FU&y13<>-1:E;
!!VRy8::2;[伤害值减半]
!!VRy7:-y8;[可能是负数(原本是为了计算附加伤害)]
!!UN:Cy20/4/y7;[[ebp-10]的更新]

该用户从未签到

1066

回帖

7228

金币

1

精华

5级 Honorable Hero

Rank: 5Rank: 5

积分
6026
 楼主| 发表于 2017-5-6 11:02:36 | 显示全部楼层
XEricSin 发表于 2017-5-5 22:58
*需要ERM_HOOKER插件支持.

你仔细看了吗?这玩意在plugin文件夹里面

必须DAT S ????

该用户从未签到

1066

回帖

7228

金币

1

精华

5级 Honorable Hero

Rank: 5Rank: 5

积分
6026
 楼主| 发表于 2017-5-6 13:37:23 | 显示全部楼层
贤知有您 发表于 2017-5-6 13:25
必须使用 erm_hooker.era 插件

这插件能创造促发器?FU777710[] 生物射击或攻击之后 (FU111105-FU111106??那么能利用这个插件创造攻击前的促发器吗?就BG0-MF1 之间的那个怪物刚好移动后.即将攻击的那个.....

该用户从未签到

1066

回帖

7228

金币

1

精华

5级 Honorable Hero

Rank: 5Rank: 5

积分
6026
 楼主| 发表于 2017-5-6 13:38:31 | 显示全部楼层
贤知有您 发表于 2017-5-6 13:25
必须使用 erm_hooker.era 插件

这插件感觉好牛逼啊!!!....尤其是看见前面几句...制造新的促发器......

该用户从未签到

1066

回帖

7228

金币

1

精华

5级 Honorable Hero

Rank: 5Rank: 5

积分
6026
 楼主| 发表于 2017-5-6 13:49:48 | 显示全部楼层
贤知有您 发表于 2017-5-6 13:25
必须使用 erm_hooker.era 插件

对了负运气应该是只有MF之前才有效吧???...
!?FU111203;[肉搏判断幸运一击之后]  应该是这个吧? 这个插件有说明吗??

该用户从未签到

1066

回帖

7228

金币

1

精华

5级 Honorable Hero

Rank: 5Rank: 5

积分
6026
 楼主| 发表于 2017-5-6 14:24:59 | 显示全部楼层
贤知有您 发表于 2017-5-6 13:25
必须使用 erm_hooker.era 插件

好吧果然时代变了....原来几百行代码现在就几句解决..而变得更加稳定.....这插件确实破天荒的意义...

该用户从未签到

1066

回帖

7228

金币

1

精华

5级 Honorable Hero

Rank: 5Rank: 5

积分
6026
 楼主| 发表于 2017-5-6 14:26:57 | 显示全部楼层
XEricSin 发表于 2017-5-5 22:58
*需要ERM_HOOKER插件支持.

你仔细看了吗?这玩意在plugin文件夹里面

这插件果然牛逼得不行啊!原来快破千行的代码现在不到10句解决.而且是完美解决!

该用户从未签到

1066

回帖

7228

金币

1

精华

5级 Honorable Hero

Rank: 5Rank: 5

积分
6026
 楼主| 发表于 2017-5-6 17:41:34 | 显示全部楼层
贤知有您 发表于 2017-5-6 16:35
楼主慢慢来,须先有扎实的erm基础知识,然后很多功能都是套用。等你全面了解了,你就可以利用插件做这些超 ...

唉.不行还是无法解决诈尸问题..........这个抢先反击伤害非常正确.只有没抢先打死对方就是完美脚本.但是如果打死对方了就会被诈尸一次1伤害攻击...不知道有没有清理数量为0堆斩行动的内存方法...强制复位..取消掉这次攻击.中途被地雷炸死烧死不也没出现这种诈尸情况.......不知道有不有内存强制让怪停止行动的方法..

该用户从未签到

1066

回帖

7228

金币

1

精华

5级 Honorable Hero

Rank: 5Rank: 5

积分
6026
 楼主| 发表于 2017-5-6 17:57:15 | 显示全部楼层
贤知有您 发表于 2017-5-6 16:35
楼主慢慢来,须先有扎实的erm基础知识,然后很多功能都是套用。等你全面了解了,你就可以利用插件做这些超 ...

有办法拦截...这个
!!SN:E4461360/2/y10/y11/x3;   攻击且伤害
的内存吗...如果用哪个厄运触发器..如果攻击方被抢先打死..由于后面还有一个!!SN:E4461360/2/y10/y11/x3;类似语句..就好像无论你前面如何写后面都被增加这句 !!SN:E4461360/2/y10/y11/x3;   攻击且伤害..就是清除堆栈都没用...这个语句!!SN:E4461360/2/y10/y11/x3;   就算是y10是不存在的堆栈..照样能给y11一点攻击伤害.而且做出伤害动作..也就是说必须拦截..

该用户从未签到

1066

回帖

7228

金币

1

精华

5级 Honorable Hero

Rank: 5Rank: 5

积分
6026
 楼主| 发表于 2017-5-6 18:05:54 | 显示全部楼层
贤知有您 发表于 2017-5-6 16:35
楼主慢慢来,须先有扎实的erm基础知识,然后很多功能都是套用。等你全面了解了,你就可以利用插件做这些超 ...

话说这个插件有说明书没有....

该用户从未签到

1066

回帖

7228

金币

1

精华

5级 Honorable Hero

Rank: 5Rank: 5

积分
6026
 楼主| 发表于 2017-5-6 19:57:07 | 显示全部楼层
XEricSin 发表于 2017-5-6 19:00
你看看封神文件里的eraplugins文件夹,复制到你的mod里面

已经用了.只是感觉无法大规模运用啊...无法开发这钩子..
ahome_bigavatar:guest
ahome_bigavatar:welcomelogin
您需要登录后才可以回帖 登录 | 英雄注册|Register

本版积分规则

捐赠
关注我们,英3Mod一网打尽!

WoG中文站 ( 辽B2-20210485-10 )|辽公网安备 21128202000228 号

GMT+8, 2026-4-7 17:17 , Processed in 1.037367 second(s), 13 queries , Gzip On, File On.

Powered by Discuz! X3.4

Copyright © 2004-2022, Beijing Second Sight Technology Co., LTD.

快速回复 返回顶部 返回列表