-------------------------------- -- 文件名 : WeekendLoopActHeroStar.lua -- 文件说明 : 周末冲刺活动-英雄升星 -- 创建时间 : 2024/11/26 -- 创建人 : FC -------------------------------- local Util = require("common.Util") local Lang = require("common.Lang") local Broadcast = require("broadcast.Broadcast") local MailExcel = require("excel.mail") local Msg = require("core.Msg") local ObjHuman = require("core.ObjHuman") local WeekLoopActDef = require("WeekendLoopActivity.WeekendLoopActDefine") local WeekLoopActCof = require("excel.WeekLoopAct") local CommonDB = require("common.CommonDB") local MailManager = require("mail.MailManager") local Grid = require("bag.Grid") local HeroGrid = require("hero.HeroGrid") local HeroLogic = require("hero.HeroLogic") local BagLogic = require("bag.BagLogic") local Log = require("common.Log") local HeroExcel = require("excel.hero") local WeekendLoopActManger = require("WeekendLoopActivity.WeekendLoopActManager") ----------------------------------------- 内部处理开始 ------------------------------------- -- 下发数据 local function WeekActHeroStar_SendData(tMsgData, fd) Msg.send(tMsgData, fd) end -- 获取配置 local function WeekActHeroStar_GetConfig() if not WeekLoopActCof then return nil end return WeekLoopActCof.HeroStarUp end -- 获取选择的英雄ID local function WeekActHeroStar_GetHeroID(human) if not human then return -1 end if not human.db.nWeekHeroID then return -1 end return human.db.nWeekHeroID end -- 设置英雄ID local function WeekActHeroStar_SetHeroID(human, nHeroID) if not human or not nHeroID then print("[WeekActHeroStar_SetHeroID] 设置英雄ID失败 nHeroID = "..nHeroID) return end human.db.nWeekHeroID = nHeroID end -- 初始化奖励信息 local function WeekActHeroStar_ResetPrize(human) if not human then return false end local tConfig = WeekActHeroStar_GetConfig() if not tConfig then return false end if not human.db.tWeekHeroPrize then human.db.tWeekHeroPrize = {} end for nID, v in pairs(tConfig) do human.db.tWeekHeroPrize[nID] = WeekLoopActDef.WEEKACT_STATE_NONE end return true end -- 获取奖励表 local function WeekActHeroStar_GetDBPrize(human) if not human then return nil end if not human.db.tWeekHeroPrize then return nil end return human.db.tWeekHeroPrize end -- 获取奖励ID状态 local function WeekActHeroStar_GetPrizeStatus(human, nID) if not human then return WeekLoopActDef.WEEKACT_STATE_NONE end local tPrize = WeekActHeroStar_GetDBPrize(human) if not tPrize or not tPrize[nID] then return WeekLoopActDef.WEEKACT_STATE_NONE end return human.db.tWeekHeroPrize[nID] end -- 设置奖励ID状态 local function WeekActHeroStar_SetPrizeStatus(human, nID, nStatus) if not human then return false end local tPrize = WeekActHeroStar_GetDBPrize(human) if not tPrize or not tPrize[nID] then return false end tPrize[nID] = nStatus return true end ----------------------------------------- 外部调用 ------------------------------------- -- 重置数据 function WeekActHeroStar_ResetData(human) if not human then return end if false == WeekActHeroStar_ResetPrize(human) then print("[WeekActHeroStar_ResetData] 重置英雄升星数据失败") return end WeekActHeroStar_SetHeroID(human, 0) print("[WeekActHeroStar_ResetData] 英雄升星 数据重置结束 ") end -- 活动结束 function WeekActHeroStar_End(human) if not human then return end print("[WeekActHeroStar_End] 英雄升星 活动结束处理开始") local tPrize = WeekActHeroStar_GetDBPrize(human) local tPrizeConfig = WeekActHeroStar_GetConfig() if not tPrize or not tPrizeConfig then return end local tMailConfig = MailExcel.mail[WeekLoopActDef.WEEKACT_HEROSTAR_MAILID] if not tMailConfig then return end local items = { } for nID, v in pairs(tPrizeConfig) do if WeekLoopActDef.WEEKACT_STATE_CANGET == tPrize[nID] then for _, data in pairs(v.prize) do items[#items + 1] = { data[1], data[2] } end WeekActHeroStar_SetPrizeStatus(human, nID, WeekLoopActDef.WEEKACT_STATE_FINISH) end end local title = tMailConfig.title local content = tMailConfig.content local senderName = tMailConfig.senderName MailManager.add(MailManager.SYSTEM, human.db._id, title, content, items, senderName) print("[WeekActHeroStar_End] 英雄升星 活动结束处理完成") end -- 是否有红点 function isRed(human) local tPrize = WeekActHeroStar_GetConfig() if not tPrize then return false end for nID, v in pairs(tPrize) do if WeekLoopActDef.WEEKACT_STATE_CANGET == WeekActHeroStar_GetPrizeStatus(human, nID) then return true end end return false end ----------------------------------------- 客户端请求 ------------------------------------- -- 请求英雄升星活动信息 function WeekActHeroStar_Query(human) if not human then return end local tPrizeConfig = WeekActHeroStar_GetConfig() local tPrize = WeekActHeroStar_GetDBPrize(human) if not tPrizeConfig or not tPrize then return end local tMsgData = Msg.gc.GC_WEEKLOOP_ACT_HEROQUERY -- 奖励信息 tMsgData.list[0] = 0 for nID, v in pairs(tPrizeConfig) do tMsgData.list[0] = tMsgData.list[0] + 1 local tPrizeData = tMsgData.list[tMsgData.list[0]] tPrizeData.nID = nID tPrizeData.nState = WeekActHeroStar_GetPrizeStatus(human, nID) local nPrizeLne = #v.prize tPrizeData.item[0] = nPrizeLne --print("[WeekActHeroStar_Query] nItemLen = "..tPrizeData.item[0].." nID = "..nID) for j = 1, nPrizeLne do local nGoodsID = v.prize[j][1] local nGoodsNum = v.prize[j][2] --print("[WeekActHeroStar_Query] nGoodsID = "..nGoodsID.. " nGoodsNum = "..nGoodsNum) Grid.makeItem(tPrizeData.item[j], nGoodsID, nGoodsNum) end end --print("[WeekActHeroStar_Query] ListLen = ".. tMsgData.list[0]) local nChoseHeroID = WeekActHeroStar_GetHeroID(human) if 0 < nChoseHeroID then tMsgData.HeroData[0] = 1 HeroGrid.makeHeroSimpleByID(tMsgData.HeroData[1], nChoseHeroID) else tMsgData.HeroData[0] = 0 end WeekActHeroStar_SendData(tMsgData, human.fd) print("[WeekActHeroStar_Query] 消息发送完成 ") end -- 英雄升星- 请求所有英雄简略信息 function WeekActHeroStar_GetAllHeroInfo(human) if not human then return end local tMsgData = Msg.gc.GC_WEEKLOOP_ACT_HEROGETSIMPLIFYINFO local tHeroData = HeroExcel.hero tMsgData.tHeroData[0] = 0 print("[getACTHeroInfo] 获取数据开始 ") for nID, v in pairs(tHeroData) do if not WeekLoopActDef.TWEEKACT_HEROSTAR_IGNORE[nID] then -- ssr 和 ur if WeekLoopActDef.TWEEKACT_HEROSTAR_RARITY[v.grade] then tMsgData.tHeroData[0] = tMsgData.tHeroData[0] + 1 HeroGrid.makeHeroSimpleByID(tMsgData.tHeroData[tMsgData.tHeroData[0]], nID) end end end WeekActHeroStar_SendData(tMsgData, human.fd) end -- 英雄升星 - 选择英雄 function WeekActHeroStar_ChoseHero(human, nID) if not human or 0 >= nID then return end WeekActHeroStar_SetHeroID(human, nID) WeekActHeroStar_Query(human) end -- 请求领取奖励 function WeekActHeroStar_GetPrize(human) if not human then return end local tPrize = WeekActHeroStar_GetConfig() if not tPrize then return end local tItemList = {} for nID, v in pairs(tPrize) do if WeekLoopActDef.WEEKACT_STATE_CANGET == WeekActHeroStar_GetPrizeStatus(human, nID) then if false == WeekActHeroStar_SetPrizeStatus(human, nID, WeekLoopActDef.WEEKACT_STATE_FINISH) then print("[WeekActHeroStar_GetPrize] 奖励领取失败 nID = "..nID) Log.write(Log.LOGID_OSS_WEEKLOOP_ACT, "[WeekActHeroStar_GetPrize] 设置奖励状态失败 nID = "..nID.." _id = "..human.db._id.." "..human.db.name) break end for _, data in ipairs(v.prize) do local nItemID = data[1] local nItemNum = data[2] tItemList[nItemID] = tItemList[nItemID] or 0 tItemList[nItemID] = tItemList[nItemID] + nItemNum end end end if nil ~= _G.next(tItemList) then local tGoodsInfo = {} for k, v in pairs(tItemList) do table.insert(tGoodsInfo, {k,v}) -- 获取奖励写日志 Log.write(Log.LOGID_OSS_WEEKLOOP_ACT, "[WeekActHeroStar_GetPrize] 玩家获取到奖励 name = " ..human.db.name.." _id = "..human.db._id.." nGoodsID = "..k.." nGoodsNum = "..v) end BagLogic.addItemList(human, tGoodsInfo, "week_loop_act") BagLogic.sendItemGetList(human, tItemList, "week_loop_act") end WeekActHeroStar_Query(human) WeekendLoopActManger.WeekLoopACT_SendActInfo(human) end -- 英雄升星 function WeekActHeroStar_HeroStarUp(human, nHeroID, nStar) if not human or 0 >= nHeroID or 0 >= nStar then return end local nChoseHeroID = WeekActHeroStar_GetHeroID(human) local tConfig = WeekActHeroStar_GetConfig() if -1 >= nChoseHeroID or not tConfig then return end if nHeroID ~= nChoseHeroID then return end for nID, v in pairs(tConfig) do if nID == nStar then local nStatus = WeekActHeroStar_GetPrizeStatus(human, nID) if WeekLoopActDef.WEEKACT_STATE_NONE == nStatus then WeekActHeroStar_SetPrizeStatus(human, nID, WeekLoopActDef.WEEKACT_STATE_CANGET) end end end WeekActHeroStar_Query(human) WeekendLoopActManger.WeekLoopACT_SendActInfo(human) end