跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • 世界
  • 用户
  • 群组
皮肤
  • 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

帖子

最新 最佳 有争议的

  • 一个极简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
  • 版块
  • 最新
  • 标签
  • 热门
  • 世界
  • 用户
  • 群组