详细讲解一下在官方原版引擎种添加保存自定义数据的流程以及何时我们会用到自定义数据。
🤖 回答引擎: 热血江湖Lua |
🕒 时间: 2026-05-02 15:25:47 |
👁️ 阅读: 2
在热血江湖引擎中,添加保存自定义数据主要涉及使用系统提供的变量系统。以下是详细的流程和典型应用场景:
### 添加保存自定义数据的流程
#### 1. 选择变量类型
引擎提供多种持久化变量,用于保存不同类型的数据:
* **字符型全局变量 (A系列)**:`A0` - `A999`,所有玩家共享。
* **数字型全局变量 (G系列)**:`G0` - `G999`,支持Int64,所有玩家共享。
* **字符型个人持久变量 (T系列)**:`T0` - `T999`,存放在数据库,角色专属。
* **数字型个人持久变量 (U系列)**:`U0` - `U999`,支持Int64,存放在数据库,角色专属。
* **个人标记 (000-799)**:整数型,只有0和1两种状态,角色专属。
#### 2. 使用接口进行读写操作
* **设置变量**:使用 `sethumvar` 接口。
* 语法:`sethumvar(actor, varName, varValue)`
* 示例:`sethumvar(actor, "N1", 1)` (设置个人数字临时变量),`sethumvar(0, "A1", "AAA")` (设置全局字符变量)。
* **获取变量**:使用 `gethumvar` 接口。
* 示例:`local N1_val = gethumvar(actor, "N1")`
* **操作个人标记**:
* 检查:`check(actor, 001, 1)`
* 设置:`set(actor, 001, 1)`
* 获取常量:`flag(actor, 100)`
#### 3. 自定义临时变量(扩展S/N变量)
如果需要更多临时存储(默认下线不保存),可以扩展使用 `S$` 和 `N$` 开头的变量名,并配合 `savehumvar` 接口在需要时保存。
* 示例:`sethumvar(actor, "N$自定义数字", 123)`,然后 `savehumvar(actor, "N$自定义数字")`。
#### 4. 自定义持久化变量(高级用法)
对于常规的T、U、N、S变量无法满足的、或需要获取离线玩家变量的特殊场景,可以使用**缓存型自定义变量**。
* **声明变量**:使用 `defcustvar` 接口,定义类型、主键、变量名和是否保存。
* **设置变量**:使用 `setcustvar` 接口。
* **获取变量**:使用 `getcustvar` 接口。
* **注意**:此方式变量会加载到缓存,不建议大量使用。常规功能应优先使用T、U、N、S系列变量或 `setint`/`setstr` 等接口。
#### 5. 设置自定义玩家数据(用于前端显示)
可以通过接口设置自定义的JSON或字符串格式数据,供客户端在查看玩家信息时显示。
* **设置JSON数据**:`setplayercustjosndata(actor, key, value)`
* **客户端获取**:通过 `SL:RequestLookPlayer` 查询并监听 `LUA_EVENT_RESPONSE_LOOK_PLAYER_INFO` 事件,在回调中使用 `SL:GetValue("L.M.CUSTOM_DATA", "key")` 获取。
### 何时会用到自定义数据
自定义数据在游戏开发中应用广泛,主要用于记录和追踪各种游戏状态,例如:
1. **任务进度**:记录玩家当前任务步骤、已完成的任务ID。
2. **活动状态**:记录活动参与次数、领取状态、活动积分。
3. **系统功能标记**:标记功能是否首次开启、引导步骤、特殊成就达成。
4. **临时状态存储**:在对话、交易、锻造等过程中,暂存选项、材料信息或中间结果。
5. **扩展属性与业务逻辑**:存储官方属性表 (`AttScore.xls`) 之外的自定义属性值,用于技能伤害计算、被动效果触发条件判断等。
6. **离线数据追踪**:在需要查询或处理离线玩家信息的功能中(如排行榜、邮件附件),使用缓存型自定义变量。
7. **前端信息展示**:通过自定义玩家数据接口,将服务器计算的角色战力、特殊称号、自定义标签等信息展示给其他查看者。
**核心原则**:优先使用引擎提供的T、U、N、S系列变量和`setint`/`setstr`等标准接口满足常规需求。仅在需要获取离线玩家变量等特殊场景下,才考虑使用缓存型自定义变量。
← 返回问答库