gigichart 发表于 2014-10-26 16:35:06

想把修复死亡一击几率和格挡降防BUG的脚本用在封神上

但是使用后生物自带的致命一击无效,只有经验特技的致命一击有效;bf;
原帖忘记在哪了
求解决这问题;exp;
脚本

!?PI;
!!SN:L^Kernel32.dll^/?y1;
!!SN:Ay1/^VirtualAlloc^/?y2 Ay1/^VirtualFree^/?y3;
!!SN:W^Kernel32.VirtualAlloc.Address^/y2 W^Kernel32.VirtualFree.Address^/y3;
!!SN:L^angel.dll^/?y1;
!!SN:Ay1/^SaveEventParams^/?y2 Ay1/^GenerateCustomErmEvent^/?y3 Ay1/^RestoreEventParams^/?y4;
!!SN:W^angeldll.Address^/y1 W^angel.SaveEventParams.Address^/y2 W^angel.GenerateCustomErmEvent.Address^/y3 W^angel.RestoreEventParams.Address^/y4;
!!SN:W^tempAddress^/0 W^firstAddress^/0;


!?GM0;
!!SN:L^Kernel32.dll^/?y1;
!!SN:Ay1/^VirtualAlloc^/?y2 Ay1/^VirtualFree^/?y3;
!!SN:W^Kernel32.VirtualAlloc.Address^/y2 W^Kernel32.VirtualFree.Address^/y3;
!!SN:L^angel.dll^/?y1;
!!SN:Ay1/^SaveEventParams^/?y2 Ay1/^GenerateCustomErmEvent^/?y3 Ay1/^RestoreEventParams^/?y4;
!!SN:W^angeldll.Address^/y1 W^angel.SaveEventParams.Address^/y2 W^angel.GenerateCustomErmEvent.Address^/y3 W^angel.RestoreEventParams.Address^/y4;
!!SN:W^tempAddress^/0 W^firstAddress^/0;

!?BF&1000;
!!SN:W^Kernel32.VirtualAlloc.Address^/?y1;
!!SN:Ey1/1/0/8192/1060864/64;
!!FU&v1=0:E;
!!SN:W^firstAddress^/v1;
!!SN:W^tempAddress^/v1;
!!FU60000:P1/1/0/0; 死亡一击修复相关,和以前的例子不共用
*!FU60000:P2/1; 更换魔法书中伤害显示所依据的力量系数,和以前的例子不共用
!!FU60000:P3/1; 格挡降防修复2,和以前的例子2不共用,更正了以前例子2的一个错误
!!FU60000:P56000/1; 56000触发器和56001触发器相关,和以前的例子不共用

!?BG0&1000;
!!SN:W^firstAddress^/?y1;
!!FU&y1=0:E;
!!FU60000:P1/1/1/0; 死亡一击修复相关,和以前的例子不共用

!?BA53&1000;
!!SN:W^Kernel32.VirtualFree.Address^/?y1 W^firstAddress^/?y2;
!!FU&y2=0:E;
!!FU60000:P1/0; 死亡一击修复相关,和以前的例子不共用
*!FU60000:P2/0; 更换魔法书中伤害显示所依据的力量系数,和以前的例子不共用
!!FU60000:P3/0; 格挡降防修复2,和以前的例子2不共用,更正了以前例子2的一个错误
!!FU60000:P56000/0; 56000触发器和56001触发器相关,和以前的例子不共用
!!SN:Ey1/1/y2/0/32768;


**死亡一击修复相关,和以前的例子不共用
!?FU60000;
!!FU&x1<>1:E;
!!if&x2<>0:;
!!if&x3=0:;
!!SN:W^tempAddress^/?y10 W^firstAddress^/?y11;
!!VRy10&y10<>y11:+4;
!!SN:W^stackDSchance.Address^/y10;
!!VRy10:+46;
!!UN:C4470497/1/233;
!!VRy9:Sy10-4470498-4;
!!UN:C4470498/4/y9;
!!UN:C4470502/1/144;

