PyMUD 0.22.2 正式版发布
-
更新方式
- 请使用 pip install --upgrade pymud 安装更新
- 由于刚发布,国内镜像站点不一定完成镜像,可以通过 -i https://pypi.org/simple 指定使用pypi官方源
更新内容
0.22.2 (2026-01-11)
- 功能新增: 可以通过.cfg文件指定 "auto_chars" 来定义启动pymud时自动打开的会话。
- 问题修复: 修复GMCPTrigger类型enabled属性不生效问题。
- 问题修复: 原本enabled的定时器,修复了在会话断开重连后不会生效的问题。
- 问题修复: 修复添加/删除系统时钟回调时,可能会导致的异常问题。
- 问题修复: 修复在增加系统时钟回调时,如果回调函数代码错误产生异常,会导致系统时钟停顿的问题。
- 功能优化: 优化了SessionBuffer的实现方式,改为环形缓冲+缓存缓冲双缓冲形式,减少运行中内存分配和清除的次数。
- 功能新增: #var增加了对嵌套变量的显示支持,可以支持list、dict等嵌套类型的变量,详细请查看论坛信息。
- 功能新增: 增加了#mem/#memory命令以支持内存监控,增加了启动时的-m参数在启动时直接打开内存监控,详细请#help memory或者查看论坛信息。
- 其他变更: F1快捷键指向的帮助网站修改为官方网站的文档页面 https://www.pymud.cn/doc/
pymud.cfg文件中配置auto_chars参考用法
auto_chars是用来控制pymud在运行时自动加载某些角色的。一种使用的场景是,远程挂机的服务器重启后,自动运行pymud,然后自动登录某几个角色。其中,自动运行pymud需要使用操作系统实现,比如使用 .bashrc 指定。
下面一个pymud.cfg文件示例可以自动登录char1, char3两个角色,需要注意两点:
-
一是自动登录角色需要 pymud.cfg 中配置菜单中包含这些角色。如下例子在chars中定义了char1,char2,char3三个角色,才可以自动加载char1, char3。
-
二是自动登录autologin必须要配置好,确保可以自动输入用户名密码。 比如北侠应该配置为 "{0};{1}"。
{ "sessions": { "pkuxkx": { "host": "mud.pkuxkx.net", "port": "8081", "encoding": "utf8", "autologin": "{0};{1}", "default_script": ["my_entry"], "chars": { "char1", ["myid1", "mypass1"], "char2", ["myid2", "mypass2"], "char3", ["myid3", "mypass3"] } } }, "auto_chars": ["pkuxkx.char1", "pkuxkx.char3"] }
内存监控参考用法
要使用内存监控必须先启用监控。可以通过在运行pymud时指定-m参数,即 "pymud -m" (使用uv时可以用 "uv run pymud -m") 在启动时刻即启用内存监控。也可以在会话中使用 #mem on 命令启动监控。只有在启用后的内存变化才会被系统所捕获。在运行时通过 -m 启动可以捕获更为完整的内存初始情况,但由于内存监控具有一定的性能开销,因此要平衡好监控需求和实际运行。
当内存监控启用后,可以通过 #mem 命令查看监控到的当前内存的使用情况,可以使用 #mem diff 命令查看此时与上一次的内存使用的变化情况(仅显示top5)。
内存监控的总数可以按照文件统计,也可以按照代码行位置统计,当未配置时,默认按照文件统计。可以通过 #mem lineno / #mem filename 切换两种统计方式。
当不需要使用内存监控的时候,可以使用 #mem off 来关闭内存监控。以下是几种不同方式下, #mem 和 #mem diff的显示示例:
#mem命令按filename的显示,从左到右分别为,内存分配块数,占用的内存,文件是属于库(lib)还是自己的脚本(app),文件名的相对路径。 〔MEMORY〕内存占用最大的5处为: 〔MEMORY〕 207 0.2 MiB [lib] layout/mouse_handlers.py 〔MEMORY〕 3453 0.2 MiB [lib] layout/controls.py 〔MEMORY〕 496 0.2 MiB [lib] layout/screen.py 〔MEMORY〕 1558 0.1 MiB [lib] layout/containers.py 〔MEMORY〕 1553 0.1 MiB [lib] pymud/extras.py #mem diff命令按filename的显示,从左到右的定义与#mem一致,括号中的内容是表示与上一次相比的变化量。 〔MEMORY〕与上次内存占用对比,变化最大的5处为: 〔MEMORY〕 3233( +1632) 1.4MiB( +0.6MiB) [lib] layout/screen.py 〔MEMORY〕 8361( +3497) 0.7MiB( +0.3MiB) [lib] pymud/extras.py 〔MEMORY〕 4735( +1560) 0.6MiB( +0.2MiB) [lib] layout/containers.py 〔MEMORY〕 1130( +753) 0.1MiB( +0.0MiB) [lib] widgets/menus.py 〔MEMORY〕 667( +535) 0.1MiB( +0.0MiB) [app] script/map/map.py 执行#mem lineno之后,#mem按lineno显示内容,从左到右的定义与前面一致,最末尾增加了行号 〔MEMORY〕内存占用最大的5处为: 〔MEMORY〕 361 1.6 MiB [lib] layout/screen.py, Line 305 〔MEMORY〕 2 1.3 MiB [lib] prompt_toolkit/cache.py, Line 101 〔MEMORY〕 67 0.3 MiB [lib] layout/containers.py, Line 2045 〔MEMORY〕 1501 0.2 MiB [lib] pymud/extras.py, Line 827 〔MEMORY〕 3865 0.2 MiB [lib] pymud/extras.py, Line 209 #mem diff命令按lineno显示 〔MEMORY〕与上次内存占用对比,变化最大的5处为: 〔MEMORY〕 872( +597) 3.8MiB( +2.6MiB) [lib] layout/screen.py, Line 305 〔MEMORY〕 2( +1) 1.3MiB( +1.3MiB) [lib] prompt_toolkit/cache.py, Line 101 〔MEMORY〕 15167(+11210) 1.0MiB( +0.8MiB) [lib] layout/containers.py, Line 2075 〔MEMORY〕 140( +96) 0.6MiB( +0.4MiB) [lib] layout/containers.py, Line 2045 〔MEMORY〕 3410( +1890) 0.3MiB( +0.2MiB) [lib] layout/screen.py, Line 167#var对嵌套变量的用法
假设我有一个名为skills的变量,用于保存自己的各项武功,结构是一个dict,内部的每一个key为武功的id,其value为一个tuple,分别表示了当前技能等级、最大技能等级、技能中文名,那么可以使用#var的不同方式及其返回值如下:
# 假设skills值为如下的复合对象,#var skills会直接会显示该值 'skills' = { divination : (19.0, 1093.0, '占卜之术'), evocation : (14.0, 1093.0, '招魂术'), dodge : (1087.0, 1093.0, '基本轻功'), finger : (1087.0, 1093.0, '基本指法'), force : (981.01, 1093.0, '基本内功'), parry : (1087.0, 1093.0, '基本招架'), sword : (1061.0, 1077.0, '基本剑法'), unarmed : (1087.0, 1093.0, '基本拳脚'), beiming-shengong: (980.74, 1093.0, '北冥神功'), kurong-changong : (980.0, 1093.0, '枯荣禅功'), longxiang-hubu : (1087.0, 1093.0, '龙骧虎步'), } # 如果使用 #var skills[force],或者 #var skills["force"] (有无引号不影响),则显示为 skills[force] = (981.01, 1093.0, '基本内功') # 还可以继续嵌套到下一级,比如仅取force的当前等级,可以 #var skills[force][0],则显示为 'skills[force][0]' = 981.01 -
N newstart 在 中固定了该主题
-
N newstart 取消固定该主题于