2023-07-15 02:35:33 +07:00
|
|
|
|
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", --战斗结束确认上传分数
|
2024-09-01 22:49:41 +02:00
|
|
|
|
GuildBossGetAllBossRewardRequest = "GuildBossGetAllBossRewardRequest", --一键领取Boss血量奖励和积分奖励
|
2023-07-15 02:35:33 +07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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
|
2024-09-01 22:49:41 +02:00
|
|
|
|
|
|
|
|
|
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
|
2023-07-15 02:35:33 +07:00
|
|
|
|
---- 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
|
|
|
|
|
|
2024-09-01 22:49:41 +02:00
|
|
|
|
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
|
2023-07-15 02:35:33 +07:00
|
|
|
|
end
|
2024-09-01 22:49:41 +02:00
|
|
|
|
|
|
|
|
|
--获取可以领取的最小奖励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
|
2023-07-15 02:35:33 +07:00
|
|
|
|
|
2024-09-01 22:49:41 +02:00
|
|
|
|
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)
|
2023-07-15 02:35:33 +07:00
|
|
|
|
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
|
2024-09-01 22:49:41 +02:00
|
|
|
|
|
|
|
|
|
--获取风格信息
|
|
|
|
|
function XGuildBossManager.GetFightStyle()
|
|
|
|
|
return GuildBossInfoData.FightStyle
|
|
|
|
|
end
|
2023-07-15 02:35:33 +07:00
|
|
|
|
--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
|
2024-09-01 22:49:41 +02:00
|
|
|
|
|
|
|
|
|
-- 设置风格详情
|
|
|
|
|
function XGuildBossManager.SetFightStyle(fightStyle)
|
|
|
|
|
GuildBossInfoData.FightStyle = fightStyle
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-15 02:35:33 +07:00
|
|
|
|
--Set End
|
|
|
|
|
|
|
|
|
|
--other
|
|
|
|
|
function XGuildBossManager.GetHpRewardId(id)
|
|
|
|
|
local hpRewardData = XGuildBossConfig.HpRewards()
|
2024-09-01 22:49:41 +02:00
|
|
|
|
local cfg = hpRewardData[id]
|
|
|
|
|
local timeId = cfg.TimeId
|
|
|
|
|
return XFunctionManager.CheckInTimeByTimeId(timeId) and hpRewardData[id].NewRewardId or hpRewardData[id].RewardId
|
2023-07-15 02:35:33 +07:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XGuildBossManager.GetScoreRewardId(id)
|
|
|
|
|
local rewardData = XGuildBossConfig.ScoreRewards()
|
2024-09-01 22:49:41 +02:00
|
|
|
|
local cfg = rewardData[id]
|
|
|
|
|
local timeId = cfg.TimeId
|
|
|
|
|
return XFunctionManager.CheckInTimeByTimeId(timeId) and rewardData[id].NewRewardId or rewardData[id].RewardId
|
2023-07-15 02:35:33 +07:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--更新是否有奖励可领
|
|
|
|
|
function XGuildBossManager.UpdateReward()
|
|
|
|
|
--bossHp宝箱
|
|
|
|
|
local hpRewardData = XGuildBossConfig.HpRewards()
|
|
|
|
|
local curBossHpPercent = GuildBossInfoData.HpLeft / GuildBossInfoData.HpMax * 100
|
2024-09-01 22:49:41 +02:00
|
|
|
|
local maxHpGotId = XGuildBossManager.GetMaxBossHpGot()
|
|
|
|
|
if maxHpGotId >= #hpRewardData then
|
2023-07-15 02:35:33 +07:00
|
|
|
|
HasBossHpReward = false
|
|
|
|
|
else
|
2024-09-01 22:49:41 +02:00
|
|
|
|
if curBossHpPercent <= hpRewardData[maxHpGotId + 1].HpPercent then
|
2023-07-15 02:35:33 +07:00
|
|
|
|
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
|
2024-09-01 22:49:41 +02:00
|
|
|
|
local data = rewardData[i]
|
|
|
|
|
--if XFunctionManager.CheckInTimeByTimeId(data.TimeId) then
|
|
|
|
|
isGet = XGuildBossManager.IsScoreRewardReceive(data.Id)
|
|
|
|
|
if myTotalScore >= data.Score and not isGet then
|
2023-07-15 02:35:33 +07:00
|
|
|
|
HasScoreReward = true
|
|
|
|
|
end
|
2024-09-01 22:49:41 +02:00
|
|
|
|
--end
|
2023-07-15 02:35:33 +07:00
|
|
|
|
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
|
2024-09-01 22:49:41 +02:00
|
|
|
|
|
|
|
|
|
--清除离开公会的成员的日志
|
|
|
|
|
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
|
2023-07-15 02:35:33 +07:00
|
|
|
|
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
|
|
|
|
|
|
2024-09-01 22:49:41 +02:00
|
|
|
|
--是否是核心技能
|
|
|
|
|
function XGuildBossManager.IsCoreStyleSkill(id)
|
|
|
|
|
local allSkill = XGuildBossConfig.GetGuildBossFightStyleSkill()
|
|
|
|
|
local config = allSkill[id]
|
|
|
|
|
return config and config.IsCore and config.IsCore > 0
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-15 02:35:33 +07:00
|
|
|
|
--本地记录当前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
|
|
|
|
|
|
2024-09-01 22:49:41 +02:00
|
|
|
|
-- 判断是否是固定机器人 nzwjV3
|
|
|
|
|
function XGuildBossManager.CheckIsGuildFixedRobot(charaId)
|
|
|
|
|
return XGuildBossConfig.GetAllRegularRobot()[charaId]
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-15 02:35:33 +07:00
|
|
|
|
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()
|
2024-09-01 22:49:41 +02:00
|
|
|
|
local isInTime = XFunctionManager.CheckInTimeByTimeId(CS.XGame.Config:GetInt("GuildBossTempBanTimeId"))
|
|
|
|
|
if isInTime then
|
|
|
|
|
XUiManager.TipError(CS.XTextManager.GetText("GuildBossOpenLimit"))
|
|
|
|
|
return
|
|
|
|
|
end
|
2023-07-15 02:35:33 +07:00
|
|
|
|
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
|
|
|
|
|
|
2024-09-01 22:49:41 +02:00
|
|
|
|
function XGuildBossManager.GuildBossActivityRequest(cb, isForce, errorCb)
|
2023-07-15 02:35:33 +07:00
|
|
|
|
-- 请求间隔保护
|
2024-09-01 22:49:41 +02:00
|
|
|
|
local now = XTime.GetServerNowTimestamp()
|
2023-07-15 02:35:33 +07:00
|
|
|
|
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)
|
2024-09-01 22:49:41 +02:00
|
|
|
|
if errorCb then errorCb() end
|
2023-07-15 02:35:33 +07:00
|
|
|
|
return
|
|
|
|
|
end
|
2024-09-01 22:49:41 +02:00
|
|
|
|
LastSyncStageInfoTime = now
|
2023-07-15 02:35:33 +07:00
|
|
|
|
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
|
2024-09-01 22:49:41 +02:00
|
|
|
|
GuildBossInfoData.ScoreBoxGot = List2FlagTab(GuildBossInfoData.ScoreBoxGot, res.ScoreBoxGot)
|
|
|
|
|
GuildBossInfoData.HpBoxGot = List2FlagTab(GuildBossInfoData.HpBoxGot, res.HpBoxGotNew)
|
2023-07-15 02:35:33 +07:00
|
|
|
|
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
|
|
|
|
|
|
2024-09-01 22:49:41 +02:00
|
|
|
|
-- 激活或卸载风格技能
|
|
|
|
|
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
|
2023-07-15 02:35:33 +07:00
|
|
|
|
|
|
|
|
|
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)
|
2024-09-01 22:49:41 +02:00
|
|
|
|
GuildBossInfoData.ScoreBoxGot = List2FlagTab(GuildBossInfoData.ScoreBoxGot, { id })
|
2023-07-15 02:35:33 +07:00
|
|
|
|
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)
|
2024-09-01 22:49:41 +02:00
|
|
|
|
GuildBossInfoData.HpBoxGot = List2FlagTab(GuildBossInfoData.HpBoxGot, { id })
|
2023-07-15 02:35:33 +07:00
|
|
|
|
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
|
2024-09-01 22:49:41 +02:00
|
|
|
|
|
|
|
|
|
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
|
2023-07-15 02:35:33 +07:00
|
|
|
|
--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
|