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", --战斗结束确认上传分数 GuildBossGetAllBossRewardRequest = "GuildBossGetAllBossRewardRequest", --一键领取Boss血量奖励和积分奖励 } 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 List2FlagTab(originList, targetList) originList = originList or {} if XTool.IsTableEmpty(targetList) then return originList end for _, target in pairs(targetList) do originList[target] = true end return originList 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 function XGuildBossManager.IsScoreRewardReceive(id) local rec = GuildBossInfoData.ScoreBoxGot[id] return rec and true or false end function XGuildBossManager.GetMaxBossHpGot() local max = 0 for id, _ in pairs(GuildBossInfoData.HpBoxGot or {}) do max = math.max(id, max) end return max end function XGuildBossManager.IsHpRewardReceived(id) local rec = GuildBossInfoData.HpBoxGot[id] return rec and true or false end function XGuildBossManager.IsHpRewardAllReceived() local rewards = XGuildBossConfig.HpRewards() for _, reward in pairs(rewards or {}) do if not XGuildBossManager.IsHpRewardReceived(reward.Id) then return false end end return true end --获取可以领取的最小奖励Id, 没有则获取最大未领取。全领取则获取最大Id function XGuildBossManager.GetMinReceivedId() local rewards = XGuildBossConfig.HpRewards() or {} local rewardIds = {} local curBossHpPercent = GuildBossInfoData.HpLeft / GuildBossInfoData.HpMax * 100 for _, reward in pairs(rewards) do --可领取但未领取 if reward.HpPercent >= curBossHpPercent and not XGuildBossManager.IsHpRewardReceived(reward.Id) then table.insert(rewardIds, reward.Id) end end if XTool.IsTableEmpty(rewardIds) then local id = XGuildBossManager.GetMaxBossHpGot() return XGuildBossManager.IsHpRewardAllReceived() and id or id + 1 end if #rewardIds == 1 then return rewardIds[1] end table.sort(rewardIds, function(a, b) return a < b end) return rewardIds[1] end function XGuildBossManager.ProcessTaskList(hook) XGuildBossManager.GuildBossActivityRequest(function() local taskList = XGuildBossConfig.GetTaskList() local bossScore = XDataCenter.GuildBossManager.GetMyTotalScore() local leftHp = XGuildBossManager.GetCurBossHp() local maxHp = XGuildBossManager.GetMaxBossHp() local leftPercent = math.ceil( leftHp / maxHp * 100) for _, task in ipairs(taskList or {}) do local taskType = task.TaskType if taskType == GuildTaskType.BossScore then task.RewardId = XDataCenter.GuildBossManager.GetScoreRewardId(task.TaskId) elseif taskType == GuildTaskType.BossHp then task.RewardId = XDataCenter.GuildBossManager.GetHpRewardId(task.TaskId) end task.State = GuildBossRewardType.Disable if task.TaskType == GuildTaskType.BossScore then task.Value = bossScore if bossScore >= task.Target then local received = XGuildBossManager.IsScoreRewardReceive(task.TaskId) task.State = received and GuildBossRewardType.Acquired or GuildBossRewardType.Available end elseif task.TaskType == GuildTaskType.BossHp then task.Value = leftPercent if leftPercent <= task.Target then local received = XGuildBossManager.IsHpRewardReceived(task.TaskId) task.State = received and GuildBossRewardType.Acquired or GuildBossRewardType.Available end end end local SortByState = { [GuildBossRewardType.Acquired] = 1, [GuildBossRewardType.Disable] = 100, [GuildBossRewardType.Available] = 10000, } table.sort(taskList, function(taskA, taskB) local stateA = SortByState[taskA.State] local stateB = SortByState[taskB.State] if stateA ~= stateB then return stateA > stateB end if taskA.GroupId ~= taskB.GroupId then return taskA.GroupId < taskB.GroupId end return taskA.TaskId < taskB.TaskId end) if hook then hook(taskList) end end, nil, function() if hook then hook({}) end end) 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 --获取风格信息 function XGuildBossManager.GetFightStyle() return GuildBossInfoData.FightStyle 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 -- 设置风格详情 function XGuildBossManager.SetFightStyle(fightStyle) GuildBossInfoData.FightStyle = fightStyle end --Set End --other function XGuildBossManager.GetHpRewardId(id) local hpRewardData = XGuildBossConfig.HpRewards() local cfg = hpRewardData[id] local timeId = cfg.TimeId return XFunctionManager.CheckInTimeByTimeId(timeId) and hpRewardData[id].NewRewardId or hpRewardData[id].RewardId end function XGuildBossManager.GetScoreRewardId(id) local rewardData = XGuildBossConfig.ScoreRewards() local cfg = rewardData[id] local timeId = cfg.TimeId return XFunctionManager.CheckInTimeByTimeId(timeId) and rewardData[id].NewRewardId or rewardData[id].RewardId end --更新是否有奖励可领 function XGuildBossManager.UpdateReward() --bossHp宝箱 local hpRewardData = XGuildBossConfig.HpRewards() local curBossHpPercent = GuildBossInfoData.HpLeft / GuildBossInfoData.HpMax * 100 local maxHpGotId = XGuildBossManager.GetMaxBossHpGot() if maxHpGotId >= #hpRewardData then HasBossHpReward = false else if curBossHpPercent <= hpRewardData[maxHpGotId + 1].HpPercent then HasBossHpReward = true else HasBossHpReward = false end end --积分宝箱 HasScoreReward = false local myTotalScore = XGuildBossManager.GetMyTotalScore() local rewardData = XGuildBossConfig.ScoreRewards() for i = 1, #rewardData do local isGet = false local data = rewardData[i] --if XFunctionManager.CheckInTimeByTimeId(data.TimeId) then isGet = XGuildBossManager.IsScoreRewardReceive(data.Id) if myTotalScore >= data.Score and not isGet then HasScoreReward = true end --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 --清除离开公会的成员的日志 local allMemberList = XDataCenter.GuildManager.GetMemberList() for k, data in pairs(GuildBossInfoData.Logs) do if not allMemberList[data.PlayerId] then table.remove(GuildBossInfoData.Logs, k) end 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 --是否是核心技能 function XGuildBossManager.IsCoreStyleSkill(id) local allSkill = XGuildBossConfig.GetGuildBossFightStyleSkill() local config = allSkill[id] return config and config.IsCore and config.IsCore > 0 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 -- 判断是否是固定机器人 nzwjV3 function XGuildBossManager.CheckIsGuildFixedRobot(charaId) return XGuildBossConfig.GetAllRegularRobot()[charaId] 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() local isInTime = XFunctionManager.CheckInTimeByTimeId(CS.XGame.Config:GetInt("GuildBossTempBanTimeId")) if isInTime then XUiManager.TipError(CS.XTextManager.GetText("GuildBossOpenLimit")) return end 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, errorCb) -- 请求间隔保护 local now = XTime.GetServerNowTimestamp() if not isForce then if LastSyncStageInfoTime + SYNC_RANK_LIST_SECOND >= now then if cb then cb() end return end end XNetwork.Call(GuildBossRpc.GuildBossActivityRequest, {}, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) if errorCb then errorCb() end return end LastSyncStageInfoTime = now 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 = List2FlagTab(GuildBossInfoData.ScoreBoxGot, res.ScoreBoxGot) GuildBossInfoData.HpBoxGot = List2FlagTab(GuildBossInfoData.HpBoxGot, res.HpBoxGotNew) 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.GuildBossStyleSkillChangeRequeset(operType, skillId, cb) -- 向服务器请求激活技能 XNetwork.Call("GuildSelectFightStyleSkillRequest", {OperType = operType, SkillId = skillId}, function(reply) if reply.Code ~= XCode.Success then XUiManager.TipCode(reply.Code) return end if cb then cb() end -- 改变后再请求一次风格信息并刷新 XDataCenter.GuildBossManager.GuildBossStyleInfoRequest(function () XEventManager.DispatchEvent(XEventId.EVENT_GUILDBOSS_STYLE_CHANGED) --刷新当前查看的风格的信息 end) end) end function XGuildBossManager.GuildBossStyleInfoRequest(cb) -- 向服务器请求风格信息 再打开 XNetwork.Call("GuildFightStyleRequest", nil, function(reply) if reply.Code ~= XCode.Success then XUiManager.TipCode(reply.Code) return end XGuildBossManager.SetFightStyle(reply.FightStyle) if cb then cb() end 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) GuildBossInfoData.ScoreBoxGot = List2FlagTab(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 = List2FlagTab(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 function XGuildBossManager.GuildBossGetAllBossRewardRequest(cb) XNetwork.Call(GuildBossRpc.GuildBossGetAllBossRewardRequest, nil, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end XUiManager.OpenUiObtain(res.RewardGoods) GuildBossInfoData.HpBoxGot = List2FlagTab(GuildBossInfoData.HpBoxGot, res.BossHpId) GuildBossInfoData.ScoreBoxGot = List2FlagTab(GuildBossInfoData.ScoreBoxGot, res.BossScoreId) XGuildBossManager.UpdateReward() 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