我写了一个skills命令,意图查看自身或者师父的技能。
现在是第一步,先实现自身的技能查询,并保存到变量中。
你目前所掌握的技能:(十四项)
┏━ 普通知识 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 读书识字 (literate) - 学贯古今 192/ 22225 ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ 基本技能 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 基本弓箭 (archery) - 初窥堂奥 171/ 2729 ┃
┃ 基本轻功 (dodge) - 凌空渡虚 502/ 49830 ┃
┃ 内功心法 (force) - 深不可测 503/ 239011 ┃
┃ 拆招卸力之法 (parry) - 一代宗师 502/ 41364 ┃
┃ 法术 (spells) - 变换莫测 503/ 8800 ┃
┃ 基本剑术 (sword) - 一代宗师 502/ 8384 ┃
┃ 扑击格斗之技 (unarmed) - 一代宗师 502/ 4228 ┃
┠─ 特殊技能 ────────────────────────────┨
┃□百花掌 (baihua-zhang) - 一代宗师 502/ 32618 ┃
┃□枯骨刀 (kugu-blade) - 一代宗师 502/ 21322 ┃
┃□冷月凝香舞 (moondance) - 一代宗师 502/ 43960 ┃
┃□圆月心法 (moonforce) - 一代宗师 503/ 7155 ┃
┃□月宫仙法 (moonshentong) - 一代宗师 502/ 351011 ┃
┃□风回雪舞剑法 (snowsword) - 一代宗师 502/ 29453 ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
这是输入skills命令后的显示结果,我想通过'┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛'来触发命令结束,但这个在整个技能中出现了不止一次,所以我想结合技能的数量判断是否已经结束,即技能的获取数量和掌握技能的总数(十四项),可以判断技能查询结束了,如何把这个条件也加到异步判断中呢?
下面是我暂时写的代码:
from pymud import Command, Trigger, IConfig, DotDict,trigger,async_exception
import traceback
import re, cn2an
class CmdSkills(Command, IConfig):
_help = """
通过命令行查看技能的命令:
正常指令 含义
skills: 查看角色所有技能
skills xxx: 查看npc'xxx'的所有技能
"""
def __init__(self, session, *args, **kwargs):
pattern = r"^(?:skills|sk)\s*(.*)$"
kwargs.setdefault("id", "cmd_skills")
super().__init__(session, patterns = pattern, *args, **kwargs)
self.session.setVariable('skills',[])
self.category = ''
self.skill_count = 0
self.skill_order = 0
def __unload__(self):
super().__unload__()
@trigger(id = "cmd.skiills.start", patterns = r"^你目前所掌握的技能:((.*?)项)", group = "cmd.skills",enabled = False)
def start(self, name, line, wildcards):
self.session.info('Start to parse skill on')
self.skill_count = cn2an.cn2an(wildcards[0],'normal')
self.session.enableGroup(group = "cmd.skills", enabled = True, subgroup = True)
@trigger(id = "cmd.skills.end", patterns = r'┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛', group = "cmd.skills",enabled = False)
def end(self, name, line, wildcards):
self.session.info(f'End to parse skills')
self.session.enableGroup(group = "cmd.skills", enabled = False, subgroup = True)
@trigger(id = "cmd.skills.item", patterns = r'^\s*┃\s*([□ ]?)\s*([^()]+)\s*\(([^)]+)\)\s*-\s*([^ ]+)\s+(\d+)/\s*(\d+)\s*┃\s*$', group = "cmd.skills",enabled = False)
def item(self, name, line, wildcards):
skill = {}
skill['category'] = self.category
skill['enabled'] = '□' in wildcards[0].strip()
skill['cn_name'] = wildcards[1].strip()
skill['en_name'] = wildcards[2].strip()
skill['title'] = wildcards[3].strip()
skill['level'] = int(wildcards[4].strip())
skill['experience'] = int(wildcards[5].strip())
self.session.getVariable('skills').append(skill)
self.skill_order += 1
@trigger(id = "cmd.skills.category", patterns = r'^[┏┠][━─]\s{2}([\u4e00-\u9fa5]+)\s{2}[━─]+.*[┓┨]\s*$', group = "cmd.skills",enabled = False)
def item_end(self, name, line, wildcards):
self.category = wildcards[0].strip()
self.session.info(f'Skill category: {self.category}')
async def execute(self, cmd = "skills", *args, **kwargs):
try:
self.reset()
self.session.tris["cmd.skiills.start"].enabled = True
await self.session.waitfor(cmd, self.session.tris["cmd.skills.end"].triggered())
self.session.enableGroup(group = "cmd.skills", enabled = False, subgroup = True)
return self.SUCCESS
except Exception as e:
self.error(f"异步执行中遇到异常, {e}, 类型为 {type(e)}")
self.error(f"异常追踪为: {traceback.format_exc()}")




用一个工具替代 pip,pip-tools,pipx,poetry,pyenv,twine,virtualenv 等等
️ 比标准pip快10~100倍。
可用于安装和管理 Python 版本。
️ 管理pypi发布的 Python 包。
可以通过curl或者pip安装,而无需安装 Rust 或 Python。
️ 跨平台,支持 macOS、Linux 和 Windows。