四、常见报错信息及解决办法

同时推荐查看Dice!文档的附录:lua报错信息说明。这里只列举在该教程中会出现的报错信息并加以解释。

骰娘运行lua文件G:\Dice - 副本\Dice3306860448\plugin\测试.lua失败:G:\Dice - 副本\Dice3306860448\plugin\测试.lua:3: module 'aaa' not found:
	no field package.preload['aaa']
	no file 'G:\Dice - 鍓湰\Dice3306860448\plugin\aaa.lua'
	no file 'G:\Dice - 鍓湰\Dice3306860448\plugin\aaa\init.lua'
	...
	(下略)

产生原因:①UTF-8编码且存在requireloadLua的脚本,在含非ASCII字符集的路径中运行,见上一条
     ②放在了读取不到的地方,例如plugin\test\aaa.lua。这种情况不一定会产生如上的乱码。
解决办法:①将脚本全部转码或将骰娘转移至ASCII字符集的路径(可以简单理解为英文+数字+键盘上打得出的大部分英文符号)
     ②修改package.path,具体见->RainChain的回帖(非常感谢补充)
 

骰娘调用G:\Dice - 副本\Dice3306860448\plugin\DriftingBottles.lua函数throw_bottle失败!
G:\Dice - 副本\Dice3306860448\plugin\DriftingBottles.lua:103: attempt to index a nil value (global 'file')

产生原因:明明已经给file变量赋值了以getDiceDir()开头的路径,但是UTF-8编码的脚本在含非ASCII字符集的路径中运行,导致file变量未能正常写入,变成了nil
解决办法:如果只存在文件读写可以考虑转码,但更推荐修改骰娘的路径
 

骰娘调用G:\Dice\Dice3306860448\plugin\签到.lua函数ttbd失败!
G:\Dice\Dice3306860448\plugin\json.lua:184: unexpected character '' at line 1 col 1

注:上述文本中,''之间应当有一个符号,为黑色菱形中间带一个问号。因为实际上代表空字符所以可能在复制后消失了
产生原因:可能是让json.lua解码了nil内容
解决办法:重新看一下是不是脚本中的初始化部分没做对,或者在其前面加一个条件判断使其不进行解码
 

骰娘调用G:\Dice\Dice3306860448\plugin\签到.lua函数ttbd失败!
G:\Dice\Dice3306860448\plugin\签到.lua:29: attempt to index a nil value (global 'j')

产生原因:这一行的内容是j.usagi = {}。试图对空变量j使用索引
解决办法:声明j。在出现问题的行前面添加j = {}

五、结语

我可不可以在这里碎碎念点什么,大概行吧反正是我自己的东西我爱怎么写怎么写(?
总之,首先,感谢你一路看到这里。第一次写教程,也不知道写了多少字,感觉比写期末论文还长……能忍受我这么啰嗦的语言看到最后,真的辛苦你了(
至此应该是将能教的都教了,如果有没涉及到的地方,希望能够获得反馈。

另外,感谢タブー術对该教程结构方面的指点,还有Text_Koaku当了一期小白鼠(话说您完全不用论坛是吗)(笑死,地址忘了)

参考资料:
Lua 变量 | 菜鸟教程
Lua 字符串 | 菜鸟教程
Lua 数组 | 菜鸟教程
Lua table(表) | 菜鸟教程
Lua 文件I/O | 菜鸟教程
JSON 教程 | 菜鸟教程
JSON 语法 | 菜鸟教程
JSON 对象 | 菜鸟教程
JSON 数组 | 菜鸟教程
Lua利用cjson读写json - KAME - 博客园
使用Lua CJSON库进行encode与decode操作完成对Json数据转化 - echo111333 - 博客园
在线工具:
JSON在线解析 | 菜鸟工具
Lua在线工具 | 菜鸟工具

——碎碎念呢?
——想了想还是不写了,就祝大家虎年大吉吧。
然后,某人似乎打算把漂流瓶利用JSON重制一遍,期待ta的表现~
但为什么最后做漂流瓶重制版的人换了一个!某人呢某人呢?!

hhhh新冠疫情查询,我还没做完有空这周就继续写

认真读完了,写得很好,甚至比当时学JavaScript时看的教程还详细,泪目了w。
但还是厚着脸皮提两个问题吧(

一、setUserConf函数已经可以支持读写字符串√以及lua表(似乎在更新中看到了),但setUserToday还是只能读写number。

二、关于使用require后出现报错的补充

路径中使用了UTF-8编码的确会导致报错,但还可能是package.path的问题。
现在骰娘plugin文件下有一个test文件夹,内含tutuhaobang.lua(兔 兔 好 棒!!)
现在在插件中使用require "tutuhaobang"将同样会报错。

解决方法为修改package.path
package.path = getDiceDir() .. "/plugin/test/?.lua"
require "tutuhaobang"

注:require "tutuhaobang"改成require "tutuhaobang.lua"将会报错,因为package.path中使用了?占位符。
以及,2.6.1后Dice!优化了require路径,默认读取Diceki/lua/文件夹下的模块了。
这意味着,要读取Dice!自配的json.lua后读取其他文件夹下的模块,先进行require "json"后修改package.path即可。

    RainChain
    收到——这就去添加
    非常感谢呜呜
    仔细一想都能用getUserConf获取字符串了凭什么setUserConf就不行呢我脑子怎么长的(

    然后我也不是计算机专业出身的,只是很喜欢编程而已,但很多时候编程的门槛比想象中的要高了那么亿点点,所以就想着,写个教程总结经验同时也方便你我吧
    顺便光明正大的嫖更多人的脚本

      感恩好东西!!!正好用来检查一下脚本
      想悄咪咪地问下http.post函数要怎么用呢,想调用一些请求方式是post的api【跪地

        aphonic 那个我因为没有需求所以还没开始研究(
        要不你去骰主群之类的地方问问其他大佬

        2 个月 后

        更新了五个脚本收录和一个在技术交流区导致漏了的脚本收录(点头)
        总之感谢提醒,之前真的忘了(

        18 天 后
        4 个月 后

        更新了5个脚本收录
        距离上次更新脚本收录已经过了两百个左右的帖子编号(11xx-13xx),由此可见我有多懒狗

        另外还更新了部分帖子内的细节:

        • 删除了几个跑路的api网址
        • 更新了lolicon api的网址到新版本
        • 更新了备注和一些美化润色
        • 把一楼的格式参考帖的作者从溯洄改为了Hikari Sakurai,首次编写时可能是看错了

        论坛上斜体看得不是很清楚,不过也没什么比加粗的程度稍微轻一些还不影响观感的方式,讲真,如果有下划线的话我一定会选择下划线的

        api这种东西确实还是不稳定啊,但是作为轻量级语言来说利用各大api是最便利的增加自己多样性的办法……但是寻找api这种活就只能靠自己了

        7 天 后

        aphonic

        local json=require('json')
        local para={}
        para[key]=val
        _, data=http.post(url,json.encode(para))
        return data
        说点什么吧...