MiLingLogic.lua 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. -- 三国密令
  2. --[[
  3. db.miLing = {
  4. time = 1 , -- 激活时间
  5. exp = 1, -- 密令经验
  6. task = {}, -- 密令任务获取
  7. rechargeGet = {}, -- 累充奖励领取
  8. miLingGet = {}, -- 密令等级奖励领取
  9. }
  10. ]]
  11. local Msg = require("core.Msg")
  12. local BagLogic = require("bag.BagLogic")
  13. local Grid = require("bag.Grid")
  14. local Util = require("common.Util")
  15. local BuyLogic = require("topup.BuyLogic")
  16. local MiLingExcel = require("excel.miLing")
  17. MILINMG_TASK_TYPE_1 = 1 -- 登陆游戏
  18. MILINMG_TASK_TYPE_2 = 2 -- 扫荡试炼 塔
  19. MILINMG_TASK_TYPE_3 = 3
  20. MILINMG_TASK_TYPE_4 = 4
  21. MILINMG_TASK_TYPE_5 = 5
  22. function inintDB(human)
  23. if human.db.miLing then return end
  24. human.db.miLing = {}
  25. local miLing = human.db.miLing
  26. miLing.time = os.time()
  27. miLing.exp = 0
  28. miLing.expDay = 0
  29. miLing.task = {}
  30. miLing.rechargeGet = {}
  31. miLing.miLingGet = {}
  32. end
  33. function getOpenDay(human)
  34. local day = Util.diffDay(human.db.miLing.time)
  35. return day or 0
  36. end
  37. function updateDaily(human)
  38. -- 目前不知道 开启条件 默认 创角 就有
  39. inintDB(human)
  40. human.db.miLing.expDay = 0
  41. end
  42. function getTaskNum(human, taskId)
  43. local num = 0
  44. if human.db.miLing and human.db.miLing.task[taskId] then
  45. num = human.db.miLing.task[taskId].num
  46. end
  47. return num
  48. end
  49. function getTaskIdState(human, taskId)
  50. local state = 0
  51. if human.db.miLing and human.db.miLing.task[taskId] then
  52. state = human.db.miLing.task[taskId].state
  53. end
  54. return state
  55. end
  56. function getMilingLv(human)
  57. if not human.db.miLing then return 0 end
  58. local lv = 0
  59. for k, v in ipairs(MiLingExcel.miLing) do
  60. if human.db.miLing.exp >= v.needExp then
  61. lv = v.needLv
  62. end
  63. end
  64. return lv
  65. end
  66. function fontLeiChongNet(human, msgRet)
  67. end
  68. function query(human)
  69. local msgRet = Msg.gc.GC_PRESENT_MILING_QUERY
  70. local day = getOpenDay(human)
  71. local len = 0
  72. for k, v in ipairs(MiLingExcel.task) do
  73. if v and v.day == day then
  74. len = len + 1
  75. local net = msgRet.list[len]
  76. net.id = k
  77. net.name = v.name
  78. net.need = v.need
  79. net.have = getTaskNum(human, k)
  80. net.state = getTaskIdState(human, k)
  81. Grid.makeItem(net.reward[1], v.reward[1], v.reward[2])
  82. net.reward[0] = 1
  83. end
  84. end
  85. if len <= 0 then return end
  86. msgRet.list[0] = len
  87. msgRet.dayGet = 0
  88. msgRet.jindu = 0
  89. msgRet.jinduMax = 0
  90. Msg.send(msgRet, human.fd)
  91. end
  92. function getTaskId(human, taskType)
  93. local day = getOpenDay(human)
  94. local taskId = 0
  95. for k, v in ipairs(MiLingExcel.task) do
  96. if v and v.day == day and v.type == taskType then
  97. taskId = k
  98. end
  99. end
  100. return taskId
  101. end
  102. function checkIsFinish(human, taskId)
  103. if human.db.miLing and human.db.miLing.task[taskId] and human.db.miLing.task[taskId].state == 0 then
  104. local config = MiLingExcel.task[taskId]
  105. if human.db.miLing.task[taskId].num > config.need then
  106. human.db.miLing.task[taskId].state = 1
  107. end
  108. end
  109. end
  110. function getTaskAddType(taskType)
  111. if taskType == MILINMG_TASK_TYPE_1 then
  112. return false
  113. else
  114. return true
  115. end
  116. end
  117. function touchTaskNum(human, type, add)
  118. if not human.db.miLing then return end
  119. local taskId = getTaskId(human, type)
  120. local config = MiLingExcel.task[taskId]
  121. if not config then return end
  122. local miLing = human.db.miLing
  123. if not miLing.task[taskId] then
  124. miLing.task[taskId] = {}
  125. miLing.task[taskId].state = 0
  126. miLing.task[taskId].num = 0
  127. end
  128. if miLing.task[taskId].state == 1 then
  129. return
  130. end
  131. local addType = getTaskAddType(type)
  132. if addType then
  133. miLing.task[taskId].num = miLing.task[taskId].num + add
  134. else
  135. miLing.task[taskId].num = add
  136. end
  137. checkIsFinish(human, taskId)
  138. query(human)
  139. end
  140. function fontRewardNet(human, config, msgRet)
  141. for k, v in ipairs(config) do
  142. local net = msgRet.list[k]
  143. local net = msgRet.list[len]
  144. net.id = k
  145. net.name = v.name
  146. net.need = v.need
  147. net.have = 0
  148. net.state = getTaskState(human, k)
  149. Grid.makeItem(net.reward[1], v.reward[1], v.reward[2])
  150. net.reward[0] = 1
  151. end
  152. msgRet.list[0] = #config
  153. end
  154. function queryReward(human, queryType)
  155. if not human.db.miLing then return end
  156. local config
  157. if queryType == 1 then
  158. config = MiLingExcel.miLing
  159. elseif queryType == 2 then
  160. config = MiLingExcel.recharge
  161. end
  162. if not config then return end
  163. local msgRet = Msg.gc.GC_PRESENT_MILING_REWARD_QUERY
  164. msgRet.queryType = queryType
  165. fontRewardNet(human, config, msgRet)
  166. Msg.send(msgRet, human.fd)
  167. end
  168. function getRechargetState(human, id)
  169. local recharge = human.db.topupAcount
  170. local config = MiLingExcel.recharge[id]
  171. if human.db.miLing and human.db.miLing.rechargeGet[id] then
  172. return 2
  173. end
  174. if recharge >= config.need then
  175. return 1
  176. end
  177. return 0
  178. end
  179. function getMilingLvState(human, id)
  180. local lv = getMilingLv(human)
  181. if human.db.miLing and human.db.miLing.miLingGet[id] then
  182. return 2
  183. end
  184. if lv >= config.needLv then
  185. return 1
  186. end
  187. return 0
  188. end
  189. function getTaskState(human, queryType, id)
  190. if queryType == 1 then
  191. return getMilingLvState(human, id)
  192. elseif queryType == 2 then
  193. return getRechargetState(human, id)
  194. end
  195. end
  196. function updateGetState(human, queryType, id)
  197. if queryType == 1 then
  198. human.db.miLing.miLingGet = human.db.miLing.miLingGet or {}
  199. human.db.miLing.miLingGet[id] = 1
  200. elseif queryType == 2 then
  201. human.db.miLing.rechargeGet = human.db.miLing.rechargeGet or {}
  202. human.db.miLing.rechargeGet[id] = 1
  203. end
  204. end
  205. function getReward(human, getType, id)
  206. if not human.db.miLing then return end
  207. if getTaskState(human, getType, id) ~= 1 then
  208. return
  209. end
  210. local config
  211. if getType == 1 then
  212. config = MiLingExcel.miLing
  213. elseif getType == 2 then
  214. config = MiLingExcel.recharge
  215. end
  216. if not config then return end
  217. updateGetState(human, getType, id)
  218. BagLogic.sendItemGetList(human, config.reward, "miLing")
  219. queryReward(human, getType)
  220. end