!!UN:Cy10/4/4171139923;
!!VRy10:+4;
!!UN:Cy10/4/2197815296;
!!VRy10:+4;
!!UN:Cy10/4/62654;
!!VRy10:+4;
!!UN:Cy10/4/57933824;
!!VRy10:+4;
!!UN:Cy10/4/974504835;
!!VRy10:+4;
!!UN:Cy10/1/131;
!!VRy10:+1;
!!SN:W^stackDSchance.Address^/?y9;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/1/91;
!!VRy10:+1;
!!UN:Cy10/2/36623;
!!VRy10:+2;
!!VRy9:S4470926-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/1/233;
!!VRy10:+1;
!!VRy9:S4470503-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+5;
!!SN:W^tempAddress^/y10;
!!el:;
!!if&x4=0:;
!!SN:W^stackDSchance.Address^/?y9;
!!BG:A?y1;
!!if|y1=6/y1=7:;
!!BG:N?y2 E?y3;
!!if&y2>-1/y2<42:;
!!SN:W^stackDSchance^/0;
!!VRy4:Sy2*-1-1;
!!DO60000/6/13/1:P1/1/1/1/y4/0; 获取攻击单位死亡一击几率存到 stackDSchance中
!!SN:W^stackDSchance^/?y10;
!!VRy10&y10<0:S0;
!!VRy10&y10>100:S100;
!!VRy11:Sy2+y9;
!!UN:Cy11/1/y10;
!!en:;
!!if&y3>-1/y3<42:;
!!SN:W^stackDSchance^/0;
!!VRy4:Sy3*-1-1;
!!DO60000/6/13/1:P1/1/1/1/y4/0; 获取被攻击单位死亡一击几率存到 stackDSchance中
!!SN:W^stackDSchance^/?y10;
!!VRy10&y10<0:S0;
!!VRy10&y10>100:S100;
!!VRy11:Sy3+y9;
!!UN:Cy11/1/y10;
!!en:;
!!en:;
!!el:;
!!FU&x6<>0:E;
!!EAx5:Bx16/?y21/?y22/d/d/d/d/d/d/d/d/d/d/d/d;
!!FU|y21<>1/y22<>101:E;

!!UN:C6919200/4/?y1;
!!VRy2:Sx5*-1-1*1352+y1+21708;
!!SN:E7455085/1/y2/1;
!!UN:C8682900/4/?y3;

!!EAx5&y3=0:Bx16/d/d/d/?y23/d/d/d/d/d/d/d/d/d/d;
!!EAx5&y3=1:Bx16/d/d/d/d/?y23/d/d/d/d/d/d/d/d/d;
!!EAx5&y3=2:Bx16/d/d/d/d/d/?y23/d/d/d/d/d/d/d/d;
!!EAx5&y3=3:Bx16/d/d/d/d/d/d/?y23/d/d/d/d/d/d/d;
!!EAx5&y3=4:Bx16/d/d/d/d/d/d/d/?y23/d/d/d/d/d/d;
!!EAx5&y3=5:Bx16/d/d/d/d/d/d/d/d/?y23/d/d/d/d/d;
!!EAx5&y3=6:Bx16/d/d/d/d/d/d/d/d/d/?y23/d/d/d/d;
!!EAx5&y3=7:Bx16/d/d/d/d/d/d/d/d/d/d/?y23/d/d/d;
!!EAx5&y3=8:Bx16/d/d/d/d/d/d/d/d/d/d/d/?y23/d/d;
!!EAx5&y3=9:Bx16/d/d/d/d/d/d/d/d/d/d/d/d/?y23/d;
!!EAx5&y3=10:Bx16/d/d/d/d/d/d/d/d/d/d/d/d/d/?y23;
!!SN:W^stackDSchance^/y23;
!!VRx6:S1;
!!en:;
!!en:;
!!el:;
!!UN:C4470497/2/36623;
!!UN:C4470499/4/423;
!!en:;


**更换魔法书中伤害显示所依据的力量系数,和以前的例子不共用
!?FU60000;
!!FU&x1<>2:E;
!!if&x2<>0:;
!!SN:W^tempAddress^/?y10 W^firstAddress^/?y11;
!!VRy10&y10<>y11:+4;
!!SN:W^MDshow.Address^/y10; 在别的地方获取这个地址来赋值
!!VRy10:+6;
!!UN:C5881802/1/233;
!!VRy9:Sy10-5881803-4;
!!UN:C5881803/4/y9;
!!UN:C5881807/1/144;

!!UN:Cy10/1/161;
!!VRy10:+1;
!!SN:W^MDshow.Address^/?y9;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/4/91537541;
!!VRy10:+4;
!!UN:Cy10/1/233;
!!VRy10:+1;
!!VRy9:S5881831-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/4/75006346;
!!VRy10:+4;
!!UN:Cy10/2/0;
!!VRy10:+2;
!!UN:Cy10/1/233;
!!VRy10:+1;
!!VRy9:S5881808-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+5;
!!SN:W^tempAddress^/y10;
!!el:;
!!UN:C5881802/4/75006346;
!!UN:C5881806/2/0;
!!en:;


**格挡降防修复2,和以前的例子2不共用,更正了以前例子2的一个错误(由于疏忽,在变量赋值前就使用了它的值会导致崩溃)
!?FU60000;
!!FU&x1<>2:E;
!!if&x2<>0:;
!!SN:W^tempAddress^/?y10 W^firstAddress^/?y11;
!!VRy10&y10<>y11:+4;
!!SN:W^stackblockevent.Address^/y10;
!!VRy10:+46;
!!UN:C7456398/1/233;
!!VRy9:Sy10-7456399-4;
!!UN:C7456399/4/y9;
!!UN:C7456403/1/144;

