FosterModel = FosterModel or BaseClass(BaseVo, true) local FosterModel = FosterModel function FosterModel:__init() FosterModel.Instance = self self:Reset() end function FosterModel:Reset() self:InitFosterOffSetCfg() if self.clock_bless_id then GlobalTimerQuest:CancelQuest(self.clock_bless_id) self.clock_bless_id = nil end self.basic_info = {} self.kernel_num_info = {} --核心已使用数量 self.view_tab_info = {} self.skill_show_conf_list = {} self.max_grade_star_info = {} self.skill_conf_list = {} self.equip_dic = {}--保存的装备目录 self:ResetSwallowSelect() ------------------------- --红点部分 self.mask_upgrad_red = {}--升阶 self.mask_dressupgrade_red = {}--装备升级 self.red_canupgrade = {} self.red_cankernel = {} self.red_cankernel_all = {} self.red_canskill = {} self.red_candressnew = {} self.red_candressup = {} self.red_canupequip = {} self.red_skin = {} self.pet_fight_skill = false --AI娘战斗技能(大招) self.pet_fight_skill_state = false --AI娘战斗技能(大招)激活状态 self.tip_bless_list = {}--祝福值提示倒计时 self.foster_assist_flag_data = {} -- 进阶助战状态数据 self.foster_assist_red = {} -- 进阶助战红点 self.foster_first_advance = false end function FosterModel:GetInstance() if FosterModel.Instance == nil then FosterModel.Instance = FosterModel.New() end return FosterModel.Instance end function FosterModel.getInstance() if FosterModel.Instance == nil then FosterModel.Instance = FosterModel.New() end return FosterModel.Instance end --进阶位置偏移配置,需要初始化 function FosterModel:InitFosterOffSetCfg( ) for k,v in pairs(FosterConst.ModelShowConfig) do for kk,vv in pairs(v) do if (not vv.has_init) and vv.copy_model_list then vv.has_init = true for a,b in pairs(vv.copy_model_list) do v[b] = vv end end end end end function FosterModel:GetCanUseEquipByType( type_id ) if not type_id then return end return type_id == FosterConst.ModuleId.FHorse or type_id == FosterConst.ModuleId.FJarvis end --基础系统信息 function FosterModel:GetBasicInfo( type_id ) if type_id then return self.basic_info[type_id] else return self.basic_info end end function FosterModel:SetBasicInfo( type_id,value ) ------------------------- --给装备加多个类型方便使用 if value and value.grade_equips then for k,v in pairs(value.grade_equips) do for a,b in pairs(v.equips) do b.type = value.type b.grade = v.grade self.equip_dic[b.goods_id] = b end end end --核心已使用数量 self.kernel_num_info[type_id] = {} if value and value.core_list then for k,v in pairs(value.core_list) do self.kernel_num_info[type_id][v.core_type] = v.core_num end end ------------------------- self.basic_info[type_id] = value end -- 获取核心已使用数量 function FosterModel:GetKernelUseNum(type_id, id) if not type_id or not id then return end return self.kernel_num_info[type_id][id] end function FosterModel:RefreshEquipList( type_id,grade,data ) if not type_id or not grade or not data then return end for a,b in pairs(data) do b.type = type_id b.grade = grade self.equip_dic[b.goods_id] = b end ------------------------- local basic = self:GetBasicInfo( type_id ) local have_chang = false if basic and basic.grade_equips then for k,v in pairs(basic.grade_equips) do if v.grade == grade then v.equips = data ------------------------- have_chang = true end end if not have_chang then table.insert( basic.grade_equips, {grade = grade,equips = data} ) end end end --穿戴操作数据保存,写在界面里跳的太复杂了,取出来用 function FosterModel:SetDressAction( _type_id,_grade,_pos ) self.action_data = {type_id = _type_id,grade = _grade,pos = _pos} end function FosterModel:GetDressAction( ) return self.action_data end --获取当前星阶 function FosterModel:GetGradeStarByType( type_id ) local grade,star = 0,0 if type_id and self:GetBasicInfo( type_id ) then grade = self:GetBasicInfo( type_id ).grade star = self:GetBasicInfo( type_id ).star end return grade,star end --检查是否强化升级 function FosterModel:StrengthenCheckIsUpgrade( check_data ) local star_change = false local grade_change = false if check_data then local old = self:GetBasicInfo(check_data.type) if old then if old.star ~= check_data.star then star_change = true end if old.grade ~= check_data.grade then grade_change = true end end end return star_change,grade_change end --刷新强化数据 function FosterModel:RefreshStrengthenExp( data ) if data and self:GetBasicInfo( data.type ) then self:GetBasicInfo( data.type ).exp = self:GetBasicInfo( data.type ).exp + data.exp return true end end --更新使用核心信息(弃用) function FosterModel:RefreshKernelUseInfo( type_id, opty, total ) if type_id and opty and total and self:GetBasicInfo(type_id) then if opty == 0 then self:GetBasicInfo(type_id).lowcore = total elseif opty == 1 then self:GetBasicInfo(type_id).highcore = total end -- 成功修改返回true,否则返回false通知获取服务端数据 return true end end --更新技能信息 function FosterModel:RefreshSkillInfo( type_id,data ) if type_id and data and self:GetBasicInfo( type_id ) then local need_add = true for k,v in pairs(self:GetBasicInfo( type_id ).skills) do if v.pos == data.pos then v.lv = data.lv v.skill = data.skill need_add = false break end end if need_add then table.insert( self:GetBasicInfo( type_id ).skills, {lv = data.lv, pos = data.pos, skill = data.skill} ) end -- 成功修改返回true,否则返回false通知获取服务端数据 return true end end --更新幻化信息 function FosterModel:RefreshSkinUseInfo( type_id, display ) if type_id and display and self:GetBasicInfo( type_id ) then self:GetBasicInfo( type_id ).display = display -- 成功修改返回true,否则返回false通知获取服务端数据 return true end end -- 进化协助状态数据 14614 function FosterModel:SetFosterSuitAssistFlagData(vo) if vo then self.foster_assist_flag_data[vo.type] = {} for k, v in ipairs(vo.grade_list) do self.foster_assist_flag_data[vo.type][v.grade] = v.state end -- 检查红点 self:CanActivateFosterAssist(true, vo.type) end end function FosterModel:GetFosterSuitAssistFlagData(type, grade) if type then if grade then return self.foster_assist_flag_data[type] and self.foster_assist_flag_data[type][grade] or 0 else return self.foster_assist_flag_data[type] or {} end end return self.foster_assist_flag_data end -- 单个协助数据更新 function FosterModel:UpdateFosterSuitAssistFlagData(vo) if vo then self.foster_assist_flag_data[vo.type] = self.foster_assist_flag_data[vo.type] or {} self.foster_assist_flag_data[vo.type][vo.grade] = vo.state end end --通过类型获得页面左侧tab数据 function FosterModel:GetBaseConfList( type_id ) local function get_call( type_id ) local data = {} -- 分为强进阶弱进阶 if self:GetIsStrongFoster(type_id) then for k,v in pairs(Config.Foster) do if v.type == type_id and v.star == 0 then table.insert( data, v ) end end local function sort_call( a,b ) return a.grade < b.grade end table.sort( data, sort_call ) else for k,v in pairs(Config.Fostersuit) do if v.type == type_id then table.insert( data, v ) end end local function sort_call( a,b ) return a.grade < b.grade end table.sort( data, sort_call ) end return data end self.view_tab_info[type_id] = self.view_tab_info[type_id] or get_call( type_id ) return self.view_tab_info[type_id] end --获取单条信息 function FosterModel:GetBaseConfOne( type_id, grade, star, level) if not type_id then return end if not grade or not star then local basic = self:GetBasicInfo( type_id ) if basic then grade = grade or basic.grade star = star or basic.star end end if not level then local basic = self:GetBasicInfo( type_id ) if basic then level = level or basic.level end end grade = grade or 1 star = star or 0 level = level or 1 if not self:GetIsStrongFoster(type_id) then return Config.Fostersub[type_id .. "@" .. level] else return Config.Foster[type_id .. "@" .. grade .. "@" .. star] end end function FosterModel:GetIsMax( type_id ) if type_id then local cur_grade,cur_star = self:GetGradeStarByType(type_id) local max_grade,max_star = self:GetMaxGradeStar(type_id) if (max_grade < cur_grade) or (max_grade == cur_grade and max_star <= cur_star) then return true else return false end else return true end end function FosterModel:GetSubIsMax(type_id) if type_id then local basic = self:GetBasicInfo(type_id) return basic and basic.lv >= self:GetSubMax(type_id) else return true end end function FosterModel:GetSubMax(type_id) self.max_lv = self.max_lv or {} local max_lv_type = 1 if type_id then if not self.max_lv[type_id] then for key, value in pairs(Config.Fostersub) do if value.type == type_id then max_lv_type = max_lv_type > value.lv and max_lv_type or value.lv end end self.max_lv[type_id] = max_lv_type end return self.max_lv[type_id] end end --获取最大星阶 function FosterModel:GetMaxGradeStar( type_id ) local function get_call( type_id ) local grade,star = 0,0 for k,v in pairs(Config.Foster) do if v.type == type_id then grade = grade > v.grade and grade or v.grade star = star > v.star and star or v.star end end return {grade = grade,star = star} end self.max_grade_star_info[type_id] = self.max_grade_star_info[type_id] or get_call(type_id) return self.max_grade_star_info[type_id].grade,self.max_grade_star_info[type_id].star end function FosterModel:GetCurMaxStar( type_id,grade ) local star = 0 for k,v in pairs(Config.Foster) do if v.type == type_id and v.grade == grade then star = star > v.star and star or v.star end end return star end --核心使用上限 function FosterModel:GetKernelMax( type_id,kind,grade ) if not type_id or not kind or not grade then return 0 end if not self:GetIsStrongFoster(type_id) then local max = 0 for k,v in pairs(Config.Fostercore) do if v.type == type_id and v.kind == kind then local data = stringtotable(v.max) local lv = grade for a,b in pairs(data) do if b[1] < grade then max = max > b[2] and max or b[2] end end break end end return max else for k,v in pairs(Config.Fostercore) do if v.type == type_id and v.kind == kind then local data = stringtotable(v.max) for a,b in pairs(data) do if b[1] == grade then return b[2] end end break end end end return 0 end function FosterModel:GetKernelNextMaxLv( type_id,kind,grade ) if not type_id or not kind or not grade then return 0 end local cur_max_kernel = self:GetKernelMax( type_id,kind,grade ) local max_grade = 99999 for k,v in pairs(Config.Fostercore) do if v.type == type_id and v.kind == kind then local data = stringtotable(v.max) for a,b in pairs(data) do if b[2] > cur_max_kernel and b[1] > grade then max_grade = max_grade > b[1] and b[1] or max_grade end end break end end return max_grade end --使用核心最低阶数 function FosterModel:GetUseKernelMinGrade( type_id,kind ) if not type_id or not kind then return 1 end local conf = Config.Fostercore[type_id .. "@" .. kind] if not conf then return 1 end local min_grade,min_num = 999,99999 for k,v in pairs(stringtotable(conf.max)) do min_grade = min_grade < v[1] and min_grade or v[1] min_num = min_num < v[2] and min_num or v[2] end return min_grade, min_num end --获得技能列表(仅用于展示技能条目的) function FosterModel:GetSkillShowConf( type_id ) local function get_call( type_id ) local data = {} for k,v in pairs(Config.Fosterskill) do if v.type == type_id and v.lv == 1 then table.insert( data, v ) end end local function sort_call( a,b ) return a.pos < b.pos end table.sort( data, sort_call ) return data end self.skill_show_conf_list[type_id] = self.skill_show_conf_list[type_id] or get_call( type_id ) return self.skill_show_conf_list[type_id] end --获得某类的总技能列表 function FosterModel:GetSkillConf( type_id ) local function get_call( type_id ) local data = {} for k,v in pairs(Config.Fosterskill) do if v.type == type_id then table.insert( data, v ) end end return data end self.skill_conf_list[type_id] = self.skill_conf_list[type_id] or get_call( type_id ) return self.skill_conf_list[type_id] end --获得技能配置 function FosterModel:GetSkillConfOne( type_id,lv,pos,skill_id ) lv = lv or 1 lv = lv > 0 and lv or 1 if not type_id then return end if not pos and not skill_id then return end for k,v in pairs(self:GetSkillConf(type_id)) do if v.lv == lv and v.pos == pos and v.skillid == skill_id then return v end end end --获得技能状态 function FosterModel:GetSkillStatus( type_id,pos,skill_id ) local status = "lock" local back_lv = false if (not type_id) or (not pos and not skill_id) then status = "lock" else local basic = self:GetBasicInfo( type_id ) if not basic then status = "lock" else for k,v in pairs(basic.skills) do if v.pos == pos and skill_id == v.skill then back_lv = v.lv break end end if back_lv == 0 then status = "lock" elseif back_lv and back_lv > 0 then status = "active" end end end return status, back_lv or 0 end --获取AI娘的战斗技能(第四个位置),每次放技能都要获取,所以在获取一次之后就缓存下来,等进阶之后技能变化了再更新 function FosterModel:GetPetFightSkill( ) local function on_check_skill( ) for k,v in pairs(Config.Fosterskill) do if v.type == FosterConst.ModuleId.FJarvis and v.pos == 4 then return v.skillid end end end self.pet_fight_skill = self.pet_fight_skill or on_check_skill() self.pet_fight_skill_state = self.pet_fight_skill_state or self:GetSkillStatus(FosterConst.ModuleId.FJarvis, 4, self.pet_fight_skill) if self.pet_fight_skill_state == "active" and self.pet_fight_skill then return self.pet_fight_skill end end --重置AI娘战斗技能激活状态 function FosterModel:ResetPetFightSkillState( ) self.pet_fight_skill_state = false end --获取进阶消耗材料 function FosterModel:GetGradeCost( type_id, grade, star ) if not type_id then return end if not grade or not star then local basic = self:GetBasicInfo( type_id ) if basic then grade = basic.grade star = basic.star end end local conf = self:GetBaseConfOne( type_id, grade, star ) if conf then return stringtotable(conf.cost) end end function FosterModel:GetKernelConf( type_id, opty ) if not type_id then return end local data = {} if opty then for k,v in pairs(Config.Fostercore) do if v.type == type_id and v.kind == opty then return v end end else for k,v in pairs(Config.Fostercore) do if v.type == type_id then table.insert( data, v ) end end end local function sort_call( a,b ) return a.kind < b.kind end table.sort( data, sort_call ) return data end -- core_info = {kind ,num } 获取核心增加的属性 function FosterModel:GetKernelAttrAdd( type_id, core_info) if not type_id then return {} end local data = self:GetBasicInfo(type_id) if not data then return {} end local add_per = 0 local add_extra = 0--局部全属性加成 local attr = {} local conf_list = self:GetKernelConf( type_id) conf_list = self:GetKernelConf( type_id) for key, value in pairs(conf_list) do local cur_use_num = self:GetKernelUseNum(type_id, value.kind) if core_info and core_info.kind == value.kind then cur_use_num = core_info.num end local attr_temp = stringtotable(value.ext) for k,v in pairs(attr_temp) do add_extra = 0 if v[1] == 68 then --局部全属性加成 add_extra = v[2] else attr[v[1]] = attr[v[1]] or 0 attr[v[1]] = attr[v[1]] + cur_use_num * v[2] end add_per = add_per + cur_use_num * (add_extra / 10000) end end return attr, add_per end function FosterModel:GetGradeTempAttr( type_id ) if not type_id or not self:GetIsStrongFoster(type_id) then return {} end local data = self:GetBasicInfo(type_id) if not data then return {} end if data.click == 0 then return {} end local result = {} local temp_attr_conf = stringtotable(self:GetBaseConfOne( type_id ).tem_attrs) for k,v in pairs(temp_attr_conf) do result[tonumber(v[1])] = tonumber(v[2]) * data.click end return result end --获取当前阶数下可升的最大技能等级 function FosterModel:GetSkillMaxInCurGrade( type_id, pos ) if not type_id or not pos then return 0 end local lv = 0 local data = self:GetBasicInfo(type_id) if self:GetIsStrongFoster(type_id) then if data then local grade = data.grade for k,v in pairs(Config.Fosterskill) do if v.type == type_id and v.pos == pos and v.limit <= grade then lv = lv > v.lv and lv or v.lv end end end else if data then local basic_lv = data.lv for k,v in pairs(Config.Fosterskill) do if v.type == type_id and v.pos == pos and v.limit <= basic_lv then lv = lv > v.lv and lv or v.lv end end end end return lv end function FosterModel:GetSkillMaxLevel( type_id, pos ) local lv = 0 for k,v in pairs(Config.Fosterskill) do if v.type == type_id and v.pos == pos then lv = lv > v.lv and lv or v.lv end end return lv end function FosterModel:GetGradeIsActive( type_id,grade ) if not type_id or not grade then return false end local basic = self:GetBasicInfo( type_id ) if not basic then return false end if self:GetIsStrongFoster(type_id) then return basic.grade >= grade else return basic.lv >= grade end end -- function FosterModel:GetMaxShowSuit( type_id,grade ) -- local max = 1 -- for key, value in pairs(Config.Fostersuit) do -- if value.type == type_id and value.grade < grade then -- max = max > value.grade and max or value.grade -- end -- end -- return max -- end function FosterModel:LvToGrade(lv) if lv then return math.ceil((lv - 0.5) / 20) else return 1 end end --获取已穿戴的装备 function FosterModel:GetEquipInfo( type_id,grade,pos ) if not type_id or not grade or not pos then return end local base_info = self:GetBasicInfo(type_id) if not base_info then return end for k,v in pairs(base_info.grade_equips) do if v.grade == grade then for a,b in pairs(v.equips) do if b.pos == pos then return b end end return end end end function FosterModel:GetEquipConf( type_id ) if not type_id then return end return Config.Fosterequip[type_id] end function FosterModel:GetEquipMoreConf( type_id,pos,color,lv ) if not type_id or not pos or not color or not lv then return end return Config.Fosterequiplv[ type_id .. "@" ..pos .. "@" ..color .. "@" ..lv ] end --通过背包信息获取穿戴的装备 function FosterModel:GetDressInfoByBagInfo( bag_info ) if not bag_info then return end if bag_info.goods_id then return self.equip_dic[bag_info.goods_id] end end --通过穿戴的装备获取背包的信息 function FosterModel:GetBagInfoByDressInfo( dress_info ) if not dress_info then return end if dress_info.goods_id then return GoodsModel:getInstance():GetFosterEquipDic()[dress_info.goods_id] end end --通过背包的信息获取装备等级 function FosterModel:GetLevelByBagInfo( bag_info ) if not bag_info then return 0 end for k,v in pairs(bag_info.other_data or {}) do if v.type == 1 then return tonumber(v.info or 0) end end return 0 end --通过背包的信息获取装备经验 function FosterModel:GetExpByBagInfo( bag_info ) if not bag_info then return 0 end for k,v in pairs(bag_info.other_data or {}) do if v.type == 2 then return tonumber(v.info or 0) end end return 0 end function FosterModel:GetSwallowSelect( ) return self.swallow_select or {} end function FosterModel:ResetSwallowSelect( ) self.swallow_select = {} end function FosterModel:GetSwallowStatus( goods_id ) goods_id = goods_id or 0 return self.swallow_select[goods_id] end function FosterModel:SetSwallowSelect( goods_id , status ) if not goods_id then return end if status then self.swallow_select[goods_id] = true else self.swallow_select[goods_id] = nil end end ------------------------- --检查红点屏蔽的 function FosterModel:CheckMaskUpgradeRed( type_id ) do return end -- 现在清除阶段也有红点了,这个不需要了 if not type_id then return end local basic = self:GetBasicInfo( type_id ) if basic then local is_clear = self:GetBaseConfOne( type_id, basic.grade, basic.star ).clear == 1 if is_clear and self:CanUpgrade( false, type_id ) then self.mask_upgrad_red[type_id] = true self:CanUpgrade( true, type_id ) self:Fire(FosterConst.RedDotRefresh) end FosterController.Instance:CheckRedDot() end end --升阶红点 function FosterModel:CanUpgrade( check_new, type_id ) if not check_new then return self.red_canupgrade[type_id] end self.red_canupgrade[type_id] = false if self:GetIsStrongFoster(type_id) then --强进阶 if not self:GetIsMax(type_id) then ------------------------- local cost = self:GetGradeCost(type_id) if TableSize(cost) ~= 0 then local basic = self:GetBasicInfo( type_id ) local is_clear = false if basic then is_clear = basic.isclear == 1 end local have = GoodsModel:getInstance():GetTypeGoodsNum(cost[1][2]) if not is_clear then if tonumber(cost[1][3]) <= have then self.red_canupgrade[type_id] = true end else -- 如果材料满足可以一次进阶成功就给红点 local conf = self:GetBaseConfOne(type_id) local cur_exp = basic.exp local need_exp = conf.max - cur_exp need_exp = need_exp < 0 and 0 or need_exp -- 祝福可能获得的经验值,按配置(9~11)的最小值来推测,算9点,这边写死懒得读配置了 local exp_per_upgrade = 9 local need_num = math.ceil(need_exp / exp_per_upgrade) * tonumber(cost[1][3]) if need_num <= have then self.red_canupgrade[type_id] = true end end end end else --弱进阶 if not self:GetSubIsMax(type_id) then for i=1,3 do local sub_mat = self:GetFosterSubMaterialByType(type_id) local cost_data = stringtotable(sub_mat[FosterConst.SubMatStr[i]]) local have = GoodsModel:getInstance():GetTypeGoodsNum(cost_data[1][1]) local cost_num = 1 if have >= cost_num then self.red_canupgrade[type_id] = true break end end end end return self.red_canupgrade[type_id] end --核心使用红点 function FosterModel:CanKernel( check_new, type_id, id ) if not type_id then return false end self.red_cankernel[type_id] = self.red_cankernel[type_id] or {} if not check_new then if id then return self.red_cankernel[type_id][id] else return self.red_cankernel_all[type_id] end end ------------------------- self.red_cankernel[type_id] = {} self.red_cankernel_all[type_id] = false if type_id then local basic_info = self:GetBasicInfo(type_id) local core_conf = self:GetKernelConf(type_id) if basic_info and core_conf then local grade = basic_info.grade --弱进阶参数为等级 if not self:GetIsStrongFoster(type_id) then grade = basic_info.lv == 0 and 1 or basic_info.lv end -- print("Lizhijian:FosterModel [start:886] ") -- PrintTable(core_conf) -- print("Lizhijian:FosterModel [end:886] ") for key, value in pairs(core_conf) do self.red_cankernel[type_id][value.kind] = false local kernel_cost_id = stringtotable(value.cost)[1][2] local kernel_max = self:GetKernelMax( type_id, value.kind, grade ) local use_num = self:GetKernelUseNum(type_id, value.kind) if use_num and use_num < kernel_max and GoodsModel:getInstance():GetTypeGoodsNum(kernel_cost_id) > 0 then self.red_cankernel[type_id][value.kind] = true self.red_cankernel_all[type_id] = true end end end end if id then return self.red_cankernel[type_id][id] else return self.red_cankernel_all[type_id] end end function FosterModel:CanSkillUpgradeByType( check_new,type_id ) local basic_info = self:GetBasicInfo(type_id) local bool = false if basic_info then for k,v in pairs(basic_info.skills) do bool = self:CanSkillUpgrade(check_new,type_id,v.pos,v.skill) or bool end end return bool end function FosterModel:CanSkillUpgrade( check_new,type_id,pos,skill_id ) if not type_id or not pos or not skill_id then return false end self.red_canskill[type_id] = self.red_canskill[type_id] or {} if not check_new then return self.red_canskill[type_id][pos] end ------------------------- self.red_canskill[type_id][pos] = false local status,skill_lv = self:GetSkillStatus(type_id,pos,skill_id) if status == "active" then local max_lv = self:GetSkillMaxInCurGrade(type_id,pos) if skill_lv < max_lv then local conf = self:GetSkillConfOne( type_id,skill_lv,pos,skill_id ) if conf then local cost_info = stringtotable(conf.cost) self.red_canskill[type_id][pos] = GoodsModel:getInstance():GetTypeGoodsNum(cost_info[1][2]) >= cost_info[1][3] end end end return self.red_canskill[type_id][pos] end --装备穿戴红点 function FosterModel:CanDressNewEquipWithType( check_new,type_id ) if not self:GetCanUseEquipByType( type_id ) then return false end ------------------------- local basic_info = self:GetBasicInfo(type_id) local bool = false if basic_info then if self:GetIsStrongFoster(type_id) then for i=1,basic_info.grade do bool = self:CanDressNewEquipWithGrade(check_new,type_id,i) or bool end else local conf_list= self:GetBaseConfList(type_id) for key, value in pairs(conf_list) do bool = self:CanDressNewEquipWithGrade(check_new, type_id, value.grade) or bool end end end return bool end --装备穿戴红点 function FosterModel:CanDressNewEquipWithGrade( check_new,type_id,grade ) if not self:GetCanUseEquipByType( type_id ) then return false end ------------------------- local bool = false for i=1,FosterConst.EquipNum do bool = self:CanDressNewEquip( check_new,type_id,grade,i ) or bool end return bool end --装备穿戴红点 function FosterModel:CanDressNewEquip( check_new,type_id,grade,pos ) if not self:GetCanUseEquipByType( type_id ) then return false end ------------------------- if not type_id or not grade or not pos then return end self.red_candressnew[type_id] = self.red_candressnew[type_id] or {} self.red_candressnew[type_id][grade] = self.red_candressnew[type_id][grade] or {} if not check_new then return self.red_candressnew[type_id][grade][pos] end ------------------------- self.red_candressnew[type_id][grade][pos] = false local basic_info = self:GetBasicInfo(type_id) if basic_info and self:GetGradeIsActive( type_id,grade ) and (not self:GetEquipInfo( type_id,grade,pos )) then local data = GoodsModel:getInstance():GetFosterWantList( type_id,pos,"bag" ) if TableSize(data) > 0 then self.red_candressnew[type_id][grade][pos] = true end end return self.red_candressnew[type_id][grade][pos] end --装备替换红点 function FosterModel:CanDressUpEquipWithType( check_new,type_id ) if not self:GetCanUseEquipByType( type_id ) then return false end ------------------------- local basic_info = self:GetBasicInfo(type_id) local bool = false if basic_info then if self:GetIsStrongFoster(type_id) then for i=1,basic_info.grade do bool = self:CanDressUpEquipWithGrade(check_new,type_id,i) or bool end else local conf_list = self:GetBaseConfList(type_id) for _, value in ipairs(conf_list) do bool = self:CanDressUpEquipWithGrade(check_new,type_id,value.grade) or bool end end end return bool end --装备替换红点 function FosterModel:CanDressUpEquipWithGrade( check_new,type_id,grade ) if not self:GetCanUseEquipByType( type_id ) then return false end ------------------------- local bool = false for i=1,FosterConst.EquipNum do bool = self:CanDressUpEquip( check_new,type_id,grade,i ) or bool end return bool end --装备替换红点 function FosterModel:CanDressUpEquip( check_new,type_id,grade,pos ) if not self:GetCanUseEquipByType( type_id ) then return false end ------------------------- if not type_id or not grade or not pos then return false end self.red_candressup[type_id] = self.red_candressup[type_id] or {} self.red_candressup[type_id][grade] = self.red_candressup[type_id][grade] or {} if not check_new then return self.red_candressup[type_id][grade][pos] end ------------------------- self.red_candressup[type_id][grade][pos] = false local basic_info = self:GetBasicInfo(type_id) if basic_info and self:GetGradeIsActive( type_id,grade ) and self:GetEquipInfo( type_id,grade,pos ) then --是否已解锁;--是否已穿戴 local data = GoodsModel:getInstance():GetFosterWantList( type_id,pos,"bag" ) local conf = {} -- print("Lizhijian:FosterModel [start:1006] self:GetEquipInfo( type_id,grade,pos ) ------------------------------------------") -- PrintTable(self:GetEquipInfo( type_id,grade,pos )) for k,v in pairs(data) do conf = self:GetEquipConf( v.type_id ) if conf then if self:GetEquipInfo( type_id,grade,pos ).color < conf.color then self.red_candressup[type_id][grade][pos] = true end end end end return self.red_candressup[type_id][grade][pos] end -- 根据类型获取进阶装备背包中可穿戴(替换)的装备 function FosterModel:GetCanEquipDressData( type_id, grade, pos ) local equip_data = nil -- 目标返回的装备数据 local basic_info = self:GetBasicInfo(type_id) if basic_info and self:GetGradeIsActive( type_id,grade ) then local equip_info = self:GetEquipInfo( type_id,grade,pos ) -- 当前穿戴的装备数据 local data = GoodsModel:getInstance():GetFosterWantList( type_id,pos,"bag" ) local conf = {} for k, v in pairs(data) do conf = self:GetEquipConf( v.type_id ) if conf then if ((not equip_info) or (equip_info.color < conf.color)) -- 未穿戴或当前穿戴的装备品质低于该装备 and ((not equip_data) or (equip_data.color < conf.color)) then -- 未提取目标装备或目标装备缓存的品质颜色低于该装备 equip_data = v end end end end return equip_data end --装备升阶红点检查红点屏蔽的 function FosterModel:CheckMaskUpEquipRed( type_id ) if not type_id then return end if self.red_candressup[type_id] and self.red_candressup[type_id] then for k,v in pairs(self.red_candressup[type_id]) do if v then self.mask_dressupgrade_red[type_id] = true self:Fire(FosterConst.RedDotRefresh) FosterController.Instance:CheckRedDot() return end end end end --装备升阶红点 function FosterModel:CanUpEquipWithType( check_new,type_id ) if not self:GetCanUseEquipByType( type_id ) then return false end ------------------------- if type_id and self.mask_dressupgrade_red[type_id] then return false end ------------------------- local basic_info = self:GetBasicInfo(type_id) local bool = false if basic_info then if self:GetIsStrongFoster(type_id) then for i=1,basic_info.grade do bool = self:CanUpEquipWithGrade(check_new,type_id,i) or bool end else local conf_list = self:GetBaseConfList(type_id) for _, value in ipairs(conf_list) do bool = self:CanUpEquipWithGrade(check_new,type_id,value.grade) or bool end end end return bool end --装备升阶红点 function FosterModel:CanUpEquipWithGrade( check_new,type_id,grade ) if not self:GetCanUseEquipByType( type_id ) then return false end ------------------------- if type_id and self.mask_dressupgrade_red[type_id] then return false end ------------------------- local bool = false for i=1,FosterConst.EquipNum do bool = self:CanUpEquip( check_new,type_id,grade,i ) or bool end return bool end --装备升阶红点 function FosterModel:CanUpEquip( check_new,type_id,grade,pos ) ------------------------- if not self:GetCanUseEquipByType( type_id ) then return false end ------------------------- if not type_id or not grade or not pos then return end if self.mask_dressupgrade_red[type_id] then return false end ------------------------- self.red_canupequip[type_id] = self.red_canupequip[type_id] or {} self.red_canupequip[type_id][grade] = self.red_canupequip[type_id][grade] or {} if not check_new then return self.red_canupequip[type_id][grade][pos] end ------------------------- self.red_canupequip[type_id][grade][pos] = false -- 在已激活的阶段的全部槽位都穿戴了装备之前,没有可升级的红点(引导) local can_update_up_red = true local cur_type_grade = self:GetBasicInfo(type_id).grade -- 当前类型的阶段数 local temp_equip_info for i = 1, cur_type_grade do for j = 1, FosterConst.EquipNum do -- 存在任何一件可替换或可上阵的槽位时,不显示可升级 if self:CanDressUpEquip(false, type_id, i, j) or self:CanDressNewEquip(false, type_id, i, j) then can_update_up_red = false break end end if not can_update_up_red then break end end -------------------- if can_update_up_red then -- 所有已激活的阶段数都穿戴了装备的情况下 local basic_info = self:GetBasicInfo(type_id) local equip_info = self:GetEquipInfo( type_id,grade,pos ) if basic_info and self:GetGradeIsActive( type_id,grade ) and equip_info then -- 是否满级 local not_max = self:GetEquipMoreConf(type_id, equip_info.pos, equip_info.color, equip_info.lv+1) and true or false if not_max then --是否已解锁;--是否已穿戴 -- local data = GoodsModel:getInstance():GetFosterWantList( type_id,pos,"bag" ) local data = GoodsModel:getInstance():GetFosterWantList( type_id,nil,"bag" ) local conf = {} for k,v in pairs(data) do conf = self:GetEquipConf( v.type_id ) if conf then -- if equip_info.color > conf.color then self.red_canupequip[type_id][grade][pos] = true break -- end end end end end end return self.red_canupequip[type_id][grade][pos] end function FosterModel:RefreshEquipRedData( type_id ) self:CanDressNewEquipWithType(true,type_id) self:CanDressUpEquipWithType(true,type_id) self:CanUpEquipWithType( true,type_id ) end function FosterModel:CheckAllRedDot( check_new ) for k,v in pairs(FosterConst.ModuleId) do if self:CheckRedDot( check_new,v ) then return true end end end -- 进阶装备协助的红点 function FosterModel:CanActivateFosterAssist(check_new, type) if not type then return false end if check_new then self.foster_assist_red[type] = false local assist_data = self:GetFosterSuitAssistFlagData(type) for k, v in pairs(assist_data) do if v == 1 then self.foster_assist_red[type] = true end end end return self.foster_assist_red[type] end -- 进阶装备协助红点 function FosterModel:CanActivateFosterAssistWithGrade(check_new, type, grade) if not type then return false end if check_new then self:CanActivateFosterAssist(check_new, type) end if grade then return self:GetFosterSuitAssistFlagData(type, grade) == 1 else return self.foster_assist_red[type] end return false end function FosterModel:GetRedDotByTab( type_id,grade ) if self:GetCanUseEquipByType( type_id ) then local bool_equip_dress = self:CanDressNewEquipWithGrade( false,type_id,grade ) local bool_equip_change = self:CanDressUpEquipWithGrade( false,type_id,grade ) local bool_equip_up = self:CanUpEquipWithGrade( false,type_id,grade ) local bool_equip_assist = self:CanActivateFosterAssistWithGrade(false, type_id, grade) return bool_equip_dress or bool_equip_change or bool_equip_up or bool_equip_assist end return false end function FosterModel:CheckRedDot( check_new,type_id ) if not type_id then return end if check_new then --这时候比较特别,需要强制刷新所有相关的以备使用 self:CanUpgrade(true,type_id) self:CanKernel(true,type_id) self:CanDressNewEquipWithType(true,type_id) self:CanDressUpEquipWithType(true,type_id) self:CanUpEquipWithType(true,type_id) self:CanSkillUpgradeByType( true,type_id ) self:CanActivateFosterAssist(true, type_id) self:CanSkinActOrUp(true, type_id) end return ( self:CanUpgrade(false,type_id) or self:CanKernel(false,type_id) or self:CanSkillUpgradeByType( false,type_id ) or self:CanActivateFosterAssist(false, type_id) or self:CanDressNewEquipWithType(false,type_id) or self:CanDressUpEquipWithType(false,type_id) or -- self:CanUpEquipWithType( false,type_id ) or self:CanSkinActOrUp(false, type_id)) and GetModuleIsOpen( 146,type_id,true ) end ------------------------- function FosterModel:GetShowHideType( type_id ) if not type_id then return false end if type_id == FosterConst.ModuleId.FHorse then return false end ------------------------- local data = CookieWrapper.Instance:GetCookie(CookieLevelType.Account,CookieKey.FOSTER_HIDE_TAG) or {} return data[type_id] and true or false end function FosterModel:SetShowHideType( type_id,tag ) if not type_id then return end if type_id == FosterConst.ModuleId.FHorse then tag = false end ------------------------- local data = CookieWrapper.Instance:GetCookie(CookieLevelType.Account,CookieKey.FOSTER_HIDE_TAG) or {} data[type_id] = tag and true or false CookieWrapper.Instance:SaveCookie(CookieLevelType.Account,CookieTimeType.TYPE_ALWAYS,CookieKey.FOSTER_HIDE_TAG,data) CookieWrapper.Instance:WriteAll() ------------------------- local role = Scene.Instance:GetRole(RoleManager.Instance.mainRoleInfo.role_id) if role then if type_id == FosterConst.ModuleId.FPearl then if self:GetShowHideType( FosterConst.ModuleId.FPearl ) then role:HideSprite(SceneObj.ModelHideFlag.ServerHide) else role:ShowSprite(SceneObj.ModelHideFlag.ServerHide) end elseif type_id == FosterConst.ModuleId.FJarvis then if self:GetShowHideType( FosterConst.ModuleId.FJarvis ) then role:HidePet(SceneObj.ModelHideFlag.ServerHide) else role:ShowPet(SceneObj.ModelHideFlag.ServerHide) end elseif type_id == FosterConst.ModuleId.FCloud then role:RefreshPetWing() elseif type_id == FosterConst.ModuleId.FWing then role:ChangeWing() elseif type_id == FosterConst.ModuleId.FGun then role:RefreshPetWeapon() elseif type_id == FosterConst.ModuleId.FArmour then role:RefreshPetFarmour() elseif type_id == FosterConst.ModuleId.FHorse then role:HorseChange() elseif type_id == FosterConst.ModuleId.FWeapon then role:CreateWeaponSprite() end end end function FosterModel:GetModuleResIdByStage( module_id,stage_id ) if not module_id and not stage_id then return end local conf = self:GetBaseConfOne(module_id,stage_id,0) if conf then if not conf.resource then return FosterConst.DefaultModelId[module_id] or 1000 end return conf.resource end end function FosterModel:GetSpriteSkillId( ) return Config.otherFightInfo.sprite_skill_id end function FosterModel:GetFJarvisSkillId( ) return Config.otherFightInfo.pet_skill_id end --得到最低阶进阶的展示属性 function FosterModel:GetMinStageAttrFight( foster_type,stage,star ) local data = Config.Foster[foster_type .. "@"..stage.."@"..star] if not data then return end local base_attr = stringtotable(data.attrs) base_attr = SortAttrList( base_attr ) return GetFighting(base_attr) end --获取装备套装配置 function FosterModel:GetEquipSuitConf( type_id,grade,color ) for k,v in pairs(Config.Fostersuit) do if v.type == type_id and v.color <= color and v.grade == grade then return v end end end -- 根据展示类型和阶段数获取进阶装备协助套装要求配置 function FosterModel:GetEquipSuitAssistCfg(type, grade) grade = grade or 1 if type and self:GetIsStrongFoster(type) then if grade then for k, v in pairs(Config.Fosterequipassist) do if v.type == type and v.grade == grade then return v end end end else if grade then for k, v in pairs(Config.Fosterequipassist) do if v.type == type and v.grade == grade then return v end end end end return nil end function FosterModel:GetEquipSuitNumByColor( type_id,grade,color ) local num = 0 local equip_info = false local equip_conf = false for i=1,FosterConst.EquipNum do equip_info = self:GetEquipInfo(type_id,grade,i) if equip_info then equip_conf = self:GetEquipConf( equip_info.type_id ) if equip_conf and equip_conf.color >= color then num = num + 1 end end end return num end function FosterModel:GetEquipSuitPower( type_id,grade ) local power = 0 local equip_list = {} local equip_info = false local equip_conf = false for i=1,FosterConst.EquipNum do equip_info = self:GetEquipInfo(type_id,grade,i) if equip_info then equip_conf = self:GetEquipConf( equip_info.type_id ) table.insert( equip_list, equip_conf ) end end local equip_num = false for k,v in pairs(Config.Fostersuit) do equip_num = 0 if v.type == type_id and v.grade == grade then for kk,vv in pairs(equip_list) do if vv.color >= v.color then equip_num = equip_num + 1 end end end if equip_num >= 6 then power = power + GetFighting((stringtotable(v.attrs)),true) end end return power end function FosterModel:ShowEquipComTip( type_id, open_show_get_way, hide_base_con ) local data = GoodsModel:getInstance():GetGoodsBasicByTypeId( type_id ) self:Fire(FosterConst.OpenFosterEquipTipView,data,nil,nil,open_show_get_way,hide_base_con) end function FosterModel:GetUpgradeNeedMoreCostNum( type_id, is_auto ) local cost_data = self:GetGradeCost(type_id) if cost_data then local have = GoodsModel:getInstance():GetTypeGoodsNum(cost_data[1][2]) if tonumber(cost_data[1][3]) > have then return tonumber(cost_data[1][3]) - have else return 1 end end end --祝福值清空提示机制 function FosterModel:CheckBlessClock( ) if self.clock_bless_id then GlobalTimerQuest:CancelQuest(self.clock_bless_id) self.clock_bless_id = nil end ------------------------- self.tip_bless_list = {}--每个进阶的祝福倒计时 local function check_call( start_id,end_id ) local next_time = false local basic = false for i=start_id,end_id do self.tip_bless_list[i] = false basic = self:GetBasicInfo( i ) if basic then if basic.end_time - TimeUtil:getServerTime() > 0 and basic.isclear == 1 and basic.exp > 0 then self.tip_bless_list[i] = basic.end_time if next_time then next_time = next_time > basic.end_time and basic.end_time or next_time else next_time = basic.end_time end end end end return next_time end local next_time_horse = check_call(1,4)--座驾的最近下一次祝福值刷新 local next_time_ai = check_call(5,8)--ai娘的最近下一次祝福值刷新 next_time_ai = false -- 弱进阶屏蔽祝福值 ------------------------- local check_next_time = next_time_horse or next_time_ai if check_next_time then if next_time_ai then check_next_time = check_next_time > next_time_ai and next_time_ai or check_next_time end local function clockFun() if TimeUtil:getServerTime() > check_next_time then --时间到,重新检测一次 self:CheckBlessClock() end end self.clock_bless_id = GlobalTimerQuest:AddPeriodQuest(clockFun, 1, -1) end GlobalEventSystem:Fire(EventName.SHOW_FUNCTION_CLOCK_POINT, 146, next_time_horse and true or false) GlobalEventSystem:Fire(EventName.SHOW_FUNCTION_CLOCK_POINT, 146555, next_time_ai and true or false) end --获取祝福值角标状态 function FosterModel:GetBlessTip( type_id ) return self.tip_bless_list[type_id] and true or false end --是否是第一次进阶 function FosterModel:IsFirstForsterAdvance( ) local cfg = self:GetFirstForsterAdvanceCookie() return not cfg.is_first_advace end --保存首次进阶 function FosterModel:SetFirstForsterAdvanceCookie( ) self.foster_first_advance = self.foster_first_advance or {} if self.foster_first_advance.is_first_advace then return end self.foster_first_advance.is_first_advace = true CookieWrapper.Instance:SaveCookie(CookieLevelType.Account,CookieTimeType.TYPE_ALWAYS,CookieKey.FORSTER_FIRST_ADVANCE_TIPS,self.foster_first_advance) CookieWrapper.Instance:WriteAll() end --获取首次进阶cookie function FosterModel:GetFirstForsterAdvanceCookie( ) if not self.foster_first_advance then self.foster_first_advance = CookieWrapper.Instance:GetCookie(CookieLevelType.Account,CookieKey.FORSTER_FIRST_ADVANCE_TIPS) or {} end return self.foster_first_advance end function FosterModel:GetIsActive(show_type, grade) local base_data = self:GetBasicInfo(show_type) if base_data and grade <= base_data.grade then return true end return false end -- 获取弱进阶系统升级材料id function FosterModel:GetFosterSubMaterialByType(type_id) if not type_id then return end for key, value in pairs(Config.Fostersubmaterial) do if value.type == type_id then return value end end end -- 设置弱进阶皮肤系统数据 function FosterModel:SetFosterSubSkinData(type_id, base_data) self.sub_skin_base = self.sub_skin_base or {} self.sub_skin_base[type_id] = base_data self:CanSkinActOrUp(true,type_id) end function FosterModel:GetFosterSubSkinData(type_id) self.sub_skin_base = self.sub_skin_base or {} if type_id then return self.sub_skin_base[type_id] end end -- 获取弱进阶皮肤系统配置 function FosterModel:GetFosterSubSkinConf(type_id, skin_id, star) if type_id then if not skin_id or not star then -- 无皮肤参数则默认获取所有初级皮肤信息 star = 0 local conf_list = {} for key, value in pairs(Config.Fostersubskin) do if value.type == type_id and value.star == star then table.insert(conf_list, value) end end table.sort(conf_list, function (a, b) return a.sequence < b.sequence end) return conf_list else return Config.Fostersubskin[type_id .. "@" .. skin_id .. "@" .. star] end end end -- 获取弱进阶皮肤页签栏数据 function FosterModel:GetCurSkinTabData(type_id) if not type_id then return end local cur_skins = self:GetFosterSubSkinData(type_id) local conf_list = self:GetFosterSubSkinConf(type_id) local tab_data = DeepCopy(conf_list) if TableSize(cur_skins) > 0 then for _, cur_value in pairs(cur_skins) do local new_conf = self:GetFosterSubSkinConf(type_id, cur_value.id, cur_value.star) for key, old_conf in pairs(tab_data) do if old_conf.skin_id == new_conf.skin_id then tab_data[key] = new_conf tab_data[key].display = cur_value.display end end end end for key, conf in pairs(tab_data) do conf.display = conf.display == nil and 0 or conf.display end return tab_data end -- 默认获取当前显示皮肤配置 function FosterModel:GetShowSubSkinConf(type_id, skin_id, star) local res = nil if type_id then if not skin_id then local basic = self:GetFosterSubSkinData(type_id) -- local conf = self:GetFosterSubSkinConf(type_id) if basic and basic.skins then for key, value in pairs(basic.skins) do if value.display ~= 0 then skin_id = value.id star = value.star break end end else local name_str = "" if type_id == 5 then name_str = "AI希亚" elseif type_id == 6 then name_str = "光子磁炮" elseif type_id == 7 then name_str = "光子星翼" elseif type_id == 8 then name_str = "光子幻甲" end return {skin_id = 1000, name=name_str} end end skin_id = skin_id or 1001 star = star or 0 return Config.Fostersubskin[type_id .. "@" .. skin_id .. "@" .. star] end end -- 使用物品弹窗走这里 function FosterModel:CanSkinUse(new_goods_vo) local goods_id = new_goods_vo.type_id local goods_num = new_goods_vo.goods_num local type_id = new_goods_vo.subtype - 1 local show_list = self:GetCurSkinTabData(type_id) for _, conf in pairs(show_list) do local cost = stringtotable(conf.cost_material) if cost and cost[1] and cost[1][2] == goods_id and tonumber(cost[1][3]) <= goods_num then return true end end return false end -- 获取皮肤红点 function FosterModel:CanSkinActOrUp(check_new, type_id) if not check_new then return self.red_skin[type_id] end self.red_skin[type_id] = false if type_id then local show_list = self:GetCurSkinTabData(type_id) for _, conf in pairs(show_list) do if self:CanSkinActOrUpById(type_id, conf.skin_id, conf.star) then self.red_skin[type_id] = true break end end end return self.red_skin[type_id] end function FosterModel:CanSkinActOrUpById(type_id, skin_id, star) if type_id and skin_id and star then local conf = self:GetShowSubSkinConf(type_id, skin_id, star) local cost_info = stringtotable(conf.cost_material) if cost_info[1] then local have = GoodsModel:getInstance():GetTypeGoodsNum(cost_info[1][2]) return have >= tonumber(cost_info[1][3]) else return false end end return false end function FosterModel:CanSkinAct(type_id, skin_id, star) if type_id and skin_id and star == 0 then local conf = self:GetShowSubSkinConf(type_id, skin_id, star) local cost_info = stringtotable(conf.cost_material) if cost_info[1] then local have = GoodsModel:getInstance():GetTypeGoodsNum(cost_info[1][2]) return have >= tonumber(cost_info[1][3]) else return false end end return false end function FosterModel:CanSkinUp(type_id, skin_id, star) if type_id and skin_id and star ~= 0 then local conf = self:GetShowSubSkinConf(type_id, skin_id, star) local cost_info = stringtotable(conf.cost_material) if cost_info[1] then local have = GoodsModel:getInstance():GetTypeGoodsNum(cost_info[1][2]) return have >= tonumber(cost_info[1][3]) else return false end end return false end function FosterModel:GetFosterSubSkinConfByMat(type_id, mat_id) if type_id and mat_id then local conf_list = self:GetFosterSubSkinConf(type_id) for key, value in pairs(conf_list) do local cost = stringtotable(value.cost_material) if cost and tonumber(cost[1][2]) == tonumber(mat_id) then return value end end end end --获取当前穿戴的皮肤 function FosterModel:GetCurrentFosterSkin(type_id) local role_vo = RoleManager.Instance.mainRoleInfo if role_vo and role_vo.foster_sub_skin_list and role_vo.foster_skin_list then for k,v in pairs(role_vo.foster_skin_list) do if v.type_id == type_id and v.skin_id > 0 and v.star > 0 then return v.skin_id end end for k,v in pairs(role_vo.foster_sub_skin_list) do if v.type_id == type_id and v.skin_id > 0 and v.star > 0 then return v.skin_id end end end return 0 end -- 获取当前进阶系统是否为强进阶类型 function FosterModel:GetIsStrongFoster(type_id) if not type_id then return false end return type_id < FosterConst.ModuleId.FJarvis end --计算核心加成属性战力 --module_type模型类型 --进阶阶级 --进阶星级 --进阶丹类型 --[转换进阶丹属性] function FosterModel:MathFosterKernelFighting( module_type,grade,star,kernel_type )--221 local data = self:GetBaseConfOne( module_type,grade,star ) local base_attr = stringtotable(data.attrs)--进阶基础属性 --------------------------进阶丹属性 local all_kernel_list = {} local kernel_attr = nil--增加的进阶丹属性 local conf_list = self:GetKernelConf(module_type) for key, value in pairs(conf_list) do local cur_use_num = self:GetKernelUseNum(module_type, value.kind)--某丹使用数量 local attr_temp = stringtotable(value.ext)--单丹属性 if kernel_type + 1 == key then kernel_attr = DeepCopy(attr_temp) end for k,v in pairs(attr_temp) do attr_temp[k][2] = attr_temp[k][2] * cur_use_num end all_kernel_list = CombineAttrList( all_kernel_list, attr_temp ) end local base_temp_attr = {}--合起来的基础总属性 local percent_attr = 0 for i,v in ipairs(base_attr) do--把基础属性都合起来 if v[1] ~= 20 and v[1] ~= 52 and v[1] ~= 55 and v[1] ~= 53 then--总生命/爆伤加成/会心伤害 if v[2] > 0 then if not base_temp_attr[v[1]] then base_temp_attr[v[1]] = {v[1],v[2]} else base_temp_attr[v[1]] = {v[1],v[2] + base_temp_attr[v[1]][2]} end end end end for i,v in ipairs(all_kernel_list) do--把基础属性都合起来 if v[1] == 68 then percent_attr = v[2]/10000 else if v[2] > 0 then if not base_temp_attr[v[1]] then base_temp_attr[v[1]] = {v[1],v[2]} else base_temp_attr[v[1]] = {v[1],v[2] + base_temp_attr[v[1]][2]} end end end end local base_sum_attr = {} for i,v in pairs(base_temp_attr) do base_sum_attr[#base_sum_attr + 1] = v end --上面先算原本的战力 --接下来算这个进阶丹的战力 local new_temp_attr = {} local new_percent_attr = 0 for i,v in ipairs(kernel_attr) do if v[1] == 68 then new_percent_attr = v[2]/10000 else if v[2] > 0 then if not new_temp_attr[v[1]] then new_temp_attr[v[1]] = {v[1],v[2]} else new_temp_attr[v[1]] = {v[1],v[2] + new_temp_attr[v[1]][2]} end end end end local kernel_attr = {} for i,v in pairs(new_temp_attr) do kernel_attr[#kernel_attr + 1] = v end if new_percent_attr == 0 then--没有加成属性就随便算 for i,v in ipairs(kernel_attr) do v[2] = v[2]*(1+percent_attr) end return GetFighting(kernel_attr,false)--已拥有填true end local new_sum_attr = CombineAttrList( DeepCopy(base_sum_attr), kernel_attr ) for i,v in pairs(new_sum_attr) do--这里把合成的总属性算出来 v[2] = v[2]*(1 + new_percent_attr + percent_attr) end for i,v in pairs(base_sum_attr) do--基础的属性也算上加成 v[2] = v[2]*(1+percent_attr) end local final_attr = GetAttributeOffset2(base_sum_attr,new_sum_attr)--获得属性差值 四舍五入转化战力 for i,v in ipairs(final_attr) do v[2] = round(v[2]) end -- print("huangcong:FosterModel [start:1865] :", final_attr) -- PrintTable(final_attr) -- print("huangcong:FosterModel [end]") local new_fighting = GetFighting(final_attr,false)--已拥有填true return new_fighting end