但是我会开ERM中级课程,不开新贴,仍然在原帖。 嗯嗯
似乎也没那么难
就是代码查询...
第十五课:查看ERM帮助的一些要索
这节课讲的是查看ERM帮助的一些要索,因为这节课是扫盲课的最后一节,接下来我会继续讲中级课程,如果有兴趣的话可以继续来捧场,不过如果你不做地图,没有很多时间写ERM,对WOG的兴趣也不是很大的话,
最好还是不要继续往下学了,因为那对于你已经没有任何意义了。
废话不多说,我们看看如何看ERM帮助吧,其实学习到现在,当你明白变量之后,ERM帮助会好理解很多。
ERM帮助是本天书没错,就这个帮助我看了4遍,现在还在看第5遍作为复习。
书读百遍,其义自现。温故而知新,可以为师矣!
下面我讲将我看ERM帮助的经验:(不想看就不要看了,都是废话)
第一遍是在很多年以前,大概是2005年吧,那一年的第一场雪比以往来得都晚一些。
我看的是英文版,那个时候我的读鸟语水平还比较差,我基本上是以便翻字典一边看。
虽然说效率很低,但是我起码看懂了一些,一些很基本的东西,比如说基本格式、英雄修改等。
第二次我看的是中文版,这一次我明白很多不明白的东西,包括变量、标志。
第三次我看的时候发现轻松了很多,大部分的内容我都明白了。
第三次看完以后,我以为我就能做脚本了,没想到我还是要经常性的翻看ERM帮助才能完成简单的脚本,并且错漏百出。
于是我看了第四遍,有一段时间,我对那些命令很熟悉。
但是这么久了,我一直都没写过ERM,所以又开始生素了,所以我看第五遍。
即使看了这么多遍,我的ERM技术其实还很平庸,其实重在实践。
其实ERM帮助也不是那么的难读,至少你看完我的扫盲教程之后,你能很好的理解很多内容。
看ERM帮助是会头痛的,但是在你有一定ERM基础后(比如看完这个教程),
你顶住头痛,就会看懂一些东西。
好了,废话不多说,我讲将怎么看ERM帮助吧,首先你可以在ERM帮助的顶部找到这一栏:
其中最左边的两列是基础教程,先看这些,这些都是比较容易懂的。
中间这些两个字母的是各种接受器的详细解释。最后一列有一个ERM FORMATS,
这是比较重要的,是ERM的一些编号(生物编号、英雄编号之类的),做ERM的时候就去查。
然后ERM FORMATS下面的几个是比较难的东西,大家看看也无妨。
然后有几个接收器是比较难的,我们可以最后才看,它们是:
FU\GE\IF(我说的是特殊对话框)\CE\MC\TM\VC
我们先不看这些,等对其他内容比较熟悉了再看。
——————————————————
然后我们在看帮助的时候,会看到一些特殊代数符号,比如说#、$、@
#:比如说#1,这个是一个代数符号,比如说我们可以在MA命令中看到这样的显示:
!!MA:A#1/$2;
#1的意思是编号为1的#代数,这个数字可以被设置(输入),而不能被获取(输出)
也就是说:
!!MA:A?y1/50;是错误的语法命令(?是获取符号)
但是
!!MA:A50/?y1;是正确的。
而$的意思就是一个可以被设置也可以被获取的代数。
当我们在ERM帮助看到它们的时候要知道它们的意义。
而@是一个代数,而这个代数只能是变量。
比如说
!!VR@:S#1;
这个应该明白吧?
——————————————————————
写ERM脚本的好习惯:
1、这一条比较难做到,但是很多ERM高手都是是这么做的:
在电脑上编辑ERM之前,把ERM先手写在纸上。
2、如果你做不到第一条的话,你可以尝试做这一条:
在写ERM之前,把整个ERM的过程写在纸上(也就是注释部分)
3、如果你做不到第二条,那么第三条你必须做到,这是必须的:
每设置一个V或Z变量后,将变量的使用情况(变量的初始值、作用、后续改变、改变方式)手写下来。
如果这一点都做不到的话,你一定不是一个好的ERM写手。
——————————————————————
学习ERM的捷径:
1、多写ERM
2、多看别人的ERM。
[ 本帖最后由 da3338280 于 2009-8-31 14:56 编辑 ] 新概念ERM扫盲课程完,请看新概念ERM中级课程。 我把整个课程的内容做成了WORD文档,在1楼的附件中。 看的头直冒烟啊! 看来光看不行啊,还得一步一步实践啊。
佩服克招老师,也敬仰克招老师,以后有什么问题得多问问克老师了! 强烈支持! 继续关注:buxie:
继续历程:新概念ERM中级课程
终于挤出了时间来讲ERM,希望大家继续来学习,学海无涯回头是岸!。。。。第一课:一些关于ERM的东西和专业术语
ERM是一门精密的科学(可以这样说吧),如果出现了一点小错误就会导致脚本错误,游戏错误,严重的话甚至直接退出游戏。
所以ERM容不得半的错误。如果是语法错误还好,系统会提示,如果是变量冲突错误、变量纠结错误、函数错误的话那是很难弄的!
这是题外话
ERM是这样的:入门难,入门之后,一切都很简单!是真的,前面你会看到头痛,学到后面的话你就觉得很简单了。
进入中级课程,我会经常用专业术语,这个很重要。
那么我就开始讲一些专业术语:
条件:在ERM语句中在符号&和:之间的语句都是条件,条件可以存在,也可以不存在,
像我们前面使用的&y1=0之类的就是条件,这种条件叫做变量条件,还有另一种条件叫做标志条件(这个很快就会将到)
条件在我们的中级课程中是很重要的内容!
变量的索引:这个词在ERM帮助中出现几率很高,它的意思是:变量的编号
比如说V1的索引就是1,Z255的索引就是255,W14的索引就是14。
我们在以后的课程中也会用到这个词语。
类型:这个不用讲了吧,建筑、图标等都有不同的类型
子类型:有一些物件除了有类型之外,还有子类型,比如说矿井,类型是53,而金矿的子类型是6,所以金矿的总类型就是53/6。
事件:事件分为很多种,有:时间事件(就是在详细资料的事件框的事件)、城堡事件(在城堡的事件框中的事件)
地面事件(地面上出现的事件)、物件事件(就是捡起资源等物件的时候出现的事件)等等
参数:在:与;之间的语句称为参数(也就是主体部分的内容),参数我们一般用XXXX表示,比如说:
!!IF:XXXX;
然后我会再详细讲XXXX中可能的情况。
第一课完
第二课:变量的扩展内容
在这里我要申明一点:如果我在中级课程中讲的内容与扫盲课程的内容有矛盾的话,请忘了以前的吧,那只是为了使你更好的理解。
其实变量还有很多值得我们去探索,首先我详细讲一下各个变量:
a 无此变量
b 无此变量
c 这个变量很特殊,也很重要,这个变量每天都在改变,它储存着游戏的天数,在第一天,C=1,到了第90天,C=90。
d 我们说过d用来表示增加与减少值,
比如说:!!HE-1:Fd1/d2/d3/d0;
但是实际上它是一个变量名,也就是说上面的d1就是一个变量。
其实这个没有多大关系,你也可以不把它看做变量,因为这不影响你的编程。
(如果这几句话使你头晕的话,请忘了它吧)
e1~e100 小数点临时变量
它和y变量一样,是临时变量,一般来说:
!!VRy1:S1:3;
这样的话,Y1=0而不等于1/3,也就是说:5除3=1,1除3=0,在ERM普通变量中,是没有小数点的,一般是9舍10入。
也就是说:
!!VRy1:S1;
!!VRy1::3;
!!VRy1:*3;
最后结果是y1=0。
但是e变量是有小数点的:
!!VRe1:S1;
!!VRe1::3;
!!VRe1:*3
明白么?
f~t快捷变量:
这些变量不像带其他变量一样带数字,它们没有带任何数字,也就是说j就是j,s就是s,没有j1或是s5之类的。
因为他们不带数字,所以它们使用输入起来比较方便,所以叫快捷变量。它们的使用和V变量是一样的。
v1~v10000 标准变量,这个不多说。
w1~w1000 英雄变量,这种变量的使用和V变量几乎一样,它们和V变量的不同是,这种变量每个英雄都有一组。
什么意思呢?也就是说对于0号英雄来说,W1=0,而对于1号英雄来说,W1不等于0。
如果还不懂的话也不要紧,我以后还会说到。
X1~X16 函数变量,先不用了解,以后你会知道的,对于中级ERM制作来说还不需要。
y1~y100 临时变量,这个也不多说了
z1~z1000 字符串变量,字符串变量是Z变量的真正名字,记住!
z-1~z-15 字符串临时变量,顾名思义,他们是字符串变量中的临时变量,和Y变量一样。
读作:Z负1~Z负15。
——————————————————————————————
如何在对话框中显示快捷变量的值?
我们都知道可以用%V1显示出V1的值,那怎么显示快捷变量的值呢?
我们可以用%Vj来显示j的值,其他也一样。
——————————————————————————————
特殊变量:
在WOG中,有几个特殊的变量,它们用作特殊的用途,我们一般不使用它。
v1 这个变量经常性的用于储存一些系统处理的值,一般来说我们不使用它。
z1 这个变量用于接收玩家输入的信息,比如说WWP3中让你输入宠物的名字,输入以后就储存到了Z1,所以我们也不使用这个变量。
V998、V999、V1000,这三个变量非常重要,他们用于储存触发器被英雄触发的时候的位置坐标,比如说触发了!?OB15/15/0;的时候,
V998=15,V999=15,V1000=0,这个懂吧,任何坐标被触发的时候,此三变量都会被改变。
所以我们也不用它们。
另外在ERM公会的公告处有一个变量申报平台,那里记录着什么变量被什么用途使用,为了防止冲突,写脚本之前选几个没被使用的。
——————————————————————————————
用变量表示变量:
看下这几个命令就可以了:
!!VRy1:S5;
!!VRvy1:S3;
!!IF:M^%v5^;
此时,显示的内容为3。
我们可以用变量表示变量,可以重叠很多层,甚至可以是:vvvvvvvvvvvvvvvvvvvvvvyyyyyyyyyyyyyyvvvvvvvvvvvvwwwwwwwwwvvvvvvvv5
这个变量同样有效。
[ 本帖最后由 da3338280 于 2009-9-6 11:57 编辑 ] 都跑到这里来啦,好帖啊,强力支持。:good_job:
第三课:标志
说到标志,也许对于新手来说是最难的了,你去看ERM帮助的话,呵呵,自己想想后果。里面写住什么真啊假啊,设置啊,未设置啊,至少我以前看标志这个部分的时候很头晕!
以上都是废话啊,下面讲正题。
标志,又称标志位、条件标志、标志条件等等,在ERM帮助文档中,它的真实名字是:标志(FLAG)!
1、什么是标志?
标志是一种类似变量的东西,但是他们有一点和变量不一样:他们只能被设置2个值:0和1。
也就是说,它们是二进制,并且只有一位。
标志有1000个,使用方法和变量V一样,是可多次变换,并永久储存的,所以使用标志一样要和使用变量一样小心,一样会导致标志冲突。
我们可以把标志看作开关,它们只有两种状态(打开或关闭),并且永久储存。
在游戏开始的时候,读取!#命令之前,所有标志都是0,也就是关闭的。
我们可以用命令来使他们打开,变成1。
因为所有标志在游戏开始前都是0,所以使用标志前,我们也没有必要去专门把标志置0(也就是把开关关上)
但是我一般会在使用某标志前将它置0,为什么这样做呢?说出来你们很难理解,反正就是一句命令而已。
————————————————————————————————————————
2、标志的表示
我们都知道变量用字母加数字(或者单字母)来表示,那么标志呢?它们直接用它们的编号来表示。
比如说5,就是标志5。300,就是标志300。
那么我们怎么将它们和普通数字区别开来呢?
不用区别,因为标志只有在特定情况下使用,也就是说:
能使用标志的地方,一定不能使用变量和普通数字
能使用变量和普通数字的地方,一定不能使用标志!
————————————————————————————————————————
3、标志的作用
标志的作用主要是用来做条件(也就是&和:之间的部分)
我们都知道可以用&变量名(比较符号>,<,=)普通数字,来表示一个条件,比如说:
!!IF&v1<>0:M^v1不等于0。^;
我们可以同样用标志来表示一个条件,怎么用呢?
难道是标志名=(0或者1)?
当然不是,如果你将一句话写成这样的话,你看上去都会发笑:
!!IF&50=1:M^标志50为1^;
50=1是不可能发生的事情,所以会出现语法错误,但是我们如何表示一个标志当前的值呢?
一般来说,当标志为0的时候,我们一般用标志索引的负数(比如-50)来表示条件;
如果标志为1的时候,我们一般用标志索引的正数(比如50)来表示条件。
所以上面这句话就可以是:
!!IF&50:M^标志50为1^;
!!IF&-50:M^标志50为0^;
这个明白吗?
——————————————————————————————————
4、关于设置、获取标志的命令
这个命令还是比较多的,这里我只讲1个最最最最最主要的命令:
!!IF:V#/$;
这个能看懂吗?
#是表示一个只能被设置不能被获取的数字,$是表示一个能被设置与获取的数字。
在这条命令中,#用来表示一个标志的索引,而$用来表示标志的值(0或1)。
比如说:
!!IF:V50/1;
那么标志50就被设置为1了。
比如说:
!!IF:V50/?y1;
那么y1就获取了V50的值。
(IF这个命令是一个很复杂的命令,而M、V这两个命令还算是简单的。)
我没有试过用这个命令将标志设置为非1和0的值,但是如果你这样做的话,肯定是会出错或无效的。
——————————————————————————
5、为了以后我打字方便,我以后就将标志n简写为Fn(形如F50),但是在ERM命令中是不支持这样写的。
——————————————————————————
6、一段例子:
在做剧情地图或脚本的时候,我们经常用到变量,比如说这样:
ZVSE
!#IF:V50/0;
!?OB16/24/0;一间小屋子
!!IF&-50:M^孩子,我要水,水,水。。。。^;
!!IF&50:M^太好了,水~咕咚咕咚咕咚咕咚^;
!?OB45/33/0;魔井
!!IF:V50/1;
!!IF:M^你取了一点水放进包袱里,希望那个老人还没有渴死。^;
如果你看懂了这段ERM说明你已经学懂了!
[ 本帖最后由 da3338280 于 2009-9-13 16:59 编辑 ]
第四课:关于标志的扩展内容
这节课主要讲标志的一些特殊用法和习惯。1、标志在游戏初始的时候,F0~F500会被置为0,而F500~F1000则不改变,所以我们通常用这些标志用来在战役各地图间传播信息。
2、很久以前有人问到&1000是什么意思,现在我可以回答你了:
F1000是一个特殊的F,一般我们不使用F1000,它是系统自动调用的F,
当触发器被人类玩家触发的时候,F1000=1,否则为0,所以说&1000的意思就是当触发者为人类玩家的时候才执行命令。
因此F1000不要使用!
另外还有两个特殊的标志也是不能使用的:F999
这个F表示的是是否为玩家回合,如果是玩家回合的话F999=1,否则为0。有人会问了,有了F1000还要F999来干吗?
这个你以后自然会知道!所以F999同样不能使用。
F1也是一个特殊的标志,它被某些命令用来储存临时的标志信息,所以我们一般也不使用它。
3、讲到这里你已经知道了为什么在写脚本之前要将用到的F置0了,原因有两个:
(1)减少标志冲突的可能性
(2)防止F500~F1000标志未被置0,导致标志使用错误。
当然这是一个好习惯,是否这样做全取决于你们。
4、标志与变量之间的联系
它们是没有任何联系的!
5、如何在对话框中表示出F的值?
我们都知道可以用%V1来表示V1的值,那么F的值怎么表示呢?
很简单,就是%Fn,比如说%F50。
举例:
ZVSE
!#IF:V50/1;
!#IF:M^%F50^;
这个时候,显示为1。
6、我们都知道可以用变量表示变量(如Vy1)。
而F是不能用变量来表示的。 严重支持!!!虽然这几天学业忙,没时间看... 你看懂了么? 来学习一下,这个东东的确让人头晕 很好,就是还没有看懂。琢磨 到第七个都明白,从第八课开始术语太多,看不明白,应该多举例啊。
第五课:普通多用对话框(IF:Q命令)
非常重要!!!我们都知道使用IF:M命令,这是一个简单的命令,用于显示普通对话框。
IF:Q命令和IF:M一样,也是用来显示对话框。
我们用IF:M命令的时候,对话框显示的时候,对话框的下面只有一个勾勾(确定)的按扭,也就是说玩家无法选择确定还是否定,而我们使用IF:Q命令就会达到我们想要的效果:
比如说这样。
——————————————————————————————
Q命令的使用格式是:
!!IF:Q#^对话框内容^;
#表示一个标志的索引(或者叫做标志的编号),在这条命令中,只能使用1~10这十个标志。
为什么要输入标志的名称呢?因为这个标志将用来储存玩家选择的结果。
如果玩家选择了勾勾(也就是确定),那么标志的值就会变成1,如果玩家选择了圆圈(也就是否定)标志的值就为0。
举个例子:
!?OB15/24/0;
!!IF:Q2^是否要打开箱子?^;
!!IF&2:M^你真是不知深浅,现在遭到攻击了!^;
!!IF&-2:M^嗯,还是不要打开为好。^;
明白了吗?
——————————————————————————————
这个内容的确比较难理解,如果理解了的话我们继续看下面的:
IF:Q对话框我们称为普通多用对话框,之所以这么称呼它,是因为它属于普通对话框,
所谓普通对话框就是我们可以在原版SOD中所能看到的一切对话框。
相对于普通对话框,还有一种特殊对话框,这种对话框是WOG特有的,使用的是粗体字,它的用途比普通对话框广泛地多!
说句题外话,在WOG英文时代,当年WOG中文论坛的先辈,偶然发现了可以用特殊对话框来显示中文字,那件事情在当时是很轰动的。
好了,废话少说,我们主要讲讲为什么又称IF:Q对话框为多用对话框,因为它的用途真的很多。
它不单只可以使用上面那幅图片中的选择对话框,还可以用来H3内置显示图片,比如这样:
上面的那幅图是显示一张图片的单选择对话框,下面那张图片是一个显示两张图片的,要求玩家从两张图片中选择一张的对话框。
——————————————————————————————————————
如何显示图片呢?
如果要显示图片的话,我们可以使用这个命令:
!!IF:Q#1/#2/#3/#4^Text^;
#1 - 标志的编号
#2 - 图片的类型
#3 - 图片的子类型
#4 - 消息的类型
=1 - 普通消息文本 (标志FLAG #1 不变动!!!)
=2 - 请求是/否的对话框(是=1,否=0)
注意:你必须使用^文本内容^,不然没有效果。如果你不想有文本,则使用^^。
——————————————————————————————————————————
如果是显示两张图片的话:
!!IF:Q#1/#2/#3/#4/#5/#6^Text^ ;
#1 - 标志位编号
#2 - 图 1的类型
#3 - 图 1的子类型
#4 - 图 2的类型
#5 - 图 2的的子类型
#6 - 消息的类型
=1 - 普通文本消息 (标志位FLAG #1 不进行设置!!!)
=2 - 请求是/否的对话框(是=1,否=0)
=7 - 选择一个图片的对话框 (左=1, 右=0) (玩家选择左边标志为1,右边为0)
注意:你必须使用^文本内容^,不然没有效果。如果你不想有文本,则使用^^。
——————————————————————————————————
用这个命令最多可以显示四张图片,只需要在标志的后面和消息类型的前面用#/#的格式加上图片的类型和子类型就可以了。
值得注意的是:
{选择一个图片的对话框}只能在带两张图片的时候使用。
————————————————————————————
内置图片的类型和子类型表:
内置图片的类型和子类型表类型子类型资源
0~7,参见资源编号资源的数量宝物
8宝物的编号魔法9魔法的编号旗帜10玩家颜色的编号幸运(幸运的)11幸运的点数幸运(一般的)120幸运(恶运的)13恶运的点数士气 (高涨的)14士气的点数士气 (一般的)150士气 (低落的)16士气的点数经验图标17经验数量辅助技能图标20辅助技能编号+技能等级(1~3)怪物21[怪物编号城镇中的建筑22....30
城镇类型编号建筑编号四围31...34点数魔法值35点数钱36数量
以上所有的编号都可以在WOG帮助的ERM FARMATS中找到。
备注:在资源图标中,如果要表示N/天,则使用负数。
举例:!!IF:Q2/0/-3/1^{派兵驻守}
派兵驻守不仅使你的矿井增加产量,而且他们会为矿井与敌人战斗到最后一刻,目前,此矿井的产量为:^;
http://bbs.h3wog.com/attachment.php?aid=10776&noupdate=yes
[ 本帖最后由 da3338280 于 2009-9-13 17:43 编辑 ]