whuan 发表于 2008-1-6 22:33:01

mushclient入门教程

最近在mud里面很多玩家问及mushclient的问题,特针对性的回答一些。

Q1.如何使得mushclient保留上一次输入的命令?用esc删除命令?[跟zmud一样]
A:右键->world configration(或者art+enter键启动)
      1.command->auto-repeat command(勾上)[如果是穿梭,把ignore echo off message也勾上]
      2.command->keyboard preferences->deleting->把"escape deletes *"和"save delete command"都勾上,把arrow keys的四个都勾上。

Q2.如何改变字体?
A:右键->world configration(或者art+enter键启动)->output->font

whuan 发表于 2008-1-6 22:34:44

Q3.如何启动脚本功能?
A:shift+ctrl+6->scripting->选择jscript->Enable(勾上)->确定。(跟后面的一些讲座有关)

whuan 发表于 2008-1-6 22:44:22

Q4.如何设置各种路径?例如从ct到泰山?
A:使用alias功能+speedwork高哦能
   1.启用speedwalk:
         world configration->command->enable speekwalking(勾上)->后面的符号是#号,你可以可以改成!啊,.啊随便你。把delay改成50。
   2.建立alias
   shift+ctrl+9->add->在alias出输入:taishan->在send里面输入:6e (ne) n n 3(nu) (eu) 7(nu) ->把下面send的下拉框中的world改成speedwalk.

输入taishan就可以去泰山了。这个集成的功能core以前发过帖子的,在mush下载区自带这个插件。

whuan 发表于 2008-1-6 22:47:24

Q5.如何做一个抓取聊天的trigger?类似于zmud的#CAP。
A:shift+ctrl+8(启动trigger)->add->trigger中输入:*【闲聊】*->send里面写:world.AppendToNotepad("chat", "%0\\r\\n"); send中的world改成script。

whuan 发表于 2008-1-6 22:48:42

先占个位子,以后慢慢加

tianheng 发表于 2008-1-7 07:37:34

非常感谢无欢大师,受益匪浅啊!
再问个有难度点问题,怎么实现#wa 1000这样的功能,
谢谢!

whuan 发表于 2008-1-7 11:53:41

利用mushclient的DoAfter和mud的tell指令实现延时功能 by boost@pkuxkx

利用mushclient的DoAfter和mud的tell指令实现延时功能


不懂lua,所以只好自己想法写个延时功能

说明一下,这个功能并不是为了实现在一串指令中插入n个延时,而是实现在服务器端的真正延时,主要思想是延时之前tell 自己一个特定字符串,收到tell的消息后开始延时,延时结束再tell自己一个特定字符串,然后开始延时后的工作,这样能确保lag的时候延时是正常的
如果想在一串指令中插入n个延时,需要自己实现speedwalk,mushclient自带的不好用


首先要求在game中保存一个变量myid,代表自己的id



以下是trigger部分,用于捕捉tell消息

<triggers>
<trigger
   enabled="y"
   keep_evaluating="y"
   match="^(?:> )?([^\(]+)\(([^\)]+)\)告诉你:(.*)$"
   regexp="y"
   send_to="12"
   sequence="1"
>
<send>chatLog("%1","%2","%3")</send>
</trigger>
</triggers>

可以匹配如下模式

> 中文名(id)告诉你:消息内容

例如

> 双核(doublecore)告诉你:test







脚本部分


var robot_chat_prefix = world.CreateGUID();//每次加载脚本生成一个guid,作为消息头,防止误触发
robot_chat_prefix = robot_chat_prefix.replace(/\-/g,"");
robot_chat_prefix = robot_chat_prefix.substr(0,23);
function chatLog(cname,ename,msg)
{
if(ename == GetPluginVariable("","myid")) //判断是否为自己tell自己
{
if(msg.substr(0,23) == robot_chat_prefix) //判断消息头是否为guid,只有以guid开头的消息才会触发相应的函数
{      //函数名为robot_+消息名,自己实现,通过fire_robot发出
   return do_robot_action(msg.substr(23));
}

//其它判断
}

}
function do_robot_action(msg)
{
return eval("robot_"+msg)();   //由于做了guid保护,因此该函数一定存在
}

function fire_robot(msg)
{
send("tell "+GetPluginVariable("","myid")+ " "+robot_chat_prefix+msg);//添加GUID消息头
}
function fire_robot_after(time,msg)
{
DoAfter(time,"tell "+GetPluginVariable("","myid")+ " "+robot_chat_prefix+msg); //同上,增加延时
}

这些函数只能提供给脚本内部使用,不能插入命令行中,例如要暂停5秒后调用函数robot_other_thing()

可以这么写 fire_robot_after(5,"other_thing");

如果这么写DoAfterSpecial(5,"robot_other_thing()",12)也能延时,但是只是客户端延时



稍微扩充一下可以写出任意条件延时,当然这个任意条件需要自己实现

下面举例说明,例如在快速行走中会遇到挡路npc,当然是自己实现的快速行走,mush自带的不是很好用

假设快速行走路径为 n, kill liu mang, e
这里的任意条件为 “liu mang被杀死”

可以这么写

send("n");

fire_robot("check_kill_start");

上面这一行会触发函数robot_check_kill_start()

function robot_check_kill_start()

{

EnableTrigger("check_kill_trigger",1);   //打开检查是否有叫杀的trigger,叫杀时将某个变量赋值
kill_flag = false;                  //假设该变量为kill_flag,注意设成全局,初始设成false,有叫杀后在叫杀trigger中设为true
send("kill liu mang");   //想办法获取到要杀的对象-liu mang,或者指令-kill liu mang
fire_robot("check_kill_stop");      //立即触发函数robot_check_kill_stop()
}

function robot_check_kill_stop()

{
EnableTrigger("check_kill_trigger",0);   //关闭检查是否有叫杀的trigger
if(kill_flag)   //有叫杀,表示该npc没有被杀死,2s后继续杀
{
fire_robot_after(2,"check_kill_start"); //2s后重新检查
}
else
{
//该npc已被杀死,可以继续行走
}
}




欢迎交流:)

whuan 发表于 2008-1-7 11:57:40

双核的办法有点复杂,而我呢,通常是这样的(比较傻一点)
假设我的speed walk的字符是!,我的delay是50ms,那么我想延迟3秒,怎么办呢
例如cross river之后有可能有3秒的延迟:!9n (cross river) 60() 3n,这里输入60个空白,能实现但是有点不爽。
在trigger中通常用DoAfter来实现。

tianheng 发表于 2008-1-7 13:26:43

哇,五体投地!

tianheng 发表于 2008-1-7 14:30:29

Mush Client入门教程
http://bbs.mudbuilder.com/read.php?tid=1654

MUSHclient爱好者网站
http://mc.chinaido.com/index.php

多向我们的whuan大佬请教,呵呵
页: [1] 2 3
查看完整版本: mushclient入门教程