[ PROMPT_NODE_25880 ]
state-exp
[ SKILL_DOCUMENTATION ]
状态 / 领域
Lua 状态(在 Garry's Mod 中也称为领域)是 Lua 语言的独立实例,它们只能通过 `net` 和 `file` 库等间接方式相互交互和通信。由于它们是独立的 Lua 状态,除非使用间接通信方法,否则无法在一个状态中检索另一个状态的全局变量。
状态通过引擎包含的 Lua 文件加载其自定义函数和回调。除下文明确列出的文件外,所有其他文件都必须从 Lua 中 Global.include 才能使用。
Garry's Mod 中有 3 个 Lua 状态:
# 客户端
**客户端**状态是代表游戏客户端的 Lua 状态。它接收玩家输入并将其发送到服务器,同时接收有关其他实体和玩家的数据,然后将所有这些信息用于 预测。客户端与服务器的 tickrate 同步模拟实体,但每帧都会执行 Render Order。
**客户端**状态可以通过 net 库和 Global.RunConsoleCommand 与**服务器**状态进行交互和通信。
Lua 代码可以通过检查 `CLIENT` 全局变量是否为 `true` 来检测它是否在**客户端**状态下运行。
**引擎 Lua 文件 - 客户端**
* `lua/includes/init.lua`
* `lua/derma/init.lua`
* `lua/gamemodes/base/gamemode/cl_init.lua` (无论设置何种游戏模式,此文件始终加载)
* `lua/autorun/*.lua`
* `lua/autorun/client/*.lua`
* `lua/postprocess/*.lua`
* `lua/vgui/*.lua`
* `lua/matproxy/*.lua`
* `lua/skins/default.lua`
* `lua/gamemodes//gamemode/cl_init.lua`
* `lua/gamemodes/base/entities/entities/*.lua`
* `lua/gamemodes/base/entities/entities/*/cl_init.lua`
* `lua/gamemodes/base/entities/weapons/*.lua`
* `lua/gamemodes/base/entities/weapons/*/cl_init.lua`
* `lua/entities/*.lua`
* `lua/entities/*/cl_init.lua`
* `lua/weapons/*.lua`
* `lua/weapons/*/cl_init.lua`
* `lua/gamemodes//entities/entities/*.lua`
* `lua/gamemodes//entities/entities/*/cl_init.lua`
* `lua/gamemodes//entities/weapons/*.lua`
* `lua/gamemodes//entities/weapons/*/cl_init.lua`
# 服务器
**服务器**状态是代表游戏服务器的 Lua 状态。它可以...