WeekendLoopActHeroStar.lua 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. --------------------------------
  2. -- 文件名 : WeekendLoopActHeroStar.lua
  3. -- 文件说明 : 周末冲刺活动-英雄升星
  4. -- 创建时间 : 2024/11/26
  5. -- 创建人 : FC
  6. --------------------------------
  7. local Util = require("common.Util")
  8. local Lang = require("common.Lang")
  9. local Broadcast = require("broadcast.Broadcast")
  10. local MailExcel = require("excel.mail")
  11. local Msg = require("core.Msg")
  12. local ObjHuman = require("core.ObjHuman")
  13. local WeekLoopActDef = require("WeekendLoopActivity.WeekendLoopActDefine")
  14. local WeekLoopActCof = require("excel.WeekLoopAct")
  15. local CommonDB = require("common.CommonDB")
  16. local MailManager = require("mail.MailManager")
  17. local Grid = require("bag.Grid")
  18. local HeroGrid = require("hero.HeroGrid")
  19. local HeroLogic = require("hero.HeroLogic")
  20. local BagLogic = require("bag.BagLogic")
  21. local Log = require("common.Log")
  22. local HeroExcel = require("excel.hero")
  23. local WeekendLoopActManger = require("WeekendLoopActivity.WeekendLoopActManager")
  24. ----------------------------------------- 内部处理开始 -------------------------------------
  25. -- 下发数据
  26. local function WeekActHeroStar_SendData(tMsgData, fd)
  27. Msg.send(tMsgData, fd)
  28. end
  29. -- 获取配置
  30. local function WeekActHeroStar_GetConfig()
  31. if not WeekLoopActCof then
  32. return nil
  33. end
  34. return WeekLoopActCof.HeroStarUp
  35. end
  36. -- 获取选择的英雄ID
  37. local function WeekActHeroStar_GetHeroID(human)
  38. if not human then
  39. return -1
  40. end
  41. if not human.db.nWeekHeroID then
  42. return -1
  43. end
  44. return human.db.nWeekHeroID
  45. end
  46. -- 设置英雄ID
  47. local function WeekActHeroStar_SetHeroID(human, nHeroID)
  48. if not human or not nHeroID then
  49. print("[WeekActHeroStar_SetHeroID] 设置英雄ID失败 nHeroID = "..nHeroID)
  50. return
  51. end
  52. human.db.nWeekHeroID = nHeroID
  53. end
  54. -- 初始化奖励信息
  55. local function WeekActHeroStar_ResetPrize(human)
  56. if not human then
  57. return false
  58. end
  59. local tConfig = WeekActHeroStar_GetConfig()
  60. if not tConfig then
  61. return false
  62. end
  63. if not human.db.tWeekHeroPrize then
  64. human.db.tWeekHeroPrize = {}
  65. end
  66. for nID, v in pairs(tConfig) do
  67. human.db.tWeekHeroPrize[nID] = WeekLoopActDef.WEEKACT_STATE_NONE
  68. end
  69. return true
  70. end
  71. -- 获取奖励表
  72. local function WeekActHeroStar_GetDBPrize(human)
  73. if not human then
  74. return nil
  75. end
  76. if not human.db.tWeekHeroPrize then
  77. return nil
  78. end
  79. return human.db.tWeekHeroPrize
  80. end
  81. -- 获取奖励ID状态
  82. local function WeekActHeroStar_GetPrizeStatus(human, nID)
  83. if not human then
  84. return WeekLoopActDef.WEEKACT_STATE_NONE
  85. end
  86. local tPrize = WeekActHeroStar_GetDBPrize(human)
  87. if not tPrize or not tPrize[nID] then
  88. return WeekLoopActDef.WEEKACT_STATE_NONE
  89. end
  90. return human.db.tWeekHeroPrize[nID]
  91. end
  92. -- 设置奖励ID状态
  93. local function WeekActHeroStar_SetPrizeStatus(human, nID, nStatus)
  94. if not human then
  95. return false
  96. end
  97. local tPrize = WeekActHeroStar_GetDBPrize(human)
  98. if not tPrize or not tPrize[nID] then
  99. return false
  100. end
  101. tPrize[nID] = nStatus
  102. return true
  103. end
  104. ----------------------------------------- 外部调用 -------------------------------------
  105. -- 重置数据
  106. function WeekActHeroStar_ResetData(human)
  107. if not human then
  108. return
  109. end
  110. if false == WeekActHeroStar_ResetPrize(human) then
  111. print("[WeekActHeroStar_ResetData] 重置英雄升星数据失败")
  112. return
  113. end
  114. WeekActHeroStar_SetHeroID(human, 0)
  115. print("[WeekActHeroStar_ResetData] 英雄升星 数据重置结束 ")
  116. end
  117. -- 活动结束
  118. function WeekActHeroStar_End(human)
  119. if not human then
  120. return
  121. end
  122. print("[WeekActHeroStar_End] 英雄升星 活动结束处理开始")
  123. local tPrize = WeekActHeroStar_GetDBPrize(human)
  124. local tPrizeConfig = WeekActHeroStar_GetConfig()
  125. if not tPrize or not tPrizeConfig then
  126. return
  127. end
  128. local tMailConfig = MailExcel.mail[WeekLoopActDef.WEEKACT_HEROSTAR_MAILID]
  129. if not tMailConfig then
  130. return
  131. end
  132. local items = { }
  133. for nID, v in pairs(tPrizeConfig) do
  134. if WeekLoopActDef.WEEKACT_STATE_CANGET == tPrize[nID] then
  135. for _, data in pairs(v.prize) do
  136. items[#items + 1] = { data[1], data[2] }
  137. end
  138. WeekActHeroStar_SetPrizeStatus(human, nID, WeekLoopActDef.WEEKACT_STATE_FINISH)
  139. end
  140. end
  141. local title = tMailConfig.title
  142. local content = tMailConfig.content
  143. local senderName = tMailConfig.senderName
  144. MailManager.add(MailManager.SYSTEM, human.db._id, title, content, items, senderName)
  145. print("[WeekActHeroStar_End] 英雄升星 活动结束处理完成")
  146. end
  147. -- 是否有红点
  148. function isRed(human)
  149. local tPrize = WeekActHeroStar_GetConfig()
  150. if not tPrize then
  151. return false
  152. end
  153. for nID, v in pairs(tPrize) do
  154. if WeekLoopActDef.WEEKACT_STATE_CANGET == WeekActHeroStar_GetPrizeStatus(human, nID) then
  155. return true
  156. end
  157. end
  158. return false
  159. end
  160. ----------------------------------------- 客户端请求 -------------------------------------
  161. -- 请求英雄升星活动信息
  162. function WeekActHeroStar_Query(human)
  163. if not human then
  164. return
  165. end
  166. local tPrizeConfig = WeekActHeroStar_GetConfig()
  167. local tPrize = WeekActHeroStar_GetDBPrize(human)
  168. if not tPrizeConfig or not tPrize then
  169. return
  170. end
  171. local tMsgData = Msg.gc.GC_WEEKLOOP_ACT_HEROQUERY
  172. -- 奖励信息
  173. tMsgData.list[0] = 0
  174. for nID, v in pairs(tPrizeConfig) do
  175. tMsgData.list[0] = tMsgData.list[0] + 1
  176. local tPrizeData = tMsgData.list[tMsgData.list[0]]
  177. tPrizeData.nID = nID
  178. tPrizeData.nState = WeekActHeroStar_GetPrizeStatus(human, nID)
  179. local nPrizeLne = #v.prize
  180. tPrizeData.item[0] = nPrizeLne
  181. --print("[WeekActHeroStar_Query] nItemLen = "..tPrizeData.item[0].." nID = "..nID)
  182. for j = 1, nPrizeLne do
  183. local nGoodsID = v.prize[j][1]
  184. local nGoodsNum = v.prize[j][2]
  185. --print("[WeekActHeroStar_Query] nGoodsID = "..nGoodsID.. " nGoodsNum = "..nGoodsNum)
  186. Grid.makeItem(tPrizeData.item[j], nGoodsID, nGoodsNum)
  187. end
  188. end
  189. --print("[WeekActHeroStar_Query] ListLen = ".. tMsgData.list[0])
  190. local nChoseHeroID = WeekActHeroStar_GetHeroID(human)
  191. if 0 < nChoseHeroID then
  192. tMsgData.HeroData[0] = 1
  193. HeroGrid.makeHeroSimpleByID(tMsgData.HeroData[1], nChoseHeroID)
  194. else
  195. tMsgData.HeroData[0] = 0
  196. end
  197. WeekActHeroStar_SendData(tMsgData, human.fd)
  198. print("[WeekActHeroStar_Query] 消息发送完成 ")
  199. end
  200. -- 英雄升星- 请求所有英雄简略信息
  201. function WeekActHeroStar_GetAllHeroInfo(human)
  202. if not human then
  203. return
  204. end
  205. local tMsgData = Msg.gc.GC_WEEKLOOP_ACT_HEROGETSIMPLIFYINFO
  206. local tHeroData = HeroExcel.hero
  207. tMsgData.tHeroData[0] = 0
  208. print("[getACTHeroInfo] 获取数据开始 ")
  209. for nID, v in pairs(tHeroData) do
  210. if not WeekLoopActDef.TWEEKACT_HEROSTAR_IGNORE[nID] then
  211. -- ssr 和 ur
  212. if WeekLoopActDef.TWEEKACT_HEROSTAR_RARITY[v.grade] then
  213. tMsgData.tHeroData[0] = tMsgData.tHeroData[0] + 1
  214. HeroGrid.makeHeroSimpleByID(tMsgData.tHeroData[tMsgData.tHeroData[0]], nID)
  215. end
  216. end
  217. end
  218. WeekActHeroStar_SendData(tMsgData, human.fd)
  219. end
  220. -- 英雄升星 - 选择英雄
  221. function WeekActHeroStar_ChoseHero(human, nID)
  222. if not human or 0 >= nID then
  223. return
  224. end
  225. WeekActHeroStar_SetHeroID(human, nID)
  226. WeekActHeroStar_Query(human)
  227. end
  228. -- 请求领取奖励
  229. function WeekActHeroStar_GetPrize(human)
  230. if not human then
  231. return
  232. end
  233. local tPrize = WeekActHeroStar_GetConfig()
  234. if not tPrize then
  235. return
  236. end
  237. local tItemList = {}
  238. for nID, v in pairs(tPrize) do
  239. if WeekLoopActDef.WEEKACT_STATE_CANGET == WeekActHeroStar_GetPrizeStatus(human, nID) then
  240. if false == WeekActHeroStar_SetPrizeStatus(human, nID, WeekLoopActDef.WEEKACT_STATE_FINISH) then
  241. print("[WeekActHeroStar_GetPrize] 奖励领取失败 nID = "..nID)
  242. Log.write(Log.LOGID_OSS_WEEKLOOP_ACT, "[WeekActHeroStar_GetPrize] 设置奖励状态失败 nID = "..nID.." _id = "..human.db._id.." "..human.db.name)
  243. break
  244. end
  245. for _, data in ipairs(v.prize) do
  246. local nItemID = data[1]
  247. local nItemNum = data[2]
  248. tItemList[nItemID] = tItemList[nItemID] or 0
  249. tItemList[nItemID] = tItemList[nItemID] + nItemNum
  250. end
  251. end
  252. end
  253. if nil ~= _G.next(tItemList) then
  254. local tGoodsInfo = {}
  255. for k, v in pairs(tItemList) do
  256. table.insert(tGoodsInfo, {k,v})
  257. -- 获取奖励写日志
  258. Log.write(Log.LOGID_OSS_WEEKLOOP_ACT, "[WeekActHeroStar_GetPrize] 玩家获取到奖励 name = "
  259. ..human.db.name.." _id = "..human.db._id.." nGoodsID = "..k.." nGoodsNum = "..v)
  260. end
  261. BagLogic.addItemList(human, tGoodsInfo, "week_loop_act")
  262. BagLogic.sendItemGetList(human, tItemList, "week_loop_act")
  263. end
  264. WeekActHeroStar_Query(human)
  265. WeekendLoopActManger.WeekLoopACT_SendActInfo(human)
  266. end
  267. -- 英雄升星
  268. function WeekActHeroStar_HeroStarUp(human, nHeroID, nStar)
  269. if not human or 0 >= nHeroID or 0 >= nStar then
  270. return
  271. end
  272. local nChoseHeroID = WeekActHeroStar_GetHeroID(human)
  273. local tConfig = WeekActHeroStar_GetConfig()
  274. if -1 >= nChoseHeroID or not tConfig then
  275. return
  276. end
  277. if nHeroID ~= nChoseHeroID then
  278. return
  279. end
  280. for nID, v in pairs(tConfig) do
  281. if nID == nStar then
  282. local nStatus = WeekActHeroStar_GetPrizeStatus(human, nID)
  283. if WeekLoopActDef.WEEKACT_STATE_NONE == nStatus then
  284. WeekActHeroStar_SetPrizeStatus(human, nID, WeekLoopActDef.WEEKACT_STATE_CANGET)
  285. end
  286. end
  287. end
  288. WeekActHeroStar_Query(human)
  289. WeekendLoopActManger.WeekLoopACT_SendActInfo(human)
  290. end