本帖最后由 robotone 于 2014-8-10 12:13 PM 编辑
函数。
数学上的函数:在一个变化过程中,有两个变量x、y,如果给定一个x值,相应的就确定唯一的一个y,那么就称y是x的函数。
程序上的函数:许多程序设计语言中,可以将一段经常需要使用的代码封装起来,在需要使用时可以直接调用,所以,函数也可以说是许多代码的集合,这就是程序中的函数。
共同点:输入决定输出,因为中间计算的过程是固定的。
函数是脚本语言写出来的小程序,实现简单功能,整合在mush里,据说Lua简单易用,就用Lua的,将来学学Lua语言,可以自己写函数。
用的时候,填写在发送框中,添上参数,选择发送到脚本(script),就可以执行了。
有个入门教程里说:在初期我们用到的只是很少一部分,在半天不到的时间就能完全掌握,只需掌握很少一部分就能完成大部分的工作。
我觉得新手最需要的就是最常用最简单的东西,掌握了就入门了,然后就是熟练使用的过程。
Mush的函数列表好几百,学到什么时候?
常用的可能只有几十个,老玩家和高手一定知道,希望大家写在帖子里,我整理一下,方便大家学习。
1.DoAfter()函数。
我用这个函数,写好了挑水机器人,用最笨的办法。
任务很简单,下山挑水慢慢走回厨房。
DoAfter (时间,"命令")
时间按秒算,然后发送命令到服务器。DoAfter可以串联用,时间累计计算。
DoAfter函数其实是制作一个使用一次的计时器。
DoAfter (1,"eat liang")
DoAfter (1.5,"eat @shiwu") --Mush里要有个变量shiwu。
在佛心井
fill mu tong
DoAfter (2, "wd")
DoAfter (4, "nu")
DoAfter (6, "nu")就这样一直写了几十步,把水挑到厨房。
第一次间隔一秒做的,网速一卡就把水撒了。然后一个一个改成两秒,一分钟能走回去。
诸葛不亮说的没错,机器人要:安全,稳定,效率,通用。新手任务都安全,刚做机器人要稳定,不要效率。
其实有更好的办法,用快速行走,设置下时间间隔就行了。
SetSpeedWalkDelay - 设置时间间隔
SetSpeedWalkDelay (2000) 这里是按毫秒算的。记得再改成0,要不下次快速行走就太慢了。
平时用快速行走,不要设置时间间隔,因为快速行走的时候输入什么都会排在队列后边。
DoAfter (3, Execute ("eat liang"))
这样是不行的,会马上执行Execute ("eat liang"),起不到DoAfter的作用了。
DoAfter只能发送字符串到服务器,不能发送别名和脚本函数。
给Execute ("eat liang")加上""是不行的,会报错。''也不行,游戏服务器识别不了脚本函数。
那就需要用到DoAfterSpecial,可以选择发送到哪里。
DoAfterSpecial (10, "4s 3w", 12)
10秒以后把"4s 3w"发送到12(快速行走)。12指的是发送选项第12项。
DoAfterSpecial (5, 'EnableTriggerGroup ("mygroup", 1)', 13)
5秒以后把EnableTriggerGroup ("mygroup", 1)发送到13(脚本解析器)。
使用了单引号作为字符串的标识符,所以参数“mygroup”两边双引号不需要特殊处理就可以被作为正常双引号使用。
单引号和双引号的区别不太懂,记得要这么用就行。
2.EnableTriggerGroup ("mygroup", 1)
打开组名为“mygroup”的触发器组。0为关闭。
EnableAliasGroup() 打开或者关闭别名组。
EnableTimerGroup() 打开或者关闭计时器组。
EnableGroup() 打开或者关闭一组触发器、别名和定时器。
3.关于Send(),函数都是脚本函数,发送选项要选择发送给脚本。send函数作用是发送命令给服务器。
Send ("north")可以执行,Send ("2n")不行,Send ("#2n")也不行。Send里的S小写也不行。
就因为很多这样的问题,当年我放弃了学习Mush。Mush要是把发送选项取消了,自动判定发送到哪里,就简单多了。
Send是发送到服务器,服务器不认识2n,#2n,Mush的命令解析器才认识。
游戏里重复命令是do,所以要Send ("do 2 n")。
SendImmedia(),绕过命令队列,直接发送命令到服务器。
4.Execute(),解析发送游戏命令、快速行走、脚本。
做个test触发,游戏里输入say,用:“你自言自语不知道在说些什么。”做触发,发送里就可以测试函数的用法了。
发送Execute ("#2n"),确定。输入say回车,就可以触发了。
5.GetVariable(),获取一个Mush变量的值。
Mush里有个变量abc,值100。
test=GetVariable ("abc")
Note (test)
发送到脚本。会显示100。
SetVariable(),设置一个变量,存在Mush变量列表中。
变量也有区别,一种是LUA脚本中定义的变量,在LUA脚本中当然可以直接使用了;
另一种是MUSH定义的游戏中的变量,这种变量在LUA中使用时,就需要用 SetVariable() 设置,用 GetVariable() 取值。——ddid。
6.Note(),在输出窗口显示信息。
Note("你好。")会显示“你好。”
内容加上"",就是字符。显示变量的值就不能加""。
ColoutNote(),显示彩色文字。三个参数,前景色,背景色,信息文字。
ColourNote ("red", "blue", "你好 ","white", "green", "大家好")可以连着用。
7.Connect(),连线当前游戏。
Disconnect(),断开当前游戏。
IsConnected(),检查当前游戏是否连线。
8.GetSpeedWalkDelay - 获得快速行走时间间隔。
SetSpeedWalkDelay - 设置快速行走时间间隔。
9.EvaluateSpeedwalk(),把快速行走变成mud命令。
Note(EvaluateSpeedwalk ("4n3esuwdLW(knock gate)(eat liang)"))
10.Info(),信息栏添加文字。
InfoClear(),清除信息栏的文字。
ShowInfoBar(),显示或者隐藏信息栏。
11.SetStatus(),设置状态栏显示的信息。
SetStatus ("当前 HP = ", GetVariable("hp"))
12.Replace(),用另一个文本替换指定的文本。
如果最后加上参数 true,给定文本中所有被查找到的字符串都会被替换,否则只替换第一个。
Note(Replace("go north, go east", "go", "walk", true))
13.EnableTimer(),打开或关闭一个定时器。
ResetTimer(),重置一个定时器。
ResetTimers(),重置所有定时器。上线触发里可以重置所有定时器一下。
14.Queue(),增加命令到命令队列中。
DiscardQueue(),丢弃命令队列中剩余的命令。
快速行走的时候,走错了可以用触发器把队列中剩余的命令丢弃掉。能返回丢弃的命令个数。
15.Simulate(),模拟服务器发送信息到输出窗口。
===============================================================================
yyyahoo帖子里的常用函数列表。具体请查阅手册或者网站论坛。
一些常用脚本内部函数或者命令:
Execute---将后面的字符送到命令解析器 DoAfterSpecial----间隔时间后将命令发送到指定输出地点(可以是游戏,命令解析器或者脚本) SetVariable---设定mush定义的变量 GetVariable---取mush定义的变量 AddTriggerEx---添加一个临时trigger SetTriggerOption---对某个触发进行一些配置,一般和AddTriggerEx配合使用 EnableTriggerGroup---打开或者关闭某个触发组 AddTimer---添加一个timer SetTimerOption---对某个timer进行配置 EnableTime---打开或者关闭某个timer; 以上函数在mush的help下的函数列表里面都有,请自行查找使用方法。
Note/Print----打印想要打印的内容,一般用来输出一些调试信息或者提醒信息 string.find---查找想要的内容,有则输出真,否则输出假 string.format---按照格式输出 string.lower---变小写 string.sub---删除字符串中的内容 tostring---数字改成字符 tonumber---字符变成数字 table.insert---在列表中插入内容 table.remove---在列表中删除内容 |