源战役客户端
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.

464 lines
13 KiB

  1. FuliModel = FuliModel or BaseClass(BaseVo)
  2. local table_insert = table.insert
  3. function FuliModel:__init()
  4. FuliModel.Instance = self
  5. self:Reset()
  6. self:InitFuliSignCFG()
  7. self:InitFuliLevelCFG()
  8. self:InitFuliAICFG()
  9. self:InitFuliAITalkCFG()
  10. self:InitFuliTotalSignCFG()
  11. end
  12. function FuliModel:Reset()
  13. self.fuli_sign_info = {}--签到数据
  14. self.fuli_level_info = {}--冲级数据
  15. self.fuli_sign_cfg = {}--福利签到配置表
  16. self.fuli_level_cfg = {}--福利冲级配置表
  17. self.fuli_ai_cfg = {}--在线奖励配置表
  18. self.fuli_ai_talk_cfg = {}--在线奖励ai娘说话配置表
  19. self.fuli_ai_info = {}--在线奖励数据
  20. self.fuli_red_dot_info = {}--红点
  21. self.fuli_sign_round_cfg = {}--福利累积签到配置表
  22. self.callback_table = {}
  23. self.fuli_limit_package_info = false --开服限时礼包
  24. self.fuli_download_state = 0
  25. self.count_down_time = 9999999
  26. self:DeleteFuncCallBack("FuliModel:SetFuliAITime")
  27. end
  28. function FuliModel.GetInstance()
  29. if FuliModel.Instance == nil then
  30. FuliModel.Instance = FuliModel.New()
  31. end
  32. return FuliModel.Instance
  33. end
  34. function FuliModel.getInstance()
  35. if FuliModel.Instance == nil then
  36. FuliModel.Instance = FuliModel.New()
  37. end
  38. return FuliModel.Instance
  39. end
  40. function FuliModel:SetFuliSignInfo( vo )
  41. self.fuli_sign_info = vo
  42. self:ChangeVar("fuli_sign_info", self.fuli_sign_info, false, true)
  43. end
  44. function FuliModel:GetFuliSignInfo( )
  45. return self.fuli_sign_info
  46. end
  47. function FuliModel:InitFuliSignCFG( )
  48. local cfg = Config.Welfaresigninaward
  49. for i,v in pairs(cfg) do
  50. if not self.fuli_sign_cfg[v.round] then
  51. self.fuli_sign_cfg[v.round] = {}
  52. end
  53. self.fuli_sign_cfg[v.round][v.day] = v
  54. self.fuli_sign_cfg[v.round][v.day].award_list = stringtotable(v.award)
  55. end
  56. end
  57. function FuliModel:GetFuliSignCFGByRound( round )
  58. if round and self.fuli_sign_cfg[round] then
  59. return self.fuli_sign_cfg[round]
  60. else
  61. return self.fuli_sign_cfg[1]--做个容错
  62. end
  63. end
  64. function FuliModel:InitFuliLevelCFG( )
  65. local cfg = Config.Welfarelevelaward
  66. for k,v in pairs(cfg) do
  67. if not self.fuli_level_cfg[v.career] then
  68. self.fuli_level_cfg[v.career] = {}
  69. end
  70. self.fuli_level_cfg[v.career][v.id] = v
  71. self.fuli_level_cfg[v.career][v.id].award_list = stringtotable(v.award)
  72. if v.limit_num > 0 then
  73. self.fuli_level_cfg[v.career][v.id].award_limit_list = stringtotable(v.limit_award)
  74. --先给限定的奖励一个标记位
  75. for kk,vv in ipairs(self.fuli_level_cfg[v.career][v.id].award_limit_list) do
  76. vv.is_limit = true
  77. end
  78. for ii,vv in ipairs(self.fuli_level_cfg[v.career][v.id].award_list) do
  79. table_insert(self.fuli_level_cfg[v.career][v.id].award_limit_list, vv)
  80. end
  81. end
  82. end
  83. end
  84. function FuliModel:GetFuliLevelCFG(career )
  85. if career and self.fuli_level_cfg[career] then
  86. return self.fuli_level_cfg[career]
  87. else
  88. return {}--做个容错
  89. end
  90. end
  91. function FuliModel:GetFuliLevelReceiveInfo( level )
  92. local mainVo = RoleManager.Instance.mainRoleInfo
  93. local cfg = self:GetFuliLevelCFG(mainVo.career)
  94. local level = level or mainVo.level
  95. local info = {}
  96. for i,v in ipairs(cfg) do
  97. local item = {level = 0, is_get = false, can_get = false, limit_num = 0}
  98. item.level = v.level
  99. item.is_get = self:IsFuliLevelGet(v.id)
  100. item.can_get = level >= v.level
  101. item.limit_num = v.limit_num
  102. info[#info+1] = item
  103. end
  104. return info
  105. end
  106. function FuliModel:InitFuliAICFG( )
  107. local cfg = Config.Welfareonlineaward
  108. for k,v in pairs(cfg) do
  109. if not self.fuli_ai_cfg[v.type] then
  110. self.fuli_ai_cfg[v.type] = {}
  111. end
  112. self.fuli_ai_cfg[v.type][v.id] = v
  113. end
  114. end
  115. function FuliModel:GetFuliAICFG( type )
  116. if type and self.fuli_ai_cfg[type] then
  117. return self.fuli_ai_cfg[type]
  118. else
  119. return self.fuli_ai_cfg[1]--做个容错
  120. end
  121. end
  122. function FuliModel:GetFuliAICountTimeIndex( )
  123. local info = self:GetFuliAIInfo()
  124. if IsTableEmpty(info) then
  125. return
  126. end
  127. local online_time = info and info.duration_time or 0
  128. local cfg = self:GetFuliAICFG(info.type)
  129. local index = 1
  130. for i,v in ipairs(cfg) do
  131. if online_time < v.duration then
  132. index = v.id
  133. break
  134. end
  135. end
  136. return index
  137. end
  138. function FuliModel:InitFuliAITalkCFG( )
  139. local cfg = Config.Welfareonlinewords
  140. for k,v in pairs(cfg) do
  141. if not self.fuli_ai_talk_cfg[v.type] then
  142. self.fuli_ai_talk_cfg[v.type] = {}
  143. end
  144. self.fuli_ai_talk_cfg[v.type][v.id] = v
  145. end
  146. end
  147. function FuliModel:GetFuliAITalkCFG( type )
  148. if type and self.fuli_ai_talk_cfg[type] then
  149. return self.fuli_ai_talk_cfg[type]
  150. else
  151. return self.fuli_ai_talk_cfg[1]--做个容错
  152. end
  153. end
  154. function FuliModel:IsFuliLevelGet( id )
  155. local server_data = self:GetFuliLevelInfo()
  156. if TableSize(server_data) > 0 then
  157. return server_data.my_receive[id] == 1
  158. end
  159. return false
  160. end
  161. --获取限量礼包的被领取的值
  162. function FuliModel:GetFuliLevelLimitGetNum( id )
  163. local server_data = self:GetFuliLevelInfo()
  164. if TableSize(server_data) > 0 and server_data.limit_state[id] then
  165. return server_data.limit_state[id]
  166. else
  167. return 0
  168. end
  169. end
  170. function FuliModel:SetFuliLevelInfo( vo )
  171. self.fuli_level_info = vo
  172. self:ChangeVar("fuli_level_info", self.fuli_level_info, false, true)
  173. end
  174. function FuliModel:GetFuliLevelInfo( vo )
  175. return self.fuli_level_info
  176. end
  177. function FuliModel:SetFuliDownState( state )
  178. self.fuli_download_state = state
  179. self:ChangeVar("fuli_download_state", self.fuli_download_state, false, true)
  180. end
  181. function FuliModel:GetFuliDownState( )
  182. return self.fuli_download_state
  183. end
  184. function FuliModel:SetFuliAIInfo( vo )
  185. self.fuli_ai_info = vo
  186. self:SetFuliAITime()
  187. self:Fire(FuliConst.UPDATE_FULI_AI_INFO)
  188. end
  189. function FuliModel:GetFuliAIInfo( )
  190. return self.fuli_ai_info
  191. end
  192. function FuliModel:IsReceiveFuliDownReward( )
  193. end
  194. function FuliModel:IsFuliNeedRedAll( )
  195. for k,v in pairs(FuliConst.TAB_ID) do
  196. self:IsFuliNeedRed(v)
  197. end
  198. -------------------------
  199. --万物宝典
  200. local temp_list = CustomActivityModel:getInstance():getAllActListByBaseType(CustomActivityModel.CustomActBaseType.CONTRACT)
  201. for i,v in pairs(temp_list or {}) do
  202. self:IsFuliNeedRed(33100000 + CustomActivityModel.CustomActBaseType.CONTRACT * 1000 + v.sub_type)
  203. end
  204. end
  205. function FuliModel:IsFuliNeedRed( tab_id )
  206. local contract_start_num = 33100000 + CustomActivityModel.CustomActBaseType.CONTRACT * 1000
  207. -------------------------
  208. local bool = false
  209. if tab_id == FuliConst.TAB_ID.SIGN then
  210. bool = self:IsFuliSignNeedRed()
  211. elseif tab_id == FuliConst.TAB_ID.AI then
  212. bool = self:IsFuliAINeedRed()
  213. elseif tab_id == FuliConst.TAB_ID.LEVEL then
  214. bool = self:IsFuliLevelNeedRed()
  215. elseif tab_id == FuliConst.TAB_ID.DOWNLOAD then
  216. bool = self:IsFuliDownloadNeedRed()
  217. elseif tab_id > contract_start_num and tab_id <= contract_start_num+999 then
  218. --万物宝典
  219. local open_day = ServerTimeModel:getInstance():GetOpenServerDay()
  220. local role_lv = RoleManager.Instance.mainRoleInfo.level
  221. if role_lv >= Config.Modulesub["331@74"].open_lv and open_day>=Config.Modulesub["331@74"].open_day then
  222. bool = ContractModel:getInstance():GetAllRedBySubType(false,tab_id-contract_start_num)
  223. end
  224. else
  225. bool = false
  226. end
  227. self.fuli_red_dot_info[tab_id] = bool
  228. self:Fire(FuliConst.ANS_UPDATE_FULI_RED_DOT,tab_id,bool)
  229. end
  230. function FuliModel:GetAllFuliRedDot( )
  231. return self.fuli_red_dot_info
  232. end
  233. function FuliModel:IsFuliSignNeedRed( )
  234. local server_data = self:GetFuliSignInfo()
  235. local bool = false
  236. if TableSize(server_data) > 0 then
  237. if server_data.sign_in_status == 0 then
  238. bool = true
  239. elseif server_data.sign_in_status == 1 then--签到了第一次看看vip
  240. local cfg = self:GetFuliSignCFGByRound(server_data.round)
  241. local vip = RoleManager.Instance.mainRoleInfo.vip_flag or 0
  242. if cfg and cfg[server_data.days] and cfg[server_data.days].vip_lv > 0 then
  243. bool = vip >= cfg[server_data.days].vip_lv
  244. end
  245. end
  246. if not bool then--上面都不满足 那看看能不能领累积签到奖励吧
  247. local total_state = server_data.total_state
  248. local total_cfg = self:GetFuliTotalSignCFGByRound(server_data.round)
  249. for i,v in ipairs(total_cfg) do
  250. if v[2] <= server_data.days and total_state[i] ~= 1 then
  251. bool = true
  252. break
  253. end
  254. end
  255. end
  256. end
  257. return bool
  258. end
  259. function FuliModel:IsFuliLevelNeedRed( )
  260. local cfg = self:GetFuliLevelCFG(RoleManager.Instance.mainRoleInfo.career)
  261. local server_data = self:GetFuliLevelInfo()
  262. local level = RoleManager.Instance.mainRoleInfo.level
  263. local bool = false
  264. for i,v in ipairs(cfg) do
  265. if not self:IsFuliLevelGet(v.id) and level >= v.level then--可以领且没有领
  266. bool = true
  267. break
  268. end
  269. end
  270. GlobalEventSystem:Fire(ActivityIconManager.UPDATE_ICON_TIPS, 16003, bool)
  271. return bool
  272. end
  273. function FuliModel:IsFuliAINeedRed( )
  274. local server_data = self:GetFuliAIInfo()
  275. local bool = false
  276. local cfg = self:GetFuliAICFG(server_data.type)
  277. for i,v in ipairs(cfg) do
  278. if server_data.duration_time >= v.duration and server_data.my_receive[i] ~= 1 then
  279. bool = true
  280. break
  281. end
  282. end
  283. return bool
  284. end
  285. function FuliModel:IsFuliDownloadNeedRed( )
  286. local is_support = StepPackModule:getInstance():IsSupport()
  287. local down_state = StepPackModule:getInstance():CurrentPackState()
  288. local bool = false
  289. if is_support then
  290. local get_state = self:GetFuliDownState()
  291. if get_state == 0 and down_state == 3 then
  292. bool = true
  293. end
  294. end
  295. return bool
  296. end
  297. function FuliModel:SetFuliAITime( )
  298. local server_data = self:GetFuliAIInfo()
  299. local bool = false
  300. local cfg = self:GetFuliAICFG(server_data.type)
  301. local time = {}
  302. for i,v in ipairs(cfg) do
  303. time[v.duration] = true
  304. end
  305. local function callback( ... )
  306. self.fuli_ai_info.duration_time = self.fuli_ai_info.duration_time + 1
  307. if time[self.fuli_ai_info.duration_time] then
  308. self:Fire(FuliConst.UPDATE_FULI_RED_DOT, FuliConst.TAB_ID.AI)--触发红点
  309. self:Fire(FuliConst.START_HAND_ACTION)--触发手的特效
  310. end
  311. end
  312. self:SetFuncCallBack(callback, "FuliModel:SetFuliAITime")
  313. end
  314. function FuliModel:TimeLater()
  315. local function on_answer_time( )
  316. if self.count_down_time <= 0 or TableSize(self.callback_table) <=0 then
  317. if self.question_time_id then
  318. GlobalTimerQuest:CancelQuest(self.question_time_id)
  319. self.question_time_id = nil
  320. self.count_down_time = 9999999
  321. end
  322. else
  323. self.count_down_time = self.count_down_time - 1
  324. for k,v in pairs(self.callback_table) do
  325. if type(v) == "function" then
  326. v()
  327. end
  328. end
  329. end
  330. end
  331. if not self.question_time_id then
  332. self.question_time_id = GlobalTimerQuest:AddPeriodQuest(on_answer_time, 1, -1)
  333. end
  334. end
  335. function FuliModel:DeleteFuncCallBack( index )--删除计时器方法列表里面的方法
  336. self.callback_table[index] = nil
  337. end
  338. function FuliModel:SetFuncCallBack( func,index )--添加计时器方法列表里面的方法
  339. if type(func) == "function" then
  340. self.callback_table[index] = func
  341. self:TimeLater()
  342. end
  343. end
  344. function FuliModel:InitFuliTotalSignCFG( )
  345. local cfg = Config.Welfaresigninround
  346. for i,v in ipairs(cfg) do
  347. self.fuli_sign_round_cfg[i] = {}
  348. local month_award = stringtotable(cfg[i].month_award)
  349. for ii,vv in ipairs(month_award) do
  350. self.fuli_sign_round_cfg[i][vv[1]] = vv
  351. end
  352. end
  353. end
  354. function FuliModel:GetFuliTotalSignCFGByRound( round )
  355. return self.fuli_sign_round_cfg[round]
  356. end
  357. --福利等级获得ICON
  358. function FuliModel:UpdateFuliLevelActIcon( level )
  359. if not GetModuleIsOpen(160,3) then
  360. return
  361. end
  362. local open_day = ServerTimeModel:getInstance():GetOpenServerDay()
  363. if open_day > 9999 then--开服前9999天才显示
  364. ActivityIconManager:getInstance():deleteIcon(16003)
  365. return
  366. end
  367. local award_vo = self:GetFuliLevelReceiveInfo(level)
  368. if award_vo and award_vo[#award_vo] and award_vo[#award_vo].is_get then
  369. ActivityIconManager:getInstance():deleteIcon(16003)
  370. return
  371. end
  372. local icon_cfg = FuliConst.LEVEL_ICON_CFG
  373. local cur_choose_cfg = nil
  374. local max_cfg = nil
  375. for k,v in pairsByKeys(icon_cfg) do
  376. if k >= level then
  377. for ii,vv in ipairs(award_vo) do
  378. if k == vv.level then
  379. if not vv.is_get then
  380. cur_choose_cfg = v
  381. break
  382. end
  383. end
  384. end
  385. if cur_choose_cfg then
  386. break
  387. end
  388. end
  389. max_cfg = v
  390. end
  391. if not cur_choose_cfg then--如果还没找到就看最后一个是否领取
  392. local max_choose_cfg = max_cfg[RoleManager.Instance.mainRoleInfo.career] or max_cfg[0]
  393. for i,v in ipairs(award_vo) do
  394. if v.level == max_choose_cfg.lv_need then
  395. if v.can_get and not v.is_get then
  396. cur_choose_cfg = max_cfg
  397. end
  398. break
  399. end
  400. end
  401. end
  402. if cur_choose_cfg then--如果找到当前配置
  403. local cur_career_cfg = cur_choose_cfg[RoleManager.Instance.mainRoleInfo.career] or cur_choose_cfg[0]
  404. if cur_career_cfg then
  405. if self.cur_career_cfg and self.cur_career_cfg.lv_need ~= cur_career_cfg.lv_need then--不相等就删除免得状态残留
  406. ActivityIconManager:getInstance():deleteIcon(16003)
  407. end
  408. self.cur_career_cfg = cur_career_cfg
  409. local icon_cfg = ActivityIconManager:getInstance().icon_cfg_new_list[16003]
  410. if icon_cfg then
  411. icon_cfg.icon_name = cur_career_cfg.icon_id
  412. ActivityIconManager:getInstance():addIcon(16003, -1, cur_career_cfg.content)
  413. else
  414. ActivityIconManager:getInstance():deleteIcon(16003)
  415. end
  416. else
  417. ActivityIconManager:getInstance():deleteIcon(16003)
  418. end
  419. else
  420. ActivityIconManager:getInstance():deleteIcon(16003)
  421. end
  422. end