XEricSin 发表于 2016-5-1 12:45:40

死亡一击hook问题

@贤知有您说:死亡一击经验特技中的等级几率指的是触发原版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 判断死亡一击前触发(FU111121-FU111122)x1=堆栈,x2=寄存地址当地址为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, : 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;[判断死亡一击前触发]
*此时为堆栈内存,为返回生物类型的地址(用于触发器参数x2的返回地址),为获得经验特技的几率(静态,包括死亡骑士的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:;


贤知有您 发表于 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;
*以下为另一个案例,所有堆栈均100%死亡一击*
!!UN&y1<>67:Cx2/4/67;[改为可触发死亡一击]
!!UN:Cx3/1/100;[死亡几率改为100%]

XEricSin 发表于 2016-5-1 19:57:53

贤知有您 发表于 2016-5-1 17:12
这个 HOOK 修复了经验特技的BUG,也就是说,你在经验特技中的100%几率将会是实际的100%几率.

可以在FU7777 ...

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

那么FU777713其实是不必要的,对吧?
这里用的也是UNC4470496/1/几率

贤知有您 发表于 2016-5-1 21:23:27

两个不同概念,一个必须借用经验特技。另一个则可以有更多自由度,比方说可以做个特长所有兵种带经验特技随英雄等级提高。

316999099 发表于 2021-4-13 19:16:16

刀刀死亡一击岂不是牛逼
页: [1]
查看完整版本: 死亡一击hook问题

捐赠