ActHeroRiseLogic.lua 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  1. local Msg = require("core.Msg")
  2. local PresentExcel = require("excel.present")
  3. local Grid = require("bag.Grid")
  4. local BagLogic = require("bag.BagLogic")
  5. ACT_TYPE_HERO_RISE_REWARD = 1 -- 奖励
  6. ACT_TYPE_HERO_RISE_TASK = 2 -- 任务
  7. ACT_TYPE_HERO_RISE_TASK_TYPE1 = 1 -- 每日任务
  8. ACT_TYPE_HERO_RISE_TASK_TYPE2 = 2 -- 每周任务
  9. ACT_TYPE_HERO_RISE_TASK_TYPE3 = 3 -- 终极任务
  10. ACT_TYPE_HERO_RISE_TASK_ID1 = 1 --
  11. ACT_TYPE_HERO_RISE_TASK_ID2 = 2 --
  12. ACT_TYPE_HERO_RISE_TASK_ID3 = 3 --
  13. ACT_TYPE_HERO_RISE_TASK_ID4 = 4 --
  14. ACT_TYPE_HERO_RISE_TASK_ID5 = 5 --
  15. ACT_TYPE_HERO_RISE_TASK_ID6 = 6 --
  16. ACT_TYPE_HERO_RISE_TASK_ID7 = 7 --
  17. ACT_TYPE_HERO_RISE_TASK_ID8 = 8 --
  18. ACT_TYPE_HERO_RISE_TASK_ID9 = 9 --
  19. ACT_TYPE_HERO_RISE_TASK_ID10 = 10 --
  20. ACT_TYPE_HERO_RISE_TASK_ID11 = 11 --
  21. ACT_TYPE_HERO_RISE_TASK_ID12 = 12 --
  22. ACT_TYPE_HERO_RISE_TASK_ID13 = 13 --
  23. ACT_TYPE_HERO_RISE_TASK_ID14 = 14 --
  24. ACT_TYPE_HERO_RISE_TASK_ID15 = 15 --
  25. ACT_TYPE_HERO_RISE_TASK_ID16 = 16 --
  26. ACT_TYPE_HERO_RISE_TASK_ID17 = 17 --
  27. ACT_TYPE_HERO_RISE_TASK_ID18 = 18 --
  28. ACT_TYPE_HERO_RISE_TASK_ID19 = 19 --
  29. -- 登录推送
  30. function onLogin(human)
  31. local msgRet = Msg.gc.GC_ACT_HERO_RISE_OPEN
  32. msgRet.isOpen = checkActIsOpen(human)
  33. Msg.send(msgRet,human.fd)
  34. if checkActIsOpen(human) == 1 then
  35. initHeroRiseDB(human)
  36. end
  37. end
  38. -- 检查活动是否开启
  39. function checkActIsOpen(human)
  40. if true then
  41. return 0
  42. end
  43. if human.db.lv < 15 then
  44. return 0
  45. end
  46. -- todo
  47. return 1
  48. end
  49. -- 初始化数据
  50. function initHeroRiseDB(human)
  51. if human.db.heroRise ~= nil then
  52. return
  53. end
  54. local now = os.time()
  55. human.db.heroRise = {}
  56. human.db.heroRise.startTs = now
  57. human.db.heroRise.endTs = now + 30*24*60*60
  58. human.db.heroRise.lv = 0
  59. human.db.heroRise.exp = 0
  60. human.db.heroRise.rajah = 0
  61. human.db.heroRise.task = {}
  62. human.db.heroRise.get = {}
  63. end
  64. -- 任务构造
  65. function makeHeroRiseTask(human,net,data)
  66. net.id = data.id
  67. net.name = data.name
  68. net.desc = data.desc
  69. net.exp = data.exp
  70. net.needCnt = data.needCnt
  71. net.nowCnt = human.db.heroRise.task[data.id] and human.db.heroRise.task[data.id].cnt or 0
  72. net.state = human.db.heroRise.task[data.id] and human.db.heroRise.task[data.id].state or 0
  73. end
  74. -- 查询英雄崛起活动
  75. function heroRiseQuery(human)
  76. local isOpen = checkActIsOpen(human)
  77. if isOpen == 0 then
  78. return
  79. end
  80. if human.db.heroRise == nil then
  81. return
  82. end
  83. local config = PresentExcel.heroRiseReward
  84. local msgRet = Msg.gc.GC_ACT_HERO_RISE_QUERY_REWARD
  85. msgRet.riseType = human.db.heroRise.rajah
  86. msgRet.riseLv = human.db.heroRise.lv
  87. local needExp = 0
  88. if human.db.heroRise.lv > 40 then
  89. needExp = config[40].exp
  90. else
  91. needExp = config[human.db.heroRise.lv].exp
  92. end
  93. msgRet.needExp = needExp
  94. msgRet.exp = human.db.heroRise.exp
  95. local len = #config[0].rajahReward
  96. for i = 1,len do
  97. local v = config[0].rajahReward[i]
  98. Grid.makeItem(msgRet.unLockReward[i],v[1],v[2])
  99. end
  100. msgRet.unLockReward[0] = len
  101. len = #config
  102. local count = 0
  103. for i = 1,len do
  104. count = count + 1
  105. local heroLen = #config[i].baseReward
  106. local net = msgRet.heroReward[count]
  107. net.lv = config[i].lv
  108. if human.db.heroRise.lv < i then
  109. net.lock = 0
  110. else
  111. net.lock = 1
  112. end
  113. for j = 1,heroLen do
  114. local v = config[i].baseReward[j]
  115. Grid.makeItem(net.item[j],v[1],v[2])
  116. end
  117. net.item[0] = heroLen
  118. local rNet = msgRet.rajahReward[count]
  119. rNet.lv = config[i].lv
  120. if human.db.heroRise.lv < i or human.db.heroRise.rajah == 0 then
  121. rNet.lock = 0
  122. else
  123. rNet.lock = 1
  124. end
  125. heroLen = #config[i].exReward
  126. for j = 1,heroLen do
  127. local v = config[i].exReward[j]
  128. Grid.makeItem(rNet.item[j],v[1],v[2])
  129. end
  130. rNet.item[0] = heroLen
  131. end
  132. msgRet.heroReward[0] = count
  133. msgRet.rajahReward[0] = count
  134. local taskConfig = PresentExcel.heroRiseTask
  135. local taskLen = #taskConfig
  136. for i = 1,taskLen do
  137. local v = taskConfig[i]
  138. if v.type == ACT_TYPE_HERO_RISE_TASK_TYPE1 then
  139. msgRet.dailyTask[0] = msgRet.dailyTask[0] + 1
  140. makeHeroRiseTask(human,msgRet.dailyTask[msgRet.dailyTask[0]],v)
  141. elseif v.type == ACT_TYPE_HERO_RISE_TASK_TYPE2 then
  142. msgRet.weekTask[0] = msgRet.weekTask[0] + 1
  143. makeHeroRiseTask(human,msgRet.weekTask[msgRet.weekTask[0]],v)
  144. elseif v.type == ACT_TYPE_HERO_RISE_TASK_TYPE3 then
  145. msgRet.ultimateTask[0] = msgRet.ultimateTask[0] + 1
  146. makeHeroRiseTask(human,msgRet.ultimateTask[msgRet.ultimateTask[0]],v)
  147. end
  148. end
  149. Msg.send(msgRet,human.fd)
  150. end
  151. -- 领取任务奖励
  152. function getTaskReward(human,taskId)
  153. -- 活动不处于开启状态
  154. local isOpen = checkActIsOpen(human)
  155. if isOpen == 0 then
  156. return
  157. end
  158. -- 校验任务是否已达成
  159. if human.db.heroRise.task[taskId] == nil or
  160. human.db.heroRise.task[taskId].state ~= 1 then
  161. return
  162. end
  163. -- 清除达成信息
  164. human.db.heroRise.task[taskId].state = 2
  165. -- 获取奖励
  166. local config = PresentExcel.heroRiseTask[taskId]
  167. addExpTouch(human,config.exp)
  168. heroRiseQuery(human)
  169. end
  170. -- 任务回调
  171. function taskTouch(human,taskId,condition)
  172. -- 活动不处于开启状态
  173. local isOpen = checkActIsOpen(human)
  174. if isOpen == 0 then
  175. return
  176. end
  177. local config = PresentExcel.heroRiseTask[taskId]
  178. -- 条件不满足
  179. if condition ~= config.condition and config.condition ~= 0 then
  180. return
  181. end
  182. -- 初始化任务数据
  183. if human.db.heroRise.task[taskId] == nil then
  184. human.db.heroRise.task[taskId] = {}
  185. human.db.heroRise.task[taskId].cnt = 0
  186. human.db.heroRise.task[taskId].state = 0
  187. end
  188. -- 校验任务是否已完成
  189. if human.db.heroRise.task[taskId].state ~= 0 then
  190. return
  191. end
  192. human.db.heroRise.task[taskId].cnt = human.db.heroRise.task[taskId].cnt + 1
  193. if human.db.heroRise.task[taskId].cnt == config.needCnt then
  194. human.db.heroRise.task[taskId].state = 1
  195. end
  196. end
  197. -- 获取经验回调
  198. function addExpTouch(human,exp)
  199. -- 活动不处于开启状态
  200. local isOpen = checkActIsOpen(human)
  201. if isOpen == 0 then
  202. return
  203. end
  204. local lv = human.db.heroRise.lv >= 40 and 40 or human.db.heroRise.lv
  205. local config = PresentExcel.heroRiseReward[lv]
  206. human.db.heroRise.exp = human.db.heroRise.exp + exp
  207. local count = 0
  208. local lvUp = nil
  209. while true do
  210. count = count + 1
  211. if human.db.heroRise.exp >= config.exp then
  212. human.db.heroRise.exp = human.db.heroRise.exp - config.exp
  213. human.db.heroRise.lv = human.db.heroRise.lv + 1
  214. lvUp = 1
  215. else
  216. break
  217. end
  218. -- 防止死循环
  219. if count >= 100 then
  220. break
  221. end
  222. end
  223. if lvUp ~= nil then
  224. lvUpSendReward(human)
  225. end
  226. end
  227. -- 升级发放奖励回调
  228. function lvUpSendReward(human)
  229. -- 活动不处于开启状态
  230. local isOpen = checkActIsOpen(human)
  231. if isOpen == 0 then
  232. return
  233. end
  234. local msgRet = Msg.gc.GC_ACT_HERO_RISE_LV_UP
  235. local item = {}
  236. for i = 1,human.db.heroRise.lv do
  237. if human.db.heroRise.get[i] == nil then
  238. human.db.heroRise.get[i] = 1
  239. local baseConfig = PresentExcel.baseReward[i]
  240. local len = #baseConfig
  241. for j = 1,len do
  242. if item[baseConfig[j][1]] == nil then
  243. item[baseConfig[j][1]] = baseConfig[j][2]
  244. else
  245. item[baseConfig[j][1]] = item[baseConfig[j][1]] + baseConfig[j][2]
  246. end
  247. end
  248. if human.db.heroRise.rajah == 1 then
  249. local exConfig = PresentExcel.exReward[i]
  250. local exLen = #exConfig
  251. for j = 1,exLen do
  252. if item[exConfig[j][1]] == nil then
  253. item[exConfig[j][1]] = exConfig[j][2]
  254. else
  255. item[exConfig[j][1]] = item[exConfig[j][1]] + exConfig[j][2]
  256. end
  257. end
  258. end
  259. end
  260. end
  261. BagLogic.addItemList(human, item, "hero_rise")
  262. local count = 0
  263. for k,v in pairs(item) do
  264. count = count + 1
  265. Grid.makeItem(msgRet.item[count],k,v)
  266. end
  267. msgRet.item[0] = count
  268. msgRet.lv = human.db.heroRise.lv
  269. msgRet.rajah = human.db.heroRise.rajah
  270. Msg.send(msgRet,human.fd)
  271. end
  272. -- 购买王侯回调
  273. function buyRajah(human)
  274. -- 活动不处于开启状态
  275. local isOpen = checkActIsOpen(human)
  276. if isOpen == 0 then
  277. return
  278. end
  279. -- 已经是王侯
  280. if human.db.heroRise.rajah ~= 0 then
  281. return
  282. end
  283. human.db.heroRise.rajah = 1
  284. local config = PresentExcel.heroRiseReward
  285. local len = #config[0].rajahReward
  286. BagLogic.cleanMomentItemList()
  287. for i = 1,len do
  288. BagLogic.updateMomentItem(BagLogic.ADDITEM_TYPE_1, config[0].rajahReward[i][1],config[0].rajahReward[i][2])
  289. end
  290. for i = 1,human.db.heroRise.lv do
  291. local exLen = #config[i].exReward
  292. for j = 1,len do
  293. BagLogic.updateMomentItem(BagLogic.ADDITEM_TYPE_1, config[i].exReward[j][1],config[i].exReward[j][2])
  294. end
  295. end
  296. BagLogic.addMomentItemList(human, "hero_rise")
  297. end