PGRData/Script/matrix/xconfig/XPassportConfigs.lua

601 lines
21 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 tableInsert = table.insert
local tableSort = table.sort
local ipairs = ipairs
local pairs = pairs
local stringGsub = string.gsub
local CSXTextManagerGetText = CS.XTextManager.GetText
local TABLE_PASSPORT_ACTIVITY_PATH = "Share/Passport/PassportActivity.tab"
local TABLE_PASSPORT_LEVEL_PATH = "Share/Passport/PassportLevel.tab"
local TABLE_PASSPORT_REWARD_PATH = "Share/Passport/PassportReward.tab"
local TABLE_PASSPORT_TYPE_INFO_PATH = "Share/Passport/PassportTypeInfo.tab"
local TABLE_PASSPORT_TASK_GROUP_PATH = "Share/Passport/PassportTaskGroup.tab"
local TABLE_PASSPORT_BUY_FASHION_SHOW_PATH = "Client/Passport/PassportBuyFashionShow.tab"
local TABLE_PASSPORT_BUY_REWARD_SHOW_PATH = "Client/Passport/PassportBuyRewardShow.tab"
local PassportActivityConfigs = {}
local PassportLevelConfigs = {}
local PassportRewardConfigs = {}
local PassportTypeInfoConfigs = {}
local PassportTaskGroupConfigs = {}
local PassportBuyFashionShowConfigs = {}
local PassportBuyRewardShowConfigs = {}
local PassportActivityIdToLevelIdList = {}
local PassportRewardIdDic = {}
local PassportActivityIdToTypeInfoIdList = {}
local PassportActivityAndLevelToLevelIdDic = {}
local PassportIdToPassportRewardIdList = {}
local PassportIdToBuyRewardShowIdList = {}
local DefaultActivityId = 1
XPassportConfigs = XPassportConfigs or {}
--任务类型
XPassportConfigs.TaskType = {
Activity = 0, --活动任务(前端自定义)
Daily = 1, --每日任务
Weekly = 2, --每周任务
}
local InitPassportActivityId = function()
for activityId, config in pairs(PassportActivityConfigs) do
if XTool.IsNumberValid(config.TimeId) then
DefaultActivityId = activityId
break
end
DefaultActivityId = activityId
end
end
local InitPassportActivityIdToLevelIdList = function()
for _, v in pairs(PassportLevelConfigs) do
if not PassportActivityIdToLevelIdList[v.ActivityId] then
PassportActivityIdToLevelIdList[v.ActivityId] = {}
end
tableInsert(PassportActivityIdToLevelIdList[v.ActivityId], v.Id)
end
for _, idList in pairs(PassportActivityIdToLevelIdList) do
tableSort(idList, function(a, b)
return a < b
end)
end
end
local InitPassportRewardIdDic = function()
for _, v in pairs(PassportRewardConfigs) do
if not PassportRewardIdDic[v.PassportId] then
PassportRewardIdDic[v.PassportId] = {}
end
PassportRewardIdDic[v.PassportId][v.Level] = v.Id
end
end
local InitPassportIdToPassportRewardIdList = function()
for _, v in pairs(PassportRewardConfigs) do
if not PassportIdToPassportRewardIdList[v.PassportId] then
PassportIdToPassportRewardIdList[v.PassportId] = {}
end
tableInsert(PassportIdToPassportRewardIdList[v.PassportId], v.Id)
end
for _, idList in pairs(PassportIdToPassportRewardIdList) do
tableSort(idList, function(a, b)
local levelA = XPassportConfigs.GetPassportRewardLevel(a)
local levelB = XPassportConfigs.GetPassportRewardLevel(b)
if levelA ~= levelB then
return levelA < levelB
end
return a < b
end)
end
end
local InitPassportActivityIdToTypeInfoIdList = function()
for _, v in pairs(PassportTypeInfoConfigs) do
if not PassportActivityIdToTypeInfoIdList[v.ActivityId] then
PassportActivityIdToTypeInfoIdList[v.ActivityId] = {}
end
tableInsert(PassportActivityIdToTypeInfoIdList[v.ActivityId], v.Id)
end
for _, idList in pairs(PassportActivityIdToTypeInfoIdList) do
tableSort(idList, function(a, b)
return a < b
end)
end
end
local InitPassportActivityAndLevelToLevelIdDic = function()
for _, v in pairs(PassportLevelConfigs) do
if not PassportActivityAndLevelToLevelIdDic[v.ActivityId] then
PassportActivityAndLevelToLevelIdDic[v.ActivityId] = {}
end
PassportActivityAndLevelToLevelIdDic[v.ActivityId][v.Level] = v.Id
end
end
local InitPassportIdToBuyRewardShowIdList = function()
for _, v in pairs(PassportBuyRewardShowConfigs) do
if not PassportIdToBuyRewardShowIdList[v.PassportId] then
PassportIdToBuyRewardShowIdList[v.PassportId] = {}
end
if XTool.IsNumberValid(v.Id) then
tableInsert(PassportIdToBuyRewardShowIdList[v.PassportId], v.Id)
end
end
for _, idList in pairs(PassportIdToBuyRewardShowIdList) do
tableSort(idList, function(a, b)
local levelA = XPassportConfigs.GetPassportBuyRewardShowLevel(a)
local levelB = XPassportConfigs.GetPassportBuyRewardShowLevel(b)
if levelA ~= levelB then
return levelA > levelB
end
return a < b
end)
end
end
function XPassportConfigs.Init()
PassportActivityConfigs = XTableManager.ReadByIntKey(TABLE_PASSPORT_ACTIVITY_PATH, XTable.XTablePassportActivity, "Id")
PassportLevelConfigs = XTableManager.ReadByIntKey(TABLE_PASSPORT_LEVEL_PATH, XTable.XTablePassportLevel, "Id")
PassportRewardConfigs = XTableManager.ReadByIntKey(TABLE_PASSPORT_REWARD_PATH, XTable.XTablePassportReward, "Id")
PassportTypeInfoConfigs = XTableManager.ReadByIntKey(TABLE_PASSPORT_TYPE_INFO_PATH, XTable.XTablePassportTypeInfo, "Id")
PassportTaskGroupConfigs = XTableManager.ReadByIntKey(TABLE_PASSPORT_TASK_GROUP_PATH, XTable.XTablePassportTaskGroup, "Id")
PassportBuyFashionShowConfigs = XTableManager.ReadByIntKey(TABLE_PASSPORT_BUY_FASHION_SHOW_PATH, XTable.XTablePassportBuyFashionShow, "PassportId")
PassportBuyRewardShowConfigs = XTableManager.ReadByIntKey(TABLE_PASSPORT_BUY_REWARD_SHOW_PATH, XTable.XTablePassportBuyRewardShow, "Id")
InitPassportActivityId()
InitPassportActivityIdToLevelIdList()
InitPassportRewardIdDic()
InitPassportIdToPassportRewardIdList()
InitPassportActivityIdToTypeInfoIdList()
InitPassportActivityAndLevelToLevelIdDic()
InitPassportIdToBuyRewardShowIdList()
end
-----------------PassportActivity 活动相关 begin-----------------------
local GetPassportActivityConfig = function(id)
local config = PassportActivityConfigs[id]
if not config then
XLog.ErrorTableDataNotFound("XPassportConfigs.GetPassportActivityConfig", "PassportActivityConfigs", TABLE_PASSPORT_ACTIVITY_PATH, "Id", id)
return
end
return config
end
function XPassportConfigs.SetDefaultActivityId(activityId)
DefaultActivityId = activityId
end
function XPassportConfigs.GetDefaultActivityId()
return DefaultActivityId
end
function XPassportConfigs.GetPassportActivityTimeId()
local activityId = XPassportConfigs.GetDefaultActivityId()
local config = GetPassportActivityConfig(activityId)
return config.TimeId
end
function XPassportConfigs.GetPassportDailyTaskGroup()
local activityId = XPassportConfigs.GetDefaultActivityId()
local config = GetPassportActivityConfig(activityId)
return config.DailyTaskGroup
end
function XPassportConfigs.GetPassportWeekTaskGroup()
local activityId = XPassportConfigs.GetDefaultActivityId()
local config = GetPassportActivityConfig(activityId)
return config.WeekTaskGroup
end
function XPassportConfigs.GetPassportBuyPassPortEarlyEndTime()
local activityId = XPassportConfigs.GetDefaultActivityId()
local config = GetPassportActivityConfig(activityId)
return config.BuyPassPortEarlyEndTime -- 英文服采用国服逻辑
-- return config.ClientBuyPassPortEarlyEndTime -- 由于日服客户端有独立的限制时间(客户端独立判断显示)
end
function XPassportConfigs.GetPassportBPTask()
local activityId = XPassportConfigs.GetDefaultActivityId()
local config = GetPassportActivityConfig(activityId)
return config and config.BPTask or {}
end
function XPassportConfigs.GetPassportBPTaskTotalCount()
local taskList = XPassportConfigs.GetPassportBPTask()
return #taskList
end
-----------------PassportActivity 活动相关 end-------------------------
-----------------PassportLevel 等级 begin-----------------------
local GetPassportLevelConfig = function(id)
local config = PassportLevelConfigs[id]
if not config then
XLog.ErrorTableDataNotFound("XPassportConfigs.GetPassportLevelConfig", "PassportLevelConfigs", TABLE_PASSPORT_LEVEL_PATH, "Id", id)
return
end
return config
end
function XPassportConfigs.GetPassportLevelIdList(activityId)
return PassportActivityIdToLevelIdList[activityId] or {}
end
function XPassportConfigs.GetPassportLevel(id)
local config = GetPassportLevelConfig(id)
return config.Level
end
function XPassportConfigs.GetPassportLevelTotalExp(id)
local config = GetPassportLevelConfig(id)
return config.TotalExp
end
function XPassportConfigs.GetPassportLevelCostItemId(id)
local config = GetPassportLevelConfig(id)
return config.CostItemId
end
function XPassportConfigs.GetPassportLevelCostItemCount(id)
local config = GetPassportLevelConfig(id)
return config.CostItemCount
end
function XPassportConfigs.GetPassportMaxLevel()
local activityId = XPassportConfigs.GetDefaultActivityId()
local levelIdList = XPassportConfigs.GetPassportLevelIdList(activityId)
local maxLevel = 0
local levelCfg
for _, levelId in ipairs(levelIdList) do
levelCfg = XPassportConfigs.GetPassportLevel(levelId)
if levelCfg > maxLevel then
maxLevel = levelCfg
end
end
return maxLevel
end
function XPassportConfigs.GetPassportLevelId(level)
local activityId = XPassportConfigs.GetDefaultActivityId()
return PassportActivityAndLevelToLevelIdDic[activityId] and PassportActivityAndLevelToLevelIdDic[activityId][level]
end
function XPassportConfigs.GetPassportLevelTotalExpByLevel(level)
local id = XPassportConfigs.GetPassportLevelId(level)
local config = GetPassportLevelConfig(id)
return config.TotalExp
end
function XPassportConfigs.IsPassportTargetLevel(id)
local config = GetPassportLevelConfig(id)
return XTool.IsNumberValid(config.IsTargetLevel)
end
--返回下一个目标的等级
function XPassportConfigs.GetPassportTargetLevel(currLevel)
local activityId = XPassportConfigs.GetDefaultActivityId()
local levelIdList = XPassportConfigs.GetPassportLevelIdList(activityId)
local lastLevelIdIndex = #levelIdList
local levelCfg
for i, levelId in ipairs(levelIdList) do
levelCfg = XPassportConfigs.GetPassportLevel(levelId)
if (levelCfg >= currLevel or i == lastLevelIdIndex) and XPassportConfigs.IsPassportTargetLevel(levelId) then
return levelCfg
end
end
end
function XPassportConfigs.GetBuyLevelCostItemId()
local activityId = XPassportConfigs.GetDefaultActivityId()
local levelIdList = XPassportConfigs.GetPassportLevelIdList(activityId)
for _, levelId in ipairs(levelIdList) do
return XPassportConfigs.GetPassportLevelCostItemId(levelId)
end
end
-----------------PassportLevel 等级 end-------------------------
-----------------PassportReward 奖励 begin-----------------------
local GetPassportRewardConfig = function(id)
local config = PassportRewardConfigs[id]
if not config then
XLog.ErrorTableDataNotFound("XPassportConfigs.GetPassportRewardConfig", "PassportRewardConfigs", TABLE_PASSPORT_REWARD_PATH, "Id", id)
return
end
return config
end
function XPassportConfigs.GetPassportRewardPassportId(id)
local config = GetPassportRewardConfig(id)
return config.PassportId
end
function XPassportConfigs.GetPassportRewardId(id)
local config = GetPassportRewardConfig(id)
return config.RewardId
end
function XPassportConfigs.GetPassportRewardData(passportRewardId)
local rewardId = XPassportConfigs.GetPassportRewardId(passportRewardId)
local rewards = XTool.IsNumberValid(rewardId) and XRewardManager.GetRewardList(rewardId)
return rewards and rewards[1]
end
function XPassportConfigs.GetPassportRewardLevel(id)
local config = GetPassportRewardConfig(id)
return config.Level
end
function XPassportConfigs.GetPassportRewardIdList(passportId)
return PassportIdToPassportRewardIdList[passportId]
end
--获得奖励表的id
function XPassportConfigs.GetRewardIdByPassportIdAndLevel(passportId, level)
return PassportRewardIdDic[passportId] and PassportRewardIdDic[passportId][level]
end
--返回对应等级的已解锁的通行证奖励
function XPassportConfigs.GetUnLockPassportRewardIdListByLevel(level)
local typeInfoIdList = XPassportConfigs.GetPassportActivityIdToTypeInfoIdList()
local unLockPassportRewardIdList = {}
local rewardId
local passportRewardId
for _, passportId in ipairs(typeInfoIdList) do
if XDataCenter.PassportManager.GetPassportInfos(passportId) then
passportRewardId = XPassportConfigs.GetRewardIdByPassportIdAndLevel(passportId, level)
rewardId = XPassportConfigs.GetPassportRewardId(passportRewardId)
if XTool.IsNumberValid(rewardId) then
tableInsert(unLockPassportRewardIdList, passportRewardId)
end
end
end
return unLockPassportRewardIdList
end
function XPassportConfigs.IsPassportPrimeReward(id)
local config = GetPassportRewardConfig(id)
return config.IsPrimeReward
end
-----------------PassportReward 奖励 end-------------------------
-----------------PassportTypeInfo 通行证类型 begin-----------------------
local GetPassportTypeInfoConfig = function(id)
local config = PassportTypeInfoConfigs[id]
if not config then
XLog.ErrorTableDataNotFound("XPassportConfigs.GetPassportTypeInfoConfig", "PassportTypeInfoConfigs", TABLE_PASSPORT_TYPE_INFO_PATH, "Id", id)
return
end
return config
end
function XPassportConfigs.GetPassportTypeInfoRewardId(id)
local config = GetPassportTypeInfoConfig(id)
return config.RewardId
end
function XPassportConfigs.GetPassportTypeInfoName(id)
local config = GetPassportTypeInfoConfig(id)
return config.Name or ""
end
function XPassportConfigs.GetPassportTypeInfoCostItemId(id)
local config = GetPassportTypeInfoConfig(id)
return config.CostItemId
end
function XPassportConfigs.GetPassportTypeInfoCostItemCount(id)
local config = GetPassportTypeInfoConfig(id)
return config.CostItemCount
end
function XPassportConfigs.GetPassportTypeInfoRewardId(id)
local config = GetPassportTypeInfoConfig(id)
return config.RewardId
end
function XPassportConfigs.GetPassportTypeInfoBuyDesc(id)
local config = GetPassportTypeInfoConfig(id)
return config.BuyDesc or ""
end
function XPassportConfigs.GetPassportTypeInfoIcon(id)
local config = GetPassportTypeInfoConfig(id)
return config.Icon
end
function XPassportConfigs.GetPassportActivityIdToTypeInfoIdList()
local activityId = XPassportConfigs.GetDefaultActivityId()
return PassportActivityIdToTypeInfoIdList[activityId]
end
-- function XPassportConfigs.GetPassportTypeInfoIsFree(id)
-- local config = GetPassportTypeInfoConfig(id)
-- return config.IsFree
-- end
function XPassportConfigs.GetPassportTypeInfoPayKeySuffix(id)
local config = GetPassportTypeInfoConfig(id)
return config.PayKeySuffix
end
-----------------PassportTypeInfo 通行证类型 end-------------------------
-----------------PassportTaskGroup 任务 begin--------------------------
local GetPassportTaskGroupConfig = function(id)
local config = PassportTaskGroupConfigs[id]
if not config then
XLog.ErrorTableDataNotFound("XPassportConfigs.GetPassportTaskGroupConfig", "PassportTaskGroupConfigs", TABLE_PASSPORT_TASK_GROUP_PATH, "Id", id)
return
end
return config
end
function XPassportConfigs.GetPassportTaskGroupTaskIdList(id)
local config = GetPassportTaskGroupConfig(id)
return config.TaskId
end
function XPassportConfigs.GetPassportTaskGroupTimeId(id)
local config = GetPassportTaskGroupConfig(id)
return config.TimeId
end
function XPassportConfigs.GetPassportTaskGroupCurrOpenTaskIdList(type)
for _, v in pairs(PassportTaskGroupConfigs) do
if v.Type == type and XFunctionManager.CheckInTimeByTimeId(v.TimeId) then
return XPassportConfigs.GetPassportTaskGroupTaskIdList(v.Id)
end
end
return {}
end
function XPassportConfigs.GetPassportTaskGroupIdByType(type)
for _, v in pairs(PassportTaskGroupConfigs) do
if v.Type == type and XFunctionManager.CheckInTimeByTimeId(v.TimeId) then
return v.Id
end
end
end
--获得总周数和当前第几周
function XPassportConfigs.GetPassportWeeklyTaskGroupCountAndCurrWeekly()
local nowServerTime = XTime.GetServerNowTimestamp()
local weekTaskGroup = XPassportConfigs.GetPassportWeekTaskGroup()
local totalCount = 0
local currWeekly = 0
local startTime
for _, v in pairs(PassportTaskGroupConfigs) do
startTime = XFunctionManager.GetStartTimeByTimeId(v.TimeId)
if v.Type == XPassportConfigs.TaskType.Weekly and v.Group == weekTaskGroup then
if nowServerTime >= startTime then
currWeekly = currWeekly + 1
end
totalCount = totalCount + 1
end
end
currWeekly = XTool.IsNumberValid(currWeekly) and currWeekly or 1 --默认第1周
return totalCount, currWeekly
end
-----------------PassportTaskGroup 任务 end----------------------------
-----------------PassportBuyFashionShowConfig 购买通行证界面展示的时装相关 start----------------------------
local GetPassportBuyFashionShowConfig = function(id)
local config = PassportBuyFashionShowConfigs[id]
if not config then
XLog.ErrorTableDataNotFound("XPassportConfigs.GetPassportBuyFashionShowConfig", "PassportBuyFashionShowConfigs", TABLE_PASSPORT_BUY_FASHION_SHOW_PATH, "PassportId", id)
return
end
return config
end
function XPassportConfigs.GetPassportBuyFashionShowIcon(id)
local config = GetPassportBuyFashionShowConfig(id)
return config.Icon
end
function XPassportConfigs.GetPassportBuyFashionShowFashionId(id)
local config = GetPassportBuyFashionShowConfig(id)
return config.FashionId
end
function XPassportConfigs.IsPassportBuyFashionShowIsWeaponFahion(id)
local config = GetPassportBuyFashionShowConfig(id)
return XTool.IsNumberValid(config.IsWeaponFahion) and true or false
end
-----------------PassportBuyFashionShowConfig 购买通行证界面展示的时装相关 end------------------------------
-----------------PassportBuyRewardShowConfig 购买通行证界面展示的道具相关 start----------------------------
local GetPassportBuyRewardShowConfig = function(id)
local config = PassportBuyRewardShowConfigs[id]
if not config then
XLog.ErrorTableDataNotFound("XPassportConfigs.GetPassportBuyRewardShowConfig", "PassportBuyRewardShowConfigs", TABLE_PASSPORT_BUY_REWARD_SHOW_PATH, "Id", id)
return
end
return config
end
function XPassportConfigs.GetPassportBuyRewardShowLevel(id)
local config = GetPassportBuyRewardShowConfig(id)
return config.Level
end
function XPassportConfigs.GetPassportBuyRewardShowCount(id)
local config = GetPassportBuyRewardShowConfig(id)
return config.ShowCount
end
function XPassportConfigs.GetPassportBuyRewardShowRewardData(id, isNotCount)
local config = GetPassportBuyRewardShowConfig(id)
local rewardId = config.RewardId
local rewards = isNotCount and XRewardManager.GetRewardListNotCount(rewardId) or XRewardManager.GetRewardList(rewardId)
return rewards and rewards[1]
end
function XPassportConfigs.GetBuyRewardShowIdList(passportId)
return PassportIdToBuyRewardShowIdList[passportId] or {}
end
-----------------PassportBuyRewardShowConfig 购买通行证界面展示的道具相关 end------------------------------
----------------- 无限区奖励 start----------------------------
local LevelIdListSeparate = {}
XPassportConfigs.XPassportRewardType = {
None = 0,
Normal = 1,
Infinite = 2
}
-- 最大可购买等级 = 最大等级
function XPassportConfigs.GetPassportMaxBuyableLevel()
local activityId = XPassportConfigs.GetDefaultActivityId()
local levelIdList = XPassportConfigs.GetPassportLevelIdList(activityId)
local maxLevel = 0
for i = 1, #levelIdList do
local id = levelIdList[i]
if XPassportConfigs.IsInfReward(id) then
break
end
local level = XPassportConfigs.GetPassportLevel(id)
if level > maxLevel then
maxLevel = level
end
end
return maxLevel
end
function XPassportConfigs.GetPassportLevelIdListByRewardType(activityId, rewardType)
LevelIdListSeparate[activityId] = LevelIdListSeparate[activityId] or {}
local result = LevelIdListSeparate[activityId][rewardType]
if result then
return result
end
result = {}
local levelIdList = XPassportConfigs.GetPassportLevelIdList(activityId)
for i = 1, #levelIdList do
local id = levelIdList[i]
if rewardType == XPassportConfigs.GetRewardType(id) then
result[#result + 1] = id
end
end
LevelIdListSeparate[activityId][rewardType] = result
return result
end
function XPassportConfigs.GetRewardType(id)
return XPassportConfigs.IsInfReward(id) and XPassportConfigs.XPassportRewardType.Infinite or
XPassportConfigs.XPassportRewardType.Normal
end
function XPassportConfigs.IsInfReward(id)
local costItemId = XPassportConfigs.GetPassportLevelCostItemId(id)
return not costItemId or costItemId == 0
end
----------------- 无限区奖励 end------------------------------