etc
简介
此pkg用于导入各种类型的配置表
用途:
- 此pkg用于导入各种类型的配置表
- 支持 json, excel, toml
默认设置:
{
// 配置文件生成.dat的同时是否需要生成.lua(为了兼容,默认需要)
"transform_to_lua" : true,
}
.dat的更新机制:
- dat文件的修改时间早于配置文件的修改时间时。
- xlsx 依赖文件的修改时间晚于dat文件的时间时。
- 二进制文件发生改变 无法正确读取到dat文件时,会重写文件。
组件接口
etc.gs
函数原型 | 函数作用 |
---|---|
void init_settings(map init_settings) | 初始化pkg.etc的设置项 |
mixed get(string key) | 获取pkg.etc的设置项 |
void set(string key, mixed value) | 更新pkg.etc的设置项 |
void ignore_table_dbase_merge(string table) | 跳过某个表格导入时对 dbase 字段的合并 |
void set_import_extension_func(string file_extension, function func) | 为指定后缀的文件设置一个自定义的导入函数 |
void set_import_filename_func(string file_name, function func) | 为指定文件名的文件设置一个自定义的导入函数 |
void set_custom_parser(string parser_name, function func) | 设置自定义的字段值解释器 |
void set_map_format_converter(string custom_name, function func) | 设置map类型自定义的格式转化处理 |
void on_table_reload(array tables, function func, string name = nil) | 响应一组配置表的重新加载的事件,当对应的任一配置表发生重新加载时,执行响应函数 |
string on_path_import(string path, function func, string import_id = nil) | 主动载入指定目录里的配置表并且响应任一表载入处理 |
EtcClass.gs
etc的一些工具类
函数原型 | 函数作用 |
---|---|
class_map new_header(map header_dict) | 根据xlsx配置表头部数据创建一个XlsxHeader实例 |
class_map new_importer_by_filename(string filename, mixed load_info = nil) | 根据文件名称创建一个配置表导入器实例 |
class_map new_importer(string type) | 根据配置表导入器名称创建一个配置表导入器实例 |
bool contains_importer(string type) | 判断是否包含 指定名称的导入器 |
array get_importer_list() | 获取所有导入器列表 |
EtcD.gs
游戏配置数据管理,只提供简单的加载方法,不涉及游戏逻辑。
函数原型 | 函数作用 |
---|---|
mixed load_xlsx(string file_name, bool err_when_not_exist = true) | 加载xlsx(已废弃) |
mixed import_cfg(string file_name, bool err_when_not_exist = true, mixed load_info = nil) | 加载xlsx |
mixed load_xlsx_and_merge_dbase(string file_name, bool err_when_not_exist = true) | 加载xlsx然后合并dbase |
mixed eval(mixed field) | 评估一个字段的值,如果需要动态运行获取,要动态执行一下 |
void add_into_reload_xlsx_dict(map reload_dict, int handle_id) | 将xlsx文件列表和对象的id绑定,以便重新加载xlsx文件时能通知对象更新相关配置数据 |
void remove_from_reload_xlsx_dict(int handle_id) | 将指定对象相关的xlsx文件列表解绑,重新加载xlsx文件时将不通知改对象 |
void reload_all_xlsx() | 重新加载和任一对象关联的所有xlsx文件 |
void reload_xlsx(string xlsx_file) | 重新加载指定的xlsx文件 |
void reload_xlsx_list(array xlsx_list) | 重新加载指定的xlsx文件列表 |
map get_reload_xlsx_dict(int handle_id) | 获取和指定对象绑定的xlsx文件列表 |
EtcExtraD.gs
一些额外的操作
- 同一个xlsx多个sheet需要处理(EtcHelperD中只处理单个sheet)
- game层invoke
函数原型 | 函数作用 |
---|---|
map do_extra_op(string file_name, map all_sheets) | 一些约定的额外的操作 |
mixed invoke_op(string file_name, mixed all_sheets) | 一些约定的额外的操作 |
EtcHelperD.gs
生成配置文件简单处理后的二进制格式的文件
函数原型 | 函数作用 |
---|---|
void transform_all_file() | 给定目录下的所有文件生成类似xxx.dat格式的文件 |
bool is_xlsx_file(string file_path) | 判断是否是一个xlsx文件(xlsx文件的处理不同于json和toml) |
bool is_dat_file(string file_path) | 判断是否是一个dat文件 |
mixed get_single_file(string file_name, mixed load_info = nil) | 获取配置文件中有效信息 |
mixed restore_xlsx_value(mixed all_data, mixed load_info = nil) | 根据load_info还原xlsx文件的数据 |
buffer import_json_to_dat(ImporterBase importer) | 把json转化为buffer |
buffer import_json5_to_dat(ImporterBase importer) | 把json5转化为buffer |
buffer import_toml_to_dat(ImporterBase importer) | 把toml转化为buffer |
mixed import_xlsx_to_dat(ImporterBase importer) | 简单解码并生成buffer |
FXlsxLoader.gs
辅助加载xlsx文件的组件 使用步骤:
- 包含本组件
- 重载 FXlsxLoader.init_vars_by_xlsx
- 通过load_xlsx_config加载xlsx,处理过程: a. 加载xlsx获得原始数据xlsx_dict b. 通过parse_func处理原始数据xlsx_dict获得格式化数据result_dict c. 使用格式化数据result_dict初始对象的相关成员变量(需要override init_vars_by_xlsx)
函数原型 | 函数作用 |
---|---|
map load_xlsx_config(array xlsx_list, function parse_func) | 加载xlsx文件并初始化相关成员变量 |
void reload_xlsx_config(mixed list_or_dict) | 重新加载xlsx文件并初 始化相关成员变量 |
ImportD.gs
负责数据导入配置及自定义类型的解析
Updated by huangw2 2016/12/20 1:增加 json 格式 2:支持 excel 格式 3:调整二进制方案,将动态编译变成静态打包,导入时先读取文本文件再读取二进制文件
函数原型 | 函数作用 |
---|---|
mixed import_file(string file_name, string requester = "", mixed load_info = nil) | 将etc数据导入,如果导入失败则返回 nil |
void register_modules(map module_names) | 登记外部可用的模块名,映射到模块文件名 |
ImportEtcD.gs
缓存ETC下文件名到完整路径的映射,方便ImportD使用
函数原型 | 函数作用 |
---|---|
array get_etc_dirs() | 获取etc目录列表 |
void add_ignore_etc_dir(string json_path) | 添加需要的忽略目录(这里实际上不是添加而是替换当前的) |
void refresh_exclue_list() | 刷新忽略文件列表(文件不存在时不生效) |
void import_etc_files(string path) | 添加配置文件 |
void remove_etc_files(string path) | 移除配置文件 |
void refresh_etc_files() | 刷新所有配置文件 |
bool etc_file_exists(string file_name) | ETC目录下是否存在某个文件 |
mixed get_file_path(string file_name) | 获取文件路径 |
map scan_etc_files() | 扫描的所有文件(如果定义了time字段,则读取的时间被此字段所覆盖) |
LocalizationD.gs
本地化文件
函数原型 | 函数作用 |
---|---|
void init(map para) | 初始化本地化语言 |
void set_language(string language) | 设置本地化语言 |
void load(string filename) | 加载本地化文件 |
string find_text(string id) | 获取本地化字段的值 |
LuaAdapterD.gs
负责客户端配置信息的生成,生成lua配置文件
函数原型 | 函数作用 |
---|---|
void transform_all_dat_file(string path = "OUTPUT_PATH") | 生成所有配置表的lua文件 |
void transform_single_file(string file_name, string path = "OUTPUT_PATH") | 生成单个dat文件对应的lua文件 |
void dfs(mixed data, string depth, string path) | 按照正常的书写格式生成lua文件 |
类
EtcSettings
etc配置属性词典
成员变量
变量名 | 类型 | 初始值 | 须初始化 | 描述 |
---|---|---|---|---|
extra_scan_etc_func | function | nil | 可选 | 自定义的额外的配置表获取方法 |
table_loader_dict | map | nil | 可选 | 自定义的加载配置表的方法 |
ignore_dbase_merge_list | array | nil | 可选 | 忽略导入时合并dbase字段的表格列表 |
transform_to_lua | bool | true | 可选 | 是否生成lua文件(提供给需要.lua文件的客户端使用) |
transform_to_dat | bool | true | 可选 | 是否生成dat文件(.dat里是已处理的数据) |
import_extension | map | nil | 可选 | 指定后缀的文件 对应的导入函数词典 key: 文件后缀 value: 自定义的导入函数 |
import_filename | map | nil | 可选 | 指定文件对应的导入函数词典 key: 文件名 value: 自定义的导入函数 |
custom_parser | map | nil | 可选 | 自定义的字段值解释器 key: 字段名 value: 自定义的字段值解释器 |
map_format_converter | map | nil | 可选 | map类型自定义的格式转化处理 |
import_etc_dir | map | nil | 可选 | 自定义的文件导入路径 |
ignore_dif_config_path | string | nil | 可选 | 自定义的文件忽略列表配置文件 |
scan_etc_dfs_depth | mixed | nil | 可选 | 扫描深度 |
strict_mode | bool | false | 可选 | 严格模式 此模式下: 1.配置文件只有.dat文件时,配置表不载入 |
ignore_xlsx_even_dat_exist | bool | false | 可选 | xlsx文件存在dat文件时,忽略xlsx文件 |
成员方法
函数原型 | 函数作用 |
---|
NormalEtcTable
继承自 EtcTable
普通配置表
成员变量
变量名 | 类型 | 初始值 | 须初始化 | 描述 |
---|---|---|---|---|
data | mixed | nil | 可选 | 配置表数据 |
成员方法
函数原型 | 函数作用 |
---|---|
NormalEtcTable new_by_table_name(string table, bool do_not_merge_dbase) | 根据配置表名称创建配置表实例 |
NormalEtcTable new_by_file_name(string filename, bool do_not_merge_dbase) | 根据配置文件名称创建配置表实例 |
void reload() | 重新加载配置表 |
mixed get_data() | 获取所有数据 |
mixed get_value(mixed key_or_index) | 获取指定键或索引的值 |
string get_file_path() | 获取文件目录 |
bool is_dirty() | 配置表是否变更 |
EtcTable
配置表基础类
成员变量
变量名 | 类型 | 初始值 | 须初始化 | 描述 |
---|---|---|---|---|
table | string | nil | 可选 | 配置表名称 |
ext | string | nil | 可选 | 配置表后缀 |
filename | string | nil | 可选 | 配置文件名称 |
do_not_merge_dbase | bool | false | 可选 | 导入时不合并'dbase'数据 |
成员方法
函数原型 | 函数作用 |
---|---|
mixed get_data() | 获取所有数据 |
mixed get_value(mixed key_or_index) | 获取指定键或索引的值 |
string get_file_path() | 获取文件路径 |
bool is_dirty() | 判断表是否变更 |
ImporterBase
配置表数据导入器的基础类
成员变量
变量名 | 类型 | 初始值 | 须初始化 | 描述 |
---|---|---|---|---|
filename | string | nil |