local ItemSources_Model = {} local private = {} ItemSources_Model.SourceType = { None = 0, MainBarrier = 1, RingDaily = 2, TeamDungeonQuYang = 3, TeamDungeonXuZhou = 4, WorldBoss = 5, HeroBiography = 6, ClimbTower = 7, SoloFight = 8, FairPlay = 9, Battle3V3 = 10, BossChallenge = 11, Activation = 12, DrawCard = 13, ResourcesChapter = 14, Store = 15, GuildBoss = 16, RebelStrike = 17, --打开叛军突袭主界面 Guild = 18, OfficialPosition = 19, HeroSelect = 20, Formation = 21, MagicWeapon = 22, WarHorse = 23, Treasure = 24, Friend = 25, ChapterGoal = 26, RebelStrikeAim = 27, -- 打开叛军突袭目标界面 PersonalBoss = 28, -- 个人boss GuildParty = 29, GuildWar = 30, GuildDonate = 31, -- 势力捐献 GuildAllies = 32, -- 合纵连横 GoldenHeroStory = 33, -- 金将——秘闻 GoldenHeroBoss = 34, -- 金将——协同讨伐 Mansion = 35, -- 府邸 Stratagem = 36, -- 计略装备一览页面 HeroStrenthen = 37, -- 武将修炼 MultiplayerDungeon = 39, -- 多人难度副本 SyncSolo = 40, -- 同步1V1 Nobility = 41, -- 进爵界面 DigTreasure = 42, -- 挖宝 BatchItem = 43, -- 合成 Confrontation = 44, -- 对抗界面 HeroLevelUp = 50, -- 武将升级 FightThrone = 60, -- 逐鹿中原 TeamDungeonGuanDu = 61, -- 官渡鏖战 MagicWeaponForge = 75, -- 神兵锻造 Recharge = 80, -- 充值 TotalTopUp = 81, -- 累充 MonthCard = 82, -- 月卡 DailyGift = 83, -- 每日礼包 LevelFund = 84, -- 成长基金 OfficialFund = 85, -- 官职基金 PushGift = 86, -- 限时特惠/定向礼包 FirstCharge = 87, -- 首充 HeroBreak = 88, -- 武将突破 HeroAdvanced = 89, -- 武将进阶 HeroRelation = 90, -- 武将羁绊 AssistanceFight = 91, -- 助阵 HeroLibrary = 92, -- 名将录 MagicWeaponBreak = 93, -- 神兵突破 EquipBase = 94, -- 装备基础 EquipRefine = 95, -- 装备洗炼 EquipStrength = 96, -- 装备强化 EquipGem = 97, -- 装备宝石 HorseBreak = 98, -- 坐骑突破 HorseRelation = 99, -- 坐骑羁绊 TreasureBreak = 100, -- 宝物突破 Title = 101, -- 称号 GuildCultivation = 102, -- 韬略策论 Resonance = 103, -- 巅峰境界 CampArray = 104, -- 阵营连携 Auction = 105, -- 拍卖行 HeroAppearance = 106, -- 武将时装 PayMall = 107, -- 商城 FriendApply = 108, -- 好友申请 GuildInvitedIn = 109, -- 势力邀请 DailyActivation = 110, -- 日常活动 TeamInvite = 111, -- 组队邀请 FunctionClimbTower = 112, -- 爬塔领奖 FullEnergy = 113, -- 体力满 Mail = 114, -- 邮件 PresonChat = 115, -- 私聊 TeamApply = 116, -- 入队申请 HonorOrder = 117, -- 战令 GoldenHeroStore = 118, -- 金将——商店 Monopoly = 120, -- 大富翁 DailySignIn = 121, -- 每日签到 DirectGift = 122, -- 直购礼包 Hegemony = 123, -- 霸业之始 ReservedGift = 124, -- 预约豪礼 Achievement = 125, -- 成就系统 TreasureSoulCrystal = 126, -- 商城-附灵商店 EquipStar = 127, -- 装备升星套装 GodBeast = 128, -- 神兽 GodBeastParadise = 129, -- 神兽福地 DrawStrawsMain = 130, -- 福利抽签 DrawStrawsTask = 131, -- 福利抽签任务 CountryWorldBoss = 132, -- 战区世界boss StratagemDetail = 134, -- 计略详情 PetDetail = 135, -- 宠物详情 ClassicBattle = 150, -- 经典战役 HeroLightEffect = 151, -- 武将光效 MagicWeaponFashion = 152, -- 神兵时装 SetAutoOpenRewardBoxWater = 161, --设置水宝箱 SetAutoOpenRewardBoxDirt = 162, --设置土宝箱 SetAutoOpenRewardBoxWood = 163, --设置木宝箱 GuildSalary = 423, -- 势力工资 GuildMine = 650, -- 势力挖矿 GuildMine_Reward = 651, -- 势力挖矿--收获界面 GuildMine_Help = 652, -- 势力挖矿--援助日志 DemonGod = 812, -- 魔神降世 CountryWantedTask = 820, -- 国战悬赏任务 Storm = 840, -- 暴风 ThreeTeamFightMain = 1008, --群雄演武 HeroFund = 1501, --名将之路 HorseFund = 1502, --玉络金鞍(坐骑之路) TreasureFund = 1503, --物华天宝(宝物之路) GoldIngotFund = 1504, --元宝战令 GoldHeroReprint = 100001, -- 日服金将返场抽卡活动 GoldHeroActivity = 10001, --武圣列传-限时礼包 (运营活动相关) Monopoly_Task = 10003, --九州秘宝-活跃任务(运营活动相关) Monopoly_GiftBag = 10004, --九州秘宝-超级豪礼(运营活动相关) ActivityItem_Yuanbao = 10005, --元宝购买(运营活动相关) ActivityItem_LongYu = 10006, --龙玉购买(运营活动相关) CommandTheWorldMain = 10023, --号令天下活动主界面 NewYearExchange = 10043, --新年活动——交换 NewYearPray = 10044, --新年活动——祈福 GoldenHeroMain_GY = 10200, -- 金将关羽——主界面 GoldenHeroMain_SSX = 10300, -- 金将孙尚香——主界面 GoldenHeroMain_DC = 10400, -- 金将貂蝉——主界面 GoldenHeroMain_CC = 10500, -- 金将曹操——主界面 GoldenHeroMain_SJ = 10600, -- 金将孙坚——主界面 GoldenHeroMain_ZL = 10700, -- 金将张辽——主界面 GoldenHeroMain_TSC = 10800, -- 金将太史慈——主界面 GoldenHeroMain_HYY = 10900, -- 金将黄月英——主界面 GoldenHeroMain_ZJ = 10910, -- 金将甄姬——主界面 GoldenHeroMain_GN = 10920, -- 金将甘宁——主界面 GoldenHeroMain_JX = 10930, -- 金将贾诩——主界面 GoldenHeroMain_LM = 10940, -- 金将吕蒙——主界面 GuildEscortMain = 17353, -- 势力押镖主界面 Rank_GuildEscort = 17354, -- 排行榜势力运镖界面 GuildTarget = 17355, -- 势力共建 GuildEscortReport = 17356, -- 势力战报 SuperGoldMain_ZhouYu = 20101, -- 彩金周瑜——主界面 SuperGoldMain_ZhuGeLiang = 20201, -- 彩金诸葛亮——主界面 SuperGoldMain_DianWei = 20301, -- 彩金典韦——主界面 SuperGoldMain_MaChao = 20401, -- 彩金马超——主界面 SuperGoldMain_ZuoCi = 20501, -- 彩金左慈——主界面 SuperGoldStory = 20202, -- 彩金活动——体验关 SuperGoldBoss = 20203, -- 彩金活动——英雄试炼 SuperGoldLottery = 20204, -- 彩金活动——司仪密藏 SuperGoldHonorOrder = 20205, -- 彩金活动——金箱玉匮 SceneQuiz = 20030, -- 一站到底答题 HeroMatch1v1 = 21751, -- 天地群雄 HeroMatch3v3 = 34648, -- 天地群雄3v3 SpecialTeamApply = 34649, -- 战团申请 SpecialTeamInvite = 34650, -- 战团邀请 NationClimbTowerEntry = 23942, -- 四国爬塔入口 HorseAppearance = 24858, -- 坐骑外观 OpenRedPacket = 26991, -- 打开红包 Country = 27200, -- 国家界面 CountrySalaryBase = 27201, -- 俸禄仓库 DragonArteryMain = 27304, --龙脉主界面 DragonArteryRankResult = 27305, --龙脉排行结算 CountryNightBossMain = 830, -- 国战晚间boss FairSoloTournament = 30650, --天下会武 FairSoloTournament_GroupRecommend = 30651, --天下会武小组推荐,无小组赛直接主界面 FairSoloTournament_GroupRank = 30652, --天下会武小组排名,无小组赛直接主界面 RecycleFragment = 31181, --纳灵 GVGFight = 32408, -- 攻城略地 HonorSinget = 24860, --印记 HorseSoul = 24859, --魂珠 HorseEquip = 24862, --战装 ChangAnSiege = 24861, --长安攻城战 PetMain = 670, --宠物主界面 PetBreed = 671, --宠物繁殖 PetBreedApply = 672, --宠物繁殖邀请 PetCatch = 673, --宠物捕捉 PetChoose = 674, --宠物选择 PetNormalRelease = 675, --普通宠物放生 PetVariationRelease = 676, --变异宠物放生 PetIllustratedHandbook = 677, --宠物图鉴 TurntableMain = 10061, SlgGvE = 680, --汉中风云势力SlgGvE ItemTips = 690, --打开道具tips TeamFairChampionship = 41700, --天下会武3V3 TeamFairChampionshipRank = 41701, --天下会武3V3排行或者主界面 TeamFairChampionshipGuess = 41702, --天下会武3V3竞猜 soloFightInfoReminder = 44070, --演武对决信息球 threeTeamFightInfoReminder = 44071, --群雄演武信息球 SubjectMonth = 700, } --国家活动跳转和活动的映射 private.CountryActivityMapping = { [ItemSources_Model.SourceType.CountryWantedTask] = LuaConst.ActivityType.WantedTask, [ItemSources_Model.SourceType.DragonArteryMain] = LuaConst.ActivityType.DragonArtery, [ItemSources_Model.SourceType.CountryNightBossMain] = LuaConst.ActivityType.CountryNightBoss, } function ItemSources_Model.OnStartup() --private.jadeSourceIdList = {} private.ServerItemSourcesMapData = {} end function ItemSources_Model.GetItemSourcesNumById(itemId) return #ItemSources_Model.GetItemSourcesById(itemId) end function private.SortItemSources(sourceDataA, sourceDataB) local isUnlockA = sourceDataA.isUnlock local isUnlockB = sourceDataB.isUnlock if isUnlockA == isUnlockB then return sourceDataA.sort < sourceDataB.sort else return isUnlockA > isUnlockB end end function ItemSources_Model.GetItemSourcesById(itemId) local data = {} local isSuccess, sourceData = DataSheetManager.ItemSourceMap:TryGetDataByItemID(itemId) if isSuccess then local sources = sourceData.SourceIds for i, v in ipairs(sources) do if v == ItemSources_Model.SourceType.ReservedGift then -- 预约豪礼 private.CheckReservedGift(data, v, itemId) elseif v == ItemSources_Model.SourceType.HonorOrder then -- 战令 private.CheckHonorOrder(data, v, itemId) elseif v == ItemSources_Model.SourceType.FirstCharge then -- 首充 private.CheckFirstCharge(data, v, itemId) elseif v == ItemSources_Model.SourceType.Hegemony then -- 霸业之始 private.CheckHegemony(data, v, itemId) elseif v == ItemSources_Model.SourceType.GoldenHeroMain_GY then -- 金将关羽 private.CheckGoldenHeroMain(MDL.GoldenHeroMain.HeroType.GY, data, v, itemId) elseif v == ItemSources_Model.SourceType.GoldenHeroMain_SSX then -- 金将孙尚香 private.CheckGoldenHeroMain(MDL.GoldenHeroMain.HeroType.SSX, data, v, itemId) elseif v == ItemSources_Model.SourceType.GoldenHeroMain_DC then -- 金将貂蝉 private.CheckGoldenHeroMain(MDL.GoldenHeroMain.HeroType.DC, data, v, itemId) elseif v == ItemSources_Model.SourceType.GoldenHeroMain_CC then -- 金将曹操 private.CheckGoldenHeroMain(MDL.GoldenHeroMain.HeroType.CC, data, v, itemId) elseif v == ItemSources_Model.SourceType.GoldenHeroMain_SJ then -- 金将孙坚 private.CheckGoldenHeroMain(MDL.GoldenHeroMain.HeroType.SJ, data, v, itemId) elseif v == ItemSources_Model.SourceType.GoldenHeroMain_ZL then -- 金将张辽 private.CheckGoldenHeroMain(MDL.GoldenHeroMain.HeroType.ZL, data, v, itemId) elseif v == ItemSources_Model.SourceType.GoldenHeroMain_TSC then -- 金将太史慈 private.CheckGoldenHeroMain(MDL.GoldenHeroMain.HeroType.TSC, data, v, itemId) elseif v == ItemSources_Model.SourceType.GoldenHeroMain_HYY then -- 金将黄月英 private.CheckGoldenHeroMain(MDL.GoldenHeroMain.HeroType.HYY, data, v, itemId) elseif v == ItemSources_Model.SourceType.GoldenHeroMain_ZJ then -- 金将甄姬 private.CheckGoldenHeroMain(MDL.GoldenHeroMain.HeroType.ZJ, data, v, itemId) elseif v == ItemSources_Model.SourceType.GoldenHeroMain_GN then -- 金将甘宁 private.CheckGoldenHeroMain(MDL.GoldenHeroMain.HeroType.GN, data, v, itemId) elseif v == ItemSources_Model.SourceType.GoldenHeroMain_JX then -- 金将贾诩 private.CheckGoldenHeroMain(MDL.GoldenHeroMain.HeroType.JX, data, v, itemId) elseif v == ItemSources_Model.SourceType.GoldenHeroMain_LM then -- 金将吕蒙 private.CheckGoldenHeroMain(MDL.GoldenHeroMain.HeroType.LM, data, v, itemId) elseif v == ItemSources_Model.SourceType.SuperGoldMain_ZhouYu then -- 彩金——周瑜 private.CheckSuperGoldMain(MDL.SuperGoldMain.HeroType.ZhouYu, data, v, itemId) elseif v == ItemSources_Model.SourceType.SuperGoldMain_ZhuGeLiang then -- 彩金诸——葛亮 private.CheckSuperGoldMain(MDL.SuperGoldMain.HeroType.ZhuGeLiang, data, v, itemId) elseif v == ItemSources_Model.SourceType.SuperGoldMain_DianWei then -- 彩金——典韦 private.CheckSuperGoldMain(MDL.SuperGoldMain.HeroType.DianWei, data, v, itemId) elseif v == ItemSources_Model.SourceType.SuperGoldMain_MaChao then -- 彩金——马超 private.CheckSuperGoldMain(MDL.SuperGoldMain.HeroType.MaChao, data, v, itemId) elseif v == ItemSources_Model.SourceType.SuperGoldMain_ZuoCi then -- 彩金——左慈 private.CheckSuperGoldMain(MDL.SuperGoldMain.HeroType.ZuoCi, data, v, itemId) elseif v == ItemSources_Model.SourceType.Monopoly then -- 大富翁 private.CheckMonopoly(data, v, itemId) elseif v == ItemSources_Model.SourceType.DirectGift then -- 直购礼包 private.CheckDirectGift(data, v, itemId) elseif v == ItemSources_Model.SourceType.PushGift then -- 定向礼包 private.CheckPushGift(data, v, itemId) elseif v == ItemSources_Model.SourceType.CommandTheWorldMain then -- 号令天下主界面 private.CheckCommandTheWorld(data, v, itemId) elseif v == ItemSources_Model.SourceType.NewYearExchange then -- 号令天下主界面 private.CheckNewYearActivity(data, v, itemId) elseif v == ItemSources_Model.SourceType.NewYearPray then -- 号令天下主界面 private.CheckNewYearActivity(data, v, itemId) elseif v == ItemSources_Model.SourceType.GuildTarget then -- 势力共建 private.CheckGuildTarget(data, v, itemId) elseif v == ItemSources_Model.SourceType.GoldHeroReprint then -- 日服金将返场抽卡活动 private.CheckGoldHeroReprint(data, v, itemId) elseif v == ItemSources_Model.SourceType.WarZoneBoss then -- 战区BOSS private.CheckWarZoneBoss(data, v, itemId) elseif v == ItemSources_Model.SourceType.SceneQuiz then -- 一站到底 private.CheckSceneQuiz(data, v, itemId) elseif v == ItemSources_Model.SourceType.HeroMatch1v1 then -- 天地群雄 private.CheckShowHeroMatch1v1Entry(data, v, itemId) elseif v == ItemSources_Model.SourceType.HeroMatch3v3 then -- 天地群雄 private.CheckShowHeroMatch3v3Entry(data, v, itemId) elseif v == ItemSources_Model.SourceType.FairSoloTournament then -- 天下会武 private.CheckFairSoloTournamentEntry(data, v, itemId) elseif private.IsCountryActivity(v) then --国战活动 private.CheckCountryActivity(data, v, itemId) elseif v == ItemSources_Model.SourceType.Country then private.CheckCountryEntry(data, v, itemId) else table.insert(data, ItemSources_Model.GetSourceDataById(v, itemId)) end end if private.ServerItemSourcesMapData then for i, ItemResourceInfo in ipairs(private.ServerItemSourcesMapData) do if ItemResourceInfo.itemId == itemId then for i, resource in ipairs(ItemResourceInfo.resources) do if resource.resourceId == ItemSources_Model.SourceType.ReservedGift then -- 预约豪礼 private.CheckReservedGift(data, resource.resourceId, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.HonorOrder then -- 战令 private.CheckHonorOrder(data, resource.resourceId, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.FirstCharge then -- 首充 private.CheckFirstCharge(data, resource.resourceId, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.Hegemony then -- 霸业之始 private.CheckHegemony(data, resource.resourceId, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.GoldenHeroMain_GY then -- 金将关羽 private.CheckActivityGoldenHeroMain(MDL.GoldenHeroMain.HeroType.GY, data, resource, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.GoldenHeroMain_SSX then -- 金将孙尚香 private.CheckActivityGoldenHeroMain(MDL.GoldenHeroMain.HeroType.SSX, data, resource, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.GoldenHeroMain_DC then -- 金将貂蝉 private.CheckActivityGoldenHeroMain(MDL.GoldenHeroMain.HeroType.DC, data, resource, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.GoldenHeroMain_CC then -- 金将曹操 private.CheckActivityGoldenHeroMain(MDL.GoldenHeroMain.HeroType.CC, data, resource, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.GoldenHeroMain_SJ then -- 金将孙坚 private.CheckActivityGoldenHeroMain(MDL.GoldenHeroMain.HeroType.SJ, data, resource, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.GoldenHeroMain_ZL then -- 金将张辽 private.CheckActivityGoldenHeroMain(MDL.GoldenHeroMain.HeroType.ZL, data, resource, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.GoldenHeroMain_TSC then -- 金将太史慈 private.CheckActivityGoldenHeroMain(MDL.GoldenHeroMain.HeroType.TSC, data, resource, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.GoldenHeroMain_HYY then -- 金将黄月英 private.CheckActivityGoldenHeroMain(MDL.GoldenHeroMain.HeroType.HYY, data, resource, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.GoldenHeroMain_ZJ then -- 金将甄姬 private.CheckActivityGoldenHeroMain(MDL.GoldenHeroMain.HeroType.ZJ, data, resource, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.GoldenHeroMain_GN then --金将甘宁 private.CheckActivityGoldenHeroMain(MDL.GoldenHeroMain.HeroType.GN, data, resource, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.GoldenHeroMain_JX then --金将贾诩 private.CheckActivityGoldenHeroMain(MDL.GoldenHeroMain.HeroType.JX, data, resource, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.SuperGoldMain_ZhouYu then -- 彩金周瑜 private.CheckActivitySuperGoldMain(MDL.SuperGoldMain.HeroType.ZhouYu, data, resource, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.SuperGoldMain_ZhuGeLiang then -- 彩金诸葛亮 private.CheckActivitySuperGoldMain(MDL.SuperGoldMain.HeroType.ZhuGeLiang, data, resource, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.Monopoly then -- 大富翁 private.CheckMonopoly(data, resource.resourceId, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.DirectGift then -- 直购礼包 private.CheckDirectGift(data, resource.resourceId, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.PushGift then -- 定向礼包 private.CheckPushGift(data, resource.resourceId, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.CommandTheWorldMain then -- 号令天下主界面 private.CheckCommandTheWorld(data, resource.resourceId, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.NewYearExchange then -- 新年活动——交换 private.CheckNewYearActivity(data, resource.resourceId, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.NewYearPray then -- 新年活动——祈福 private.CheckNewYearActivity(data, resource.resourceId, itemId) elseif v == ItemSources_Model.SourceType.GuildTarget then -- 势力共建 private.CheckGuildTarget(data, resource.resourceId, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.GoldHeroReprint then -- 日服金将返场抽卡活动 private.CheckGoldHeroReprint(data, resource.resourceId, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.GuildTarget then -- 势力共建 private.CheckGuildTarget(data, resource.resourceId, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.HeroMatch1v1 then -- 天地群雄 private.CheckShowHeroMatch1v1Entry(data, resource.resourceId, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.HeroMatch3v3 then -- 天地群雄 private.CheckShowHeroMatch3v3Entry(data, resource.resourceId, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.FairSoloTournament then -- 天下会武 private.CheckFairSoloTournamentEntry(data, resource.resourceId, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.SceneQuiz then -- 一站到底 private.CheckSceneQuiz(data, resource.resourceId, itemId) elseif private.IsCountryActivity(resource.resourceId) then --国战活动 private.CheckCountryActivity(data, resource.resourceId, itemId) elseif resource.resourceId == ItemSources_Model.SourceType.Country then private.CheckCountryEntry(data, resource.resourceId, itemId) else table.insert(data, ItemSources_Model.GetSourceDataById(resource.resourceId, itemId)) end end break end end end table.sort(data, private.SortItemSources) end return data end -- 宝物附灵-魂晶来源整合 function ItemSources_Model.GetTreasureSoulCrystalItemSourcesById() local soulCrystalItemList = {} for _, itemData in DataSheetManager.ItemData:GetEnumerator() do if itemData.FirstType == LuaConst.ItemType.SoulCrystal then table.insert(soulCrystalItemList, itemData.ID) end end local itemSourceMap = {} for _, itemId in ipairs(soulCrystalItemList) do local map = ItemSources_Model.GetItemSourcesById(itemId) for _,sourceData in ipairs(map) do local isNew = true for _,mapData in ipairs(itemSourceMap) do if mapData.sourceId == sourceData.sourceId then isNew = false break end end if isNew then sourceData.itemId = itemId table.insert(itemSourceMap, sourceData) end end end table.sort(itemSourceMap, private.SortItemSources) return itemSourceMap end function ItemSources_Model.GetSourceDataById(sourceId, itemId) local sourcesData = DataSheetManager.ItemSource:GetDataByID(sourceId) if not sourcesData then logging.error(LTAG.ERROR, "itemId为:", itemId, "的这个物品ItemSource表中没有ID为:", sourceId, "的数据!!!请策划检查!!!") end local unlockId = sourcesData.UnlockID local isUnlock = 1 --使用0,1存储方便进行排序 if unlockId > 0 and not MDL.Unlock.IsUnlock(unlockId) then isUnlock = 0 end --商城需要再检测页签是否开启 if sourceId == ItemSources_Model.SourceType.Store then if not CTL.PayMall.IsGoodInStoreByItemId(itemId, MDL.PayMall.ShopType.Store) then isUnlock = 0 end elseif sourceId == ItemSources_Model.SourceType.PayMall then if not CTL.PayMall.IsGoodInStoreByItemId(itemId, MDL.PayMall.ShopType.PayMall) then isUnlock = 0 end elseif sourceId == ItemSources_Model.SourceType.ChapterGoal then if not MDL.LevelSelect.IsRewardItemInChapterGoalAward(itemId) then isUnlock = 0 end end return { sourceId = sourceId, sort = sourcesData.Sort, desc = UIUtils.GetLocalizedTxt(Const_IDS[sourcesData.Activity]), isUnlock = isUnlock, } end function ItemSources_Model.GetHeroSourceIdList(heroId) local heroData = DataSheetManager.HeroNum:GetDataByID(heroId) local pieceSource = ItemSources_Model.GetItemSourcesById(heroData.PieceItem) local cardSource = ItemSources_Model.GetItemSourcesById(heroData.HeroItem) ---开始去重,保存成字典形式然后再保存字典的key local temp = {} if pieceSource then for i, v in ipairs(pieceSource) do temp[v.sourceId] = v end end if cardSource then for i, v in ipairs(cardSource) do temp[v.sourceId] = v end end ---排序成数组,方便之后遍历使用 local sourceIdList = {} for key, value in pairs(temp) do table.insert(sourceIdList, value) end return sourceIdList end function ItemSources_Model.SetItemSourcesIteratorData(cfgId) private.enumSourceData = ItemSources_Model.GetItemSourcesById(cfgId) private.enumNextIndex = 1 end function ItemSources_Model.EnumItemSourcesIterator() local data = private.enumSourceData[private.enumNextIndex] if data then private.enumNextIndex = private.enumNextIndex + 1 return data else return nil end end --获取同一种类不同等级的宝石的获取途径,目前用不到 --function ItemSources_Model.GetJadeSourceIdList(jadeType) -- local jadeSourceIdList = private.jadeSourceIdList[jadeType] -- if jadeSourceIdList then -- return jadeSourceIdList -- end -- -- local temp = {} -- for i, v in DataSheetManager.JadeData:GetEnumerator() do -- local id = v.ID -- local itemData = DataSheetManager.ItemData:GetDataByID(id) -- if itemData.SecondType == jadeType then -- local sourceMapData = DataSheetManager.ItemSourceMap:GetDataByItemID(id) -- if sourceMapData then -- local sourceIds = sourceMapData.SourceIds -- for index, sourceId in ipairs(sourceIds) do -- temp[sourceId] = jadeType -- end -- end -- end -- end -- local sourceIdList = {} -- for key, value in pairs(temp) do -- table.insert(sourceIdList, {sourceId = key, itemId = value}) -- end -- private.jadeSourceIdList[jadeType] = sourceIdList -- return sourceIdList --end --region ******************* 协议 **************************** ---@public 运营活动道具来源 function ItemSources_Model.SyncServerItemSourcesMapData(msgResp) if msgResp and msgResp[1] then private.ServerItemSourcesMapData = msgResp end end --endregion ******************* 协议 ***************************** --region ******************* 检查是否可跳转函数 **************************** -- 检查预约豪礼是否可跳转 function private.CheckReservedGift(data, resourceId, itemId) if MDL.ReservedGift.GetIsShowReservedGift() then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) end end -- 检查战令是否可跳转 function private.CheckHonorOrder(data, resourceId, itemId) if CTL.HonorOrder.GetHonorOrderActive() then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) end end -- 检查首充是否可跳转 function private.CheckFirstCharge(data, resourceId, itemId) if MDL.FirstCharge.HasEntry() then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) end end -- 检查霸业之始是否可跳转 function private.CheckHegemony(data, resourceId, itemId) local activityType = MDL.OperationActivity.ActivityType.Hegemony if CTL.OperationActivity.IsOperationActivityTypeUnlock(activityType) and CTL.OperationActivity.IsOperationActivityTypeOpen(activityType) and CTL.Hegemony.CheckHasReward() then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) end end -- 检查金将活动是否可跳转 function private.CheckGoldenHeroMain(goldenHeroType, data, resourceId, itemId) local activityType = MDL.OperationActivity.ActivityType.GoldenHero local functionType = MDL.Unlock.FunctionType.GoldHeroActivity if CTL.OperationActivity.IsOperationActivityTypeUnlock(activityType) and CTL.OperationActivity.IsOperationActivityTypeOpen(activityType) and (not functionType or MDL.Unlock.IsUnlock(functionType)) then local activityId = MDL.GoldenHeroMain.GetActivityIDByHeroType(goldenHeroType) if activityId > 0 then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) end end end -- 检查服务器活动数据金将活动是否可跳转 function private.CheckActivityGoldenHeroMain(goldenHeroType, data, resource, itemId) if MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.GoldHeroActivity) then for i, activityId in ipairs(resource.activityId) do if activityId > 0 and activityId == MDL.GoldenHeroMain.GetActivityIDByHeroType(goldenHeroType) then local activityType = MDL.OperationActivity.ActivityType.GoldenHero local goldHeroData = MDL.OperationActivity.HotControlInfo:GetDataByActivityType_ActivityID(activityType, activityId) local goldHeroInfo = MDL.OperationActivity.GetOperationActivityInfo(activityType, activityId) if CTL.OperationActivity.IsOperationActivityOpen(goldHeroInfo) and CTL.OperationActivity.IsOperationActivityUnlock(goldHeroData) then table.insert(data, ItemSources_Model.GetSourceDataById(resource.resourceId, itemId)) end end break end end end -- 检查彩金将活动是否可跳转 function private.CheckSuperGoldMain(goldenHeroType, data, resourceId, itemId) local activityType = MDL.OperationActivity.ActivityType.SuperGold local functionType = MDL.Unlock.FunctionType.SuperGoldActivity if CTL.OperationActivity.IsOperationActivityTypeUnlock(activityType) and CTL.OperationActivity.IsOperationActivityTypeOpen(activityType) and (not functionType or MDL.Unlock.IsUnlock(functionType)) then local activityId = MDL.SuperGoldMain.GetActivityIDByHeroType(goldenHeroType) if activityId > 0 then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) end end end -- 检查服务器活动数据彩金将活动是否可跳转 function private.CheckActivitySuperGoldMain(heroType, data, resource, itemId) if MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.SuperGoldActivity) then for i, activityId in ipairs(resource.activityId) do if activityId > 0 and activityId == MDL.SuperGoldMain.GetActivityIDByHeroType(heroType) then local activityType = MDL.OperationActivity.ActivityType.SuperGold local controlInfo = MDL.OperationActivity.HotControlInfo:GetDataByActivityType_ActivityID(activityType, activityId) local doingActivityInfo = MDL.OperationActivity.GetOperationActivityInfo(activityType, activityId) if CTL.OperationActivity.IsOperationActivityOpen(doingActivityInfo) and CTL.OperationActivity.IsOperationActivityUnlock(controlInfo) then table.insert(data, ItemSources_Model.GetSourceDataById(resource.resourceId, itemId)) end end break end end end -- 检查大富翁是否可跳转 function private.CheckMonopoly(data, resourceId, itemId) local activityType = MDL.OperationActivity.ActivityType.Monopoly if CTL.OperationActivity.IsOperationActivityTypeUnlock(activityType) and CTL.OperationActivity.IsOperationActivityTypeOpen(activityType) and MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.Monopoly) then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) end end -- 检查直购礼包是否可跳转 function private.CheckDirectGift(data, resourceId, itemId) for i = CTL.PayMall.ShopChildTabType.DirectGift1, CTL.PayMall.GetLastDirectGiftTabType() do if CTL.DirectGift.IsShowNormalDirectGiftTab(i) then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) break end end end -- 检查定向礼包是否可跳转 function private.CheckPushGift(data, resourceId, itemId) if MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.PushGift) and MDL.PushGift.GetIfOpen() and CTL.OperationActivity.IsOperationActivityTypeUnlock(MDL.OperationActivity.ActivityType.PushGift) then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) end end -- 检查号令天下是否可跳转 function private.CheckCommandTheWorld(data, resourceId, itemId) local commandTheWorldType = MDL.OperationActivity.ActivityType.BattlefieldMuster if CTL.OperationActivity.IsOperationActivityTypeOpen(commandTheWorldType) and CTL.OperationActivity.IsOperationActivityTypeUnlock(commandTheWorldType) and MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.CommandTheWorld) and CTL.CommandTheWorld.IsBeforeHonourOpen() then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) end end -- 检查新年活动是否可跳转 function private.CheckNewYearActivity(data, resourceId, itemId) local newYearType = MDL.OperationActivity.ActivityType.NewYear if CTL.OperationActivity.IsOperationActivityTypeOpen(newYearType) and CTL.OperationActivity.IsOperationActivityTypeUnlock(newYearType) and MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.NewYear) then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) end end -- 检查是否可以跳转势力共建 function private.CheckGuildTarget(data, resourceId, itemId) if MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.GuildTarget) and MDL.Guild.IsHasGuild() then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) end end -- 检查是否可以跳转日服金将复刻 function private.CheckGoldHeroReprint(data, resourceId, itemId) if MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.GoldHeroReprint) then local activityId = MDL.GoldHeroReprint.GetGoldHeroReprintActivityID() local activityType = MDL.OperationActivity.ActivityType.GoldHeroReprint if activityId and activityId > 0 then local goldHeroData = MDL.OperationActivity.HotControlInfo:GetDataByActivityType_ActivityID(activityType, activityId) local goldHeroInfo = MDL.OperationActivity.GetOperationActivityInfo(activityType, activityId) if CTL.OperationActivity.IsOperationActivityOpen(goldHeroInfo) and CTL.OperationActivity.IsOperationActivityUnlock(goldHeroData) then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) end end end end -- 检查是否可以跳转势力共建 function private.CheckWarZoneBoss(data, resourceId, itemId) if MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.WarZoneBoss) and CTL.WarZone.IsWarZoneOpen() then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) end end function private.CheckShowHeroMatch1v1Entry(data, resourceId, itemId) if MDL.HeroMatch1v1.IsShowHeroMatch1v1Entry() then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) end end function private.CheckShowHeroMatch3v3Entry(data, resourceId, itemId) if MDL.HeroMatch3v3.IsShowHeroMatch3v3Entry() then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) end end function private.CheckFairSoloTournamentEntry(data, resourceId, itemId) if MDL.FairSoloTournament.IsShowEntry() then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) end end function private.CheckSceneQuiz(data, resourceId, itemId) if CTL.SceneQuiz.IsTodayOpen() then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) end end function private.IsCountryActivity(sourceType) return sourceType == ItemSources_Model.SourceType.CountryWantedTask or sourceType == ItemSources_Model.SourceType.DragonArteryMain or sourceType == ItemSources_Model.SourceType.CountryNightBossMain or sourceType == ItemSources_Model.SourceType.CountrySalaryBase or sourceType == ItemSources_Model.SourceType.ChangAnSiege end function private.CheckCountryActivity(data, resourceId, itemId) if MDL.Country.GetCurStage() == MDL.Country.Stage.CountryBuild and MDL.Country.IsHasCountry() then local activityId = private.CountryActivityMapping[resourceId] if activityId == nil or CTL.Activities.IsShowUI(activityId) then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) end end end function private.CheckCountryEntry(data, resourceId, itemId) if MDL.Country.GetCurStage() ~= MDL.Country.Stage.CountryBuild or MDL.Country.IsHasCountry() == false then table.insert(data, ItemSources_Model.GetSourceDataById(resourceId, itemId)) end end --endregion ******************* 检查是否可跳转函数 ***************************** return ItemSources_Model