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------------------------------