|
直接放入图里...就会出现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]的更新]
|
|