|
|
- 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("<<<<<<==================<WQ>==================>>>>>>",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
|