源战役客户端
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 
 

456 lignes
12 KiB

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