MengxinLogic.lua 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  1. local CommonDB = require("common.CommonDB")
  2. local Msg = require("core.Msg")
  3. local OpenActExcel = require("excel.openAct")
  4. local Gird = require("bag.Grid")
  5. local YunYingLogic = require("yunying.YunYingLogic")
  6. local PanelDefine = require("broadcast.PanelDefine")
  7. local Util = require("common.Util")
  8. local Lang = require("common.Lang")
  9. local Broadcast = require("broadcast.Broadcast")
  10. local OpenAct = require("present.OpenAct")
  11. local BagLogic = require("bag.BagLogic")
  12. --[[
  13. mengxin = {}
  14. mengxin.task = {}
  15. mengxin.task[taskID] = {}
  16. mengxin.task[taskID] = state
  17. mengxin.taskType[type] = {}
  18. mengxin.taskType[type] = cnt
  19. mengxin.reach = {}
  20. mengxin.reach[ID] = state
  21. mengxin.jifen = jifen
  22. ]]
  23. MX_TASK_TYPE_1 = 1 -- 闯关进度
  24. MX_TASK_TYPE_2 = 2 -- 恶魔之塔进度
  25. MX_TASK_TYPE_3 = 3 -- 冠军联赛挑战次数
  26. MX_TASK_TYPE_4 = 4 -- bar任务
  27. MX_TASK_TYPE_5 = 5 -- 冰龙伤害
  28. MX_TASK_TYPE_6 = 6 -- 占卜次数
  29. MX_TASK_TYPE_7 = 7 -- 绝望深渊进度
  30. MX_TASK_TYPE_8 = 8 -- 勇者试炼进度
  31. MX_TASK_TYPE_9 = 9 -- 女巫森林挑战或扫荡次数
  32. MX_TASK_TYPE_10 = 10 -- 公会捐赠
  33. MX_TASK_TYPE_11 = 11 -- 挑战公会boss
  34. MX_TASK_TYPE_12 = 12 -- 高级召唤
  35. MX_TASK_TYPE_13 = 13 -- 合成5星以上英雄
  36. MX_TASK_TYPE_14 = 14 -- 拥有100级以上英雄
  37. MX_TASK_TYPE_15 = 15 -- 获得SSR英雄
  38. MX_TASK_TYPE_16 = 16 -- 遗迹探险打到N关
  39. MX_TASK_TYPE_17 = 17 -- 拥有N个145级英雄
  40. MX_TASK_TYPE_18 = 18 -- 拥有N个180级英雄
  41. function initDB(human)
  42. if not human.db.mengxin then
  43. local mengxin = {}
  44. mengxin.task = {}
  45. mengxin.taskType ={}
  46. mengxin.reach = {}
  47. mengxin.jifen = 0
  48. human.db.mengxin = mengxin
  49. end
  50. end
  51. -- 构建task结构体
  52. local function fontTaskNet(human,net,k,v)
  53. net.id = k
  54. net.name = Util.format(v.name,v.need)
  55. net.desc = v.desc
  56. net.needCnt = v.need
  57. net.panelID = v.panelID
  58. net.nowCnt = 0
  59. net.state = 0
  60. if human.db.mengxin and
  61. human.db.mengxin.task then
  62. net.state = human.db.mengxin.task[k] or 0
  63. end
  64. if human.db.mengxin and
  65. human.db.mengxin.taskType then
  66. net.nowCnt = human.db.mengxin.taskType[v.type] or 0
  67. end
  68. local len = #v.item
  69. for i = 1,len do
  70. Gird.makeItem(net.item[i],v.item[i][1],v.item[i][2])
  71. end
  72. net.item[0] = len
  73. end
  74. local function fontReachNet(human,net,k,v)
  75. net.id = k
  76. net.jifen = v.need
  77. net.state = 0
  78. if human.db.mengxin and
  79. human.db.mengxin.reach then
  80. net.state = human.db.mengxin.reach[k] or 0
  81. end
  82. local len = #v.item
  83. for i = 1,len do
  84. Gird.makeItem(net.item[i],v.item[i][1],v.item[i][2])
  85. end
  86. net.item[0] = len
  87. end
  88. function isDayRed(human,day)
  89. local openDay = CommonDB.getServerOpenDay()
  90. if day > openDay then
  91. return
  92. end
  93. local config = OpenActExcel.mxTask
  94. for k,v in pairs(config) do
  95. if v.days == day then
  96. if getTaskState(human,k) == 1 then
  97. return true
  98. end
  99. end
  100. end
  101. end
  102. function getTaskState(human,id)
  103. if human.db.mengxin and
  104. human.db.mengxin.task then
  105. return human.db.mengxin.task[id]
  106. end
  107. end
  108. function getReachState(human,id)
  109. if human.db.mengxin and
  110. human.db.mengxin.reach then
  111. return human.db.mengxin.reach[id]
  112. end
  113. end
  114. function setTaskState(human,id,state)
  115. initDB(human)
  116. human.db.mengxin.task[id] = state
  117. end
  118. function setReachState(human,id,state)
  119. initDB(human)
  120. human.db.mengxin.reach[id] = state
  121. end
  122. function isBaseOpen(human,noSend)
  123. local openLv = YunYingLogic.getOpenLvByPanelID(PanelDefine.PANEL_ID_3605)
  124. if human.db.lv < openLv then
  125. if not noSend then
  126. local str = Util.format(Lang.ROLE_LEV_ERROR,openLv)
  127. return Broadcast.sendErr(human,str)
  128. end
  129. end
  130. local flag = OpenAct.getOpenActTime(OpenAct.OPEN_ACT_SERVER_GIFT)
  131. if not flag then
  132. return
  133. end
  134. return true
  135. end
  136. function isOpen(human)
  137. if isBaseOpen(human,true) then
  138. return true
  139. end
  140. end
  141. function getLeftTime()
  142. local openDay = CommonDB.getServerOpenDay()
  143. if openDay == nil then
  144. return 0
  145. end
  146. local OpenActConfig = OpenActExcel.openAct[1]
  147. if not OpenActConfig then return 0 end
  148. local sDay = OpenActConfig.sDay;
  149. local eDay = OpenActConfig.eDay;
  150. if openDay >= sDay and openDay <= eDay then
  151. local time = os.time();
  152. local openTime = CommonDB.getServerOpenTime()
  153. if openTime == 0 then
  154. return 0
  155. end
  156. local endTime = Util.getDayStartTime(openTime) + eDay * 86400
  157. return endTime - time
  158. end
  159. return 0
  160. end
  161. -- 查询
  162. function query(human,day)
  163. -- 开服超过7天 活动已结束
  164. local openDay = CommonDB.getServerOpenDay()
  165. if not isOpen(human) then
  166. return
  167. end
  168. if day == 0 then
  169. day = openDay
  170. end
  171. -- 日期传入错误
  172. if not day or day > openDay or day < 0 then
  173. return
  174. end
  175. local openTime = CommonDB.getServerOpenTime()
  176. -- 写数据
  177. local msgRet = Msg.gc.GC_OA_MENGXIN_QUERY
  178. local endTime = openTime + 7*86400
  179. local now = os.time()
  180. msgRet.leftTime = endTime - now
  181. msgRet.nowDay = openDay
  182. msgRet.totalJifen = 0
  183. if human.db.mengxin and human.db.mengxin.jifen then
  184. msgRet.totalJifen = human.db.mengxin.jifen
  185. end
  186. local config = OpenActExcel.mxTask
  187. local len = 0
  188. for k,v in pairs(config) do
  189. if v.days == day then
  190. len = len + 1
  191. local net = msgRet.taskList[len]
  192. fontTaskNet(human,net,k,v)
  193. end
  194. end
  195. msgRet.taskList[0] = len
  196. config = OpenActExcel.mxIntegral
  197. len = #config
  198. for i = 1,len do
  199. local net = msgRet.reachReward[i]
  200. fontReachNet(human,net,i,config[i])
  201. end
  202. msgRet.reachReward[0] = len
  203. for i = 1,7 do
  204. msgRet.redList[i] = isDayRed(human,i) and 1 or 0
  205. end
  206. msgRet.redList[0] = 7
  207. Msg.send(msgRet,human.fd)
  208. end
  209. -- 领取任务奖励
  210. function getTaskReward(human,day,id)
  211. -- 开服超过7天 活动已结束
  212. if not isOpen(human) then
  213. return
  214. end
  215. -- 日期传入错误
  216. if not day or day > 7 or day <= 0 then
  217. return
  218. end
  219. -- 任务校验错误
  220. local config = OpenActExcel.mxTask[id]
  221. if not config or config.days ~= day then
  222. return
  223. end
  224. -- 任务状态未完成
  225. local state = getTaskState(human,id)
  226. if state ~= 1 then
  227. return
  228. end
  229. -- 设置状态
  230. setTaskState(human,id,2)
  231. -- 获得积分
  232. addJifen(human,1)
  233. -- 发奖励
  234. BagLogic.addItemList(human,config.item,"mengxin_opact")
  235. for k, v in pairs(funcID) do
  236. YunYingLogic.updateIcon(YYInfo[k], human)
  237. YunYingLogic.sendGroupUpdate(YYInfo[k], human, PanelDefine.PANEL_ID_3605)
  238. break
  239. end
  240. query(human,day)
  241. end
  242. function addJifen(human,jifen)
  243. -- 开服超过7天 活动已结束
  244. if not isOpen(human) then
  245. return
  246. end
  247. initDB(human)
  248. local oldJifen = human.db.mengxin.jifen
  249. local newJifen = oldJifen + jifen
  250. human.db.mengxin.jifen = newJifen
  251. local config = OpenActExcel.mxIntegral
  252. for i = 1,#config do
  253. if config[i].need > oldJifen and config[i].need <= newJifen then
  254. setReachState(human,i,1)
  255. end
  256. end
  257. end
  258. function onCallBack(human,type,cnt)
  259. -- 开服超过7天 活动已结束
  260. if not isOpen(human) then
  261. return
  262. end
  263. initDB(human)
  264. local flag = OpenActExcel.mxTask[1].paramType[type]
  265. if flag == 1 then
  266. human.db.mengxin.taskType[type] = human.db.mengxin.taskType[type] or 0
  267. human.db.mengxin.taskType[type] = human.db.mengxin.taskType[type] + cnt
  268. else
  269. human.db.mengxin.taskType[type] = cnt
  270. end
  271. local config = OpenActExcel.mxTask
  272. local len = #config
  273. local hasRed = nil
  274. for i = 1,len do
  275. if config[i].type == type then
  276. if human.db.mengxin.taskType[type] >= config[i].need then
  277. local state = getTaskState(human,i)
  278. if state ~= 2 then
  279. setTaskState(human,i,1)
  280. hasRed = true
  281. end
  282. end
  283. end
  284. end
  285. if hasRed then
  286. for k, v in pairs(funcID) do
  287. YunYingLogic.updateIcon(YYInfo[k], human)
  288. YunYingLogic.sendGroupUpdate(YYInfo[k], human, PanelDefine.PANEL_ID_3605)
  289. break
  290. end
  291. end
  292. end
  293. -- 领取达标奖励奖励
  294. function getReachReward(human,day,id)
  295. -- 开服超过7天 活动已结束
  296. if not isOpen(human) then
  297. return
  298. end
  299. -- 任务校验错误
  300. local config = OpenActExcel.mxIntegral[id]
  301. if not config then
  302. return
  303. end
  304. -- 任务状态未完成
  305. local state = getReachState(human,id)
  306. if state ~= 1 then
  307. return
  308. end
  309. -- 设置状态
  310. setReachState(human,id,2)
  311. -- 发奖励
  312. BagLogic.addItemList(human,config.item,"mengxin_opact")
  313. for k, v in pairs(funcID) do
  314. YunYingLogic.updateIcon(YYInfo[k], human)
  315. YunYingLogic.sendGroupUpdate(YYInfo[k], human, PanelDefine.PANEL_ID_3605)
  316. break
  317. end
  318. query(human,day)
  319. end
  320. function isRed(human)
  321. if not isOpen(human) then
  322. return
  323. end
  324. for i = 1,7 do
  325. if isDayRed(human,i) then
  326. return true
  327. end
  328. end
  329. local config = OpenActExcel.mxIntegral
  330. for i = 1,#config do
  331. local state = getReachState(human,i)
  332. if state == 1 then
  333. return true
  334. end
  335. end
  336. end