跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • 世界
  • 用户
  • 群组
皮肤
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Cerulean)
  • 不使用皮肤
折叠
品牌标识

PyMUD官方论坛

H

hhyzz

@hhyzz
关于
帖子
3
主题
1
分享
0
群组
0
粉丝
0
关注
0

帖子

最新 最佳 有争议的

  • 关于commands的问题,如何在异步执行的await中添加其他条件?
    H hhyzz

    我仍然建议你用第一种方案,如果会没有特殊技能,至少会有基本技能的,用正则写法
    r"┠─ (特殊|基本)技能 ────────────────────────────┨"

    PyMUD讨论区

  • 关于commands的问题,如何在异步执行的await中添加其他条件?
    H hhyzz

    有两个思路,你参考下:
    1.execute方法中整组使能之后关闭cmd.skills.end触发

    self.session.enableGroup(group = "cmd.skills", enabled = False, subgroup = True)
    self.session.tris["cmd.skiills.stop"].enabled = False
    

    增加一个新的触发"┠─ 特殊技能 ────────────────────────────┨",
    用这个触发来使能"cmd.skiills.stop"触发,这样就避免了被前序的字符串误触发了。

    2.第二个思路就比较不推荐了,只是作为一个参考也许其他地方能用的上。
    你目前所掌握的技能:(十四项)此处将"十四"转阿拉伯数字,存变量"_num"
    后面写一个while循环等待技能捕获到足够数量,

    
    self.session.vars.skills = []
    while len(self.session.vars.skills)<_num:
        #实际使用中,应加入超时机制,避免因为睡觉等无法接收服务器消息的原因造成无限循环
        await asyncio.sleep(0.1)
        self.session.enableGroup(group = "cmd.skills", enabled = False, subgroup = True)  
        return self.SUCCESS
    
    PyMUD讨论区

  • 一个极简COMMAND的演示代码
    H hhyzz
    from pymud import Session, Command, exception, IConfig, Trigger
    
    class cha_rbz(Command, IConfig):
        def __init__(self, session, *args, **kwargs):
            kwargs.setdefault("id", "cmd_id")
            kwargs.setdefault("group", "cmd")
            super().__init__(session, r"^id( here)?$", *args, **kwargs)
    
            self._items = []
            options = {"enabled": False, "group": "cmd.id", "keepEval": True}
            self._tris = {
                "id_here"     : Trigger(self.session, r"^[> ]*你身上携带物品的别称如下|^[> ]*在这个房间中, 生物及物品的\(英文\)名称如下.*", onSuccess = self.id_here, **options),
                "id_item"     : Trigger(self.session, r"^[> ]*([\u4e00-\u9fa5 ]+)\s+ = (.+)$", onSuccess = self.id_item, **options),
                "stop"        : Trigger(self.session, r"^[> ]*系统回馈:id_is_over = 1", onSuccess = self.stop, **options),
            }
            #[╰└]+  [╯┘]+
        @exception
        async def execute(self, cmd, *args, **kwargs):
            self.reset()
            self._items = []
            #指定的触发器使能,也可以是GROUP使能
            self._tris["id_here"].enabled = True
            self._tris["stop"].enabled = True
            self.session.writeline(f"{cmd}")
            #此处插入一个等待,仅为演示脚本的等待,实际使用中无需等待
            await asyncio.sleep(1)
            self.session.writeline(f"response id_is_over 1")
            #等待触发被触发,可以使用任何可等待的对象
            await self._tris["stop"].triggered()
            #command的返回值
            return self._items
    
        def id_here(self, name, line, wildcards):
            #没有在CMD开始就使能整组触发器,防止因为网络卡顿的原因造成误触发
            self._tris["id_item"].enabled = True
        def id_item(self, name, line, wildcards):
            data = list(wildcards)
            data[0] = data[0].strip()
            data[1] = data[1].split(", ")
    
            if not data[0] == self.session.vars.Status["name"]:
                #避免捕获自己的信息,Status为自定义字典
                self._items.append(data)
        def __unload__(self):
            self.session.delObjects(self._tris)
            super().__unload__()
        def reset(self):
            super().reset()
            self.session.enableGroup("cmd.id", False, False, [Trigger])
    
        def start(self, name, line, wildcards):
            self.session.enableGroup("cmd.id", True, False, [Trigger])
    
        def stop(self, name=None, line=None, wildcards=None):
            #cmd流程结束,关闭触发组
            self.session.enableGroup("cmd.id", False, False, [Trigger])
    
    PyMUD讨论区
  • 登录

  • 没有帐号? 注册

  • 登录或注册以进行搜索。
Powered by NodeBB Contributors
  • 第一个帖子
    最后一个帖子
0
  • 版块
  • 最新
  • 标签
  • 热门
  • 世界
  • 用户
  • 群组