跳到主要内容

Lua(标准运行时)集成指南

模板与生成

REPO_DIR=$PATH_TO_xres_code_generator
mkdir -p "$REPO_DIR/sample/pblua"
cp -rvf "$REPO_DIR/template/common/lua/"*.lua "$REPO_DIR/sample/pblua"
PYTHON_BIN="$(which python3 2>/dev/null || which python)"
"$PYTHON_BIN" "$REPO_DIR/xrescode-gen.py" \
-i "$REPO_DIR/template" \
-p "$REPO_DIR/sample/sample.pb" \
-o "$REPO_DIR/sample/pblua" \
-g "$REPO_DIR/template/DataTableCustomIndex.lua.mako" \
-g "$REPO_DIR/template/DataTableCustomIndex53.lua.mako" \
"$@"

运行示例

package.path = '../../../xresloader/sample/proto_v3/?.lua;' .. package.path
local excel_config_service = require('DataTableService53')
excel_config_service:ReloadTables()

local role_upgrade_cfg = excel_config_service:Get('role_upgrade_cfg')
local data = role_upgrade_cfg:GetByIndex('id_level', 10001, 3)
print(data.ScoreAdd)

可搭配 DataTableService:GetCurrentGroup()GetByGroup() 实现多版本共存。

核心接口

DataTableService53

local DataTableService = {
MaxGroupNumber = 5,
OverrideSameVersion = true,
VersionLoader = function() return "" end,
OnError = nil
}

function DataTableService:Get(loader_name)
return self.__current_group[loader_name]
end

function DataTableService:GetCurrentGroup()
return self.__current_group
end

function DataTableService:GetByGroup(group, loader_name)
return group[loader_name]
end

function DataTableService:ReloadTables()
self.__current_group = self:LoadTables()
end

DataTableSet

function DataTableSet:GetByIndex(index_name, ...)
-- 根据索引定义返回 list 或单条数据
end

function DataTableSet:ContainsIndex(index_name, ...)
-- 判断索引是否存在指定键,并在必要时触发 OnError
end

DataTableCustomIndex.luaDataTableCustomIndex53.lua 会记录每个索引的键字段、排序方式与数据源文件,供 DataTableSet 延迟加载使用。