[ERA]调用英雄施法动画
本帖最后由 贤知有您 于 2014-3-4 20:33 编辑本来没打算研究英雄施法动作,一般情况下,可以用 BH:C 施放一个战场空魔法(比如召船术)以变相达到目的.
沧海一粟大师提到了这个变相方法的不爽之处,一是需要还原魔法值,二是施法的时间超短,而且模拟出来的动作肯定是一连串全部做完的.
而真正的系统英雄施法,实际是把英雄DEF的第四组动作组分成2部分来播放.
先播放前面部分,直到有手势发光的帧停止(H3英雄施法都一样的手势)
然后是处理战场的情况,比如播放魔法动画,处理伤害等等.
最后魔法完毕时,英雄才把手势收回,也就是播放了剩余的英雄动作.
在内存语句上,这2个部分的语句都在战场施放魔法<5A0140>的函数里面.它不是个单独调用函数就能实现的过程.
也就是说,我们要模拟这种效果.需要把内存汇编语句转换成ERM的语句.
好吧,过程忽略,现在基本把语句都模拟出来了.都是些繁琐的内存寻址和数据读写.经过沧海大师测试鉴定,基本可行.
于是放出来供大家研究参考, 顺便测试一下论坛的发帖是否畅顺.
ZVSE
!?CM4; [战场场景]
!!CM:F?y1 I?y2 S?y3;
!!FU|y1<>512/y2<>2005/y3<>14:E; [右键点信息栏按钮]
!!CM:R0;
!!FU9999925:P0;[左方英雄出施法动作(到亮光停止)]
*处理其它脚本时不能干扰英雄动作内存(如不要使用BH:C施法)
*此时英雄动画处于停顿状态(有亮点的^_^)
!!BM0:V0;
!!FU9999919:P0/3/100;
!!FU9999919:P0/4/100;
!!FU9999919:P0/5/100;
!!FU9999919:P0/6/100;
!!BM21:V80;
**处理施法等动作后
!!FU9999926:P0;[左方英雄施法完毕,完成剩余的英雄动作(播放剩余动作)]
!!BU:R;
*-------------英雄动作施放函数-----------------
!?FU9999925;[英雄施法动作(中途停止)ByHawaiing-007]
**x1=0左方1右方
!!BHx1:N?y1; [是否存在英雄]
!!FU&y1<0:E;
!!HEy1:B2/?y2;[英雄类型y2]
!!VRy4:Sx1 *4;[势力*4]
!!UN:C6919200/4/?y10;[战场结构y10]
!!UN:C6806760/4/?y41;
!!UN:C6806764/4/?y42;
!!VRy43:Sy1 *23 *4 +y41;
!!UN:Cy43/4/?y44;
!!VRy45:Sy2 *16 *4 +y42;
!!UN:Cy45/4/?y46;
!!VRy11:Sy4 + 21468 +8 +y10;[动作组记录点]
!!UN:Cy11/4/4; [设置英雄动作组]
!!VRy12:Sy46 *2 +y44 *16 +6536524;
!!UN:Cy12/4/?y13; [第?帧停止(官方DEF应该5)]
!!VRy13&y13>0:-1;
!!VRy14:Sy11 +8;[帧记录点]
!!DO9999927/1/y13/1&y13>0:Py10/y14;
!?FU9999926;[英雄施法动作(还原)ByHawaiing-007]
**x1=0左方/1右方
!!BHx1:N?y1; [是否存在英雄]
!!FU&y1<0:E;
!!HEy1:B2/?y2;[英雄类型y2]
!!VRy4:Sx1 *4;[势力*4]
!!UN:C6919200/4/?y10;[战场结构y10]
!!UN:C6806760/4/?y41;
!!UN:C6806764/4/?y42;
!!VRy43:Sy1 *23 *4 +y41;
!!UN:Cy43/4/?y44;
!!VRy45:Sy2 *16 *4 +y42;
!!UN:Cy45/4/?y46;
!!VRy11:Sy4 + 21468 +8 +y10;[动作组记录点]
!!UN:Cy11/4/4; [设置英雄动作组]
!!VRy12:Sy46 *2 +y44 *16 +6536524;
!!UN:Cy12/4/?y13; [帧?]
!!VRy14:Sy11 +8;[帧记录点]
!!VRy20:Sy4 +21508 +y10;
!!UN:Cy20/4/?y21;
!!VRy22:Sy21 +40;
!!UN:Cy22/4/?y23;[是否y23>4]
!!VRy24:Sy21 +44;
!!UN:Cy24/4/?y25;
!!VRy25:+16;
!!UN:Cy25/4/?y26;[是否y26>0]
!!VRy27:Sy21 +28;
!!UN:Cy27/4/?y29;
!!VRy29:+16;
!!UN:Cy29/4/?y30;[双重指针]
!!UN:Cy30/4/?y31;[英雄施法动作的帧数(官方DEF应为8)]
!!VRy31|y23<=4/y26<=0:S0;[无相关数据时,不播放动画]
!!VRy31&y31>0:-1;
!!DO9999927/y13/y31/1&y13>0/y13<y31:Py10/y14;
!!UN:C6919200/4/?y10;[战场结构y10]
!!UN:Cy11/4/0;
!!UN:Cy14/4/0;
!!SN:E4800448/2/y10/1/0/0/100/1/1;
!?FU9999927;[播放动画帧]
**x1=this,x2=内存记录点,x16=循环
!!UN:Cx2/4/x16;
!!SN:E4800448/2/x1/1/0/0/100/1/1;
*-----------------------其它函数---------------
!?FU9999919;[战场任意坐标播放内部魔法动画]
**x1=动画ID(跟BM:V相同,同样并不是所有魔法动画都能正确放置)
**x2=坐标(0-186)
**x3=延时(通常用100)
!!FU|x1<0/x1>80/x2<0/x2>186:E;
!!VRx3&x3<0:S0;
!!UN:C6919200/4/?y1;
!!SN:E4810128/2/y1/x1/x2/x3/0;[<496590>空地播放魔法动画]
这个函数绝对是英雄特技类的核武,非常劲爆,用过之后那好处真是一晚都说不完啊:good_job: 我也想试试啊,不知怎么设置啊~ 007真牛啊,我佩服地五体投地。我有这样一个想法。不知道贤知能不能用内存在战场上调用堆栈的新生物Def?比如我写的x-monster,战场上可以有1-7只设定的新生物,除了生物Def和怪物技能描述,我不能改变,其他的都改啦。 fly123 发表于 2014-3-6 15:35
007真牛啊,我佩服地五体投地。我有这样一个想法。不知道贤知能不能用内存在战场上调用堆栈的新生物Def?比 ...
生物形象可以随时换,生物射出的箭夭可以随时换,魔法的动画可以随时换,一切皆有007;exp; fly123 发表于 2014-3-6 15:35
007真牛啊,我佩服地五体投地。我有这样一个想法。不知道贤知能不能用内存在战场上调用堆栈的新生物Def?比 ...
尊敬的F大,我先剧透下,这个调用内存改变生物战场形象不单可以,007还研究了两套方法,一种是直接用生物编号直接换成你自带版本里相应生物的形象,另一种是直接调用外置的生物DEF,也就是你想换什么加个DEF就行了,嘿嘿,非常强大的,特别是第二种无上利器啊 这个好难啊。。。。。。。。。。。。。。 era真是个好东西,支持楼主,支持论坛,赞一个 不错啊,牛肉一个
页:
[1]