WeekendLoopActHeroStar.lua 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  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. -- 请求英雄升星活动信息
  149. function WeekActHeroStar_Query(human)
  150. if not human then
  151. return
  152. end
  153. local tPrizeConfig = WeekActHeroStar_GetConfig()
  154. local tPrize = WeekActHeroStar_GetDBPrize(human)
  155. if not tPrizeConfig or not tPrize then
  156. return
  157. end
  158. local tMsgData = Msg.gc.GC_WEEKLOOP_ACT_HEROQUERY
  159. -- 奖励信息
  160. tMsgData.list[0] = 0
  161. for nID, v in pairs(tPrizeConfig) do
  162. tMsgData.list[0] = tMsgData.list[0] + 1
  163. local tPrizeData = tMsgData.list[tMsgData.list[0]]
  164. tPrizeData.nID = nID
  165. tPrizeData.nState = WeekActHeroStar_GetPrizeStatus(human, nID)
  166. local nPrizeLne = #v.prize
  167. tPrizeData.item[0] = nPrizeLne
  168. --print("[WeekActHeroStar_Query] nItemLen = "..tPrizeData.item[0].." nID = "..nID)
  169. for j = 1, nPrizeLne do
  170. local nGoodsID = v.prize[j][1]
  171. local nGoodsNum = v.prize[j][2]
  172. --print("[WeekActHeroStar_Query] nGoodsID = "..nGoodsID.. " nGoodsNum = "..nGoodsNum)
  173. Grid.makeItem(tPrizeData.item[j], nGoodsID, nGoodsNum)
  174. end
  175. end
  176. --print("[WeekActHeroStar_Query] ListLen = ".. tMsgData.list[0])
  177. local nChoseHeroID = WeekActHeroStar_GetHeroID(human)
  178. if 0 < nChoseHeroID then
  179. tMsgData.HeroData[0] = 1
  180. HeroGrid.makeHeroSimpleByID(tMsgData.HeroData[1], nChoseHeroID)
  181. else
  182. tMsgData.HeroData[0] = 0
  183. end
  184. WeekActHeroStar_SendData(tMsgData, human.fd)
  185. print("[WeekActHeroStar_Query] 消息发送完成 ")
  186. end
  187. -- 英雄升星- 请求所有英雄简略信息
  188. function WeekActHeroStar_GetAllHeroInfo(human)
  189. if not human then
  190. return
  191. end
  192. local tMsgData = Msg.gc.GC_WEEKLOOP_ACT_HEROGETSIMPLIFYINFO
  193. local tHeroData = HeroExcel.hero
  194. tMsgData.tHeroData[0] = 0
  195. print("[getACTHeroInfo] 获取数据开始 ")
  196. for nID, v in pairs(tHeroData) do
  197. if not WeekLoopActDef.TWEEKACT_HEROSTAR_IGNORE[nID] then
  198. -- ssr 和 ur
  199. if WeekLoopActDef.TWEEKACT_HEROSTAR_RARITY[v.grade] then
  200. tMsgData.tHeroData[0] = tMsgData.tHeroData[0] + 1
  201. HeroGrid.makeHeroSimpleByID(tMsgData.tHeroData[tMsgData.tHeroData[0]], nID)
  202. end
  203. end
  204. end
  205. WeekActHeroStar_SendData(tMsgData, human.fd)
  206. end
  207. -- 英雄升星 - 选择英雄
  208. function WeekActHeroStar_ChoseHero(human, nID)
  209. if not human or 0 >= nID then
  210. return
  211. end
  212. WeekActHeroStar_SetHeroID(human, nID)
  213. WeekActHeroStar_Query(human)
  214. end
  215. -- 请求领取奖励
  216. function WeekActHeroStar_GetPrize(human)
  217. if not human then
  218. return
  219. end
  220. local tPrize = WeekActHeroStar_GetConfig()
  221. if not tPrize then
  222. return
  223. end
  224. local tItemList = {}
  225. for nID, v in pairs(tPrize) do
  226. if WeekLoopActDef.WEEKACT_STATE_CANGET == WeekActHeroStar_GetPrizeStatus(human, nID) then
  227. if false == WeekActHeroStar_SetPrizeStatus(human, nID, WeekLoopActDef.WEEKACT_STATE_FINISH) then
  228. print("[WeekActHeroStar_GetPrize] 奖励领取失败 nID = "..nID)
  229. Log.write(Log.LOGID_OSS_WEEKLOOP_ACT, "[WeekActHeroStar_GetPrize] 设置奖励状态失败 nID = "..nID.." _id = "..human.db._id.." "..human.db.name)
  230. break
  231. end
  232. for _, data in ipairs(v.prize) do
  233. local nItemID = data[1]
  234. local nItemNum = data[2]
  235. tItemList[nItemID] = tItemList[nItemID] or 0
  236. tItemList[nItemID] = tItemList[nItemID] + nItemNum
  237. end
  238. end
  239. end
  240. if nil ~= _G.next(tItemList) then
  241. local tGoodsInfo = {}
  242. for k, v in pairs(tItemList) do
  243. table.insert(tGoodsInfo, {k,v})
  244. -- 获取奖励写日志
  245. Log.write(Log.LOGID_OSS_WEEKLOOP_ACT, "[WeekActHeroStar_GetPrize] 玩家获取到奖励 name = "
  246. ..human.db.name.." _id = "..human.db._id.." nGoodsID = "..k.." nGoodsNum = "..v)
  247. end
  248. BagLogic.addItemList(human, tGoodsInfo, "week_loop_act")
  249. BagLogic.sendItemGetList(human, tItemList, "week_loop_act")
  250. end
  251. WeekActHeroStar_Query(human)
  252. WeekendLoopActManger.WeekLoopACT_SendActInfo(human)
  253. end
  254. -- 英雄升星
  255. function WeekActHeroStar_HeroStarUp(human, nHeroID, nStar)
  256. if not human or 0 >= nHeroID or 0 >= nStar then
  257. return
  258. end
  259. local nChoseHeroID = WeekActHeroStar_GetHeroID(human)
  260. local tConfig = WeekActHeroStar_GetConfig()
  261. if -1 >= nChoseHeroID or not tConfig then
  262. return
  263. end
  264. if nHeroID ~= nChoseHeroID then
  265. return
  266. end
  267. for nID, v in pairs(tConfig) do
  268. if nID == nStar then
  269. local nStatus = WeekActHeroStar_GetPrizeStatus(human, nID)
  270. if WeekLoopActDef.WEEKACT_STATE_NONE == nStatus then
  271. WeekActHeroStar_SetPrizeStatus(human, nID, WeekLoopActDef.WEEKACT_STATE_CANGET)
  272. end
  273. end
  274. end
  275. WeekActHeroStar_Query(human)
  276. WeekendLoopActManger.WeekLoopACT_SendActInfo(human)
  277. end
  278. function isRed(human)
  279. local tPrize = WeekActHeroStar_GetConfig()
  280. if not tPrize then
  281. return false
  282. end
  283. for nID, v in pairs(tPrize) do
  284. if WeekLoopActDef.WEEKACT_STATE_CANGET == WeekActHeroStar_GetPrizeStatus(human, nID) then
  285. return true
  286. end
  287. end
  288. return false
  289. end