forked from endernon/PGRData
896 lines
No EOL
33 KiB
Lua
896 lines
No EOL
33 KiB
Lua
local XGoldenMinerRankData = require("XEntity/XGoldenMiner/XGoldenMinerRankData")
|
||
local XGoldenMinerDataDb = require("XEntity/XGoldenMiner/XGoldenMinerDataDb")
|
||
local XGoldenMinerDialogExData = require("XEntity/XGoldenMiner/XGoldenMinerDialogExData")
|
||
local XTeam = require("XEntity/XTeam/XTeam")
|
||
|
||
XGoldenMinerManagerCreator = function()
|
||
---@class XGoldenMinerManager
|
||
local XGoldenMinerManager = {}
|
||
---@type XGoldenMinerDataDb
|
||
local _GoldenMinerDataDb = XGoldenMinerDataDb.New()
|
||
---@type XGoldenMinerRankData
|
||
local _GoldenMinerRankData = XGoldenMinerRankData.New()
|
||
local _Team
|
||
local _CurActivityId
|
||
local _UseItemCd = 0
|
||
local _CurCharacterId
|
||
|
||
local GetCookiesKey = function(key)
|
||
return "XGoldenMinerManager_" .. XPlayer.Id .. "_" .. _CurActivityId .. "_" .. key
|
||
end
|
||
|
||
local GetFirstOpenHelpKey = function()
|
||
return GetCookiesKey("FirstOpenHelp")
|
||
end
|
||
|
||
--region Activity
|
||
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.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
|
||
--endregion
|
||
|
||
--region Ui
|
||
--检测首次自动打开帮助
|
||
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.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:OpenGiveUpGameDialog(title, desc, closeCb, sureCb, specialCloseCb, specialIsSure)
|
||
---@type XGoldenMinerDialogExData
|
||
local exData = XGoldenMinerDialogExData.New()
|
||
exData.IsSettleGame = true
|
||
exData.IsCanShowClose = not XGoldenMinerManager.GetGoldenMinerDataDb():GetCurStageIsFirst()
|
||
exData.TxtClose = XUiHelper.GetText("GoldenMinerExitBtnName")
|
||
exData.TxtSure = XUiHelper.GetText("GoldenMinerSaveBtnName")
|
||
exData.FuncSpecial = specialCloseCb
|
||
exData.FuncSpecialIsSure = specialIsSure
|
||
XLuaUiManager.Open("UiGoldenMinerDialog", title, desc, closeCb, sureCb, exData)
|
||
end
|
||
--endregion
|
||
|
||
--region Task
|
||
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
|
||
--endregion
|
||
|
||
--region GameData
|
||
function XGoldenMinerManager.GetGoldenMinerDataDb()
|
||
return _GoldenMinerDataDb
|
||
end
|
||
|
||
function XGoldenMinerManager.GetGoldenMinerRankData()
|
||
return _GoldenMinerRankData
|
||
end
|
||
|
||
function XGoldenMinerManager.GetTimeScore(time)
|
||
local score = 0
|
||
local countTime = math.ceil(time)
|
||
if countTime <= 0 then
|
||
return score
|
||
end
|
||
local scoreGroup = XGoldenMinerConfigs.GetScoreGroupIdList()
|
||
for index, scoreId in ipairs(scoreGroup) do
|
||
if countTime <= 0 then
|
||
return score
|
||
end
|
||
local countMaxTime = XGoldenMinerConfigs.GetLastTimeMax(scoreId)
|
||
local countPerPoint = XGoldenMinerConfigs.GetPerTimePoint(scoreId)
|
||
if index <= 1 then
|
||
if countTime > countMaxTime then
|
||
score = score + countPerPoint * countMaxTime
|
||
else
|
||
score = score + countPerPoint * countTime
|
||
end
|
||
countTime = countTime - countMaxTime
|
||
else
|
||
local needCountTime = countMaxTime - XGoldenMinerConfigs.GetLastTimeMax(scoreGroup[index-1])
|
||
if countTime > needCountTime then
|
||
score = score + countPerPoint * needCountTime
|
||
else
|
||
score = score + countPerPoint * countTime
|
||
end
|
||
countTime = countTime - needCountTime
|
||
end
|
||
end
|
||
return score
|
||
end
|
||
--endregion
|
||
|
||
--region Item
|
||
function XGoldenMinerManager.IsUseItem(itemIndex)
|
||
if _UseItemCd > XTime.GetServerNowTimestamp() then
|
||
-- XUiManager.TipErrorWithKey("GoldenMinerUseItemCd") --2.0不提示冷却
|
||
return false
|
||
end
|
||
|
||
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
|
||
if not dataDb:IsUseItem(itemIndex) then
|
||
return false
|
||
end
|
||
|
||
_UseItemCd = XTime.GetServerNowTimestamp() + XGoldenMinerConfigs.GetUseItemCd()
|
||
return true
|
||
end
|
||
--endregion
|
||
|
||
--region Buff
|
||
--获得当前拥有的所有buff,叠加相同类型的buff
|
||
function XGoldenMinerManager.GetCurBuffIdList()
|
||
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
|
||
local upgradeList = dataDb:GetAllUpgradeStrengthenList()
|
||
local buffIdList = {}
|
||
|
||
--强化升级项
|
||
for _, strengthenDb in ipairs(upgradeList) do
|
||
buffIdList[#buffIdList + 1] = strengthenDb:GetBuffId()
|
||
end
|
||
|
||
--角色自带buff
|
||
local curSelectCharacterId = dataDb:GetCharacterId()
|
||
if XTool.IsNumberValid(curSelectCharacterId) then
|
||
local characterBuffIdList = XGoldenMinerConfigs.GetCharacterBuffIds(curSelectCharacterId)
|
||
for _, buffId in ipairs(characterBuffIdList) do
|
||
if XGoldenMinerConfigs.GetBuffType(buffId) ~= XGoldenMinerConfigs.BuffType.GoldenMinerUseItemStopTime and
|
||
XGoldenMinerConfigs.GetBuffType(buffId) ~= XGoldenMinerConfigs.BuffType.GoldenMinerUseItemAddTime then
|
||
buffIdList[#buffIdList + 1] = buffId
|
||
end
|
||
end
|
||
end
|
||
|
||
--购买的道具类型为2的buff
|
||
local buffColumns = dataDb:GetBuffColumns()
|
||
for _, buffColumn in pairs(buffColumns) do
|
||
buffIdList[#buffIdList + 1] = buffColumn:GetBuffId()
|
||
end
|
||
|
||
return buffIdList
|
||
end
|
||
|
||
--获得当前拥有的所有buff,叠加相同类型的buff
|
||
function XGoldenMinerManager.GetOwnBuffDic()
|
||
local ownBuffDic = {}
|
||
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
|
||
local upgradeList = dataDb:GetAllUpgradeStrengthenList()
|
||
local buffIdList
|
||
local buffId
|
||
|
||
--强化升级项
|
||
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 _, Id in ipairs(buffIdList) do
|
||
XGoldenMinerManager.AddBuff(ownBuffDic, Id)
|
||
end
|
||
end
|
||
|
||
--购买的道具类型为2的buff
|
||
local buffColumns = dataDb:GetBuffColumns()
|
||
for _, buffColumn in pairs(buffColumns) do
|
||
XGoldenMinerManager.AddBuff(ownBuffDic, buffColumn:GetBuffId())
|
||
end
|
||
|
||
return ownBuffDic
|
||
end
|
||
|
||
local insertFunc = function(buffIdList, Id)
|
||
local buffIcon = XTool.IsNumberValid(Id) and XGoldenMinerConfigs.GetBuffIcon(Id)
|
||
if not string.IsNilOrEmpty(buffIcon) then
|
||
table.insert(buffIdList, Id)
|
||
end
|
||
end
|
||
|
||
--获得当前拥有的所有buffId
|
||
--isGetNotIcon:是否包含没配置图标的
|
||
function XGoldenMinerManager.GetOwnBuffIdList(isGetNotIcon)
|
||
local ownBuffIdList = {}
|
||
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
|
||
local upgradeList = dataDb:GetAllUpgradeStrengthenList()
|
||
local buffIdList
|
||
local buffId
|
||
|
||
--角色自带buff
|
||
local curSelectCharacterId = dataDb:GetCharacterId()
|
||
if XTool.IsNumberValid(curSelectCharacterId) then
|
||
buffIdList = XGoldenMinerConfigs.GetCharacterBuffIds(curSelectCharacterId)
|
||
for _, Id in ipairs(buffIdList) do
|
||
insertFunc(ownBuffIdList, Id)
|
||
end
|
||
end
|
||
|
||
--强化升级项
|
||
for _, strengthenDb in ipairs(upgradeList) do
|
||
buffId = strengthenDb:GetBuffId()
|
||
insertFunc(ownBuffIdList, buffId)
|
||
end
|
||
|
||
--购买的道具类型为2的buff
|
||
local buffColumns = dataDb:GetBuffColumns()
|
||
for _, buffColumn in pairs(buffColumns) do
|
||
insertFunc(ownBuffIdList, buffColumn:GetBuffId())
|
||
end
|
||
|
||
return ownBuffIdList
|
||
end
|
||
|
||
--获得当前飞船拥有的所有buffId
|
||
--isGetNotIcon:是否包含没配置图标的
|
||
function XGoldenMinerManager.GetShipBuffIdList()
|
||
local shipBuffIdList = {}
|
||
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
|
||
local upgradeList = dataDb:GetAllUpgradeStrengthenList()
|
||
local buffIdList
|
||
local buffId
|
||
|
||
--角色自带buff
|
||
local curSelectCharacterId = dataDb:GetCharacterId()
|
||
if XTool.IsNumberValid(curSelectCharacterId) then
|
||
buffIdList = XGoldenMinerConfigs.GetCharacterBuffIds(curSelectCharacterId)
|
||
for _, Id in ipairs(buffIdList) do
|
||
insertFunc(shipBuffIdList, Id)
|
||
end
|
||
end
|
||
|
||
--强化升级项
|
||
local shipBuffList = {}
|
||
for _, strengthenDb in ipairs(upgradeList) do
|
||
buffId = strengthenDb:GetBuffId()
|
||
shipBuffList[#shipBuffList + 1] = buffId
|
||
end
|
||
table.sort(shipBuffList, function(a, b)
|
||
local priorityA = XGoldenMinerConfigs.GetBuffDisplayPriority(a)
|
||
local priorityB = XGoldenMinerConfigs.GetBuffDisplayPriority(b)
|
||
return priorityA < priorityB
|
||
end)
|
||
for _, id in ipairs(shipBuffList) do
|
||
insertFunc(shipBuffIdList, id)
|
||
end
|
||
|
||
return shipBuffIdList
|
||
end
|
||
|
||
--获得当前临时buff
|
||
--isGetNotIcon:是否包含没配置图标的
|
||
function XGoldenMinerManager.GetTempBuffIdList()
|
||
local ownBuffIdList = {}
|
||
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
|
||
|
||
--购买的道具类型为2的buff
|
||
local buffColumns = dataDb:GetBuffColumns()
|
||
for _, buffColumn in pairs(buffColumns) do
|
||
insertFunc(ownBuffIdList, buffColumn:GetBuffId())
|
||
end
|
||
|
||
return ownBuffIdList
|
||
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 buffType == XGoldenMinerConfigs.BuffType.GoldenMinerRoleHook then
|
||
ownBuffDic[buffType] = params
|
||
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
|
||
--endregion
|
||
|
||
--region Character
|
||
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
|
||
|
||
---是否X角色
|
||
function XGoldenMinerManager.CheckIsUseCharacter(characterId)
|
||
if not XGoldenMinerManager.IsOpen() then
|
||
return false
|
||
end
|
||
if not XGoldenMinerManager.IsCanKeepBattle() then
|
||
return false
|
||
end
|
||
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
|
||
return dataDb:GetCharacterId() == 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
|
||
|
||
--已使用
|
||
local isUsedA = XGoldenMinerManager.IsCharacterUsed(idA)
|
||
local isUsedB = XGoldenMinerManager.IsCharacterUsed(idB)
|
||
if isUsedA ~= isUsedB then
|
||
return isUsedB
|
||
end
|
||
|
||
return idA < idB
|
||
end)
|
||
|
||
return characterIdList
|
||
end
|
||
|
||
function XGoldenMinerManager.CatchCurCharacterId(characterId)
|
||
XSaveTool.SaveData(GetCookiesKey("_CurCharacterId"), characterId)
|
||
_CurCharacterId = characterId
|
||
end
|
||
|
||
function XGoldenMinerManager.GetUseCharacterId()
|
||
local characterId = XGoldenMinerManager.GetGoldenMinerDataDb():GetCharacterId()
|
||
if XTool.IsNumberValid(characterId) and XGoldenMinerManager.IsCharacterUnLock(characterId) then
|
||
return characterId
|
||
end
|
||
|
||
characterId = XSaveTool.GetData(GetCookiesKey("_CurCharacterId")) or _CurCharacterId
|
||
if XTool.IsNumberValid(characterId) and XGoldenMinerManager.IsCharacterUnLock(characterId) then
|
||
return characterId
|
||
end
|
||
|
||
local pos = 1
|
||
local team = XGoldenMinerManager.GetTeam()
|
||
local characterConfig = XGoldenMinerConfigs.GetGoldenMinerCharacter()
|
||
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.IsCharacterUsed(characterId)
|
||
if not XGoldenMinerManager.IsCharacterUnLock(characterId) then
|
||
return true
|
||
end
|
||
local key = GetCookiesKey("IsCharacterUsed"..characterId)
|
||
return XSaveTool.GetData(key)
|
||
end
|
||
|
||
function XGoldenMinerManager.SetCharacterUsed(characterId)
|
||
if XGoldenMinerManager.IsCharacterUsed(characterId) then
|
||
return
|
||
end
|
||
local key = GetCookiesKey("IsCharacterUsed"..characterId)
|
||
return XSaveTool.SaveData(key, true)
|
||
end
|
||
--endregion
|
||
|
||
--region RedPoint
|
||
--检查是否有任务奖励可领取
|
||
function XGoldenMinerManager.CheckTaskCanReward()
|
||
local configs = XGoldenMinerConfigs.GetGoldenMinerTask()
|
||
for id in pairs(configs) do
|
||
if XGoldenMinerManager.CheckTaskCanRewardByTaskId(id) then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XGoldenMinerManager.CheckTaskCanRewardByTaskId(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
|
||
|
||
function XGoldenMinerManager.CheckHaveNewRole()
|
||
local characterIdList = XGoldenMinerConfigs.GetCharacterIdList()
|
||
for _, characterId in ipairs(characterIdList) do
|
||
if XGoldenMinerManager.CheckIsNewRole(characterId) then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XGoldenMinerManager.CheckIsNewRole(characterId)
|
||
local key = GetCookiesKey("IsNewRole"..characterId)
|
||
return XGoldenMinerManager.IsCharacterUnLock(characterId) and not XSaveTool.GetData(key)
|
||
end
|
||
|
||
function XGoldenMinerManager.ClearAllNewRoleTag()
|
||
local characterIdList = XGoldenMinerConfigs.GetCharacterIdList()
|
||
for _, characterId in ipairs(characterIdList) do
|
||
XGoldenMinerManager.ClearNewRoleTag(characterId)
|
||
end
|
||
end
|
||
|
||
function XGoldenMinerManager.ClearNewRoleTag(characterId)
|
||
if not XGoldenMinerManager.CheckIsNewRole(characterId) then
|
||
return
|
||
end
|
||
local key = GetCookiesKey("IsNewRole"..characterId)
|
||
XSaveTool.SaveData(key, true)
|
||
end
|
||
--endregion
|
||
|
||
--region Protocol
|
||
---完成关卡
|
||
---@param settlementInfo XGoldenMinerSettlementInfo
|
||
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 and res.Code ~= XCode.GoldenMinerSaveRankError 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
|
||
if res.Code == XCode.GoldenMinerSaveRankError then
|
||
XUiManager.TipCode(res.Code)
|
||
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 XTool.IsNumberValid(res.NextHideMap) then
|
||
local curStageId, curStageIndex = dataDb:GetCurStageId()
|
||
local stageMapInfo = dataDb:GetStageMapInfo(curStageIndex)
|
||
local data = {}
|
||
data.StageId = curStageId
|
||
data.MapId = res.NextHideMap
|
||
stageMapInfo:UpdateData(data)
|
||
end
|
||
|
||
-- 保存当前道具备份
|
||
dataDb:BackupsItemColums()
|
||
|
||
if cb then
|
||
cb(true, XTool.IsNumberValid(res.NextHideMap))
|
||
end
|
||
end)
|
||
end
|
||
|
||
---选择角色进入游戏
|
||
function XGoldenMinerManager.RequestGoldenMinerEnterGame(useCharacter, cb)
|
||
local req = {
|
||
UseCharacter = useCharacter,
|
||
}
|
||
XNetwork.CallWithAutoHandleErrorCode("GoldenMinerEnterGameRequest", req, function(res)
|
||
XGoldenMinerManager.SetCharacterUsed(useCharacter)
|
||
XGoldenMinerManager.GetGoldenMinerDataDb():UpdateData(res.MinerDataDb)
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
---飞船升级
|
||
function XGoldenMinerManager.RequestGoldenMinerShipUpgrade(id, levelIndex, cb)
|
||
local req = {
|
||
Id = id, --UpgradeId
|
||
LevelIndex = levelIndex, --等级下标(从0开始)
|
||
}
|
||
XNetwork.CallWithAutoHandleErrorCode("GoldenMinerShipUpgradeRequest", req, function(res)
|
||
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
|
||
dataDb:UpdateStageScores(res.Scores) --剩余的积分
|
||
dataDb:UpdateUpgradeStrengthenLevel(id, levelIndex)
|
||
dataDb:UpdateUpgradeStrengthenAlreadyBuy(id, levelIndex)
|
||
if cb then
|
||
cb()
|
||
end
|
||
local type = XGoldenMinerConfigs.GetUpgradeType(id)
|
||
if type == XGoldenMinerConfigs.UpgradeType.SameReplace then
|
||
XUiManager.TipText("GoldenMinerHookReplaceSuccess")
|
||
else
|
||
XUiManager.TipText("UpLevelSuccess")
|
||
end
|
||
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
|
||
|
||
---退出关卡
|
||
---@param settlementInfo XGoldenMinerSettlementInfo
|
||
function XGoldenMinerManager.RequestGoldenMinerExitGame(stageId, cb, settlementInfo, curMapScore, beforeScore)
|
||
local settlementInfoReq
|
||
if not settlementInfo then
|
||
settlementInfoReq = {}
|
||
settlementInfoReq.Scores = curMapScore
|
||
settlementInfoReq.LaunchingClawCount = 0
|
||
settlementInfoReq.CostTime = 0
|
||
settlementInfoReq.MoveCount = 0
|
||
settlementInfoReq.SettlementItems = {}
|
||
settlementInfoReq.GrabDataInfos = {}
|
||
settlementInfoReq.UpdateTaskInfo = {}
|
||
else
|
||
settlementInfoReq = settlementInfo:GetReqServerData()
|
||
end
|
||
local req = {
|
||
StageId = stageId, --退出的关卡id,关卡外结算传0
|
||
SettlementInfo = settlementInfoReq, --结算后的数据
|
||
}
|
||
local score = curMapScore
|
||
XNetwork.Call("GoldenMinerExitGameRequest", req, function(res)
|
||
if res.Code ~= XCode.Success and res.Code ~= XCode.GoldenMinerSaveRankError then
|
||
XUiManager.TipCode(res.Code)
|
||
score = beforeScore
|
||
end
|
||
if res.Code == XCode.GoldenMinerSaveRankError then
|
||
XUiManager.TipCode(res.Code)
|
||
end
|
||
|
||
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
|
||
dataDb:UpdateCurClearData(score)
|
||
dataDb:ResetData()
|
||
dataDb:UpdateTotalMaxScores(res.TotalMaxScores)
|
||
dataDb:UpdateTotalMaxScoresCharacter(res.CharacterId)
|
||
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.RequestGoldenMinerSaveStage(curPlayStageId)
|
||
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
|
||
dataDb:ResetCurClearData()
|
||
dataDb:UpdateCurrentPlayStage(curPlayStageId)
|
||
XLuaUiManager.PopThenOpen("UiGoldenMinerMain")
|
||
end
|
||
|
||
---出售道具
|
||
function XGoldenMinerManager.RequestGoldenMinerSell(index, cb)
|
||
local req = {
|
||
Index = index --出售的道具格子Id
|
||
}
|
||
XNetwork.CallWithAutoHandleErrorCode("GoldenMinerSellPriceRequest", req, function(res)
|
||
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
|
||
dataDb:UpdateStageScores(res.AfterScore) --剩余的积分
|
||
dataDb:UseItem(index)
|
||
dataDb:BackupsItemColums()
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
XUiManager.TipText("GoldenMinerSellSuccess")
|
||
end)
|
||
end
|
||
|
||
---更新新解锁的角色卡
|
||
function XGoldenMinerManager.NotifyGoldenMinerCharacterProgress(data)
|
||
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
|
||
dataDb:UpdateNewCharacter(data.UnlockCharacter)
|
||
dataDb:UpdateRedEnvelopeProgress(data.RedEnvelopeProgress)
|
||
dataDb:UpdateTotalPlayCount(data.TotalPlayCount)
|
||
end
|
||
|
||
---通知当前游戏流程数据
|
||
function XGoldenMinerManager.NotifyGoldenMinerGameInfo(data)
|
||
_CurActivityId = data.StageDataDb.ActivityId
|
||
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
|
||
dataDb:UpdateData(data.StageDataDb)
|
||
dataDb:BackupsItemColums()
|
||
end
|
||
|
||
---进图同步道具
|
||
function XGoldenMinerManager.NotifyGoldenMinerItemData(data)
|
||
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
|
||
dataDb:UpdateItemColumns(data.ItemColumns)
|
||
dataDb:BackupsItemColums()
|
||
end
|
||
--endregion
|
||
|
||
--region Record 埋点
|
||
---@param uiType number XGoldenMinerConfigs.CLIENT_RECORD_UI
|
||
function XGoldenMinerManager.RecordSaveStage(uiType)
|
||
if not XGoldenMinerManager.IsCanKeepBattle() then
|
||
return
|
||
end
|
||
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
|
||
local stageId, _ = uiType == XGoldenMinerConfigs.CLIENT_RECORD_UI.UI_STAGE and dataDb:GetCurStageId() or dataDb:GetLastFinishStageId()
|
||
local useCharacterId = XGoldenMinerManager.GetUseCharacterId()
|
||
XGoldenMinerManager._ClientRecord(uiType, XGoldenMinerConfigs.CLIENT_RECORD_ACTION.SAVE_STAGE, useCharacterId, stageId)
|
||
end
|
||
|
||
---@param uiType number XGoldenMinerConfigs.CLIENT_RECORD_UI
|
||
---@param actionType number XGoldenMinerConfigs.CLIENT_RECORD_ACTION
|
||
function XGoldenMinerManager.RecordPreviewStage(uiType, actionType)
|
||
if not XGoldenMinerManager.IsCanKeepBattle() then
|
||
return
|
||
end
|
||
local dataDb = XGoldenMinerManager.GetGoldenMinerDataDb()
|
||
local stageId, _ = dataDb:GetLastFinishStageId()
|
||
local useCharacterId = XGoldenMinerManager.GetUseCharacterId()
|
||
local previewStageId = dataDb:GetCurStageId()
|
||
XGoldenMinerManager._ClientRecord(uiType, actionType, useCharacterId, stageId, previewStageId)
|
||
end
|
||
|
||
---@param uiType number XGoldenMinerConfigs.CLIENT_RECORD_UI
|
||
---@param actionType number XGoldenMinerConfigs.CLIENT_RECORD_ACTION
|
||
function XGoldenMinerManager._ClientRecord(uiType, actionType, useChar, stageId, previewStageId)
|
||
local dir = {}
|
||
dir["ui_type"] = uiType
|
||
dir["action_type"] = actionType
|
||
dir["use_char"] = useChar
|
||
dir["stage_id"] = stageId
|
||
dir["preview_stage_id"] = previewStageId or 0
|
||
CS.XRecord.Record(dir, "900001", "GoldenMinerClientRecord")
|
||
end
|
||
--endregion
|
||
|
||
-- 意义不明?
|
||
--_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
|
||
|
||
XRpc.NotifyGoldenMinerItemData = function(data)
|
||
XDataCenter.GoldenMinerManager.NotifyGoldenMinerItemData(data)
|
||
end
|
||
---------------------(服务器推送)end-------------------- |