4 系统命令¶
系统命令是指在命令行键入的用于操作系统功能的命令,一般以#号开头。除 #session 命令外,其他命令均可以在代码中通过session.exec系列命令进行调用。在命令中可以使用大括号{}将一段代码括起来,形成代码块。代码块会被作为一条命令处理。
#action¶
等同于 #trigger
#ali¶
为 #alias 命令的简写
#alias¶
#alias命令用于操作别名。#ali是该命令的简写方式。该命令可以不带参数、带一个参数或者两个参数。用法与示例如下。
#ali: 无参数, 打印列出当前会话中所有的别名清单
#ali my_ali: 一个参数, 列出id为my_ali的pymud.Alias对象的详细信息
#ali my_ali on: 两个参数,启用id为my_ali的pymud.Alias对象(enabled = True)
#ali my_ali off: 两个参数, 禁用id为my_ali的pymud.Alias对象(enabled = False)
#ali my_ali del: 两个参数,删除id为my_ali的pymud.Alias对象
#ali {^gp\s(.+)$} {get %1 from corpse}: 两个参数,新增创建一个pymud.Alias对象。使用时,gp gold = get gold from corpse
#all¶
#all命令可以同时向所有会话发送统一命令。用法与示例如下。
#all #cls: 所有会话统一执行#cls命令
#all quit: 所有会话的角色统一执行quit退出
#clear¶
清屏命令,清除当前会话所有缓存显示内容。
#cls¶
#clear 命令的简写
#close¶
关闭当前会话,并将当前会话从pymud的会话列表中移除。
注:当前会话处于连接状态时,#close关闭会话会弹出对话框确认是否关闭
#command¶
#command命令用于操作命令。#cmd是该命令的简写方式。该命令可以不带参数、带一个参数或者两个参数。用法与示例如下。
#cmd: 无参数, 打印列出当前会话中所有的命令清单
#cmd my_cmd: 一个参数, 列出id为my_cmd的pymud.Command对象的详细信息
#cmd my_cmd on: 两个参数,启用id为my_cmd的pymud.Command对象(enabled = True)
#cmd my_cmd off: 两个参数, 禁用id为my_cmd的pymud.Command对象(enabled = False)
#cmd my_cmd del: 两个参数,删除id为my_cmd的pymud.Command对象
#con¶
#connect 命令的简写
#connect¶
连接到远程服务器(仅当远程服务器未连接时有效)。命令是通过调用
Session.open()来实现连接。
#cmd¶
#command 命令的简写
#dis¶
#disconnect 命令的简写
#disconnect¶
断开到远程服务器的连接。命令是通过调用
Session.disconnect()来实现连接。
#echo¶
触发器测试命令。使用 #echo 测试时,相当于收到了来自服务器传递的对应数据,是否能导致触发器执行按当前程序实际情况。并且,#echo 除了键入的内容外,不会显示触发结果的额外信息。
#echo 你深深吸了口气,站了起来。: 相当于从服务器收到“你深深吸了口气,站了起来。”
#echo %copy: 复制一句话,相当于从服务器再次收到复制的这句内容。
#error¶
使用
Session.error输出信息, 该信息默认带有红色的标记。
#exit¶
退出PyMUD程序。
注:当应用中存在还处于连接状态的会话时,#exit退出应用会逐个弹出对话框确认这些会话是否关闭
#gag¶
在主窗口中不显示当前行内容,一般用于触发器中。
注意:一旦当前行被gag之后,无论如何都不会再显示此行内容,但对应的触发器仍会生效
#global¶
#global命令用于操作全局变量。该命令可以不带参数、带一个参数或者两个参数。用法与示例如下。
#global: 不带参数,列出程序当前所有全局变量清单
#global hooked: 带1个参数,列出程序当前名称为hooked的全局变量值
#global hooked 1: 带2个参数,设置名称为hooked的变量值为1(字符串格式)
#gmcp¶
#gmcp命令用于操作GMCPTrigger。该命令可以不带参数、带一个参数或者两个参数。用法与示例如下。
#gmcp: 无参数, 打印列出当前会话中所有的 GMCPTrigger 清单
#cmd GMCP.Move: 一个参数, 列出id为GMCP.Move的 GMCPTrigger 对象的详细信息
#cmd GMCP.Move on: 两个参数,启用id为GMCP.Move的 GMCPTrigger 对象(enabled = True)
#cmd GMCP.Move off: 两个参数,禁用id为GMCP.Move的 GMCPTrigger 对象(enabled = False)
#cmd GMCP.Move del: 两个参数,删除id为GMCP.Move的 GMCPTrigger 对象
#help¶
显示帮助。当不带参数时, #help会列出所有可用的帮助主题。带参数显示该系统命令的帮助。参数中不需要#号。用法与示例如下。
#help: 打印所有支持的系统命令清单。其中,绿色字体的为简称/别名,白色字体的为原始命令
#help trigger: 显示#trigger命令的使用帮助
#ig¶
命令 #ignore 的简写
#ignore¶
切换所有触发器是否被响应的状态。当触发器被全局禁用时,状态栏右下角处会显示“全局禁用”字符提示。
注意:在触发器中使用#ig可能导致无法预料的影响
使用快捷键F3(可由pymud.cfg配置)相当于输入命令#ignore(0.19.1版新增)
#load¶
为当前session加载指定的模块。当要加载多个模块时,使用空格或英文逗号隔开。也可以用于激活本会话中的插件。
多个模块加载时,按指定名称的先后顺序逐个加载(当有依赖关系时,需指定顺序按依赖影响依次加载) 。
#load myscript: 加载myscript模块,首先会从执行PyMUD应用的当前目录下查找myscript.py文件并进行加载
#load pymud.pkuxkx: 加载pymud.pkuxkx模块。相当于脚本中的 import pymud.pkuxkx 命令
#load myscript1 myscript2: 依次加载myscript1和myscript2模块
#load myscript1,myscript2: 多个脚本之间也可以用逗号分隔
#load myplugin: 在本会话中激活名称为myplugin的插件(注意,是插件中由 PLUGIN_NAME 变量指定的名称,而不是文件名),实际是调用插件中定义的 PLUGIN_SESSION_CREATE 方法。
#mess¶
#message 的简写
#message¶
使用弹出窗体显示消息。
#mess 这是一行测试: 使用弹出窗口显示“这是一行测试”
#mess %line: 使用弹出窗口显示系统变量%line的值
#mods¶
#modules 命令的简写
#modules¶
模块命令,该命令不带参数。可列出本程序当前已加载的所有模块信息.
#num¶
重复执行num次后面的命令。命令也可以代码块进行嵌套使用。如:
#3 get m1b from nang: 从锦囊中取出3次地*木灵
#3 {#3 get m1b from nang;#wa 500;combine gem;#wa 4000};xixi: 执行三次合并地*木灵宝石的操作,中间留够延时等待时间,全部结束后发出xixi。
#plugins¶
插件命令。当不带参数时,列出本程序当前已加载的所有插件信息
当带参数时,列出指定名称插件的具体信息 。使用示例如下。
#plugins: 显示当前所有已加载插件
#plugins chathook: 显示插件chathook的具体信息
#py¶
直接执行后面跟着的python语句。执行语句时,环境为当前上下文环境,此时self代表当前会话。
#py self.info("hello"): 相当于在当前会话中调用session.info("hello")
#py self.enableGroup("group1", False): 相当于调用session.enableGroup("group1", False)
#reload¶
对已加载脚本进行重新加载。
不带参数时,为当前session重新加载所有配置模块(不是重新加载插件)。
带参数时, 若指定名称为模块,则重新加载模块;若指定名称为插件,则重新加载插件。若指定名称既有模块也有插件,则仅重新加载模块(建议不要重名)。
若要重新加载多个模块,可以在参数中使用空格或英文逗号隔开多个模块名称 。
#reload: 重新加载所有已加载模块
#reload mymodule: 重新加载名为mymodule的模块
#reload myplugins: 重新加载名为myplugins的插件
#reload mymodule myplugins: 重新加载名为mymodule的模块和名为myplugins的插件。注意事项
#reload只能重新加载#load方式加载的模块(包括在pymud.cfg中指定的),但不能重新加载import xxx导入的模块。
若加载的模块脚本中有语法错误,#reload貌似无法生效。此时需要退出PyMUD重新打开
若加载时依次加载了不同模块,且模块之间存在依赖关系,那么重新加载时,应按原依赖关系顺序逐个重新加载,否则容易找不到依赖或依赖出错
#replace¶
修改显示内容,将当前行原本显示内容替换为msg显示。不需要增加换行符。
注意:应在触发器的同步处理中使用。多行触发器时,替代只替代最后一行。
#replace %raw - 捕获到此行: 将捕获的当前行信息后面增加标注
#reset¶
复位全部脚本。将复位所有的触发器、命令、未完成的任务,并清空所有触发器、命令、别名、变量。
#save¶
将当前会话中的变量保存到文件,系统变量(%line, %raw, %copy)除外
文件保存在当前目录下,文件名为 {会话名}.mud 。
注意:变量保存使用了python的pickle模块,因此所有变量都应是自省的。 虽然PyMUD的变量支持所有的Python类型,但是仍然建议仅在变量中使用可以序列化的类型。 另外,namedtuple不建议使用,因为加载后在类型匹配比较时会失败,不认为两个相同定义的namedtuple是同一种类型。
#session¶
会话操作命令。#session命令可以创建会话,直接#sessionname可以切换会话和操作会话命令。使用示例如下。
#session {名称} {宿主机} {端口} {编码}: 创建一个远程连接会话,使用指定编码格式连接到远程宿主机的指定端口并保存为 {名称} 。其中,编码可以省略,此时使用Settings.server["default_encoding"]的值,默认为utf8
#session newstart mud.pkuxkx.net 8080 GBK: 使用GBK编码连接到mud.pkuxkx.net的8080端口,并将该会话命名为newstart
#session newstart mud.pkuxkx.net 8081: 使用UTF8编码连接到mud.pkuxkx.net的8081端口,并将该会话命名为newstart
#session pkuxkx.newstart: 通过指定快捷配置创建会话,相当于点击 世界->pkuxkx->newstart 菜单创建会话。若该会话存在,则切换到该会话
#newstart: 将名称为newstart的会话切换为当前会话
#newstart give miui gold: 使名称为newstart的会话执行give miui gold指令,但不切换到该会话注意: 一个PyMUD应用中,不能存在重名的会话。
#show¶
触发器测试命令。类似于zmud的#show命令。
#show 你深深吸了口气,站了起来。: 模拟服务器收到“你深深吸了口气,站了起来。”时的情况进行触发测试
#show %copy: 复制一句话,模拟服务器再次收到复制的这句内容时的情况进行触发器测试注意: #show命令测试触发器时,触发器不会真的响应。
#t+¶
组使能命令。使能给定组名及所有子组名内的的所有对象,包括别名、触发器、命令、定时器、GMCPTrigger等。
#t+ mygroup: 将mygroup组,以及所有其自组(组名类似 mygroup.xxx mygroup.xxx.yyy 为 mygroup 的子组)的所有对象使能状态打开。
#t-¶
组禁用命令。禁用给定组名的所有对象,包括别名、触发器、命令、定时器、GMCPTrigger等。
#t- mygroup: 将mygroup组,以及所有其自组(组名类似 mygroup.xxx mygroup.xxx.yyy 为 mygroup 的子组)的所有对象设置为禁用。
#task¶
列出当前由本session管理的所有task清单。主要用于调试。
使用
session.create_task创建的任务默认会加入此清单。使用session.remove_task可以将任务从清单中移除。系统会定期/不定期从清单中清除已完成或已取消的任务。
#test¶
触发器测试命令。与#show命令的唯一差异在于,使用#test进行测试会导致触发器响应。可以用#test来进行强制触发响应。
#test 你深深吸了口气,站了起来。: 模拟服务器收到“你深深吸了口气,站了起来。”时的情况进行触发测试
#test %copy: 复制一句话,模拟服务器再次收到复制的这句内容时的情况进行触发器测试注意: #test命令测试触发器时,触发器无论是否使能,均会真的响应。
#ti¶
定时器命令 #timer 的简写形式
#timer¶
#timer命令用于操作定时器。#ti是该命令的简写方式。该命令可以不带参数、带一个参数或者两个参数。用法与示例如下。
#ti: 无参数, 打印列出当前会话中所有的定时器清单
#ti my_timer: 一个参数, 列出id为my_timer的Timer对象的详细信息
#ti my_timer on: 两个参数,启用id为my_timer的Timer对象(enabled = True)
#ti my_timer off: 两个参数, 禁用id为my_timer的Timer对象(enabled = False)
#ti my_timer del: 两个参数,删除id为my_timer的Timer对象
#ti 100 {drink jiudai;#wa 200;eat liang}: 两个参数,新增创建一个Timer对象。每隔100s,自动执行一次喝酒袋吃干粮。注意: PyMUD支持同时任意多个定时器。
#tri¶
触发器命令 #trigger 的简写形式
#trigger¶
#trigger命令用于操作触发器。#tri是该命令的简写方式。该命令可以不带参数、带一个参数或者两个参数。用法与示例如下。
#tri: 无参数, 打印列出当前会话中所有的触发器清单
#tri my_tri: 一个参数, 列出id为my_tri的Trigger对象的详细信息
#tri my_tri on: 两个参数,启用id为my_tri的Trigger对象(enabled = True)
#tri my_tri off: 两个参数, 禁用id为my_tri的Trigger对象(enabled = False)
#tri my_tri del: 两个参数,删除id为my_tri的Trigger对象
#tri {^[> ]*段誉脚下一个不稳.+} {get duan}: 两个参数,新增创建一个Trigger对象。当段誉被打倒的时刻把他背起来。
#unload¶
为当前session卸载指定的模块。当要卸载多个模块时,使用空格或英文逗号隔开。 也可以用于在当前会话中临时禁用指定的插件。
卸载模块时,将调用模块IConfig子类的__unload__方法,若存在未使用装饰器实现的自定义对象,请将这些对象的清理工作代码显式放在此方法中 。
#unload mymodule: 卸载名为mymodule的模块(并调用其中Configuration类的unload方法【若有】)
#unload myplugin: 在本会话中禁用名称为myplugin的插件(注意,是插件中由 PLUGIN_NAME 变量指定的名称,而不是文件名),实际是调用插件中定义的 PLUGIN_SESSION_DESTROY 方法。
#var¶
变量操作命令 #variable 的简写
#variable¶
变量操作命令。#var时该命令的简写形式。该命令可以不带参数、带一个参数、两个参数。
#var: 不带参数,列出当前会话中所有的变量清单
#var myvar: 带1个参数,列出当前会话中名称为myvar的变量值
#var myvar 2: 带2个参数,设置名称为myvar的变量值为2(字符串格式)注意: #var设置的变量,其格式都是字符串形式,即#var myvar 2后,myvar = '2',而不是myvar = 2
#wa¶
延时等待命令 #wait 的缩写形式
#wait¶
异步延时等待指定时间,用于多个命令间的延时等待。
drink jiudai;#wa 200;eat liang: 喝酒袋之后,等待200ms再执行吃干粮命令
#warning¶
使用
Session.warning输出信息, 该信息默认带有黄色的标记。
#info¶
使用
Session.info输出信息, 该信息默认带有绿色的标记。
#log¶
#log命令用于操作自带记录器Logger对象的处理。该命令可以不带参数、带一个参数或者多个参数。用法与示例如下。
#log: 无参数, 显示所有记录器的状态情况
#log start [logger-name] [-a|-w|-n] [-r]: 启动一个记录器
- 参数:
- logger-name:
记录器名称。当不指定时,选择名称为会话名称的记录器(会话默认记录器)
- -a|-w|-n:
记录器模式选择。 -a 为添加模式(未指定时默认值),在原记录文件后端添加; -w 为覆写模式,清空原记录文件并重新记录; -n 为新建模式,以名称和当前时间为参数,使用 name.now.log 形式创建新的记录文件
- -r:
指定记录器是否使用 raw 模式
#log stop [logger-name]: 停止一个记录器
- 参数:
- logger-name:
记录器名称。当不指定时,选择名称为会话名称的记录器(会话默认记录器)
#log show [loggerFile]: 显示全部日志记录或指定记录文件
- 参数:
- loggerFile:
要显示的记录文件名称。当不指定时,弹出对话框列出当前目录下所有记录文件