local ItemTips_Utility = {} local private = {} local EnergyPillId = 2001 local ItemTipsOperType = { None = 0, Use = 1, Active = 2, Break = 3, Sell = 4, SendToChat = 5, RecycleFragment = 6, } function ItemTips_Utility.ShowBagTips(data) local context = { itemData = data, isChildTips = false, btnList = private.GetItemBtnsInfo(data.CfgId) } local itemData = DataSheetManager.ItemData:GetDataByID(data.CfgId) if itemData.FirstType == LuaConst.ItemType.Title then CTL.Title.OpenTipsByItemID(data.CfgId, context) else UIManager.OpenView(Const_UI_Lua.UIEnum.UIBagItemTips, context, "Common/UICommonItemTips") end end --注意这里加的弹窗需要考虑isOffset, isChildTips的子界面处理情况,见UIBagItemTips.lua顶头注释和其他子界面的做法 function ItemTips_Utility.ShowCommonTipsById(id, isOffset, isChildTips, uniqId) local itemData = DataSheetManager.ItemData:GetDataByID(id) if itemData.FirstType == LuaConst.ItemType.Equip or itemData.FirstType == LuaConst.ItemType.EquipDebris or itemData.FirstType == LuaConst.ItemType.Gem then if string.isNilOrEmpty(uniqId) == false then --通过唯一id获取背包里装备信息 local info = MDL.Equipment.GetEquipmentInfoByID(uniqId) UIManager.OpenView(Const_UI_Lua.UIEnum.UICommonEquipTips, { itemId = id, isOffset = isOffset, isChildTips = isChildTips, equipInfo = info }) else UIManager.OpenView(Const_UI_Lua.UIEnum.UICommonEquipTips, { itemId = id, isOffset = isOffset, isChildTips = isChildTips }) end elseif itemData.FirstType == LuaConst.ItemType.Pet then --宠物符文特殊tips if DataSheetManager.PetRuneSkill:TryGetDataByPetRuneID(id) then CTL.Pet.ShowRuneSkillTips(id, isChildTips) else UIManager.OpenView(Const_UI_Lua.UIEnum.UIPreviewItemTips, { itemData = { CfgId = id }, isOffset = isOffset, isChildTips = isChildTips }, "Common/UICommonItemTips") end elseif itemData.FirstType == LuaConst.ItemType.Title then CTL.Title.OpenTipsByItemID(id, nil, isChildTips, isOffset) elseif itemData.FirstType == LuaConst.ItemType.HorseSoul then CTL.HorseSoul.OpenSoulTips(0, id, nil, isChildTips, isOffset) elseif itemData.FirstType == LuaConst.ItemType.HeroSubstitute and itemData.SecondType == LuaConst.ItemHeroSubstituteType.RegretSubstitute then UIManager.OpenView(Const_UI_Lua.UIEnum.UIPreviewItemTips, { itemData = { CfgId = id, Id = uniqId}, isOffset = isOffset, isChildTips = isChildTips }, "Common/UICommonItemTips") elseif itemData.FirstType == LuaConst.ItemType.HorseEquip then CTL.HorseEquip.OpenEquipTips(0, id, nil, isChildTips, isOffset) else UIManager.OpenView(Const_UI_Lua.UIEnum.UIPreviewItemTips, { itemData = { CfgId = id }, isOffset = isOffset, isChildTips = isChildTips }, "Common/UICommonItemTips") end end function private.GetItemBtnsInfo(id) local list = {} local data = DataSheetManager.ItemData:GetDataByID(id) if data.FirstType == LuaConst.ItemType.Materials then if data.SecondType == LuaConst.ItemMaterialsType.DrawCardShopCoin then return list end if data.SecondType == LuaConst.ItemMaterialsType.BreakPill then table.insert(list, private.CreateOperData(ItemTipsOperType.Use, "IDS_Item_fuc1", CTL.ItemUse.TryUseItemByCfgId)); else table.insert(list, private.CreateOperData(ItemTipsOperType.Use, "IDS_Item_fuc1", CTL.ItemUse.TryUseItemByCfgId)); end elseif data.FirstType == LuaConst.ItemType.HeroFragment then table.insert(list, private.GetButtonHeroInfo(id)) elseif data.FirstType == LuaConst.ItemType.WeaponFragment then if data.SecondType == LuaConst.ItemWeaponType.LevelUpItem or data.SecondType == LuaConst.ItemWeaponType.ForgeItem then table.insert(list, private.CreateOperData(ItemTipsOperType.Use, "IDS_Item_fuc1", CTL.ItemUse.TryUseItemByCfgId)) elseif data.SecondType == LuaConst.ItemWeaponType.ForgeWeaponItem then table.insert(list, private.GetButtonWeaponForgeInfo(id)) else table.insert(list, private.GetButtonWeaponFragmentInfo(id)); end elseif data.FirstType == LuaConst.ItemType.GiftBag then table.insert(list, private.CreateOperData(ItemTipsOperType.Use, "IDS_Item_fuc1", CTL.ItemUse.TryUseItemByCfgId)); elseif data.FirstType == LuaConst.ItemType.Horse then if data.SecondType == LuaConst.ItemHorseType.LevelUpItem then table.insert(list, private.CreateOperData(ItemTipsOperType.Use, "IDS_Item_fuc1", CTL.ItemUse.TryUseItemByCfgId)); else table.insert(list, private.GetButtonWarHorseInfo(id)); end elseif data.FirstType == LuaConst.ItemType.Treasure then if data.SecondType == LuaConst.ItemTreasureType.LevelUpItem then table.insert(list, private.CreateOperData(ItemTipsOperType.Use, "IDS_Item_fuc1", CTL.ItemUse.TryUseItemByCfgId)); else table.insert(list, private.GetButtonTreasureInfo(id)); end elseif data.FirstType == LuaConst.ItemType.TreasureMap then if data.SecondType ~= LuaConst.ItemTreasureMapType.Fragment then table.insert(list, private.CreateOperData(ItemTipsOperType.Use, "IDS_Item_fuc1", CTL.ItemUse.TryUseItemByCfgId)); else table.insert(list, private.CreateOperData(ItemTipsOperType.Use, "IDS_Bag_Item_Button_Compose", CTL.ItemUse.TryComposeItem)); end elseif data.FirstType == LuaConst.ItemType.Activity then if CTL.Turntable.IsDrawItem(nil, id) then table.insert(list, private.CreateOperData(ItemTipsOperType.Use, "IDS_Item_fuc1", CTL.Turntable.OpenMainPanel)); elseif CTL.DyeAppearance.IsDyeItem(id) then local func = CTL.DyeAppearance.GetJumpFunc(id) table.insert(list, private.CreateOperData(ItemTipsOperType.Use, "IDS_Item_fuc1", func)); elseif data.SecondType == LuaConst.ItemActivityType.MonopolyDice or data.SecondType == LuaConst.ItemActivityType.SuperGoldMonopolyDice then table.insert(list, private.CreateOperData(ItemTipsOperType.Use, "IDS_Item_fuc1", CTL.Monopoly.TryUseItemByCfgId)); end elseif data.FirstType == LuaConst.ItemType.Stratagem then if data.SecondType == LuaConst.ItemStratagemType.LevelUpItem then table.insert(list, private.CreateOperData(ItemTipsOperType.Use, "IDS_Item_fuc1", CTL.ItemUse.TryUseItemByCfgId)); else table.insert(list, private.GetButtonStratagemInfo(id)); end elseif data.FirstType == LuaConst.ItemType.Pet then local success = DataSheetManager.PetRelation:TryGetDataByItemID(id) if success then table.insert(list, private.CreateOperData(ItemTipsOperType.Use, "IDS_Item_fuc1", MDL.Pet.ActivateRelationRuneSkillReq)); else if data.SecondType == LuaConst.ItemMaterialsType.EnergyPill then table.insert(list, private.CreateOperData(ItemTipsOperType.Use, "IDS_Item_fuc1", CTL.ItemUse.TryUseItemByCfgId)); end end elseif data.FirstType == LuaConst.ItemType.FairPlayCard then return list elseif data.FirstType == LuaConst.ItemType.Others then -- 此处暂无操作 else table.insert(list, private.CreateOperData(ItemTipsOperType.Use, "IDS_Item_fuc1", CTL.ItemUse.TryUseItemByCfgId)); end if data.SellItemID > 0 then table.insert(list, private.CreateOperData(ItemTipsOperType.Sell, "IDS_Item_fuc2", private.SellItem)); end if data.IsChatShow then table.insert(list, private.CreateOperData(ItemTipsOperType.SendToChat, "IDS_Bag_Item_Button_Show", private.SendItemToChat)); end return list end function private.CreateOperData(operType, idsId, callbackFunc, funtionModule) return {operType = operType, textIDS = Const_IDS[idsId], callbackFunc = callbackFunc, funtionModule = funtionModule}; end function ItemTips_Utility.IsCanOperateItem(operType, itemCfgId, itemData, funcModule) if operType == ItemTipsOperType.SendToChat then local sendChannelId = DataSheetManager.ConstData:GetDataByID("BagShowItemSendToChannelID").IntValue if not MDL.ChannelChat.IsChannelOpen(sendChannelId) then CTL.Tips.AddTipsMsg(Const_IDS["IDS_Bag_Tips_Show_ChannelUnlock"]) return false end local matchCount = 0 local notSendMsg = MDL.ChannelChat.GetNotSendMsg() for i in string.gmatch(notSendMsg, CTL.ChannelChat.GetItemHyperlinkPattern()) do matchCount = matchCount + 1 end local maxShowCount = DataSheetManager.ConstData:GetDataByID("BagShowItemMaxNum").IntValue if matchCount >= maxShowCount then CTL.Tips.AddTipsMsg(Const_IDS["IDS_Bag_Tips_Show_MaxNum"], maxShowCount) return false end elseif operType == ItemTipsOperType.Sell then return true elseif operType == ItemTipsOperType.RecycleFragment then return true else if not CTL.ItemUse.CanUseItem(itemData, itemCfgId, true) then return false end end return true end function private.GetButtonHeroInfo(id) local heroId = CTL.Bag.GetHeroCfgIdByItemId(id) if heroId > 0 then local heroInfo = MDL.HeroSelect.GetHeroInfo(heroId) if heroInfo then if MDL.Reborn.GetMaterialDataByCfgId(id) then return private.CreateOperData(ItemTipsOperType.RecycleFragment, "IDS_RFDevelop_FeedButton", CTL.Reborn.OpenRecycleFragmentView) else return private.CreateOperData(ItemTipsOperType.Break, "IDS_AdvancedButton_ItemNotice", CTL.ItemUse.TryUseItemByCfgId) end else return private.CreateOperData(ItemTipsOperType.Active, "IDS_Bag_Item_Button_Activation", CTL.ItemUse.TryUseItemByCfgId) end else return private.CreateOperData(ItemTipsOperType.None, "IDS_Guild_BlankContent") end end function private.GetButtonWeaponFragmentInfo(id) local magicWeaponCfgId = CTL.Bag.GetMagicWeaponCfgIdByItemId(id) local heroInfo = MDL.HeroSelect.GetHeroInfo(magicWeaponCfgId) if heroInfo and heroInfo.isMagicWeaponActive then if MDL.Reborn.GetMaterialDataByCfgId(id) then return private.CreateOperData(ItemTipsOperType.RecycleFragment, "IDS_RFDevelop_FeedButton", CTL.Reborn.OpenRecycleFragmentView) else return private.CreateOperData(ItemTipsOperType.Break, "IDS_AdvancedButton_ItemNotice", CTL.ItemUse.TryUseItemByCfgId) end else return private.CreateOperData(ItemTipsOperType.Active, "IDS_Bag_Item_Button_Activation", CTL.ItemUse.TryUseItemByCfgId) end end function private.GetButtonWeaponForgeInfo(id) if MDL.Reborn.GetMaterialDataByCfgId(id) then return private.CreateOperData(ItemTipsOperType.RecycleFragment, "IDS_RFDevelop_FeedButton", CTL.Reborn.OpenRecycleFragmentView) else return private.CreateOperData(ItemTipsOperType.Use, "IDS_Item_fuc1", CTL.ItemUse.TryUseItemByCfgId) end end function private.GetButtonWarHorseInfo(id) local warHorseCfgId = CTL.Bag.GetWarHorseCfgIdByItemId(id); if warHorseCfgId > 0 then local warHorseData = MDL.WarHorse.GetInfoByID(warHorseCfgId); if warHorseData then if MDL.Reborn.GetMaterialDataByCfgId(id) then return private.CreateOperData(ItemTipsOperType.RecycleFragment, "IDS_RFDevelop_FeedButton", CTL.Reborn.OpenRecycleFragmentView) else return private.CreateOperData(ItemTipsOperType.Break, "IDS_AdvancedButton_ItemNotice", CTL.ItemUse.TryUseItemByCfgId); end else return private.CreateOperData(ItemTipsOperType.Active, "IDS_Bag_Item_Button_Activation", CTL.ItemUse.TryUseItemByCfgId); end else return private.CreateOperData(ItemTipsOperType.None, "IDS_Guild_BlankContent"); end end function private.GetButtonTreasureInfo(id) local treasureCfgId = CTL.Bag.GetTreasureCfgIdByItemId(id); if CTL.Treasure.IsTreasureActive(treasureCfgId) then if MDL.Reborn.GetMaterialDataByCfgId(id) then return private.CreateOperData(ItemTipsOperType.RecycleFragment, "IDS_RFDevelop_FeedButton", CTL.Reborn.OpenRecycleFragmentView) else return private.CreateOperData(ItemTipsOperType.Break, "IDS_AdvancedButton_ItemNotice", CTL.ItemUse.TryUseItemByCfgId); end else return private.CreateOperData(ItemTipsOperType.Active, "IDS_Bag_Item_Button_Activation", CTL.ItemUse.TryUseItemByCfgId); end end function private.GetButtonStratagemInfo(id) if CTL.Stratagem.IsStratagemActive(id) then if MDL.Reborn.GetMaterialDataByCfgId(id) then return private.CreateOperData(ItemTipsOperType.RecycleFragment, "IDS_RFDevelop_FeedButton", CTL.Reborn.OpenRecycleFragmentView) else return private.CreateOperData(ItemTipsOperType.Break, "IDS_Stratagem_LearnBtn", CTL.ItemUse.TryUseItemByCfgId); end else return private.CreateOperData(ItemTipsOperType.Active, "IDS_Bag_Item_Button_Activation", CTL.ItemUse.TryUseItemByCfgId); end end function ItemTips_Utility.OpenUseEnergyPillView() local count = MDL.Bag.GetItemCount(EnergyPillId) UIManager.OpenView(Const_UI_Lua.UIEnum.UIBagItemUsePanel, {data = {Count = count, CfgId = EnergyPillId}}) end local EnergyQuickPurchaseGoodID = DataSheetManager.ConstData:GetDataByID("EnergyQuickPurchaseGoodID").IntValue function ItemTips_Utility.OpenAboutEnergyPillView() local count = MDL.Bag.GetItemCount(EnergyPillId) if count > 0 then ItemTips_Utility.OpenUseEnergyPillView() else CTL.Tips.AddTipsMsg(Const_IDS["IDS_Energy_NoItem"]) UTL.MessageBox.ShowOKCancelBox(Const_IDS.IDS_Energy_BuyEnergyItem_Title, Const_IDS.IDS_Energy_BuyEnergyItem, function () ItemTips_Utility.OpenQuickPurchaseView(EnergyQuickPurchaseGoodID) end) end end function ItemTips_Utility.OpenQuickPurchaseView(purchaseGoodId) local purchaseGoodData = MDL.OperationActivity.StoreGoodsData:GetDataByID(purchaseGoodId) local storeTabData = MDL.OperationActivity.StoreTypeData:GetDataByTabID(purchaseGoodData.TabID) if not MDL.Unlock.IsUnlock(MDL.PayMall.ShopFunctionType[storeTabData.TypeID]) then CTL.Tips.AddTipsMsg(Const_IDS.IDS_Formation_RelationShip_Closed) return end if not CTL.PayMall.IsUnlockPurchase(purchaseGoodData, false) then local itemData = DataSheetManager.ItemData:GetDataByID(purchaseGoodData.ItemID) CTL.Tips.AddTipsMsg(Const_IDS.IDS_Store_GoodsUnlock, UIUtils.GetLocalizedTxt(Const_IDS[itemData.Name])) return end if not CTL.PayMall.IsSoldOut(purchaseGoodData) then CTL.PayMall.OpenPayMallPopUp(purchaseGoodData) else local itemData = DataSheetManager.ItemData:GetDataByID(purchaseGoodData.ItemID) CTL.Tips.AddTipsMsg(Const_IDS.IDS_Store_GoodsSellOutToday, UIUtils.GetLocalizedTxt(Const_IDS[itemData.Name])) end end function private.SellItem(itemId, showTip, itemCell) UIManager.OpenView(Const_UI_Lua.UIEnum.UIBagItemBulkSale, {data = itemCell}); end function private.SendItemToChat(itemId) UIManager.CloseView(Const_UI_Lua.UIEnum.UIBagMain); local notSendMsg = MDL.ChannelChat.GetNotSendMsg(); local sendContent = CTL.ChannelChat.ComposeItem(itemId); MDL.ChannelChat.SetNotSendMsg(notSendMsg .. sendContent); local sendChatCfgId = DataSheetManager.ConstData:GetDataByID("BagShowItemSendToChannelID").IntValue; local channelId = MDL.ChannelChat.GetChannelIdByCfgID(sendChatCfgId); UIManager.OpenView(Const_UI_Lua.UIEnum.UIChannelChatMain, {LastMsgChannelId = channelId}); end return ItemTips_Utility