源战役客户端
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1373 lines
40 KiB

  1. BossModel = BossModel or BaseClass(BaseModel)
  2. -------------------------
  3. BossModel.EVENT_UPDATE_RED_DOT = "BossModel.EVENT_UPDATE_RED_DOT"
  4. BossModel.UPDATE_BOSS_RED_INFO = "BossModel.UPDATE_BOSS_RED_INFO"
  5. -------------------------
  6. BossModel.GRAVE_MONSTER_ID = 1200999 --墓碑怪物ID
  7. --新手假赏金BOSS相关配置
  8. BossModel.FAKE_MONEY_BOSS_SCENE_ID = 2060 --场景id
  9. BossModel.FAKE_MONEY_BOSS_DUN_ID = 3605 --副本id
  10. BossModel.FAKE_MONEY_BOSS_TASK_ID = 11260 --任务id
  11. BossModel.FAKE_MONEY_BOSS_MIN_LEVEL = 90 --等级下限
  12. BossModel.FAKE_MONEY_BOSS_MAX_LEVEL = 119 --等级上限
  13. BossModel.FAKE_MONEY_BOSS_ID = 13010000 --bossid
  14. BossModel.FAKE_MONEY_REWARD_BOSS_ID = 13010001 --奖励展示的bossid
  15. BossModel.BOSS_CARD =
  16. {
  17. REFRESH_MONEY_BOSS_ID = 102323, --赏金幻魔刷新卡
  18. REFRESH_DESERTED_BOSS_ID = 102324, --星域幻魔刷新卡
  19. OWNER_MONEY_BOSS_ID = 102325, --赏金幻魔独享卡
  20. OWNER_DESERTED_BOSS_ID = 102326, --星域幻魔独享卡
  21. }
  22. table_insert = table.insert
  23. function BossModel:__init()
  24. BossModel.Instance = self
  25. self:InitDesertedBossCFG()
  26. self.total_deserted_boss_time = Config.Desertedkv["feidu_boss_times"].val
  27. self.total_deserted_mon_time = Config.Desertedkv["feidu_elite_times"].val
  28. self:ResetData()
  29. end
  30. function BossModel:ResetData( )
  31. self.need_refresh_grave = true
  32. self.need_refresh_grave = false --是否要刷新墓碑
  33. self.perosn_normal_count = false --个人副本每日基础次数
  34. -------------------------
  35. self.world_boss_status = 0 --世界boss活动结束时间
  36. self.world_boss_info = {} --世界boss列表信息
  37. self.world_boss_hp_list = {} --世界boss血量信息
  38. self.world_boss_week_rank_list = {} --世界boss周榜单
  39. self.scene_boss_hp = {}--场景中boss最大血量
  40. self.boss_hurt_info = {}--场景中boss伤害列表
  41. self.money_boss_info = {} --赏金幻魔列表信息
  42. self.money_boss_my_info = {}--赏金幻魔个人信息
  43. self.money_boss_kill_history = {}
  44. self.money_inspire_count = {}--赏金幻魔鼓舞信息
  45. self.world_boss_protect_max = {}--世界boss护盾信息
  46. self.money_helper_info = {}--赏金幻魔协助者伤害
  47. self.boss_focus_check_list = {}--幻魔关注计时器检查列表
  48. self.boss_focus_tip_cd_list = {}--幻魔关注提示冷却时间
  49. self.money_focus_tip_time = 60--赏金幻魔关注提示时间
  50. self.person_boss_list_show_in_hall = false--保存专属幻魔界面的数据列表
  51. self.red_person_boss = false
  52. self.red_money_boss = false
  53. self.need_show_money_result = false--赏金幻魔结算数据
  54. self.my_hurt_only = false--boss自己的总伤害(只在组队状态下有用)
  55. self.left_free_deserted_boss_relive_times = 0 --星域幻魔剩余免费复活次数
  56. self.deserted_boss_rank_info = {}--星域幻魔伤害列表
  57. self.deserted_boss_num_info = {}--星域幻魔剩余次数信息
  58. self.deserted_boss_info = {}--星域幻魔基础信息
  59. self.need_find_boss_id = false--星域幻魔找boss信息
  60. self.deserted_monster_info = {} --星域幻魔找boss 精英怪信息
  61. self.boss_protect_time_info = {}--boss免战时间信息
  62. self:SetFocusClock()
  63. self:InitCheckMoneyRedLvList()
  64. self:InitCheckPersonRedLvList()
  65. self.festival_boss_list = false--节日幻魔基础信息
  66. self.festival_boss_scene_list = false--当前场景boss信息
  67. self.festival_boss_rank_info = false--排名信息
  68. self.boss_equip_tips_view_close_data = false --装备展示界面提示界面,退出关闭数据
  69. end
  70. function BossModel:GetInstance()
  71. if BossModel.Instance == nil then
  72. BossModel.New()
  73. end
  74. return BossModel.Instance
  75. end
  76. function BossModel:GetBossKeyValue( key )
  77. if not key or not Config.Localbosskv[key] then return end
  78. return Config.Localbosskv[key].value_content
  79. end
  80. --根据当前boss_id获取boss类型
  81. function BossModel:GetBossTypeByBossId( boss_id )
  82. if not boss_id then return end
  83. if SceneManager:getInstance():IsFakeBossMoneyScene() then
  84. return Config.ConfigBoss.ModuleId.Money
  85. end
  86. if self:GetWorldBossConf( boss_id ) then
  87. return Config.ConfigBoss.ModuleId.World
  88. elseif self:GetMoneyBossConf( boss_id ) then
  89. return Config.ConfigBoss.ModuleId.Money
  90. elseif self:GetPersonBossList( boss_id ) then
  91. return Config.ConfigBoss.ModuleId.Person
  92. elseif boss_id == GuildModel:getInstance():GetGuildCollectKvByKey("invade_mon").value then
  93. return Config.ConfigBoss.ModuleId.Collect
  94. elseif self:GetDesertedBossCFGById(boss_id) then
  95. return Config.ConfigBoss.ModuleId.Deserted
  96. end
  97. end
  98. --根据当前boss_id获取boss配置
  99. function BossModel:GetBossCfgByBossId( boss_id )
  100. if not boss_id then return end
  101. local boss_cfg = self:GetWorldBossConf( boss_id )
  102. or self:GetMoneyBossConf( boss_id )
  103. or self:GetPersonBossList( boss_id )
  104. or self:GetDesertedBossCFGById(boss_id)
  105. return boss_cfg
  106. end
  107. --刷新墓碑
  108. function BossModel:UpdateSceneGrave(vo)
  109. do return end
  110. -------------------------
  111. if not vo or not vo.boss_info then return end
  112. local boss_info = vo.boss_info
  113. if boss_info then
  114. local cur_scene_id = SceneManager.Instance:GetSceneId()
  115. for _, v in ipairs(boss_info) do
  116. if v.reborn_time > 0 then --复活结束时间戳>0说明怪物已经死亡
  117. local x, y
  118. local cfg = Config.Bosscfg[v.boss_id]
  119. local scene_id = 0
  120. if cfg then
  121. x = tonumber(cfg.x)
  122. y = tonumber(cfg.y)
  123. scene_id = tonumber(cfg.scene)
  124. end
  125. local monCfg = ConfigItemMgr.Instance:GetMonsterDataItem(v.boss_id)
  126. if x and y and monCfg and (scene_id == cur_scene_id) then
  127. local grave_vo = GraveVo.New()
  128. local data = {}
  129. data.instance_id = v.boss_id
  130. data.type_id = BossModel.GRAVE_MONSTER_ID
  131. data.boss_id = v.boss_id
  132. data.name = monCfg.name
  133. data.level = monCfg.lv
  134. data.refresh_time = math.ceil(v.reborn_time - TimeUtil:getServerTime())
  135. data.pos_x = x
  136. data.pos_y = y
  137. grave_vo:SetGraveVo(data)
  138. SceneManager:getInstance():AddGraveVo(grave_vo)
  139. end
  140. else
  141. SceneManager:getInstance():DeleteGraveVo(v.boss_id)
  142. end
  143. end
  144. end
  145. end
  146. --boss图标是否有红点
  147. function BossModel:HasBossRed( check_new )
  148. local bool_1 = self:HasPersonBossRed( check_new )
  149. -- local bool_2 = self:HasWorldBossRed( check_new )
  150. local bool_3 = self:HasMoneyBossRed( check_new )
  151. local bool_4 = self:HasDesertedBossRed(check_new)
  152. local bool_5 = self:HasBossHomeRed()
  153. return bool_1 or bool_2 or bool_3 or bool_4 or bool_5
  154. end
  155. function BossModel:HasPersonBossRed( check_new,mask_first )
  156. if not GetModuleIsOpen(460, Config.ConfigBoss.ModuleId.Person, true) then
  157. return false
  158. end
  159. if check_new then
  160. local dungeon_list = BaseDungeonModel:GetInstance():GetDunProtoInfo( BaseDungeonModel.DUN_TYPE.PersonBoss )
  161. local boss_type_count = self:GetBossNormalCount(Config.ConfigBoss.ModuleId.Person)
  162. if dungeon_list and dungeon_list[1] then
  163. local max_time = boss_type_count + dungeon_list[1].vip_count
  164. local vip_pass_count = 0--购买的vip次数使用过的次数
  165. for k, v in pairs(dungeon_list[1].rec_data) do
  166. if v.key == 8 then
  167. vip_pass_count = v.val
  168. end
  169. end
  170. local day_use = dungeon_list[1].day_pass_count+vip_pass_count
  171. self.red_person_boss = max_time-day_use > 0
  172. end
  173. end
  174. local can_first_pass = false
  175. if not mask_first then
  176. can_first_pass = self:GetPersonBossFirstPassRed()
  177. end
  178. return self.red_person_boss or can_first_pass
  179. end
  180. function BossModel:InitCheckPersonRedLvList( )
  181. self.check_red_person_lv = {}
  182. for k,v in pairs(self:GetPersonBossList()) do
  183. self.check_red_person_lv[self:GetPersonBossLimitLv(v.boss_id)] = true
  184. end
  185. end
  186. function BossModel:GetPersonBossFirstPassRed( )
  187. if not GetModuleIsOpen(460, Config.ConfigBoss.ModuleId.Person, true) then
  188. return false
  189. end
  190. --判断首次通关红点
  191. local my_lv = RoleManager.Instance.mainRoleInfo.level
  192. for k,v in pairs(self:GetPersonBossList()) do
  193. local limit_lv = self:GetPersonBossLimitLv(v.boss_id)
  194. if my_lv >= limit_lv then
  195. if not self:CheckHasPassPersonBoss(v.boss_id) then
  196. return true
  197. end
  198. end
  199. end
  200. return false
  201. end
  202. function BossModel:CheckHasPassPersonBoss( boss_id )
  203. local have_kill_pass = true --是否已经通关过
  204. -------------------------
  205. --获取副本数据
  206. local conf_boss = self:GetPersonBossList( boss_id )
  207. local dungeon_list = BaseDungeonModel:GetInstance():GetDunProtoInfo( BaseDungeonModel.DUN_TYPE.PersonBoss )
  208. if (not conf_boss) or (not dungeon_list) then
  209. have_kill_pass = true
  210. return have_kill_pass
  211. end
  212. -------------------------
  213. local need_dun_info = false
  214. for k,v in pairs(dungeon_list) do
  215. if v.dun_id == conf_boss.dun_id then
  216. need_dun_info = v
  217. break
  218. end
  219. end
  220. if not need_dun_info then
  221. have_kill_pass = true
  222. return have_kill_pass
  223. end
  224. -------------------------
  225. local first_pass_status = need_dun_info.is_pass--0未通关|1已通关
  226. if first_pass_status == 1 then
  227. have_kill_pass = true
  228. else
  229. have_kill_pass = false
  230. end
  231. return have_kill_pass
  232. end
  233. function BossModel:HasWorldBossRed( check_new )
  234. if not GetModuleIsOpen(460, Config.ConfigBoss.ModuleId.World,true) then
  235. return false
  236. end
  237. -------------------------
  238. return false
  239. end
  240. function BossModel:HasMoneyBossRed( check_new,mask_first )
  241. if not GetModuleIsOpen(460, Config.ConfigBoss.ModuleId.Money,true) then
  242. return false
  243. end
  244. if check_new then
  245. self.red_money_boss = self:GetMoneyLeftCount() > 0
  246. end
  247. -------------------------
  248. local can_first_pass = false
  249. if not mask_first then
  250. can_first_pass = self:GetMoneyBossFirstPassRed()
  251. end
  252. -------------------------
  253. return self.red_money_boss or can_first_pass
  254. end
  255. function BossModel:GetMoneyBossFirstPassRed( )
  256. if not GetModuleIsOpen(460, Config.ConfigBoss.ModuleId.Money,true) then
  257. return false
  258. end
  259. --判断首次通关红点
  260. local my_lv = RoleManager.Instance.mainRoleInfo.level
  261. for k,v in pairs(self:GetMoneyBossConf()) do
  262. local limit_lv = self:GetMoneyBossLimitLv(v.boss_id)
  263. if my_lv >= limit_lv then
  264. local ser_data = false
  265. for kk,vv in pairs(self:GetMoneyBossInfo()) do
  266. if vv.boss_id == v.boss_id then
  267. ser_data = vv
  268. break
  269. end
  270. end
  271. if ser_data and ser_data.kill_count == 0 then
  272. return true
  273. end
  274. end
  275. end
  276. return false
  277. end
  278. function BossModel:InitCheckMoneyRedLvList( )
  279. self.check_red_money_lv = {}
  280. for k,v in pairs(self:GetMoneyBossConf()) do
  281. self.check_red_money_lv[self:GetMoneyBossLimitLv(v.boss_id)] = true
  282. end
  283. end
  284. --专属幻魔的显示列表
  285. function BossModel:GetPersonBossList( boss_id )
  286. if boss_id then
  287. return Config.Personalbossinfo[boss_id]
  288. else
  289. return Config.Personalbossinfo
  290. end
  291. end
  292. function BossModel:GetPersonBossLimitLv( boss_id )
  293. if not boss_id then return 999 end
  294. local data = self:GetPersonBossList()
  295. if data[boss_id] then
  296. local dun_cfg = BaseDungeonModel:GetInstance():GetDunCfg( data[boss_id].dun_id )
  297. if dun_cfg then
  298. local temp = dun_cfg.condition
  299. for k,v in pairs(temp) do
  300. if v[1] == "lv" then
  301. return tonumber(v[2])
  302. end
  303. end
  304. end
  305. end
  306. return 999
  307. end
  308. --获取系统推荐的Boss选择
  309. function BossModel:GetRecommendPersonBossId( )
  310. local lower_cfg = false--最低战力boss
  311. local select_cfg = false--选择战力boss
  312. local lv_range = false--等级范围
  313. local my_lv = RoleManager.Instance.mainRoleInfo.level
  314. local my_fight = RoleManager.Instance.mainRoleInfo.fighting
  315. local default_id = 1
  316. for k,v in pairs(Config.Personalbossinfo) do
  317. if v.grade and v.grade == 1 then
  318. default_id = v.boss_id
  319. end
  320. lv_range = stringtotable(v.recommend_lv)
  321. if my_lv >= tonumber(lv_range[1][1]) and my_lv <= tonumber(lv_range[1][2]) then
  322. --如果该等级段玩家一个战力都不符合,则选中该等级段下战力最小的那个作为推荐boss
  323. lower_cfg = lower_cfg and (lower_cfg.recommend_power > v.recommend_power and v or lower_cfg) or v
  324. -------------------------
  325. if my_fight >= v.recommend_power then
  326. --先找到符合玩家等级的所有boss,然后找到玩家能打的最高战力boss作为推荐boss
  327. select_cfg = select_cfg and (select_cfg.recommend_power > v.recommend_power and select_cfg or v) or v
  328. end
  329. end
  330. end
  331. if select_cfg then
  332. return select_cfg.boss_id
  333. elseif lower_cfg then
  334. return lower_cfg.boss_id
  335. else
  336. return default_id
  337. end
  338. end
  339. function BossModel:GetBossNormalCount( boss_type )
  340. if boss_type == Config.ConfigBoss.ModuleId.Person then
  341. if not self.perosn_normal_count then
  342. for k,v in pairs(Config.Dungeoncfg) do
  343. if v.type == BaseDungeonModel.DUN_TYPE.PersonBoss then
  344. for a,b in pairs(stringtotable(v.count_cond)) do
  345. if b[1] == 1 then
  346. self.perosn_normal_count = b[2]
  347. end
  348. end
  349. if self.perosn_normal_count then
  350. break
  351. end
  352. end
  353. end
  354. end
  355. -------------------------
  356. return self.perosn_normal_count or 0
  357. end
  358. return 0
  359. end
  360. --离开场景清除数据
  361. function BossModel:LeaveSceneClear( type_id )
  362. self.boss_hurt_info = {}
  363. self.scene_boss_hp = {}
  364. self.my_hurt_only = false
  365. if type_id == Config.ConfigBoss.ModuleId.World then
  366. self.world_boss_protect_max = {}
  367. elseif type_id == Config.ConfigBoss.ModuleId.Money then
  368. self.money_helper_info = {}
  369. end
  370. end
  371. function BossModel:GetIsBossById( id )
  372. if not id then return end
  373. return Config.Personalbossinfo[id]
  374. end
  375. function BossModel:GetWorldBossStatus( )
  376. return self.world_boss_status or 0
  377. end
  378. function BossModel:SetWorldBossStatus( value )
  379. self.world_boss_status = value
  380. end
  381. function BossModel:GetWorldOneBossStatus( boss_id )
  382. if not self:GetWorldBossInfo().boss_info then return end
  383. local ser_data = false
  384. for k,v in pairs(self:GetWorldBossInfo().boss_info) do
  385. if v.boss_id == boss_id then
  386. ser_data = v
  387. end
  388. end
  389. if not ser_data then return end
  390. return ser_data.status
  391. end
  392. function BossModel:GetWorldBossInfo( )
  393. return self.world_boss_info or {}
  394. end
  395. function BossModel:SetWorldBossInfo( value )
  396. self.world_boss_info = value
  397. end
  398. function BossModel:SetWorldBossInfoOne( data )
  399. if data and data.boss_id then
  400. if self.world_boss_info and self.world_boss_info.boss_info then
  401. for k,v in pairs(self.world_boss_info.boss_info) do
  402. if v.boss_id == data.boss_id then
  403. v.status = data.status
  404. return true
  405. end
  406. end
  407. end
  408. end
  409. return false
  410. end
  411. function BossModel:GetWorldBossHp( boss_id )
  412. if not boss_id then return end
  413. return self.world_boss_hp_list[boss_id]
  414. end
  415. function BossModel:SetWorldBossHpList( value )
  416. if value then
  417. self.world_boss_hp_list[value.boss_id] = value
  418. end
  419. end
  420. function BossModel:GetWorldBossWeekRankList( show_week_type )
  421. if not show_week_type then return end
  422. return self.world_boss_week_rank_list[show_week_type]
  423. end
  424. function BossModel:SetWorldBossWeekRankList( value )
  425. if value then
  426. self.world_boss_week_rank_list[value.boss_id] = {list = value.rank_list,my_score = value.my_score}
  427. end
  428. end
  429. function BossModel:GetBossHurtInfo( type_id,role_id )
  430. if not type_id then return end
  431. if self.boss_hurt_info[type_id] then
  432. if role_id then
  433. return self.boss_hurt_info[type_id][role_id]
  434. else
  435. return self.boss_hurt_info[type_id]
  436. end
  437. end
  438. return {}
  439. end
  440. function BossModel:GetSceneBossHp( type_id )
  441. return self.scene_boss_hp[type_id] or 0
  442. end
  443. function BossModel:ResetBossHurtInfo( type_id )
  444. if not type_id then return end
  445. self.boss_hurt_info[type_id] = {}
  446. self.scene_boss_hp[type_id] = 0
  447. end
  448. function BossModel:SetBossHurtInfo( boss_id,role_id,name,hurt,boss_hp,type )
  449. if not boss_id then return end
  450. local type_id = self:GetBossTypeByBossId(boss_id)
  451. if role_id and hurt and name and type_id then
  452. self.boss_hurt_info[type_id] = self.boss_hurt_info[type_id] or {}
  453. self.boss_hurt_info[type_id][role_id] =
  454. {
  455. ["role_id"] = role_id,
  456. ["name"] = name,
  457. ["hurt"] = hurt,
  458. ["type"] = type,
  459. }
  460. end
  461. if boss_hp and type_id then
  462. self.scene_boss_hp[type_id] = boss_hp
  463. end
  464. end
  465. function BossModel:GetWorldBossConf( boss_id )
  466. if boss_id then
  467. return Config.Worldbossinfo[boss_id]
  468. else
  469. return Config.Worldbossinfo
  470. end
  471. end
  472. function BossModel:GetWorldBossWeekGiftByRank( rank_type, rank )
  473. if not rank_type or not rank then return {} end
  474. for k,v in pairs(Config.Worldbossweekrank) do
  475. if v.rank_type == rank_type then
  476. if v.rank_high <= rank and v.rank_low >= rank then
  477. return stringtotable(v.award),v
  478. end
  479. end
  480. end
  481. return {}
  482. end
  483. function BossModel:GetWorldBossWeekTypeByBossId( boss_id )
  484. for k,v in pairs(Config.Worldbossinfo) do
  485. if v.boss_id == boss_id then
  486. return v.rank_type
  487. end
  488. end
  489. return 1
  490. end
  491. function BossModel:GetWorldBossWeekLvSize( rank_type )
  492. local max_lv = 0
  493. local min_lv = 99999
  494. for k,v in pairs(Config.Worldbossinfo) do
  495. if rank_type == v.rank_type then
  496. max_lv = max_lv > v.boss_lv and max_lv or v.boss_lv
  497. min_lv = min_lv < v.boss_lv and min_lv or v.boss_lv
  498. end
  499. end
  500. return min_lv,max_lv
  501. end
  502. function BossModel:GetWorldBossRankTabData( )
  503. if not self.world_boss_rank_tab_list then
  504. local list = {}
  505. for k,v in pairs(Config.Worldbossweekrank) do
  506. if v.rank_high == 1 and v.rank_low == 1 then
  507. list[v.rank_type] = DeepCopy(v)
  508. end
  509. end
  510. local function sort_call( a,b )
  511. return a.rank_type < b.rank_type
  512. end
  513. table.sort( list, sort_call )
  514. self.world_boss_rank_tab_list = list
  515. end
  516. return self.world_boss_rank_tab_list
  517. end
  518. function BossModel:GetWorldBossLimitLv( boss_id )
  519. if not boss_id then return 0 end
  520. if self:GetWorldBossConf( boss_id ) then
  521. return self:GetWorldBossConf( boss_id ).boss_lv
  522. end
  523. end
  524. function BossModel:GetMoneyBossConf( boss_id )
  525. if boss_id then
  526. return Config.Rewardbossinfo[boss_id]
  527. else
  528. return Config.Rewardbossinfo
  529. end
  530. end
  531. function BossModel:GetMoneyBossLimitLv( boss_id )
  532. if not boss_id then return 0 end
  533. local conf = self:GetMoneyBossConf( boss_id )
  534. return conf and conf.enter_lv or 0
  535. end
  536. function BossModel:GetMoneyBossInfo( )
  537. return self.money_boss_info
  538. end
  539. function BossModel:SetMoneyBossInfo( boss_id,reborn_time,killer,is_focus,kill_count)
  540. if boss_id then
  541. -------------------------
  542. if self.money_boss_info[boss_id] and (not kill_count) then
  543. kill_count = self.money_boss_info[boss_id].kill_count
  544. end
  545. -------------------------
  546. if is_focus then
  547. self.money_boss_info[boss_id] = {
  548. boss_id = boss_id,reborn_time = reborn_time,killer = killer,is_focus = is_focus,kill_count = kill_count
  549. }
  550. else
  551. is_focus = self.money_boss_info[boss_id] and self.money_boss_info[boss_id].is_focus or 0
  552. self.money_boss_info[boss_id] = {
  553. boss_id = boss_id,reborn_time = reborn_time,killer = killer,is_focus = is_focus,kill_count = kill_count
  554. }
  555. end
  556. -------------------------
  557. --额外增加关注的处理
  558. self:SetFocusClockData( boss_id,reborn_time,is_focus )
  559. -------------------------
  560. end
  561. end
  562. function BossModel:SetDesertedBossInfo( boss_id,reborn_time,killer,is_focus,kill_count)
  563. if boss_id then
  564. -------------------------
  565. if self.deserted_boss_info[boss_id] and (not kill_count) then
  566. kill_count = self.deserted_boss_info[boss_id].kill_count
  567. end
  568. -------------------------
  569. if is_focus then
  570. self.deserted_boss_info[boss_id] = {
  571. boss_id = boss_id,reborn_time = reborn_time,killer = killer,is_focus = is_focus,kill_count = kill_count
  572. }
  573. else
  574. is_focus = self.deserted_boss_info[boss_id] and self.deserted_boss_info[boss_id].is_focus or 0
  575. self.deserted_boss_info[boss_id] = {
  576. boss_id = boss_id,reborn_time = reborn_time,killer = killer,is_focus = is_focus,kill_count = kill_count
  577. }
  578. end
  579. -------------------------
  580. --额外增加关注的处理
  581. self:SetFocusClockData( boss_id,reborn_time,is_focus )
  582. -------------------------
  583. end
  584. end
  585. function BossModel:ChangeBossFocusStatus( boss_id, op_type )
  586. local reborn_time = false
  587. for k,v in pairs(self.money_boss_info) do
  588. if v.boss_id == boss_id then
  589. v.is_focus = op_type
  590. reborn_time = v.reborn_time
  591. break
  592. end
  593. end
  594. for k,v in pairs(self.deserted_boss_info) do
  595. if v.boss_id == boss_id then
  596. v.is_focus = op_type
  597. reborn_time = v.reborn_time
  598. break
  599. end
  600. end
  601. -------------------------
  602. --额外增加关注的处理
  603. if reborn_time then
  604. self:SetFocusClockData( boss_id,reborn_time,op_type )
  605. end
  606. -------------------------
  607. end
  608. --赏金幻魔剩余次数和总次数
  609. function BossModel:GetMoneyLeftCount( )
  610. local my_data = self:GetMoneyBossMyInfo()
  611. local my_count = my_data and my_data.daily_award or 0
  612. local all_count = BossModel:GetInstance():GetBossKeyValue( "reward_boss_count" )
  613. if my_data and my_data.goods_times then
  614. --加入了道具卡,可以使用物品增加最大次数
  615. all_count = all_count + my_data.goods_times
  616. end
  617. local buff_kind = OperateActivityModel.MaterialSubmitBuffKind.BOSS_ADD_TIME --是否存在活动加成buff 挑战次数+1
  618. local buff_cfg,buff_info = OperateActivityModel:getInstance():GetMaterialBuffInfoByKind(buff_kind)
  619. if buff_cfg and buff_info then
  620. local sec = buff_info.etime - TimeUtil:getServerTime( )
  621. if sec > 0 then
  622. local have_time = 1
  623. for k,v in pairs(buff_info.used) do
  624. if v.kdata == 3 and v.vdata == 1 then--赏金幻魔boss还有次数
  625. have_time = 0
  626. break
  627. end
  628. end
  629. if have_time > 0 then
  630. all_count = all_count + 1
  631. end
  632. end
  633. end
  634. return all_count - my_count > 0 and all_count - my_count or 0,all_count
  635. end
  636. --赏金幻魔boss是否还有次数剩余
  637. function BossModel:IsTodayMoneyHaveLeftCount(boss_id)
  638. local left_count, all_count = self:GetMoneyLeftCount()
  639. if left_count == 0 and boss_id then
  640. local ser_data = false
  641. for k,v in pairs(self:GetMoneyBossInfo()) do
  642. if v.boss_id == boss_id then
  643. ser_data = v
  644. end
  645. end
  646. if ser_data and ser_data.kill_count == 0 then
  647. left_count = left_count + 1
  648. end
  649. end
  650. return left_count > 0
  651. end
  652. function BossModel:GetMoneyBossMyInfo( )
  653. return self.money_boss_my_info
  654. end
  655. function BossModel:SetMoneyBossMyInfo( value )
  656. self.money_boss_my_info = value
  657. --刷新赏金boss次数时,同步一下日常任务
  658. DailyModel.getInstance():Fire(DailyModel.REQUEST_CCMD_EVENT, 15701, DailyActivityType.Limit)
  659. DailyModel.getInstance():Fire(DailyModel.REQUEST_CCMD_EVENT, 15701, DailyActivityType.UnLimit)
  660. end
  661. function BossModel:GetMoneyBossKillHistory( )
  662. return self.money_boss_kill_history
  663. end
  664. function BossModel:SetMoneyBossKillHistory( value )
  665. self.money_boss_kill_history = value
  666. end
  667. function BossModel:GetMoneyInspireCount( boss_id )
  668. if not boss_id then return end
  669. return self.money_inspire_count[boss_id]
  670. end
  671. function BossModel:SetMoneyInspireCount( boss_id,by_gold,by_bgold )
  672. self.money_inspire_count[boss_id] = {boss_id = boss_id,by_gold = by_gold,by_bgold = by_bgold}
  673. end
  674. function BossModel:GetWorldBossProtectMax( boss_id )
  675. if not boss_id then return end
  676. return self.world_boss_protect_max[boss_id]
  677. end
  678. function BossModel:SetWorldBossProtectMax( data )
  679. if not data then return end
  680. self.world_boss_protect_max[data.boss_id] = data
  681. end
  682. function BossModel:GetMoneyHelperInfo( )
  683. return self.money_helper_info
  684. end
  685. function BossModel:SetMoneyHelperInfo( data,remove_id )
  686. if remove_id then
  687. self.money_helper_info[remove_id] = nil
  688. return
  689. end
  690. if not data then return end
  691. self.money_helper_info[data.role_id] = data
  692. end
  693. function BossModel:GetCurFightBossId( )
  694. if SceneManager:getInstance():IsFakeBossMoneyScene() then
  695. return BossModel.FAKE_MONEY_BOSS_ID
  696. end
  697. return self.cur_fight_boss_id
  698. end
  699. function BossModel:SetCurFightBossId( value )
  700. self.cur_fight_boss_id = value
  701. end
  702. --关注计时器列表数据的处理
  703. function BossModel:SetFocusClockData( boss_id,reborn_time,is_focus )
  704. if is_focus == 1 then
  705. if reborn_time == 0 then
  706. --复活了就不用管了,重置数据
  707. self.boss_focus_check_list[boss_id] = nil
  708. self.boss_focus_tip_cd_list[boss_id] = nil
  709. else
  710. local curTime = TimeUtil:getServerTime()
  711. if reborn_time > curTime then
  712. self.boss_focus_check_list[boss_id] = reborn_time
  713. else
  714. --容错重置
  715. self.boss_focus_check_list[boss_id] = nil
  716. self.boss_focus_tip_cd_list[boss_id] = nil
  717. end
  718. end
  719. else
  720. --没关注重置数据
  721. self.boss_focus_check_list[boss_id] = nil
  722. self.boss_focus_tip_cd_list[boss_id] = nil
  723. end
  724. end
  725. function BossModel:SetFocusClock( )
  726. local function clockFun()
  727. local curTime = TimeUtil:getServerTime()
  728. for k,v in pairs(self.boss_focus_check_list) do
  729. if v <= curTime + self.money_focus_tip_time and (not self.boss_focus_tip_cd_list[k]) then
  730. self:Fire(BossConst.OPEN_BOSS_RELIVE_TIP,k)
  731. -------------------------
  732. --设定tipCD
  733. self.boss_focus_tip_cd_list[k] = self.money_focus_tip_time + 5
  734. end
  735. end
  736. -------------------------
  737. --跑tip的cd并删除无用cd
  738. for k,v in pairs(self.boss_focus_tip_cd_list) do
  739. v = v - 1
  740. if v == 0 then
  741. self.boss_focus_tip_cd_list[k] = nil--删除无用cd
  742. end
  743. end
  744. -------------------------
  745. end
  746. self.focus_clock_id = self.focus_clock_id or GlobalTimerQuest:AddPeriodQuest(clockFun, 1, -1)
  747. end
  748. function BossModel:GetHurtNumStr( num )
  749. num = num or 0
  750. if num >= 0 and num <= 99999 then
  751. return num
  752. elseif num >= 100000 and num <= 99999999 then
  753. return string.format("%.1f万", num / 10000)
  754. elseif num >= 100000000 and num <= 99999999999 then
  755. return string.format("%.2f亿", num / 100000000)
  756. elseif num >= 100000000000 and num <= 999999999999 then
  757. return string.format("%.2f千亿", num / 100000000000)
  758. elseif num >= 1000000000000 and num <= 9999999999999 then
  759. return string.format("%.1f千亿", num / 100000000000)
  760. end
  761. return string.format("%.1f千亿", num / 100000000000)
  762. end
  763. function BossModel:GetShortNameStr( str )
  764. str = str or ""
  765. if SubStringGetTotalIndex(str) > 8 then
  766. return SubStringUTF8(str, 1, 8) .. "..."
  767. else
  768. return str
  769. end
  770. end
  771. function BossModel:SetHelpClock()
  772. if not self.help_clock_Id then
  773. self.help_clock = 5
  774. local function step_method( ... )
  775. self.help_clock = self.help_clock -1
  776. if self.help_clock <= 0 then
  777. --倒计时结束
  778. self:CloseHelpClock()
  779. end
  780. end
  781. self.help_clock_Id = GlobalTimerQuest:AddPeriodQuest(step_method, 1, -1)
  782. end
  783. end
  784. function BossModel:CloseHelpClock()
  785. self.help_clock = 0
  786. if self.help_clock_Id then
  787. GlobalTimerQuest:CancelQuest(self.help_clock_Id)
  788. self.help_clock_Id = nil
  789. end
  790. end
  791. --boss自己的总伤害(只在组队状态下有用)
  792. function BossModel:GetMyHurtOnly( )
  793. return self.my_hurt_only
  794. end
  795. function BossModel:SetMyHurtOnly( value )
  796. self.my_hurt_only = value
  797. end
  798. --废都右边伤害列表
  799. function BossModel:SetDesertedBossRankInfo( vo )
  800. self.deserted_boss_rank_info[vo.boss_id] = vo
  801. self:SetCurFightBossId(vo.boss_id)
  802. self:Fire(BossConst.ANS_DESERTED_RANK_INFO)
  803. end
  804. function BossModel:GetDesertedBossRankInfo( boss_id )
  805. return self.deserted_boss_rank_info[boss_id]
  806. end
  807. function BossModel:CleanDesertedBossRankInfoById( boss_id )
  808. self.deserted_boss_rank_info[boss_id] = nil
  809. end
  810. --星域幻魔每日次数
  811. function BossModel:SetDesertedBossNumInfo( vo )
  812. self.deserted_boss_num_info = vo
  813. self:ChangeVar("deserted_boss_num_info", self.deserted_boss_num_info, false, true)
  814. end
  815. function BossModel:GetDesertedBossNumInfo( )
  816. return self.deserted_boss_num_info
  817. end
  818. --获得星域幻魔剩余次数
  819. function BossModel:GetDesertedBossRestNum( )
  820. local time_info = self:GetDesertedBossNumInfo()
  821. if not time_info then
  822. return 0,0
  823. end
  824. local boss_time = time_info.boss_count or 0
  825. local mon_time = time_info.mon_count or 0
  826. local rest_boss_time = self.total_deserted_boss_time - boss_time
  827. local rest_mon_time = self.total_deserted_mon_time - mon_time
  828. return rest_boss_time, rest_mon_time
  829. end
  830. function BossModel:GetDesertedBossInfo( boss_id )
  831. if boss_id then
  832. return self.deserted_boss_info[boss_id]
  833. else
  834. return self.deserted_boss_info
  835. end
  836. end
  837. function BossModel:InitDesertedBossCFG( )
  838. self.deserted_boss_cfg = {}
  839. local cfg = Config.Desertedbossinfo
  840. for k,v in pairs(cfg) do
  841. if not self.deserted_boss_cfg[v.level] then
  842. self.deserted_boss_cfg[v.level] = {}
  843. end
  844. table_insert(self.deserted_boss_cfg[v.level], v)
  845. end
  846. for k,v in pairs(self.deserted_boss_cfg) do
  847. local sort_func = function ( a, b )
  848. return a.recommend_lv < b.recommend_lv
  849. end
  850. table.sort(v, sort_func)
  851. end
  852. end
  853. --根据层数获取boss配置
  854. function BossModel:GetDesertedBossCFG( level )
  855. if not level then
  856. return self.deserted_boss_cfg
  857. else
  858. return self.deserted_boss_cfg[level] or {}
  859. end
  860. end
  861. --根据bossid获取boss配置
  862. function BossModel:GetDesertedBossCFGById( boss_id )
  863. if boss_id then
  864. return Config.Desertedbossinfo[boss_id]
  865. else
  866. return {}
  867. end
  868. end
  869. --根据星域幻魔_id 获取场景id
  870. function BossModel:GetDesertedBossSceneById( boss_id )
  871. local cfg = Config.Desertedbossinfo
  872. if cfg[boss_id] then
  873. local level = cfg[boss_id].level
  874. local scene_cfg = Config.Desertedlevel[level]
  875. return scene_cfg.scene,scene_cfg.cls_scene
  876. end
  877. return 0,0
  878. end
  879. --刷新墓碑
  880. function BossModel:UpdateSceneGrave(vo)
  881. if not vo or not vo.boss_info then return end
  882. local boss_info = vo.boss_info
  883. if boss_info then
  884. local cur_scene_id = SceneManager.Instance:GetSceneId()
  885. for _, v in ipairs(boss_info) do
  886. if v.reborn_time > 0 then --复活结束时间戳>0说明怪物已经死亡
  887. local x, y
  888. local cfg = Config.Desertedbossinfo[v.boss_id]
  889. local scene_id,cs_scene_id = self:GetDesertedBossSceneById(v.boss_id)
  890. if cfg then
  891. local pos = stringtotable(cfg.born_pos)
  892. x = tonumber(pos[1])
  893. y = tonumber(pos[2])
  894. end
  895. local monCfg = ConfigItemMgr.Instance:GetMonsterDataItem(v.boss_id)
  896. if x and y and monCfg and (scene_id == cur_scene_id or cs_scene_id == cur_scene_id) then
  897. local grave_vo = GraveVo.New()
  898. local data = {}
  899. data.instance_id = v.boss_id
  900. data.type_id = BossModel.GRAVE_MONSTER_ID
  901. data.boss_id = v.boss_id
  902. data.name = monCfg.name
  903. data.level = monCfg.lv
  904. data.refresh_time = math.ceil(v.reborn_time - TimeUtil:getServerTime())
  905. data.pos_x = x
  906. data.pos_y = y
  907. grave_vo:SetGraveVo(data)
  908. SceneManager:getInstance():AddGraveVo(grave_vo)
  909. end
  910. else
  911. SceneManager:getInstance():DeleteGraveVo(v.boss_id)
  912. end
  913. end
  914. end
  915. end
  916. function BossModel:SetNeedFindBoss( boss_id )
  917. self.need_find_boss_id = boss_id
  918. end
  919. function BossModel:GetNeedFindBoss( )
  920. return self.need_find_boss_id
  921. end
  922. function BossModel:IsDesertedBoss( boss_id )
  923. if boss_id and Config.Desertedbossinfo[boss_id] then
  924. return true
  925. else
  926. return false
  927. end
  928. end
  929. function BossModel:HasDesertedBossRed( )
  930. if not GetModuleIsOpen(461, 0,true) then
  931. return false
  932. end
  933. local time_info = self:GetDesertedBossNumInfo()
  934. local boss_time = time_info.boss_count or 0
  935. local mon_time = time_info.mon_count or 0
  936. local rest_boss_time = self.total_deserted_boss_time - boss_time
  937. rest_boss_time = rest_boss_time < 0 and 0 or rest_boss_time
  938. local rest_mon_time = self.total_deserted_mon_time - mon_time
  939. rest_mon_time = rest_mon_time < 0 and 0 or rest_mon_time
  940. return rest_boss_time > 0 or rest_mon_time > 0
  941. end
  942. function BossModel:HasDesertedBossNum( )
  943. local time_info = self:GetDesertedBossNumInfo()
  944. local boss_time = time_info.boss_count or 0
  945. local rest_boss_time = self.total_deserted_boss_time - boss_time
  946. return rest_boss_time > 0
  947. end
  948. function BossModel:HasBossHomeRed( )
  949. local boss_home_red = BossHomeModel:getInstance():GetBossHomeRedCache()
  950. return boss_home_red
  951. end
  952. ------------活动boss start-------------
  953. --活动基础信息
  954. function BossModel:GetFestivalBossList( )
  955. return self.festival_boss_list
  956. end
  957. function BossModel:SetFestivalBossList( value )
  958. value.scene_id_list = {}
  959. for k,v in pairs(value.list) do
  960. value.scene_id_list[v.scene_id] = {}
  961. value.scene_id_list[v.scene_id][v.pool_id] = v
  962. end
  963. self.festival_boss_list = value
  964. end
  965. --当前场景boss信息
  966. function BossModel:GetFestivalBossSceneList( )
  967. return self.festival_boss_scene_list
  968. end
  969. function BossModel:SetFestivalBossSceneList( value )
  970. if value then
  971. value.id_list = {}
  972. value.scene_id_list = {}
  973. for k,v in pairs(value.list) do
  974. value.id_list[v.mon_id] = v
  975. value.scene_id_list[v.scene_id] = {}
  976. value.scene_id_list[v.scene_id][v.pool_id] = v
  977. end
  978. self.festival_boss_scene_list = value
  979. else
  980. self.festival_boss_scene_list = false
  981. end
  982. end
  983. --排名信息
  984. function BossModel:GetFestivalBossRankInfo( )
  985. return self.festival_boss_rank_info
  986. end
  987. function BossModel:SetFestivalBossRankInfo( value )
  988. if value then
  989. self.festival_boss_rank_info = value
  990. local list_role = {}
  991. for k,v in pairs(value.rank_list) do
  992. list_role[v.role_id] = v
  993. end
  994. self.festival_boss_rank_info.list_role = list_role
  995. else
  996. self.festival_boss_rank_info = false
  997. end
  998. end
  999. ------------活动boss end---------------
  1000. --判断是否是废都幻魔的跨服场景
  1001. function BossModel:CheckIsCrossDesertedScene( scene_id )
  1002. if not self.deserted_boss_scene_list then
  1003. self.deserted_boss_scene_list = {}
  1004. local cfg = Config.Desertedlevel
  1005. for i,v in ipairs(cfg) do
  1006. self.deserted_boss_scene_list[v.cls_scene] = true
  1007. end
  1008. end
  1009. return self.deserted_boss_scene_list[scene_id] or false
  1010. end
  1011. --获取废都幻魔第几层
  1012. function BossModel:GetDesertedSceneFloor( scene_id )
  1013. scene_id = scene_id or SceneManager:getInstance():GetSceneId()
  1014. local cfg = Config.Desertedlevel
  1015. for i,v in ipairs(cfg) do
  1016. if v.scene == scene_id or v.cls_scene == scene_id then
  1017. return v.level
  1018. end
  1019. end
  1020. return 0
  1021. end
  1022. --星域幻魔剩余免费复活次数
  1023. function BossModel:UpdateLeftDesertedBossFreeReliveTimes(vo)
  1024. self.left_free_deserted_boss_relive_times = vo.left_count
  1025. end
  1026. function BossModel:GetLeftDesertedBossFreeReliveTimes( )
  1027. return self.left_free_deserted_boss_relive_times
  1028. end
  1029. function BossModel:GetLeftDesertedBossMapShowDataList(level)
  1030. local list = {}
  1031. local all_boss_list = self:GetDesertedBossCFG(level) or {}
  1032. if all_boss_list and #all_boss_list > 0 then
  1033. for i,v in ipairs(all_boss_list) do
  1034. local d = {}
  1035. local pos = stringtotable(v.born_pos)
  1036. d.x = tonumber(pos[1])
  1037. d.y = tonumber(pos[2])
  1038. d.boss_id = v.boss_id
  1039. d.id = v.boss_id
  1040. d.sub_type = FindVo.MONSTER
  1041. d.xy = v.born_pos
  1042. d.name = Trim(v.boss_name)
  1043. table.insert(list, d)
  1044. end
  1045. end
  1046. return list
  1047. end
  1048. --设置星域幻魔的当前层精英怪物数量
  1049. function BossModel:SetLeftDesertedMonsterInfo(vo)
  1050. self.deserted_monster_info = vo
  1051. end
  1052. --设置星域幻魔的当前层精英怪物数量
  1053. function BossModel:SetLeftDesertedMonsterNumber(vo)
  1054. if self.deserted_monster_info and self.deserted_monster_info.boss_info then
  1055. for i,v in ipairs(self.deserted_monster_info.boss_info) do
  1056. if vo.index == v.index then
  1057. v.alive = vo.alive
  1058. break
  1059. end
  1060. end
  1061. end
  1062. end
  1063. --获取星域幻魔的当前层精英怪物数量
  1064. function BossModel:GetLeftDesertedMonsterNumber()
  1065. local cnt = 0
  1066. if self.deserted_monster_info and self.deserted_monster_info.boss_info then
  1067. for i,v in ipairs(self.deserted_monster_info.boss_info) do
  1068. if v.alive == 1 then
  1069. cnt = cnt + 1
  1070. end
  1071. end
  1072. end
  1073. return cnt
  1074. end
  1075. --包括赏金boss 专属boss 星域boss
  1076. function BossModel:GetBossConfig( boss_id )
  1077. if not boss_id then return end
  1078. local cfg = Config.Rewardbossinfo[boss_id]
  1079. if not cfg then
  1080. cfg = Config.Desertedbossinfo[boss_id]
  1081. end
  1082. if not cfg then
  1083. --如果走到这里,那就只可能是专属boss,专属boss 有个多星级,要转到1星的id才能拿到配置
  1084. local id = math.floor(boss_id/10 ) * 10 + 1
  1085. cfg = Config.Personalbossinfo[id]
  1086. end
  1087. return cfg
  1088. end
  1089. --设置boss免战时间
  1090. function BossModel:SetBossProtectTimeInfo(info ,boss_type)
  1091. self.boss_protect_time_info = self.boss_protect_time_info or {}
  1092. self.boss_protect_time_info[boss_type] = info
  1093. end
  1094. --获取boss免战时间
  1095. function BossModel:GetBossProtectTime(boss_type)
  1096. local time = 0
  1097. local time_info = self.boss_protect_time_info[boss_type]
  1098. if time_info then
  1099. local server_time = TimeUtil:getServerTime()
  1100. if time_info.protect_time > server_time then
  1101. time = time_info.protect_time - server_time
  1102. end
  1103. end
  1104. return time
  1105. end
  1106. --获取boss免战使用次数
  1107. function BossModel:GetBossProtectUseTime(boss_type)
  1108. local use_times = false
  1109. local time_info = self.boss_protect_time_info[boss_type]
  1110. if time_info then
  1111. use_times = time_info.use_times
  1112. end
  1113. return use_times
  1114. end
  1115. --获取boss免战使用次数
  1116. function BossModel:GetBossProtectMaxUseTime(boss_type)
  1117. local max_use_time = 1
  1118. return max_use_time
  1119. end
  1120. --获取boss免战保护时间 **分
  1121. function BossModel:GetBossProtectMaxTime(boss_type)
  1122. local max_time = 15
  1123. local cfg
  1124. if boss_type == BossProtectTipsView.BossType.Deserted then
  1125. cfg = Config.Desertedkv
  1126. if cfg and cfg["role_protect_time"] then
  1127. max_time = (cfg["role_protect_time"].val) / 60
  1128. end
  1129. else
  1130. cfg = Config.Localbosskv
  1131. if cfg and cfg["role_protect_time"] then
  1132. max_time = (cfg["role_protect_time"].value_content) / 60
  1133. end
  1134. end
  1135. return max_time
  1136. end
  1137. --是否满足新手假赏金BOSS的条件
  1138. function BossModel:IsMatchFakeMoneyBoss( )
  1139. --等级满足,接到任务且进度未完成
  1140. local role_lv = RoleManager.Instance.mainRoleInfo.level
  1141. if role_lv >= BossModel.FAKE_MONEY_BOSS_MIN_LEVEL and role_lv <= BossModel.FAKE_MONEY_BOSS_MAX_LEVEL then
  1142. local task = TaskModel:getInstance():GetReceivedTaskById(BossModel.FAKE_MONEY_BOSS_TASK_ID)
  1143. if task and not TaskModel:getInstance():IsTaskProgressFinish(task) then
  1144. return true
  1145. end
  1146. end
  1147. end
  1148. function BossModel:GetPersonBossLeftCount( )
  1149. if not GetModuleIsOpen(460, Config.ConfigBoss.ModuleId.Person, true) then
  1150. return 0
  1151. end
  1152. local dungeon_list = BaseDungeonModel:GetInstance():GetDunProtoInfo( BaseDungeonModel.DUN_TYPE.PersonBoss )
  1153. local boss_type_count = self:GetBossNormalCount(Config.ConfigBoss.ModuleId.Person)
  1154. if dungeon_list and dungeon_list[1] then
  1155. local max_time = boss_type_count + dungeon_list[1].vip_count
  1156. local vip_pass_count = 0--购买的vip次数使用过的次数
  1157. for k, v in pairs(dungeon_list[1].rec_data) do
  1158. if v.key == 8 then
  1159. vip_pass_count = v.val
  1160. end
  1161. end
  1162. local day_use = dungeon_list[1].day_pass_count+vip_pass_count
  1163. return max_time-day_use
  1164. end
  1165. return 0
  1166. end
  1167. --获取总的boss剩余挑战次数
  1168. function BossModel:GetAllBossNum( )
  1169. local money_boss_num, person_boss_num, deserted_boss_num, boss_home_num = 0, 0, 0, 0
  1170. --赏金boss
  1171. if not GetModuleIsOpen(460, Config.ConfigBoss.ModuleId.Money, true) then
  1172. money_boss_num = 0
  1173. else
  1174. money_boss_num = self:GetMoneyLeftCount()
  1175. end
  1176. --专属boss
  1177. person_boss_num = self:GetPersonBossLeftCount()
  1178. --星域boss
  1179. if not GetModuleIsOpen(461, 0, true) then
  1180. deserted_boss_num = 0
  1181. else
  1182. deserted_boss_num = self:GetDesertedBossRestNum()
  1183. end
  1184. --boss之家
  1185. -- boss_home_num = self:HasBossHomeRed() and 1 or 0
  1186. return money_boss_num + person_boss_num + deserted_boss_num + boss_home_num
  1187. end
  1188. --获取赏金boss次数购买信息
  1189. function BossModel:GetBossMoneyBuyCount( )
  1190. local use_count, all_count = 0, 0
  1191. local need_money = 0
  1192. local cfg = Config.Localbosskv["reward_boss_count_recovery"]
  1193. local cfg_value = stringtotable(cfg.value_content) or {}
  1194. all_count = #cfg_value
  1195. local boss_money_info = self:GetMoneyBossMyInfo()
  1196. if boss_money_info and boss_money_info.recover_time then
  1197. use_count = boss_money_info.recover_time
  1198. end
  1199. for i,v in ipairs(cfg_value) do
  1200. if v[1] > use_count then
  1201. need_money = v[2]
  1202. break
  1203. end
  1204. end
  1205. local left_count = all_count-use_count > 0 and all_count-use_count or 0
  1206. return left_count, all_count, need_money
  1207. end
  1208. -- --更新幻魔星域BOSS挑战次数
  1209. -- function BossModel:UpdateDesertedBossHaveTimes( )
  1210. -- self.total_deserted_boss_time = Config.Desertedkv["feidu_boss_times"].val
  1211. -- local buff_kind = OperateActivityModel.MaterialSubmitBuffKind.BOSS_ADD_TIME --是否存在活动加成buff 挑战次数+1
  1212. -- local buff_cfg,buff_info = OperateActivityModel:getInstance():GetMaterialBuffInfoByKind(buff_kind)
  1213. -- if buff_cfg and buff_info then
  1214. -- local sec = buff_info.etime - TimeUtil:getServerTime( )
  1215. -- if sec > 0 then
  1216. -- local have_time = 0
  1217. -- for k,v in pairs(buff_info.used) do
  1218. -- if v.kdata == 9 and v.vdata == 0 then--废土boss还有次数
  1219. -- have_time = 1
  1220. -- break
  1221. -- end
  1222. -- end
  1223. -- if have_time > 0 then
  1224. -- self.total_deserted_boss_time = Config.Desertedkv["feidu_boss_times"].val + 1
  1225. -- local sec = buff_info.etime - TimeUtil:getServerTime( )
  1226. -- self:ActBuffTimeLate(sec)
  1227. -- end
  1228. -- end
  1229. -- end
  1230. -- BossController.Instance:BossControllerCheckRed( )
  1231. -- end
  1232. -- --buff结束后刷新boss红点
  1233. -- function BossModel:ActBuffTimeLate( sec )
  1234. -- if self.act_buff_timer_id then
  1235. -- GlobalTimerQuest:CancelQuest(self.act_buff_timer_id)
  1236. -- self.act_buff_timer_id = nil
  1237. -- end
  1238. -- local sec = sec or 0
  1239. -- if sec > 0 then
  1240. -- local function onTimer()
  1241. -- sec = sec - 1
  1242. -- if sec > 0 then
  1243. -- else
  1244. -- self:UpdateDesertedBossHaveTimes()
  1245. -- GlobalTimerQuest:CancelQuest(self.act_buff_timer_id)
  1246. -- self.act_buff_timer_id = nil
  1247. -- end
  1248. -- end
  1249. -- if not self.act_buff_timer_id then
  1250. -- self.act_buff_timer_id = GlobalTimerQuest:AddPeriodQuest(onTimer, 1, -1)
  1251. -- end
  1252. -- onTimer()
  1253. -- else
  1254. -- self:UpdateDesertedBossHaveTimes()
  1255. -- end
  1256. -- end