local VersionType = { --不可复用 DoOnly = 1, -- 严格执行 数据结构变更等 -- 复用类型 Add = 2, -- 可叠加执行 活动清除状态等 params需是数组 Override = 3, -- 覆盖执行 只执行最后一个同方法变更 取最后一个的 params } ---------------------版本方法 start --------------------- local function createVersionFunc(vType, func) local v = {vType = vType} setmetatable(v, {__call = function(cv, ...) func( ... ) end}) return v end -- 例子 local clearActivity = createVersionFunc(VersionType.Add ,function(role, params) print("clearActivity") dump(params) end) local changeStructF = createVersionFunc(VersionType.DoOnly ,function(role, params) print("changeStructF" .. " >>> " .. params) end) local awardGift = createVersionFunc(VersionType.Override ,function(role, params) print("awardGift" .. " >>> " .. params) end) local bugFixSuduku = createVersionFunc(VersionType.DoOnly, function(role, params) local sudoku = role:getProperty("sudoku") local phase = sudoku[-1] or 1 local id = 9 if phase == 1 then local curData = (csvdb["guide_sudokuCsv"][phase] or {})[id] if role:checkHangPass(curData.con2) then sudoku.task = sudoku.task or {} sudoku.task[phase] = sudoku.task[phase] or {} if (sudoku.task[phase][id] or 0 == 0) then sudoku.task[phase][id] = 1 role:setProperty("sudoku", sudoku) end end end end) ---------------------版本方法 end ---------------------- -- version 罗列start local versionList = {} -- version 列表 versionList[1] = {bugFixSuduku, {}} -- versionList[2] = {clearActivity, {5, 7}} -- versionList[3] = {changeStructF, "test1"} -- versionList[4] = {changeStructF, "test2"} -- versionList[5] = {awardGift, "test3"} -- versionList[6] = {awardGift, "test4"} --version 罗列end local RoleChangeStruct = {} -- 处理历史遗留问题 以及数据不兼容的问题。可用于版本间清除活动状态,发放补偿, 修改数据结构等 function RoleChangeStruct.bind(Role) function Role:changeStructVersion() local curVersion = self:getProperty("sversion") if not globalCsv.StructVersion or curVersion >= globalCsv.StructVersion then return end local jumpVersion = {} local versionTemp = {} for version = curVersion + 1, globalCsv.StructVersion do local versionData = versionList[version] if versionData then if versionData[1].vType == VersionType.DoOnly then elseif versionData[1].vType == VersionType.Add then if versionTemp[versionData[1]] then jumpVersion[versionTemp[versionData[1]].version] = true versionTemp[versionData[1]].version = version for _, param in ipairs(versionData[2] or {}) do table.insert(versionTemp[versionData[1]].params, param) end else local params = {} for _, param in ipairs(versionData[2] or {}) do table.insert(params, param) end versionTemp[versionData[1]] = {version = version, params = params} end elseif versionData[1].vType == VersionType.Override then if versionTemp[versionData[1]] then jumpVersion[versionTemp[versionData[1]].version] = true versionTemp[versionData[1]].version = version else versionTemp[versionData[1]] = {version = version} end else print(">>>>>>> error changeStruct error version Type >>>>> " .. version) end else jumpVersion[version] = true end end for version = curVersion + 1, globalCsv.StructVersion do if not jumpVersion[version] then local versionData = versionList[version] if versionData[1].vType == VersionType.DoOnly or versionData[1].vType == VersionType.Override then versionData[1](self, versionData[2]) elseif versionData[1].vType == VersionType.Add then versionData[1](self, versionTemp[versionData[1]].params) end end end self:setProperty("sversion", globalCsv.StructVersion) end end return RoleChangeStruct