谢谢各位大佬。
我在skill item的触发中计数,当计数和总技能数相等的时候开启end触发,算是绕过去了。
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
def __unload__(self):
super().__unload__()
@trigger(id = "cmd.skills.start", patterns = r"^你目前所掌握的技能:((.*?)项)", group = "cmd.skills",enabled = False)
def start(self, name, line, wildcards):
self.skills = []
self.skill_order = 0
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.skills.append(skill)
self.skill_order += 1
if self.skill_order == self.skill_count:
self.session.tris["cmd.skills.end"].enabled = True
@trigger(id = "cmd.skills.category", patterns = r'^[┏┠][━─]\s{2}([\u4e00-\u9fa5]+)\s{2}[━─]+.*[┓┨]\s*$', group = "cmd.skills",enabled = False)
def category(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.skills.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)
self.session.setVariable('skills',self.skills)
return self.SUCCESS
except Exception as e:
self.error(f"异步执行中遇到异常, {e}, 类型为 {type(e)}")
self.error(f"异常追踪为: {traceback.format_exc()}")