!!UN:Cy10/4/4169239376;
!!VRy10:+4;
!!UN:Cy10/4/2197815296;
!!VRy10:+4;
!!UN:Cy10/4/62649;
!!VRy10:+4;
!!UN:Cy10/4/57933824;
!!VRy10:+4;
!!UN:Cy10/4/3323314307;
!!VRy10:+4;
!!UN:Cy10/1/128;
!!VRy10:+1;
!!SN:W^stackblockevent.Address^/?y9;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/1/1;
!!VRy10:+1;
!!UN:Cy10/2/59736;
!!VRy10:+2;
!!VRy9:S7456404-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+4;

!!UN:C4621928/1/233;
!!VRy9:Sy10-4621929-4;
!!UN:C4621929/4/y9;
!!UN:C4621933/1/144;

!!UN:Cy10/4/8491147;
!!VRy10:+4;
!!UN:Cy10/4/96862208;
!!VRy10:+4;
!!UN:Cy10/4/4621945;
!!VRy10:+4;
!!UN:Cy10/4/2559267587;
!!VRy10:+4;
!!UN:Cy10/4/245;
!!VRy10:+4;
!!UN:Cy10/4/15841411;
!!VRy10:+4;
!!UN:Cy10/4/1946157056;
!!VRy10:+4;
!!UN:Cy10/4/365134595;
!!VRy10:+4;
!!UN:Cy10/2/48000;
!!VRy10:+2;
!!SN:W^stackblockevent.Address^/?y9;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/4/4145443840;
!!VRy10:+4;
!!UN:Cy10/4/194;
!!VRy10:+4;
!!UN:Cy10/4/3322377480;
!!VRy10:+4;
!!UN:Cy10/4/1183217925;
!!VRy10:+4;
!!UN:Cy10/4/2210792448;
!!VRy10:+4;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/1/0;
!!VRy10:+1;
!!UN:Cy10/2/59739;
!!VRy10:+2;
!!VRy9:S4621934-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+5;
!!SN:W^tempAddress^/y10;
!!el:;
!!UN:C7456398/4/51841;
!!UN:C7456402/2/2048;
!!UN:C4621928/4/8491147;
!!UN:C4621932/2/0;
!!UN:C4621945/1/3;
!!en:;


**56000触发器和56001触发器相关,和以前的例子不共用,56001增加一个函数参数,用于检查单位的当次行动结束时是否表示回合结束
**(0是,1否,从1改为0的话会立即开始新回合,从0改为1的话未检查效果,最好只用于检查)

**1.FU77006和FU77007是在下一个行动单位的处理函数中获得可以行动的单位后才会被调
**用的,没有可行动的单位则调用新回合处理函数做一些必要处理,然后调用新回合
**开始后的首次行动处理函数来决定行动单位(这两个调用的都是同一个函数,只不过前一个
**的时点是在任意单位行动后调用,后一个只在每个回合开始时,调用一次)

**2.战斗中增加 FU56000(在MF1之后,完成士气判定后,BR前,FU77006前,以及在调用
**下一个行动单位处理函数前触发,新回合开始后的首次行动处理函数调用时不会触发)
**和FU56001(在调用下一个行动单位处理函数后调用新回合处理函数前触发,新回合开始后的
**首次行动处理函数调用时同FU56000不触发,如果有可以进行行动的单位,则在该回合
**FU77007后触发)触发器

**3.FU56000做一些相应处理,FU56001用来做一些还原处理。例,要让一个单位在下一个
**行动单位的处理函数中通过检查获得行动权,就要处理一些相关标志(如去掉结束标志,
**等待标志等,等待标志不去掉的话,在非等待处理阶段时是不会通过检查的),以及临时
**提高速度到全场最大(?,其中等待的处理过程忘记了,所以是问号),FU56001就是用来
**还原速度以及做一些其他事

**4.这两个新增触发器应该和其他战斗触发器可用的接收器一致
!?FU60000;
!!FU&x1<>56000/x1<>56001:E;
!!if&x2<>0:;
!!SN:W^angeldll.Address^/?y1 W^angel.SaveEventParams.Address^/?y2 W^angel.GenerateCustomErmEvent.Address^/?y3 W^angel.RestoreEventParams.Address^/?y4;
!!FU|y2<=0/y3<=0/y4<=0:E;
!!SN:W^tempAddress^/?y10 W^firstAddress^/?y11;
!!VRy10&y10<>y11:+4;
!!UN:C4691363/1/233;
!!VRy9:Sy10-4691364-4;
!!UN:C4691364/4/y9;

