PGRData/Script/matrix/xmanager/XGuildBossManager.lua

975 lines
33 KiB
Lua
Raw Normal View History

XGuildBossManagerCreator = function()
local XGuildBossManager = {}
--保存boss血量活动时间总分等相关信息
local GuildBossInfoData = {}
--保存关卡信息
local GuildBossLevelData = {}
--保存排行榜相关信息
--local GuildBossRankData = {}
--boss死后所增加的分数
local GuildBossDeathAddScore = CS.XGame.Config:GetInt("GuildBossDeathAddScore")
local GuildBossStageAddBuffPoint = CS.XGame.Config:GetInt("GuildBossStageAddBuffPoint")--激活安稳度所需要的次数
--关卡数量不包含boss
local GuildBossStageCount = 7
--是否需要刷新选关页面数据
local NeedUpdateStageInfo = false
--本次战斗消减boss血量
local CurFightBossHp = 0
--本次战斗获得贡献值
local CurFightContribute = 0
--是否有Boss血量宝箱可以领
local HasBossHpReward = false
--是否有积分宝箱可以领
local HasScoreReward = false
--是否是从工会页面进入用于判断是否要在本地记录boss血量
local IsFirstEnter = false
--当前所选关卡的类型,用于选人页面保存不同的队伍
local CurSelectStageType = nil
--周长任务刷新时间
local GuildBossWeeklyTaskTime = nil
local GuildBossNewRewardTime = CS.XGame.Config:GetInt("GuildBossNewRewardDate") --新奖励切换显示时间
--公会boss血量降为0
local IsBossDead = nil
local BossDeadEndTime = nil -- 记录hp状态需要用活动结束时间一并记录防止第二次boss被击败不弹出提示
local NeedShowBossDeadTip = false
local KilledBossLv = 0
local IsRegisterEditBattleProxy = false
local GuildBossRpc = {
GuildBossInfoRequest = "GuildBossInfoRequest", --公会boss主界面信息请求
GuildBossPlayerRankRequest = "GuildBossPlayerRankRequest", --公会boss成员排行
GuildBossGuildRankRequest = "GuildBossGuildRankRequest", --公会boss全服排行
GuildBossActivityRequest = "GuildBossActivityRequest", --活动挑战情况
GuildBossStageRequest = "GuildBossStageRequest", --请求单个关卡的挑战情况
GuildBossPlayerStageRankRequest = "GuildBossPlayerStageRankRequest", --请求单个关卡的排行榜
GuildBossScoreBoxRequest = "GuildBossScoreBoxRequest", --领取积分奖励宝箱
GuildBossHpBoxRequest = "GuildBossHpBoxRequest", --领取boss血量奖励
GuildBossLevelRequest = "GuildBossLevelRequest", --设置下期的boss难度等级
GuildBossSetOrderRequest = "GuildBossSetOrderRequest", --设置公会boss的战术指挥
GuildBossUploadRequest = "GuildBossUploadRequest", --战斗结束确认上传分数
}
local LastSyncGuildRankListTime = 0 --工会总分排行榜List最后刷新时间
local LastSyncRankListTime = 0 --内部排行榜List最后刷新时间
local LastSyncStageInfoTime = 0 --关卡详细信息最后刷新时间
local SYNC_RANK_LIST_SECOND = 60 --获取排行榜List请求保护时间
---- local function begin -----
local function RegisterEditBattleProxy()
if IsRegisterEditBattleProxy then return end
IsRegisterEditBattleProxy = true
XUiNewRoomSingleProxy.RegisterProxy(XDataCenter.FubenManager.StageType.GuildBoss,
require("XUi/XUiGuildBoss/XUiGuildBossNewRoomSingle"))
end
local function Init()
-- 初始化hp的持久化记录
local hpStr = CS.UnityEngine.PlayerPrefs.GetString(XGuildBossManager.GetBossDeadTipKey(), "")
if hpStr ~= "" then
local strs = string.Split(hpStr, "|")
local endTime = tonumber(strs[1]) or -1
local oldHp = tonumber(strs[2]) or -1
if oldHp ~= -1 then
IsBossDead = (oldHp <= 0)
if IsBossDead and endTime ~= -1 then
BossDeadEndTime = tonumber(endTime)
end
end
end
RegisterEditBattleProxy()
end
---- local function end -----
--Get Begin
--获取boss血量上限
function XGuildBossManager.GetMaxBossHp()
return GuildBossInfoData.HpMax
end
--获取boss当前血量
function XGuildBossManager.GetCurBossHp()
return GuildBossInfoData.HpLeft
end
--获取挑战记录
function XGuildBossManager.GetLogs()
return GuildBossInfoData.Logs
end
--获取剩余时间
function XGuildBossManager.GetEndTime()
return GuildBossInfoData.EndTime
end
--获取工会总分数
function XGuildBossManager.GetTotalScore()
return GuildBossInfoData.TotalScore
end
--获取关卡信息
function XGuildBossManager.GetLevelData()
return GuildBossLevelData
end
--获取关卡信息
function XGuildBossManager.GetLevelDataByStageId(stageId)
for i = 1, #GuildBossLevelData do
if GuildBossLevelData[i].StageId == stageId then
return GuildBossLevelData[i]
end
end
return nil
end
--获取历史最高工会总分
function XGuildBossManager.GetScoreSumBest()
return GuildBossInfoData.ScoreSumBest
end
--获取当前工会boss等级
function XGuildBossManager.GetCurBossLevel()
return GuildBossInfoData.BossLevel
end
--获取下期工会boss等级
function XGuildBossManager.GetNextBossLevel()
return GuildBossInfoData.BossLevelNext
end
--获取低浓度区的关卡信息
function XGuildBossManager.GetLowLevelInfo()
for i = 1, #GuildBossLevelData do
if GuildBossLevelData[i].Type == GuildBossLevelType.Low and GuildBossLevelData[i].Score > 0 then
return GuildBossLevelData[i]
end
end
return nil
end
--获取高浓度区的关卡信息
function XGuildBossManager.GetHighLevelInfo()
for i = 1, #GuildBossLevelData do
if GuildBossLevelData[i].Type == GuildBossLevelType.High and GuildBossLevelData[i].Score > 0 then
return GuildBossLevelData[i]
end
end
return nil
end
--获取boss关卡信息
function XGuildBossManager.GetBossLevelInfo()
for i = 1, #GuildBossLevelData do
if GuildBossLevelData[i].Type == GuildBossLevelType.Boss then
return GuildBossLevelData[i]
end
end
end
--获取本期低浓度区分
function XGuildBossManager.GetLowScore()
for i = 1, #GuildBossLevelData do
if GuildBossLevelData[i].Type == GuildBossLevelType.Low and GuildBossLevelData[i].Score > 0 then
return GuildBossLevelData[i].Score
end
end
return 0
end
--获取本期高浓度区分
function XGuildBossManager.GetHighScore()
for i = 1, #GuildBossLevelData do
if GuildBossLevelData[i].Type == GuildBossLevelType.High and GuildBossLevelData[i].Score > 0 then
return GuildBossLevelData[i].Score
end
end
return 0
end
--获取本期boss分
function XGuildBossManager.GetBossScore()
for i = 1, #GuildBossLevelData do
if GuildBossLevelData[i].Type == GuildBossLevelType.Boss and GuildBossLevelData[i].Score > 0 then
return GuildBossLevelData[i].Score
end
end
return 0
end
--获取本期我的总分
function XGuildBossManager.GetMyTotalScore()
local sumScore = 0
for i = 1, #GuildBossLevelData do
sumScore = sumScore + GuildBossLevelData[i].Score
end
if GuildBossInfoData.HpLeft == 0 and sumScore > 0 then
sumScore = sumScore + GuildBossDeathAddScore
end
return sumScore
end
--获取斩杀boss的额外分数
function XGuildBossManager.GetAdditionalScore()
return GuildBossDeathAddScore
end
--获取满安稳值所需挑战次数
function XGuildBossManager.GuildBossStageAddBuffPoint()
return GuildBossStageAddBuffPoint
end
--获取已领取的积分宝箱id
function XGuildBossManager.GetScoreBoxGot()
return GuildBossInfoData.ScoreBoxGot
end
--获取已领取的血量奖励id
function XGuildBossManager.GetHpBoxGot()
return GuildBossInfoData.HpBoxGot
end
--获取当前关卡的战术布局顺序
--function XGuildBossManager.GetOrderString()
-- local orderString = ""
-- for i = 1, GuildBossStageCount do
-- orderString = orderString .. tostring(GuildBossLevelData[i].Order)
-- end
-- return orderString
--end
--获取关卡在数据中的位置
function XGuildBossManager.GetStageDataPos(data)
for i = 1, GuildBossStageCount do
if GuildBossLevelData[i].StageId == data.StageId then
return i
end
end
return -1
end
function XGuildBossManager.GetStageCount()
return GuildBossStageCount
end
--得到某一关限制使用的robotID
function XGuildBossManager.GetStageRobotTab(stageId)
for i = 1, #GuildBossLevelData do
if GuildBossLevelData[i].StageId == stageId then
for j = 1, #GuildBossInfoData.RobotList do
if GuildBossInfoData.RobotList[j].Type == GuildBossLevelData[i].Type then
return GuildBossInfoData.RobotList[j].RobotIds
end
end
end
end
return nil
end
--获取工会前五
--function XGuildBossManager.GetGuildBossTopFive()
-- return GuildBossInfoData.TopFive
--end
--获取我的排名信息
function XGuildBossManager.GetMyRankData()
return GuildBossInfoData.MyRank
end
--获取我的排名名次信息
function XGuildBossManager.GetMyRankNum()
return GuildBossInfoData.MyRankNum
end
--获取工会的排名信息
function XGuildBossManager.GetMyGuildRankData()
return GuildBossInfoData.MyGuildRankData
end
--获取工会的排名名次信息
function XGuildBossManager.GetMyGuildRankNum()
return GuildBossInfoData.MyGuildRankNum
end
--获取工会排名
function XGuildBossManager.GetAllGuildRankList()
return GuildBossInfoData.AllGuildRankList
end
--获取工会内排名
function XGuildBossManager.GetAllRankList()
return GuildBossInfoData.AllRankList
end
--点击关卡的时候获取该关卡的详细信息
function XGuildBossManager.GetDetailLevelData(stageId)
return GuildBossInfoData.DetailLevelData[stageId]
end
--获取某关卡的排行榜
function XGuildBossManager.GetDetailLevelRankData(stageId)
return GuildBossInfoData.DetailLevelRankData[stageId]
end
--获取log版本号
function XGuildBossManager.GetLogId()
local logId = 0
if GuildBossInfoData.Logs ~= nil then
for i = 1, #GuildBossInfoData.Logs do
if GuildBossInfoData.Logs[i].LogId > logId then
logId = GuildBossInfoData.Logs[i].LogId
end
end
end
return logId
end
--本次战斗消减boss血量
function XGuildBossManager.GetCurFightBossHp()
return CurFightBossHp
end
--本次战斗贡献值
function XGuildBossManager.GetCurFightContribute()
return CurFightContribute
end
--获取活动版本号
function XGuildBossManager.GetActivityId()
return GuildBossInfoData.ActivityId
end
--获取当前所选关卡类型
function XGuildBossManager.GetCurSelectStageType()
return CurSelectStageType
end
--获取周长任务刷新时间
function XGuildBossManager.GetWeeklyTaskTime()
return GuildBossWeeklyTaskTime
end
--Get End
--Set Begin
--设置优先顺序(GuildBossLevelData.Order) orderData = "1234123"
--function XGuildBossManager.SetOrderData(orderData)
-- --检查合法性
-- if orderData == nil or string.len(orderData) ~= GuildBossStageCount then
-- for i = 1, GuildBossStageCount do
-- GuildBossLevelData[i].Order = 0
-- end
-- return
-- end
-- for i = 1, GuildBossStageCount do
-- GuildBossLevelData[i].Order = tonumber(orderData[i])
-- end
--end
--是否需要刷新
function XGuildBossManager.SetNeedUpdateStageInfo(isNeed)
NeedUpdateStageInfo = isNeed
end
--本次战斗消减boss血量
function XGuildBossManager.SetCurFightBossHp(hp)
CurFightBossHp = hp
end
--设置是否有Boss血量宝箱可以领
function XGuildBossManager.SetBossHpReward(val)
HasBossHpReward = val
end
--设置是否有积分宝箱可以领
function XGuildBossManager.SetScoreReward(val)
HasScoreReward = val
end
--设置是否是从工会页面进入
function XGuildBossManager.SetFirstEnterMark(val)
IsFirstEnter = val
end
--设置当前所选关卡类型
function XGuildBossManager.SetCurSelectStageType(type)
CurSelectStageType = type
end
--设置周长任务刷新时间
function XGuildBossManager.SetGuildBossWeeklyTaskTime(time)
GuildBossWeeklyTaskTime = time
end
--Set End
--other
function XGuildBossManager.GetHpRewardId(id)
local hpRewardData = XGuildBossConfig.HpRewards()
local now = XTime.GetServerNowTimestamp()
return now > GuildBossNewRewardTime and hpRewardData[id].NewRewardId or hpRewardData[id].RewardId
end
function XGuildBossManager.GetScoreRewardId(id)
local rewardData = XGuildBossConfig.ScoreRewards()
local now = XTime.GetServerNowTimestamp()
return now > GuildBossNewRewardTime and rewardData[id].NewRewardId or rewardData[id].RewardId
end
--更新是否有奖励可领
function XGuildBossManager.UpdateReward()
--bossHp宝箱
local hpRewardData = XGuildBossConfig.HpRewards()
local curBossHpPercent = GuildBossInfoData.HpLeft / GuildBossInfoData.HpMax * 100
if GuildBossInfoData.HpBoxGot >= #hpRewardData then
HasBossHpReward = false
else
if curBossHpPercent <= hpRewardData[GuildBossInfoData.HpBoxGot + 1].HpPercent then
HasBossHpReward = true
else
HasBossHpReward = false
end
end
--积分宝箱
HasScoreReward = false
local myTotalScore = XGuildBossManager.GetMyTotalScore()
local scoreBoxGot = GuildBossInfoData.ScoreBoxGot
local rewardData = XGuildBossConfig.ScoreRewards()
for i = 1, #rewardData do
local isGet = false
for _,val in pairs(scoreBoxGot) do
if val == rewardData[i].Id then
isGet = true
break
end
end
if myTotalScore >= rewardData[i].Score and not isGet then
HasScoreReward = true
end
end
XEventManager.DispatchEvent(XEventId.EVENT_GUILDBOSS_HPBOX_CHANGED)
XEventManager.DispatchEvent(XEventId.EVENT_GUILDBOSS_SCOREBOX_CHANGED)
end
--如果被踢了或者其他需要清除缓存日志的情况
function XGuildBossManager.ClearLog()
GuildBossInfoData.Logs = nil
end
--如果被踢了或者其他需要清除奖励信息
function XGuildBossManager.ClearReward()
HasBossHpReward = false
HasScoreReward = false
XEventManager.DispatchEvent(XEventId.EVENT_GUILDBOSS_HPBOX_CHANGED)
XEventManager.DispatchEvent(XEventId.EVENT_GUILDBOSS_SCOREBOX_CHANGED)
end
function XGuildBossManager.UpdateLog(newActivityId, logs)
--log
if GuildBossInfoData.ActivityId then
if GuildBossInfoData.ActivityId ~= newActivityId then
GuildBossInfoData.Logs = logs
else
if logs then
if GuildBossInfoData.Logs == nil then
GuildBossInfoData.Logs = logs
else
for i = 1, #logs do
table.insert(GuildBossInfoData.Logs, logs[i])
end
end
end
end
else
GuildBossInfoData.Logs = logs
end
end
--是否需要刷新
function XGuildBossManager.IsNeedUpdateStageInfo()
return NeedUpdateStageInfo
end
--是否有奖励可以领
function XGuildBossManager.IsReward()
return HasBossHpReward or HasScoreReward
end
--是否有Boss血量宝箱可以领
function XGuildBossManager.IsBossHpReward()
return HasBossHpReward
end
--是否有积分宝箱可以领
function XGuildBossManager.IsScoreReward()
return HasScoreReward
end
--本地记录当前BossHp用于显示不在期间其他人造成的伤害
function XGuildBossManager.LocalBossHpLog()
local curHp = GuildBossInfoData.HpLeft
local curActivity = GuildBossInfoData.ActivityId
local logHp = XSaveTool.GetData("GuildBossHp" .. XPlayer.Id)
local logActivity = XSaveTool.GetData("GuildBossActivity" .. XPlayer.Id)
if logHp and logActivity and logActivity == curActivity and tonumber(logHp) > curHp and IsFirstEnter then
XUiManager.TipMsg(CS.XTextManager.GetText("GuildBossHpNote", tonumber(logHp) - curHp))
else
IsFirstEnter = false
end
XSaveTool.SaveData("GuildBossHp" .. XPlayer.Id, curHp)
XSaveTool.SaveData("GuildBossActivity" .. XPlayer.Id, curActivity)
end
function XGuildBossManager.ParseRankName(rank)
if rank >= 1 then
return (math.modf(rank))
elseif rank == 0 then
return ""
else
local rankNum = math.modf(rank * 100)
return rankNum .. "%"
end
return ""
end
--other end
--boss hp tip
function XGuildBossManager.GetBossDeadTipKey()
return "BossDeadTip" .. XPlayer.Id
end
function XGuildBossManager.UpdateGuildBossHp(hp, bossLv)
if NeedShowBossDeadTip then
return
end
local isDead = (hp <= 0)
if IsBossDead == isDead then
return
end
local endTime = XDataCenter.GuildManager.GuildBossEndTime()
if not endTime then
XLog.Error("初始化[boss被击败]的本地信息失败 endTime = nil, 需确保NotifyGuildData下发时间早于该接口调用")
return
end
if endTime == BossDeadEndTime then
return
end
IsBossDead = isDead
if isDead then
BossDeadEndTime = endTime
KilledBossLv = bossLv
else
BossDeadEndTime = false
end
local saveStr = endTime .. "|" .. (isDead and "0" or "1")
CS.UnityEngine.PlayerPrefs.SetString(XGuildBossManager.GetBossDeadTipKey(), saveStr)
if isDead and not XLuaUiManager.IsUiShow("UiGuildBossStage") and not XLuaUiManager.IsUiShow("UiGuildBossHall") then
NeedShowBossDeadTip = true
-- XGuildBossManager.CheckShowTip()
end
end
function XGuildBossManager.CheckShowTip()
if not NeedShowBossDeadTip then
return false
end
if CS.XFight.IsRunning then
return false
end
NeedShowBossDeadTip = false
XLuaUiManager.Open("UiGuildBossTip")
return true
end
function XGuildBossManager.GetKilledBossLv()
return KilledBossLv or "??"
end
--boss hp tip end
-- [初始化数据]
function XGuildBossManager.InitStageInfo()
local stages = XGuildBossConfig.GetBossStageInfos()
for _, v in pairs(stages) do
local stageInfo = XDataCenter.FubenManager.GetStageInfo(v.Id)
if stageInfo then
stageInfo.Type = XDataCenter.FubenManager.StageType.GuildBoss
end
end
end
function XGuildBossManager.PreFight(stage, teamId)
local preFight = {}
local curTeam = XDataCenter.TeamManager.GetPlayerTeamData(teamId)
preFight.CardIds = {}
preFight.StageId = stage.StageId
preFight.CaptainPos = curTeam.CaptainPos
preFight.FirstFightPos = curTeam.FirstFightPos
preFight.RobotIds = {}
for _, v in pairs(curTeam.TeamData or {}) do
if not XRobotManager.CheckIsRobotId(v) then
table.insert(preFight.CardIds, v)
table.insert(preFight.RobotIds, 0)
else
table.insert(preFight.CardIds, 0)
table.insert(preFight.RobotIds, v)
end
end
return preFight
end
--Fight
function XGuildBossManager.FinishFight(settle)
if settle.IsWin then
XLuaUiManager.Open("UiGuildBossFightResult", settle)
else
XLuaUiManager.Open("UiSettleLose", settle)
end
end
--Fight End
--Request Begin
--公会boss主界面信息请求
function XGuildBossManager.GuildBossInfoRequest(cb)
XNetwork.Call(GuildBossRpc.GuildBossInfoRequest, {LogId = XGuildBossManager.GetLogId()}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
XGuildBossManager.UpdateLog(res.ActivityId, res.Logs)
GuildBossInfoData.ActivityId = res.ActivityId
GuildBossInfoData.HpMax = res.HpMax
GuildBossInfoData.HpLeft = res.HpLeft
XGuildBossManager.LocalBossHpLog()
GuildBossInfoData.EndTime = res.EndTime
XDataCenter.GuildManager.SetGuildBossEndTime(res.EndTime) --更新入口处的倒计时
GuildBossInfoData.MyRank = res.MyRank
GuildBossInfoData.MyRankNum = res.MyRankNum
--GuildBossInfoData.TopFive = res.TopFive
GuildBossInfoData.TotalScore = res.TotalScore
if GuildBossInfoData.MyRank.RankLevel == 0 then
GuildBossInfoData.MyRank.Name = XPlayer.Name
GuildBossInfoData.MyRank.Id = XPlayer.Id
GuildBossInfoData.MyRank.RankLevel = XDataCenter.GuildManager.GetCurRankLevel()
GuildBossInfoData.MyRank.HeadPortraitId = XPlayer.CurrHeadPortraitId
GuildBossInfoData.MyRank.HeadFrameId = XPlayer.CurrHeadFrameId
end
if cb then
cb()
end
NeedShowBossDeadTip = false
end)
end
function XGuildBossManager.ReqOpenGuildBossHall()
XDataCenter.GuildBossManager.GuildBossInfoRequest(function() XLuaUiManager.Open("UiGuildBossHall") end)
end
-- 打开工会boss之前先请求服务端 不能直接通过UiManager打开
function XGuildBossManager.OpenGuildBossHall()
if not XDataCenter.GuildManager.IsInitGuildData() then
XDataCenter.GuildManager.GetGuildDetails(0, XGuildBossManager.ReqOpenGuildBossHall)
else
XGuildBossManager.ReqOpenGuildBossHall()
end
end
--Test Debug
function XGuildBossManager.GuildBossTestDamageRequest(stageId, score)
XNetwork.Call("GuildBossTestDamageRequest", {ActivityId = GuildBossInfoData.ActivityId, StageId = stageId, Score = score, CardIds = {1,2,3}}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
if cb then
cb()
end
end)
end
--Test End
function XGuildBossManager.GuildBossActivityRequest(cb, isForce)
-- 请求间隔保护
if not isForce then
local now = XTime.GetServerNowTimestamp()
if LastSyncStageInfoTime + SYNC_RANK_LIST_SECOND >= now then
if cb then
cb()
end
return
end
LastSyncStageInfoTime = now
end
XNetwork.Call(GuildBossRpc.GuildBossActivityRequest, {}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
GuildBossInfoData.ActivityId = res.ActivityId
GuildBossInfoData.ScoreSumBest = res.GuildScoreSumBest
GuildBossInfoData.HpMax = res.HpMax
GuildBossInfoData.HpLeft = res.HpLeft
XGuildBossManager.LocalBossHpLog()
GuildBossInfoData.TotalScore = res.GuildScoreSum
GuildBossInfoData.BossLevel = res.BossLevel
GuildBossInfoData.BossLevelNext = res.BossLevelNext
GuildBossInfoData.ScoreBoxGot = res.ScoreBoxGot
GuildBossInfoData.HpBoxGot = res.HpBoxGot --已领取的血量奖励id
GuildBossInfoData.RobotList = res.RobotList --每类关卡限制的robotId
GuildBossLevelData = res.BossList
for i = 1, #GuildBossLevelData do
if string.len(res.Order) < GuildBossStageCount then
GuildBossLevelData[i].Order = 0
else
GuildBossLevelData[i].Order = tonumber(string.sub(res.Order, i, i))
end
if GuildBossLevelData[i].Type == GuildBossLevelType.High then
GuildBossLevelData[i].NameOrder = i - 4
else
GuildBossLevelData[i].NameOrder = i
end
end
XGuildBossManager.UpdateReward()
if cb then
cb()
end
NeedShowBossDeadTip = false
end)
end
function XGuildBossManager.GuildBossLevelRequest(level, cb)
XNetwork.Call(GuildBossRpc.GuildBossLevelRequest, {BossLevelNext = level, ActivityId = GuildBossInfoData.ActivityId}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
GuildBossInfoData.BossLevelNext = level
XEventManager.DispatchEvent(XEventId.EVENT_GUILDBOSS_UPDATEDIFF)
if cb then
cb()
end
end)
end
function XGuildBossManager.GuildBossScoreBoxRequest(id, cb)
XNetwork.Call(GuildBossRpc.GuildBossScoreBoxRequest, {BoxId = id}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
XUiManager.OpenUiObtain(res.RewardGoods)
table.insert(GuildBossInfoData.ScoreBoxGot, id)
XGuildBossManager.UpdateReward()
if cb then
cb()
end
end)
end
function XGuildBossManager.GuildBossHpBoxRequest(id, cb)
XNetwork.Call(GuildBossRpc.GuildBossHpBoxRequest, {BoxId = id}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
XUiManager.OpenUiObtain(res.RewardGoods)
GuildBossInfoData.HpBoxGot = id
XGuildBossManager.UpdateReward()
if cb then
cb()
end
end)
end
function XGuildBossManager.GuildBossSetOrderRequest(data, cb)
XNetwork.Call(GuildBossRpc.GuildBossSetOrderRequest, {Order = data, ActivityId = GuildBossInfoData.ActivityId}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
for i = 1, #GuildBossLevelData do
GuildBossLevelData[i].Order = tonumber(string.sub(data, i, i))
if GuildBossLevelData[i].Type == GuildBossLevelType.High then
GuildBossLevelData[i].NameOrder = i - 4
else
GuildBossLevelData[i].NameOrder = i
end
end
XEventManager.DispatchEvent(XEventId.EVENT_GUILDBOSS_UPDATEORDER)
if cb then
cb()
end
end)
end
function XGuildBossManager.GuildBossUploadRequest(stageId, cb)
XNetwork.Call(GuildBossRpc.GuildBossUploadRequest, {StageId = stageId}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
CurFightBossHp = res.SubHp
CurFightContribute = res.Contribute
if cb then
cb()
end
end)
end
function XGuildBossManager.GuildBossGuildRankRequest(cb)
-- 请求间隔保护
local now = XTime.GetServerNowTimestamp()
if LastSyncGuildRankListTime + SYNC_RANK_LIST_SECOND >= now then
if cb then
cb()
end
return false
end
LastSyncGuildRankListTime = now
XNetwork.Call(GuildBossRpc.GuildBossGuildRankRequest, {}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
GuildBossInfoData.AllGuildRankList = res.RankList
GuildBossInfoData.MyGuildRankData = res.MyRank
GuildBossInfoData.MyGuildRankNum = res.MyRankNum
if cb then
cb()
end
end)
return true
end
function XGuildBossManager.GuildBossPlayerRankRequest(cb, immediate)
-- 请求间隔保护
local now = XTime.GetServerNowTimestamp()
if not immediate and LastSyncRankListTime + SYNC_RANK_LIST_SECOND >= now then
if cb then
cb()
end
return
end
LastSyncRankListTime = now
XNetwork.Call(GuildBossRpc.GuildBossPlayerRankRequest, {}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
GuildBossInfoData.AllRankList = res.RankList
if cb then
cb()
end
end)
end
function XGuildBossManager.GuildBossStageRequest(stageId, cb)
XNetwork.Call(GuildBossRpc.GuildBossStageRequest, {StageId = stageId , LogId = XGuildBossManager.GetLogId()}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
XGuildBossManager.UpdateLog(GuildBossInfoData.ActivityId, res.Logs)
if GuildBossInfoData.DetailLevelData == nil then
GuildBossInfoData.DetailLevelData = {}
end
GuildBossInfoData.DetailLevelData[stageId] = res
if cb then
cb()
end
end)
end
function XGuildBossManager.GuildBossPlayerStageRankRequest(stageId, cb)
XNetwork.Call(GuildBossRpc.GuildBossPlayerStageRankRequest, {StageId = stageId}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
if GuildBossInfoData.DetailLevelRankData == nil then
GuildBossInfoData.DetailLevelRankData = {}
end
GuildBossInfoData.DetailLevelRankData[stageId] = res.RankList
if cb then
cb()
end
end)
end
--Request End
function XGuildBossManager.GetXTeamByStageId(stageId)
local typeId
local type = XDataCenter.GuildBossManager.GetCurSelectStageType()
if type == GuildBossLevelType.Low then
typeId = CS.XGame.Config:GetInt("TypeIdGuildBossLow")
elseif type == GuildBossLevelType.High then
typeId = CS.XGame.Config:GetInt("TypeIdGuildBossHigh")
elseif type == GuildBossLevelType.Boss then
typeId = CS.XGame.Config:GetInt("TypeIdGuildBossBoss")
end
local robotList = XDataCenter.GuildBossManager.GetStageRobotTab(stageId)
--所有合法的角色ID
local characterList = {}
for i = 1, #robotList do
table.insert(characterList, XRobotManager.GetCharacterId(robotList[i]))
table.insert(characterList, robotList[i])
end
local curTeam = XDataCenter.TeamManager.GetPlayerTeam(typeId)
--清除不符合规则的
for i = 1, #curTeam.TeamData do
if curTeam.TeamData[i] > 0 then
local isOk = false
for j = 1, #characterList do
if curTeam.TeamData[i] == characterList[j] then
isOk = true
break
end
end
if not isOk then
curTeam.TeamData[i] = 0
end
end
end
local xTeam = XDataCenter.TeamManager.GetXTeamByTypeId(typeId)
xTeam:UpdateFromTeamData(curTeam)
xTeam:UpdateSaveCallback(function(inTeam)
XDataCenter.TeamManager.RequestSaveTeam(inTeam)
XDataCenter.TeamManager.SetPlayerTeamLocal(inTeam:SwithToOldTeamData(), nil, nil, false)
end)
return xTeam
end
XEventManager.AddEventListener(XEventId.EVENT_LOGIN_SUCCESS, Init)
return XGuildBossManager
end
return XGuildBossManagerCreator