Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

新函数需求 #37

Open
zhenhua-feng opened this issue Dec 10, 2020 · 4 comments
Open

新函数需求 #37

zhenhua-feng opened this issue Dec 10, 2020 · 4 comments
Labels
good first issue Good for newcomers

Comments

@zhenhua-feng
Copy link

为了支持在Lua下对客户端的扩展操作,需要 gomud 提供以下功能的函数:

  1. 获取 gomud 所在安装目录的绝对路径 - 便于在 Lua 中读写 gomud 目录下的文件
  2. 获取 gomud 所在终端的尺寸(宽高值)- 便于 Lua 输出格式化根据显示窗口大小动态调整
  3. 支持文字和背景颜色设置的 Print()
@dzpao dzpao added the good first issue Good for newcomers label Dec 10, 2020
@dzpao
Copy link
Collaborator

dzpao commented Dec 10, 2020

第三条目前是有的。只是缺乏文档。回头我在整理文档时一并说明。目前可以参考这里:

https://github.com/mudclient/go-mud/blob/master/lua-api/lua.go#L196-L215

另外两条需要评估,其中第二条暂时无法实现,可能要等到 GoMUD 有了内置的脚本语言之后才能够提供接口。目前可以假定为 80x25 或你的实际终端尺寸。

第一条按照我的设想,应当遵循 Unix 规范。也就是说不必将 lua 脚本与 go-mud 可执行文件放在一起,而是在你的脚本所在目录启动 go-mud(推荐将 go-mud 所在目录加入 $PATH 环境变量)。这个道理正如我们不需要把自己的项目代码放到 go/gcc/vc 的安装目录一样。

@zhenzh
Copy link

zhenzh commented Dec 10, 2020

第一条功能的目的不仅是用于配置脚本所在路径,我还设想读写一些游戏角色相关的配置文件。
目前的go-mud目录下结构比较简单,没有太多分类。不过从后续可能的使用方式来看,可能还需要个别目录以使整体结构清晰。
目前我所使用的目录结构如下:

go-mud/
    |--go-mud
    |--profile/ (用于存放不同游戏,不同角色相关的配置)
    |   |--game1/
    |   |   |--config.json (使用 project1 作为 Lua path)
    |   |   |--role1.cfg (机器人配置文件,包含 role1 角色的挂机设置)
    |   |   |--role2.cfg (机器人配置文件,包含 role2 角色的挂机设置)
    |   |--game2/
    |       |--config.json (使用 project2 作为 Lua path)
    |       |--role1.cfg (机器人配置文件,包含 role1 角色的挂机设置)
    |       |--role2.cfg (机器人配置文件,包含 role2 角色的挂机设置)
    |--script/
    |   |--project1/
    |   |   |--main.lua
    |   |   |--<other scripts>
    |   |--project2/
    |       |--main.lua
    |       |--<other scripts>
    |--ext/ (用来放置将来可能需要使用的通用扩展模块,如 socket, luasql 等)

script 是机器人所在目录,会处于长期更新维护状态,改动较为频繁,通常会与 git 库同步
由于 profile 目录存放的都是服务器、角色相关内容,不会频繁改动,且不同人记录的信息也是不同的,不宜作为 script 的子目录同步到 git

虽然 script 和 profile 目录的位置可以独立于 gomud 根目录,但这也给机器人在不同机器间的迁移带来额外的路径配置操作。
所以我将这些 gomud 相关目录都置于 gomud 根目录下,这样只要有一个函数能动态获取到 gomud 目录的绝对路径,就可以快速定位到 gomud 相关任意文件,实现口袋化。
这对脚本迁移会方便许多,可以将这个 gomud 目录随意更换路径,甚至打包复制到其他系统而不需要额外的路径配置和脚本修改。

@dzpao
Copy link
Collaborator

dzpao commented Dec 14, 2020

你直接在你的脚本中获取 cwd(当前工作目录)就可以了,不必询问 GoMUD。GoMUD 只存在于 $PATH 中,保证可用就可以了。

@zhenzh
Copy link

zhenzh commented Dec 15, 2020

功能一和三我都用 Lua 方法绕开了,可以暂时忽略。
功能二我也考虑用 Lua 的方法实现,不过没有找到合适的原生函数。有些第三方的扩展库似乎可以用,不过这需要客户端支持自定义的 Lua 扩展库。这个需求引申出了新的功能需求:
gomud 在启动时能自动搜索并加载指定目录下的库文件。譬如在 go-mud 可执行文件同目录新增个 ext 的目录,gomud默认会扫描该目录下的内容,这样用户就可以将需要使用的扩展文件 *.so *.dll 等直接放在该目录下来实现对第三方库的调用。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

3 participants