佳丽云

英雄无敌3-WoG中文站

 找回密码
 英雄注册|Register
查看: 2341|回复: 4

死亡一击hook问题

[复制链接]
  • TA的每日心情
    开心
    2015-12-9 01:09
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]火元素使者

    1839

    回帖

    8223

    金币

    8

    精华

    版主

    Rank: 10Rank: 10Rank: 10

    积分
    10786

    社区QQ达人

    发表于 2016-5-1 12:45:40 | 显示全部楼层 |阅读模式
    @贤知有您  说:死亡一击经验特技中的等级几率指的是触发原版20%几率死亡一击的几率。
    那么我设置了一个每级100%触发死亡一击经验特技:
    !!EA201:Bv5245/1/101/37/100/100/100/100/100/100/100/100/100/100/100;  
    这样的实际效果应该是20%的触发几率。

    封神中有对死亡一击等级几率的修复。如下截取。但是看得似懂非懂的。
    大概理解是这样的。。。
    战斗开始前设置一个hook,在死亡一击被使用的时候
    触发FU111122,程序记录显示的等级几率,根据是不是死骑(y5=67)进行修改
    再触发Fu777713,考虑兵种是不是死骑,英雄特技,物品特技对几率加成,
    最后修改程序实际使用的死亡一击几率。
    战斗结束后,关闭hook。

    但是我没发现关于其他兵种使用致命一击时的几率修改。那么我上面100%几率的设定,放到封神里,将还是20%的净几率?

    或者,触发FU111122时,y5=67检测的不是兵种,而只是有没有死亡一击这个技能,那么就变成净100%触发了?
    !?FU777713&1000/v6103=0;
    !!UN:Cx2/4/?y3;
    !!if&y3=67:;
    这里的y3=67,检测的是不是兵种呢?或者只是检测有没有死亡一击这个技能?



    *******************************************************************
               死亡一击判断前触发器模块——最后更新 2014-10-25
    *******************************************************************
    *007的FU触发器约定用3个FU函数代表一次内存HOOK:
    *第一函数用于新增HOOK(x1=0为HOOK,x1=1为UNHOOK)
    *第二函数是被HOOK的函数,在HOOK位置上获得一些信息(处理寄存器),传递给第三函数.(使用第一函数号+1)
    *第三函数相当于一个触发器.强烈建议不修改FU触发器的x参数,以便每次触发均得到正确的参数(使用777700开始的函数)
    *FU777713[x1,x2,x3,x4] 判断死亡一击前触发(FU111121-FU111122)x1=堆栈,x2=寄存地址[028468d4]当地址为67时表示可以产生死亡一击,x3=修改死亡一击实际几率的地址(1字节) x4=原系统计算的死亡一击几率

    *-----------------------------初始化HOOK或解除HOOK---------------
    !?BA0&1000;[战斗前]
    !!FU111121:P0;[判断死亡一击前触发]

    !?BA1&1000;[战斗后]
    !!FU111121:P1;[判断死亡一击前触发]
    !!UN:C4470496/1/20;
    *------------------------------------------------------------
    *死亡一击出现前触发(FU111121-FU111122)
    !?FU111121&x1=0;[判断死亡一击前触发]
    *004436DE - 83 f8 14 - cmp eax,14
    *00766DB4 - a1 d4 68 84 02- mov eax,[028468d4] : 00000000 ->HOOK入
    *00766DB9 - 83 e8 43- sub eax,43
    !!SN:L^EraPlugins\erm_hooker.era^/?y1 Ay1/^SetHook^/?y2;
    !!SN:Ey2/1/7761332/111122; hook at 0x00766DB4 => FU111122

    !?FU111121&x1=1;[死亡一击出现前触发]解除HOOK
    !!SN:L^EraPlugins\erm_hooker.era^/?y1 Ay1/^UnsetHook^/?y2;
    !!SN:Ey2/1/7761332;

    !?FU111122;[判断死亡一击前触发]
    *此时[02846888]为堆栈内存,[028468d4]为返回生物类型的地址(用于触发器参数x2的返回地址),[02860220]为获得经验特技的几率(静态,包括死亡骑士的20%),计算几率地址4470496 x4=原死亡一击几率
    !!UN:C42231944/4/?y4;[堆栈内存]
    !!UN:C42232020/4/?y5;[返回生物类型的寄存地址]
    !!UN:C42336800/4/?y6;[死亡一击的几率(经验特技或死亡骑士)]
    !!UN:C6919200/4/?y10;
    !!VRy11:Sy4-y10-21708:1352;[堆栈号]
    !!VRy12:Sy4-y10-21708%1352;
    !!FU|y12<>0/y11<0/y11>41:E;[堆栈错误]
    !!VRy6&y6>100:S100;
    !!VRy6&y6<0:S0;
    !!UN&y5=67:C4470496/1/y6;[用于修复原死亡一击经验特技的BUG(几率无效bug)]
    !!BMy11:T?y13;[实际的类型]
    !!UN&y13=67/y6<20:C4470496/1/20;[保留原死亡骑士的20%触发几率(当经验特技几率低于20%时)](有待研究是否有必要)
    !!FU777713:Py11/42232020/4470496/y6;

    *致命一击判断前触发------
    !?FU777713&1000/v6103=0;
    !!UN:Cx2/4/?y3;
    !!if&y3=67:;
    !!SN:W^Monsters.67^/?y1;
    !!if&y1>0:;
    !!UN:Cx3/1/100;
    !!en:;
    !!en:;


    本帖被以下淘专辑推荐:

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

    连续签到: 1 天

    [LV.5]女巫

    4947

    回帖

    3万

    金币

    35

    精华

    超级版主

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

    积分
    34630

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

    发表于 2016-5-1 17:12:52 | 显示全部楼层
    这个 HOOK 修复了经验特技的BUG,也就是说,你在经验特技中的100%几率将会是实际的100%几率.

    可以在FU777713 这个触发器下编写特定的死亡一击几率,也就是说,可以不用经验特技而给某个生物或堆栈设置一个死亡一击几率.
    以下是这个HOOK的特例:

    !?FU777713;[判断死亡一击前触发(触发器)]
    *x1=堆栈号(只读)
    *x2=寄存地址(4字节,用于后面判定是否触发死亡一击)(可读写,只有值为67时才有机会出死亡一击)
    *x3=修改死亡一击出现的几率地址(1字节)(一般用于只写,可参考x4的值来增减几率)
    *x4=原内部死亡一击几率,指的是经验特技的几率或原死亡骑士几率(一般用于只读参考)
    !!UN:Cx2/4/?y1;[y1=生物类型]
    *以下为另一个案例,所有堆栈均100%死亡一击*
    !!UN&y1<>67:Cx2/4/67;[改为可触发死亡一击]
    !!UN:Cx3/1/100;[死亡几率改为100%]

    点评

    FU111122已经修复了经验技能的bug 用的是UNC4470496/1/几率 那么FU777713其实是不必要的,对吧? 这里用的也是UNC4470496/1/几率  详情 回复 发表于 2016-5-1 19:57
  • TA的每日心情
    开心
    2015-12-9 01:09
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]火元素使者

    1839

    回帖

    8223

    金币

    8

    精华

    版主

    Rank: 10Rank: 10Rank: 10

    积分
    10786

    社区QQ达人

     楼主| 发表于 2016-5-1 19:57:53 | 显示全部楼层
    贤知有您 发表于 2016-5-1 17:12
    这个 HOOK 修复了经验特技的BUG,也就是说,你在经验特技中的100%几率将会是实际的100%几率.

    可以在FU7777 ...

    FU111122已经修复了经验技能的bug
    用的是UNC4470496/1/几率

    那么FU777713其实是不必要的,对吧?
    这里用的也是UNC4470496/1/几率
  • TA的每日心情
    郁闷
    2015-6-6 16:12
  • 签到天数: 52 天

    连续签到: 1 天

    [LV.5]女巫

    4947

    回帖

    3万

    金币

    35

    精华

    超级版主

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

    积分
    34630

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

    发表于 2016-5-1 21:23:27 来自手机 | 显示全部楼层
    两个不同概念,一个必须借用经验特技。另一个则可以有更多自由度,比方说可以做个特长所有兵种带经验特技随英雄等级提高。
  • TA的每日心情
    慵懒
    2022-7-14 11:02
  • 签到天数: 149 天

    连续签到: 1 天

    [LV.7]血污怪

    153

    回帖

    1万

    金币

    0

    精华

    4级 Famous Hero

    Rank: 4

    积分
    2817
    发表于 2021-4-13 19:16:16 | 显示全部楼层
    刀刀死亡一击岂不是牛逼
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

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

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

    GMT+8, 2024-4-26 06:18 , Processed in 0.431028 second(s), 14 queries , Gzip On, File On.

    Powered by Discuz! X3.4

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

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