BossHomeModel = BossHomeModel or BaseClass(BaseVo, true) local BossHomeModel = BossHomeModel function BossHomeModel:__init() BossHomeModel.Instance = self self:Reset() end function BossHomeModel:Reset() --boss之家配置 self.boss_home_cfg = {}--boss之家boss配置 self.boss_home_level_cfg = {}--boss之家层数配置 --社团之家配置 self.guild_boss_home_cfg = {} self.guild_boss_home_level_cfg = {} self.boss_home_rank_info = {}--boss之家伤害列表 self.boss_home_info = {}--boss之家基础信息 self.need_find_boss_id = false--进场景前记录需要寻找的boss self.cur_fight_boss_id = nil--当前在打的boss id self.scene_boss_hp = {}--场景中boss最大血量 self.bosshome_guild_exclusive_data = {} -- 幻魔之家社团专属信息 self.boss_hurt_info = {} self.my_hurt_only = false self.boss_home_red_cache = {} self.first_open_red = false--功能首次开放时,给个一次性红点 self.boss_home_login_red = true -- 每日登录红点 self:InitBossHomeCFG() end function BossHomeModel:getInstance() if BossHomeModel.Instance == nil then BossHomeModel.Instance = BossHomeModel.New() end return BossHomeModel.Instance end --boss之家boss配置 function BossHomeModel:InitBossHomeCFG( ) self.boss_home_cfg = {} self.guild_boss_home_cfg = {} local cfg = Config.Homeboss for k,v in pairs(cfg) do if v.sub_module == 1 then if not self.boss_home_cfg[v.level] then self.boss_home_cfg[v.level] = {} end table_insert(self.boss_home_cfg[v.level], v) else if not self.guild_boss_home_cfg[v.level] then self.guild_boss_home_cfg[v.level] = {} end table_insert(self.guild_boss_home_cfg[v.level], v) end end for k,v in pairs(self.boss_home_cfg) do local sort_func = function ( a, b ) return a.recommend_lv < b.recommend_lv end table.sort(v, sort_func) end for k,v in pairs(self.guild_boss_home_cfg) do local sort_func = function ( a, b ) return a.recommend_lv < b.recommend_lv end table.sort(v, sort_func) end self.boss_home_level_cfg = {} self.guild_boss_home_level_cfg = {} for k,v in pairs(Config.Homebosslevel) do if v.sub_module == 1 then table_insert(self.boss_home_level_cfg, v) else table_insert(self.guild_boss_home_level_cfg, v) end end local sort_func = function ( a, b ) return a.level < b.level end table.sort(self.boss_home_level_cfg, sort_func) table.sort(self.guild_boss_home_level_cfg, sort_func) end --根据层数获取boss之家boss配置 function BossHomeModel:GetBossHomeCFG( level ) if not level then return self.boss_home_cfg else return self.boss_home_cfg[level] or {} end end --根据层数获取社团之家boss配置 function BossHomeModel:GetGuildBossHomeCFG( level ) if not level then return self.guild_boss_home_cfg else return self.guild_boss_home_cfg[level] or {} end end --根据层数获取boss之家层数配置 function BossHomeModel:GetBossHomeLevelCFG( level ) if not level then return self.boss_home_level_cfg else return self.boss_home_level_cfg[level] or {} end end --根据层数获取社团之家层数配置 function BossHomeModel:GetGuildBossHomeLevelCFG( level ) if not level then return self.guild_boss_home_level_cfg else return self.guild_boss_home_level_cfg[level] or {} end end --根据bossid获取boss之家boss配置 function BossHomeModel:GetBossHomeCFGById( boss_id ) if boss_id then return Config.Homeboss["1@"..boss_id] end return {} end --根据bossid获取社团之家boss配置 function BossHomeModel:GetGuildBossHomeCFGById( boss_id ) if boss_id then return Config.Homeboss["2@"..boss_id] end return {} end --根据bossid获取boss之家场景id function BossHomeModel:GetBossHomeSceneById( boss_id ) local cfg = Config.Homeboss if cfg["1@"..boss_id] then local level = cfg["1@"..boss_id].level local scene_cfg = Config.Homebosslevel["1@"..level] return scene_cfg.scene end return 0 end --根据bossid获取社团之家场景id function BossHomeModel:GetGuildBossHomeSceneById( boss_id ) local cfg = Config.Homeboss if cfg["2@"..boss_id] then local level = cfg["2@"..boss_id].level local scene_cfg = Config.Homebosslevel["2@"..level] return scene_cfg.scene end return 0 end --获取boss之家和社团之家在第几层(通用) function BossHomeModel:GetBossHomeSceneFloor( scene_id ) scene_id = scene_id or SceneManager:getInstance():GetSceneId() local cfg = Config.Homebosslevel for k,v in pairs(cfg) do if v.scene == scene_id then return v.level end end return 0 end --根据场景id判断是社团之家还是boss之家 function BossHomeModel:GetBossHomeSceneType(scene_id) local scene_id = SceneManager:getInstance():GetSceneId() local cfg = Config.Homebosslevel for k,v in pairs(cfg) do if v.scene == scene_id then return v.sub_module end end return 1 end --boss之家boss信息46201 function BossHomeModel:SetBossHomeInfo(boss_id,reborn_time,killer) if boss_id then self.boss_home_info[boss_id] = { boss_id = boss_id,reborn_time = reborn_time,killer = killer,kill_count = 0 } end end function BossHomeModel:GetBossHomeInfo( boss_id ) if boss_id then return self.boss_home_info[boss_id] else return self.boss_home_info end end --boss之家伤害列表 46202 function BossHomeModel:SetBossHomeRankInfo( vo ) self.boss_home_rank_info[vo.boss_id] = vo self:SetCurFightBossId(vo.boss_id) end function BossHomeModel:GetBossHomeRankInfo( boss_id ) return self.boss_home_rank_info[boss_id] end function BossHomeModel:CleanBossHomeRankInfoById( boss_id ) self.boss_home_rank_info[boss_id] = nil end function BossHomeModel:GetLeftBossHomeMapShowDataList(level) local list = {} local all_boss_list = self:GetBossHomeCFG(level) or {} if all_boss_list and #all_boss_list > 0 then for i,v in ipairs(all_boss_list) do local d = {} local pos = stringtotable(v.born_pos) d.x = tonumber(pos[1]) d.y = tonumber(pos[2]) d.boss_id = v.boss_id d.id = v.boss_id d.sub_type = FindVo.MONSTER d.xy = v.born_pos d.name = Trim(v.name) table.insert(list, d) end end return list end --进场景前保存需要前往寻路的bossid function BossHomeModel:SetNeedFindBoss( boss_id ) self.need_find_boss_id = boss_id end function BossHomeModel:GetNeedFindBoss( ) return self.need_find_boss_id end --保存当前正在战斗的bossid function BossHomeModel:SetCurFightBossId( value ) self.cur_fight_boss_id = value end function BossHomeModel:GetCurFightBossId( ) return self.cur_fight_boss_id end -- 幻魔之家社团专属信息 40605 function BossHomeModel:SetBossHomeGuildExclusiveData(vo) local sort_func = function ( a, b ) return a.guild_id < b.guild_id end table.sort(vo.guild_list, sort_func) self.bosshome_guild_exclusive_data = vo.guild_list end function BossHomeModel:GetBossHomeGuildExclusiveData(guild_id) if guild_id then for k, v in ipairs(self.bosshome_guild_exclusive_data) do if v.guild_id == guild_id then return v end end return false else return self.bosshome_guild_exclusive_data end end --刷新墓碑 function BossHomeModel:UpdateSceneGrave(vo) if not vo or not vo.boss_info then return end local boss_info = vo.boss_info if boss_info then local cur_scene_id = SceneManager.Instance:GetSceneId() for _, v in ipairs(boss_info) do if v.reborn_time > 0 then --复活结束时间戳>0说明怪物已经死亡 local x, y local cfg = Config.Homeboss["1@"..v.boss_id] local scene_id = 0 if not cfg then cfg = Config.Homeboss["2@"..v.boss_id] scene_id = self:GetGuildBossHomeSceneById(v.boss_id) else scene_id = self:GetBossHomeSceneById(v.boss_id) end if cfg then local pos = stringtotable(cfg.born_pos) x = tonumber(pos[1]) y = tonumber(pos[2]) end local monCfg = ConfigItemMgr.Instance:GetMonsterDataItem(v.boss_id) if x and y and monCfg and (scene_id == cur_scene_id) then local grave_vo = GraveVo.New() local data = {} data.instance_id = v.boss_id data.type_id = BossModel.GRAVE_MONSTER_ID data.boss_id = v.boss_id data.name = monCfg.name data.level = monCfg.lv data.refresh_time = math.ceil(v.reborn_time - TimeUtil:getServerTime()) data.pos_x = x data.pos_y = y grave_vo:SetGraveVo(data) print("<<<<<<====================================>>>>>>",v.boss_id) SceneManager:getInstance():AddGraveVo(grave_vo) end else SceneManager:getInstance():DeleteGraveVo(v.boss_id) end end end end function BossHomeModel:GetShortNameStr( str ) str = str or "" if SubStringGetTotalIndex(str) > 8 then return SubStringUTF8(str, 1, 8) .. "..." else return str end end function BossHomeModel:GetHurtNumStr( num ) num = num or 0 if num >= 0 and num <= 99999 then return num elseif num >= 100000 and num <= 99999999 then return string.format("%.1f万", num / 10000) elseif num >= 100000000 and num <= 99999999999 then return string.format("%.2f亿", num / 100000000) elseif num >= 100000000000 and num <= 999999999999 then return string.format("%.2f千亿", num / 100000000000) elseif num >= 1000000000000 and num <= 9999999999999 then return string.format("%.1f千亿", num / 100000000000) end return string.format("%.1f千亿", num / 100000000000) end --根据当前boss_id获取boss类型(通用)--boss之家12 --社团之家13 function BossHomeModel:GetBossTypeByBossId( boss_id ) if not boss_id then return end if self:GetBossHomeCFGById(boss_id) then return Config.ConfigBoss.ModuleId.BossHome elseif self:GetGuildBossHomeCFGById(boss_id) then return Config.ConfigBoss.ModuleId.GuildBossHome end end --离开场景清除数据 function BossHomeModel:LeaveSceneClear( type_id ) self.boss_hurt_info = {} self.scene_boss_hp = {} self.my_hurt_only = false end --boss自己的总伤害(只在组队状态下有用) function BossHomeModel:GetMyHurtOnly( ) return self.my_hurt_only end function BossHomeModel:SetMyHurtOnly( value ) self.my_hurt_only = value end function BossHomeModel:GetBossHurtInfo( type_id,role_id ) if not type_id then return end if self.boss_hurt_info[type_id] then if role_id then return self.boss_hurt_info[type_id][role_id] else return self.boss_hurt_info[type_id] end end return {} end function BossHomeModel:GetSceneBossHp( type_id ) return self.scene_boss_hp[type_id] or 0 end function BossHomeModel:ResetBossHurtInfo( type_id ) if not type_id then return end self.boss_hurt_info[type_id] = {} self.scene_boss_hp[type_id] = 0 end function BossHomeModel:SetBossHurtInfo( boss_id,role_id,name,hurt,boss_hp,type ) if not boss_id then return end local type_id = self:GetBossTypeByBossId(boss_id) if role_id and hurt and name and type_id then self.boss_hurt_info[type_id] = self.boss_hurt_info[type_id] or {} self.boss_hurt_info[type_id][role_id] = { ["role_id"] = role_id, ["name"] = name, ["hurt"] = hurt, ["type"] = type, } end if boss_hp and type_id then self.scene_boss_hp[type_id] = boss_hp end end ---红点 function BossHomeModel:CheckBossHomeRedByType(red_type, ...) local args = {...} local bool = false if red_type == BossConst.RedType.ModuleOpen then -- 模块开放红点,终身一次 bool = self:SetBossHomeFirstRed(args[1]) elseif red_type == BossConst.RedType.Login then -- 登录红点,登录一次 bool = self:SetBossHomeLoginRed(args[1]) end self.boss_home_red_cache[red_type] = bool BossModel.Instance:Fire(BossModel.EVENT_UPDATE_RED_DOT) end function BossHomeModel:GetBossHomeRedCache(red_type) if red_type then return self.boss_home_red_cache[red_type] or false else for k, v in pairs(self.boss_home_red_cache) do if v then return true end end return false end end function BossHomeModel:SetBossHomeFirstRed(bool) if GetModuleIsOpen(462) then self.first_open_red = bool else self.first_open_red = false end return self.first_open_red end function BossHomeModel:GetBossHomeFirstRed( ) return self.first_open_red end -- 登录红点 function BossHomeModel:SetBossHomeLoginRed( ) self.boss_home_login_red = self.boss_home_login_red and GetModuleIsOpen(462) return self.boss_home_login_red end