script difference - Mini-World-Dev-Org/Mini-World-Wiki GitHub Wiki
首先,需要明确的是迷你世界的 lua 脚本解释器为 lua51 ,这已在游戏脚本基础中提到。
脚本运行环境与标准的 lua51 环境有很大差异,举个简单直观的例子, _G
表实际不包含任何值,对 _G
的修改和读取行为都是由它的元表定义的,优化脚本环境也要以这个元表为突破口。
以下内容假设你还未优化脚本环境,例如 MiniExtend 会优化脚本环境。
实际上这些内容只是表现,要想深入理解参见 脚本环境 。
-
io
,package
中的所有值 。 -
os.clock()
,os.difftime()
,os.execute()
,os.exit()
,os.getenv()
,os.remove()
,os.rename()
,os.setlocale()
,os.tmpname()
。即os
中除了os.date()
,os.time()
以外的所有函数。
实际上,它们并没有真正的从内存上删除,只是无法通过 _G
索引而已。
-
dofile()
和loadfile()
函数不会获得它们应有的效果,应该是什么都不做的空函数。 -
error()
函数虽然仍会在日志中输出错误信息,但不会抛出错误来终止函数运行,开发者可能不得不使用return error(message);
。 - 调用
loadstring()
函数会弹出漂浮文字,提示开发者使用LoadLuaScript()
,而不会做其它事。 -
print(...)
函数在日志中输出而不是在控制台输出。
且格式化方式与标准print(...)
差异很大,具体格式化方式可自行测试。
使用标签"global"
输出,参见printtag()
函数。
同样,它们也没有被真正替换,只是通过 _G
来索引的结果是更改后的函数。
- 返回
table
的深拷贝。 -
table
:{table}
要深拷贝的函数。 -
return
:{table}
深拷贝后的函数。
- 判断
...
的类型是否等于type
。 -
type
:{string}
判断类型,如"string"
。 -
return
:boolean
如果...
的类型都等于type
,返回false
,否则返回true
。 - 该函数会完全处理含
nil
的...
,即使是末尾的nil
。 - 例如如果
a
的值为nil
,isTypeError("number", 0, a)
返回true
。
- 等价于标准 lua 的
print(...)
函数,注意该函数会输出到控制台,而非日志。 -
...
:{all & ^nil}
输出内容,在遇到nil
时终止。
- 在日志以
tag
为标签输出...
。 -
tag
:{string}
输出标签,如果不是string
类型那么函数行为会令人困惑。 -
...
:{all & ^nil}
输出内容,在遇到nil
时终止。 - 格式化方式与 print() 相同。
- 在日志以
"warning"
为标签输出输出警告信息message
。 -
message
:{string}
输出的警告信息。
优化环境是不建议修改这些添加的函数,因为它们可能被内部调用。
最后更新: 2022/1/2