※ 引述《eplis (Eplis)》之铭言:
mob_prog = mob_program 即 mob 的动作程式,举凡是给它钱
告诉他什么话,给他什么东西都是由这边操控,这是最简易版的
程序控制,不需要真正写到程式,但是也是一连串的逻辑控制就是了。
以下是一个例子 巨型野兔(huge hare)
>fight_prog 100~
if rand(25)
mset hare level 5
emote 咚!咚!咚!跳到了你的面前
bare multi $n
mset hare level 11
endif
~
>death_prog 100~
mpjunk all
if rand(10)
mpoload 5601 10
break
endif
if rand(35)
mpoload 5608 1
mpecho 你发现脚边有一个土堆!
endif
~
|
兔子的动作主要分两种 program,分别是 fight_prog 与 death_prog
program 种类有很多,格式是这样:
注意!
任何prog内禁止使用tab、全角空白,compiler绝对不会报错
但是你的prog内容会完全无效!!
>[prog_type] [argument]~
~
>是prog进入点
[prog_type]rog 种类,总共有以下
1. SPEECH_PROG //说话程式
2. RAND_PROG //随机启动程式
3. FIGHT_PROG //战斗程式
4. DEATH_PROG //死亡时启动程式
5. HITPRCNT_PROG //mob血量百分比程式
6. ENTRY_PROG //生物进入房间起动的程式
7. GREET_PROG //生物见面启动程式
8. GIVE_PROG //被给予时启动程式
9. BRIBE_PROG //被给钱时启动程式
1. speech_prog 就是你告诉他什么话时会启动的程式,例如
>speech_prog [p] 给我钱~
say 才不要咧!
~
当玩家 "tell mob 给我钱" 的时候,NPC会说"才不要咧!"
[p] 参数为了良好的程式习惯,就都要加就对了!
2. rand_prog 就是mob会不断的随机一个乱数,然后执行这段程式
>rand_prog 50~
say 耶 50% 机率可以说话!
~
嗯,没错!后面接的参数就是机率!这个 rand_prog 每个 tick
就会执行一次乱数,所以是非常吃系统资源的,我自己是完全禁
止使用这种prog,没意义也没效率
3. fight_prog 就是战斗的动作,后面接的也是参数。例如:
>fight_prog 100~
say 竟敢打我!
~
这个例子不是很好,因为它每一回合都会说一次 "竟敢打我!"
机率是 100% 嘛!来应用一下刚刚兔子的prog
>fight_prog 100~
if rand(25)
mset hare level 5
emote 咚!咚!咚!跳到了你的面前
bare multi $n
mset hare level 11
endif
~
这边就是每回合都会进入这个战斗程式,第二行的 if rand(25) 代表有
25%的机率会进入这个条件,if 当然要用 endif 包起来,这就是程式的
概念,所以要写难度高的、复杂的prog建议要有基础的程式底子。
mset xxxx 是 mob 动作,这是改变兔子等级到 5 级,然后使用 bare multi
使用完后再改回 11 级,因为等级太高打玩家会太痛XD
4. death_prog 死亡时会启动的程式,一样用数字当作机率参数。
>death_prog 100~
mpjunk all
if rand(10)
mpoload 5601 10
break
endif
if rand(35)
mpoload 5608 1
mpecho 你发现脚边有一个土堆!
endif
~
这个例子稍微复杂一点,死亡时清空身上的装备(mpjunk all),这边使用
mpjunk 而不是 mppurge,请注意以后清东西请用这个指令,不要再用mppurge
if rand(10) 有10%机率会产生(mpoload) 5601 这个物品
break 则是直接结束整个 death_prog
if rand(35) 有35%机率产生 5608,且在房间广播 "你发现脚边有一个土堆!"
某个很难打的重要戒指 death_prog 很简单,
>death_prog 5~
mpoload xxx 1
~
这样就了解了
5.hitprcnt_prog 血量比例程式,
当 mob 的 hp 低于某百分比时所进行的prog
>hitprcnt_prog 50~
say HP低于一半啦!
~
不过通常不会单独使用,而是用另外一种方式出现在其他 prog 里面
例如在 fight_prog 里面常用
if hitprcnt($i) < 50
say 我的血量低于一半,开始变身!
mset eplis level 130
endif
这边就是龙王不断变强的秘密(?),每到一定的血量就提升自己的等级
6. entry_prog 该NPC进入到一个新房间会驱动的程式
>entry_prog 80~
say 我有80%的机率在走到新房间时会说这句话!
~
高阶应用:如果想做NPC看到某个ID会做某个事情,很简单
>greet_prog 100~
if name($n)== eplis
say 遇到 eplis 囉
endif
~
如果想做出解救npc/逃亡的效果,搭配上述的做法即可。例如我们要救出
ID是 eplis 的 npc,若是守卫看到eplis会攻击eplis。
guard prog:
>greet_prog 100~
if name($n)==eplis
say 遇到 eplis 囉!快打他
mpkill eplis
endif
~
eplis prog:
>entry_prog 100~
say 我进到新房间囉!先观察环境
look
~
基本上就是让eplis这个npc到了新房间先look,
然后look就会触发guard的greet_prog
7. greet_prog 碰到该mob会触发的程式,
>greet_prog 100~
say 您好欢迎光临!
~
通常作服务业卖商品的都要很有礼貌,所以都会作类似这种 prog
不过有时候NPC进到商店,理论上 NPC 不可能跟 NPC 买东西吧!
所以都还会加一个判断式,判断是不是人,阿不是啦!是不是玩家
8. give_prog 玩家给予物品时会触发的程式,要记得物品名称是完整名称喔
>give_prog dragon pearl~
say 哇!这么好给我飞龙珠!那我就收下啦!
mpjunk all
~
通常做迷的时候一定要把物品给删除(mpjunk),避免玩家从你(mob)身上
得到好处之后杀人越货再来一次XD
9. bribe_prog 贿赂程式,参数是金额
>bribe_prog 5000~
say 谢谢你给我5000金币!
mpjunk coins
~
概念如同 give_prog,计得删除金币。
bribe_prog 还有一个概念,就是参数以上也视同接受,例如上面的例子
你给 mob 5001 金币,他也是会说 歇歇你给我5000 金币
所以要做出上下限的概念比较搞刚一点,要做这样子:
>bribe_prog 5000~
say you gave at least 5000 coins!!
mpjunk coins
~
>bribe_prog 1~
say you gave less than 5000 coins!!
mpjunk coin
~
这样给予不到5000金币的时候也会有反应了!
补充:
现在的mob有内建四个变量,分别是 mobphase, mobvar1, mobvar2, mobvar3
可以自己灵活运用!设定的方式就是 mset $i mobphase 1
很多人喜欢做召唤怪、产生物品,以往因为 mpoload, mpmload xxx 只能一直产生
有些人会刻意让mob无限产生导致系统不稳,现在可以透过设定变量来达到功能
举例:
if mobvar1($i)==0
mset $i mobvar1 1
mpmload xxx
mpoload ooo
break
endif
如此一来就不会一直产生 xxx ooo 了
好了 prog 介绍到这边,还有很很多的参数没介绍到,再下一篇会出现