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

T

terry

@terry
关于
帖子
43
主题
9
分享
0
群组
0
粉丝
0
关注
1

帖子

最新 最佳 有争议的

  • 初探pymud的自动地图功能
    T terry

    以下为过程中的一些心得:
    1 . 探索地图和使用已经被证明是正确的地图是完全两回事,探索过程中进入任何房间即使所有信息一致,也得证明它是新房间还是已经探明的房间。
    2. 房间之间的连接不全都是互逆的,有些出口是单向的。
    3. 房间允许看向四周获得信息,这些信息对辅助定位非常重要。把这些可以获得的信息整合到一起,用特定顺序组织后转换为哈希码,作为该房间的身份签名(signature),这个签名有不同的等级,可分为房间名、房间描述+出口、周围房间名+出口、周围房间名+描述+出口,房间签名用于比对两个房间是不是同一个房间。
    4. 有些房间并非一成不变的,它可以自己随机变化,比如:骰子房,房间描述随着骰子的变化在不停的变化;有些房间描述会因为玩家的互动而变化。
    5. 有些地图中的结构完全对称,即有些房间不但自身签名完全一致而且它周围房间的签名也完全一致,要探索很远才能确定它是哪一个。
    6. 有些房间进入需要特定条件或被npc拦截,不过这个基于pymud的命令很好解决。
    7. 迷宫内的房间和常规房间完全不同的逻辑,要提前提取迷宫入口特征,把对应的入口识别出来在代码中封住。
    8. 深度优先排重需要角色可以回到备选房间,如果附近有单向出口,导致回溯失败会从而测绘出错。
    9. 探索过程中对于可通过的连接,必须保证100%可以执行成功,这是探索地图的基石。
    10. 如果对游戏了解,知道某些房间是独一无二的,即一旦进入就知道自己的位置,需要提前写进列表中,作为探索地图的锚点。
    11. 原则上只相信通过移动而获得的连接,但为提高效率,把那些移动后彼此通过look可以确认互逆方向的房间签名匹配的连接直接写进数据库,而无需实际移动

    PyMUD讨论区

  • 初探pymud的自动地图功能
    T terry

    5c08ce7c-7c17-4fea-9570-fc82eecfee39-image.png

    PyMUD讨论区

  • 初探pymud的自动地图功能
    T terry

    从开始着手自动画地图,到今天基本上完成,足足用了6周,可最开始竟然企图一周完成
    总体来说,之前的框图的算法是对的,但由于对西游记mud本身的不了解走了很多弯路
    现在告一段落,也该总结一下了

    PyMUD讨论区

  • PyMUD 0.22.2 正式版发布
    T terry

    不知道为什么现在又可以了
    这个功能挺好~~~~

    公告与通知

  • PyMUD 0.22.2 正式版发布
    T terry

    我按照示例设置自动登录,不成功呢~~

    公告与通知

  • 初探pymud的自动地图功能
    T terry

    实践证明这个方法无效,无法完成那种两个房间的连接不是互逆的情况

    PyMUD讨论区

  • 初探pymud的自动地图功能
    T terry

    探索地图流程图

    e19719b6-7084-49d4-ae0a-850f2d0c9515-image.png

    PyMUD讨论区

  • 如何实现session断线重连的功能呢
    T terry

    多谢群主大人~~~~~~

    PyMUD讨论区

  • 如何实现session断线重连的功能呢
    T terry

    如题,麻烦各位大佬解答

    PyMUD讨论区

  • 一个极简COMMAND的演示代码
    T terry

    command还可以返回值,所以可以把一个大任务分解成若干具有返回值的command,根据返回值判断下一步操作

    PyMUD讨论区

  • 中文MUD都有什么站点
    T terry

    清华西游记 xyj.thu.cn:6666

    MUD游戏讨论区

  • 初探pymud的自动地图功能
    T terry

    @newstart 就是这意思,基于pymud实现自动地图功能

    PyMUD讨论区

  • 初探pymud的自动地图功能
    T terry

    抛砖引玉,我现在是不会啊,等大佬现身说法

    PyMUD讨论区

  • cmdScore.py数据问题
    T terry

    @shanghua 你不能插入代码块么?别总贴图

    PyMUD讨论区

  • cmdScore.py数据问题
    T terry

    正则你得自己优化吧。我不玩xkx,我不不知道是否匹配

    PyMUD讨论区

  • cmdScore.py加载报错
    T terry

    @newstart 现在的逻辑不是也应该这样么?
    后边的那些命令我还没写好,所以暂时让我注释掉了

    PyMUD讨论区

  • cmdScore.py加载报错
    T terry

    @shanghua
    打score命令,然后在命令行输入#var(或者#var char_profile)查看变量

    PyMUD讨论区

  • cmdScore.py加载报错
    T terry

    @shanghua 你的IDE对于不能识别的关键字不会提示么?

    PyMUD讨论区

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

    谢谢各位大佬。
    我在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()}")
    
    PyMUD讨论区

  • cmdScore.py加载报错
    T terry

    跟我之前遇到的问题一样的,你需要先定义‘char_profile’变量

            self.session.setVariable("char_profile",DotDict())
            self.session.vars["char_profile"].update(self.profile) 
    
    PyMUD讨论区
  • 登录

  • 没有帐号? 注册

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