北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 46|回复: 0

Pymud基础教程 - 4、自动加载脚本

[复制链接]
发表于 昨天 08:29 PM | 显示全部楼层 |阅读模式
本帖最后由 shanghua 于 2025-4-18 08:29 PM 编辑

饭一口口吃,路一步步走,来来来,这次上点硬菜。

上一节简简单单的介绍了一下脚本加载。但是后期我们会有大量的脚本,甚至是做完某个任务之后,还要自动加载新脚本同时卸载已用完的脚本,这种操作手动加载的话,就满足不了需求了,所以自动加载脚本它来了。
这功能在其他客户端其实是个普普通通的功能,但在这里它是门学问。

1、先把pymud.cfg配置文件里的脚本全部删除,然后只加载1个index.py脚本,如图:


2、在abcdddd根目录下新建 /index.py 文件。

3、新建 /script/jobs/慕容任务.py 目录和文件

目录结构如下图:


4、慕容任务.py的代码如下:
  1. class Configuration:

        def __init__(self, session, *args, **kwargs):

            session.info("==== 慕容任务脚本 ====")

            session.info("====   加载完毕 ====")

            session.info("==== 慕容任务脚本 ====\n")

复制代码

5、编写index.py代码,大家自己看注释吧:
  1. import os

    from pymud import IConfig, Session

    class MyConfig(IConfig):

        def __init__(self, session: Session, *args, **kwargs):

            self.session = session

            # 是否调用 #reload 命令重新加载模块

            reload = kwargs.get("reload", False)

            # 定义一个元组,元组下标从0开始

            mods = list()

            # 加载单独脚本,把它们添加到mods元组中

            mods.append("脚本一")

            mods.append("script.账号一的独立脚本")

            mods.append("script.公共脚本")

            # =============#

            # 加载任务模块 #

            # =============#

            # 固定语法,不要修改

            cur_dir = os.path.dirname(__file__)

            root_dir = os.path.join(cur_dir, "script")

            # jobs目录下的所有py文件

            dir = os.path.join(root_dir, "jobs")

            # 开始遍历jobs目录下的所有py文件

            if os.path.exists(dir):

                for file in os.listdir(dir):

                    if (file.endswith(".py") and (not file.startswith("__"))):

                        # 把遍历找到的文件添加到mods元组中

                        mods.append(f"script.jobs.{file[:-3]}")

            # 加载元组加载到session对象中,供pymud调用

            session.load_module(mods)

            # 在pymud中输入 #reload 命令,重新加载脚本

            if reload:

                session.reload_module(mods)

            self.mods = mods

        # 在pymud中输入#unload命令时触发,卸载脚本

        def __unload__(self):

            self.session.unload_module(self.mods)

复制代码

6、打开pymud,上号:

这样,以后添加到jobs目录下的文件都会自动加载。

那么问题来了:如果再建新一个jobs2目录,那么还需要再添加新的遍历目录的代码么?。
是的,在 “#加载元组”上边添加以下代码:

  1. dir = os.path.join(root_dir, "jobs2")

            if os.path.exists(dir):

                for file in os.listdir(dir):

                    if file.endswith(".py") and (not file.startswith("__")):

                        mods.append(f"pymud.jobs.{file[:-3]}")

    # 加载元组加载到session对象中,供pymud调用

复制代码

这个问题其实可以优化,只写一段遍历就好,请自行研究。

Tips:每次修改完脚本,需要点击pymud里的“会话”->“重新加载脚本配置”。
修改index.py文件,需要重启客户端




教程目录:
Pymud基础教程 - 1、入坑退坑介绍
Pymud基础教程 - 2、随随便便安装
Pymud基础教程 - 3、简单加载脚本
Pymud基础教程 - 5、简简单单触发
Pymud基础教程 - 6、多行颜色触发
Pymud基础教程 - 7、哎呦插件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2025-4-19 11:13 PM , Processed in 0.012447 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表