!!UN:Cy10/2/59488;
!!VRy10:+2;
!!VRy9:Sy2-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/1/104;
!!VRy10:+1;
!!UN:Cy10/4/56000; 修改这个值可以更换触发的触发器号
!!VRy10:+4;
!!UN:Cy10/1/232;
!!VRy10:+1;
!!VRy9:Sy3-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/2/24673;
!!VRy10:+2;
!!UN:Cy10/1/232;
!!VRy10:+1;
!!VRy9:Sy4-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/2/59489;
!!VRy10:+2;
!!VRy9:S4607072-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/2/20576;
!!VRy10:+2;
!!UN:Cy10/1/232;
!!VRy10:+1;
!!VRy9:Sy2-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/2/1423;
!!VRy10:+2;
!!VRy9:Sy1+1079044;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/1/104;
!!VRy10:+1;
!!UN:Cy10/4/56001; 修改这个值可以更换触发的触发器号
!!VRy10:+4;
!!UN:Cy10/1/232;
!!VRy10:+1;
!!VRy9:Sy3-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/2/41313;
!!VRy10:+2;
!!VRy9:Sy1+1079044;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/2/59488;
!!VRy10:+2;
!!VRy9:Sy4-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+4;
!!UN:Cy10/2/59745;
!!VRy10:+2;
!!VRy9:S4691368-y10-4;
!!UN:Cy10/4/y9;
!!VRy10:+6;
!!SN:W^tempAddress^/y10;
!!el:;
!!UN:C4691363/1/232;
!!UN:C4691364/4/4294883000;
!!en:;



wuxiangjinxing 发表于 2014-10-26 22:22:23


“生物自带的致命一击无效”是什么意思?是说恐怖骑士一直无法使出致命一击?

沧海一粟 发表于 2014-10-26 22:23:51

说实话,我还是挺佩服你的胆量。。。
我是不敢加452的这几个脚本的,作为封闭式MOD,建议你还是别老乱加乱改的好,不然出些莫名其妙的问题倒没啥,造成游戏崩溃就不好了,毕竟封神自身修改了太多内存方面的东西

gigichart 发表于 2014-10-26 22:58:33

wuxiangjinxing 发表于 2014-10-26 22:22
“生物自带的致命一击无效”是什么意思?是说恐怖骑士一直无法使出致命一击?

就是生物本身的致命一击,不是经验特技.就象十字军的双击,皇家狮鹫的无限反击

wuxiangjinxing 发表于 2014-10-26 23:05:15

gigichart 发表于 2014-10-26 22:58
就是生物本身的致命一击,不是经验特技.就象十字军的双击,皇家狮鹫的无限反击

所以说我不明白你的意思。本身有致命一击的只有恐怖骑士。而恐怖骑士又有致命一击这个生物经验特技(提升几率用的)。所以,你究竟是如何得出“生物特技无效”这个结论的?

gigichart 发表于 2014-10-26 23:59:34

wuxiangjinxing 发表于 2014-10-26 23:05
所以说我不明白你的意思。本身有致命一击的只有恐怖骑士。而恐怖骑士又有致命一击这个生物经验特技(提升 ...

封神的恐怖骑士没有致命一击的经验特技.
所以,你似乎根本没连问题看都没看清楚就来回复了?
所以,请去实际的玩一下再来讨论.

wuxiangjinxing 发表于 2014-10-27 00:56:50

gigichart 发表于 2014-10-26 23:59
封神的恐怖骑士没有致命一击的经验特技.
所以,你似乎根本没连问题看都没看清楚就来回复了?
所以,请去实 ...

这样啊,我倒是没注意这个改动。

那么,你的意思是用了这个脚本以后,恐怖骑士就再也不能发出致命一击了?你测试过很多很多次了吗?

贤知有您 发表于 2014-10-27 09:04:40

我最近会考虑研究一下,怎么修复 死亡一击(经验特技)的BUG.
我测井测试过,原版经验特技的死亡一击的效果(几率)值,相当于只是一个 (0-1)的值,它要么让死亡一击可以用,要么不可以用.几率依然是原来20%(死亡骑士那个).也就是说,只要设置了死亡一击经验特技等级值>0,就会有20%几率出死亡一击.
不过只是测试理解,如果要弄明白这个BUG,得把那段内存都看一遍才行.估计比较麻烦.
楼主提到的那段代码的高手,确实是高高手.我就是从他的引导中才去学习内存修改汇编方面的知识的.

另外楼主提到的脚本总共实现了好几处功能呢.感觉格挡降防御BUG最有意义.
页: [1]
查看完整版本: 想把修复死亡一击几率和格挡降防BUG的脚本用在封神上

捐赠