BossModel = BossModel or BaseClass(BaseModel)
|
|
|
|
-------------------------
|
|
BossModel.EVENT_UPDATE_RED_DOT = "BossModel.EVENT_UPDATE_RED_DOT"
|
|
BossModel.UPDATE_BOSS_RED_INFO = "BossModel.UPDATE_BOSS_RED_INFO"
|
|
-------------------------
|
|
|
|
BossModel.GRAVE_MONSTER_ID = 1200999 --墓碑怪物ID
|
|
|
|
--新手假赏金BOSS相关配置
|
|
BossModel.FAKE_MONEY_BOSS_SCENE_ID = 2060 --场景id
|
|
BossModel.FAKE_MONEY_BOSS_DUN_ID = 3605 --副本id
|
|
BossModel.FAKE_MONEY_BOSS_TASK_ID = 11260 --任务id
|
|
BossModel.FAKE_MONEY_BOSS_MIN_LEVEL = 90 --等级下限
|
|
BossModel.FAKE_MONEY_BOSS_MAX_LEVEL = 119 --等级上限
|
|
BossModel.FAKE_MONEY_BOSS_ID = 13010000 --bossid
|
|
BossModel.FAKE_MONEY_REWARD_BOSS_ID = 13010001 --奖励展示的bossid
|
|
|
|
BossModel.BOSS_CARD =
|
|
{
|
|
REFRESH_MONEY_BOSS_ID = 102323, --赏金幻魔刷新卡
|
|
REFRESH_DESERTED_BOSS_ID = 102324, --星域幻魔刷新卡
|
|
OWNER_MONEY_BOSS_ID = 102325, --赏金幻魔独享卡
|
|
OWNER_DESERTED_BOSS_ID = 102326, --星域幻魔独享卡
|
|
}
|
|
|
|
table_insert = table.insert
|
|
function BossModel:__init()
|
|
BossModel.Instance = self
|
|
self:InitDesertedBossCFG()
|
|
self.total_deserted_boss_time = Config.Desertedkv["feidu_boss_times"].val
|
|
self.total_deserted_mon_time = Config.Desertedkv["feidu_elite_times"].val
|
|
self:ResetData()
|
|
end
|
|
|
|
function BossModel:ResetData( )
|
|
self.need_refresh_grave = true
|
|
self.need_refresh_grave = false --是否要刷新墓碑
|
|
self.perosn_normal_count = false --个人副本每日基础次数
|
|
-------------------------
|
|
self.world_boss_status = 0 --世界boss活动结束时间
|
|
self.world_boss_info = {} --世界boss列表信息
|
|
self.world_boss_hp_list = {} --世界boss血量信息
|
|
self.world_boss_week_rank_list = {} --世界boss周榜单
|
|
self.scene_boss_hp = {}--场景中boss最大血量
|
|
self.boss_hurt_info = {}--场景中boss伤害列表
|
|
self.money_boss_info = {} --赏金幻魔列表信息
|
|
self.money_boss_my_info = {}--赏金幻魔个人信息
|
|
self.money_boss_kill_history = {}
|
|
self.money_inspire_count = {}--赏金幻魔鼓舞信息
|
|
self.world_boss_protect_max = {}--世界boss护盾信息
|
|
self.money_helper_info = {}--赏金幻魔协助者伤害
|
|
self.boss_focus_check_list = {}--幻魔关注计时器检查列表
|
|
self.boss_focus_tip_cd_list = {}--幻魔关注提示冷却时间
|
|
self.money_focus_tip_time = 60--赏金幻魔关注提示时间
|
|
|
|
self.person_boss_list_show_in_hall = false--保存专属幻魔界面的数据列表
|
|
self.red_person_boss = false
|
|
self.red_money_boss = false
|
|
self.need_show_money_result = false--赏金幻魔结算数据
|
|
self.my_hurt_only = false--boss自己的总伤害(只在组队状态下有用)
|
|
|
|
self.left_free_deserted_boss_relive_times = 0 --星域幻魔剩余免费复活次数
|
|
|
|
self.deserted_boss_rank_info = {}--星域幻魔伤害列表
|
|
self.deserted_boss_num_info = {}--星域幻魔剩余次数信息
|
|
self.deserted_boss_info = {}--星域幻魔基础信息
|
|
self.need_find_boss_id = false--星域幻魔找boss信息
|
|
self.deserted_monster_info = {} --星域幻魔找boss 精英怪信息
|
|
self.boss_protect_time_info = {}--boss免战时间信息
|
|
self:SetFocusClock()
|
|
self:InitCheckMoneyRedLvList()
|
|
self:InitCheckPersonRedLvList()
|
|
|
|
self.festival_boss_list = false--节日幻魔基础信息
|
|
self.festival_boss_scene_list = false--当前场景boss信息
|
|
self.festival_boss_rank_info = false--排名信息
|
|
|
|
self.boss_equip_tips_view_close_data = false --装备展示界面提示界面,退出关闭数据
|
|
end
|
|
|
|
function BossModel:GetInstance()
|
|
if BossModel.Instance == nil then
|
|
BossModel.New()
|
|
end
|
|
return BossModel.Instance
|
|
end
|
|
|
|
function BossModel:GetBossKeyValue( key )
|
|
if not key or not Config.Localbosskv[key] then return end
|
|
return Config.Localbosskv[key].value_content
|
|
end
|
|
|
|
--根据当前boss_id获取boss类型
|
|
function BossModel:GetBossTypeByBossId( boss_id )
|
|
if not boss_id then return end
|
|
if SceneManager:getInstance():IsFakeBossMoneyScene() then
|
|
return Config.ConfigBoss.ModuleId.Money
|
|
end
|
|
if self:GetWorldBossConf( boss_id ) then
|
|
return Config.ConfigBoss.ModuleId.World
|
|
elseif self:GetMoneyBossConf( boss_id ) then
|
|
return Config.ConfigBoss.ModuleId.Money
|
|
elseif self:GetPersonBossList( boss_id ) then
|
|
return Config.ConfigBoss.ModuleId.Person
|
|
elseif boss_id == GuildModel:getInstance():GetGuildCollectKvByKey("invade_mon").value then
|
|
return Config.ConfigBoss.ModuleId.Collect
|
|
elseif self:GetDesertedBossCFGById(boss_id) then
|
|
return Config.ConfigBoss.ModuleId.Deserted
|
|
end
|
|
end
|
|
|
|
--根据当前boss_id获取boss配置
|
|
function BossModel:GetBossCfgByBossId( boss_id )
|
|
if not boss_id then return end
|
|
local boss_cfg = self:GetWorldBossConf( boss_id )
|
|
or self:GetMoneyBossConf( boss_id )
|
|
or self:GetPersonBossList( boss_id )
|
|
or self:GetDesertedBossCFGById(boss_id)
|
|
return boss_cfg
|
|
end
|
|
|
|
--刷新墓碑
|
|
function BossModel:UpdateSceneGrave(vo)
|
|
do return end
|
|
-------------------------
|
|
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.Bosscfg[v.boss_id]
|
|
local scene_id = 0
|
|
if cfg then
|
|
x = tonumber(cfg.x)
|
|
y = tonumber(cfg.y)
|
|
scene_id = tonumber(cfg.scene)
|
|
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)
|
|
SceneManager:getInstance():AddGraveVo(grave_vo)
|
|
end
|
|
else
|
|
SceneManager:getInstance():DeleteGraveVo(v.boss_id)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--boss图标是否有红点
|
|
function BossModel:HasBossRed( check_new )
|
|
local bool_1 = self:HasPersonBossRed( check_new )
|
|
-- local bool_2 = self:HasWorldBossRed( check_new )
|
|
local bool_3 = self:HasMoneyBossRed( check_new )
|
|
local bool_4 = self:HasDesertedBossRed(check_new)
|
|
local bool_5 = self:HasBossHomeRed()
|
|
return bool_1 or bool_2 or bool_3 or bool_4 or bool_5
|
|
end
|
|
|
|
function BossModel:HasPersonBossRed( check_new,mask_first )
|
|
if not GetModuleIsOpen(460, Config.ConfigBoss.ModuleId.Person, true) then
|
|
return false
|
|
end
|
|
|
|
if check_new then
|
|
local dungeon_list = BaseDungeonModel:GetInstance():GetDunProtoInfo( BaseDungeonModel.DUN_TYPE.PersonBoss )
|
|
local boss_type_count = self:GetBossNormalCount(Config.ConfigBoss.ModuleId.Person)
|
|
if dungeon_list and dungeon_list[1] then
|
|
local max_time = boss_type_count + dungeon_list[1].vip_count
|
|
local vip_pass_count = 0--购买的vip次数使用过的次数
|
|
for k, v in pairs(dungeon_list[1].rec_data) do
|
|
if v.key == 8 then
|
|
vip_pass_count = v.val
|
|
end
|
|
end
|
|
local day_use = dungeon_list[1].day_pass_count+vip_pass_count
|
|
self.red_person_boss = max_time-day_use > 0
|
|
end
|
|
end
|
|
|
|
local can_first_pass = false
|
|
if not mask_first then
|
|
can_first_pass = self:GetPersonBossFirstPassRed()
|
|
end
|
|
return self.red_person_boss or can_first_pass
|
|
end
|
|
|
|
function BossModel:InitCheckPersonRedLvList( )
|
|
self.check_red_person_lv = {}
|
|
for k,v in pairs(self:GetPersonBossList()) do
|
|
self.check_red_person_lv[self:GetPersonBossLimitLv(v.boss_id)] = true
|
|
end
|
|
end
|
|
|
|
function BossModel:GetPersonBossFirstPassRed( )
|
|
if not GetModuleIsOpen(460, Config.ConfigBoss.ModuleId.Person, true) then
|
|
return false
|
|
end
|
|
--判断首次通关红点
|
|
local my_lv = RoleManager.Instance.mainRoleInfo.level
|
|
for k,v in pairs(self:GetPersonBossList()) do
|
|
local limit_lv = self:GetPersonBossLimitLv(v.boss_id)
|
|
if my_lv >= limit_lv then
|
|
if not self:CheckHasPassPersonBoss(v.boss_id) then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function BossModel:CheckHasPassPersonBoss( boss_id )
|
|
local have_kill_pass = true --是否已经通关过
|
|
-------------------------
|
|
--获取副本数据
|
|
local conf_boss = self:GetPersonBossList( boss_id )
|
|
local dungeon_list = BaseDungeonModel:GetInstance():GetDunProtoInfo( BaseDungeonModel.DUN_TYPE.PersonBoss )
|
|
if (not conf_boss) or (not dungeon_list) then
|
|
have_kill_pass = true
|
|
return have_kill_pass
|
|
end
|
|
-------------------------
|
|
local need_dun_info = false
|
|
for k,v in pairs(dungeon_list) do
|
|
if v.dun_id == conf_boss.dun_id then
|
|
need_dun_info = v
|
|
break
|
|
end
|
|
end
|
|
if not need_dun_info then
|
|
have_kill_pass = true
|
|
return have_kill_pass
|
|
end
|
|
-------------------------
|
|
local first_pass_status = need_dun_info.is_pass--0未通关|1已通关
|
|
if first_pass_status == 1 then
|
|
have_kill_pass = true
|
|
else
|
|
have_kill_pass = false
|
|
end
|
|
return have_kill_pass
|
|
end
|
|
|
|
function BossModel:HasWorldBossRed( check_new )
|
|
if not GetModuleIsOpen(460, Config.ConfigBoss.ModuleId.World,true) then
|
|
return false
|
|
end
|
|
-------------------------
|
|
return false
|
|
end
|
|
|
|
function BossModel:HasMoneyBossRed( check_new,mask_first )
|
|
if not GetModuleIsOpen(460, Config.ConfigBoss.ModuleId.Money,true) then
|
|
return false
|
|
end
|
|
|
|
if check_new then
|
|
self.red_money_boss = self:GetMoneyLeftCount() > 0
|
|
end
|
|
-------------------------
|
|
local can_first_pass = false
|
|
if not mask_first then
|
|
can_first_pass = self:GetMoneyBossFirstPassRed()
|
|
end
|
|
-------------------------
|
|
return self.red_money_boss or can_first_pass
|
|
end
|
|
|
|
function BossModel:GetMoneyBossFirstPassRed( )
|
|
if not GetModuleIsOpen(460, Config.ConfigBoss.ModuleId.Money,true) then
|
|
return false
|
|
end
|
|
--判断首次通关红点
|
|
local my_lv = RoleManager.Instance.mainRoleInfo.level
|
|
for k,v in pairs(self:GetMoneyBossConf()) do
|
|
local limit_lv = self:GetMoneyBossLimitLv(v.boss_id)
|
|
if my_lv >= limit_lv then
|
|
local ser_data = false
|
|
for kk,vv in pairs(self:GetMoneyBossInfo()) do
|
|
if vv.boss_id == v.boss_id then
|
|
ser_data = vv
|
|
break
|
|
end
|
|
end
|
|
if ser_data and ser_data.kill_count == 0 then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function BossModel:InitCheckMoneyRedLvList( )
|
|
self.check_red_money_lv = {}
|
|
for k,v in pairs(self:GetMoneyBossConf()) do
|
|
self.check_red_money_lv[self:GetMoneyBossLimitLv(v.boss_id)] = true
|
|
end
|
|
end
|
|
|
|
--专属幻魔的显示列表
|
|
function BossModel:GetPersonBossList( boss_id )
|
|
if boss_id then
|
|
return Config.Personalbossinfo[boss_id]
|
|
else
|
|
return Config.Personalbossinfo
|
|
end
|
|
end
|
|
|
|
function BossModel:GetPersonBossLimitLv( boss_id )
|
|
if not boss_id then return 999 end
|
|
local data = self:GetPersonBossList()
|
|
if data[boss_id] then
|
|
local dun_cfg = BaseDungeonModel:GetInstance():GetDunCfg( data[boss_id].dun_id )
|
|
if dun_cfg then
|
|
local temp = dun_cfg.condition
|
|
for k,v in pairs(temp) do
|
|
if v[1] == "lv" then
|
|
return tonumber(v[2])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return 999
|
|
end
|
|
|
|
--获取系统推荐的Boss选择
|
|
function BossModel:GetRecommendPersonBossId( )
|
|
local lower_cfg = false--最低战力boss
|
|
local select_cfg = false--选择战力boss
|
|
local lv_range = false--等级范围
|
|
local my_lv = RoleManager.Instance.mainRoleInfo.level
|
|
local my_fight = RoleManager.Instance.mainRoleInfo.fighting
|
|
local default_id = 1
|
|
for k,v in pairs(Config.Personalbossinfo) do
|
|
if v.grade and v.grade == 1 then
|
|
default_id = v.boss_id
|
|
end
|
|
lv_range = stringtotable(v.recommend_lv)
|
|
if my_lv >= tonumber(lv_range[1][1]) and my_lv <= tonumber(lv_range[1][2]) then
|
|
--如果该等级段玩家一个战力都不符合,则选中该等级段下战力最小的那个作为推荐boss
|
|
lower_cfg = lower_cfg and (lower_cfg.recommend_power > v.recommend_power and v or lower_cfg) or v
|
|
-------------------------
|
|
if my_fight >= v.recommend_power then
|
|
--先找到符合玩家等级的所有boss,然后找到玩家能打的最高战力boss作为推荐boss
|
|
select_cfg = select_cfg and (select_cfg.recommend_power > v.recommend_power and select_cfg or v) or v
|
|
end
|
|
end
|
|
end
|
|
if select_cfg then
|
|
return select_cfg.boss_id
|
|
elseif lower_cfg then
|
|
return lower_cfg.boss_id
|
|
else
|
|
|
|
return default_id
|
|
end
|
|
end
|
|
|
|
function BossModel:GetBossNormalCount( boss_type )
|
|
if boss_type == Config.ConfigBoss.ModuleId.Person then
|
|
if not self.perosn_normal_count then
|
|
for k,v in pairs(Config.Dungeoncfg) do
|
|
if v.type == BaseDungeonModel.DUN_TYPE.PersonBoss then
|
|
for a,b in pairs(stringtotable(v.count_cond)) do
|
|
if b[1] == 1 then
|
|
self.perosn_normal_count = b[2]
|
|
end
|
|
end
|
|
if self.perosn_normal_count then
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
-------------------------
|
|
return self.perosn_normal_count or 0
|
|
end
|
|
return 0
|
|
end
|
|
|
|
--离开场景清除数据
|
|
function BossModel:LeaveSceneClear( type_id )
|
|
self.boss_hurt_info = {}
|
|
self.scene_boss_hp = {}
|
|
self.my_hurt_only = false
|
|
if type_id == Config.ConfigBoss.ModuleId.World then
|
|
self.world_boss_protect_max = {}
|
|
elseif type_id == Config.ConfigBoss.ModuleId.Money then
|
|
self.money_helper_info = {}
|
|
end
|
|
end
|
|
|
|
function BossModel:GetIsBossById( id )
|
|
if not id then return end
|
|
return Config.Personalbossinfo[id]
|
|
end
|
|
|
|
function BossModel:GetWorldBossStatus( )
|
|
return self.world_boss_status or 0
|
|
end
|
|
function BossModel:SetWorldBossStatus( value )
|
|
self.world_boss_status = value
|
|
end
|
|
|
|
function BossModel:GetWorldOneBossStatus( boss_id )
|
|
if not self:GetWorldBossInfo().boss_info then return end
|
|
local ser_data = false
|
|
for k,v in pairs(self:GetWorldBossInfo().boss_info) do
|
|
if v.boss_id == boss_id then
|
|
ser_data = v
|
|
end
|
|
end
|
|
if not ser_data then return end
|
|
return ser_data.status
|
|
end
|
|
|
|
function BossModel:GetWorldBossInfo( )
|
|
return self.world_boss_info or {}
|
|
end
|
|
function BossModel:SetWorldBossInfo( value )
|
|
self.world_boss_info = value
|
|
end
|
|
function BossModel:SetWorldBossInfoOne( data )
|
|
if data and data.boss_id then
|
|
if self.world_boss_info and self.world_boss_info.boss_info then
|
|
for k,v in pairs(self.world_boss_info.boss_info) do
|
|
if v.boss_id == data.boss_id then
|
|
v.status = data.status
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function BossModel:GetWorldBossHp( boss_id )
|
|
if not boss_id then return end
|
|
return self.world_boss_hp_list[boss_id]
|
|
end
|
|
function BossModel:SetWorldBossHpList( value )
|
|
if value then
|
|
self.world_boss_hp_list[value.boss_id] = value
|
|
end
|
|
end
|
|
|
|
function BossModel:GetWorldBossWeekRankList( show_week_type )
|
|
if not show_week_type then return end
|
|
return self.world_boss_week_rank_list[show_week_type]
|
|
end
|
|
function BossModel:SetWorldBossWeekRankList( value )
|
|
if value then
|
|
self.world_boss_week_rank_list[value.boss_id] = {list = value.rank_list,my_score = value.my_score}
|
|
end
|
|
end
|
|
|
|
function BossModel: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 BossModel:GetSceneBossHp( type_id )
|
|
return self.scene_boss_hp[type_id] or 0
|
|
end
|
|
function BossModel: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 BossModel: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 BossModel:GetWorldBossConf( boss_id )
|
|
if boss_id then
|
|
return Config.Worldbossinfo[boss_id]
|
|
else
|
|
return Config.Worldbossinfo
|
|
end
|
|
end
|
|
|
|
function BossModel:GetWorldBossWeekGiftByRank( rank_type, rank )
|
|
if not rank_type or not rank then return {} end
|
|
for k,v in pairs(Config.Worldbossweekrank) do
|
|
if v.rank_type == rank_type then
|
|
if v.rank_high <= rank and v.rank_low >= rank then
|
|
return stringtotable(v.award),v
|
|
end
|
|
end
|
|
end
|
|
return {}
|
|
end
|
|
|
|
function BossModel:GetWorldBossWeekTypeByBossId( boss_id )
|
|
for k,v in pairs(Config.Worldbossinfo) do
|
|
if v.boss_id == boss_id then
|
|
return v.rank_type
|
|
end
|
|
end
|
|
return 1
|
|
end
|
|
|
|
function BossModel:GetWorldBossWeekLvSize( rank_type )
|
|
local max_lv = 0
|
|
local min_lv = 99999
|
|
for k,v in pairs(Config.Worldbossinfo) do
|
|
if rank_type == v.rank_type then
|
|
max_lv = max_lv > v.boss_lv and max_lv or v.boss_lv
|
|
min_lv = min_lv < v.boss_lv and min_lv or v.boss_lv
|
|
end
|
|
end
|
|
return min_lv,max_lv
|
|
end
|
|
|
|
function BossModel:GetWorldBossRankTabData( )
|
|
if not self.world_boss_rank_tab_list then
|
|
local list = {}
|
|
for k,v in pairs(Config.Worldbossweekrank) do
|
|
if v.rank_high == 1 and v.rank_low == 1 then
|
|
list[v.rank_type] = DeepCopy(v)
|
|
end
|
|
end
|
|
local function sort_call( a,b )
|
|
return a.rank_type < b.rank_type
|
|
end
|
|
table.sort( list, sort_call )
|
|
self.world_boss_rank_tab_list = list
|
|
end
|
|
return self.world_boss_rank_tab_list
|
|
end
|
|
|
|
function BossModel:GetWorldBossLimitLv( boss_id )
|
|
if not boss_id then return 0 end
|
|
if self:GetWorldBossConf( boss_id ) then
|
|
return self:GetWorldBossConf( boss_id ).boss_lv
|
|
end
|
|
end
|
|
|
|
function BossModel:GetMoneyBossConf( boss_id )
|
|
if boss_id then
|
|
return Config.Rewardbossinfo[boss_id]
|
|
else
|
|
return Config.Rewardbossinfo
|
|
end
|
|
end
|
|
|
|
function BossModel:GetMoneyBossLimitLv( boss_id )
|
|
if not boss_id then return 0 end
|
|
local conf = self:GetMoneyBossConf( boss_id )
|
|
return conf and conf.enter_lv or 0
|
|
end
|
|
|
|
function BossModel:GetMoneyBossInfo( )
|
|
return self.money_boss_info
|
|
end
|
|
function BossModel:SetMoneyBossInfo( boss_id,reborn_time,killer,is_focus,kill_count)
|
|
if boss_id then
|
|
-------------------------
|
|
if self.money_boss_info[boss_id] and (not kill_count) then
|
|
kill_count = self.money_boss_info[boss_id].kill_count
|
|
end
|
|
-------------------------
|
|
if is_focus then
|
|
self.money_boss_info[boss_id] = {
|
|
boss_id = boss_id,reborn_time = reborn_time,killer = killer,is_focus = is_focus,kill_count = kill_count
|
|
}
|
|
else
|
|
is_focus = self.money_boss_info[boss_id] and self.money_boss_info[boss_id].is_focus or 0
|
|
self.money_boss_info[boss_id] = {
|
|
boss_id = boss_id,reborn_time = reborn_time,killer = killer,is_focus = is_focus,kill_count = kill_count
|
|
}
|
|
end
|
|
-------------------------
|
|
--额外增加关注的处理
|
|
self:SetFocusClockData( boss_id,reborn_time,is_focus )
|
|
-------------------------
|
|
end
|
|
end
|
|
|
|
function BossModel:SetDesertedBossInfo( boss_id,reborn_time,killer,is_focus,kill_count)
|
|
if boss_id then
|
|
-------------------------
|
|
if self.deserted_boss_info[boss_id] and (not kill_count) then
|
|
kill_count = self.deserted_boss_info[boss_id].kill_count
|
|
end
|
|
-------------------------
|
|
if is_focus then
|
|
self.deserted_boss_info[boss_id] = {
|
|
boss_id = boss_id,reborn_time = reborn_time,killer = killer,is_focus = is_focus,kill_count = kill_count
|
|
}
|
|
else
|
|
is_focus = self.deserted_boss_info[boss_id] and self.deserted_boss_info[boss_id].is_focus or 0
|
|
self.deserted_boss_info[boss_id] = {
|
|
boss_id = boss_id,reborn_time = reborn_time,killer = killer,is_focus = is_focus,kill_count = kill_count
|
|
}
|
|
end
|
|
-------------------------
|
|
--额外增加关注的处理
|
|
self:SetFocusClockData( boss_id,reborn_time,is_focus )
|
|
-------------------------
|
|
end
|
|
end
|
|
|
|
function BossModel:ChangeBossFocusStatus( boss_id, op_type )
|
|
local reborn_time = false
|
|
for k,v in pairs(self.money_boss_info) do
|
|
if v.boss_id == boss_id then
|
|
v.is_focus = op_type
|
|
reborn_time = v.reborn_time
|
|
break
|
|
end
|
|
end
|
|
for k,v in pairs(self.deserted_boss_info) do
|
|
if v.boss_id == boss_id then
|
|
v.is_focus = op_type
|
|
reborn_time = v.reborn_time
|
|
break
|
|
end
|
|
end
|
|
-------------------------
|
|
--额外增加关注的处理
|
|
if reborn_time then
|
|
self:SetFocusClockData( boss_id,reborn_time,op_type )
|
|
end
|
|
-------------------------
|
|
end
|
|
|
|
--赏金幻魔剩余次数和总次数
|
|
function BossModel:GetMoneyLeftCount( )
|
|
local my_data = self:GetMoneyBossMyInfo()
|
|
local my_count = my_data and my_data.daily_award or 0
|
|
local all_count = BossModel:GetInstance():GetBossKeyValue( "reward_boss_count" )
|
|
if my_data and my_data.goods_times then
|
|
--加入了道具卡,可以使用物品增加最大次数
|
|
all_count = all_count + my_data.goods_times
|
|
end
|
|
local buff_kind = OperateActivityModel.MaterialSubmitBuffKind.BOSS_ADD_TIME --是否存在活动加成buff 挑战次数+1
|
|
local buff_cfg,buff_info = OperateActivityModel:getInstance():GetMaterialBuffInfoByKind(buff_kind)
|
|
if buff_cfg and buff_info then
|
|
local sec = buff_info.etime - TimeUtil:getServerTime( )
|
|
if sec > 0 then
|
|
local have_time = 1
|
|
for k,v in pairs(buff_info.used) do
|
|
if v.kdata == 3 and v.vdata == 1 then--赏金幻魔boss还有次数
|
|
have_time = 0
|
|
break
|
|
end
|
|
end
|
|
if have_time > 0 then
|
|
all_count = all_count + 1
|
|
end
|
|
end
|
|
end
|
|
return all_count - my_count > 0 and all_count - my_count or 0,all_count
|
|
end
|
|
|
|
--赏金幻魔boss是否还有次数剩余
|
|
function BossModel:IsTodayMoneyHaveLeftCount(boss_id)
|
|
local left_count, all_count = self:GetMoneyLeftCount()
|
|
if left_count == 0 and boss_id then
|
|
local ser_data = false
|
|
for k,v in pairs(self:GetMoneyBossInfo()) do
|
|
if v.boss_id == boss_id then
|
|
ser_data = v
|
|
end
|
|
end
|
|
if ser_data and ser_data.kill_count == 0 then
|
|
left_count = left_count + 1
|
|
end
|
|
end
|
|
return left_count > 0
|
|
end
|
|
|
|
function BossModel:GetMoneyBossMyInfo( )
|
|
return self.money_boss_my_info
|
|
end
|
|
function BossModel:SetMoneyBossMyInfo( value )
|
|
self.money_boss_my_info = value
|
|
|
|
--刷新赏金boss次数时,同步一下日常任务
|
|
DailyModel.getInstance():Fire(DailyModel.REQUEST_CCMD_EVENT, 15701, DailyActivityType.Limit)
|
|
DailyModel.getInstance():Fire(DailyModel.REQUEST_CCMD_EVENT, 15701, DailyActivityType.UnLimit)
|
|
end
|
|
|
|
function BossModel:GetMoneyBossKillHistory( )
|
|
return self.money_boss_kill_history
|
|
end
|
|
function BossModel:SetMoneyBossKillHistory( value )
|
|
self.money_boss_kill_history = value
|
|
end
|
|
|
|
function BossModel:GetMoneyInspireCount( boss_id )
|
|
if not boss_id then return end
|
|
return self.money_inspire_count[boss_id]
|
|
end
|
|
function BossModel:SetMoneyInspireCount( boss_id,by_gold,by_bgold )
|
|
self.money_inspire_count[boss_id] = {boss_id = boss_id,by_gold = by_gold,by_bgold = by_bgold}
|
|
end
|
|
|
|
function BossModel:GetWorldBossProtectMax( boss_id )
|
|
if not boss_id then return end
|
|
return self.world_boss_protect_max[boss_id]
|
|
end
|
|
function BossModel:SetWorldBossProtectMax( data )
|
|
if not data then return end
|
|
self.world_boss_protect_max[data.boss_id] = data
|
|
end
|
|
|
|
function BossModel:GetMoneyHelperInfo( )
|
|
return self.money_helper_info
|
|
end
|
|
|
|
function BossModel:SetMoneyHelperInfo( data,remove_id )
|
|
if remove_id then
|
|
self.money_helper_info[remove_id] = nil
|
|
return
|
|
end
|
|
if not data then return end
|
|
self.money_helper_info[data.role_id] = data
|
|
end
|
|
|
|
function BossModel:GetCurFightBossId( )
|
|
if SceneManager:getInstance():IsFakeBossMoneyScene() then
|
|
return BossModel.FAKE_MONEY_BOSS_ID
|
|
end
|
|
return self.cur_fight_boss_id
|
|
end
|
|
function BossModel:SetCurFightBossId( value )
|
|
self.cur_fight_boss_id = value
|
|
end
|
|
|
|
--关注计时器列表数据的处理
|
|
function BossModel:SetFocusClockData( boss_id,reborn_time,is_focus )
|
|
if is_focus == 1 then
|
|
if reborn_time == 0 then
|
|
--复活了就不用管了,重置数据
|
|
self.boss_focus_check_list[boss_id] = nil
|
|
self.boss_focus_tip_cd_list[boss_id] = nil
|
|
else
|
|
local curTime = TimeUtil:getServerTime()
|
|
if reborn_time > curTime then
|
|
self.boss_focus_check_list[boss_id] = reborn_time
|
|
else
|
|
--容错重置
|
|
self.boss_focus_check_list[boss_id] = nil
|
|
self.boss_focus_tip_cd_list[boss_id] = nil
|
|
end
|
|
end
|
|
|
|
else
|
|
--没关注重置数据
|
|
self.boss_focus_check_list[boss_id] = nil
|
|
self.boss_focus_tip_cd_list[boss_id] = nil
|
|
end
|
|
end
|
|
|
|
function BossModel:SetFocusClock( )
|
|
local function clockFun()
|
|
local curTime = TimeUtil:getServerTime()
|
|
for k,v in pairs(self.boss_focus_check_list) do
|
|
if v <= curTime + self.money_focus_tip_time and (not self.boss_focus_tip_cd_list[k]) then
|
|
self:Fire(BossConst.OPEN_BOSS_RELIVE_TIP,k)
|
|
-------------------------
|
|
--设定tipCD
|
|
self.boss_focus_tip_cd_list[k] = self.money_focus_tip_time + 5
|
|
end
|
|
end
|
|
-------------------------
|
|
--跑tip的cd并删除无用cd
|
|
for k,v in pairs(self.boss_focus_tip_cd_list) do
|
|
v = v - 1
|
|
if v == 0 then
|
|
self.boss_focus_tip_cd_list[k] = nil--删除无用cd
|
|
end
|
|
end
|
|
-------------------------
|
|
|
|
end
|
|
self.focus_clock_id = self.focus_clock_id or GlobalTimerQuest:AddPeriodQuest(clockFun, 1, -1)
|
|
end
|
|
|
|
function BossModel: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
|
|
|
|
function BossModel:GetShortNameStr( str )
|
|
str = str or ""
|
|
if SubStringGetTotalIndex(str) > 8 then
|
|
return SubStringUTF8(str, 1, 8) .. "..."
|
|
else
|
|
return str
|
|
end
|
|
end
|
|
|
|
function BossModel:SetHelpClock()
|
|
if not self.help_clock_Id then
|
|
self.help_clock = 5
|
|
local function step_method( ... )
|
|
self.help_clock = self.help_clock -1
|
|
if self.help_clock <= 0 then
|
|
--倒计时结束
|
|
self:CloseHelpClock()
|
|
end
|
|
end
|
|
self.help_clock_Id = GlobalTimerQuest:AddPeriodQuest(step_method, 1, -1)
|
|
end
|
|
end
|
|
|
|
function BossModel:CloseHelpClock()
|
|
self.help_clock = 0
|
|
if self.help_clock_Id then
|
|
GlobalTimerQuest:CancelQuest(self.help_clock_Id)
|
|
self.help_clock_Id = nil
|
|
end
|
|
end
|
|
|
|
--boss自己的总伤害(只在组队状态下有用)
|
|
function BossModel:GetMyHurtOnly( )
|
|
return self.my_hurt_only
|
|
end
|
|
function BossModel:SetMyHurtOnly( value )
|
|
self.my_hurt_only = value
|
|
end
|
|
--废都右边伤害列表
|
|
function BossModel:SetDesertedBossRankInfo( vo )
|
|
self.deserted_boss_rank_info[vo.boss_id] = vo
|
|
self:SetCurFightBossId(vo.boss_id)
|
|
self:Fire(BossConst.ANS_DESERTED_RANK_INFO)
|
|
end
|
|
|
|
function BossModel:GetDesertedBossRankInfo( boss_id )
|
|
return self.deserted_boss_rank_info[boss_id]
|
|
end
|
|
|
|
function BossModel:CleanDesertedBossRankInfoById( boss_id )
|
|
self.deserted_boss_rank_info[boss_id] = nil
|
|
end
|
|
|
|
--星域幻魔每日次数
|
|
function BossModel:SetDesertedBossNumInfo( vo )
|
|
self.deserted_boss_num_info = vo
|
|
self:ChangeVar("deserted_boss_num_info", self.deserted_boss_num_info, false, true)
|
|
end
|
|
|
|
function BossModel:GetDesertedBossNumInfo( )
|
|
return self.deserted_boss_num_info
|
|
end
|
|
|
|
--获得星域幻魔剩余次数
|
|
function BossModel:GetDesertedBossRestNum( )
|
|
local time_info = self:GetDesertedBossNumInfo()
|
|
if not time_info then
|
|
return 0,0
|
|
end
|
|
local boss_time = time_info.boss_count or 0
|
|
local mon_time = time_info.mon_count or 0
|
|
local rest_boss_time = self.total_deserted_boss_time - boss_time
|
|
local rest_mon_time = self.total_deserted_mon_time - mon_time
|
|
return rest_boss_time, rest_mon_time
|
|
end
|
|
|
|
function BossModel:GetDesertedBossInfo( boss_id )
|
|
if boss_id then
|
|
return self.deserted_boss_info[boss_id]
|
|
else
|
|
return self.deserted_boss_info
|
|
end
|
|
end
|
|
|
|
function BossModel:InitDesertedBossCFG( )
|
|
self.deserted_boss_cfg = {}
|
|
local cfg = Config.Desertedbossinfo
|
|
for k,v in pairs(cfg) do
|
|
if not self.deserted_boss_cfg[v.level] then
|
|
self.deserted_boss_cfg[v.level] = {}
|
|
end
|
|
table_insert(self.deserted_boss_cfg[v.level], v)
|
|
end
|
|
for k,v in pairs(self.deserted_boss_cfg) do
|
|
local sort_func = function ( a, b )
|
|
return a.recommend_lv < b.recommend_lv
|
|
end
|
|
table.sort(v, sort_func)
|
|
end
|
|
end
|
|
--根据层数获取boss配置
|
|
function BossModel:GetDesertedBossCFG( level )
|
|
if not level then
|
|
return self.deserted_boss_cfg
|
|
else
|
|
return self.deserted_boss_cfg[level] or {}
|
|
end
|
|
end
|
|
--根据bossid获取boss配置
|
|
function BossModel:GetDesertedBossCFGById( boss_id )
|
|
if boss_id then
|
|
return Config.Desertedbossinfo[boss_id]
|
|
else
|
|
return {}
|
|
end
|
|
end
|
|
--根据星域幻魔_id 获取场景id
|
|
function BossModel:GetDesertedBossSceneById( boss_id )
|
|
local cfg = Config.Desertedbossinfo
|
|
if cfg[boss_id] then
|
|
local level = cfg[boss_id].level
|
|
local scene_cfg = Config.Desertedlevel[level]
|
|
return scene_cfg.scene,scene_cfg.cls_scene
|
|
end
|
|
return 0,0
|
|
end
|
|
|
|
--刷新墓碑
|
|
function BossModel: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.Desertedbossinfo[v.boss_id]
|
|
local scene_id,cs_scene_id = self:GetDesertedBossSceneById(v.boss_id)
|
|
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 or cs_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)
|
|
SceneManager:getInstance():AddGraveVo(grave_vo)
|
|
end
|
|
else
|
|
SceneManager:getInstance():DeleteGraveVo(v.boss_id)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function BossModel:SetNeedFindBoss( boss_id )
|
|
self.need_find_boss_id = boss_id
|
|
end
|
|
|
|
function BossModel:GetNeedFindBoss( )
|
|
return self.need_find_boss_id
|
|
end
|
|
|
|
function BossModel:IsDesertedBoss( boss_id )
|
|
if boss_id and Config.Desertedbossinfo[boss_id] then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
function BossModel:HasDesertedBossRed( )
|
|
if not GetModuleIsOpen(461, 0,true) then
|
|
return false
|
|
end
|
|
local time_info = self:GetDesertedBossNumInfo()
|
|
local boss_time = time_info.boss_count or 0
|
|
local mon_time = time_info.mon_count or 0
|
|
local rest_boss_time = self.total_deserted_boss_time - boss_time
|
|
rest_boss_time = rest_boss_time < 0 and 0 or rest_boss_time
|
|
local rest_mon_time = self.total_deserted_mon_time - mon_time
|
|
rest_mon_time = rest_mon_time < 0 and 0 or rest_mon_time
|
|
return rest_boss_time > 0 or rest_mon_time > 0
|
|
end
|
|
|
|
function BossModel:HasDesertedBossNum( )
|
|
local time_info = self:GetDesertedBossNumInfo()
|
|
local boss_time = time_info.boss_count or 0
|
|
local rest_boss_time = self.total_deserted_boss_time - boss_time
|
|
return rest_boss_time > 0
|
|
end
|
|
|
|
function BossModel:HasBossHomeRed( )
|
|
local boss_home_red = BossHomeModel:getInstance():GetBossHomeRedCache()
|
|
return boss_home_red
|
|
end
|
|
|
|
------------活动boss start-------------
|
|
--活动基础信息
|
|
function BossModel:GetFestivalBossList( )
|
|
return self.festival_boss_list
|
|
end
|
|
function BossModel:SetFestivalBossList( value )
|
|
value.scene_id_list = {}
|
|
for k,v in pairs(value.list) do
|
|
value.scene_id_list[v.scene_id] = {}
|
|
value.scene_id_list[v.scene_id][v.pool_id] = v
|
|
end
|
|
self.festival_boss_list = value
|
|
end
|
|
--当前场景boss信息
|
|
function BossModel:GetFestivalBossSceneList( )
|
|
return self.festival_boss_scene_list
|
|
end
|
|
function BossModel:SetFestivalBossSceneList( value )
|
|
if value then
|
|
value.id_list = {}
|
|
value.scene_id_list = {}
|
|
for k,v in pairs(value.list) do
|
|
value.id_list[v.mon_id] = v
|
|
value.scene_id_list[v.scene_id] = {}
|
|
value.scene_id_list[v.scene_id][v.pool_id] = v
|
|
end
|
|
self.festival_boss_scene_list = value
|
|
else
|
|
self.festival_boss_scene_list = false
|
|
end
|
|
end
|
|
--排名信息
|
|
function BossModel:GetFestivalBossRankInfo( )
|
|
return self.festival_boss_rank_info
|
|
end
|
|
function BossModel:SetFestivalBossRankInfo( value )
|
|
if value then
|
|
self.festival_boss_rank_info = value
|
|
local list_role = {}
|
|
for k,v in pairs(value.rank_list) do
|
|
list_role[v.role_id] = v
|
|
end
|
|
self.festival_boss_rank_info.list_role = list_role
|
|
else
|
|
self.festival_boss_rank_info = false
|
|
end
|
|
end
|
|
------------活动boss end---------------
|
|
--判断是否是废都幻魔的跨服场景
|
|
function BossModel:CheckIsCrossDesertedScene( scene_id )
|
|
if not self.deserted_boss_scene_list then
|
|
self.deserted_boss_scene_list = {}
|
|
local cfg = Config.Desertedlevel
|
|
for i,v in ipairs(cfg) do
|
|
self.deserted_boss_scene_list[v.cls_scene] = true
|
|
end
|
|
end
|
|
return self.deserted_boss_scene_list[scene_id] or false
|
|
end
|
|
--获取废都幻魔第几层
|
|
function BossModel:GetDesertedSceneFloor( scene_id )
|
|
scene_id = scene_id or SceneManager:getInstance():GetSceneId()
|
|
local cfg = Config.Desertedlevel
|
|
for i,v in ipairs(cfg) do
|
|
if v.scene == scene_id or v.cls_scene == scene_id then
|
|
return v.level
|
|
end
|
|
end
|
|
return 0
|
|
end
|
|
|
|
--星域幻魔剩余免费复活次数
|
|
function BossModel:UpdateLeftDesertedBossFreeReliveTimes(vo)
|
|
self.left_free_deserted_boss_relive_times = vo.left_count
|
|
end
|
|
|
|
function BossModel:GetLeftDesertedBossFreeReliveTimes( )
|
|
return self.left_free_deserted_boss_relive_times
|
|
end
|
|
|
|
function BossModel:GetLeftDesertedBossMapShowDataList(level)
|
|
local list = {}
|
|
local all_boss_list = self:GetDesertedBossCFG(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.boss_name)
|
|
table.insert(list, d)
|
|
end
|
|
end
|
|
return list
|
|
end
|
|
|
|
|
|
--设置星域幻魔的当前层精英怪物数量
|
|
function BossModel:SetLeftDesertedMonsterInfo(vo)
|
|
self.deserted_monster_info = vo
|
|
end
|
|
|
|
--设置星域幻魔的当前层精英怪物数量
|
|
function BossModel:SetLeftDesertedMonsterNumber(vo)
|
|
if self.deserted_monster_info and self.deserted_monster_info.boss_info then
|
|
for i,v in ipairs(self.deserted_monster_info.boss_info) do
|
|
if vo.index == v.index then
|
|
v.alive = vo.alive
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--获取星域幻魔的当前层精英怪物数量
|
|
function BossModel:GetLeftDesertedMonsterNumber()
|
|
local cnt = 0
|
|
if self.deserted_monster_info and self.deserted_monster_info.boss_info then
|
|
for i,v in ipairs(self.deserted_monster_info.boss_info) do
|
|
if v.alive == 1 then
|
|
cnt = cnt + 1
|
|
end
|
|
end
|
|
end
|
|
return cnt
|
|
end
|
|
|
|
--包括赏金boss 专属boss 星域boss
|
|
function BossModel:GetBossConfig( boss_id )
|
|
if not boss_id then return end
|
|
local cfg = Config.Rewardbossinfo[boss_id]
|
|
if not cfg then
|
|
cfg = Config.Desertedbossinfo[boss_id]
|
|
end
|
|
|
|
if not cfg then
|
|
--如果走到这里,那就只可能是专属boss,专属boss 有个多星级,要转到1星的id才能拿到配置
|
|
local id = math.floor(boss_id/10 ) * 10 + 1
|
|
cfg = Config.Personalbossinfo[id]
|
|
end
|
|
return cfg
|
|
end
|
|
|
|
--设置boss免战时间
|
|
function BossModel:SetBossProtectTimeInfo(info ,boss_type)
|
|
self.boss_protect_time_info = self.boss_protect_time_info or {}
|
|
self.boss_protect_time_info[boss_type] = info
|
|
end
|
|
|
|
--获取boss免战时间
|
|
function BossModel:GetBossProtectTime(boss_type)
|
|
local time = 0
|
|
local time_info = self.boss_protect_time_info[boss_type]
|
|
if time_info then
|
|
local server_time = TimeUtil:getServerTime()
|
|
if time_info.protect_time > server_time then
|
|
time = time_info.protect_time - server_time
|
|
end
|
|
end
|
|
return time
|
|
end
|
|
|
|
--获取boss免战使用次数
|
|
function BossModel:GetBossProtectUseTime(boss_type)
|
|
local use_times = false
|
|
local time_info = self.boss_protect_time_info[boss_type]
|
|
if time_info then
|
|
use_times = time_info.use_times
|
|
end
|
|
return use_times
|
|
end
|
|
|
|
--获取boss免战使用次数
|
|
function BossModel:GetBossProtectMaxUseTime(boss_type)
|
|
local max_use_time = 1
|
|
return max_use_time
|
|
end
|
|
|
|
--获取boss免战保护时间 **分
|
|
function BossModel:GetBossProtectMaxTime(boss_type)
|
|
local max_time = 15
|
|
local cfg
|
|
if boss_type == BossProtectTipsView.BossType.Deserted then
|
|
cfg = Config.Desertedkv
|
|
if cfg and cfg["role_protect_time"] then
|
|
max_time = (cfg["role_protect_time"].val) / 60
|
|
end
|
|
else
|
|
cfg = Config.Localbosskv
|
|
if cfg and cfg["role_protect_time"] then
|
|
max_time = (cfg["role_protect_time"].value_content) / 60
|
|
end
|
|
end
|
|
return max_time
|
|
end
|
|
|
|
--是否满足新手假赏金BOSS的条件
|
|
function BossModel:IsMatchFakeMoneyBoss( )
|
|
--等级满足,接到任务且进度未完成
|
|
local role_lv = RoleManager.Instance.mainRoleInfo.level
|
|
if role_lv >= BossModel.FAKE_MONEY_BOSS_MIN_LEVEL and role_lv <= BossModel.FAKE_MONEY_BOSS_MAX_LEVEL then
|
|
local task = TaskModel:getInstance():GetReceivedTaskById(BossModel.FAKE_MONEY_BOSS_TASK_ID)
|
|
if task and not TaskModel:getInstance():IsTaskProgressFinish(task) then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
|
|
function BossModel:GetPersonBossLeftCount( )
|
|
if not GetModuleIsOpen(460, Config.ConfigBoss.ModuleId.Person, true) then
|
|
return 0
|
|
end
|
|
local dungeon_list = BaseDungeonModel:GetInstance():GetDunProtoInfo( BaseDungeonModel.DUN_TYPE.PersonBoss )
|
|
local boss_type_count = self:GetBossNormalCount(Config.ConfigBoss.ModuleId.Person)
|
|
if dungeon_list and dungeon_list[1] then
|
|
local max_time = boss_type_count + dungeon_list[1].vip_count
|
|
local vip_pass_count = 0--购买的vip次数使用过的次数
|
|
for k, v in pairs(dungeon_list[1].rec_data) do
|
|
if v.key == 8 then
|
|
vip_pass_count = v.val
|
|
end
|
|
end
|
|
local day_use = dungeon_list[1].day_pass_count+vip_pass_count
|
|
return max_time-day_use
|
|
end
|
|
return 0
|
|
end
|
|
|
|
--获取总的boss剩余挑战次数
|
|
function BossModel:GetAllBossNum( )
|
|
local money_boss_num, person_boss_num, deserted_boss_num, boss_home_num = 0, 0, 0, 0
|
|
|
|
--赏金boss
|
|
if not GetModuleIsOpen(460, Config.ConfigBoss.ModuleId.Money, true) then
|
|
money_boss_num = 0
|
|
else
|
|
money_boss_num = self:GetMoneyLeftCount()
|
|
end
|
|
|
|
--专属boss
|
|
person_boss_num = self:GetPersonBossLeftCount()
|
|
|
|
--星域boss
|
|
if not GetModuleIsOpen(461, 0, true) then
|
|
deserted_boss_num = 0
|
|
else
|
|
deserted_boss_num = self:GetDesertedBossRestNum()
|
|
end
|
|
|
|
--boss之家
|
|
-- boss_home_num = self:HasBossHomeRed() and 1 or 0
|
|
|
|
return money_boss_num + person_boss_num + deserted_boss_num + boss_home_num
|
|
end
|
|
|
|
--获取赏金boss次数购买信息
|
|
function BossModel:GetBossMoneyBuyCount( )
|
|
local use_count, all_count = 0, 0
|
|
local need_money = 0
|
|
local cfg = Config.Localbosskv["reward_boss_count_recovery"]
|
|
local cfg_value = stringtotable(cfg.value_content) or {}
|
|
all_count = #cfg_value
|
|
local boss_money_info = self:GetMoneyBossMyInfo()
|
|
if boss_money_info and boss_money_info.recover_time then
|
|
use_count = boss_money_info.recover_time
|
|
end
|
|
for i,v in ipairs(cfg_value) do
|
|
if v[1] > use_count then
|
|
need_money = v[2]
|
|
break
|
|
end
|
|
end
|
|
local left_count = all_count-use_count > 0 and all_count-use_count or 0
|
|
return left_count, all_count, need_money
|
|
end
|
|
|
|
-- --更新幻魔星域BOSS挑战次数
|
|
-- function BossModel:UpdateDesertedBossHaveTimes( )
|
|
-- self.total_deserted_boss_time = Config.Desertedkv["feidu_boss_times"].val
|
|
-- local buff_kind = OperateActivityModel.MaterialSubmitBuffKind.BOSS_ADD_TIME --是否存在活动加成buff 挑战次数+1
|
|
-- local buff_cfg,buff_info = OperateActivityModel:getInstance():GetMaterialBuffInfoByKind(buff_kind)
|
|
-- if buff_cfg and buff_info then
|
|
-- local sec = buff_info.etime - TimeUtil:getServerTime( )
|
|
-- if sec > 0 then
|
|
-- local have_time = 0
|
|
-- for k,v in pairs(buff_info.used) do
|
|
-- if v.kdata == 9 and v.vdata == 0 then--废土boss还有次数
|
|
-- have_time = 1
|
|
-- break
|
|
-- end
|
|
-- end
|
|
-- if have_time > 0 then
|
|
-- self.total_deserted_boss_time = Config.Desertedkv["feidu_boss_times"].val + 1
|
|
-- local sec = buff_info.etime - TimeUtil:getServerTime( )
|
|
-- self:ActBuffTimeLate(sec)
|
|
-- end
|
|
-- end
|
|
-- end
|
|
-- BossController.Instance:BossControllerCheckRed( )
|
|
-- end
|
|
|
|
-- --buff结束后刷新boss红点
|
|
-- function BossModel:ActBuffTimeLate( sec )
|
|
-- if self.act_buff_timer_id then
|
|
-- GlobalTimerQuest:CancelQuest(self.act_buff_timer_id)
|
|
-- self.act_buff_timer_id = nil
|
|
-- end
|
|
-- local sec = sec or 0
|
|
-- if sec > 0 then
|
|
-- local function onTimer()
|
|
-- sec = sec - 1
|
|
-- if sec > 0 then
|
|
|
|
-- else
|
|
-- self:UpdateDesertedBossHaveTimes()
|
|
-- GlobalTimerQuest:CancelQuest(self.act_buff_timer_id)
|
|
-- self.act_buff_timer_id = nil
|
|
-- end
|
|
-- end
|
|
-- if not self.act_buff_timer_id then
|
|
-- self.act_buff_timer_id = GlobalTimerQuest:AddPeriodQuest(onTimer, 1, -1)
|
|
-- end
|
|
-- onTimer()
|
|
-- else
|
|
-- self:UpdateDesertedBossHaveTimes()
|
|
-- end
|
|
-- end
|