NatureModel = NatureModel or BaseClass(BaseVo, true) local NatureModel = NatureModel NatureModel.REQUEST_CCMD_EVENT = "NatureModel.REQUEST_CCMD_EVENT" NatureModel.REPLACE_TAG = "NatureModel.REPLACE_TAG" -- 替换标签 NatureModel.UPDATE_CATEGORY_INFO = "NatureModel.UPDATE_CATEGORY_INFO" -- 替换标签 NatureModel.OPEN_UPGRADE_VIEW = "NatureModel.OPEN_UPGRADE_VIEW" -- 打开突破界面 NatureModel.SUCCESS_UPGRADE = "NatureModel.SUCCESS_UPGRADE" -- 成功突破 NatureModel.UPDATE_NATURE_REWARD_VIEW = "NatureModel.UPDATE_NATURE_REWARD_VIEW" -- 更新章节奖励界面 NatureModel.UPDATE_ADD_POINT_VIEW = "NatureModel.UPDATE_ADD_POINT_VIEW" -- 更新加点界面 NatureModel.UPDATE_TAG_VIEW = "NatureModel.UPDATE_ADD_POINT_VIEW" -- 更新标签界面 NatureModel.UPDATE_MAIN_VIEW = "NatureModel.UPDATE_MAIN_VIEW" -- 更新性格主界面 NatureModel.UPDATE_REWARD_RED_DOT = "NatureModel.UPDATE_REWARD_RED_DOT" -- 更新奖励红点 NatureModel.UPDATE_FREE_POINT_RED_DOT = "NatureModel.UPDATE_FREE_POINT_RED_DOT" -- 更新自由点数红点 NatureModel.UPDATE_UPGRADE_RED_DOT = "NatureModel.UPDATE_UPGRADE_RED_DOT" -- 性格突破红点 NatureModel.OPEN_AWARD_RESULT_VIEW = "NatureModel.OPEN_AWARD_RESULT_VIEW" -- 打开跑环奖励结算界面 NatureModel.OPEN_TAG_VIEW = "NatureModel.OPEN_TAG_VIEW" -- 打开tag界面 NatureModel.OPEN_ADD_POINT_VIEW = "NatureModel.OPEN_ADD_POINT_VIEW" -- 打开加点界面 NatureModel.OPEN_PRE_REWARD_VIEW = "NatureModel.OPEN_PRE_REWARD_VIEW" -- 打开奖励预览界面 NatureModel.CATEGORY_NAME = { [1] = "性格感知", [2] = "性格成长", [3] = "性格塑造", } NatureModel.RedDotTpye = { GET_REWRAD = "GET_REWRAD", FREE_POINT = "FREE_POINT", } -- 以下数据是固定的 不会变也不能变 local SPOT_COUNT = 4 -- 单个章节单个分支的节点数 local CATEGORY_COUNT = 3 -- 章节数 local NATURE_TYPE_COUNT = 3 -- 单章节分支数 local UPGRADRE_NEED_VALUE = Config.Naturebranch["1@1@1@1"].need_value -- 每一级升级所需的点数 function NatureModel:__init() NatureModel.Instance = self end function NatureModel:ResetData() self.nature_category_data = {} self.cur_nature_index_data = {} -- 记录每个章节每个分支的最新进度 --self:UpdateAllNatureIndex( ) -- 先初始化一遍 --self:InitNatureIndexData() self.free_value = 0 -- 自由点数 self.total_nature_info = {} self.total_nature_level = 0 -- 当前等级 self.pre_level = 0 -- 上一次的等级 self.pre_overflow_value = 0 -- 上一次的经验 self.overflow_value = 0 -- 当前经验 self.category_reward_state = {} -- 章节奖励领取状态 self.category_red_info = {} -- 记录了某个章节是否应该有红点 self.category_light_times_data = {} self.has_tag_data = {} self.show_tag_data = {} self.point_lv_list = {} -- 记录了星空图的等级分布 self:InitConfig() self:InitPointList() self:InitTaskNatureTextRange( ) end function NatureModel.getInstance() if NatureModel.Instance == nil then NatureModel.Instance = NatureModel.New() end return NatureModel.Instance end -----------------------------配置相关---start------------------------- function NatureModel:InitConfig( ) self.config_Naturekv = {} -- 常量配置 self.config_Naturebranch = {} -- 分支配置 --self.branch_kv_data = {} -- 分支顺序表 (用来快速取出上对应数据的上一条数据) self.nature_total_point_data = {} -- 用来存三个分支性格的分别总点数(常量) self.category_total_point_data = {} -- 用来存三个章节性格的分别总点数(常量) for k,v in pairs(Config.Naturekv) do local key = Trim(v.key) self.config_Naturekv[key] = v end self.point_lv_list = stringtotable(self:GetNatureKv("interval").constant) -- logWarn('=======Msh:NatureModel.lua[85]=======') -- PrintTable(self.point_lv_list) for category=1, 3 do self.config_Naturebranch[category] = {} --self.branch_kv_data[category] = {} self.category_total_point_data[category] = 0 for nature_type=1, 3 do self.nature_total_point_data[nature_type] = self.nature_total_point_data[nature_type] or 0 self.config_Naturebranch[category][nature_type] = {} --self.branch_kv_data[category][nature_type] = {} --local branch_kv_t = self.branch_kv_data[category][nature_type] local index = 1 for spot=1,4 do self.config_Naturebranch[category][nature_type][spot] = {} local temp = self.config_Naturebranch[category][nature_type][spot] local light_times = 1 while true do local key = string.format("%s@%s@%s@%s", category, nature_type, spot, light_times) local data = Config.Naturebranch[key] if not data then break end temp[light_times] = data temp[light_times].reward_list = stringtotable(data.reward) temp[light_times].new_attr_list = stringtotable(data.attr_list) temp[light_times].order = index light_times = light_times + 1 Config.Naturebranch[key].order = index -- 累加性格点数 self.nature_total_point_data[nature_type] = self.nature_total_point_data[nature_type] + data.need_value self.category_total_point_data[category] = self.category_total_point_data[category] + 1 -- 处理顺序表 --branch_kv_t[index] = {index = index, key = key} index = index + 1 end end end end --logWarn('=======Msh:NatureModel.lua[51]=======') -- PrintTable(self.config_Naturebranch) --PrintTable(self.branch_kv_data) --PrintTable(self.nature_total_point_data) end function NatureModel:InitPointList( ) end function NatureModel:InitTaskNatureTextRange( ) local i = 1 self.task_range = {} while true do local kv = self:GetNatureKv( "daily_nature_range" .. i ) if kv then local range = stringtotable(kv.constant) self.task_range[i] = {} self.task_range[i].min = tonumber(range[1]) self.task_range[i].max = tonumber(range[2]) self.task_range[i].des = Trim(kv.remark) i = i + 1 else break end end end function NatureModel:GetBranchConifg( category ) if category then return self.config_Naturebranch[category] or logWarn('=======Msh:NatureModel.lua[57]===error category====', category) else return self.config_Naturebranch end end function NatureModel:GetNatureKv( key ) return self.config_Naturekv[key] or logWarn('=======Msh:NatureModel.lua[64]===error key====', key) end function NatureModel:GetPointLevelByIndex( index ) return self.point_lv_list[index] end -----------------------------配置相关---end------------------------- -----------------------------后端数据---start------------------------- -- 设置拥有的标签列表 function NatureModel:SetHasTagData( data ) for i,v in pairsByKeys(data) do self.has_tag_data[v.nature_type] = v.tips_list local sort_func = function ( a, b ) return a.tip < b.tip end table.sort(self.has_tag_data[v.nature_type], sort_func) end end -- 设置展示用的标签列表 function NatureModel:SetShowTagData( data ) self.show_tag_data = {} for i,v in pairs(data) do self.show_tag_data[v.show_pos] = v end end function NatureModel:GetHasTagData( ) return self.has_tag_data end function NatureModel:GetShowTagData( data ) return self.show_tag_data end -- 性格总览 function NatureModel:SetTotalNatureInfo( data ) self.total_nature_info = data.nature_list self:UpdateNatureLevel(data.level) self:UpdateOverflowValue(data.overflow_value) --self.now_value = data.now_value -- 当前等级性格点数 self:SetFreePoint(data.free_value) end -- 更新等级 以及 上一次的等级 function NatureModel:UpdateNatureLevel( level ) self.pre_level = self.total_nature_level self.total_nature_level = level end -- 更新当前经验以及 上一级的经验 function NatureModel:UpdateOverflowValue( value ) self.pre_overflow_value = self.overflow_value self.overflow_value = value self:UpdateRedDot( NatureModel.RedDotTpye.FREE_POINT ) end function NatureModel:GetCurOverflowValue( ) return self.overflow_value or 0 end function NatureModel:GetPreOverflowValue( ) return self.pre_overflow_value end function NatureModel:GetCurNatureLevel( ) return self.total_nature_level or 0 end -- 上次的等级 function NatureModel:GetPreLevel( ) return self.pre_level or 0 end function NatureModel:GetCurRecycleValue( ) return self.overflow_value or 0 end -- function NatureModel:GetCurNowValue( ) -- return self.now_value or 0 -- end -- 成功突破后 数据更新 function NatureModel:SetAfterUpgradeData( data ) self:UpdateOverflowValue(data.overflow_value) self:UpdateNatureLevel(data.level) end -- 章节数据 function NatureModel:SetCategoryNatureInfo( data ) local temp_list = {} for i,v1 in ipairs(data.branch_list) do temp_list[v1.nature_type] = temp_list[v1.nature_type] or {} for j, v2 in ipairs(v1.spot_list) do temp_list[v1.nature_type][v2.spot] = v2 temp_list[v1.nature_type][v2.spot].nature_type = v1.nature_type end end self.nature_category_data[data.category] = temp_list self.category_reward_state[data.category] = data.category_reward_status self:UpdateTargetNatureIndex(data.category) end -- 更新章节奖励领取状态 function NatureModel:UpdateCategoryRewardState( category, state ) self.category_reward_state[category] = state end -- 获取章节奖励状态 1 已经领取 0 未领取(还需要结合章节进度判断可领与否 ) function NatureModel:GetCategoryRewardState( category ) return self.category_reward_state[category] or 1 --(没收到数据默认已经领取) end -- 更改章节数据的某一条 function NatureModel:SetSingleCategoryNatureInfo( category, nature_type, spot, reward_status ) self.nature_category_data[category][nature_type][spot].reward_status = reward_status end -- 获取章节数据 function NatureModel:GetCategoryNatureInfo( category, nature_type, spot ) if category and nature_type and spot and self.nature_category_data[category] and self.nature_category_data[category][nature_type] and self.nature_category_data[category][nature_type][spot] then return self.nature_category_data[category][nature_type][spot] else local empty_data = { nature_type = nature_type, spot = spot, light_times = 0, reward_status = 0, } return empty_data end end -- 设置经验跑环获得的任务点数(仅作展示用) function NatureModel:SetTaskNatureValue( scmd ) self.task_nature_value = scmd.nature_value self.task_rand_value = scmd.rand_value end function NatureModel:GetTaskNatureValue( ) return self.task_nature_value or 0 end function NatureModel:GetTaskRandValue( ) return self.task_rand_value or 0 end function NatureModel:GetTaskNatureTxtStr( ) local nature_value = self:GetTaskNatureValue() for i,v in pairsByKeys(self.task_range) do if v.min <= nature_value and nature_value <= v.max then return v.des end end return "" end -----------------------------后端数据---end------------------------- -- -- 获得上一个数据的值 -- function NatureModel:GetLastOrderData( category, nature_type , order ) -- --print('Msh:NatureModel.lua[111] data', category, nature_type , order) -- local kv_data = self.branch_kv_data[category][nature_type][order - 1] -- if not kv_data then return end -- return Config.Naturebranch[kv_data.key] -- end -- function NatureModel:GetOrderData( category, nature_type, order ) -- local kv_data = self.branch_kv_data[category][nature_type][order] -- if not kv_data then return end -- return Config.Naturebranch[kv_data.key] -- end -- 求两个属性列表的差值 function NatureModel:GetChangeAttrList( old_list, new_list ) local res = {} for i,v in ipairs(new_list) do for i2,v2 in ipairs(old_list) do if v[1] == v2[1] then table.insert(res, {v[1], v[2] - v2[2]}) break end end end -- logWarn('=======Msh:NatureModel.lua[128]=======') -- PrintTable(res) return res end -- 设置自由点数 function NatureModel:SetFreePoint( count ) self.free_value = count self:UpdateRedDot( NatureModel.RedDotTpye.FREE_POINT ) end function NatureModel:GetFreePoint( ) local is_finish = self:GetTotalHasUseNaturePoint() >= self:GetTotalNaturePoint() -- print('Msh:NatureModel.lua[364] data', self.overflow_value) -- print('Msh:NatureModel.lua[364] data', self.free_value) if is_finish then -- 如果已经完成 自由点将读取溢出点 return self.overflow_value or 0 else return self.free_value or 0 end end -- 有自由点数可以用(用于加点分支) function NatureModel:HasFreePointCanUse( ) -- 总使用情况 local is_finish = self:GetTotalHasUseNaturePoint() >= self:GetTotalNaturePoint() if is_finish then -- 如果已经完成 自由点没用了 return false else return self.free_value > 0 end end -- 获取某一分支的总点数 function NatureModel:GetNatureTypeTotalPoint( nature_type ) return self.nature_total_point_data[nature_type] end -- 获取所有分支总点数 function NatureModel:GetTotalNaturePoint( ) local res = 0 for i,v in ipairs(self.nature_total_point_data) do res = res + v end return res end -- 获取已经使用性格的总点数 function NatureModel:GetTotalHasUseNaturePoint( ) local res = 0 for i,v in pairs(self.total_nature_info) do res = res + v.nature_value end return res end -- 获取已经使用性格的总点数 function NatureModel:GetHasUseNaturePoint( nature_type ) if not self.total_nature_info[nature_type] then return 0 end return self.total_nature_info[nature_type].nature_value end -- 获取章节已经加的点数 function NatureModel:GetHasUsePointInCategory( category ) local res = 0 if not self.nature_category_data[category] then return 0 end -- 判空 for nature_type,v1 in pairs(self.nature_category_data[category]) do for spot, data in pairs(v1) do res = res + data.light_times end end return res end -- 获取章节可以加的总点数 function NatureModel:GetCategoryTotalPoint( category ) return self.category_total_point_data[category] end -- 更新记录每个章节每个分支的最新进度 function NatureModel:UpdateAllNatureIndex( ) local t = self.cur_nature_index_data for category, v1 in pairsByKeys(self.nature_category_data) do self:UpdateTargetNatureIndex(category) end end -- -- 更新某章节的进度 -- function NatureModel:UpdateTargetNatureIndex( category ) -- for i=1, CATEGORY_COUNT do -- for j=1, NATURE_TYPE_COUNT do -- if then -- end -- end -- end -- end -- 更新某章节的进度 利用遍历顺序表得到当前进度 function NatureModel:UpdateTargetNatureIndex( category ) local data = self.nature_category_data[category] -- logWarn('=======Msh:NatureModel.lua[347]=======') -- PrintTable(data) self.cur_nature_index_data[category] = self.cur_nature_index_data[category] or {} for nature_type, v2 in pairsByKeys(data) do self.cur_nature_index_data[category][nature_type] = self.cur_nature_index_data[category][nature_type] or false --local d = self.cur_nature_index_data[category][nature_type] for spot, v3 in pairsByKeys(v2) do local cur_config = self.config_Naturebranch[category][nature_type][spot][v3.light_times] self.category_light_times_data[category] = self.category_light_times_data[category] or 0 self.category_light_times_data[category] = self.category_light_times_data[category] + v3.light_times self.cur_nature_index_data[category][nature_type] = cur_config end end end -- 获取性格系统的总加成属性列表 -- 这种是策划 配表 每个章节的每个分支是独立配属性的 3 * 3 function NatureModel:GetTotalAttr( ) local arr_list = {} -- logWarn('=======Msh:NatureModel.lua[349]=======') -- PrintTable(self.cur_nature_index_data) -- 先把三个章节共9个分支的属性全部累加 for category, v1 in pairsByKeys(self.cur_nature_index_data) do for nature_type, data in pairsByKeys(v1) do if data.attr_list then for i, v in pairs(stringtotable(data.attr_list)) do arr_list[v[1]] = arr_list[v[1]] or 0 arr_list[v[1]] = arr_list[v[1]] + v[2] end end end end -- logWarn('=======Msh:NatureModel.lua[461]=======') -- PrintTable(arr_list) -- PrintTable(self.cur_nature_index_data) -- 再加一波突破的属性 local lv_cfg = Config.Naturelevel[self:GetCurNatureLevel()] for i,v in pairs(stringtotable(lv_cfg.add_attr)) do arr_list[v[1]] = arr_list[v[1]] or 0 arr_list[v[1]] = arr_list[v[1]] + v[2] end -- 最后处理一下格式 local res = {} for k,v in pairsByKeys(arr_list) do table.insert(res, {k, v}) end -- logWarn('=======Msh:NatureModel.lua[474]=======') -- PrintTable(res) return res end -- 这种是策划 配表 每个节点是独立配属性的 3 * 3 * 4 function NatureModel:GetTotalAttr2( ) local arr_list = {} -- 以下代码说明: -- 1-3层遍历 章节-性格分支-节点 -- 4层 遍历要加的属性值 -- 遍历过程中会判断 self.cur_nature_index_data 是否有该数据,如果没有说明还没解锁,就不往下走了 -- 主逻辑在第3层 对比是否为最新节点 小于最新取节点最大LV 等于取最新节点LV 大于不管 local add_arr = function ( arr_data ) for i,v in pairs(arr_data) do arr_list[v[1]] = arr_list[v[1]] or 0 arr_list[v[1]] = arr_list[v[1]] + v[2] end end for category=1, CATEGORY_COUNT do if self.cur_nature_index_data[category] then for nature_type=1, NATURE_TYPE_COUNT do if self.cur_nature_index_data[category][nature_type] then local cur_data = self.cur_nature_index_data[category][nature_type] for spot=1, SPOT_COUNT do local data if cur_data.spot == spot then add_arr( cur_data.new_attr_list ) break else local max_cfg = self:GetSpotMaxLvCfg( category, nature_type, spot ) add_arr( max_cfg.new_attr_list ) end end end end end end local lv_cfg = Config.Naturelevel[self:GetCurNatureLevel()] add_arr(stringtotable(lv_cfg.add_attr)) -- 最后处理一下格式 local res = {} for k,v in pairsByKeys(arr_list) do table.insert(res, {k, v}) end -- logWarn('=======Msh:NatureModel.lua[524]=======') -- PrintTable(res) return res end function NatureModel:GetSpotMaxLvCfg( category, nature_type, spot ) local max_lv = #self.config_Naturebranch[category][nature_type][spot] local cfg = self.config_Naturebranch[category][nature_type][spot][max_lv] return cfg end -- 获取升级消耗的点数 upgrade_level-升几级 cur_light_times-当前的点亮等级 function NatureModel:GetUpgradeCostFreeValue( category, nature_type, spot, cur_light_times, upgrade_level ) local cfg = self.config_Naturebranch[category][nature_type][spot] local cost = 0 for light_times = cur_light_times + 1, cur_light_times + upgrade_level do cost = cost + cfg[light_times].need_value end return cost end --初始化记录点亮进度的index表 function NatureModel:InitNatureIndexData( ) for i=1, CATEGORY_COUNT do self.cur_nature_index_data[i] = {} for j=1, NATURE_TYPE_COUNT do self.cur_nature_index_data[i][j] = {} end end end -- -- 获取某章节的总点亮数 -- function NatureModel:GetCategoryTotalLightTimes( category ) -- local total_times = 0 -- if category and self.cur_nature_index_data[category] then -- for i,v in ipairs(self.cur_nature_index_data[category]) do -- if v.order then -- total_times = total_times + v.order -- end -- end -- else -- return total_times -- end -- return total_times -- end -- 判断章节是否已经解锁 function NatureModel:CategoryIsUnLock( category ) if category == 1 then -- 默认解锁第一章 return true elseif category == 2 or category == 3 then return self:GetHasUsePointInCategory( category - 1 ) >= self:GetNatureKv("unlock").constant or -- 点亮点数大于指定值 self:HasMaxNatureType( category - 1 ) -- 或者点满了一个分支 end end -- 检查指定章节是否有满分支的 function NatureModel:HasMaxNatureType( category ) for i=1, NATURE_TYPE_COUNT do if self.cur_nature_index_data and self.cur_nature_index_data[category] and self.cur_nature_index_data[category][i] then local data = self.cur_nature_index_data[category][i] local cfg = self:GetSpotMaxLvCfg( category, i, SPOT_COUNT ) if data.spot == SPOT_COUNT and cfg.light_times == data.light_times then return true end end end return false end -- 检查当前节点是否已经解锁 function NatureModel:SpotIsUnLock( category, nature_type, spot ) local latest_data --print('Msh:NatureModel.lua[470] data', category, nature_type, spot, self.cur_nature_index_data ) if self.cur_nature_index_data and self.cur_nature_index_data[category] and self.cur_nature_index_data[category][nature_type] then latest_data = self.cur_nature_index_data[category][nature_type] end -- 先章节解锁 if not self:CategoryIsUnLock(category) then return false end -- 节点对比 if not latest_data then -- 没有点亮过这章节这个分支 return spot == 1 -- 如果是第一个节点则可以解锁 else if latest_data.spot >= spot then -- 如果当前节点就是最新节点 或 当前节点在最新节点之前 return true -- 已解锁 elseif latest_data.spot < spot and spot - latest_data.spot == 1 then -- 当前节点在最新节点之后一个节点 local cur_spot_config = self:GetBranchConifg(category)[nature_type][latest_data.spot] if latest_data.light_times == #cur_spot_config then -- 当前最新的节点点亮数已达上限 return true else return false end else return false end end end -- 获取当前需要展示的标签的字符串列表(包含颜色html标签) function NatureModel:GetCurShowTagStrList( ) local str_list = {} for i,v in ipairs(self.show_tag_data) do local cfg = Config.Naturetips[v.nature_type .. "@" .. v.tip] local str = HtmlColorTxt(Trim(cfg.desc), ColorUtil:GetColor(cfg.color)) table.insert(str_list, str) end return str_list end -- 将传入的标签数据 转化为代颜色标签的字符串 function NatureModel:TagToTagStrList( tag_data ) local sort_func = function ( a, b ) return a.show_pos < b.show_pos end table.sort(tag_data, sort_func) local str_list = {} for i,v in ipairs(tag_data) do local cfg = Config.Naturetips[v.nature_type .. "@" .. v.tip] local str = HtmlColorTxt(Trim(cfg.desc), ColorUtil:GetColor(cfg.color)) table.insert(str_list, str) end return str_list end -- 整理别人的数据 function NatureModel:DealTagData( tag_data ) local sort_func = function ( a, b ) return a.show_pos < b.show_pos end table.sort(tag_data, sort_func) local list = {} for i,v in ipairs(tag_data) do local cfg = Config.Naturetips[v.nature_type .. "@" .. v.tip] local str = Trim(cfg.desc) table.insert(list, {str = str, color = cfg.color, nature_type = v.nature_type, tip = v.tip}) end return list end -- 获取最新章节的加点最多的分支的最新加点节点 function NatureModel:GetCurLatestSpot( ) -- 没任何节点时 选中第一章第一分支第一节点 -- logWarn('=======Msh:NatureModel.lua[505]=======') -- PrintTable(self.cur_nature_index_data) local select_category, select_nature_type, select_spot = 1, 1, 1 -- 检测是否满足解锁新章节 for i=2, CATEGORY_COUNT do if self:CategoryIsUnLock( i ) then select_category = i else break end end -- 对比记录中的最新数据 for category,v1 in pairsByKeys(self.cur_nature_index_data) do for nature_type, data in pairsByKeys(v1) do if category > select_category then select_category = category select_nature_type = nature_type select_spot = data.spot elseif category == select_category and select_spot == data.spot then select_category = category select_nature_type = nature_type select_spot = data.spot elseif category == select_category and select_spot < data.spot then select_category = category select_nature_type = nature_type select_spot = data.spot end end end local config_spot_max_lv = #self:GetBranchConifg(select_category)[select_nature_type][select_spot] -- print('Msh:NatureModel.lua[504] data', TableSize(self.cur_nature_index_data), select_category, select_nature_type) --PrintTable(self.cur_nature_index_data) if self.cur_nature_index_data and self.cur_nature_index_data[select_category] and self.cur_nature_index_data[select_category][select_nature_type] then local cur_spot_lv = self.cur_nature_index_data[select_category][select_nature_type].light_times or 0 -- PrintTable(self.cur_nature_index_data[select_category][select_nature_type]) -- print('Msh:NatureModel.lua[505] data', config_spot_max_lv, cur_spot_lv, select_spot) if config_spot_max_lv == cur_spot_lv and select_spot ~= 4 then -- 当前节点满 且 不是最后一个节点 切到后一个节点上 select_spot = select_spot + 1 end end --PrintTable(self.cur_nature_index_data) --print('Msh:NatureModel.lua[561] data', select_category, select_nature_type, select_spot) return select_category, select_nature_type, select_spot end -- 红点 function NatureModel:UpdateRedDot( id ) if id == NatureModel.RedDotTpye.GET_REWRAD then -- 领奖状态刷新 self:Fire(NatureModel.UPDATE_REWARD_RED_DOT) elseif id == NatureModel.RedDotTpye.FREE_POINT then -- 自由点数刷新 self:Fire(NatureModel.UPDATE_FREE_POINT_RED_DOT) elseif id == NatureModel.UPDATE_UPGRADE_RED_DOT then -- 突破状态刷新 self:Fire(NatureModel.UPDATE_UPGRADE_RED_DOT) else self:Fire(NatureModel.UPDATE_FREE_POINT_RED_DOT) self:Fire(NatureModel.UPDATE_REWARD_RED_DOT) self:Fire(NatureModel.UPDATE_UPGRADE_RED_DOT) end NewMainRoleModel:getInstance():Fire(NewMainRoleModel.ANS_UPDATE_RED_DOT) end function NatureModel:GetNatureAllRed( check_new ) if check_new then self:CheckCategoryRed( ) self.red_has_point = self:HasFreePointCanUse() self.red_reward_can_get = self:CheckRewawrdCanGet() self.red_nature_upgrade = self:CanUpgradeNature() end --print('Msh:NatureModel.lua[732] data', self.red_has_point ,self.red_reward_can_get , self.red_nature_upgrade ) -- print('Msh:NatureModel.lua[763] data', self.red_has_point , self.red_reward_can_get, self.red_nature_upgrade) return self.red_has_point or self.red_reward_can_get or self.red_nature_upgrade end -- 检查整个系统是否有奖励可领取 function NatureModel:CheckRewawrdCanGet( ) local has_reward_can_get = false -- 普通节点奖励 for category, v1 in pairs(self.nature_category_data) do for nature_type, v2 in pairs(v1) do for spot, data in pairs(v2) do -- 约定好了 取第一条数据 local tip = self.config_Naturebranch[category][nature_type][spot][1].tip if data.reward_status == 1 and tip ~= 0 then -- 可领奖 且 该节点是有奖励的节点 return true end end end end -- 总的章节奖励 for category, v in pairs(self.category_reward_state) do if self:CanGetCategoryReward( category ) then return true end end return false end -- 检测章节奖励是否可领 function NatureModel:CanGetCategoryReward( category ) --print('Msh:NatureModel.lua[630] data', self:GetHasUsePointInCategory(category), self:GetCategoryTotalPoint(category), self:GetCategoryRewardState(category)) local rate = self:GetHasUsePointInCategory(category) / self:GetCategoryTotalPoint(category) return rate >= 1 and self:GetCategoryRewardState(category) == 0 end --检测是否可以突破 function NatureModel:CanUpgradeNature( ) local cur_over_flow = self:GetCurOverflowValue( ) local cur_lv = self:GetCurNatureLevel( ) local cfg = Config.Naturelevel[cur_lv] if not cfg then return false end local upgrade_need_over_flow = cfg.cost_value return upgrade_need_over_flow <= cur_over_flow end -- 获取指定几个章节的红点数据 function NatureModel:GetCategoryRed( start_index, end_index ) local bool = false for i = start_index, end_index do if self.category_red_info[i] then bool = true end end return bool end -- 检查章节红点(某个章节是否有奖励可领或有节点可以加) function NatureModel:CheckCategoryRed( ) self.category_red_info = {} local has_free_point = self:HasFreePointCanUse() -- 遍历节点 for category = 1, CATEGORY_COUNT do for nature_type = 1, CATEGORY_COUNT do for spot = 1, CATEGORY_COUNT do -- 约定好了 取第一条数据 local cfg = self.config_Naturebranch[category][nature_type][spot] -- 配置 local data = self:GetCategoryNatureInfo( category, nature_type, spot ) -- 后端数据 local is_unlock = self:SpotIsUnLock(category, nature_type, spot) -- 节点是否解锁 -- (可领奖 且 该节点是有奖励的节点) 或 (节点未点满 且 已解锁 且 有点数可用) if (data.reward_status == 1 and cfg[1].tip ~= 0) or (data.light_times < #cfg and is_unlock and has_free_point) then self.category_red_info[category] = true break end end end end -- 总的章节奖励 for category, v in pairs(self.category_reward_state) do if self:CanGetCategoryReward( category ) then self.category_red_info[category] = true break end end end ----------升级特效标志-start--------- function NatureModel:SetEffectFlag( ) self.need_upgrade_effect = true end function NatureModel:InitEffectFlag( ) self.need_upgrade_effect = false end function NatureModel:IsNeedEffect( ) return self.need_upgrade_effect end ----------升级特效标志-end-----------