46 lines
1.3 KiB
Markdown
46 lines
1.3 KiB
Markdown
|
|
# ScriptEngine::ApplyScriptFieldWrites
|
||
|
|
|
||
|
|
**命名空间**: `XCEngine::Scripting`
|
||
|
|
|
||
|
|
**类型**: `method`
|
||
|
|
|
||
|
|
**头文件**: `XCEngine/Scripting/ScriptEngine.h`
|
||
|
|
|
||
|
|
## 签名
|
||
|
|
|
||
|
|
```cpp
|
||
|
|
bool ApplyScriptFieldWrites(
|
||
|
|
ScriptComponent* component,
|
||
|
|
const std::vector<ScriptFieldWriteRequest>& requests,
|
||
|
|
std::vector<ScriptFieldWriteResult>& outResults);
|
||
|
|
```
|
||
|
|
|
||
|
|
## 作用
|
||
|
|
|
||
|
|
批量写脚本字段,并为每个请求返回独立状态。
|
||
|
|
|
||
|
|
## 当前实现流程
|
||
|
|
|
||
|
|
1. 先调用 `TryGetScriptFieldModel()` 建立字段模型。
|
||
|
|
2. 针对每个请求逐项校验:
|
||
|
|
- 字段名不能为空
|
||
|
|
- 值必须和声明类型兼容
|
||
|
|
- 字段必须存在于当前模型
|
||
|
|
- 如果类元数据可用,不能给 `StoredOnly` 遗留字段写值
|
||
|
|
- 类型必须与模型字段类型一致
|
||
|
|
3. 对已声明字段走 `TrySetScriptFieldValue()`,保证活体实例和本地存储同步更新。
|
||
|
|
4. 对“类元数据缺失但本地仍有字段”的场景,允许直接写 `ScriptFieldStorage`。
|
||
|
|
5. 把每条结果写入 `outResults`。
|
||
|
|
|
||
|
|
## 返回值语义
|
||
|
|
|
||
|
|
- 只有所有请求状态都是 `Applied` 时,返回 `true`
|
||
|
|
- 只要出现一项失败或诊断状态,就返回 `false`
|
||
|
|
|
||
|
|
但无论整体布尔值如何,`outResults` 都是逐项结果的权威来源。
|
||
|
|
|
||
|
|
## 相关文档
|
||
|
|
|
||
|
|
- [ClearScriptFieldOverrides](ClearScriptFieldOverrides.md)
|
||
|
|
- [ScriptField](../ScriptField/ScriptField.md)
|