level 7
开篇废话
趁着这次维护,之前一直有的念头终于付之行动。Macro对不少openkore使用者来说,都比较陌生。但macro的使用却又必不可少。而反观网上,有大量的现成巨集,却很少有通俗易懂的macro教学。虽然官方有macro的维基和词典,但是对于一般新书而言,可能略显专业。
所以我打算能尽量深入浅出的介绍下macro和如何写一些简单的巨集。授人以鱼不如授人以渔。
毕竟个人经历有限,不可能帮每个人都写出他们需要的巨集,不如教会他们如何写。我相信有一些朋友会感兴趣。
因为是随兴而写,难免会有疏漏和错误,望发现的朋友及时指正。如果碰到不甚明白的地方,也可以尽管问我,我都会回答。
好了,不啰嗦了,进入正题
2012年11月16日 01点11分
2
level 7
2.Openkore中的macro
(为了书写方便,openkore里的macro我会统称之为巨集)
一般的宏的编写,需要一定的编程基础。但巨集却不尽然。尽管OPENKORE是基于perl语言,巨集却有自己的结构,功能简单且可用结构少。所以并不需要有非常良好的编程基础。
当然,既然巨集功能简单,那么自然可以实现的功能也不多。所以巨集并非是万能的,当我们需要达到一些复杂任务时,可能巨集能帮上的忙非常有限,或者需要其他方面的知识。
所以我的目标只是教会大家写一些简单的巨集,而不去过于深入。
Openkore的巨集只有两种,自动巨集(automacro)和手动巨集(macro)。从巨集的格式就能轻易分清楚这个巨集时自动巨集还是手动巨集。
automacro abc {
}
macro def {
}
第一个是自动巨集,第二个是手动巨集。其中第一个单词automacro或者macro用来告诉OP下面的巨集是自动巨集还是手动巨集。
接下来的abc和def则是巨集的名字,并且不可重名。
而一个巨集的内容开始于前花括号“{”, 以后花括号“}”结尾。以便于让op知道哪段内容是属于哪个巨集的。所以一个完整无错的巨集,至少要有这3个基本结构。
两者有什么区别呢?自动巨集是当满足了一定条件后,巨集会自动执行。而手动巨集则是必须在Openkore的输入命令框内打上 "macro def" 的命令,名为def的手动巨集才会被执行,否则一般情况下手动巨集不会被执行。 两者的区别就是前者有条件,后者没有。这也导致了两者内容结构上的差异。
今天的入门(一),我想先介绍最常见的自动巨集, automacro。
2012年11月16日 02点11分
5
level 7
3. 自动巨集,automacro
首先让我们来看下自动巨集的一般格式
automacro abc {
条件A
条件B
条件C
call {
做什么
}
}
先来稍微解析一下这个自动巨集:
现在有一个名字叫 abc 的自动巨集, 当条件A,条件B,条件C同时满足时,去做call {...}里面的内容。 你可以理解为,当你集齐七颗龙珠(条件1234567),可以召唤神龙实现愿望(你想巨集去做的事)。因为龙珠缺一不可,所以任意一个条件不满足时,该自动巨集就不会被执行。条件部分可以一个不写,也可以随便写多少个,根据你的需求来。
而call {} 又是一对花括号。 自动巨集本身的花括号是分割不同的巨集,而call带的花括号则是分割执行部分和条件部分。
一个比较简单的例子
automacro move {
location prontera
call {
do move 100 100
}
}
自动巨集名字叫move, 当你人物处在普隆德拉时(location prontera),巨集move会让你的人物移动到(100,100)这个坐标位置(do move 100 100)。
好,现在我们明白 一个完整的autmacro必须要有两个"{"和两个"}"组成,很多新手会漏打其中几个。所以当你的自动巨集无法执行时,请先检查你的{}是否正确。
2012年11月16日 02点11分
6
level 7
4. 自动巨集的条件
触发一个自动巨集是否执行的条件,不是我们想当然的自己乱写。Openkore作者提供了一些内置的参数和命令来帮助我们。我会给大家一一介绍
1)map
格式: map 地图名
解释:当你当前地图为某个地图时,巨集被触发
例子:map prontera
解释:当你当前地图为普隆德拉(prontera)时,巨集被触发。
2)location
格式:location/location not 地图1, 地图2,... 坐标1, 坐标2,...
解释:当你的位置在(不在)地图1或地图2的坐标1或坐标2时,巨集被触发
例子1:location geffen, payon 100 110, 200 220
解释:当你位置在吉芬或者斐扬的(100,110)或(200,220)时,巨集被触发。详细说,触发的位置点有四个(geffen 100,110) (geffen 200,220) (payon 100,110) (payon 200,210)。当你处在上述四个坐标的任意一个时,巨集会被触发。
具体使用时,地图名可以省略,比如 location 100 100。 意思是你处在任意一张地图的(100,100)时,都可以触发巨集
例子2:location not ....
解释:格式和之前相同,只是在location后加了一个not,意思是当你“不”处在那些坐标位置时,巨集才被触发。
2012年11月16日 02点11分
7
楼主,你好,请问有没有完全的巨集教学?这里被吞完了。
2015年07月31日 10点07分
level 7
3)hp sp spirit(气球数) weight(携带重量) cartweight(手推车的重量) zeny(携带金钱) soldout(露天商店卖光的商品种类) base(BASE等级) job(JOB等级) aggressives(围攻你的怪物数量)
这些命令有着相同的格式,所以我打算放在一起讲解。
他们的共同格式是:
hp 条件 数量
例如 hp < 1000, 意为当HP小于1000时,执行巨集。
而巨集支持用到的条件格式有
==(记住!编程里的等于这个概念都是用双等号表示,而不是单等号)
<
>
<=
>=
!=(不等于)
~(类似数学里的属于,例如 a ~ b,意思是 a是b中的一个元素,类似**的概念,但普通巨集里我们并不常用。)
对于hp, sp, weight, cartweight 这四个参数中的数量,我们可以加上“%”来表达百分比
例如
sp < 50
sp < 50%
是两个不同的意思,前者是sp的数值小于50点, 而后者表达sp的百分比低于50%。
如果我们想表达一个范围呢?比如我们想让巨集在 人物的HP在 10%到50%之间的范围内才执行呢?
因为条件和条件之间是并列结构(AND,必须全都满足,缺一不可),所以我们可以分成两段来写:
hp >= 10%
hp <= 50%
另外,最后一点,对于soldouts这个参数
例如,soldouts > 3
意为当你的露天商店卖空的商品种类超过3个时。记住,是种类而不是数量。
什么意思呢?比如你在卖 红色药水,黄色药水,白色药水,蓝色药水。不是你卖掉3瓶红色药水就会触发巨集,而是当你卖光所有的红色药水,黄色药水和白色药水,巨集才会被执行
2012年11月16日 02点11分
8
level 7
今天就写到这- -
明天会直接用一些实际脚本来解释如何写一个automacro自动巨集
感谢支持,╮(╯_╰)╭
2012年11月16日 02点11分
10
level 2
支持!!!!通俗易懂哈!!!强烈顶起!!!K君辛苦了!!!!
2012年11月16日 05点11分
13
level 7
该死,被百度吃了一楼- -
被吃掉的部分是剩余的一些条件参数
我会补充在明天的内容里~
2012年11月16日 07点11分
14
level 1
Cannot load field ordeal_3-1: NO corresponding field file found for field"ordeal_3-1".
无法加载
领域
ordeal_3
-1:
没有相应的
字段“
ordeal_3
-1”
的
文件
。
这是什么意思?应该怎样做呢?
2012年12月11日 04点12分
17
level 1
小白不容易找到这 烦请前辈们提供一下程序 脚本自己研究 先谢谢各位大大了
2017年11月19日 04点11分
20
QQ:61695533
2017年11月19日 04点11分