mudkiller 发表于 2015-8-21 11:21:26

求教 关于MUSH和lua之间互相调用的问题

本帖最后由 mudkiller 于 2015-8-21 07:47 AM 编辑

初学MUSH,弱弱地问一下

想实现以下代码,

if wait.regexp("^yuy.*你今天太累了,结果什么也没有学到。$")
then 睡觉
else
wait.regexp("^.*你听了谷虚道长的指导,似乎有些心得。$")
end

怎么写呢,还有怎么在MCL文件中调用呢,谢谢了

北大侠客行MUD,中国最好的MUD

adasibi 发表于 2015-8-21 19:26:07

同新手,说错了请多包含。
新建一个文本文档,比如C:\KILLGUXU.TXT,填上:
require("wait");

function ShuiJiao()
      Send("去睡觉的命令"); end;

function ShaGuXu()
      print("你被谷虚杀死了"); end;

function courtineWTF()
      if wait.regexp("^yuy.*你今天太累了,结果什么也没有学到。$") then
               ShuiJiao();
      elseif wait.regexp("^.*你听了谷虚道长的指导,似乎有些心得。$") then
               ShaGuXu(); end; end;

wait.make(courtineWTF);

保存退出。

用写字板打开.MCL文件,下面这行有就改没有就加,加在第一个空行下面:
   script_filename="C:\KILLGUXU.TXT"
也可以在菜单里通过Game->Configure->Scripting调出一个窗口修改,或者直接按shift+ctrl+6调出。
保存退出。

用MUSHclient打开上面的.MCL文件,MUSHclient就会去调用C:\KILLGUXU.TXT啦。

mudkiller 发表于 2015-8-22 08:27:51

谢谢,我名字起得急了点,虽然叫killer,不过也不会去杀师傅,呵呵
不过还是谢谢你的指教,在论坛里看了好几天,这些东西也没有看到,现在明白了

mudkiller 发表于 2015-8-22 08:28:57

wait.make(courtineWTF) 的作用是什么呢

cappuccino 发表于 2015-8-22 10:14:47

在论坛里看了好几天,这些东西也没有看到
mudkiller 发表于 2015-8-22 08:27 AM http://pkuxkx.com/forum/images/common/back.gif


    弱弱地推荐下我自己弄的一个视频教程。。http://pkuxkx.com/forum/thread-38551-1-1.html

虽然冗长拖沓,但是基础的东西基本都有。。你可以先把字幕文件下下来打开浏览下再选择你需要的部分去看视频

flee

adasibi 发表于 2015-8-22 11:20:18

不好意思,单词我打错了,应该是coroutine,是lua的一个功能,wait就是用这个写的。
我的理解是coroutine是一个能暂停的函数,wait.make把普通函数变成能暂停的函数然后执行一次,执行过程中遇到wait.regexp就会暂停,wait.regexp生成一个名字是wait_trigger_xxxx的触发,再把这个暂停了的函数存在全局变量threads["wait_trigger_xxxx"]里,wait_trigger_xxxx被触发后会执行wait.trigger_resume函数,wait.trigger_resume根据当前触发名字从threads[]里取出被暂停的函数继续执行,遇到下一个wait.regexp再暂停、生成触发........循环往复直到函数结束。每个wait_trigger_xxxx都不相同,所以多个wait.regexp不会互相干扰。
膜拜楼上大神!

mudkiller 发表于 2015-8-22 12:50:04

to adasibi   这么复杂啊,我慢慢学吧
谢谢5楼的好心人大侠,正在下载视频,下载下来好好学习一下。
周围没有玩MUD的,只能靠你们这些好心人的指点了。

mudkiller 发表于 2015-8-22 18:13:05

还是没有太明白,不知道怎么调用script中的函数,能不能看看下面这个短小的XML代码有什么是不对的

<trigger
   enabled="y"
   group="学技能"
   match="^.*你今天太累了,结果什么也没有学到。$"
   regexp="y"
   send_to="10"
   sequence="100"
>
<send>tailei()</send>

</trigger>


<script>

tailei = function ()

wait.make (function ()
Execute("e;e")
wait.time(2)
Execute("sleep")
end)

end

</script>

adasibi 发表于 2015-8-22 22:05:21

我不知道怎么在.mcl里用<script>调用lua,不过大侠你非要和xml过不去的话,可以通过菜单File->Plugin Wizard...创建一个插件,填好name点击Create保存成.xml文件,打开这个.xml,在<include name="constants.lua"/>的下边加上
<triggers>
    触发加在这里
    <trigger
    ..........
    send_to="12"   12代表lua解释器
    .........>
    </trigger>
</triggers>

<script>
<![CDATA[
        这里写脚本
]]>
</script>
写好以后菜单File->Plugins...,点Add...加载插件。

cappuccino 发表于 2015-8-22 22:36:45

你们这样直接改xml和mcl真的好吗。。
就好像餐厅提供了刀叉,却想要自己动手撕牛排。。
页: [1] 2 3
查看完整版本: 求教 关于MUSH和lua之间互相调用的问题