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
|