SoUI 0.5版本占坑
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

239 lines
5.8 KiB

local table_concat = table.concat
local type = type
local math_type = math.type
local mt = {}
mt.__index = mt
function mt:add(format, ...)
self.lines[#self.lines+1] = format:format(...)
end
local function format_value(value)
local tp = type(value)
if tp == 'string' then
if value:match '[\n\r]' then
return ('[=[\r\n%s]=]'):format(value)
else
return ('%q'):format(value)
end
elseif tp == 'number' then
if math_type(value) == 'integer' then
return value
else
return ('%.4f'):format(value)
end
end
end
local function format_table(tbl)
local new_tbl = {}
for i = 1, #tbl do
new_tbl[i] = format_value(tbl[i])
end
return new_tbl
end
function mt:title(name, data)
if not data[name] then
return nil
end
if self._title then
self:add ''
end
self._title = data[name]
self:add(('[%s]'):format(name))
return data[name]
end
function mt:value(name)
local value = self._title[name]
if type(value) == 'table' then
local strs = format_table(value)
if type(strs[1]) == 'string' and #strs > 6 then
self:add('%s = {\r\n%s\r\n}', name, table_concat(strs, ',\r\n'))
else
self:add('%s = {%s}', name, table_concat(strs, ', '))
end
else
self:add('%s = %s', name, format_value(value))
end
end
function mt:add_head(data)
self:title('地图', data)
self:value '文件版本'
self:value '地图版本'
self:value '编辑器版本'
self:value '地图名称'
self:value '作者名字'
self:value '地图描述'
self:value '推荐玩家'
self:title('镜头', data)
self:value '镜头范围'
self:value '镜头范围扩充'
self:title('地形', data)
self:value '地图宽度'
self:value '地图长度'
self:value '地形类型'
self:title('选项', data)
self:value '使用的游戏数据设置'
self:value '关闭预览图'
self:value '自定义结盟优先权'
self:value '对战地图'
self:value '大型地图'
self:value '迷雾区域显示地形'
self:value '自定义玩家分组'
self:value '自定义队伍'
self:value '自定义科技树'
self:value '自定义技能'
self:value '自定义升级'
self:value '地图菜单标记'
self:value '地形悬崖显示水波'
self:value '地形起伏显示水波'
self:value '未知1'
self:value '未知2'
self:value '未知3'
self:value '未知4'
self:value '未知5'
self:value '未知6'
self:value '未知7'
self:value '未知8'
self:value '未知9'
self:title('载入图', data)
self:value '序号'
self:value '路径'
self:value '文本'
self:value '标题'
self:value '子标题'
self:title('战役', data)
self:value '路径'
self:value '文本'
self:value '标题'
self:value '子标题'
self:title('迷雾', data)
self:value '类型'
self:value 'z轴起点'
self:value 'z轴终点'
self:value '密度'
self:value '颜色'
self:title('环境', data)
self:value '天气'
self:value '音效'
self:value '光照'
self:value '水面颜色'
return data
end
function mt:add_player(data)
self:title('玩家', data)
self:value '玩家数量'
for i = 1, data['玩家']['玩家数量'] do
self:title('玩家'..i, data)
self:value '玩家'
self:value '类型'
self:value '种族'
self:value '修正出生点'
self:value '名字'
self:value '出生点'
self:value '低结盟优先权标记'
self:value '高结盟优先权标记'
end
end
function mt:add_force(data)
self:title('队伍', data)
self:value '队伍数量'
for i = 1, data['队伍']['队伍数量'] do
self:title('队伍'..i, data)
self:value '结盟'
self:value '结盟胜利'
self:value '共享视野'
self:value '共享单位控制'
self:value '共享高级单位设置'
self:value '玩家列表'
self:value '队伍名称'
end
end
function mt:add_upgrade(data)
local i = 1
while self:title('升级'..i, data) do
self:value '玩家列表'
self:value 'ID'
self:value '等级'
self:value '可用性'
i = i + 1
end
end
function mt:add_tech(data)
local i = 1
while self:title('科技'..i, data) do
self:value '玩家列表'
self:value 'ID'
i = i + 1
end
end
function mt:add_randomgroup(data)
local i = 1
while self:title('随机组'..i, data) do
self:value '随机组名称'
self:value '位置类型'
self:add('设置 = {')
for i, set in ipairs(data['随机组'..i]['设置']) do
self:add('%d = {', i)
self:add('几率 = %d,', set['几率'])
self:add('ID = {%s},', table_concat(format_table(set['ID']), ', '))
self:add('},')
end
self:add('}')
i = i + 1
end
end
function mt:add_randomitem(data)
local i = 1
while self:title('物品列表'..i, data) do
self:value '物品列表名称'
self:add('设置 = {')
for i, set in ipairs(data['物品列表'..i]['设置']) do
self:add('%d = {', i)
for _, item in ipairs(set) do
self:add('{几率 = %d, ID = %q},', item['几率'], item['ID'])
end
self:add('},')
end
self:add('}')
i = i + 1
end
end
return function (w2l, data, wts)
local tbl = setmetatable({}, mt)
tbl.lines = {}
tbl.self = w2l
tbl:add_head(data)
tbl:add_player(data)
tbl:add_force(data)
tbl:add_upgrade(data)
tbl:add_tech(data)
tbl:add_randomgroup(data)
tbl:add_randomitem(data)
return table_concat(tbl.lines, '\r\n')
end