local GoldenHeroBoss_Model = {} local private = {} local EventSystem = require 'Event/EventSystem' local LuaBit = require 'bit' local gold_experience_opt_pb = require 'Proto.gold_experience_opt_pb' local gold_hero_experience_pb = require 'Proto.gold_hero_experience_pb' local fuben_common = require('Proto/fuben_pb') ---值分别为1,2,4;使用的时候通过位运算解析确定是否含有该类型 ---服务器发来的是按位或的结果 ---通过按位与运算确定是否包含该类型 GoldenHeroBoss_Model.BossShare = { ShareFriend = gold_hero_experience_pb.ShareFriend, --分享至好友频道 ShareGuild = gold_hero_experience_pb.ShareGuild, --分享至军团频道 ShareWorld = gold_hero_experience_pb.ShareWorld, --分享至世界频道 } GoldenHeroBoss_Model.FinderRewardState = { StateNone = gold_hero_experience_pb.StateNone, --奖励与你无关 StateUnKill = gold_hero_experience_pb.StateUnKill, --Boss未被击杀 StateKill = gold_hero_experience_pb.StateKill, --Boss被击杀未领奖励 StateGet = gold_hero_experience_pb.StateGet, --Boss被击杀已经领取奖励 } GoldenHeroBoss_Model.BossChangePushOpt = { ChangeNone = gold_hero_experience_pb.ChangeNone, --无效推送 ChangeAdd = gold_hero_experience_pb.ChangeAdd, --新增boss推送 ChangeWorld = gold_hero_experience_pb.ChangeWorld, --世界可见boss推送 ChangeCommon = gold_hero_experience_pb.ChangeCommon, --自己可见boss推送 } GoldenHeroBoss_Model.BossShareResult = { ShareSuccess = gold_hero_experience_pb.ShareSuccess, --分享成功 ShareNoExit = gold_hero_experience_pb.ShareNoExit, --分享失败,boss不存在 ShareIsDead = gold_hero_experience_pb.ShareIsDead, --分享失败,boss已经死亡 ShareCD = gold_hero_experience_pb.ShareCD, --分享失败,分享CD中 } GoldenHeroBoss_Model.BossRankType = { SynergyBossTotalRank = 1, --累积积分排行榜 SynergyBossMaxDamageRank = 2, --单次最高伤害排行榜 } function GoldenHeroBoss_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageGoldHeroShareBoss, private.GoldHeroShareBossResp) NetManager.RegisterMsgCB(MessageEnums.MessageGoldHeroGetRankRecord, private.GoldHeroGetRankRecordResp) NetManager.RegisterMsgCB(MessageEnums.MessageGoldHeroBossSweep, private.GoldHeroBossSweepResp) NetManager.RegisterMsgCB(MessageEnums.MessageGoldHeroGetFindBossReward, private.GoldHeroGetFindBossRewardResp) NetManager.RegisterMsgCB(MessageEnums.MessageGoldHeroGetAllFindBossReward, private.GoldHeroGetAllFindBossRewardResp) NetManager.RegisterMsgCB(MessageEnums.MessageGoldHeroGetDailyReward, private.GoldHeroGetDailyRewardResp) NetManager.RegisterMsgCB(MessageEnums.MessageGoldHeroDailyBuyBoss, private.GoldHeroDailyBuyBossResp) NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushGoldHeroBossInfos, private.GoldHeroBossInfosPush) NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushGoldHeroChangeBossInfo, private.GoldHeroChangeBossInfoPush) NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushGoldHeroChangeBossRecord, private.GoldHeroChangeBossRecordPush) NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushGoldHeroDailyInfo, private.GoldHeroDailyInfoPush) private.activityInfo = {} private.recommendGs = {} private.bossMaxHp = {} private.bossShareCD = {} private.bossRankList = {} private.myBossRank = {} private.dailyReward = {} private.todayScore = {} private.participateTimes = {} private.buyBossCount = {} private.maxDamage = {} private.maxDamageBossConfigId = {} private.checkRank = false --在打开排行榜奖励检查自己排名是否为空的时候,不触发事件的派发 private.yesterdayMyRank = {} private.yesterdayMyScore = {} private.yesterdayMyTimes = {} private.yesterdayRankList = {} private.todayBossCfgIdList = {} end function GoldenHeroBoss_Model.GetAddHeroAddLevel(addHeroId) if not MDL.HeroSelect.IsHasHero(addHeroId) then return 0 end local heroBreakLevel = MDL.HeroStar.GetHeroStarLevel(addHeroId) for i, v in DataSheetManager.GoldHeroSynergyBossHero:GetDataByHeroID_LevelID(addHeroId) do if heroBreakLevel < v.HeroStar then return i - 1 end end return DataSheetManager.GoldHeroSynergyBossHero:GetDataLengthByHeroID_LevelID(addHeroId) end function GoldenHeroBoss_Model.GetDailyReward(activityId) return private.dailyReward[activityId] end function GoldenHeroBoss_Model.GetBossBuyCount(activityId) return private.buyBossCount[activityId] end function GoldenHeroBoss_Model.GetParticipateTimes(activityId) return private.participateTimes[activityId] or 0 end function GoldenHeroBoss_Model.GetTodayScore(activityId) return private.todayScore[activityId] or 0 end function GoldenHeroBoss_Model.GetMaxDamageWithBoss(activityId) return private.maxDamage[activityId] or 0, private.maxDamageBossConfigId[activityId] end function GoldenHeroBoss_Model.GetMyBossRank(activityId, rankType) if private.myBossRank[activityId] then return private.myBossRank[activityId][rankType] or 0 end return 0 end function GoldenHeroBoss_Model.GetYesterdayMyRank(activityId) return private.yesterdayMyRank[activityId] end function GoldenHeroBoss_Model.GetYesterdayMyScore(activityId) return private.yesterdayMyScore[activityId] end function GoldenHeroBoss_Model.GetYesterdayMyTimes(activityId) return private.yesterdayMyTimes[activityId] end function GoldenHeroBoss_Model.ShowSweepBtn(activityId, bossCfgId) for k,v in ipairs(private.todayBossCfgIdList[activityId]) do if bossCfgId == v then return true end end return false end function GoldenHeroBoss_Model.CalculateRewardRank(rank, sheetFunc, score, times) local isConditionEnough = true for i, v in sheetFunc:GetEnumerator() do if rank > 0 and rank <= v.Rank2 then local limitTimes = v.LimitNum local limitScore = v.LimitIntegration --次数限制 local hasTimesLimit = times and limitTimes and limitTimes > 0 if hasTimesLimit then if times < limitTimes then isConditionEnough = false end end --积分限制 local hasScoreLimit = score and limitScore and limitScore > 0 if hasScoreLimit then if score < limitScore then isConditionEnough = false end end if (not hasTimesLimit or times >= limitTimes) and (not hasScoreLimit or score >= limitScore) then return i, isConditionEnough end end end return 0, isConditionEnough end --满足排名的时候还需要满足最低积分的需求才可以领取相应的奖励 function GoldenHeroBoss_Model.GetCurrentIndexOfRewardRank(activityId, rankType) local heroType = MDL.GoldenHeroMain.GetHeroTypeByActivityId(activityId) local sheetFunc local myScore local myTimes if rankType == GoldenHeroBoss_Model.BossRankType.SynergyBossMaxDamageRank then sheetFunc = DataSheetManager.GoldHeroSynergyBossDamageRank[heroType] myScore = GoldenHeroBoss_Model.GetMaxDamageWithBoss(activityId) elseif rankType == GoldenHeroBoss_Model.BossRankType.SynergyBossTotalRank then sheetFunc = DataSheetManager.GoldHeroSynergyBossTotalRank[heroType] myScore = GoldenHeroBoss_Model.GetTodayScore(activityId) myTimes = GoldenHeroBoss_Model.GetParticipateTimes(activityId) end --排名和积分找出第一个没办法同时满足的区间的上一个index return GoldenHeroBoss_Model.CalculateRewardRank(private.myBossRank[activityId][rankType], sheetFunc, myScore, myTimes) end function GoldenHeroBoss_Model.GetBossRankList(activityId, rankType) return private.bossRankList[activityId][rankType] end function GoldenHeroBoss_Model.GetYesterdayRankList(activityId) return private.yesterdayRankList[activityId] end function GoldenHeroBoss_Model.GetBossShareCD(activityId, bossId, shareType) if private.bossShareCD[activityId] then if private.bossShareCD[activityId][bossId] then local cdTime = private.bossShareCD[activityId][bossId][shareType] if cdTime and cdTime > 0 then local deltaTime = cdTime - UTL.Time.GetServerTimestamp() if deltaTime > 0 then return deltaTime end end end end return 0 end function GoldenHeroBoss_Model.GetBossMaxHpByConfigId(activityId, bossConfigId) return private.bossMaxHp[activityId][bossConfigId] end function GoldenHeroBoss_Model.GetRecommendGs(activityId) return private.recommendGs[activityId] end function GoldenHeroBoss_Model.GetBossInfoList(activityId) if private.activityInfo[activityId] then return private.activityInfo[activityId].bossInfoList else logging.error(LTAG.ERROR, "金将体验Boss协同讨伐没有该activityId: ", activityId, " 的数据!!!") return nil end end function GoldenHeroBoss_Model.GetBossInfoByBossId(activityId, bossId) if private.activityInfo[activityId] then return private.activityInfo[activityId].bossInfoDict[bossId] else logging.error(LTAG.ERROR, "金将体验Boss协同讨伐没有该activityId: ", activityId, " 的数据!!!") end end function GoldenHeroBoss_Model.GetSortedBossRecords(activityId) if private.activityInfo[activityId] then return private.activityInfo[activityId].bossRecordList end return {} end function GoldenHeroBoss_Model.GetBossRecordById(activityId, bossId) if private.activityInfo[activityId] then return private.activityInfo[activityId].bossRecordDict[bossId] end return nil end function GoldenHeroBoss_Model.RemoveBossInfo(activityId, bossId) local info = private.activityInfo[activityId] local list = info.bossInfoList info.bossInfoDict[bossId] = nil --派发事件,删除数据(需要考虑一下前后时序,cell的移除是放在界面中自己进行还是由数据这里变更了之后再次进行事件派发驱动) --删除的时候可以优化 --打一个标志位标记,如果死亡就扔到数组最后,然后从后往前删除 for i, v in ipairs(list) do if v.bossId == bossId then table.remove(list, i) break end end CTL.GoldenHeroBoss.RemoveBossExpireTimer(activityId, bossId) end function GoldenHeroBoss_Model.SetBossRelevantInfo(goldHeroInfo) for i, v in ipairs(goldHeroInfo) do local activityId = v.activityID if MDL.GoldenHeroMain.GetHeroTypeByActivityId(activityId) then private.participateTimes[activityId] = v.playBossTimes private.buyBossCount[activityId] = v.buyBossCount end EventSystem.Dispatch(EventID.UI_GoldenHeroBoss_BuyCountRefresh) EventSystem.Dispatch(EventID.UI_GoldenHeroBoss_RefreshDailyPoint, activityId) end end function GoldenHeroBoss_Model.SetMyRankInfo(activityId, todayScore, maxDamage, maxDamageBossConfigId) private.todayScore[activityId] = todayScore if maxDamage and maxDamage > 0 then private.maxDamage[activityId] = maxDamage private.maxDamageBossConfigId[activityId] = maxDamageBossConfigId end EventSystem.Dispatch(EventID.UI_GoldenHeroBoss_RefreshDailyPoint, activityId) end function private.InitBossAllInfos(msg) local activityId = msg.activityId --推荐战力 private.recommendGs[activityId] = msg.recommendGs --boss最大血量 private.bossMaxHp[activityId] = {} local hpDict = private.bossMaxHp[activityId] for i, v in ipairs(msg.maxHp) do hpDict[v.bossCfgId] = v.maxHp end --boss信息 local info = { bossInfoList = {}, bossInfoDict = {}, bossRecordList = {}, bossRecordDict = {}, } local list = info.bossInfoList local dict = info.bossInfoDict for i, v in ipairs(msg.observeBoss) do local bossId = v.bossId dict[bossId] = v list[#list + 1] = v CTL.GoldenHeroBoss.AddBossExpireTimer(activityId, bossId, v.endTime - UTL.Time.GetServerTimestamp()) end private.todayBossCfgIdList[activityId] = {} for i, v in ipairs(msg.todayBossCfgId) do table.insert(private.todayBossCfgIdList[activityId], v) end --sort函数进行堆栈操作地址而不是其中存储的值,dict中实际指向这些地址,所以进行sort不会影响dict table.sort(list, private.SortBossInfoListByTime) local recordList = info.bossRecordList local recordDict = info.bossRecordDict for i, v in ipairs(msg.records) do recordDict[v.bossId] = v recordList[#recordList + 1] = v end table.sort(recordList, private.SortBossRecordList) private.activityInfo[activityId] = info private.dailyReward[activityId] = msg.dailyReward GoldenHeroBoss_Model.SetMyRankInfo(activityId, msg.todayScore, msg.maxScore, msg.maxBossConfigId) logging.log(LTAG.LOG, "InitGoldenHeroBossAllInfos", activityId, info) EventSystem.Dispatch(EventID.UI_GoldenHeroBoss_SetAllInfo, activityId) CTL.GoldenHeroMain.InitBossRedPointTreeByActivityId(msg.activityId) end function private.UpdateBossInfo(activityId, bossInfos) local info = private.activityInfo[activityId] if info == nil then info = { bossInfoList = {}, bossInfoDict = {}, bossRecordList = {}, bossRecordDict = {}, } private.activityInfo[activityId] = info end local list = info.bossInfoList local dict = info.bossInfoDict for i, v in ipairs(bossInfos) do local bossId = v.bossId if not dict[bossId] and v.hp > 0 then dict[bossId] = v table.insert(list, 1, v) CTL.GoldenHeroBoss.AddBossExpireTimer(activityId, bossId, v.endTime - UTL.Time.GetServerTimestamp()) if string.isNilOrEmpty(v.finder) or BattleDataGetter.GetAcID() == v.finder then CTL.GoldenHeroBoss.AddBossToNew(activityId, bossId) local view if UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UIGoldenHeroBossPurchase) then view = Const_UI_Lua.UIEnum.UIGoldenHeroBossMain else view = Const_UI_Lua.UIEnum.UIGoldenHeroStory end CTL.GoldenHeroMain.AddGoldenHeroDelayFunc(view, activityId, CTL.GoldenHeroBoss.ShowBossFindView, activityId, bossId, v.bossCfgId) end EventSystem.Dispatch(EventID.UI_GoldenHeroBoss_UpdateNewBoss, activityId, bossId) --新增boss信息 else private.UpdateSingleBossInfo(list, dict, v) if v.hp == 0 then EventSystem.Dispatch(EventID.UI_GoldenHeroBoss_UpdateDeadBoss, activityId, bossId) --boss信息修改且boss死亡 CTL.GoldenHeroBoss.RemoveBossFromNew(activityId, bossId) GoldenHeroBoss_Model.RemoveBossInfo(activityId, bossId) local tempActivityId, tempBossId = CTL.GoldenHeroBoss.LoadTempData() if tempActivityId and tempBossId then if tempBossId == bossId then CTL.GoldenHeroMain.AddGoldenHeroDelayFunc(Const_UI_Lua.UIEnum.UIGoldenHeroBossMain, activityId, CTL.GoldenHeroBoss.ShowBossFindView, activityId, bossId, v.bossCfgId, v.killName) end end else EventSystem.Dispatch(EventID.UI_GoldenHeroBoss_UpdateExistBoss, activityId, bossId) --修改现有boss信息 end end end end function private.UpdateSingleBossInfo(list, dict, bossInfo) local bossId = bossInfo.bossId if not dict[bossId] then return end if not bossInfo.highestDamage or bossInfo.highestDamage == 0 then bossInfo.highestDamage = dict[bossId].highestDamage bossInfo.highestScore = dict[bossId].highestScore end --如果是自己发现的通过世界频道分享,服务器也会再push过来并且share是世界的枚举值,但是自己发现的用不到share,所以这里优化一下不处理自己发现的boss里面的share的值 if BattleDataGetter.GetAcID() ~= bossInfo.finder then bossInfo.share = LuaBit.bor(dict[bossId].share, bossInfo.share) end --增量推送,所有项都需要检查是否为空 if not bossInfo.bossCfgId or bossInfo.bossCfgId == 0 then bossInfo.bossCfgId = dict[bossId].bossCfgId end if not bossInfo.endTime or bossInfo.endTime == 0 then bossInfo.endTime = dict[bossId].endTime end if not bossInfo.finderName or string.isNilOrEmpty(bossInfo.finderName) then bossInfo.finderName = dict[bossId].finderName end if not bossInfo.finder or string.isNilOrEmpty(bossInfo.finder) then bossInfo.finder = dict[bossId].finder end dict[bossId] = bossInfo for i, v in ipairs(list) do if v.bossId == bossId then list[i] = bossInfo break end end end function private.UpdateBossRecord(activityId, bossRecords) local records = private.activityInfo[activityId].bossRecordList for i, v in ipairs(bossRecords) do local bossId = v.bossId local isUpdate = false private.activityInfo[activityId].bossRecordDict[bossId] = v for index, value in ipairs(records) do if value.bossId == bossId then records[index] = v isUpdate = true EventSystem.Dispatch(EventID.UI_GoldenHeroBoss_UpdateBossRecord, activityId, bossId) --修改现有boss信息 break end end if not isUpdate then table.insert(records, v) table.sort(records, private.SortBossRecordList) EventSystem.Dispatch(EventID.UI_GoldenHeroBoss_AddNewBossRecord, activityId, v.finder == BattleDataGetter.GetAcID()) --新增boss信息 end end end --讨伐中的条目按剩余时间从小到大排 function private.SortBossRecordList(a, b) local nowTime = UTL.Time.GetServerTimestamp() local killTimeA = a.killTime local killTimeB = b.killTime local endTimeA = a.endTime local endTimeB = b.endTime local leftTimeA = endTimeA - nowTime local leftTimeB = endTimeB - nowTime local offsetTimeA = nowTime - (killTimeA > 0 and killTimeA or endTimeA) local offsetTimeB = nowTime - (killTimeB > 0 and killTimeB or endTimeB) local isAliveA = leftTimeA > 0 and killTimeA == 0 local isAliveB = leftTimeB > 0 and killTimeB == 0 if isAliveA and isAliveB then --都在讨伐中,剩余时间小的在前 return leftTimeA < leftTimeB elseif isAliveA then --讨伐中的在前 return true elseif isAliveB then return false else --都不在讨伐中,比较结束(击杀or过期)时间与现在近的在前 return offsetTimeA < offsetTimeB end end function private.SortBossInfoListByTime(a, b) return a.endTime > b.endTime end function GoldenHeroBoss_Model.EnterGoldenHeroBoss(activityId, bossId, bossConfigId, bossLevelId) if CTL.TeamMatch.IsCanGoOtherScene(LuaConst.LevelType.GoldHeroCooperate) then local msg = fuben_common.EnterFubenReq() msg.goldHeroInfo.activityId = activityId msg.goldHeroInfo.bossId = bossId msg.id = bossConfigId msg.mapType = LuaConst.LevelType.GoldHeroCooperate msg.mapID = bossLevelId NetManager.SendMessage(MessageEnums.MessageEnterFuben, msg) CTL.GoldenHeroBoss.SaveTempData(activityId, bossId) CTL.GoldenHeroMain.SetIsOpenedActivity() end end ---shareType是BossShare枚举 ---shareTarget如果分享给好友需要好友的acid,分享到频道则不用填 function GoldenHeroBoss_Model.GoldHeroShareBossReq(activityId, bossId, shareType, shareTarget) logging.log(LTAG.LOG, "GoldHeroShareBossReq", activityId, bossId, shareType, shareTarget) local msg = gold_experience_opt_pb.GoldHeroShareBossReq() msg.activityId = activityId msg.bossId = bossId msg.shareType = shareType if shareTarget then msg.shareTarget = shareTarget end NetManager.SendMessage(MessageEnums.MessageGoldHeroShareBoss, msg) end function private.GoldHeroShareBossResp(msgResp) logging.log(LTAG.LOG, "GoldHeroShareBossResp", msgResp.shareType, msgResp.bossId) if msgResp.Resp.Code == 0 then if msgResp.shareType ~= GoldenHeroBoss_Model.BossShare.ShareFriend then local activityId = msgResp.activityId if not private.bossShareCD[activityId] then private.bossShareCD[activityId] = {} end local bossId = msgResp.bossId if not private.bossShareCD[activityId][bossId] then private.bossShareCD[activityId][bossId] = {} end private.bossShareCD[activityId][bossId][msgResp.shareType] = msgResp.shareCD EventSystem.Dispatch(EventID.UI_GoldenHeroBoss_UpdateSupportCD, activityId, bossId) end CTL.Tips.AddTipsMsg(Const_IDS.IDS_GoldHeroActivity_SynergyBoss_Help_Hint13) end end function GoldenHeroBoss_Model.CheckBossRank(activityId, rankType) private.checkRank = true GoldenHeroBoss_Model.GoldHeroGetRankRecordReq(activityId, rankType) end function GoldenHeroBoss_Model.GoldHeroGetRankRecordReq(activityId, rankType, isYesterday) local msg = gold_experience_opt_pb.GoldHeroGetRankRecordReq() msg.activityId = activityId msg.rankType = rankType msg.preRank = isYesterday or false NetManager.SendMessage(MessageEnums.MessageGoldHeroGetRankRecord, msg) end function private.GoldHeroGetRankRecordResp(msgResp) if msgResp.Resp.Code == 0 then local activityId = msgResp.activityId local rankType = msgResp.rankType if msgResp.preRank then local yesterdayMyRank = msgResp.records.myRank private.yesterdayMyRank[activityId] = yesterdayMyRank private.yesterdayRankList[activityId] = msgResp.records.rankRecords if yesterdayMyRank > 0 then private.yesterdayMyScore[activityId] = private.yesterdayRankList[activityId][yesterdayMyRank].showParam private.yesterdayMyTimes[activityId] = private.yesterdayRankList[activityId][yesterdayMyRank].times else private.yesterdayMyScore[activityId] = "--" private.yesterdayMyTimes[activityId] = 0 end else if not private.bossRankList[activityId] then private.bossRankList[activityId] = {} end private.bossRankList[activityId][rankType] = msgResp.records.rankRecords if not private.myBossRank[activityId] then private.myBossRank[activityId] = {} end private.myBossRank[activityId][rankType] = msgResp.records.myRank end if not private.checkRank then EventSystem.Dispatch(EventID.UI_GoldenHeroBoss_RefreshRankData, rankType) else private.checkRank = false end end end function GoldenHeroBoss_Model.GoldHeroBossSweepReq(activityId, bossId) MDL.Reward.SetCloseRewardTipShow(true) local msg = gold_experience_opt_pb.GoldHeroBossSweepReq() msg.activityId = activityId msg.bossId = bossId NetManager.SendMessage(MessageEnums.MessageGoldHeroBossSweep, msg) --CTL.GoldenHeroBoss.SaveTempData(activityId, bossId) end function private.GoldHeroBossSweepResp(msgResp) if msgResp.Resp.Code == 0 then local info = msgResp.goldHeroInfo local activityId = info.activityId GoldenHeroBoss_Model.SetMyRankInfo(activityId, info.todayScore, info.maxScore, info.maxBossCfgId) UIManager.OpenView(Const_UI_Lua.UIEnum.UIGoldenHeroBossSweepSuccess, {activityId = info.activityId, sweepResult = info}) end MDL.Reward.SetCloseRewardTipShow(false) end function GoldenHeroBoss_Model.GoldHeroGetFindBossRewardReq(activityId, bossId) local msg = gold_experience_opt_pb.GoldHeroGetFindBossRewardReq() msg.activityId = activityId msg.bossId = bossId NetManager.SendMessage(MessageEnums.MessageGoldHeroGetFindBossReward, msg) end function private.GoldHeroGetFindBossRewardResp(msgResp) if msgResp.Resp.Code == 0 then local activityId = msgResp.activityId local scoreReward = msgResp.score - private.todayScore[activityId] private.todayScore[activityId] = msgResp.score EventSystem.Dispatch(EventID.UI_GoldenHeroBoss_RefreshDailyPoint, activityId) UIManager.OpenView(Const_UI_Lua.UIEnum.UIGoldenHeroBossRewardClaim, {activityId = activityId, findPointReward = scoreReward}) end end function GoldenHeroBoss_Model.GoldHeroGetAllFindBossRewardReq(activityId) local msg = gold_experience_opt_pb.GoldHeroGetAllFindBossRewardReq() msg.activityId = activityId NetManager.SendMessage(MessageEnums.MessageGoldHeroGetAllFindBossReward, msg) end function private.GoldHeroGetAllFindBossRewardResp(msgResp) if msgResp.Resp.Code == 0 then local activityId = msgResp.activityId local scoreReward = msgResp.score - private.todayScore[activityId] private.todayScore[activityId] = msgResp.score EventSystem.Dispatch(EventID.UI_GoldenHeroBoss_RefreshDailyPoint, activityId) UIManager.OpenView(Const_UI_Lua.UIEnum.UIGoldenHeroBossRewardClaim, {activityId = activityId, findPointReward = scoreReward}) end end function GoldenHeroBoss_Model.GoldHeroGetDailyRewardReq(activityId, rewardId) local msg = gold_experience_opt_pb.GoldHeroGetDailyRewardReq() msg.activityId = activityId msg.rewardId = rewardId NetManager.SendMessage(MessageEnums.MessageGoldHeroGetDailyReward, msg) end function private.GoldHeroGetDailyRewardResp(msgResp) if msgResp.Resp.Code == 0 then local activityId = msgResp.activityId private.dailyReward[activityId] = LuaBit.bor(2 ^ (msgResp.rewardId - 1), private.dailyReward[activityId]) EventSystem.Dispatch(EventID.UI_GoldenHeroBoss_RefreshDailyReward, activityId, msgResp.rewardId) end end function GoldenHeroBoss_Model.GoldHeroDailyBuyBossReq(activityId, buyCount) local msg = gold_experience_opt_pb.GoldHeroDailyBuyBossReq() msg.activityId = activityId msg.buyCount = buyCount NetManager.SendMessage(MessageEnums.MessageGoldHeroDailyBuyBoss, msg) end function private.GoldHeroDailyBuyBossResp(msgResp) if msgResp.Resp.Code == 0 then private.buyBossCount[msgResp.activityId] = msgResp.buyCount EventSystem.Dispatch(EventID.UI_GoldenHeroBoss_BuyCountRefresh) end end --enterWorld全量推送 function private.GoldHeroBossInfosPush(msg) logging.log(LTAG.LOG, "GoldHeroBossInfosPush", msg.activityId, msg) private.InitBossAllInfos(msg) end --boss信息更量推送 function private.GoldHeroChangeBossInfoPush(msg) logging.log(LTAG.LOG, "GoldHeroChangeBossInfoPush", msg.activityId, msg.opt, msg.bossInfos) private.UpdateBossInfo(msg.activityId, msg.bossInfos) end --boss信息详情更量推送 function private.GoldHeroChangeBossRecordPush(msg) logging.log(LTAG.LOG, "GoldHeroChangeBossRecordPush", msg.activityId, msg.records) private.UpdateBossRecord(msg.activityId, msg.records) end --金将体验每日刷新推送 function private.GoldHeroDailyInfoPush(msg) logging.log(LTAG.LOG, "GoldHeroDailyInfoPush", msg.activityId, msg.todayScore, msg.dailyReward) local activityId = msg.activityId private.todayScore[activityId] = msg.todayScore private.dailyReward[activityId] = msg.dailyReward private.todayBossCfgIdList[activityId] = {} for i, v in ipairs(msg.todayBossCfgId) do table.insert(private.todayBossCfgIdList[activityId], v) end EventSystem.Dispatch(EventID.UI_GoldenHeroBoss_RefreshDailyPoint, activityId) end return GoldenHeroBoss_Model