源战役客户端
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

1068 строки
28 KiB

4 недель назад
  1. MateModel = MateModel or BaseClass(BaseVo, true)
  2. local MateModel = MateModel
  3. function MateModel:__init()
  4. MateModel.Instance = self
  5. self:Reset()
  6. end
  7. function MateModel:Reset()
  8. self.game_info = nil
  9. self.basic_info = nil
  10. self.connect_message = nil
  11. self.cut_connect_message = nil
  12. self.ship_basic = nil
  13. self.select_game_info = nil
  14. self.invite_info = nil
  15. self:ResetMusicGameInfo()
  16. self.music_play_role = 0
  17. self:ResetSelectGameInfo()
  18. self:ResetBallStatus()
  19. self:ResetBallFlyInfo()
  20. self.red_game = {}
  21. self.red_mark = {}
  22. self.red_ship = false
  23. self.red_gift = false
  24. self.find_friend_data = {}
  25. self.mate_daily_list_info = {}--羁绊日常列表
  26. self.mate_daily_other_list_info = {}--羁绊日常路人列表
  27. self.mate_daily_task_need_chat_role = {}--记录当天需要进行私聊任务的玩家id列表
  28. self.mate_daily_task_need_share_mate_role = {}--记录当天需要进行分享羁绊任务的玩家id列表
  29. self.mate_daily_red = false--羁绊日常红点
  30. self.force_turn_mate_first_red_false = false
  31. self.mate_shop_red = false--商店红点
  32. self.mate_shop_red_list = {}
  33. self.mate_first_get_friend_red = false--首次结成羁绊的一次性红点
  34. self.last_click_up_btn_time = 0 --上次点击信物升级按钮的时间戳
  35. end
  36. function MateModel:GetInstance()
  37. if MateModel.Instance == nil then
  38. MateModel.Instance = MateModel.New()
  39. end
  40. return MateModel.Instance
  41. end
  42. function MateModel:GetOpenNeed( )
  43. local open_lv = Config.Moduleid[149].open_lv
  44. local task_id = Config.Moduleid[149].task_id
  45. local open_day = Config.Moduleid[149].open_day
  46. return open_lv, task_id, open_day
  47. end
  48. function MateModel:GetKeyValueConf( key )
  49. if not key then return end
  50. if Config.Matekeyvalue[key] then
  51. return Config.Matekeyvalue[key].value_content
  52. end
  53. end
  54. function MateModel:GetMyUseTitle( )
  55. local mate_name,mate_title = "",""
  56. local data = self:GetBasicByRoleId(RoleManager.Instance.mainRoleInfo.mate_title_role_id)
  57. if data then
  58. mate_name = data.name
  59. mate_title = data.title
  60. end
  61. return mate_name,mate_title
  62. end
  63. --判断是否已经羁绊
  64. function MateModel:GetIsMateByRoleId( role_id )
  65. if not role_id then return false end
  66. local basic = self:GetBasicInfo()
  67. if basic then
  68. for k,v in pairs(basic) do
  69. if v.role_id == role_id then
  70. return true
  71. end
  72. end
  73. end
  74. return false
  75. end
  76. function MateModel:ChangeFriendInfo( tag, role_id, value )
  77. if role_id and value and tag then
  78. for k,v in pairs(self:GetBasicInfo()) do
  79. if v.role_id == role_id then
  80. v[tag] = value
  81. return
  82. end
  83. end
  84. end
  85. end
  86. function MateModel:AddDailyReward( role_id,day )
  87. if role_id and day then
  88. for k,v in pairs(self:GetBasicInfo()) do
  89. if v.role_id == role_id then
  90. for k,v in pairs(v.anniversary) do
  91. table.insert( v, {day = day} )
  92. end
  93. end
  94. end
  95. end
  96. end
  97. function MateModel:GetBasicByRoleId( role_id )
  98. if role_id then
  99. local basic = self:GetBasicInfo()
  100. if basic then
  101. for k,v in pairs(basic) do
  102. if v.role_id == role_id then
  103. return v
  104. end
  105. end
  106. end
  107. end
  108. end
  109. --是否没有羁绊好友
  110. function MateModel:IsNoMateFriend( )
  111. local basic_data = self:GetBasicInfo()
  112. if not basic_data or TableSize(basic_data) == 0 then
  113. return true
  114. end
  115. return false
  116. end
  117. function MateModel:GetBasicInfo( )
  118. return self.basic_info or {}
  119. end
  120. function MateModel:SetBasicInfo( value )
  121. self.basic_info = value
  122. end
  123. function MateModel:GetConnectMessage( )
  124. return self.connect_message or {}
  125. end
  126. function MateModel:SetConnectMessage( value )
  127. self.connect_message = value
  128. end
  129. function MateModel:GetCutConnectMessage( )
  130. return self.cut_connect_message or {}
  131. end
  132. function MateModel:SetCutConnectMessage( value )
  133. self.cut_connect_message = value
  134. end
  135. -------------------------
  136. --友谊的小船
  137. function MateModel:GetShipBasic( )
  138. return self.ship_basic or {}
  139. end
  140. function MateModel:SetShipBasic( value )
  141. self.ship_basic = value
  142. end
  143. function MateModel:GetShipIsMax( )
  144. local basic = self:GetShipBasic()
  145. if basic and basic.stage then
  146. if self:GetShipConfNext( basic.stage,basic.star ) then
  147. return false
  148. else
  149. return true
  150. end
  151. end
  152. end
  153. function MateModel:GetShipConf( stage,star )
  154. if stage and star then
  155. return Config.Mateboat[ stage .. "@" .. star ]
  156. end
  157. end
  158. function MateModel:GetShipConfNext( stage,star )
  159. if stage and star then
  160. if Config.Mateboat[ stage .. "@" .. star+1 ] then
  161. return Config.Mateboat[ stage .. "@" .. star+1 ]
  162. elseif Config.Mateboat[ stage+1 .. "@" .. star ] then
  163. return Config.Mateboat[ stage+1 .. "@" .. 1 ]
  164. end
  165. end
  166. end
  167. --获得当前的对应配置
  168. function MateModel:GetCurShipConf( )
  169. local data = self:GetShipBasic()
  170. if not data or not data.stage then return end
  171. return self:GetShipConf(data.stage, data.star)
  172. end
  173. function MateModel:GetShipPower( stage,star )
  174. local power = 0
  175. local conf = self:GetShipConf( stage,star )
  176. if conf then
  177. power = power + GetFighting(stringtotable(conf.attr),true)
  178. end
  179. local list_info = self:GetSkillList( )
  180. local skill_temp = false
  181. for i,v in ipairs(list_info) do
  182. if not self:GetSkillIsLock(v.skill_id,stage) then
  183. skill_temp = SkillManager:getInstance():getSkillFromConfig(v.skill_id)
  184. if skill_temp and skill_temp.lvs and skill_temp.lvs[1] and tonumber(skill_temp.lvs[1].power) then
  185. power = power + tonumber(skill_temp.lvs[1].power)
  186. end
  187. end
  188. end
  189. return power
  190. end
  191. function MateModel:GetLastNextPicture( picture_id )
  192. local last_id,next_id = 0,0
  193. local cur_conf = nil
  194. for k,v in pairs(Config.Mateboat) do
  195. if v.picture == picture_id then
  196. cur_conf = v
  197. break
  198. end
  199. end
  200. if cur_conf then
  201. if Config.Mateboat[ cur_conf.stage-1 .. "@" .. 1 ] then
  202. last_id = Config.Mateboat[ cur_conf.stage-1 .. "@" .. 1 ].picture
  203. end
  204. if Config.Mateboat[ cur_conf.stage+1 .. "@" .. 1 ] then
  205. next_id = Config.Mateboat[ cur_conf.stage+1 .. "@" .. 1 ].picture
  206. end
  207. end
  208. return last_id,next_id
  209. end
  210. function MateModel:GetSkillList( )
  211. local tab = {}
  212. for k,v in pairs(Config.Mateboatskill) do
  213. table.insert( tab, v )
  214. end
  215. local function sort_call( a,b )
  216. return a.stage < b.stage
  217. end
  218. table.sort( tab, sort_call )
  219. return tab
  220. end
  221. function MateModel:GetSkillIsLock( skill_id,stage )
  222. if not skill_id then return "未解锁" end
  223. if not stage then
  224. local basic = self:GetShipBasic()
  225. if not basic then return "未解锁" end
  226. stage = basic.stage
  227. end
  228. for k,v in pairs(Config.Mateboatskill) do
  229. if v.skill_id == skill_id then
  230. if v.stage <= stage then
  231. return false,v.stage
  232. else
  233. return ChineseNumber(v.stage) .. "阶解锁",v.stage
  234. end
  235. end
  236. end
  237. return "未解锁",99
  238. end
  239. -------------------------
  240. --纪念日相关
  241. function MateModel:GetMarkListConf( )
  242. return Config.Mateanniversary
  243. end
  244. function MateModel:GetMarkConfByDay( day )
  245. day = day or 1
  246. for k,v in pairs(Config.Mateanniversary) do
  247. if v.day == day then
  248. return v
  249. end
  250. end
  251. end
  252. function MateModel:GetMarkIsHave(role_id, day)
  253. if not role_id or not day then return false end
  254. local basic = self:GetBasicByRoleId( role_id )
  255. if not basic then return false end
  256. for k,v in pairs(basic.anniversary) do
  257. if v.day == day then
  258. return true
  259. end
  260. end
  261. return false
  262. end
  263. function MateModel:GetMateDay( role_id )
  264. if not role_id then return 0 end
  265. local basic = self:GetBasicByRoleId( role_id )
  266. if not basic then return 0 end
  267. return math.ceil((TimeUtil:getServerTime() - basic.time)/86400)
  268. end
  269. function MateModel:GetMarkCan( role_id,day )
  270. if not role_id or not day then return false end
  271. local is_have = self:GetMarkIsHave(role_id, day)
  272. if is_have then return false end
  273. return self:GetMateDay(role_id) >= day
  274. end
  275. function MateModel:GetMarkIsMax( day )
  276. day = day or 0
  277. for k,v in pairs(Config.Mateanniversary) do
  278. if v.day > day then
  279. return false
  280. end
  281. end
  282. return true
  283. end
  284. --纪念日相关
  285. -------------------------
  286. --获取称号的属性加成
  287. function MateModel:GetTitleAttrByLv( lv )
  288. lv = lv or 1
  289. local data = {}
  290. for k,v in pairs(Config.Matelv) do
  291. if v.lv == lv then
  292. data = stringtotable(v.attr)
  293. break
  294. end
  295. end
  296. return data
  297. end
  298. --小游戏信息
  299. function MateModel:GetGameInfo( act_id )
  300. if not self.game_info then return false end
  301. if not act_id then
  302. return self.game_info
  303. else
  304. for k,v in pairs(self.game_info) do
  305. if v.act_id == act_id then
  306. return v
  307. end
  308. end
  309. end
  310. return false
  311. end
  312. function MateModel:SetGameInfo( value )
  313. if value and TableSize(value) > 1 then
  314. local function sort_call( a,b )
  315. return a.act_id < b.act_id
  316. end
  317. table.sort( value, sort_call )
  318. end
  319. self.game_info = value
  320. end
  321. --小游戏选中信息
  322. function MateModel:ResetSelectGameInfo( )
  323. self.select_game_info = nil
  324. end
  325. function MateModel:GetSelectGameInfo( )
  326. return self.select_game_info
  327. end
  328. function MateModel:SetSelectGameInfo( value,op_type )
  329. if value then
  330. value.status = op_type
  331. end
  332. self.select_game_info = value
  333. end
  334. --小游戏邀请信息
  335. function MateModel:GetInviteInfo( )
  336. return self.invite_info or {}
  337. end
  338. function MateModel:SetInviteInfo( value )
  339. self.invite_info = value or {}
  340. self:CheckInviteDot()
  341. end
  342. function MateModel:CheckInviteDot( )
  343. local friend_list = self:GetInviteInfo()
  344. local need_list = {}
  345. for k,v in pairs(friend_list) do
  346. if v.type == 2 then
  347. table.insert( need_list, v )
  348. end
  349. end
  350. if TableSize(need_list) > 0 then
  351. MsgManager:getInstance():Add({type=Config.ConfigMainIcon.TipType.mate_game_invite})
  352. else
  353. MsgManager:getInstance():Remove(Config.ConfigMainIcon.TipType.mate_game_invite)
  354. end
  355. end
  356. -- function MateModel:RemoveInviteInfo( role_id )
  357. -- local basic = self:GetInviteInfo()
  358. -- for k,v in pairs(basic) do
  359. -- if v.role_id == role_id then
  360. -- v = nil
  361. -- end
  362. -- end
  363. -- self:CheckInviteDot()
  364. -- end
  365. -------------------------
  366. function MateModel:GetMusicGameInfo( )
  367. return self.music_game_info
  368. end
  369. function MateModel:SetMusicGameInfo( value )
  370. self.music_game_info = value
  371. end
  372. function MateModel:ResetMusicGameInfo( )
  373. self.music_game_info = nil
  374. self.music_score = nil
  375. end
  376. function MateModel:GetMusicScore( )
  377. return self.music_score
  378. end
  379. function MateModel:SetMusicScore( value )
  380. self.music_score = value
  381. end
  382. function MateModel:GetMusicPlayRole( )
  383. return self.music_play_role or 0
  384. end
  385. function MateModel:SetMusicPlayRole( value )
  386. self.music_play_role = value
  387. end
  388. function MateModel:GetMusicDotConf( group,id )
  389. -- if group and id then
  390. -- return Config.Materhythmmasterbit[group .. "@" ..id]
  391. -- else
  392. -- return Config.Materhythmmasterbit["1@1"]
  393. -- end
  394. return nil
  395. end
  396. function MateModel:GetMusicConf( music_id )
  397. -- music_id = music_id or 0
  398. -- for k,v in pairs(Config.Materhythmmastermusic) do
  399. -- if v.music_id == music_id then
  400. -- return v
  401. -- end
  402. -- end
  403. return nil
  404. end
  405. --抛接球基础信息
  406. function MateModel:GetBallInfo( )
  407. return self.ball_info
  408. end
  409. function MateModel:SetBallInfo( value )
  410. self.ball_info = value
  411. end
  412. --抛接球飞行信息
  413. function MateModel:GetBallFlyInfo( )
  414. return self.ball_fly_info
  415. end
  416. function MateModel:SetBallFlyInfo( value )
  417. self.ball_fly_info = value
  418. end
  419. function MateModel:ResetBallFlyInfo( )
  420. self.ball_fly_info = nil
  421. end
  422. function MateModel:GetMusicLowScoreByLv( lv )
  423. -- lv = lv or 1
  424. -- for k,v in pairs(Config.Materhythmmasteraward) do
  425. -- if v.lv == lv then
  426. -- return v.score_low
  427. -- end
  428. -- end
  429. -- return 99
  430. return 99
  431. end
  432. function MateModel:GetMusicLvByScore( score )
  433. -- score = score or 0
  434. -- if score == 0 then return 0 end
  435. -- local max = 0
  436. -- for k,v in pairs(Config.Materhythmmasteraward) do
  437. -- if score >= v.score_low and score <= v.score_high then
  438. -- return v.lv
  439. -- end
  440. -- max = max > v.lv and max or v.lv
  441. -- end
  442. -- return max
  443. return 0
  444. end
  445. function MateModel:GetBallLowScoreByLv( lv )
  446. -- lv = lv or 1
  447. -- for k,v in pairs(Config.Matecatchballaward) do
  448. -- if v.lv == lv then
  449. -- return v.hit_low
  450. -- end
  451. -- end
  452. return 99
  453. end
  454. function MateModel:GetBallLvByScore( score )
  455. -- score = score or 0
  456. -- if score == 0 then return 0 end
  457. -- local max = 0
  458. -- for k,v in pairs(Config.Matecatchballaward) do
  459. -- if score >= v.hit_low and score <= v.hit_high then
  460. -- return v.lv
  461. -- end
  462. -- max = max > v.lv and max or v.lv
  463. -- end
  464. -- return max
  465. return 0
  466. end
  467. function MateModel:GetBallStatus( )
  468. return self.ball_status
  469. end
  470. function MateModel:SetBallStatus( value )
  471. self.ball_status = value
  472. end
  473. function MateModel:ResetBallStatus( )
  474. self.ball_status = nil
  475. end
  476. function MateModel:GetGameRedDot( check_new,game_id )
  477. do return false end
  478. -------------------------
  479. local mask_data = CookieWrapper.Instance:GetCookie(CookieLevelType.Common,CookieKey.MATE_GAME_RED_SHOW) or {}
  480. local today_id = TimeUtil:GetToDayThreeHourStr()
  481. mask_data[today_id] = mask_data[today_id] or {}
  482. -------------------------
  483. if game_id and mask_data[today_id][game_id] then
  484. return false
  485. end
  486. if not self:GetGameInfo() then return false end
  487. if check_new then
  488. self.red_game = {}
  489. local data = self:GetGameInfo(MateConst.GameActId.Music)
  490. self.red_game[MateConst.GameActId.Music] = data.is_open == 1 and data.daily_score < self:GetMusicLowScoreByLv(6)
  491. local data = self:GetGameInfo(MateConst.GameActId.Ball)
  492. self.red_game[MateConst.GameActId.Ball] = data.is_open == 1 and data.daily_score < self:GetBallLowScoreByLv(6)
  493. -------------------------
  494. if mask_data[today_id][MateConst.GameActId.Music] then
  495. self.red_game[MateConst.GameActId.Music] = false
  496. end
  497. if mask_data[today_id][MateConst.GameActId.Ball] then
  498. self.red_game[MateConst.GameActId.Ball] = false
  499. end
  500. end
  501. if game_id then
  502. -------------------------
  503. --判断是否有伙伴
  504. local basic_data = self:GetBasicInfo( )
  505. if not (basic_data and TableSize(basic_data) > 0) then
  506. return false
  507. end
  508. -------------------------
  509. return self.red_game[game_id] and (not mask_data[today_id][game_id])
  510. else
  511. for k,v in pairs(self.red_game) do
  512. if v then
  513. -------------------------
  514. --判断是否有伙伴
  515. local basic_data = self:GetBasicInfo( )
  516. if not (basic_data and TableSize(basic_data) > 0) then
  517. return false
  518. end
  519. -------------------------
  520. return true
  521. end
  522. end
  523. return false
  524. end
  525. end
  526. function MateModel:GetShipRedDot( check_new )
  527. if check_new then
  528. self.red_ship = false
  529. if self:GetShipIsMax() then
  530. self.red_ship = false
  531. else
  532. local cost_id = self:GetKeyValueConf("ship_item")
  533. self.red_ship = GoodsModel:getInstance():GetTypeGoodsNum( cost_id ) > 0
  534. end
  535. end
  536. return self.red_ship
  537. end
  538. function MateModel:GetTaskRedDot( )
  539. if self:IsFinishAllMarriageTask( 3 ) then
  540. else
  541. local has_can_get = false--可领取
  542. local status = false
  543. for i=1,3 do
  544. --0未接任务1接任务未完成2已完成任务未领取3任务完成并已领取奖励
  545. status = self:GetTaskStatusById( MateConst.SingleDogTask[i] )
  546. if status == 2 then
  547. return true
  548. end
  549. if status ~= 3 then
  550. return false
  551. end
  552. end
  553. end
  554. return false
  555. end
  556. function MateModel:GetMarkRedDot( check_new,role_id )
  557. if check_new then
  558. self.red_mark = {}
  559. local basic = self:GetBasicInfo()
  560. if basic then
  561. for k,v in pairs(basic) do
  562. self.red_mark[v.role_id] = false
  563. for c,d in pairs(Config.Mateanniversary) do
  564. if self:GetMarkCan( v.role_id,d.day ) then
  565. self.red_mark[v.role_id] = true
  566. break
  567. end
  568. end
  569. end
  570. end
  571. end
  572. if role_id then
  573. return self.red_mark[role_id] or false
  574. else
  575. for k,v in pairs(self.red_mark) do
  576. if v then
  577. return true
  578. end
  579. end
  580. end
  581. end
  582. --羁绊日常红点
  583. function MateModel:GetMateDailyRed(check_new)
  584. if check_new then
  585. self.mate_daily_red = false
  586. for k,v in pairs(self.mate_daily_list_info) do
  587. if v.state == 1 or v.state == 0 then--可以做任务和可以领奖时都要给红点
  588. self.mate_daily_red = true
  589. end
  590. end
  591. end
  592. return self.mate_daily_red
  593. end
  594. --商店红点 有抽奖券买的时候要红点
  595. function MateModel:GetMateShopRed(check_new)
  596. if check_new then
  597. self.mate_shop_red = false
  598. self.mate_shop_red_list = {}
  599. local goods_list = ShopModel:getInstance():GetGoodsListInfo(ShopType.MATE)
  600. if goods_list then
  601. for i,v in pairs(goods_list) do
  602. for m,n in pairs(v) do
  603. if n.goods_id == 102305 then--龙神单抽券限购必买,需要给红点
  604. local left_num = n.quota_num - n.sold_out
  605. local have_num = GoodsModel:getInstance():GetSpecialScore(MateConst.MateMoneyId)
  606. if have_num >= n.price*n.discount/100 then
  607. if left_num > 0 then
  608. self.mate_shop_red = true
  609. self.mate_shop_red_list[n.goods_id] = true
  610. end
  611. end
  612. end
  613. end
  614. end
  615. end
  616. end
  617. return self.mate_shop_red
  618. end
  619. function MateModel:GetMateShopRedById(goods_id)
  620. return self.mate_shop_red_list[goods_id] and self.mate_shop_red_list[goods_id] or false
  621. end
  622. --首次结成羁绊一次性红点
  623. function MateModel:GetFirstGetFriendRed(force_turn_false)
  624. if force_turn_false then
  625. self.force_turn_mate_first_red_false = true
  626. self.mate_first_get_friend_red = false
  627. return self.mate_first_get_friend_red
  628. end
  629. if self.force_turn_mate_first_red_false then
  630. self.mate_first_get_friend_red = false
  631. return self.mate_first_get_friend_red
  632. end
  633. local have_no_mate = self:IsNoMateFriend()
  634. if not have_no_mate then--有羁绊了就读缓存,判断是否引导过
  635. local cookie_mate_first_state = CookieWrapper.Instance:GetCookie(CookieLevelType.Account,CookieKey.MATE_FIRST_GET_FRIEND)
  636. if cookie_mate_first_state and cookie_mate_first_state == 1 then--表示已经记录过了,不再执行首次红点的引导更名操作
  637. self.mate_first_get_friend_red = false
  638. else--没存状态说明需要引导红点
  639. self.mate_first_get_friend_red = true
  640. end
  641. else--没有羁绊,则不管缓存,不给引导红点
  642. self.mate_first_get_friend_red = false
  643. end
  644. return self.mate_first_get_friend_red
  645. end
  646. function MateModel:GetGameRewardList( )
  647. -- local data = {}
  648. -- for k,v in pairs(Config.Materhythmmasteraward) do
  649. -- data[v.lv] = v
  650. -- end
  651. -- return data
  652. return {}
  653. end
  654. function MateModel:GetGameTodayGetLv( )
  655. local score_music = 0
  656. local score_ball = 0
  657. local lv_music = false
  658. local lv_ball = false
  659. local basic_music = self:GetGameInfo( MateConst.GameActId.Music )
  660. local basic_ball = self:GetGameInfo( MateConst.GameActId.Ball )
  661. if basic_music then
  662. score_music = basic_music.daily_score
  663. lv_music = self:GetMusicLvByScore( score_music )
  664. end
  665. if basic_ball then
  666. score_ball = basic_ball.daily_score
  667. lv_ball = self:GetBallLvByScore( score_ball )
  668. end
  669. return {[MateConst.GameActId.Music] = lv_music, [MateConst.GameActId.Ball] = lv_ball}
  670. end
  671. function MateModel:GetBallAwardListAndLv( data )
  672. -- if not data then return {},1 end
  673. -- local lv = 1
  674. -- local game_info = self:GetGameInfo(MateConst.GameActId.Ball)
  675. -- local cur_score = data.hits
  676. -- local last_score = game_info and game_info.daily_score or 0
  677. -- if last_score >= cur_score then return {},1 end
  678. -- local result = {}
  679. -- for k,v in pairs(Config.Matecatchballaward) do
  680. -- if cur_score >= v.hit_low then
  681. -- lv = lv >= v.lv and lv or v.lv
  682. -- end
  683. -- if cur_score >= v.hit_low then
  684. -- if last_score < v.hit_low or last_score == 0 then
  685. -- local temp = stringtotable(v.award)
  686. -- for a,b in pairs(temp) do
  687. -- local have = false
  688. -- for c,d in pairs(result) do
  689. -- if d[2] == b[2] and d[1] == b[1] then
  690. -- d[3] = d[3] + b[3]
  691. -- have = true
  692. -- end
  693. -- end
  694. -- if not have then
  695. -- table.insert( result, b )
  696. -- end
  697. -- end
  698. -- end
  699. -- end
  700. -- end
  701. -- return result,lv
  702. return {},1
  703. end
  704. function MateModel:GetMusicAwardListAndLv( data )
  705. -- if not data then return {},1 end
  706. -- local lv = 1
  707. -- local game_info = self:GetGameInfo(MateConst.GameActId.Music)
  708. -- local cur_score = data.score
  709. -- local last_score = game_info and game_info.daily_score or 0
  710. -- if last_score >= cur_score then return {},1 end
  711. -- local result = {}
  712. -- for k,v in pairs(Config.Materhythmmasteraward) do
  713. -- if cur_score >= v.score_low then
  714. -- lv = lv >= v.lv and lv or v.lv
  715. -- end
  716. -- if cur_score >= v.score_low then
  717. -- if last_score < v.score_low or last_score == 0 then
  718. -- local temp = stringtotable(v.award)
  719. -- for a,b in pairs(temp) do
  720. -- local have = false
  721. -- for c,d in pairs(result) do
  722. -- if d[2] == b[2] and d[1] == b[1] then
  723. -- d[3] = d[3] + b[3]
  724. -- have = true
  725. -- end
  726. -- end
  727. -- if not have then
  728. -- table.insert( result, b )
  729. -- end
  730. -- end
  731. -- end
  732. -- end
  733. -- end
  734. -- return result,lv
  735. return {},1
  736. end
  737. function MateModel:GetGameWaitStatus( )
  738. return self.game_wait_status or {}
  739. end
  740. function MateModel:SetGameWaitStatus( value )
  741. self.game_wait_status = value
  742. end
  743. --获取羁绊任务状态
  744. function MateModel:GetSingleDogTaskStatus( )
  745. local cur_id = 0
  746. local over_id = 0
  747. for k,v in ipairs(MateConst.SingleDogTask) do
  748. cur_id = k
  749. local task = TaskModel:GetTaskById( v )
  750. if task then
  751. if TaskModel:getInstance():IsTaskProgressFinish(task) then
  752. --任务完成可领取奖励
  753. cur_id = k
  754. break
  755. elseif TaskModel:getInstance():IsTaskFinished(task) then
  756. --上一个已完成的任务
  757. over_id = k
  758. end
  759. end
  760. end
  761. if cur_id == 0 and over_id ~= 0 then
  762. --全部任务都完成了
  763. cur_id = over_id
  764. end
  765. return cur_id,over_id
  766. end
  767. --获取羁绊任务状态
  768. function MateModel:GetTaskStatusById( task_id )
  769. local status = 0--0未接任务1接任务未完成2已完成任务未领取3任务完成并已领取奖励
  770. local task = TaskModel:getInstance():GetTaskById(task_id)
  771. if task then
  772. status = TaskModel:getInstance():IsTaskProgressFinish(task) and 2 or 1
  773. elseif TaskModel:getInstance():IsTaskFinished(task_id) then
  774. status = 3
  775. end
  776. return status
  777. end
  778. --判定是否完成所有任务(或者是否有任务都在status状态)
  779. function MateModel:IsFinishAllMarriageTask( status )
  780. --0未接任务1接任务未完成2已完成任务未领取3任务完成并已领取奖励
  781. local conf = MateConst.SingleDogTask
  782. local result = true
  783. if status then
  784. for i=1,3 do
  785. if self:GetTaskStatusById( conf[i] ) ~= status then
  786. result = false
  787. break
  788. end
  789. end
  790. else
  791. for i=1,3 do
  792. if self:GetTaskStatusById( conf[i] ) ~= 3 then
  793. result = false
  794. break
  795. end
  796. end
  797. end
  798. return result
  799. end
  800. --交友大厅 查看信息
  801. function MateModel:GetFindFriendData( my_info_is_new )
  802. if my_info_is_new then
  803. local my_data = false
  804. for k,v in pairs(self.find_friend_data) do
  805. if v.role_id == RoleManager.Instance.mainRoleInfo.role_id then
  806. my_data = table.remove(self.find_friend_data,k)
  807. break
  808. end
  809. end
  810. if my_data then
  811. table.insert( self.find_friend_data, 1, my_data )
  812. end
  813. end
  814. return self.find_friend_data or {}
  815. end
  816. --交友大厅 查看信息
  817. function MateModel:SetFindFriendData( value )
  818. local level = RoleManager.Instance.mainRoleInfo.level
  819. local vip_flag = RoleManager.Instance.mainRoleInfo.vip_flag
  820. local sex = RoleManager.Instance.mainRoleInfo.sex
  821. local power = RoleManager.Instance.mainRoleInfo.fighting
  822. for k,v in pairs(value) do
  823. v.dis_lv = math.abs(level - v.level)
  824. v.dis_sex = sex == v.sex and 0 or 1
  825. end
  826. -------------------------
  827. if #value > 1 then
  828. local function sort_call( a,b )
  829. if a.type > b.type then
  830. --置顶信息在普通信息之下
  831. return true
  832. elseif a.type == b.type then
  833. if a.dis_lv < b.dis_lv then
  834. --等级与玩家当前等级差值从小到大排序
  835. return true
  836. elseif a.dis_lv == b.dis_lv then
  837. if a.dis_sex > b.dis_sex then
  838. -- 性别与玩家不同的在上
  839. return true
  840. end
  841. end
  842. end
  843. end
  844. table.sort( value, sort_call )
  845. end
  846. self.find_friend_data = value
  847. end
  848. --通过类型id判读是否是羁绊信物
  849. function MateModel:GetIsMateShipByTypeId( type_id )
  850. if not type_id then return false end
  851. if not self.ship_list_by_typeid then
  852. self.ship_list_by_typeid = {}
  853. for k,v in pairs(Config.Mateboat) do
  854. self.ship_list_by_typeid[v.goods_id] = true
  855. end
  856. end
  857. return self.ship_list_by_typeid[type_id] and true or false
  858. end
  859. --获得已激活的羁绊信物技能
  860. function MateModel:GetActiveSkillList( stage,star )
  861. local list_info = self:GetSkillList( )
  862. local result = {}
  863. for k,v in pairs(list_info) do
  864. table.insert( result, {skill_id = v.skill_id, skill_lv = 1, is_lock = self:GetSkillIsLock(v.skill_id, stage)} )
  865. end
  866. return result
  867. end
  868. --羁绊拍照活动信息
  869. function MateModel:GetPhotoActInfo( )
  870. return self.photo_act_info
  871. end
  872. function MateModel:SetPhotoActInfo( value )
  873. self.photo_act_info = value
  874. end
  875. --增送/收 羁绊点红点
  876. function MateModel:GetGiftRedDot( check_new )
  877. if check_new then
  878. self.red_gift = false
  879. local basic = self:GetBasicInfo( )
  880. for k,v in pairs(basic) do
  881. local have_get = SocialityModel.getInstance():IsInGiftRoleList(v.role_id,SocialityModel.TicketType.Mate)--对方已经赠送
  882. local no_send = not SocialityModel.getInstance():IsInSendRoleList(v.role_id,SocialityModel.TicketType.Mate)--未赠送给对方
  883. if have_get and SocialityModel.getInstance():GetTicketsGiftState(v.role_id,SocialityModel.TicketType.Mate) == 0 then
  884. --好友有赠送--未领取
  885. self.red_gift = true
  886. break
  887. elseif no_send then
  888. --未赠送给对方
  889. self.red_gift = true
  890. break
  891. end
  892. end
  893. end
  894. return self.red_gift
  895. end
  896. --14953 日常任务列表信息
  897. function MateModel:SetMateDailyListInfo(vo)
  898. --前端给随机任务描述,如果重新那协议数据发现任务内容没变,就保持跟之前的随机数一致
  899. for k,v in pairs(vo.mate_list) do
  900. for m,n in pairs(self.mate_daily_list_info) do
  901. if n.role_id == v.role_id and n.task_id == v.task_id then
  902. if n.random_num then
  903. v.random_num = n.random_num
  904. end
  905. end
  906. end
  907. end
  908. self.mate_daily_list_info = vo.mate_list
  909. self.mate_daily_other_list_info = vo.list
  910. local sort_func = function ( a, b )
  911. return a.role_id < b.role_id
  912. end
  913. table.sort(self.mate_daily_list_info, sort_func)
  914. table.sort(self.mate_daily_other_list_info, sort_func)
  915. for k,v in pairs(self.mate_daily_list_info) do
  916. if v.task_id == 2 and v.state == 0 then--找到私聊任务,私聊任务需要前端去判断是否触发并通知后端
  917. self.mate_daily_task_need_chat_role[v.role_id] = true
  918. else
  919. self.mate_daily_task_need_chat_role[v.role_id] = nil
  920. end
  921. if v.task_id == 4 and v.state == 0 then--找到分享羁绊任务,同私聊任务,需要前端判断触发并通知后端
  922. self.mate_daily_task_need_share_mate_role[v.role_id] = true
  923. else
  924. self.mate_daily_task_need_share_mate_role[v.role_id] = nil
  925. end
  926. if not v.random_num then
  927. local task_cfg = self:GetMateDailyTaskCfgById(v.task_id)
  928. local condition_tb = stringtotable(Trim(task_cfg.condition))
  929. v.random_num = math.random(1, TableSize(condition_tb))
  930. end
  931. end
  932. end
  933. function MateModel:GetMateDailyTaskNeedChatData( )
  934. return self.mate_daily_task_need_chat_role
  935. end
  936. function MateModel:GetMateDailyTaskNeedShareData( )
  937. return self.mate_daily_task_need_share_mate_role
  938. end
  939. function MateModel:GetMateDailyListInfo( )
  940. return self.mate_daily_list_info
  941. end
  942. function MateModel:GetMateDailyOtherListInfo( )
  943. return self.mate_daily_other_list_info
  944. end
  945. --14954 更新日常任务状态
  946. function MateModel:UpdateMateDailyState(vo)
  947. for k,v in pairs(vo.mate_list) do
  948. for m,n in pairs(self.mate_daily_list_info) do
  949. if n.role_id == v.role_id then
  950. n.progress = v.progress
  951. n.state = v.state
  952. end
  953. end
  954. end
  955. end
  956. --获取日常任务对应配置
  957. function MateModel:GetMateDailyTaskCfgById(task_id)
  958. return Config.Matedailytask[task_id] and Config.Matedailytask[task_id] or nil
  959. end
  960. --更新任务领奖状态
  961. function MateModel:UpdateMateDailyRewardState(vo)
  962. for k,v in pairs(self.mate_daily_list_info) do
  963. if vo.role_id == v.role_id and v.state == 1 then
  964. v.state = 2
  965. break
  966. end
  967. end
  968. end
  969. function MateModel:SetMateAdBtnWorldPos(x, y)
  970. self.mate_ad_btn_pos_x = x
  971. self.mate_ad_btn_pos_y = y
  972. end
  973. function MateModel:GetMateAdBtnWorldPos()
  974. return self.mate_ad_btn_pos_x, self.mate_ad_btn_pos_y
  975. end
  976. function MateModel:SetMateAdRewardStatus(bool)
  977. self.have_get_matead_reward = bool or false
  978. end
  979. function MateModel:GetMateAdRewardStatus()
  980. return self.have_get_matead_reward
  981. end