sealdice/sealdice-core

[Bug]: 重载js插件后,用先前保存的ctx调用vars.intGet(ctx,key)[0]返回的数值都是0

Closed this issue · 6 comments

在提问之前...

  • 我理解 Issue 是用于反馈和解决问题的,而非吐槽评论区,将尽可能提供更多信息帮助问题解决
  • 我填写了简短且清晰明确的标题,以便开发者在翻阅 issue 列表时能快速确定大致问题。而不是“一个建议”、“卡住了”等
  • 我已查看master branch或最新测试版的更新内容,并未提及该 bug 已被修复的情况
  • 已有issue中并没有看见其他人与我反馈相同的问题

问题描述

重载js插件后,用先前保存的ctx调用vars.intGet(ctx,key)[0]返回的数值永远都是0

如何复现

1.在插件获取一个用户的ctx并存入数据库
2.重载插件
3.调用seal.vars.intGet(ctx,key),全都是0

你期望发生的

js重载后仍能正常读取

实际上发生的

所有读取到的都变成0

日志文件

日志正常

截图

插件截图
image

以下是我用插件调用intGet的截图
54f50762707c233e71bcff07c36f52e6

海豹核心版本

1.4.6

操作系统

windows

帐号类型

QQ

使用协议

内置拉格兰

附加内容

No response

ctx怎么存进的数据库,以及你怎么取出来的,没看到这部分的代码

取出来就是如上图所示用for循环遍历
下面是存入的代码
image
image

获取数据库是这样写的
image

考虑到 MsgContext 里指针乱飞的情况,我觉得有必要怀疑正确写法是不是真的存在。即,将 MsgContext 对象保存下来并在 goja 重启后使用是否是一个有可行性的设计。

那么是否可以,只通过QQ号和角色卡名来读取属性,绕开这个问题

通过 JSON.parse 反序列化出来的并不是 ctx 对象,关于在 JS 环境内创建新的 ctx 对象请参考 #169