源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

729 line
24 KiB

  1. CompetingListModel = CompetingListModel or BaseClass(BaseVo, true)
  2. local CompetingListModel = CompetingListModel
  3. CompetingListModel.REQUEST_INFO = "CompetingListModel.REQUEST_INFO"
  4. CompetingListModel.OPEN_COMPETING_LIST_VIEW = "CompetingListModel.OPEN_COMPETING_LIST_VIEW"--打开主界面
  5. CompetingListModel.UPDATE_COMPETING_LIST_VIEW = "CompetingListModel.UPDATE_COMPETING_LIST_VIEW"--更新主界面
  6. CompetingListModel.REQUEST_INFO = "CompetingListModel.REQUEST_INFO"--请求协议
  7. CompetingListModel.OPEN_COMPETING_LIST_RESULT_VIEW = "CompetingListModel.OPEN_COMPETING_LIST_RESULT_VIEW"--打开结算界面
  8. CompetingListModel.CLOSE_LUCK_DRAW_RESULT_VIEW = "CompetingListModel.CLOSE_LUCK_DRAW_RESULT_VIEW"--关闭结算界面
  9. CompetingListModel.UPDATE_HUNT_RECORD = "CompetingListModel.UPDATE_HUNT_RECORD"--更新记录数据
  10. CompetingListModel.OPEN_COMPETING_LIST_TIP_VIEW = "CompetingListModel.OPEN_COMPETING_LIST_TIP_VIEW"--打开竞榜提示界面
  11. CompetingListModel.UPDATE_BOX_AWARD = "CompetingListModel.UPDATE_BOX_AWARD"--更新宝箱领取信息
  12. CompetingListModel.UPDATE_RANK_INFO = "CompetingListModel.UPDATE_RANK_INFO"--更新排名
  13. CompetingListModel.UPDATE_FONTANI_VIEW = "CompetingListModel.UPDATE_FONTANI_VIEW"--更新许愿池界面
  14. CompetingListModel.OPEN_FONTANI_VIEW = "CompetingListModel.OPEN_FONTANI_VIEW"--打开许愿池界面
  15. CompetingListModel.OPEN_COMPETING_LIST_AWARD_SHOW_VIEW = "CompetingListModel.OPEN_COMPETING_LIST_AWARD_SHOW_VIEW"--奖池道具展示界面
  16. function CompetingListModel:__init()
  17. CompetingListModel.Instance = self
  18. self:Reset()
  19. end
  20. function CompetingListModel:Reset()
  21. self.view_info = {}--界面信息
  22. self.award_cfg = {}--展示奖励配置
  23. self.fontani_award_cfg = {}--许愿池展示奖励配置
  24. self.box_award_cfg = {}--宝箱奖励配置
  25. self.rank_award_cfg = {}--排行奖励配置
  26. self.rank_score_cfg = {}--排行积分信息配置
  27. self.record = {}--记录数据
  28. self.next_show_state_list = {} --下次是否打开相关功能的提示列表
  29. self.const_cfg = {}--常量配置
  30. self.result_info = {}--结算界面信息
  31. self.is_open_view_list = {}--打开过的界面列表
  32. self.cur_view_type_list = {}--当前界面类型列表
  33. self.competing_buy_toggle = {}--竞榜购买toggle
  34. self.red_info_list = {}--红点信息列表
  35. self.is_open_view = false
  36. self:InitRankScoreCFG()
  37. self:InitBoxAwardCFG()
  38. self:InitRankCFG()
  39. self:InitTvCFG()
  40. self:InitConstCfg()
  41. end
  42. function CompetingListModel:getInstance()
  43. if CompetingListModel.Instance == nil then
  44. CompetingListModel.Instance = CompetingListModel.New()
  45. end
  46. return CompetingListModel.Instance
  47. end
  48. --检查界面是否打开过
  49. function CompetingListModel:CheckViewIsOpened( base_type )
  50. return self.is_open_view_list[base_type]
  51. end
  52. --设置界面是否打开过
  53. function CompetingListModel:SetViewIsOpened( base_type )
  54. self.is_open_view_list[base_type] = base_type
  55. end
  56. --检查界面奖励展示类型
  57. function CompetingListModel:GetCurViewType( base_type )
  58. return self.cur_view_type_list[base_type]
  59. end
  60. --设置界面奖励展示类型
  61. function CompetingListModel:SetCurViewType( base_type,type )
  62. self.cur_view_type_list[base_type] = type
  63. end
  64. --彩钻购买提示
  65. function CompetingListModel:CheckIsNeedToShowView(tips_type)
  66. local show = self.next_show_state_list[tips_type]
  67. if show == nil then
  68. show = true
  69. end
  70. return show
  71. end
  72. --初始化竞榜界面显示配置
  73. function CompetingListModel:InitComptingIconCfg( )
  74. if not self.view_cfg then
  75. self.view_cfg = {}
  76. self:InitViewCfg()
  77. end
  78. end
  79. --界面显示配置初始化
  80. function CompetingListModel:InitViewCfg( )
  81. local data = DeepCopy(Config.Raceranktime)
  82. local openDay = ServerTimeModel:getInstance():GetOpenServerDay()
  83. for k,v in pairs(data) do
  84. v.condition = stringtotable(v.condition)
  85. v.open_day = stringtotable(v.open_day)
  86. v.name = Trim(v.name)
  87. if tonumber(v.open_day[1]) <= openDay and tonumber(v.open_day[2]) >= openDay then--在开服天数区间范围内
  88. self.view_cfg[v.act_id] = v
  89. if v.type == 1 then
  90. local icon_cfg = {name=v.name, icon_type = 33300000 + v.act_id, sub_location = 3, pos_index = 31, module_id = 333, sub_id = nil, open_lv = v.lv, icon_name = "icon_rightTop_3001" or Trim(v.icon_res), effect_name = "effect_tubiao_001", not_delete = false, count_down_time = 0,act_base_type=true}
  91. ActivityIconManager:getInstance().icon_cfg_new_list[icon_cfg.icon_type] = icon_cfg
  92. elseif v.type == 2 then
  93. local icon_cfg = {name=v.name, icon_type = 1033300000 + v.act_id, sub_location = 3, pos_index = 31, module_id = 333, open_lv = v.lv, icon_name = Trim(v.icon_res), effect_name = "effect_tubiao_001", not_delete = false, count_down_time = 0,act_base_type=true}
  94. ActivityIconManager:getInstance().icon_cfg_new_list[icon_cfg.icon_type] = icon_cfg
  95. end
  96. end
  97. end
  98. GlobalEventSystem:Fire(ActivityIconManager.REFRESH_ICON, true)
  99. end
  100. --设置常量配置
  101. function CompetingListModel:InitConstCfg( )
  102. for k,v in pairs(Config.Racerankconstant) do
  103. local key = Trim(v.key)
  104. self.const_cfg[key] = v
  105. end
  106. if self.const_cfg["rock_cost_1"] then
  107. self.one_cost_data = stringtotable(self.const_cfg["rock_cost_1"].value)
  108. end
  109. if self.const_cfg["rock_cost_10"] then
  110. self.ten_cost_data = stringtotable(self.const_cfg["rock_cost_10"].value)
  111. end
  112. self.one_score = 0
  113. if self.const_cfg["rock_score_1"] then
  114. self.one_score = self.const_cfg["rock_score_1"].value
  115. end
  116. if self.const_cfg["wish_cost_rune"] then--符文消耗道具
  117. self.wish_cost_rune = self.const_cfg["wish_cost_rune"].value
  118. end
  119. if self.const_cfg["wish_cost_coin"] then--符文消耗道具
  120. self.wish_cost_coin = self.const_cfg["wish_cost_coin"].value
  121. end
  122. if self.const_cfg["wish_score_rune"] then--符文许愿获得积分
  123. self.wish_score_rune = self.const_cfg["wish_score_rune"].value
  124. end
  125. if self.const_cfg["wish_score_coin"] then--金币许愿获得积分
  126. self.wish_score_coin = self.const_cfg["wish_score_coin"].value
  127. end
  128. if self.const_cfg["discount_opday"] then--开服x天后进行打折
  129. self.discount_opday = self.const_cfg["discount_opday"].value
  130. end
  131. if self.const_cfg["discount_rate"] then--开服x天后进行打折
  132. self.discount_rate = stringtotable(self.const_cfg["discount_rate"].value)
  133. end
  134. if self.const_cfg["discount_times"] then--每期活动打折最大次数
  135. self.discount_times = self.const_cfg["discount_times"].value
  136. end
  137. local one_data = self.one_cost_data[1]
  138. local ten_data = self.ten_cost_data[1]
  139. if not one_data or not ten_data then return end
  140. self.cost_id = one_data[2]
  141. self.one_cost = one_data[3]
  142. self.ten_cost = ten_data[3]
  143. self.discount_cfg = {}--打折配置
  144. local cfg = DeepCopy(Config.Racerankdiscount)
  145. for i,v in ipairs(cfg) do
  146. if v.is_show == 1 then
  147. local count = #self.discount_cfg + 1
  148. self.discount_cfg[count] = v
  149. if v.cost_list then
  150. local goods_list = stringtotable(v.cost_list)
  151. if goods_list and goods_list[1] then
  152. self.discount_cfg[count].discount = goods_list[1][3]
  153. end
  154. end
  155. end
  156. end
  157. end
  158. --通过subtype得到右边奖励数据
  159. function CompetingListModel:GetRankAwardCfg( base_type,stage )
  160. if self.rank_award_cfg[base_type] and self.rank_award_cfg[base_type][stage] then
  161. return self.rank_award_cfg[base_type][stage]
  162. end
  163. return nil
  164. end
  165. --设置展示排行榜奖励配置
  166. function CompetingListModel:InitRankCFG( )
  167. local data = DeepCopy(Config.Racerankrankaward)
  168. for k,v in pairs(data) do
  169. if not self.rank_award_cfg[v.act_id] then
  170. self.rank_award_cfg[v.act_id] = {}
  171. end
  172. v.award = stringtotable(v.award)
  173. if not self.rank_award_cfg[v.act_id][v.stage] then
  174. self.rank_award_cfg[v.act_id][v.stage] = {}
  175. end
  176. self.rank_award_cfg[v.act_id][v.stage][v.min_rank] = v
  177. end
  178. end
  179. --通过base_type得到右边奖励数据
  180. function CompetingListModel:GetRankScoreCfg( base_type )
  181. if self.rank_score_cfg[base_type] then
  182. return self.rank_score_cfg[base_type]
  183. end
  184. return nil
  185. end
  186. --设置展示排行榜积分配置
  187. function CompetingListModel:InitRankScoreCFG( )
  188. local data = DeepCopy(Config.Racerankrequirement)
  189. for k,v in pairs(data) do
  190. if not self.rank_score_cfg[v.act_id] then
  191. self.rank_score_cfg[v.act_id] = {}
  192. end
  193. self.rank_score_cfg[v.act_id][v.ranking_lower] = v
  194. end
  195. local min = 0
  196. local max = 0
  197. for k,v in pairs(self.rank_score_cfg) do
  198. for kk,vv in pairs(v) do
  199. if type(vv) == "table" and vv.ranking_upper and vv.ranking_lower then
  200. min = vv.ranking_upper
  201. max = vv.ranking_lower
  202. if max > min then
  203. for i=min,max do
  204. if not v[i] then
  205. v[i] = vv
  206. end
  207. end
  208. end
  209. end
  210. end
  211. end
  212. end
  213. --通过subtype得到右边奖励数据
  214. function CompetingListModel:GetAwardCfg( base_type,stage )
  215. if self.award_cfg[base_type] and self.award_cfg[base_type][stage] then
  216. return self.award_cfg[base_type][stage]
  217. end
  218. return nil
  219. end
  220. --设置展示奖池奖励配置
  221. function CompetingListModel:InitTvCFG( )
  222. local data = DeepCopy(Config.Racerankaward)
  223. for k,v in pairs(data) do
  224. v.award = stringtotable(v.award)
  225. if v.type == 0 then
  226. if not self.award_cfg[v.act_id] then
  227. self.award_cfg[v.act_id] = {}
  228. end
  229. if not self.award_cfg[v.act_id][v.stage] then
  230. self.award_cfg[v.act_id][v.stage] = {}
  231. end
  232. if v.award[1] then
  233. self.award_cfg[v.act_id][v.stage][v.award_id] = v.award[1]
  234. end
  235. else
  236. if not self.fontani_award_cfg[v.act_id] then
  237. self.fontani_award_cfg[v.act_id] = {}
  238. end
  239. if not self.fontani_award_cfg[v.act_id][v.type] then
  240. self.fontani_award_cfg[v.act_id][v.type] = {}
  241. end
  242. if not self.fontani_award_cfg[v.act_id][v.type][v.stage] then
  243. self.fontani_award_cfg[v.act_id][v.type][v.stage] = {}
  244. end
  245. if v.award[1] then
  246. self.fontani_award_cfg[v.act_id][v.type][v.stage][v.award_id] = v.award[1]
  247. end
  248. end
  249. end
  250. end
  251. --获得宝箱奖励配置 通过类型and stage
  252. function CompetingListModel:GetBoxAwardCFGByType( base_type,stage )
  253. if self.box_award_cfg[base_type] and self.box_award_cfg[base_type][stage] then
  254. return self.box_award_cfg[base_type][stage]
  255. end
  256. return nil
  257. end
  258. --初始化宝箱奖励配置
  259. function CompetingListModel:InitBoxAwardCFG( )
  260. local data = DeepCopy(Config.Raceranktimesaward)
  261. for k,v in pairs(data) do
  262. if not self.box_award_cfg[v.act_id] then
  263. self.box_award_cfg[v.act_id] = {}
  264. end
  265. v.award = stringtotable(v.award)
  266. if not self.box_award_cfg[v.act_id][v.stage] then
  267. self.box_award_cfg[v.act_id][v.stage] = {}
  268. end
  269. self.box_award_cfg[v.act_id][v.stage][v.award_id] = v
  270. end
  271. -- print("huangcong:CompetingListModel [128]: ",self.box_award_cfg)
  272. -- PrintTable(self.box_award_cfg)
  273. end
  274. --获得当前世界等级阶段
  275. function CompetingListModel:GetCurWorldLvStage( )
  276. local worldLv = RoleManager.Instance.mainRoleInfo.worldLv or 0
  277. for i,v in ipairs(Config.Racerankworldlev) do
  278. if v.max_lev >= worldLv then
  279. return v.stage
  280. end
  281. end
  282. end
  283. --检测竞榜和图标是否需要开启
  284. function CompetingListModel:CheckIconBoolOpen(base_type)
  285. local level = RoleManager.Instance.mainRoleInfo.level
  286. local is_open = false
  287. local end_time = 0
  288. local server_data = self.view_info[base_type]
  289. -- local key = string.format("%s@%s",333,base_type)
  290. local sub_base_type = 33300000
  291. local cfg = self.view_cfg[base_type]
  292. if cfg and cfg.type and cfg.type == 2 then
  293. sub_base_type = 1033300000
  294. end
  295. if server_data and server_data.end_show_time and self.view_cfg[base_type] and level >= self.view_cfg[base_type].lv then
  296. is_open = server_data.end_show_time - TimeUtil:getServerTime()
  297. is_open2 = server_data.end_time - TimeUtil:getServerTime()
  298. print("huangcong:CompetingListModel [317]: ",sub_base_type+base_type)
  299. if is_open > 0 then
  300. if is_open2 > 0 then
  301. ActivityIconManager:getInstance():addIcon(sub_base_type+base_type, is_open2)
  302. else
  303. ActivityIconManager:getInstance():addIcon(sub_base_type+base_type, is_open, "已截止")
  304. end
  305. else
  306. ActivityIconManager:getInstance():deleteIcon(sub_base_type+base_type)
  307. end
  308. else
  309. ActivityIconManager:getInstance():deleteIcon(sub_base_type+base_type)
  310. end
  311. end
  312. --检查竞榜和许愿池图标红点
  313. function CompetingListModel:CheckMainIconRedDot(base_type)
  314. local bool = false
  315. if base_type then
  316. local server_data = self.view_info[base_type]
  317. local sub_base_type = 33300000
  318. if server_data then
  319. if server_data.type and server_data.type == 2 then
  320. sub_base_type = 1033300000
  321. end
  322. local is_open = server_data.end_time - TimeUtil:getServerTime()
  323. if is_open and is_open > 0 and server_data.type == 1 and server_data.free_times and server_data.free_times > 0 then
  324. bool = true
  325. end
  326. if server_data.gold_coin and server_data.gold_coin >= 1 then
  327. bool = true
  328. end
  329. if server_data.award_list then
  330. for k,v in pairs(server_data.award_list) do
  331. if v.state == 1 then
  332. bool = true
  333. break
  334. end
  335. end
  336. end
  337. end
  338. -- print("huangcong:CompetingListModel [start:373] :", self.red_info_list)
  339. -- PrintTable(self.red_info_list)
  340. -- print("huangcong:CompetingListModel [end]")
  341. self.red_info_list[base_type] = bool
  342. KfActivityModel:getInstance():IsNeedRed(KfActivityModel.TabID.Competing,nil,base_type)--竞榜
  343. GlobalEventSystem:Fire(ActivityIconManager.UPDATE_ICON_TIPS, sub_base_type+base_type, bool)
  344. return
  345. end
  346. end
  347. function CompetingListModel:SetViewInfoOne( v )
  348. if not self.view_info[v.base_type] then
  349. print("huangcong:CompetingListModel [237]竞榜活动数据有问题: ",v.base_type)
  350. return
  351. end
  352. local new_data = {}
  353. for kk,vv in pairs(v.award_list) do
  354. new_data[vv.id] = vv
  355. end
  356. v.reward_list = new_data
  357. local record_data = {}
  358. for kk,vv in pairs(v.rank_list) do
  359. record_data[vv.rank] = vv
  360. end
  361. v.rank_list = record_data
  362. self.view_info[v.base_type].buy_times = v.buy_times
  363. self.view_info[v.base_type].free_times = v.free_times
  364. self.view_info[v.base_type].sum_score = v.sum_score
  365. self.view_info[v.base_type].award_list = new_data
  366. self.view_info[v.base_type].times = times
  367. self.view_info[v.base_type].rank_list = record_data
  368. self:CheckMainIconRedDot(v.base_type)
  369. end
  370. function CompetingListModel:SetViewInfoBase( v )
  371. local new_data = {}
  372. if not self.view_info[v.base_type] then
  373. self.view_info[v.base_type] = {}
  374. end
  375. self.view_info[v.base_type].end_time = v.end_time
  376. self.view_info[v.base_type].end_show_time = v.end_show_time
  377. self.view_info[v.base_type].world_stage = v.world_stage
  378. local is_open = v.end_show_time - TimeUtil:getServerTime() > 0
  379. -- print("huangcong:CompetingListModel [264]is_open: ",v.base_type,is_open)
  380. local cfg = self.view_cfg[v.base_type]
  381. if is_open and cfg then
  382. if cfg.type == 1 then
  383. local function callback( ... )
  384. CompetingListModel:getInstance():Fire(CompetingListModel.REQUEST_INFO,33301,v.base_type)
  385. end
  386. setTimeout(callback,0.05)
  387. elseif cfg.type == 2 then
  388. local function callback( ... )
  389. CompetingListModel:getInstance():Fire(CompetingListModel.REQUEST_INFO,33305,v.base_type)
  390. end
  391. setTimeout(callback,0.05)
  392. end
  393. end
  394. -- self:CheckIconBoolOpen(v.base_type)--20200831--这里要合到开服活动页签里去 所以屏蔽图标检查
  395. end
  396. --设置抽奖结果
  397. function CompetingListModel:SetResult( vo )
  398. if not vo or not vo.base_type then return end
  399. if not self.result_info[vo.base_type] then
  400. self.result_info[vo.base_type] = {}
  401. end
  402. self.result_info[vo.base_type] = vo
  403. local new_award_list = {}
  404. for k,v in ipairs(vo.reward_list) do
  405. if self.award_cfg[vo.base_type] and self.award_cfg[vo.base_type][vo.stage] and self.award_cfg[vo.base_type][vo.stage][v.award_id] then
  406. local data = self.award_cfg[vo.base_type][vo.stage][v.award_id]
  407. if data then
  408. new_award_list[#new_award_list + 1] = data
  409. end
  410. end
  411. end
  412. local data = {}
  413. data.award = new_award_list
  414. data.col_num = 5
  415. -- GlobalEventSystem:Fire(EventName.OPEN_COM_AWARD_RESULT_VIEW, data)
  416. GiftModel:getInstance():Fire(GiftModel.OPEN_SHOW_ACT_GOODS_VIEW, new_award_list)
  417. self.result_info[vo.base_type].reward_list = new_award_list
  418. -- print("huangcong:CompetingListModel [448]vo: ",vo)
  419. -- PrintTable(vo)
  420. end
  421. --获取打开界面状态
  422. function CompetingListModel:getIsOpenView()
  423. return self.is_open_view
  424. end
  425. --是否进入打折期
  426. function CompetingListModel:IsDiscountOpen( base_type )
  427. do return false end
  428. local open_day = ServerTimeModel:getInstance():GetOpenServerDay()
  429. local has_discount = true
  430. if self.view_info[base_type] and TableSize(self.view_info[base_type]) > 0 then
  431. local max_num = self.discount_times
  432. if self.view_info[base_type].buy_times and self.view_info[base_type].buy_times >= max_num then
  433. has_discount = false
  434. end
  435. end
  436. return false
  437. -- return open_day >= (self.discount_opday or 1) and has_discount
  438. end
  439. function CompetingListModel:GetIsNoShowAskView( )
  440. return self.is_no_show_ask_view
  441. end
  442. function CompetingListModel:SetIsNoShowAskView( value )
  443. self.is_no_show_ask_view = value
  444. end
  445. function CompetingListModel:GetDiscount( buy_time,base_type )
  446. local discount = 1
  447. local has_discount = self:IsDiscountOpen(base_type)
  448. if has_discount then
  449. for k,v in pairs(Config.Racerankdiscount) do
  450. if buy_time >= v.times_min and buy_time <= v.times_max then
  451. local goods_list = stringtotable(v.cost_list)
  452. if goods_list and goods_list[1] then
  453. discount = goods_list[1][3]
  454. break
  455. end
  456. end
  457. end
  458. end
  459. return discount
  460. end
  461. --获得购买次数
  462. function CompetingListModel:GetBuyNum( base_type )
  463. return self.view_info[base_type] and self.view_info[base_type].buy_times or 0
  464. end
  465. --计算需要的道具材料
  466. function CompetingListModel:MathNeedCost( use_type,base_type )
  467. local one_price = GoodsModel:getInstance():GetGoodsPrice(self.cost_id) or 60
  468. local good_num = GoodsModel:getInstance():GetTypeGoodsNum(self.cost_id)
  469. local need_cost = 0
  470. local sum_need_cost = self:GetDiscount(1+self:GetBuyNum(base_type),base_type)
  471. if good_num >= sum_need_cost then
  472. need_cost = 0
  473. else
  474. need_cost = (sum_need_cost - good_num)
  475. end
  476. return need_cost,sum_need_cost
  477. end
  478. function CompetingListModel:NeedPrice( jin,one_price,num,good_name,good_num,times,base_type)
  479. local cur_view_cfg = self.view_cfg[base_type]
  480. if not base_type or not cur_view_cfg then return end
  481. local function ok( ... )
  482. if jin >= one_price*(num - good_num) then
  483. self:Fire(CompetingListModel.REQUEST_INFO, 33302, base_type, times, 1)
  484. else
  485. local qc_data = {
  486. price = one_price*(num - good_num),
  487. }
  488. GlobalEventSystem:Fire(EventName.OPEN_RECHARGE_TIP_VIEW, true, qc_data)
  489. end
  490. end
  491. if self.competing_buy_toggle[base_type] then
  492. ok()
  493. else
  494. local need_cost,max_need_cost = self:MathNeedCost(times,base_type)
  495. local lucky_type = 1
  496. if times == 1 then
  497. lucky_type = 1
  498. elseif times == 10 then
  499. lucky_type = 2
  500. end
  501. local has_discount = self:IsDiscountOpen(base_type)
  502. if has_discount and times == 10 then--只有10连才增加判断
  503. if self:GetIsNoShowAskView() then
  504. ok()
  505. else
  506. CompetingListAskView.New():Open({max_need_cost = max_need_cost, need_cost=need_cost, use_type=lucky_type, base_type = base_type})
  507. end
  508. else
  509. local need_price = one_price*(num - good_num)
  510. local need_num = math.ceil(need_price/one_price)
  511. local cur_type_str = string.format("抽奖 %s 次", times)
  512. if cur_view_cfg then
  513. cur_type_str = cur_type_str
  514. end
  515. local function toggle_function( flag )
  516. self.competing_buy_toggle[base_type] = flag
  517. end
  518. local asset, source = WordManager:GetCommonMoneyIcon(1)
  519. local toggle_tip_data = {
  520. gold_ab_res = asset,
  521. gold_res = source,
  522. price = need_price,
  523. insufficientText = "",
  524. priceText = string.format("<color=#fdffc2> %s </color> 补齐所需的 %s\n%s",need_price,good_name,cur_type_str),
  525. titleText = "提示",
  526. ok_callback = ok,
  527. toggle_function = toggle_function,
  528. is_complex_ok_callback = true,
  529. }
  530. GlobalEventSystem:Fire(EventName.OPEN_COM_TOGGLE_TIP_VIEW, toggle_tip_data)
  531. end
  532. end
  533. end
  534. --获得界面数据
  535. function CompetingListModel:GetCompetingInfoList( )
  536. return self.view_info
  537. end
  538. --获得界面数据
  539. function CompetingListModel:GetCompetingCfg( base_type )
  540. return self.view_cfg[base_type]
  541. end
  542. --获得竞榜活动开启列表
  543. function CompetingListModel:GetCompetingOpenActList( act_type )
  544. local my_level = RoleManager.Instance.mainRoleInfo.level
  545. local is_open = false
  546. local end_time = 0
  547. local competing_server_data = self:GetCompetingInfoList()
  548. local open_list = {}
  549. if competing_server_data and TableSize(competing_server_data) > 0 then
  550. for n,l in pairs(competing_server_data) do
  551. local server_data = l
  552. local sub_base_type = 33300000
  553. local competing_cfg = self:GetCompetingCfg(n)
  554. if competing_cfg then
  555. local icon_act_type = CustomActivityModel.CustomIconActType.KfAct--默认放在开服活动图标里面
  556. for k,v in pairs(competing_cfg.condition) do
  557. if v[1] == "icon" then
  558. icon_act_type = tonumber(v[2])
  559. break
  560. end
  561. end
  562. if icon_act_type == act_type then
  563. if competing_cfg.type and competing_cfg.type == 2 then
  564. sub_base_type = 1033300000
  565. end
  566. if server_data and server_data.end_show_time and my_level >= competing_cfg.lv then
  567. is_open = server_data.end_show_time - TimeUtil:getServerTime()
  568. is_open2 = server_data.end_time - TimeUtil:getServerTime()
  569. if is_open > 0 then
  570. if is_open2 > 0 then
  571. local data = DeepCopy(competing_cfg)
  572. data.sub_type = sub_base_type+n
  573. data.id = KfActivityModel.TabID.Competing
  574. data.base_type = CustomActivityModel.CustomActBaseType.COPETING
  575. data.sort_id = 11
  576. open_list[#open_list + 1] = data
  577. end
  578. end
  579. end
  580. end
  581. end
  582. end
  583. end
  584. return open_list
  585. end
  586. --获得竞榜红点列表
  587. function CompetingListModel:GetComtingRedList( )
  588. return self.red_info_list
  589. end
  590. ------------------------------------------------许愿池相关
  591. function CompetingListModel:SetFontaniResult( vo )--设置抽奖结果
  592. if not vo or not vo.base_type then return end
  593. if not self.result_info[vo.base_type] then
  594. self.result_info[vo.base_type] = {}
  595. end
  596. self.result_info[vo.base_type] = vo
  597. local new_award_list = {}
  598. for k,v in ipairs(vo.reward_list) do
  599. if self.fontani_award_cfg[vo.base_type] and self.fontani_award_cfg[vo.base_type][vo.opty]
  600. and self.fontani_award_cfg[vo.base_type][vo.opty][vo.stage]
  601. and self.fontani_award_cfg[vo.base_type][vo.opty][vo.stage][v.award_id] then
  602. local data = self.fontani_award_cfg[vo.base_type][vo.opty][vo.stage][v.award_id]
  603. new_award_list[#new_award_list + 1] = data
  604. end
  605. end
  606. self.result_info[vo.base_type].reward_list = new_award_list
  607. -- print("huangcong:CompetingListModel [468]vo: ",vo)
  608. -- PrintTable(vo)
  609. end
  610. function CompetingListModel:GetFonTaniRuneTimeCfg( rune_times )
  611. for k,v in pairsByKeys(Config.Racerunecost) do
  612. if v.id >= rune_times then
  613. return v
  614. end
  615. end
  616. end
  617. function CompetingListModel:GetFonTaniCoinCfg( coin )
  618. for k,v in pairsByKeys(Config.Racewishcoin) do
  619. if coin >= v.min_gold and coin <= v.max_gold then
  620. return v
  621. end
  622. end
  623. if coin == 0 then
  624. return Config.Racewishcoin[1]
  625. end
  626. end
  627. --得到许愿池奖励数据
  628. function CompetingListModel:GetFontaniAwardCfg( base_type,stage,type )
  629. if self.fontani_award_cfg[base_type] and self.fontani_award_cfg[base_type][type] and self.fontani_award_cfg[base_type][type][stage] then
  630. return self.fontani_award_cfg[base_type][type][stage]
  631. end
  632. return nil
  633. end
  634. --设置许愿池界面数据
  635. function CompetingListModel:SetFontaniViewInfoOne( v )
  636. if not self.view_info[v.base_type] then
  637. print("huangcong:CompetingListModel [348]许愿池数据有问题: ",v.base_type)
  638. return
  639. end
  640. local new_data = {}
  641. for kk,vv in pairs(v.award_list) do
  642. new_data[vv.id] = vv
  643. end
  644. v.reward_list = new_data
  645. self.view_info[v.base_type].type = v.type
  646. self.view_info[v.base_type].gold_coin = v.gold_coin
  647. self.view_info[v.base_type].total = v.total
  648. self.view_info[v.base_type].sum_score = v.score
  649. self.view_info[v.base_type].rune_times = v.rune_times
  650. self.view_info[v.base_type].award_list = new_data
  651. self.view_info[v.base_type].base_type = v.base_type
  652. -- print("huangcong:CompetingListModel [390]: ",self.view_info[v.base_type])
  653. -- PrintTable(self.view_info[v.base_type])
  654. self:CheckMainIconRedDot(v.base_type)
  655. end
  656. --得到展示战力
  657. function CompetingListModel:GetCompetingShowFight( vo )
  658. if not vo or #vo < 3 then return end
  659. if vo[1] == 146 then--如果是进阶
  660. return FosterModel:getInstance():GetMinStageAttrFight(vo[3],1,0) or 0
  661. elseif vo[1] == 163 then--如果是宠物
  662. return PetModel:getInstance():GetPetBaseFightCfg(vo[3],1,1) or 0
  663. end
  664. end
  665. --获取货币ID
  666. function CompetingListModel:GetCompetingCostId( )
  667. local one_data = CompetingListModel:getInstance().one_cost_data[1]
  668. return one_data[2]
  669. end