<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[PyMUD 0.22.2 正式版发布]]></title><description><![CDATA[<h2>更新方式</h2>
<ul>
<li>请使用 pip install --upgrade pymud 安装更新</li>
<li>由于刚发布，国内镜像站点不一定完成镜像，可以通过 -i <a href="https://pypi.org/simple" rel="nofollow ugc">https://pypi.org/simple</a> 指定使用pypi官方源</li>
</ul>
<h2>更新内容</h2>
<h3>0.22.2 (2026-01-11)</h3>
<ul>
<li>功能新增: 可以通过.cfg文件指定 "auto_chars" 来定义启动pymud时自动打开的会话。</li>
<li>问题修复: 修复GMCPTrigger类型enabled属性不生效问题。</li>
<li>问题修复: 原本enabled的定时器，修复了在会话断开重连后不会生效的问题。</li>
<li>问题修复: 修复添加/删除系统时钟回调时，可能会导致的异常问题。</li>
<li>问题修复: 修复在增加系统时钟回调时，如果回调函数代码错误产生异常，会导致系统时钟停顿的问题。</li>
<li>功能优化: 优化了SessionBuffer的实现方式，改为环形缓冲+缓存缓冲双缓冲形式，减少运行中内存分配和清除的次数。</li>
<li>功能新增: #var增加了对嵌套变量的显示支持，可以支持list、dict等嵌套类型的变量，详细请查看论坛信息。</li>
<li>功能新增: 增加了#mem/#memory命令以支持内存监控，增加了启动时的-m参数在启动时直接打开内存监控，详细请#help memory或者查看论坛信息。</li>
<li>其他变更: F1快捷键指向的帮助网站修改为官方网站的文档页面 <a href="https://www.pymud.cn/doc/" rel="nofollow ugc">https://www.pymud.cn/doc/</a></li>
</ul>
<h3>pymud.cfg文件中配置auto_chars参考用法</h3>
<p dir="auto">auto_chars是用来控制pymud在运行时自动加载某些角色的。一种使用的场景是，远程挂机的服务器重启后，自动运行pymud，然后自动登录某几个角色。其中，自动运行pymud需要使用操作系统实现，比如使用 .bashrc 指定。</p>
<p dir="auto">下面一个pymud.cfg文件示例可以自动登录char1, char3两个角色，需要注意两点：</p>
<ul>
<li>
<p dir="auto"><strong>一是自动登录角色需要 pymud.cfg 中配置菜单中包含这些角色</strong>。如下例子在chars中定义了char1,char2,char3三个角色，才可以自动加载char1, char3。</p>
</li>
<li>
<p dir="auto"><strong>二是自动登录autologin必须要配置好，确保可以自动输入用户名密码</strong>。 比如北侠应该配置为 <strong>"{0};{1}"</strong>。</p>
<pre><code class="language-json">{
  "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"]
}
</code></pre>
</li>
</ul>
<h3>内存监控参考用法</h3>
<p dir="auto">要使用内存监控必须先启用监控。可以通过在运行pymud时指定-m参数，即 "pymud -m" (使用uv时可以用 "uv run pymud -m") 在启动时刻即启用内存监控。也可以在会话中使用 #mem on 命令启动监控。只有在启用后的内存变化才会被系统所捕获。在运行时通过 -m 启动可以捕获更为完整的内存初始情况，但由于内存监控具有一定的性能开销，因此要平衡好监控需求和实际运行。<br />
当内存监控启用后，可以通过 #mem 命令查看监控到的当前内存的使用情况，可以使用 #mem diff 命令查看此时与上一次的内存使用的变化情况（仅显示top5）。<br />
内存监控的总数可以按照文件统计，也可以按照代码行位置统计，当未配置时，默认按照文件统计。可以通过 #mem lineno / #mem filename 切换两种统计方式。<br />
当不需要使用内存监控的时候，可以使用 #mem off 来关闭内存监控。</p>
<p dir="auto">以下是几种不同方式下， #mem 和 #mem diff的显示示例：</p>
<pre><code>#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
</code></pre>
<h3>#var对嵌套变量的用法</h3>
<p dir="auto">假设我有一个名为skills的变量，用于保存自己的各项武功，结构是一个dict，内部的每一个key为武功的id，其value为一个tuple，分别表示了当前技能等级、最大技能等级、技能中文名，那么可以使用#var的不同方式及其返回值如下：</p>
<pre><code># 假设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              
</code></pre>
]]></description><link>https://bbs.pymud.cn/topic/16/pymud-0.22.2-正式版发布</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 03:57:55 GMT</lastBuildDate><atom:link href="https://bbs.pymud.cn/topic/16.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 11 Jan 2026 03:41:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to PyMUD 0.22.2 正式版发布 on Thu, 12 Feb 2026 09:41:06 GMT]]></title><description><![CDATA[<p dir="auto">不知道为什么现在又可以了<br />
这个功能挺好~~~~</p>
]]></description><link>https://bbs.pymud.cn/post/108</link><guid isPermaLink="true">https://bbs.pymud.cn/post/108</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Thu, 12 Feb 2026 09:41:06 GMT</pubDate></item><item><title><![CDATA[Reply to PyMUD 0.22.2 正式版发布 on Wed, 11 Feb 2026 00:10:07 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/terry" aria-label="Profile: terry">@<bdi>terry</bdi></a> 贴出来你的pymud.cfg中的session配置和auto_chars配置内容看看，注意隐去你的具体id和pass。</p>
]]></description><link>https://bbs.pymud.cn/post/107</link><guid isPermaLink="true">https://bbs.pymud.cn/post/107</guid><dc:creator><![CDATA[newstart]]></dc:creator><pubDate>Wed, 11 Feb 2026 00:10:07 GMT</pubDate></item><item><title><![CDATA[Reply to PyMUD 0.22.2 正式版发布 on Tue, 10 Feb 2026 14:11:46 GMT]]></title><description><![CDATA[<p dir="auto">我按照示例设置自动登录，不成功呢~~</p>
]]></description><link>https://bbs.pymud.cn/post/106</link><guid isPermaLink="true">https://bbs.pymud.cn/post/106</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Tue, 10 Feb 2026 14:11:46 GMT</pubDate></item><item><title><![CDATA[Reply to PyMUD 0.22.2 正式版发布 on Sun, 11 Jan 2026 04:16:36 GMT]]></title><description><![CDATA[<p dir="auto">0.22.2版已知一个小bug:<br />
使用Python 3.12以下的版本运行时，会报 import Buffer 错误，该错误是由于代码编辑器AI自动添加了一行不需要的引用，而该引用的对象在3.12版才被添加到Python官方库文件中，该引入我没发现，导致出现问题。<br />
临时解决措施为：<br />
手动将pymud库中的extras.py的第3行内容删除，该行为：<br />
from collections.abc import Buffer<br />
下一版本更新将解决该问题。</p>
]]></description><link>https://bbs.pymud.cn/post/46</link><guid isPermaLink="true">https://bbs.pymud.cn/post/46</guid><dc:creator><![CDATA[newstart]]></dc:creator><pubDate>Sun, 11 Jan 2026 04:16:36 GMT</pubDate></item></channel></rss>