佳丽云

英雄无敌3-WoG中文站

 找回密码
 英雄注册|Register
查看: 2634|回复: 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]的更新]
  • TA的每日心情
    开心
    2015-12-9 01:09
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]火元素使者

    1839

    回帖

    8223

    金币

    8

    精华

    版主

    Rank: 10Rank: 10Rank: 10

    积分
    10815

    社区QQ达人

    发表于 2017-5-5 22:58:38 | 显示全部楼层
    *需要ERM_HOOKER插件支持.

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

    点评

    air
    这插件果然牛逼得不行啊!原来快破千行的代码现在不到10句解决.而且是完美解决!  详情 回复 发表于 2017-5-6 14:26
    air
    必须DAT S ????  详情 回复 发表于 2017-5-6 11:02

    该用户从未签到

    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 ????
  • TA的每日心情
    郁闷
    2015-6-6 16:12
  • 签到天数: 52 天

    连续签到: 1 天

    [LV.5]女巫

    4949

    回帖

    3万

    金币

    35

    精华

    超级版主

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    34677

    论坛守望者论坛元老杰出贡献

    发表于 2017-5-6 13:25:25 来自手机 | 显示全部楼层
    必须使用 erm_hooker.era 插件

    点评

    air
    好吧果然时代变了....原来几百行代码现在就几句解决..而变得更加稳定.....这插件确实破天荒的意义...  详情 回复 发表于 2017-5-6 14:24
    air
    对了负运气应该是只有MF之前才有效吧???... !?FU111203;[肉搏判断幸运一击之后] 应该是这个吧? 这个插件有说明吗??  详情 回复 发表于 2017-5-6 13:49
    air
    这插件感觉好牛逼啊!!!....尤其是看见前面几句...制造新的促发器......  详情 回复 发表于 2017-5-6 13:38
    air
    这插件能创造促发器?FU777710[] 生物射击或攻击之后 (FU111105-FU111106??那么能利用这个插件创造攻击前的促发器吗?就BG0-MF1 之间的那个怪物刚好移动后.即将攻击的那个.....  详情 回复 发表于 2017-5-6 13:37

    该用户从未签到

    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句解决.而且是完美解决!
  • TA的每日心情
    郁闷
    2015-6-6 16:12
  • 签到天数: 52 天

    连续签到: 1 天

    [LV.5]女巫

    4949

    回帖

    3万

    金币

    35

    精华

    超级版主

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    34677

    论坛守望者论坛元老杰出贡献

    发表于 2017-5-6 16:35:41 来自手机 | 显示全部楼层
    楼主慢慢来,须先有扎实的erm基础知识,然后很多功能都是套用。等你全面了解了,你就可以利用插件做这些超炫的功能,甚至你还可以做插件。

    点评

    air
    话说这个插件有说明书没有....  详情 回复 发表于 2017-5-6 18:05
    air
    有办法拦截...这个 !!SN:E4461360/2/y10/y11/x3; 攻击且伤害 的内存吗...如果用哪个厄运触发器..如果攻击方被抢先打死..由于后面还有一个!!SN:E4461360/2/y10/y11/x3;类似语句..就好像无论你前面如何写后面都被  详情 回复 发表于 2017-5-6 17:57
    air
    唉.不行还是无法解决诈尸问题..........这个抢先反击伤害非常正确.只有没抢先打死对方就是完美脚本.但是如果打死对方了就会被诈尸一次1伤害攻击...不知道有没有清理数量为0堆斩行动的内存方法...强制复位..取消掉这  详情 回复 发表于 2017-5-6 17:41

    该用户从未签到

    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基础知识,然后很多功能都是套用。等你全面了解了,你就可以利用插件做这些超 ...

    话说这个插件有说明书没有....
  • TA的每日心情
    开心
    2015-12-9 01:09
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]火元素使者

    1839

    回帖

    8223

    金币

    8

    精华

    版主

    Rank: 10Rank: 10Rank: 10

    积分
    10815

    社区QQ达人

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

    点评

    air
    已经用了.只是感觉无法大规模运用啊...无法开发这钩子..  详情 回复 发表于 2017-5-6 19:57

    该用户从未签到

    1066

    回帖

    7228

    金币

    1

    精华

    5级 Honorable Hero

    Rank: 5Rank: 5

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

    已经用了.只是感觉无法大规模运用啊...无法开发这钩子..
  • TA的每日心情
    郁闷
    2015-6-6 16:12
  • 签到天数: 52 天

    连续签到: 1 天

    [LV.5]女巫

    4949

    回帖

    3万

    金币

    35

    精华

    超级版主

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    34677

    论坛守望者论坛元老杰出贡献

    发表于 2017-5-6 23:53:08 | 显示全部楼层
    ERM_HOOKER的说明书是这样子的.
    Bersy said:
    ERM Hooker v1.0.0
    Era plugin allows to easily install and remove code hooks which execute corresponding ERM handlers.
    {code block address} => {erm function receiving the context}

    API:
    (*
    ErmHandlerFunc receives two SN:X arguments: (Context pointer, ExecuteOverwrittenCode? = 1)
    If you set ExecuteOverwrittenCode to 0, be sure to change context.RetAddr
    Context structure (offsets in brackets):
    : EDI (0), ESI (4), EBP (8), ESP (12), EBX (16), EDX (20), ECX (24), EAX (28)
    : RetAddr (32)

    Returns non-zero value on success. Fails if another hook is set at the same address.
    *)
    function SetHook (Addr: pointer; ErmHandlerFunc: integer): longbool; stdcall;
    (*
    Removes erm hook at specified address. Returns true if hook existed.
    *)
    function UnsetHook (Addr: pointer): longbool; stdcall;
    (*
    Prints list of hooks in "DebugEraerm hooks.txt"
    *)
    procedure PrintHooks; stdcall;

    All hooks are automatically removed on the following events: new game start, game loading, game leaving (Era 2.55+).

    Plugin supports both Era 2.46 and Era 2.55+. For 2.55+ it handles OnGenerateDebugInfoEvent (you can generate list of hooks by pressing F11) and OnGameLeave event.

    Example of usage:
    !?FU102777;
    !!SN:L^EraPluginserm_hooker.era^/?y1 Ay1/^SetHook^/?y2;
    !!SN:Ey2/1/5933074/102778; 0x5a8812

    !?GM0;
    !!FU102777:P;

    !?PI;
    !!FU102777:P;

    !?FU102778;
    !!IF:M^Hi from hook!^;
  • TA的每日心情
    开心
    2020-9-22 10:32
  • 签到天数: 29 天

    连续签到: 1 天

    [LV.4]狂狼人

    307

    回帖

    6416

    金币

    0

    精华

    4级 Famous Hero

    Rank: 4

    积分
    1366
    发表于 2020-5-29 14:01:07 | 显示全部楼层
    好帖,但找不到erm_hooker.era

    点评

    era2.9新版的没有单独插件,是集成的。 我们当年用这个插件时是era246。  详情 回复 发表于 2020-5-30 11:30
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2015-6-6 16:12
  • 签到天数: 52 天

    连续签到: 1 天

    [LV.5]女巫

    4949

    回帖

    3万

    金币

    35

    精华

    超级版主

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    34677

    论坛守望者论坛元老杰出贡献

    发表于 2020-5-30 11:30:18 | 显示全部楼层
    盘古 发表于 2020-5-29 14:01
    好帖,但找不到erm_hooker.era

    era2.9新版的没有单独插件,是集成的。
    我们当年用这个插件时是era246。
    回复 支持 反对

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 英雄注册|Register

    本版积分规则

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

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

    GMT+8, 2024-12-23 08:02 , Processed in 2.143965 second(s), 11 queries , Gzip On, File On.

    Powered by Discuz! X3.4

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

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