975 lines
33 KiB
Lua
975 lines
33 KiB
Lua
|
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
|