帮我看看这个erm[解决]
!?BA0; 每场战争开始!!VRv9051:S1;
!!BA:E?y1; 检查战争模式当为0时为人类玩家左边,2人类玩家右边
!!VRy50:S0;
!!VRy51:S0;
!!BA:H0/?y2; 获得左方英雄的编号存为y2
!!HEy2&y2>-1:A2/137/0/?y50; 判断是否有137 0为全部宝物 ?为已装备宝物
!!BA:H1/?y3; 获得右方英雄的编号存为y2
!!HEy3&y3>-1:A2/137/0/?y51; 判断是否有137 0为全部宝物 ?为已装备宝物
!!VRv9050&y1>-1:Sy2; 左边英雄编号存于 v9050
!!VRv9052&y1>-1:Sy3; 右边英雄编号存于 v9052
!!VRv9051&y50>-2:S0; 当装备有137,设置其值为0,即接下来的BF左会被触发
!!VRv9051&y51>-2:S2; 当装备有137,设置其值为2,即接下来的BF右会被触发
!?BF|v9051=0;
!!DO14445/0/20/1=0:P;
!!BMx16:Ad100;
!?BF|v9051=2;
!!DO14445/21/41/1=1:P;
!!BMx16:Ad100;
我这样写的,每次只有第一个生物才加,怎么回事。?[]
[ 本帖最后由 da3338280 于 2010-10-30 20:20 编辑 ] !!DO14445/0/20/1=0:P;
!!DO14445/21/41/1=1:P;
这两句是关键。
首先你要弄懂这两句要懂FU函数。
然后还要懂循环函数DO。
这两个都是很难的,所以说我学会这些需要花很多时间。
如果你这是是从别的脚本里取下来的,那么在原脚本中找到!?FU14445以及这个触发器后面的语句,一起复制到这段脚本的开头,再试试看。 搞不懂,真能用最笨的方法了~~~
!!BM0:XXXX
!!BM1:XXXX
!!BM2:XXXX
残念啊。。。。 LZ 不急。我来给你翻译一下ERM不难。很减单!听我说,不要信克招师傅说学会这些需要花很多时间。
!?BA0; 每场战争开始
!!VRv9051:S1; 让变量V9051=1
!!BA:E?y1; 检查战争模式当为0时为人类玩家左边,2人类玩家右边
!!VRy50:S0;让Y50=0
!!VRy51:S0;让Y51=0
!!BA:H0/?y2; 获得左方英雄的编号存为y2
!!HEy2&y2>-1:A2/137/0/?y50; 判断是否有137 0为全部宝物 ?为已装备宝物
!!BA:H1/?y3; 获得右方英雄的编号存为y2
!!HEy3&y3>-1:A2/137/0/?y51; 判断是否有137 0为全部宝物 ?为已装备宝物
!!VRv9050&y1>-1:Sy2; 左边英雄编号存于 v9050
!!VRv9052&y1>-1:Sy3; 右边英雄编号存于 v9052
!!VRv9051&y50>-2:S0; 当装备有137,设置其值为0,即接下来的BF左会被触发
!!VRv9051&y51>-2:S2; 当装备有137,设置其值为2,即接下来的BF右会被触发
*********************************************************************************************************************************************
前面都没问题!但话太多。下面红色的是有问题的。
!?BF|v9051=0;
!!DO14445/0/20/1=0:P;
!?FU14445;加上这一句就好了。
!BMx16:Ad100;
!?BF|v9051=2;
!!DO14445/21/41/1=1:P;
!?FU14445;加上这一句就好了。
!!BMx16:Ad100; 谢谢各位哈~~
还有更简单的方法?
我想在加一个魔法攻击双倍的脚本,直接从宝物典当行copy过来的,!!!
装备137就可以了结果只有我方先攻施法才有效果。敌方攻我的时候,没得魔法伤害加成,,要么就是敌方攻我,有法伤加成,我也有,要么就是都没有,,。。何解?
我就想写成装备137宝物后施法才有伤害加成!
!?BA0; 每场战争开始
!!VRv9051:S1; 让变量V9051=1
!!BA:E?y1; 检查战争模式当为0时为人类玩家左边,2人类玩家右边
!!VRy50:S0;让Y50=0
!!VRy51:S0;让Y51=0
!!BA:H0/?y2; 获得左方英雄的编号存为y2
!!HEy2&y2>-1:A2/137/0/?y50; 判断是否有137 0为全部宝物 ?为已装备宝物
!!BA:H1/?y3; 获得右方英雄的编号存为y2
!!HEy3&y3>-1:A2/137/0/?y51; 判断是否有137 0为全部宝物 ?为已装备宝物
!!VRv9050&y1>-1:Sy2; 左边英雄编号存于 v9050
!!VRv9052&y1>-1:Sy3; 右边英雄编号存于 v9052
!!VRv9051&y50>-2:S0; 当装备有137,设置其值为0,即接下来的BF左会被触发
!!VRv9051&y51>-2:S2; 当装备有137,设置其值为2,即接下来的BF右会被触发
*********************************************************************************************************************************************
前面都没问题!但话太多。下面红色的是有问题的。
!?BF|v9051=0;
!!DO14445/0/20/1=0:P;
!?FU14445;加上这一句就好了。
!BMx16:Ad100;
!!HEv9050&v9050>-1:A2/137/?y-4/?y-9; 设置137的魔法伤害 这里我方先攻,有施法加成。敌方没有加成。
!!VRv7133&v7182=0:S100;
!!VRv7133&v9050>-1/y-9>0:+100;
!!FU4503&v9050>-1:P-1/20/v9050;
!?BF|v9051=2;
!!DO14445/21/41/1=1:P;
!?FU14445;
!!BMx16:Ad100;
!!HEv9052&v9052>-1:A2/137/?y-3/?y-8; 设置137的魔法伤害 敌方攻击我方英雄,用魔法。我没得加成,不知道哪里错了,。!
!!VRv7134&v7182=0:S100;
!!VRv7134&v9052>-1/y-8>0:+100;
!!FU4503&v9052>-1:P20/-1/v9052; 去你的农蒙,不懂还装懂,你的那个加和不加是一样的,根本不是这个关系。
我还是讲讲FU命令吧。
引用(我自己的ERM教程,关于FU命令):(下面的内容不想看可以不看)
FU命令是一个很强大的命令,FU命令分两个部分组成,一个部分是!?FU触发器,另一个部分是!!FU接收器。
FU命令到底是作什么用的呢?
我先不说,你们尝试把以下一段脚本粘贴到地图事件中试试:
ZVSE
!?FU55;
!!IF:M^一段永远也不会结束的对话^;
!!FU55:P;
!#FU55:P;
________________________________________________
这个一定要尝试哦。
尝试了之后,你就发现这是非常恶搞的一个东西,呵呵,千万不要加到你做好的地图中,否则后果就是被玩地图的人群喷至死。
————————————————————————————
如果你尝试了的话你知道这是什么作用了,现在,我们暂且将!?FU触发器称为虚拟触发器。
因为我们都知道,ERM中,几乎所有触发器都是在游戏中事实存在的物体,比如说:LE事件触发器,OB建筑触发器,BF战场触发器。
但是FU触发器是一个非常特殊的触发器,它是不存在的物件,我们需要用FU接受器来触发它。
FU虚拟触发器总共有1000个(FU1~FU1000),!?FU55;的意思就是:当55号虚拟触发器被触发的时候,执行后面的命令。
!?FU#;#代表的就是虚拟触发器的编号。
————————————————————————————
那么我们怎么触发虚拟触发呢?
那么就要使用!!FU#:P;命令,这个#当然是指触发器编号。
所以这句命令的意思是:立即执行第#号虚拟触发器。
————————————————————————————
应该很好理解吧,使用FU:P命令的好处是:
1、可以将一段命令多次循环
2、如果写剧情图的话,当剧情做到后面的时候,会用到很多条件,用FU命令可以将很多条件简单化。
举例:
如果不用FU触发器来表示条件的话:
!?OB15/15/0;
!!IF&-5:M^任务一
去杀掉肯迪亚。^;
!!IF&5/-6:M^任务二
帮我找20根木头。^;
!!IF&5/6:M^任务三
杀死野外的变狼人。^;
——————————————————————————————————————————————
只有三个任务,就已经那么麻烦了,如果任务几十个的话,条件就多到写不下去了,不妨这样:
————————————————————————————————————————————————
!?OB15/15/0;
!!IF&-5:M^任务一
去杀掉肯迪亚。^;
!!FU&5:P;
!?FU5;
!!IF&-6:M^任务二
帮我找20根木头。^;
!!FU&6:P;
!?FU6;
!!IF:M^任务三
杀死野外的变狼人。^;
是不是简单多了?
FU命令是一个很黄很暴力的命令。
FU命令真正的名字是:函数接收器和函数触发器。
至于为什么会是与函数有关,这个。。。。。真的很复杂,说出来你们肯定理解不了。
所以只要记住FU:P命令的用途就好了,而如果要用FU命令与函数挂钩,要使用到X1~X16变量,这个一般是高级ERM编写才会用到。
——————————————————————————————————————————
好了,废话少说,我们主要看看FU的另一个命令:FU:E命令。
那么我们首先看看以下这段脚本:
ZVSE
!?OB52/102/0;
!!IF:Q2^你想要进去看看吗?^;
!!FU&-2:E;
!!IF:M^当你进去屋子的时候,发现一个人的没有,显然已经被人洗劫一空了。^;
————————————————————————————————————————————————
这段脚本的蓝色部分使用了一条FU:E命令,如果认真分析的话,你就会知道,FU:E命令的意思是:
立即停止当前触接动作!
这条命令的标识符为空,说明FU:E命令不与任何!?FU触发器关联。
————————————————————————————————————————
值得注意的是:
最好不要在说明部分使用FU:E命令!
因为说明部分也是有触发器的,我们前面说过:
说明部分的触发器默认为:在进度条载入时触发。
因为一个地图事件中的说明部分一般不只是一个事件中的,如果你使用FU:E命令,结果会导致整个地图中的所有说明部分失效。 如果没看上面的我简单地讲一讲:
首先FU命令分为两个部分组成:
1、接收器
2、触发器
FU触发器的格式是:!?FU#;
FU接收器的格式是:!!FU#:P;或!#FU#:P;(说明部分)
当游戏读取到FU接收器的时候,会寻找相应的FU触发器,然后把FU触发器后面的语句执行一遍。
VR命令你懂吧?那就用VR命令结合FU命令给你举例子:
!?.........;
.........
..........
!!VRv1:S5;
!!FU1:P;
!!VRv2:Sv1;
!?FU1;
!!VRv1:S6;
那么现在v2的值为什么呢?v2=6
因为当运行到了!!FU1:P;的时候,会寻找!?FU1;然后运行了后面的语句!!VRv1:S6;
所以v1的值定义为6。
!?FU1;是!!FU1:P;里对应的触发器。
同理,!?FU2;对应!!FU2:P;
总共有3W个FU触发器和接收器,分别是FU1~FU30000
它们是一一对应的。
如果你的地图中已经有别的作者定义了!?FU1;,而你又去使用FU1,那么就会出现冲突(也就是在运行!?FU1时不仅仅运行了你定义的命令,还运行了别的作者定义的命令) 到底哪些函数FU是别人使用过的,哪些是没有使用过的,可以在这里查询:http://bbs.h3wog.com/ermres/index.php 然后,是更难的了,认真看,一般人会看到头疼的:
FU命令为什么叫函数呢?
因为我们可以用它来构建函数。
!!FU#:P;除了这种最基本的用法外,还有一种用法:
!!FU#:P$1/$2/......./$15;
总共可以在P后面填写最多15个数值。
这些数值有什么用呢?这里要用到x1、x2、x3、x4.......~x15变量。
你在$1~$15里填写的值,会在执行对应的!?FU触发器的时候,在该触发器中,成为x1~15的值。
举例:
!!FU1:P1/2/3/4/5/6/7/8/9/10/11/12/13/14/999;
!?FU1;
!!..........
.......
........
在!?FU1里面,你可以使用x1到x15这15个变量,他们的值分别是:
x1=1
x2=2
x3=3
x4=4
.......
x14=14
x15=999
当然,你也可以不填那么多,比如说:
!!FU1:P1/y1/v198/258;
或者是:
!!FU1:Py20;
等等。 这样看起来也没有多复杂,复杂的来了,我们可以利用FU命令实现循环(比如说在!?FU1的后面写!!FU1:P的语句)。
比如说:
!?FU1;
!!VRv1:+1;
!!FU1&v1<5:P; [当v1小于5时继续运行FU1]
那么,当FU1最后一次运行结束时,v1会等于5。
用v1太麻烦了,我们可以用x1,这样就省了很多事(节省变量):
!?FU1;
!!VRx1:+1;
!!FU&x1<5:Px1;
结束的时候,X1等于5。
这是一个最简单的函数循环了,如果要做高级脚本的话,会用到很复杂的函数,如果要那样做的话,最好先画好流程图。 下面是重点,也就是你上面的ERM中所涉及的!!DO命令。
DO命令是FU命令的扩展命令,当你需要构建更复杂的函数循环时,FU命令非常麻烦,显得非常吃力,这个时候就可以用DO命令。
!!DO#.....:P;
这个命令跟!!FU#:P;类似,同样是触发编号为#的FU触发器。
DO命令的完整格式是:
!!DO#1/#2/#3/#4:P$1/$1......../$15;
,这个和FU:P里面的一样了,不多讲。
重点是#2\#3\#4这里。
我们说了,这个命令是用来构造循环函数,这里要用到一个变量:x16,那么:
#2:第一次运行!?FU命令的时候,X16的值。(简称:循环初始值)
#3:当x16的值大于或等于#3的值时,将不再循环运行FU函数。(简称:循环结束值)
#4:每次循环运行FU函数时,x16增加#4(x16+#4)。(简称:循环步长)
比如说:
!!DO1/1/5/1:P;
!?FU1;
.......
.................
那么,当读取到上面的DO命令时,会循环运行FU1触发器5次,每次运行时,X16+1。(x16这个变量同样可以在!?FU1中使用与定义。)
比如说:
!!DO1/1/5/1:P;
!?FU1;
!!BA:Ax16/x16;
.......
.................
!!VRx16:S1;
那么,!?FU1的命令将会一直运行下去(大概会造成死机,没试过......)。
好吧,就是这些了,如果都懂了,那么LZ的问题就能自己找到原因解决了。 :shufu: :shufu: :shufu:
我的嘴角抽搐不停....;iunei;
页:
[1]