macro吧 关注:341贴子:1,466

Openkore小教室---Macro入门(一)

只看楼主收藏回复

一楼百度


1楼2012-11-16 09:30回复
    开篇废话
    趁着这次维护,之前一直有的念头终于付之行动。Macro对不少openkore使用者来说,都比较陌生。但macro的使用却又必不可少。而反观网上,有大量的现成巨集,却很少有通俗易懂的macro教学。虽然官方有macro的维基和词典,但是对于一般新书而言,可能略显专业。
    所以我打算能尽量深入浅出的介绍下macro和如何写一些简单的巨集。授人以鱼不如授人以渔。
    毕竟个人经历有限,不可能帮每个人都写出他们需要的巨集,不如教会他们如何写。我相信有一些朋友会感兴趣。
    因为是随兴而写,难免会有疏漏和错误,望发现的朋友及时指正。如果碰到不甚明白的地方,也可以尽管问我,我都会回答。
    好了,不啰嗦了,进入正题


    2楼2012-11-16 09:45
    收起回复
      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。


      5楼2012-11-16 10:01
      回复
        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必须要有两个"{"和两个"}"组成,很多新手会漏打其中几个。所以当你的自动巨集无法执行时,请先检查你的{}是否正确。


        6楼2012-11-16 10:19
        回复
          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,意思是当你“不”处在那些坐标位置时,巨集才被触发。


          7楼2012-11-16 10:30
          收起回复
            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瓶红色药水就会触发巨集,而是当你卖光所有的红色药水,黄色药水和白色药水,巨集才会被执行


            8楼2012-11-16 10:46
            回复
              今天就写到这- -
              明天会直接用一些实际脚本来解释如何写一个automacro自动巨集
              感谢支持,╮(╯_╰)╭


              10楼2012-11-16 10:56
              回复
                强烈支持


                11楼2012-11-16 11:19
                回复
                  谢谢分享,新手菜鸟前来学习


                  IP属地:上海12楼2012-11-16 13:44
                  回复
                    支持!!!!通俗易懂哈!!!强烈顶起!!!K君辛苦了!!!!


                    13楼2012-11-16 13:46
                    回复
                      该死,被百度吃了一楼- -
                      被吃掉的部分是剩余的一些条件参数
                      我会补充在明天的内容里~


                      14楼2012-11-16 15:36
                      回复
                        马克一记,虽然说现在还用不上


                        IP属地:湖南15楼2012-11-17 15:13
                        回复
                          这个需要支持一下 虽然基础的东西还是会那么一点


                          16楼2012-11-17 17:48
                          回复
                            Cannot load field ordeal_3-1: NO corresponding field file found for field"ordeal_3-1". 无法加载领域ordeal_3-1:没有相应的字段“ordeal_3-1”文件
                            这是什么意思?应该怎样做呢?
                            


                            IP属地:广东17楼2012-12-11 12:49
                            回复
                              好不容易挖到坟了 能发个OP软件么 跪谢 liuyu0804@163.com


                              来自iPad18楼2015-07-21 19:27
                              回复