佳丽云

英雄无敌3-WoG中文站

 找回密码
 英雄注册|Register
查看: 5288|回复: 11

帮我看看这个erm[解决]

[复制链接]
  • TA的每日心情

    2015-3-1 22:33
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]野猪

    29

    回帖

    6008

    金币

    0

    精华

    2级 Adventuring Hero

    Rank: 2

    积分
    226
    发表于 2010-10-29 20:09:30 | 显示全部楼层 |阅读模式
    !?BA0;          每场战争开始
    !!VRv9051:S1;
    !!BA:E?y1;      检查战争模式  当为0时为人类玩家左边,2人类玩家右边
    !!VRy50:S0;
    !!VRy51:S0;
    !!BA:H0/?y2;                    获得左方[wiki]英雄[/wiki]的编号存为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 编辑 ]
  • TA的每日心情
    开心
    2021-2-18 14:28
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]投石矮人

    2624

    回帖

    1万

    金币

    21

    精华

    论坛嘉宾

    请叫我黑椒哥哥

    Rank: 9Rank: 9Rank: 9

    积分
    4835

    论坛元老退役版主

    QQ
    发表于 2010-10-29 21:43:09 | 显示全部楼层
    !!DO14445/0/20/1=0:P;

    !!DO14445/21/41/1=1:P;

    这两句是关键。
    首先你要弄懂这两句要懂FU函数。
    然后还要懂循环函数DO。
    这两个都是很难的,所以说我学会这些需要花很多时间。

    如果你这是是从别的脚本里取下来的,那么在原脚本中找到!?FU14445以及这个触发器后面的语句,一起复制到这段脚本的开头,再试试看。
  • TA的每日心情

    2015-3-1 22:33
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]野猪

    29

    回帖

    6008

    金币

    0

    精华

    2级 Adventuring Hero

    Rank: 2

    积分
    226
     楼主| 发表于 2010-10-29 22:20:45 | 显示全部楼层
    搞不懂,真能用最笨的方法了~~~
    !!BM0:XXXX
    !!BM1:XXXX
    !!BM2:XXXX

    残念啊。。。。

    该用户从未签到

    1066

    回帖

    7228

    金币

    1

    精华

    5级 Honorable Hero

    Rank: 5Rank: 5

    积分
    6026
    发表于 2010-10-30 12:37:24 | 显示全部楼层
    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;
  • TA的每日心情

    2015-3-1 22:33
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]野猪

    29

    回帖

    6008

    金币

    0

    精华

    2级 Adventuring Hero

    Rank: 2

    积分
    226
     楼主| 发表于 2010-10-30 13:44:17 | 显示全部楼层
    谢谢各位哈~~
    还有更简单的方法?
    我想在加一个魔法攻击双倍的脚本,直接从宝物典当行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;
  • TA的每日心情
    开心
    2021-2-18 14:28
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]投石矮人

    2624

    回帖

    1万

    金币

    21

    精华

    论坛嘉宾

    请叫我黑椒哥哥

    Rank: 9Rank: 9Rank: 9

    积分
    4835

    论坛元老退役版主

    QQ
    发表于 2010-10-30 19:07:02 | 显示全部楼层
    去你的农蒙,不懂还装懂,你的那个加和不加是一样的,根本不是这个关系。

    我还是讲讲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命令,结果会导致整个地图中的所有说明部分失效。
  • TA的每日心情
    开心
    2021-2-18 14:28
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]投石矮人

    2624

    回帖

    1万

    金币

    21

    精华

    论坛嘉宾

    请叫我黑椒哥哥

    Rank: 9Rank: 9Rank: 9

    积分
    4835

    论坛元老退役版主

    QQ
    发表于 2010-10-30 19:17:54 | 显示全部楼层
    如果没看上面的我简单地讲一讲:
    首先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时不仅仅运行了你定义的命令,还运行了别的作者定义的命令)
  • TA的每日心情
    开心
    2021-2-18 14:28
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]投石矮人

    2624

    回帖

    1万

    金币

    21

    精华

    论坛嘉宾

    请叫我黑椒哥哥

    Rank: 9Rank: 9Rank: 9

    积分
    4835

    论坛元老退役版主

    QQ
    发表于 2010-10-30 19:18:49 | 显示全部楼层
    到底哪些函数FU是别人使用过的,哪些是没有使用过的,可以在这里查询:http://bbs.h3wog.com/ermres/index.php
  • TA的每日心情
    开心
    2021-2-18 14:28
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]投石矮人

    2624

    回帖

    1万

    金币

    21

    精华

    论坛嘉宾

    请叫我黑椒哥哥

    Rank: 9Rank: 9Rank: 9

    积分
    4835

    论坛元老退役版主

    QQ
    发表于 2010-10-30 19:27:05 | 显示全部楼层
    然后,是更难的了,认真看,一般人会看到头疼的:
    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;
    等等。
  • TA的每日心情
    开心
    2021-2-18 14:28
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]投石矮人

    2624

    回帖

    1万

    金币

    21

    精华

    论坛嘉宾

    请叫我黑椒哥哥

    Rank: 9Rank: 9Rank: 9

    积分
    4835

    论坛元老退役版主

    QQ
    发表于 2010-10-30 19:32:42 | 显示全部楼层
    这样看起来也没有多复杂,复杂的来了,我们可以利用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。

    这是一个最简单的函数循环了,如果要做高级脚本的话,会用到很复杂的函数,如果要那样做的话,最好先画好流程图。
  • TA的每日心情
    开心
    2021-2-18 14:28
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]投石矮人

    2624

    回帖

    1万

    金币

    21

    精华

    论坛嘉宾

    请叫我黑椒哥哥

    Rank: 9Rank: 9Rank: 9

    积分
    4835

    论坛元老退役版主

    QQ
    发表于 2010-10-30 19:45:56 | 显示全部楼层
    下面是重点,也就是你上面的ERM中所涉及的!!DO命令。

    DO命令是FU命令的扩展命令,当你需要构建更复杂的函数循环时,FU命令非常麻烦,显得非常吃力,这个时候就可以用DO命令。

    !!DO#.....:P;
    这个命令跟!!FU#:P;类似,同样是触发编号为#的FU触发器。

    DO命令的完整格式是:
    !!DO#1/#2/#3/#4:P$1/$1......../$15;

    [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的问题就能自己找到原因解决了。
  • TA的每日心情
    无聊
    2023-11-15 00:12
  • 签到天数: 310 天

    连续签到: 1 天

    [LV.8]神圣凤凰

    901

    回帖

    6682

    金币

    0

    精华

    5级 Honorable Hero

    Rank: 5Rank: 5

    积分
    6346
    发表于 2010-10-30 20:44:31 | 显示全部楼层


    我的嘴角抽搐不停....
    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 英雄注册|Register

    本版积分规则

    捐赠
    关注我们,英3Mod一网打尽!

    WoG中文站 ( 辽B2-20210485-10 )|辽公网安备 21128202000228 号

    GMT+8, 2025-6-20 17:25 , Processed in 0.656890 second(s), 14 queries , Gzip On, File On.

    Powered by Discuz! X3.4

    Copyright © 2004-2022, Beijing Second Sight Technology Co., LTD.

    快速回复 返回顶部 返回列表