|
|
- 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-----------
|