WeekendLoopActHeroStar.lua 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404
  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. -- 重置选择的英雄最大星数
  47. local function WeekActHeroStar_RestHeroStar(human)
  48. human.db.nWeekHeroStar = 0
  49. end
  50. -- 设置当前英雄最大星数
  51. local function WeekActHeroStar_SetHeroStar(human, nStar)
  52. human.db.nWeekHeroStar = math.max(human.db.nWeekHeroStar, nStar)
  53. end
  54. local function WeekActHeroStar_GetHeroStar(human)
  55. return human.db.nWeekHeroStar
  56. end
  57. -- 设置英雄ID
  58. local function WeekActHeroStar_SetHeroID(human, nHeroID)
  59. if not human or not nHeroID then
  60. print("[WeekActHeroStar_SetHeroID] 设置英雄ID失败 nHeroID = "..nHeroID)
  61. return
  62. end
  63. human.db.nWeekHeroID = nHeroID
  64. WeekActHeroStar_RestHeroStar(human)
  65. end
  66. -- 初始化奖励信息
  67. local function WeekActHeroStar_ResetPrize(human)
  68. if not human then
  69. return false
  70. end
  71. local tConfig = WeekActHeroStar_GetConfig()
  72. if not tConfig then
  73. return false
  74. end
  75. if not human.db.tWeekHeroPrize then
  76. human.db.tWeekHeroPrize = {}
  77. end
  78. for nID, v in pairs(tConfig) do
  79. human.db.tWeekHeroPrize[nID] = WeekLoopActDef.WEEKACT_STATE_NONE
  80. end
  81. return true
  82. end
  83. -- 获取奖励表
  84. local function WeekActHeroStar_GetDBPrize(human)
  85. if not human then
  86. return nil
  87. end
  88. if not human.db.tWeekHeroPrize then
  89. return nil
  90. end
  91. return human.db.tWeekHeroPrize
  92. end
  93. -- 获取奖励ID状态
  94. local function WeekActHeroStar_GetPrizeStatus(human, nID)
  95. if not human then
  96. return WeekLoopActDef.WEEKACT_STATE_NONE
  97. end
  98. local tPrize = WeekActHeroStar_GetDBPrize(human)
  99. if not tPrize or not tPrize[nID] then
  100. return WeekLoopActDef.WEEKACT_STATE_NONE
  101. end
  102. return human.db.tWeekHeroPrize[nID]
  103. end
  104. -- 设置奖励ID状态
  105. local function WeekActHeroStar_SetPrizeStatus(human, nID, nStatus)
  106. if not human then
  107. return false
  108. end
  109. local tPrize = WeekActHeroStar_GetDBPrize(human)
  110. if not tPrize or not tPrize[nID] then
  111. return false
  112. end
  113. tPrize[nID] = nStatus
  114. return true
  115. end
  116. ----------------------------------------- 外部调用 -------------------------------------
  117. -- 重置数据
  118. function WeekActHeroStar_ResetData(human)
  119. if not human then
  120. return
  121. end
  122. if false == WeekActHeroStar_ResetPrize(human) then
  123. print("[WeekActHeroStar_ResetData] 重置英雄升星数据失败")
  124. return
  125. end
  126. WeekActHeroStar_SetHeroID(human, 0)
  127. print("[WeekActHeroStar_ResetData] 英雄升星 数据重置结束 ")
  128. end
  129. -- 活动结束
  130. function WeekActHeroStar_End(human)
  131. if not human then
  132. return
  133. end
  134. print("[WeekActHeroStar_End] 英雄升星 活动结束处理开始")
  135. local tPrize = WeekActHeroStar_GetDBPrize(human)
  136. local tPrizeConfig = WeekActHeroStar_GetConfig()
  137. if not tPrize or not tPrizeConfig then
  138. return
  139. end
  140. local tMailConfig = MailExcel.mail[WeekLoopActDef.WEEKACT_HEROSTAR_MAILID]
  141. if not tMailConfig then
  142. return
  143. end
  144. local items = { }
  145. for nID, v in pairs(tPrizeConfig) do
  146. if WeekLoopActDef.WEEKACT_STATE_CANGET == tPrize[nID] then
  147. for _, data in pairs(v.prize) do
  148. items[#items + 1] = { data[1], data[2] }
  149. end
  150. WeekActHeroStar_SetPrizeStatus(human, nID, WeekLoopActDef.WEEKACT_STATE_FINISH)
  151. end
  152. end
  153. local title = tMailConfig.title
  154. local content = tMailConfig.content
  155. local senderName = tMailConfig.senderName
  156. MailManager.add(MailManager.SYSTEM, human.db._id, title, content, items, senderName)
  157. WeekActHeroStar_RestHeroStar(human)
  158. print("[WeekActHeroStar_End] 英雄升星 活动结束处理完成")
  159. end
  160. -- 是否有红点
  161. function isRed(human)
  162. local tPrize = WeekActHeroStar_GetConfig()
  163. if not tPrize then
  164. return false
  165. end
  166. for nID, v in pairs(tPrize) do
  167. if WeekLoopActDef.WEEKACT_STATE_CANGET == WeekActHeroStar_GetPrizeStatus(human, nID) then
  168. return true
  169. end
  170. end
  171. return false
  172. end
  173. ----------------------------------------- 客户端请求 -------------------------------------
  174. -- 请求英雄升星活动信息
  175. function WeekActHeroStar_Query(human)
  176. if not human then
  177. return
  178. end
  179. local tPrizeConfig = WeekActHeroStar_GetConfig()
  180. local tPrize = WeekActHeroStar_GetDBPrize(human)
  181. if not tPrizeConfig or not tPrize then
  182. return
  183. end
  184. local tMsgData = Msg.gc.GC_WEEKLOOP_ACT_HEROQUERY
  185. -- 奖励信息
  186. tMsgData.list[0] = 0
  187. for nID, v in pairs(tPrizeConfig) do
  188. tMsgData.list[0] = tMsgData.list[0] + 1
  189. local tPrizeData = tMsgData.list[tMsgData.list[0]]
  190. tPrizeData.nID = nID
  191. tPrizeData.nState = WeekActHeroStar_GetPrizeStatus(human, nID)
  192. local nPrizeLne = #v.prize
  193. tPrizeData.item[0] = nPrizeLne
  194. --print("[WeekActHeroStar_Query] nItemLen = "..tPrizeData.item[0].." nID = "..nID)
  195. for j = 1, nPrizeLne do
  196. local nGoodsID = v.prize[j][1]
  197. local nGoodsNum = v.prize[j][2]
  198. --print("[WeekActHeroStar_Query] nGoodsID = "..nGoodsID.. " nGoodsNum = "..nGoodsNum)
  199. Grid.makeItem(tPrizeData.item[j], nGoodsID, nGoodsNum)
  200. end
  201. end
  202. --print("[WeekActHeroStar_Query] ListLen = ".. tMsgData.list[0])
  203. local nChoseHeroID = WeekActHeroStar_GetHeroID(human)
  204. if 0 < nChoseHeroID then
  205. tMsgData.HeroData[0] = 1
  206. HeroGrid.makeHeroSimpleByID(tMsgData.HeroData[1], nChoseHeroID)
  207. else
  208. tMsgData.HeroData[0] = 0
  209. end
  210. WeekActHeroStar_SendData(tMsgData, human.fd)
  211. print("[WeekActHeroStar_Query] 消息发送完成 ")
  212. end
  213. -- 英雄升星- 请求所有英雄简略信息
  214. function WeekActHeroStar_GetAllHeroInfo(human)
  215. if not human then
  216. return
  217. end
  218. local tMsgData = Msg.gc.GC_WEEKLOOP_ACT_HEROGETSIMPLIFYINFO
  219. local tHeroData = HeroExcel.hero
  220. tMsgData.tHeroData[0] = 0
  221. print("[getACTHeroInfo] 获取数据开始 ")
  222. for nID, v in pairs(tHeroData) do
  223. if not WeekLoopActDef.TWEEKACT_HEROSTAR_IGNORE[nID] then
  224. -- ssr 和 ur
  225. if WeekLoopActDef.TWEEKACT_HEROSTAR_RARITY[v.grade] then
  226. tMsgData.tHeroData[0] = tMsgData.tHeroData[0] + 1
  227. HeroGrid.makeHeroSimpleByID(tMsgData.tHeroData[tMsgData.tHeroData[0]], nID)
  228. end
  229. end
  230. end
  231. WeekActHeroStar_SendData(tMsgData, human.fd)
  232. end
  233. -- 英雄升星 - 选择英雄
  234. function WeekActHeroStar_ChoseHero(human, nID)
  235. if not human or 0 >= nID then
  236. return
  237. end
  238. Log.write(Log.LOGID_OSS_WEEKLOOP_ACT, "[WeekActHeroStar_ChoseHero] 玩家选择了英雄 nHeroID = "..nID.." _id = "..human.db._id.." "..human.db.name)
  239. WeekActHeroStar_SetHeroID(human, nID)
  240. WeekActHeroStar_Query(human)
  241. end
  242. -- 请求领取奖励
  243. function WeekActHeroStar_GetPrize(human)
  244. if not human then
  245. return
  246. end
  247. local tPrize = WeekActHeroStar_GetConfig()
  248. if not tPrize then
  249. return
  250. end
  251. local tItemList = {}
  252. for nID, v in pairs(tPrize) do
  253. if WeekLoopActDef.WEEKACT_STATE_CANGET == WeekActHeroStar_GetPrizeStatus(human, nID) then
  254. if false == WeekActHeroStar_SetPrizeStatus(human, nID, WeekLoopActDef.WEEKACT_STATE_FINISH) then
  255. print("[WeekActHeroStar_GetPrize] 奖励领取失败 nID = "..nID)
  256. Log.write(Log.LOGID_OSS_WEEKLOOP_ACT, "[WeekActHeroStar_GetPrize] 设置奖励状态失败 nID = "..nID.." _id = "..human.db._id.." "..human.db.name)
  257. break
  258. end
  259. for _, data in ipairs(v.prize) do
  260. local nItemID = data[1]
  261. local nItemNum = data[2]
  262. tItemList[nItemID] = tItemList[nItemID] or 0
  263. tItemList[nItemID] = tItemList[nItemID] + nItemNum
  264. end
  265. end
  266. end
  267. if nil ~= _G.next(tItemList) then
  268. local tGoodsInfo = {}
  269. for k, v in pairs(tItemList) do
  270. table.insert(tGoodsInfo, {k,v})
  271. -- 获取奖励写日志
  272. Log.write(Log.LOGID_OSS_WEEKLOOP_ACT, "[WeekActHeroStar_GetPrize] 玩家获取到奖励 name = "
  273. ..human.db.name.." _id = "..human.db._id.." nGoodsID = "..k.." nGoodsNum = "..v)
  274. end
  275. BagLogic.addItemList(human, tGoodsInfo, "week_loop_act")
  276. BagLogic.sendItemGetList(human, tItemList, "week_loop_act")
  277. end
  278. WeekActHeroStar_Query(human)
  279. WeekendLoopActManger.WeekLoopACT_SendActInfo(human)
  280. end
  281. -- 英雄升星
  282. function WeekActHeroStar_HeroStarUp(human, nHeroID, nStar)
  283. if not human or 0 >= nHeroID or 0 >= nStar then
  284. return
  285. end
  286. local nChoseHeroID = WeekActHeroStar_GetHeroID(human)
  287. local tConfig = WeekActHeroStar_GetConfig()
  288. if -1 >= nChoseHeroID or not tConfig then
  289. return
  290. end
  291. if nHeroID ~= nChoseHeroID then
  292. return
  293. end
  294. for nID, v in pairs(tConfig) do
  295. if nID == nStar then
  296. local nStatus = WeekActHeroStar_GetPrizeStatus(human, nID)
  297. if WeekLoopActDef.WEEKACT_STATE_NONE == nStatus then
  298. WeekActHeroStar_SetPrizeStatus(human, nID, WeekLoopActDef.WEEKACT_STATE_CANGET)
  299. end
  300. end
  301. end
  302. WeekActHeroStar_SetHeroStar(human, nStar)
  303. WeekActHeroStar_Query(human)
  304. WeekendLoopActManger.WeekLoopACT_SendActInfo(human)
  305. end
  306. function onLogin(human)
  307. if not human.db.nWeekHeroID or not human.db.nWeekHeroStar or not human.db.tWeekHeroPrize then
  308. return
  309. end
  310. local tConfig = WeekActHeroStar_GetConfig()
  311. local nNowStar = WeekActHeroStar_GetHeroStar()
  312. if tConfig then
  313. for nID, v in pairs(tConfig) do
  314. if nNowStar >= nID then
  315. local nStatus = WeekActHeroStar_GetPrizeStatus(human, nID)
  316. if WeekLoopActDef.WEEKACT_STATE_NONE == nStatus then
  317. WeekActHeroStar_SetPrizeStatus(human, nID, WeekLoopActDef.WEEKACT_STATE_CANGET)
  318. end
  319. end
  320. end
  321. end
  322. end