PGRData/Script/matrix/xmanager/XGoldenMinerManager.lua

566 lines
No EOL
20 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local XGoldenMinerRankData = require("XEntity/XGoldenMiner/XGoldenMinerRankData")
local XGoldenMinerDataDb = require("XEntity/XGoldenMiner/XGoldenMinerDataDb")
local XTeam = require("XEntity/XTeam/XTeam")
XGoldenMinerManagerCreator = function()
local XGoldenMinerManager = {}
local _GoldenMinerDataDb = XGoldenMinerDataDb.New()
local _GoldenMinerRankData = XGoldenMinerRankData.New()
local _Team
local _CurActivityId
local _UseItemCd = 0
local _CurCharacterId
local GetCookiesKey = function(key)
return "XGoldenMinerManager_" .. XPlayer.Id .. "_" .. _CurActivityId or "" .. "_" .. key
end
local GetFirstOpenHelpKey = function()
return GetCookiesKey("FirstOpenHelp")
end
--检测首次自动打开帮助
function XGoldenMinerManager.CheckFirstOpenHelp()
local key = GetFirstOpenHelpKey()
local data = XSaveTool.GetData(key)
if not data then
XSaveTool.SaveData(key, true)
return true
end
return false
end
function XGoldenMinerManager.GetGoldenMinerDataDb()
return _GoldenMinerDataDb
end
function XGoldenMinerManager.GetGoldenMinerRankData()
return _GoldenMinerRankData
end
function XGoldenMinerManager.GetDefaultActivityId()
local configs = XGoldenMinerConfigs.GetGoldenMinerActivity()
local defaultId
for id, v in pairs(configs) do
if XFunctionManager.CheckInTimeByTimeId(v.TimeId) then
return id
end
if XTool.IsNumberValid(v.TimeId) then
defaultId = id
end
end
return defaultId
end
function XGoldenMinerManager.CatchCurCharacterId(characterId)
_CurCharacterId = characterId
end
function XGoldenMinerManager.GetUseCharacterId()
local characterId = XGoldenMinerManager.GetGoldenMinerDataDb():GetCharacterId()
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
if XTool.IsNumberValid(characterId) and XGoldenMinerManager.IsCharacterUnLock(characterId) then
return characterId
end
characterId = _CurCharacterId
if XTool.IsNumberValid(characterId) and XGoldenMinerManager.IsCharacterUnLock(characterId) then
return characterId
end
local pos = 1
local team = XGoldenMinerManager.GetTeam()
local characterConfig = XGoldenMinerConfigs.GetGoldenMinerCharacter()
local condition
for id, v in pairs(characterConfig) do
if XGoldenMinerManager.IsCharacterUnLock(id) then
characterId = id
break
end
end
team:UpdateEntityTeamPos(characterId, pos, true)
return team:GetEntityIdByTeamPos(pos)
end
function XGoldenMinerManager.GetTeam()
if not _Team then
_Team = XTeam.New("GoldenMiner")
end
return _Team
end
function XGoldenMinerManager.IsOpen()
if not XTool.IsNumberValid(_CurActivityId) then return false end
local timeId = XGoldenMinerConfigs.GetActivityTimeId(_CurActivityId)
return XFunctionManager.CheckInTimeByTimeId(timeId)
end
function XGoldenMinerManager.GetActivityStartTime()
if not XTool.IsNumberValid(_CurActivityId) then return 0 end
local timeId = XGoldenMinerConfigs.GetActivityTimeId(_CurActivityId)
return XFunctionManager.GetStartTimeByTimeId(timeId)
end
function XGoldenMinerManager.GetActivityEndTime()
if not XTool.IsNumberValid(_CurActivityId) then return 0 end
local timeId = XGoldenMinerConfigs.GetActivityTimeId(_CurActivityId)
return XFunctionManager.GetEndTimeByTimeId(timeId)
end
function XGoldenMinerManager.GetCurActivityId()
return _CurActivityId
end
function XGoldenMinerManager.HandleActivityEndTime()
XLuaUiManager.RunMain()
XUiManager.TipMsg(XUiHelper.GetText("ActivityAlreadyOver"))
end
function XGoldenMinerManager.OnOpenMain()
if not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.GoldenMiner) then
return
end
if not XGoldenMinerManager.IsOpen() then
XUiManager.TipText("CommonActivityNotStart")
return
end
XLuaUiManager.Open("UiGoldenMinerMain")
end
--当检测到玩家有因为游戏进程退出,导致未完成的游玩挑战时,再次打开主界面会弹出提示框(每次登录只会主动弹出一次)
local _IsCheckAutoOpenKeepBattleTips = true
function XGoldenMinerManager.GetIsAutoOpenKeepBattleTips()
if not _IsCheckAutoOpenKeepBattleTips then
return false
end
return XGoldenMinerManager.IsCanKeepBattle()
end
function XGoldenMinerManager.SetIsAutoOpenKeepBattleTips(isCheck)
_IsCheckAutoOpenKeepBattleTips = isCheck
end
function XGoldenMinerManager.IsCanKeepBattle()
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
local curStageId = dataDb:GetCurStageId()
return XTool.IsNumberValid(curStageId)
end
function XGoldenMinerManager.GetTaskDataList(taskGroupId)
local taskIdList = XGoldenMinerConfigs.GetTaskIdList(taskGroupId)
local taskList = {}
local tastData
for _, taskId in pairs(taskIdList) do
tastData = XDataCenter.TaskManager.GetTaskDataById(taskId)
if tastData then
table.insert(taskList, tastData)
end
end
local achieved = XDataCenter.TaskManager.TaskState.Achieved
local finish = XDataCenter.TaskManager.TaskState.Finish
table.sort(taskList, function(a, b)
if a.State ~= b.State then
if a.State == achieved then
return true
end
if b.State == achieved then
return false
end
if a.State == finish then
return false
end
if b.State == finish then
return true
end
end
local templatesTaskA = XDataCenter.TaskManager.GetTaskTemplate(a.Id)
local templatesTaskB = XDataCenter.TaskManager.GetTaskTemplate(b.Id)
return templatesTaskA.Priority > templatesTaskB.Priority
end)
return taskList
end
function XGoldenMinerManager.IsUseItem(itemIndex)
if _UseItemCd > XTime.GetServerNowTimestamp() then
XUiManager.TipErrorWithKey("GoldenMinerUseItemCd")
return false
end
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
if not dataDb:IsUseItem(itemIndex) then
return false
end
_UseItemCd = XTime.GetServerNowTimestamp() + XGoldenMinerConfigs.GetUseItemCd()
return true
end
--获得当前拥有的所有buffId
--isGetNotIcon是否包含没配置图标的
function XGoldenMinerManager.GetOwnBuffIdList(isGetNotIcon)
local ownBuffIdList = {}
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
local upgradeList = dataDb:GetAllUpgradeStrengthenList()
local buffIdList
local buffId
local buffIcon
local insertFunc = function(buffId)
buffIcon = XTool.IsNumberValid(buffId) and XGoldenMinerConfigs.GetBuffIcon(buffId)
if not string.IsNilOrEmpty(buffIcon) then
table.insert(ownBuffIdList, buffId)
end
end
--强化升级项
for _, strengthenDb in ipairs(upgradeList) do
buffId = strengthenDb:GetBuffId()
insertFunc(buffId)
end
--角色自带buff
local curSelectCharacterId = dataDb:GetCharacterId()
if XTool.IsNumberValid(curSelectCharacterId) then
buffIdList = XGoldenMinerConfigs.GetCharacterBuffIds(curSelectCharacterId)
for _, buffId in ipairs(buffIdList) do
insertFunc(buffId)
end
end
--购买的道具类型为2的buff
local buffColumns = dataDb:GetBuffColumns()
for _, buffColumn in pairs(buffColumns) do
insertFunc(buffColumn:GetBuffId())
end
return ownBuffIdList
end
--获得当前拥有的所有buff叠加相同类型的buff
function XGoldenMinerManager.GetOwnBuffDic()
local ownBuffDic = {}
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
local upgradeList = dataDb:GetAllUpgradeStrengthenList()
local buffIdList
local buffId
local buffType
local params
--强化升级项
for _, strengthenDb in ipairs(upgradeList) do
buffId = strengthenDb:GetBuffId()
XGoldenMinerManager.AddBuff(ownBuffDic, buffId)
end
--角色自带buff
local curSelectCharacterId = dataDb:GetCharacterId()
if XTool.IsNumberValid(curSelectCharacterId) then
buffIdList = XGoldenMinerConfigs.GetCharacterBuffIds(curSelectCharacterId)
for _, buffId in ipairs(buffIdList) do
XGoldenMinerManager.AddBuff(ownBuffDic, buffId)
end
end
--购买的道具类型为2的buff
local buffColumns = dataDb:GetBuffColumns()
for _, buffColumn in pairs(buffColumns) do
XGoldenMinerManager.AddBuff(ownBuffDic, buffColumn:GetBuffId())
end
return ownBuffDic
end
function XGoldenMinerManager.AddBuff(ownBuffDic, buffId)
if not XTool.IsNumberValid(buffId) then
return
end
local buffType = XGoldenMinerConfigs.GetBuffType(buffId)
if buffType == XGoldenMinerConfigs.BuffType.GoldenMinerInitItem or
buffType == XGoldenMinerConfigs.BuffType.GoldenMinerInitScores then
return
end
local paramsTemp = {}
local params = XGoldenMinerConfigs.GetBuffParams(buffId)
--不同类型的抓取物分数提升叠加buff
if buffType == XGoldenMinerConfigs.BuffType.GoldenMinerStoneScore then
if not ownBuffDic[buffType] then
ownBuffDic[buffType] = {}
end
local goldenMinerStoneType = params[1]
if not ownBuffDic[buffType][goldenMinerStoneType] then
ownBuffDic[buffType][goldenMinerStoneType] = params
return
end
for i, param in ipairs(ownBuffDic[buffType][goldenMinerStoneType]) do
--参数1是GoldenMinerStoneType
if i ~= 1 then
paramsTemp[i] = param + (params[i] or 0)
end
end
ownBuffDic[buffType][goldenMinerStoneType] = paramsTemp
return
end
if not ownBuffDic[buffType] then
ownBuffDic[buffType] = params
return
end
for i, param in ipairs(ownBuffDic[buffType]) do
paramsTemp[i] = param + (params[i] or 0)
end
ownBuffDic[buffType] = paramsTemp
end
function XGoldenMinerManager.GetActivityChapters()
local chapters = {}
if XGoldenMinerManager.IsOpen() then
local temp = {}
local activityId = XGoldenMinerManager.GetCurActivityId()
temp.Id = activityId
temp.Name = XGoldenMinerConfigs.GetActivityName(activityId)
temp.BannerBg = XGoldenMinerConfigs.GetActivityBannerBg(activityId)
temp.Type = XDataCenter.FubenManager.ChapterType.GoldenMiner
table.insert(chapters, temp)
end
return chapters
end
--角色是否解锁
function XGoldenMinerManager.IsCharacterUnLock(characterId)
local condition = XGoldenMinerConfigs.GetCharacterCondition(characterId)
return not XTool.IsNumberValid(condition) or XGoldenMinerManager.GetGoldenMinerDataDb():IsCharacterActive(characterId)
end
function XGoldenMinerManager.GetCharacterIdList()
local useCharacterId = XGoldenMinerManager.GetUseCharacterId()
local characterIdList = XGoldenMinerConfigs.GetCharacterIdList()
table.sort(characterIdList, function(idA, idB)
--当前选择的角色Id
if idA == useCharacterId then
return true
end
if idB == useCharacterId then
return false
end
--已解锁
local isUnlockA = XGoldenMinerManager.IsCharacterUnLock(idA)
local isUnlockB = XGoldenMinerManager.IsCharacterUnLock(idB)
if isUnlockA ~= isUnlockB then
return isUnlockA
end
return idA < idB
end)
return characterIdList
end
------------------红点相关 begin-----------------------
--检查是否有任务奖励可领取
function XGoldenMinerManager.CheckTaskCanReward()
local configs = XGoldenMinerConfigs.GetGoldenMinerTask()
for id in pairs(configs) do
if XGoldenMinerManager.CheckTaskCanRewardByGoldenMinerTaskId(id) then
return true
end
end
return false
end
function XGoldenMinerManager.CheckTaskCanRewardByGoldenMinerTaskId(goldenMinerTaskId)
local taskIdList = XGoldenMinerConfigs.GetTaskIdList(goldenMinerTaskId)
for _, taskId in ipairs(taskIdList) do
if XDataCenter.TaskManager.CheckTaskAchieved(taskId) then
return true
end
end
return false
end
------------------红点相关 end------------------------
---------------------protocol begin------------------
--完成关卡
function XGoldenMinerManager.RequestGoldenMinerFinishStage(id, settlementInfo, curMapScore, cb, isWin)
local stageScore = settlementInfo:GetScores()
local req = {
Id = id, --关卡id
SettlementInfo = settlementInfo:GetReqServerData() --结算后的数据
}
XNetwork.Call("GoldenMinerFinishStageRequest", req, function(res)
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
--超过限定分数
if res.Code == XCode.GoldenMinerStageScoresIsMax then
dataDb:UpdateCurrentPlayStage(0)
dataDb:CoverItemColums()
if dataDb:GetCurStageIsFirst() then
dataDb:ResetData()
end
end
if cb then
cb(false)
end
return
end
dataDb:UpdateCurrentPlayStage(res.MinerDataDb.CurrentPlayStage)
dataDb:UpdateStageScores(stageScore)
local nextStageId = dataDb:GetCurrentPlayStage()
if not XTool.IsNumberValid(nextStageId) then
dataDb:UpdateCurClearData(curMapScore, isWin)
end
dataDb:UpdateData(res.MinerDataDb)
if cb then
cb(true)
end
end)
end
--选择角色进入游戏
function XGoldenMinerManager.RequestGoldenMinerEnterGame(useCharacter, cb)
local req = {
UseCharacter = useCharacter,
}
XNetwork.CallWithAutoHandleErrorCode("GoldenMinerEnterGameRequest", req, function(res)
XGoldenMinerManager.GetGoldenMinerDataDb():UpdateData(res.MinerDataDb)
if cb then
cb()
end
end)
end
--飞船升级
function XGoldenMinerManager.RequestGoldenMinerShipUpgrade(id, levelIndex, cb)
local req = {
Id = id, --技能id
LevelIndex = levelIndex, --等级下标从0开始
}
XNetwork.CallWithAutoHandleErrorCode("GoldenMinerShipUpgradeRequest", req, function(res)
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
dataDb:UpdateStageScores(res.Scores) --剩余的积分
dataDb:UpdateUpgradeStrengthenLevel(id, levelIndex)
if cb then
cb()
end
XUiManager.TipText("UpLevelSuccess")
end)
end
--商店购买
function XGoldenMinerManager.RequestGoldenMinerShopBuy(shopIndex, itemIndex, cb)
local req = {
ShopIndex = shopIndex - 1, --MinerShopDbs的下标
ItemIndex = itemIndex, --放置的道具栏下标
}
XNetwork.CallWithAutoHandleErrorCode("GoldenMinerShopBuyRequest", req, function(res)
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
dataDb:UpdateStageScores(res.Scores) --剩余的积分
local goldenMinerCommodityDb = dataDb:GetMinerShopDbByIndex(shopIndex)
local itemId = goldenMinerCommodityDb:GetGoldItemId()
if itemIndex then
dataDb:UpdateItemColumn(itemId, itemIndex)
else
dataDb:UpdateBuffColumn(itemId)
end
goldenMinerCommodityDb:UpdateBuyStatus(1)
if cb then
cb()
end
XUiManager.TipText("BuySuccess")
end)
end
--请求排行榜数据
function XGoldenMinerManager.RequestGoldenMinerRanking(cb)
XNetwork.CallWithAutoHandleErrorCode("GoldenMinerRankingRequest", nil, function(res)
_GoldenMinerRankData:UpdateData(res)
if cb then
cb()
end
end)
end
--退出关卡
function XGoldenMinerManager.RequestGoldenMinerExitGame(stageId, cb, settlementInfo, curMapScore, beforeScore)
local req = {
StageId = stageId, --退出的关卡id
SettlementInfo = settlementInfo:GetReqServerData() --结算后的数据
}
local score = curMapScore
XNetwork.Call("GoldenMinerExitGameRequest", req, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
score = beforeScore
end
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
dataDb:UpdateCurClearData(score)
dataDb:ResetData()
dataDb:UpdateTotalMaxScores(res.TotalMaxScores)
if cb then
cb()
end
end)
end
--进入关卡
function XGoldenMinerManager.RequestGoldenMinerEnterStage(stageId, cb)
local req = {
StageId = stageId --进入的关卡id
}
XNetwork.CallWithAutoHandleErrorCode("GoldenMinerEnterStageRequest", req, function(res)
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
dataDb:BackupsItemColums()
if cb then
cb()
end
end)
end
--更新新解锁的角色卡
function XGoldenMinerManager.NotifyGoldenMinerCharacterProgress(data)
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
dataDb:UpdateNewCharacter(data.UnlockCharacter)
dataDb:UpdateRedEnvelopeProgress(data.RedEnvelopeProgress)
end
--通知当前游戏流程数据
function XGoldenMinerManager.NotifyGoldenMinerGameInfo(data)
_CurActivityId = data.StageDataDb.ActivityId
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
dataDb:UpdateData(data.StageDataDb)
dataDb:BackupsItemColums()
end
---------------------protocol end--------------------
_CurActivityId = XGoldenMinerManager.GetDefaultActivityId()
return XGoldenMinerManager
end
---------------------(服务器推送)begin------------------
XRpc.NotifyGoldenMinerCharacterProgress = function(data)
XDataCenter.GoldenMinerManager.NotifyGoldenMinerCharacterProgress(data)
end
XRpc.NotifyGoldenMinerGameInfo = function(data)
XDataCenter.GoldenMinerManager.NotifyGoldenMinerGameInfo(data)
end
---------------------(服务器推送)end--------------------