local BaseCell = autoImport("BaseCell"); ItemTipBaseCell = class("ItemTipBaseCell", BaseCell); autoImport("TipLabelCell"); -- order depend on type-value ItemTipAttriType = { Level = 1, EquipDecomposeTip = 2, MonsterLevel = 3, ItemType = 4, EquipCollectionLv = 5, UseLimit = 6, GetLimit = 7, EquipBaseAttri = 8, RecommandReason = 8, NextEquipLotteryAttri = 9, EquipStrengthRefine = 10, EquipSpecial = 11, Pvp_EquipBaseAttri = 12, Pvp_EquipSpecial = 13, EquipEnchant = 14, EquipUpInfo = 15, EquipUpMaterial = 16, EquipCards = 17, EquipSuit = 18, EquipColor = 19, ComposeProductAttri = 20, ComposeInfo = 21, CardInfo = 22, SpecialTip = 23, UnLockInfo = 24, NoStorage = 25, NoMakeCard = 26, EquipCanInfo = 27, FoodInfo = 28, FoodAdvInfo = 29, PetEggInfo_Brief = 30, PetEggInfo_Skill = 31, PetEggInfo_Equip = 32, EquipJobs = 33, NoEffectTip = 34, ObsidianSoulCrystalTip = 35, Code = 36, Desc = 37, TradePrice = 38, SellPrice = 39, MAX_INDEX = 40, } local tempV3 = LuaVector3(); local AllTradeType = BoothProxy.TradeType.All function ItemTipBaseCell:Init() self.main = self:FindComponent("Main", UIWidget); local cellContainer = self:FindGO("CellContainer"); if(cellContainer)then local cellObj = self:LoadPreferb("cell/ItemCell", cellContainer); cellObj.transform:SetParent(cellContainer.transform, true); cellObj.transform.localPosition = LuaGeometry.Const_V3_zero; self.itemcell = ItemCell.new(cellContainer); self.itemcell:HideNum(); end self.typesprite = self:FindComponent("TypeSprite", UISprite); self.equipTip = self:FindGO("EquipEd"); self.scrollview = self:FindComponent("ScrollView", UIScrollView); self.replaceInfo = self:FindGO("ReplaceInfo"); self.replaceLab = self:FindComponent("Label", UILabel, self.replaceInfo); self.centerTop = self:FindGO("CenterTop"); self.centerBottom = self:FindGO("CenterBottom"); self.getPathBtn = self:FindGO("GetPathBtn"); if(self.getPathBtn)then self:AddClickEvent(self.getPathBtn, function (go) self:PassEvent(ItemTipEvent.ShowGetPath, self); end); end self:InitAttriContext(); self:InitEvent(); self:InitCountChooseBord(); end function ItemTipBaseCell:InitAttriContext() self.table = self:FindComponent("AttriTable", UITable); local upPanel = GameObjectUtil.Instance:FindCompInParents(self.gameObject, UIPanel); local panels = self:FindComponents(UIPanel); for i=1,#panels do panels[i].depth = upPanel.depth+panels[i].depth; end self.attriCtl = UIGridListCtrl.new(self.table, TipLabelCell, "TipLabelCell"); self.contextDatas = {}; end function ItemTipBaseCell:HideItemIcon() if(self.itemcell)then self.itemcell:HideIcon(); local sData = self.data and self.data.staticData; if(sData == nil)then return; end local lockDesc = Table_ItemAdvManual[sData.id] and Table_ItemAdvManual[sData.id].LockDesc; if(lockDesc)then local desc = self.contextDatas[ ItemTipAttriType.Desc ] or {}; local descStr = lockDesc desc.label = ZhString.ItemTip_Desc..descStr; desc.hideline = true; self.contextDatas[ ItemTipAttriType.Desc ] = desc; end self:ResetAttriDatas(); end end function ItemTipBaseCell:Active_Collider_Call() self:UpdateCountChooseBordButton(); end function ItemTipBaseCell:InitCountChooseBord() self.chooseCount = 1; self.countChooseBord = self:FindGO("CountChooseBord"); if(self.countChooseBord == nil)then return; end local countChoose_AddButton = self:FindGO("AddButton", self.countChooseBord); self.countChoose_AddButton_Sp1 = countChoose_AddButton:GetComponent(UISprite); self.countChoose_AddButton_Sp2 = self:FindComponent("Sprite", UISprite, countChoose_AddButton); self.countChoose_AddButton_Collider = countChoose_AddButton:GetComponent(BoxCollider); self:AddClickEvent(countChoose_AddButton, function ( go ) self:DoAddUseCount(); end); local longPress = countChoose_AddButton:GetComponent(UILongPress) longPress.pressEvent = function ( obj,state ) self:QuickDoAddUseCount(state); end local countChoose_MinusButton = self:FindGO("MinusButton", self.countChooseBord); self.countChoose_MinusButton_Sp1 = countChoose_MinusButton:GetComponent(UISprite); self.countChoose_MinusButton_Sp2 = self:FindComponent("Sprite", UISprite, countChoose_MinusButton); self.countChoose_MinusButton_Collider = countChoose_MinusButton:GetComponent(BoxCollider); self:AddClickEvent(countChoose_MinusButton, function ( go ) self:DoMinusUseCount(); end); local longPress = countChoose_MinusButton:GetComponent(UILongPress) longPress.pressEvent = function ( obj,state ) self:QuickMinusAddUseCount(state); end self.countChoose_CountInput = self:FindComponent("CountInput", UIInput, self.countChooseBord); EventDelegate.Set(self.countChoose_CountInput.onChange,function () self.chooseCount = tonumber(self.countChoose_CountInput.value) or 0; self:UpdateCountChooseBordButton(); end) self.countChoose_Count = self:FindComponent("Count", UILabel, self.countChooseBord); self.chooseCount = 1; end function ItemTipBaseCell:DoAddUseCount() if(self.data == nil)then return; end self.chooseCount = self.chooseCount + 1; self.countChoose_CountInput.value = self.chooseCount; self:UpdateCountChooseBordButton(true); end function ItemTipBaseCell:QuickDoAddUseCount(open) if(open)then TimeTickManager.Me():CreateTick(0, 100, function () self:DoAddUseCount(); end, self, 11); else TimeTickManager.Me():ClearTick(self, 11) end end function ItemTipBaseCell:DoMinusUseCount() if(self.data == nil)then return; end self.chooseCount = self.chooseCount - 1; self.countChoose_CountInput.value = self.chooseCount; self:UpdateCountChooseBordButton(); end function ItemTipBaseCell:ResetUseCount() self.chooseCount = 1; if(self.countChooseBord == nil)then return; end self.countChoose_CountInput.value = self.chooseCount; self:UpdateCountChooseBordButton(); end function ItemTipBaseCell:SetChooseCount(count) self.chooseCount = count; if(self.countChooseBord == nil)then return; end self.countChoose_CountInput.value = self.chooseCount; self:UpdateCountChooseBordButton(); end function ItemTipBaseCell:UpdateCountChooseBordButton(showMultipleMsg) if(self.countChooseBord == nil)then return; end if(self.data == nil)then return; end local sid = self.data.staticData.id; if(sid == nil)then return; end local useMax = nil; if(self.countChoose_maxCount == nil)then local typeData = Table_ItemType[ self.data.staticData.Type ]; if(typeData and typeData.UseNumber)then useMax = typeData.UseNumber; else useMax = self.data.staticData.MaxNum; end else useMax = self.countChoose_maxCount; end if(useMax ~= nil)then useMax = math.min(self.data.num, useMax); else useMax = self.data.num; end if(showMultipleMsg)then if(self.countChoose_maxCount and self.chooseCount == self.countChoose_maxCount)then MsgManager.ShowMsgByIDTable(1281); end end if(self.chooseCount > useMax or self.chooseCount < 1)then self.chooseCount = math.clamp(self.chooseCount, 1, useMax); self.countChoose_CountInput.value = self.chooseCount; end if self.itemcell and not self.dontUpdateCellCount then self.itemcell:UpdateNumLabel(self.chooseCount) end self:_helpActiveButton(self.chooseCount < useMax, self.countChoose_AddButton_Sp1, self.countChoose_AddButton_Sp2, self.countChoose_AddButton_Collider); self:_helpActiveButton(self.chooseCount > 1, self.countChoose_MinusButton_Sp1, self.countChoose_MinusButton_Sp2, self.countChoose_MinusButton_Collider); end function ItemTipBaseCell:QuickMinusAddUseCount(open) if(open)then TimeTickManager.Me():CreateTick(0, 100, function () self:DoMinusUseCount(); end, self, 12); else TimeTickManager.Me():ClearTick(self, 12) end end function ItemTipBaseCell:_helpActiveButton(b, sp1, sp2, collider) if(b)then sp1.color = ColorUtil.NGUIWhite; sp2.color = ColorUtil.NGUIWhite; collider.enabled = true; else sp1.color = ColorUtil.NGUIShaderGray; sp2.color = ColorUtil.NGUIShaderGray; collider.enabled = false; end end function ItemTipBaseCell:SetData(data) self.hasMonthVIP = ServiceUserEventProxy.Instance:AmIMonthlyVIP(); self.data = data; self:UpdateTopInfo(); self:UpdateAttriContext(); end function ItemTipBaseCell:UpdateTopInfo(data) local data = data or self.data; if(data)then local qInt = data.staticData.Quality; if(self.typesprite)then local typeConfig = Table_ItemType[data.staticData.Type]; if(typeConfig and typeConfig.icon and typeConfig.icon~="")then self.typesprite.gameObject:SetActive(true); self.typesprite.spriteName = Table_ItemType[data.staticData.Type].icon; self.typesprite:MakePixelPerfect(); else self.typesprite.gameObject:SetActive(false); end end if(self.equipTip)then self.equipTip:SetActive(data.equiped == 1); end if(self.itemcell)then --选中菜品显示Cell的数量 if data.staticData.Type == 610 and not self.dontUpdateCellCount then self.itemcell:ShowNum() end self.itemcell:SetData(data); end if(data.equipInfo)then local replaceValue = data.equipInfo:GetReplaceValues(); if(replaceValue > 0)then self:SetReplaceInfo(ZhString.Itemtip_EquipScore .. replaceValue); else self:SetReplaceInfo(); end else self:SetReplaceInfo(); end if(self.getPathBtn and data.staticData)then local gainData = GainWayTipProxy.Instance:GetDataByStaticID(data.staticData.id) self.getPathBtn:SetActive(gainData~=nil); end end end function ItemTipBaseCell:SetReplaceInfo(text) if(self.replaceInfo == nil)then tempV3:Set(0,100,0); else if(text == nil or text == "")then self.replaceInfo:SetActive(false); tempV3:Set(0,100,0); else self.replaceInfo:SetActive(true); tempV3:Set(0,88,0); self.replaceLab.text = text; end end if(self.centerTop)then self.centerTop.transform.localPosition = tempV3 if(self.main)then self.main:UpdateAnchors(); end end end function ItemTipBaseCell:FormatBufferStr(bufferId) local str = ItemUtil.getBufferDescById(bufferId); local result = ""; local bufferStrs = string.split(str, "\n") for m=1,#bufferStrs do result = result.."{uiicon=tips_icon_01} "..bufferStrs[m].."\n"; end if(result~="")then result = string.sub(result, 1, -2); end return result; end function ItemTipBaseCell:ActiveText(text, active) return active and text or '[c][9c9c9c]' .. text .. "[/c]"; end -- attri begin function ItemTipBaseCell:UpdateAttriContext() TableUtility.TableClear(self.contextDatas); if(self.data)then self:UpdateNormalItemInfo(self.data); self:UpdateEquipAttriInfo(self.data); self:UpdateComposeInfo(self.data); self:UpdateCardAttriInfo(self.data); self:UpdateFoodInfo(self.data); self:UpdatePetEggInfo(self.data); self:UpdateCodeInfo(self.data); end self:ResetAttriDatas(); end function ItemTipBaseCell:_bHairType(type) local hairConfig = GameConfig.HairType; if(nil==hairConfig) then return false end for _,v in pairs(hairConfig) do if(type==v)then return true; end end return false; end local NOSHOW_GETLIMIT_IDMAP = { [5503] = 1, } function ItemTipBaseCell:UpdateNormalItemInfo(data) local sData = data and data.staticData; if(not sData)then return; end local itemid = sData.id; local mylv = Game.Myself.data.userdata:Get(UDEnum.ROLELEVEL) if(sData.Level and sData.Level>0)then local limitlevel = {}; local colorStr = mylv>=sData.Level and "[222222]" or CustomStrColor.BanRed; limitlevel.label = string.format("[c]%s%s%s[-][/c]", colorStr, ZhString.ItemTip_LimitLv, sData.Level); limitlevel.hideline = true; self.contextDatas[ ItemTipAttriType.Level ] = limitlevel; end local iscollection = AdventureDataProxy.Instance:CheckItemIsCollection(data); if(iscollection)then local tipMap = GameConfig.ItemQualityDesc; if(tipMap and tipMap[sData.Quality])then local collectionTip = {}; collectionTip.label = string.format(ZhString.ItemTip_EquipCollectionLv, tipMap[sData.Quality]); collectionTip.hideline = true; self.contextDatas[ ItemTipAttriType.EquipCollectionLv ] = collectionTip; end end if(nil==data.equipInfo)then local pros = Table_UseItem[sData.id] and Table_UseItem[sData.id].Class; if(pros ~= nil and next(pros))then local proInfo = {}; local prostr = ""; local proban = true; local myPro = MyselfProxy.Instance:GetMyProfession() if(nil==pros or #pros<=0)then proban = false; prostr = ZhString.ItemTip_AllPro; else for i =1,#pros do if(myPro == pros[i])then proban = false; end if(Table_Class[pros[i]])then prostr = prostr..Table_Class[pros[i]].NameZh; end if(i~=#pros)then prostr = prostr.."/"; end end end if(proban)then proInfo.label = "[c]"..CustomStrColor.BanRed..ZhString.ItemTip_Profession..prostr.."[-][/c]"; else proInfo.label = ZhString.ItemTip_Profession..prostr; end proInfo.hideline = true; self.contextDatas[ ItemTipAttriType.EquipJobs ] = proInfo; end end local typedata = Table_ItemType[sData.Type]; if(typedata)then if(typedata.Name)then local typeStr = {}; typeStr.label = ZhString.ItemTip_ItemType..typedata.Name; self.contextDatas[ ItemTipAttriType.ItemType ] = typeStr; end end local bHairType = self._bHairType(sData.Type); if(not bHairType)then local tradeSell = {}; if(data:CanTrade())then local refinelv = self.data.equipInfo and self.data.equipInfo.refinelv if(refinelv and refinelv <= 0)then refinelv = nil; end local isOverTime = FunctionItemTrade.Me():IsRequireOverTime(self.data); if(isOverTime)then tradeSell.label = ZhString.ItemTip_TradePrice..ZhString.ItemTip_TradePriceWait; self:RemoveTradeLT(); self.itemTradeLt = LeanTween.delayedCall(1, function () FunctionItemTrade.Me():GetTradePrice(self.data, nil, nil, AllTradeType) self:RemoveTradeLT(); end) else local price = FunctionItemTrade.Me():GetTradePrice(self.data, nil, nil, AllTradeType) if(price == 0)then tradeSell.label = ZhString.ItemTip_TradePrice..ZhString.ItemTip_TradePriceWait; else tradeSell.label = ZhString.ItemTip_TradePrice.."{itemicon=100} "..StringUtil.NumThousandFormat(price); end end else tradeSell.label = ZhString.ItemTip_TradePrice..ZhString.ItemTip_NoTradeTip; end tradeSell.hideline = true; self.contextDatas[ ItemTipAttriType.TradePrice ] = tradeSell; end if(not bHairType)then local price = sData.SellPrice or 0; if(price>0 and sData.NoSale~=1)then local sell = {}; sell.label = ZhString.ItemTip_SellPrice.."{itemicon=100} "..tostring(price); sell.hideline = true; self.contextDatas[ ItemTipAttriType.SellPrice ] = sell; end end if(sData.Desc and sData.Desc~="")then local desc = {}; local descStr = sData.Desc if data:IsLoveLetter() then local time = os.date("*t", data.createtime) descStr = string.format(descStr, data.loveLetter.name, time.year, time.month, time.day) elseif(data:IsMarryInviteLetter())then local weddingData = data.weddingData; local timeStr = os.date(ZhString.ItemTip_WeddingCememony_TimeFormat, weddingData.starttime) local lintstr = ChangeZoneProxy.Instance:ZoneNumToString(weddingData.zoneid); lintstr = string.format(ZhString.ItemTip_Line, lintstr); descStr = string.format(descStr, weddingData.myname, weddingData.partnername, lintstr, timeStr); end desc.label = ZhString.ItemTip_Desc..descStr; desc.hideline = true; self.contextDatas[ ItemTipAttriType.Desc ] = desc; end -- 获取上限 local limitCfg = sData.GetLimit; if(NOSHOW_GETLIMIT_IDMAP[sData.id] == nil and limitCfg and limitCfg.type ~= nil)then local getLimitData = {}; local tipStr = ""; local str; if(limitCfg.type == 1)then str = ZhString.ItemTip_GetLimit_Day; elseif(limitCfg.type == 7)then str = ZhString.ItemTip_GetLimit_Weak; end local limitCount = ItemData.Get_GetLimitCount(sData.id); if(tipStr ~= "")then tipStr = tipStr .. " " end tipStr = str .. " " .. 0 .. "/" .. limitCount getLimitData.label = ZhString.ItemTip_GetLimit .. tipStr; self.contextDatas[ ItemTipAttriType.UseLimit ] = getLimitData; local sourceId = limitCfg.source and limitCfg.source[1] or nil; ServiceItemProxy.Instance:CallGetCountItemCmd(itemid, nil, sourceId); end -- 解锁 存入属性提示 local needManualShow, inManualStr, unlockManualStr = false; local inManual, unlockManual = false, false; if(data:IsFashion())then local groupId = Table_Equip[sData.id] and Table_Equip[sData.id].GroupID; if(groupId)then local fakeItemData = Table_Item[groupId]; needManualShow = type(fakeItemData.AdventureValue) == "number" and fakeItemData.AdventureValue ~= 0 or false; inManualStr = AdventureDataProxy.Instance:getIntoPackageRewardStr(fakeItemData, ZhString.ItemTip_ChAnd); unlockManualStr = AdventureDataProxy.Instance:getUnlockRewardStr(fakeItemData, ZhString.ItemTip_ChAnd); inManual = AdventureDataProxy.Instance:IsFashionStored( groupId ) unlockManual = AdventureDataProxy.Instance:IsFashionUnlock( groupId ) else needManualShow = type(sData.AdventureValue) == "number" and sData.AdventureValue ~= 0 or false; inManualStr = AdventureDataProxy.Instance:getIntoPackageRewardStr(sData, ZhString.ItemTip_ChAnd); unlockManualStr = AdventureDataProxy.Instance:getUnlockRewardStr(sData, ZhString.ItemTip_ChAnd); inManual = AdventureDataProxy.Instance:IsFashionStored( sData.id ) unlockManual = AdventureDataProxy.Instance:IsFashionUnlock( sData.id ) end elseif(data:IsPic())then local pCData = sData.ComposeID and Table_Compose[sData.ComposeID]; if(pCData)then picToId = pCData.Product.id; local psData = Table_Item[picToId]; local groupId = Table_Equip[psData.id] and Table_Equip[psData.id].GroupID; if(groupId)then local fakeItemData = Table_Item[groupId]; needManualShow = type(fakeItemData.AdventureValue) == "number" and fakeItemData.AdventureValue ~= 0 or false; inManualStr = AdventureDataProxy.Instance:getIntoPackageRewardStr(fakeItemData, ZhString.ItemTip_ChAnd); unlockManualStr = AdventureDataProxy.Instance:getUnlockRewardStr(fakeItemData, ZhString.ItemTip_ChAnd); inManual = AdventureDataProxy.Instance:IsFashionStored( groupId ) unlockManual = AdventureDataProxy.Instance:IsFashionUnlock( groupId ) else needManualShow = type(psData.AdventureValue) == "number" and psData.AdventureValue ~= 0 or false; inManualStr = AdventureDataProxy.Instance:getIntoPackageRewardStr(Table_Item[picToId], ZhString.ItemTip_ChAnd); unlockManualStr = AdventureDataProxy.Instance:getUnlockRewardStr(Table_Item[picToId], ZhString.ItemTip_ChAnd); inManual = AdventureDataProxy.Instance:IsFashionStored( picToId ) unlockManual = AdventureDataProxy.Instance:IsFashionUnlock( picToId ) end end elseif(data:IsCard())then needManualShow = true; inManualStr = AdventureDataProxy.Instance:getIntoPackageRewardStr(sData, ZhString.ItemTip_ChAnd); unlockManualStr = AdventureDataProxy.Instance:getUnlockRewardStr(sData, ZhString.ItemTip_ChAnd); inManual = AdventureDataProxy.Instance:IsCardStored( sData.id ) unlockManual = AdventureDataProxy.Instance:IsCardUnlock( sData.id ) end if(needManualShow)then local manual = {label = {}}; if(inManualStr == nil or inManualStr == "")then inManualStr = ZhString.ItemTip_None; end table.insert(manual.label, self:ActiveText(ZhString.ItemTip_ManualInTip .. inManualStr, inManual)); if(unlockManualStr == nil or unlockManualStr == "")then unlockManualStr = ZhString.ItemTip_None; end table.insert(manual.label, self:ActiveText(ZhString.ItemTip_ManualUnlockTip .. unlockManualStr, unlockManual)); self.contextDatas[ ItemTipAttriType.UnLockInfo ] = manual; end -- 解锁 存入属性提示 -- 结婚信息 begin local weddingData = self.data.weddingData; if((data:IsMarriageCertificate() or data:IsMarriageRing()) and weddingData)then local weddingDesc = {}; weddingDesc.label = {}; weddingDesc.label[1] = sData.Desc; local partnername = weddingData.partnername or "" local formattime = os.date("%Y/%m/%d", weddingData.weddingtime or 0); local lintstr = ChangeZoneProxy.Instance:ZoneNumToString(weddingData.zoneid); weddingDesc.label[2] = string.format(ZhString.ItemTip_WeddingTip, weddingData.myname, partnername, formattime, lintstr); self.contextDatas[ ItemTipAttriType.Desc ] = weddingDesc; end -- 结婚信息 end if(sData.NoStorage and sData.NoStorage > 0)then local noStroage = {}; local storgeDesc = ""; local index = 0; if(not data:CanStorage(BagProxy.BagType.Storage))then storgeDesc = storgeDesc .. ZhString.ItemTip_CommonStorage; index = index + 1; end if(not data:CanStorage(BagProxy.BagType.PersonalStorage))then if(index > 0)then storgeDesc = storgeDesc .. "/"; end storgeDesc = storgeDesc .. ZhString.ItemTip_PersonStorage; index = index + 1; end if(not data:CanStorage(BagProxy.BagType.Barrow))then if(index > 0)then storgeDesc = storgeDesc .. "/"; end storgeDesc = storgeDesc .. ZhString.ItemTip_BarrowStorage; index = index + 1; end noStroage.label = string.format(ZhString.ItemTip_NoStorage, storgeDesc); self.contextDatas[ ItemTipAttriType.NoStorage ] = noStroage; end local useItemData = Table_UseItem[itemid]; if(useItemData)then -- 使用次数限制 if(useItemData.WeekLimit)then local limitData = {}; limitData.label = string.format(ZhString.ItemTip_UseTimeLimit, 0, useItemData.WeekLimit); self.contextDatas[ ItemTipAttriType.UseLimit ] = limitData; local itemid = self.data.staticData.id; ServiceItemProxy.Instance:CallUseCountItemCmd(itemid); end local tipInfo = useItemData.TipsInfo; if(tipInfo) then for i=1,#tipInfo do if(tipInfo[i] == 1)then local catchMap = Game.Myself.data.userdata:Get(UDEnum.SAVEMAP); local catchData = Table_Map[catchMap]; if(catchMap and catchData)then local recordPos = {}; recordPos.label = {}; local posStr = ZhString.ItemTip_Position..catchData.NameZh; table.insert(recordPos.label, posStr); self.contextDatas[ ItemTipAttriType.SpecialTip ] = recordPos; end end end end end if (itemid == 5650) then local soulCrystalTip = {} local deadLv = Game.Myself.data.userdata:Get(UDEnum.DEADLV) local deadCoin = Game.Myself.data.userdata:Get(UDEnum.DEADCOIN) local todayGet = MyselfProxy.Instance:getVarValueByType(Var_pb.EVARTYPE_DEAD_COIN) or 0 soulCrystalTip.label = { string.format(ZhString.ItemTip_DeadLv, deadLv), string.format(ZhString.ItemTip_DeadCoinNum, deadCoin, GameConfig.Dead.max_deadcoin), string.format(ZhString.ItemTip_TodayGet, todayGet)} self.contextDatas[ ItemTipAttriType.ObsidianSoulCrystalTip ] = soulCrystalTip; end end function ItemTipBaseCell:RemoveTradeLT() if(self.itemTradeLt)then self.itemTradeLt:cancel(); self.itemTradeLt = nil; end end local EquipUpgrade_EquipLevel_SpriteMap = { [1] = {Active = "tips_icon_1", InActive = "tips_icon_1b"}, [2] = {Active = "tips_icon_2", InActive = "tips_icon_2b"}, [3] = {Active = "tips_icon_3", InActive = "tips_icon_3b"}, } local EquipUpgrade_EquipLevel_Product_Sprite = { Active = "tips_icon_end", InActive = "tips_icon_end2", } function ItemTipBaseCell.EffectSort(a,b) return a[1] < b[1] end function ItemTipBaseCell:UpdateEquipAttriInfo(data) local equipInfo = data.equipInfo; local isfashion = data:IsFashion(); local ismount = data:IsMount(); local propMap = Game.Config_PropName; local isMyItem = BagProxy.Instance:GetItemByGuid(data.id) ~= nil; if(equipInfo)then local decomposeId = equipInfo.equipData.DecomposeID; if(decomposeId)then local decompseData = Table_EquipDecompose[decomposeId]; local decompseTip = {}; decompseTip.label = string.format(ZhString.ItemTip_DecomposeLv, decompseData.NameZh); self.contextDatas[ ItemTipAttriType.EquipDecomposeTip ] = decompseTip end if(not ismount and not isfashion)then local effect = equipInfo.equipData.Effect local baseEffect = {}; for k,v in pairs(effect)do if(propMap[k])then local vstr = propMap[k].IsPercent==1 and v * 100 .. "%" or v; local iconname = GameConfig.PropIcon[propMap[k].VarName] and string.format('{uiicon=%s}', GameConfig.PropIcon[propMap[k].VarName]) or '{uiicon=tips_icon_01}'; local templab = iconname..propMap[k].PropName.."+"..vstr; table.insert(baseEffect, { propMap[k].id, templab }); end end local lotterData, nextlotteryData = LotteryProxy.Instance:GetEquipLotteryShowDatas(data.staticData.id); if(lotterData)then for k,v in pairs(lotterData.Attr)do if(propMap[k])then local vstr = propMap[k].IsPercent==1 and v * 100 .. "%" or v; local iconname = '{uiicon=tips_icon_01}'; local templab = iconname..propMap[k].PropName.."+"..vstr; table.insert(baseEffect, { propMap[k].id, templab }); end end end if(#baseEffect > 0)then table.sort(baseEffect, ItemTipBaseCell.EffectSort); local base = { label = '' }; for i=1,#baseEffect do if(base.label ~= '')then base.label = base.label .. "\n" end base.label = base.label .. baseEffect[i][2]; end if(base.label ~= '')then self.contextDatas[ ItemTipAttriType.EquipBaseAttri ] = base; end end local pvpeffect = equipInfo.equipData.PVPEffect if(pvpeffect)then local pvpBaseEffect = {}; for k,v in pairs(pvpeffect)do if(propMap[k])then local vstr = propMap[k].IsPercent==1 and v * 100 .. "%" or v; local iconname = GameConfig.PropIcon[propMap[k].VarName] and string.format('{uiicon=%s}', GameConfig.PropIcon[propMap[k].VarName]) or '{uiicon=tips_icon_01}'; local templab = iconname..propMap[k].PropName.."+"..vstr; table.insert(pvpBaseEffect, { propMap[k].id, templab }); end end local pvp_uniqueEffect = equipInfo:GetPvpUniqueEffect(); if(#pvpBaseEffect > 0 or (pvp_uniqueEffect and #pvp_uniqueEffect > 0))then local isActive = Game.MapManager:IsPVPMode() or Game.MapManager:IsPVPMode_GVGDetailed(); table.sort(pvpBaseEffect, ItemTipBaseCell.EffectSort); local pvpBase = {}; pvpBase.label = { ZhString.ItemTip_PvpEquipTip }; local baseStr = ""; for i=1,#pvpBaseEffect do if(isActive)then baseStr = baseStr .. pvpBaseEffect[i][2]; else baseStr = baseStr ..'[c][9c9c9c]' .. pvpBaseEffect[i][2] .. "[/c]"; end if(i<#pvpBaseEffect)then baseStr = baseStr .. "\n"; end end table.insert(pvpBase.label, baseStr) if(pvp_uniqueEffect and #pvp_uniqueEffect > 0)then local pvpspecial = {}; pvpspecial.label = {}; local label = ""; for i=1,#pvp_uniqueEffect do local id = pvp_uniqueEffect[i].id; if(isActive)then label = label..self:FormatBufferStr(id).."\n"; else label = label..'[c][9c9c9c]' .. self:FormatBufferStr(id).."[/c]\n"; end end if(label~="")then label = string.sub(label, 1, -2); table.insert(pvpBase.label, label); end end self.contextDatas[ ItemTipAttriType.Pvp_EquipBaseAttri ] = pvpBase; end end if(nextlotteryData)then local nlotteryEffect = {}; for k,v in pairs(nextlotteryData.Attr)do if(propMap[k])then local vstr = propMap[k].IsPercent==1 and v * 100 .. "%" or v; local iconname = '{uiicon=tips_icon_01}'; local templab = iconname..propMap[k].PropName.."+"..vstr; table.insert(nlotteryEffect, { propMap[k].id, templab }); end end if(#nlotteryEffect > 0)then table.sort(nlotteryEffect, ItemTipBaseCell.EffectSort); local nextlottery = {}; nextlottery.label = { string.format(ZhString.ItemTip_EquipLotteryTip, nextlotteryData.Level[1]) }; local nextStr = ""; for i=1,#nlotteryEffect do if(nextStr ~= '')then nextStr = nextStr .. "\n" end nextStr = nextStr .. nlotteryEffect[i][2]; end nextlottery.label[2] = nextStr; self.contextDatas[ ItemTipAttriType.NextEquipLotteryAttri ] = nextlottery; end elseif(lotterData)then local nextlottery = {}; nextlottery.label = ZhString.ItemTip_LotteryMaxTip; self.contextDatas[ ItemTipAttriType.NextEquipLotteryAttri ] = nextlottery; end end local strengRefine = {label=""}; local strenglab, strengthlab2, refinelab, hrefinelab = "","","",""; if(equipInfo.strengthlv>0)then local tiplabel; if(isMyItem)then local maxlv = BlackSmithProxy.Instance:MaxStrengthLevel(self.data); tiplabel = string.format(ZhString.ItemTip_StrengthLv, equipInfo.strengthlv, maxlv) else tiplabel = string.format(ZhString.ItemTip_StrengthLv_NoMax, equipInfo.strengthlv) end strenglab = tiplabel..equipInfo:StrengthInfo(nil, false); end if(equipInfo.strengthlv2>0)then local additionalAttrs = ItemFun.calcStrengthAttr(data.staticData.Quality, equipInfo.equipData.EquipType, equipInfo.strengthlv2); local effects = {} for k,v in pairs(additionalAttrs) do local data ={} data.name = Table_RoleData[k].VarName data.value = v table.insert(effects,data) end strengthlab2 = string.format(ZhString.ItemTip_StrengthLv2, equipInfo.strengthlv2, PropUtil.FormatEffects(effects, 1, " +")); end if(equipInfo.refinelv>0)then local maxlv = self.data.equipInfo.equipData.RefineMaxlv or 0; local tiplabel, refineTxt = string.format(ZhString.ItemTip_RefineLv, equipInfo.refinelv, maxlv), ""; local refineEffect = equipInfo.equipData.RefineEffect; local effectName, effectAddValue = next(refineEffect); if(effectName and effectAddValue)then local proName = GameConfig.EquipEffect[effectName], effectAddValue * equipInfo.refinelv; local pro, isPercent = RolePropsContainer.config[effectName], false if(pro)then isPercent = pro.isPercent end if(isPercent)then refineTxt = string.format("%s+%s%%", proName, effectAddValue * equipInfo.refinelv * 100); else refineTxt = string.format("%s+%s", proName, effectAddValue * equipInfo.refinelv); end end refinelab = tiplabel..refineTxt; end if(data.equiped == 1)then local siteConfig = GameConfig.EquipType[ equipInfo.equipData.EquipType ]; local site = siteConfig and siteConfig.site[1]; local hrEffects = BlackSmithProxy.Instance:GetMyHRefineEffects(site, nil, equipInfo.refinelv); if(hrEffects and hrEffects[1])then local proKey, proValue = hrEffects[1][1], hrEffects[1][2]; local nowEN_Str = GameConfig.EquipEffect[proKey] or proKey .. " No Find"; local nowEV_Str = ""; local PropNameConfig = Game.Config_PropName local config = PropNameConfig[ proKey ]; if(config.IsPercent == 1)then nowEV_Str = proValue * 100 .. "%"; else nowEV_Str = proValue end if(proValue > 0)then nowEV_Str = "+" .. nowEV_Str; end hrefinelab = ZhString.ItemTip_HRefineAddEffect..nowEN_Str..nowEV_Str; end end strengRefine.label = ""; if(strenglab ~= "")then strengRefine.label = strenglab; end if(strengthlab2 ~= "")then if(strengRefine.label ~= "")then strengRefine.label = strengRefine.label .. "\n" .. strengthlab2 else strengRefine.label = strengthlab2 end end if(refinelab ~= "")then if(strengRefine.label ~= "")then strengRefine.label = strengRefine.label .. "\n" .. refinelab else strengRefine.label = refinelab end end if(hrefinelab ~= "")then if(strengRefine.label ~= "")then strengRefine.label = strengRefine.label .. "\n" .. hrefinelab else strengRefine.label = hrefinelab end end if(strengRefine.label ~= "")then self.contextDatas[ ItemTipAttriType.EquipStrengthRefine ] = strengRefine; end local uniqueEffect = equipInfo:GetUniqueEffect(); if(uniqueEffect and #uniqueEffect>0)then local special = {}; special.label = {}; local label = ""; for i=1,#uniqueEffect do local id = uniqueEffect[i].id; label = label..self:FormatBufferStr(id).."\n"; end if(label~="")then label = string.sub(label, 1, -2); table.insert(special.label, label); self.contextDatas[ ItemTipAttriType.EquipSpecial ] = special; end end if(data.enchantInfo)then local attri = data.enchantInfo:GetEnchantAttrs(); if(#attri>0)then local enchant = {}; enchant.label = ZhString.ItemTip_Enchant.."\n"; for i=1,#attri do local enchantStr = ""; if(attri[i].propVO.isPercent)then enchantStr = string.format("%s [c][1B5EB1]+%s%%[-][/c]", tostring(attri[i].name), tostring(attri[i].value)) else enchantStr = string.format("%s [c][1B5EB1]+%s[-][/c]", tostring(attri[i].name), tostring(attri[i].value)) end enchant.label = enchant.label..enchantStr; if(i<#attri)then enchant.label = enchant.label.."\n"; end end local combineEffects = data.enchantInfo:GetCombineEffects() for i=1,#combineEffects do local combineEffect = combineEffects[i]; local buffData = combineEffect and combineEffect.buffData; if(buffData)then enchant.label = enchant.label.."\n"; if(combineEffect.isWork)then enchant.label = enchant.label..string.format("[c][222222]%s:%s[-][/c]", tostring(buffData.BuffName), tostring(buffData.BuffDesc)); else enchant.label = enchant.label..string.format("[c][9c9c9c]%s:%s(%s)[-][/c]", tostring(buffData.BuffName), tostring(buffData.BuffDesc), tostring(combineEffect.WorkTip)); end end end self.contextDatas[ ItemTipAttriType.EquipEnchant ] = enchant; end end local cardSlotNum, replaceCount = data.cardSlotNum, data.replaceCount or 0; if((cardSlotNum and cardSlotNum>0) or replaceCount and replaceCount>0)then local card = {}; local equipCards = data.equipedCardInfo or {}; card.label = {}; for i=1,cardSlotNum do local cardTip = ""; if(equipCards[i])then local iconStr = string.format("{uiicon=card_icon_%02d} ", equipCards[i].staticData.Quality); cardTip = iconStr..ColorUtil.TipLightColor..equipCards[i].staticData.NameZh.."[-]".."\n"; local bufferIds = equipCards[i].cardInfo.BuffEffect.buff; for j=1,#bufferIds do cardTip = cardTip..self:FormatBufferStr(bufferIds[j]).."\n"; end cardTip = string.sub(cardTip, 1, -2); else cardTip = string.format("{uiicon=card_icon_0} %s%s[-]", ColorUtil.TipDarkColor, ZhString.ItemTip_EmptyCardSlot); end table.insert(card.label, cardTip) end for i=1,replaceCount do local replaceTip = string.format("{uiicon=card_icon_lock} %s%s[-]", ColorUtil.TipDarkColor, ZhString.ItemTip_LockCardSlot); table.insert(card.label, replaceTip) end self.contextDatas[ ItemTipAttriType.EquipCards ] = card; end -- if(not isfashion)then local proinfo = {}; local proban = true; --CustomStrColor.BanRed; local prostr = ""; local pros = self.data.equipInfo.equipData.CanEquip; local myPro = MyselfProxy.Instance:GetMyProfession() for i =1,#pros do if(pros[i] == 0)then proban = false; prostr = ZhString.ItemTip_AllPro; break; else if(myPro == pros[i])then proban = false; end if(Table_Class[pros[i]])then prostr = prostr..Table_Class[pros[i]].NameZh; end if(i~=#pros)then prostr = prostr.."/"; end end end if(proban)then proinfo.label = "[c]"..CustomStrColor.BanRed..ZhString.ItemTip_Profession..prostr.."[-][/c]"; else proinfo.label = ZhString.ItemTip_Profession..prostr; end proinfo.hideline = true; self.contextDatas[ ItemTipAttriType.EquipJobs ] = proinfo; -- end -- 装备升级信息 local upgradeData = data.equipInfo.upgradeData; if(upgradeData)then local equiplv = data.equipInfo.equiplv; local maxUplv = data.equipInfo.upgrade_MaxLv; if(maxUplv>0)then local myClass = Game.Myself.data.userdata:Get(UDEnum.PROFESSION); local classDepth = ProfessionProxy.Instance:GetDepthByClassId(myClass); local upgradeInfo = {}; upgradeInfo.label = { ZhString.ItemTip_UpgradeTip }; local hasUnlocklv; for i=1,maxUplv do local buffid = equipInfo:GetUpgradeBuffIdByEquipLv(i); if(buffid)then local text = Table_Buffer[buffid] and Table_Buffer[buffid].Dsc or buffid .. " No Buff Dsc"; --ItemUtil.getBufferDescById(buffid) local spriteText; if(i > equiplv)then local sprite_InActive = "tips_icon_" .. i .. "b"; spriteText = string.format("{uiicon=%s} ", sprite_InActive); -- spriteText = string.format("{uiicon=%s} ", EquipUpgrade_EquipLevel_SpriteMap[i].InActive); text = "[c][9d9d9d]" .. text .. "[-][/c]"; local canUpgrade, lv = equipInfo:CanUpgrade_ByClassDepth(classDepth, i); if(not canUpgrade)then hasUnlocklv = true; table.insert( upgradeInfo.label, string.format(ZhString.ItemTip_NoUpgradeTip, ZhString.ChinaNumber[lv]) ); break; end else local sprite_Active = "tips_icon_" .. i; spriteText = string.format("{uiicon=%s} ", sprite_Active); local isEffect, lv = equipInfo:CanUpgrade_ByClassDepth(classDepth, i); if(not isEffect)then text = text .. string.format(ZhString.ItemTip_NoUpgradeInfoEffectTip, ZhString.ChinaNumber[lv]); end -- = "[c][9d9d9d](%s转之后有效)[-][/c]", -- spriteText = string.format("{uiicon=%s} ", EquipUpgrade_EquipLevel_SpriteMap[i].Active); end table.insert(upgradeInfo.label, spriteText .. text); end end if(not hasUnlocklv)then local canUpgrade, lv = equipInfo:CanUpgrade_ByClassDepth(classDepth, maxUplv + 1); if(not canUpgrade)then hasUnlocklv = true; table.insert( upgradeInfo.label, string.format(ZhString.ItemTip_NoUpgradeTip, ZhString.ChinaNumber[lv]) ); end end if(not hasUnlocklv and upgradeData.Product)then local productData = Table_Item[upgradeData.Product]; local productText = "[c][9d9d9d]" .. string.format(ZhString.ItemTip_UpgradeFinalTip, productData.NameZh) .. "[-][/c]"; local spriteText = string.format("{uiicon=%s} ", EquipUpgrade_EquipLevel_Product_Sprite.InActive); table.insert(upgradeInfo.label, spriteText .. productText); local endBuff = equipInfo:GetUpgradeBuffIdByEquipLv(maxUplv + 1); if(endBuff)then local endBuffDsc = Table_Buffer[endBuff] and Table_Buffer[endBuff].Dsc or endBuff .. ": No Buff Data"; local text = string.format(ZhString.ItemTip_UpEndBuffTip, productData.NameZh, tostring(endBuffDsc)); table.insert(upgradeInfo.label, "[c][9d9d9d]"..text.."[-][/c]"); end end self.contextDatas[ ItemTipAttriType.EquipUpInfo ] = upgradeInfo; -- 装备升级下一级材料信息 if(equiplv < maxUplv or (equiplv == maxUplv and upgradeData.Product))then local upgradeMaterial = {}; local shortcutID = upgradeData.ShortcutID; local umtext = {}; if(shortcutID)then if(shortcutID)then local shortData = Table_ShortcutPower[shortcutID]; local mapid, npcid = shortData.Event.mapid, shortData.Event.npcid; local mapName = mapid and Table_Map[mapid].CallZh local npcName = npcid and Table_Npc[npcid].NameZh; table.insert(umtext, string.format(ZhString.ItemTip_UpgradeNpcTip, mapName, npcName)); end end table.insert(umtext, string.format(ZhString.ItemTip_UpMaterialTip)); local bagtype = BagProxy.Instance:Get_PackageMaterialCheck_BagTypes(BagProxy.MaterialCheckBag_Type.Upgrade); local materials = equipInfo:GetUpgradeMagerialsByEquipLv(equiplv + 1); for i=1,#materials do local material = materials[i]; local msdata = Table_Item[material.id]; if(material.id~=100 and msdata)then local nownum = BagProxy.Instance:GetItemNumByStaticID(material.id,bagtype); local neednum = material.num; local celllab = msdata.NameZh .. ZhString.ItemTip_CHSpace .. nownum .. "/" .. neednum; table.insert(umtext, celllab); end end upgradeMaterial.label = umtext; self.contextDatas[ ItemTipAttriType.EquipUpMaterial ] = upgradeMaterial; end end end -- 装备是否可以强化,精炼,附魔 local canStrength, canRefine, canEnchant = equipInfo:CanStrength(), equipInfo:CanRefine(), equipInfo:CanEnchant(); local str = ""; if(not canStrength)then if(str ~= "")then str = str .. "/" end str = str .. ZhString.ItemTip_NoStrength; end if(not canRefine)then if(str ~= "")then str = str .. "/" end str = str .. ZhString.ItemTip_NoRefine; end if(not canEnchant)then if(str ~= "")then str = str .. "/" end str = str .. ZhString.ItemTip_NoEnchant; end if(str ~= "")then str = "[c]" .. CustomStrColor.BanRed .. ZhString.ItemTip_EquipCanTip .. str .. "[-][/c]"; local canInfo = {}; canInfo.label = str; canInfo.hideline = true; self.contextDatas[ ItemTipAttriType.EquipCanInfo ] = canInfo; end end -- 装备套装属性 local suitInfo = data.suitInfo; if(suitInfo)then local equipSuitDatas = suitInfo:GetEquipSuitDatas(); if(#equipSuitDatas>0)then local suit = {label = {}}; for k=1,#equipSuitDatas do local equipSuitData = equipSuitDatas[k]; table.insert(suit.label, string.format(ZhString.ItemTip_SuitInfo, k)); table.insert(suit.label, equipSuitData:GetSuitName()); local effectStr; if(data.equiped == 1 and equipSuitData:CheckIsActive())then effectStr = string.format(ZhString.ItemTip_SuitInfoTip, equipSuitData:GetSuitNum())..tostring(equipSuitData:GetEffectDesc()); else effectStr = '[c][9d9d9d]' .. string.format(ZhString.ItemTip_SuitInfoTip, equipSuitData:GetSuitNum())..tostring(equipSuitData:GetEffectDesc()).."[-][/c]" end table.insert(suit.label, effectStr); end self.contextDatas[ ItemTipAttriType.EquipSuit ] = suit; end end end function ItemTipBaseCell:UpdateComposeInfo(data) local sData = data.staticData; if(not sData)then return; end local composeData = Table_Compose[sData.ComposeID]; local productId = composeData and composeData.Product.id; if(productId)then local isPic = data:IsPic(); -- 图纸显示合成道具的特色属性 if(isPic)then local itemData = ItemData.new("Fashion", productId); local uniqueEffect = itemData.equipInfo:GetUniqueEffect(); if(uniqueEffect and #uniqueEffect>0)then local picSpecial = {}; picSpecial.label = {}; local label = ""; for i=1,#uniqueEffect do local id = uniqueEffect[i].id; label = label..self:FormatBufferStr(id).."\n"; end if(label~="")then label = string.sub(label, 1, -2); -- table.insert(picSpecial.label, ZhString.ItemTip_PicSpecialAttri); table.insert(picSpecial.label, label); self.contextDatas[ ItemTipAttriType.ComposeProductAttri ] = picSpecial; end end end -- 合成信息(如果是图纸 显示为:所需材料; 如果是卡片碎片 显示为合成卡片+碎片) 成品不显示合成信息 if(productId ~= sData.id)then local compose = {}; compose.label = {}; local tiplabel = ""; -- 图纸 if(isPic)then tiplabel = ZhString.ItemTip_PicMake; else local product = Table_Item[composeData.Product.id]; tiplabel = string.format(ZhString.ItemTip_Compose, product.NameZh); end if(tiplabel~="")then table.insert(compose.label, tiplabel); local failIndexMap = {} if(composeData.FailStayItem)then for i=1,#composeData.FailStayItem do local index = composeData.FailStayItem[i]; if(index)then failIndexMap[index] = 1; end end end local bagtype = BagProxy.Instance:Get_PackageMaterialCheck_BagTypes(BagProxy.MaterialCheckBag_Type.Produce); for i = 1,#composeData.BeCostItem do if(not failIndexMap[i])then local material = composeData.BeCostItem[i]; local msdata = Table_Item[material.id]; if(msdata)then local nownum = BagProxy.Instance:GetItemNumByStaticID(material.id,bagtype); local neednum = material.num; local colorStr = nownum>=neednum and ColorUtil.TipLightColor or ColorUtil.TipDarkColor; local celllab = string.format("%s%s %d/%d[-]", colorStr, msdata.NameZh, nownum, neednum); table.insert(compose.label, celllab); end end end end self.contextDatas[ ItemTipAttriType.ComposeInfo ] = compose; end end end function ItemTipBaseCell:UpdateCardAttriInfo(data) -- 卡片道具信息 if(data.cardInfo)then -- 卡片特色属性 local special = {}; special.label = {}; local bufferIds = data.cardInfo.BuffEffect.buff; if(bufferIds)then for i=1,#bufferIds do local str = ItemUtil.getBufferDescById(bufferIds[i]); local bufferStrs = string.split(str, "\n") -- 每条buffer的描述根据"\n" 分为多条buffer for j=1,#bufferStrs do local cardTip = "{uiicon=tips_icon_01} "..bufferStrs[j]; table.insert(special.label, cardTip); end end end self.contextDatas[ ItemTipAttriType.CardInfo ] = special; -- 卡片不可制作 if(data:CheckItemCardType(Item_CardType.Raffle))then local noMakeCard = {}; noMakeCard.label = ZhString.ItemTip_NoMakeCard; noMakeCard.hideline = true; self.contextDatas[ ItemTipAttriType.NoMakeCard ] = noMakeCard; end end end function ItemTipBaseCell:UpdateFoodInfo(data) if(data:IsFood())then -- update FoodInfo local tipFoodInfo = {}; tipFoodInfo.label = {}; local food_Sdata = data:GetFoodSData(); local desc; -- 营养价值 desc = data:GetFoodEffectDesc(); if(desc ~= nil)then table.insert(tipFoodInfo.label, ZhString.ItemTip_Food_EffectTip .. desc); end -- 持续时间 if(food_Sdata.Duration)then desc = string.format(ZhString.ItemTip_Food_FullProgressTip, math.floor(food_Sdata.Duration/60)) table.insert(tipFoodInfo.label, desc); end -- 存储热量 desc = nil; local hpStr, spStr; if(food_Sdata.SaveHP)then hpStr = string.format(ZhString.ItemTip_SavePower_Desc, "Hp", food_Sdata.SaveHP); end if(food_Sdata.SaveSP)then spStr = string.format(ZhString.ItemTip_SavePower_Desc, "Sp", food_Sdata.SaveSP); end if(hpStr and spStr)then desc = hpStr .. ZhString.ItemTip_SavePower_And .. spStr; else desc = hpStr and hpStr or spStr; end if(desc ~= nil)then table.insert(tipFoodInfo.label, ZhString.Itemtip_SavePower .. ZhString.ItemTip_SavePower_Add .. desc); end -- 饱腹感 -- if(food_Sdata.FullProgress)then -- desc = ZhString.ItemTip_Food_FullProgressTip .. "+" .. food_Sdata.FullProgress -- table.insert(tipFoodInfo.label, desc); -- end -- 料理难度 local cookHard = food_Sdata.CookHard; if(cookHard)then desc = ""; local starNum = math.floor(cookHard/2); for i=1,starNum do desc = desc .. "{uiicon=food_icon_08}"; end if(cookHard%2==1)then desc = desc .. "{uiicon=food_icon_09}"; end if(desc ~= "")then table.insert(tipFoodInfo.label, ZhString.ItemTip_Food_CookHardTip .. desc); end end -- 增高变矮 local height = food_Sdata.Height; if(height)then desc = nil; if(height > 0)then desc = ZhString.ItemTip_Food_HeightTip_Add; elseif(height < 0)then desc = ZhString.ItemTip_Food_HeightTip_Minus end if(desc)then for i=1,math.abs(height) do desc = desc .. "{uiicon=food_icon_10}" end end table.insert(tipFoodInfo.label, desc); end -- 变胖变瘦 local weight = food_Sdata.Weight; if(weight)then desc = nil; if(weight > 0)then desc = ZhString.ItemTip_Food_WeightTip_Add; elseif(weight < 0)then desc = ZhString.ItemTip_Food_WeightTip_Minus; end if(desc)then for i=1,math.abs(weight) do desc = desc .. "{uiicon=food_icon_10}" end end table.insert(tipFoodInfo.label, desc); end self.contextDatas[ ItemTipAttriType.FoodInfo ] = tipFoodInfo; -- local prop = Game.Config_PropName[ k] -- food_Sdata local userdata = Game.Myself.data.userdata; local foodAdvInfo = { label = {} } local maxCooklv = GameConfig.Food.MaxCookFoodLv; local cookInfo = FoodProxy.Instance:Get_FoodCookExpInfo(data.staticData.id) local cookerlv = cookInfo and cookInfo.level or 0; local cooklvAttr = food_Sdata.CookLvAttr; for k,v in pairs(cooklvAttr)do local prop = Game.Config_PropName[ k] local str = string.format(ZhString.ItemTip_FoodCookTip, maxCooklv, prop.PropName, v); str = self:ActiveText(str, cookerlv >= maxCooklv); table.insert(foodAdvInfo.label, str); end local tasterlvAttr = food_Sdata.TasteLvAttr; local maxTasterlv = GameConfig.Food.MaxTasterFoodLv; local tasteInfo = FoodProxy.Instance:Get_FoodEatExpInfo(data.staticData.id) local tasterlv = tasteInfo and tasteInfo.level or 0; for k,v in pairs(tasterlvAttr)do local prop = Game.Config_PropName[ k] local str = string.format(ZhString.ItemTip_FoodTasteTip, maxTasterlv, prop.PropName, v); str = self:ActiveText(str, tasterlv >= maxTasterlv); table.insert(foodAdvInfo.label, str); end self.contextDatas[ ItemTipAttriType.FoodAdvInfo ] = foodAdvInfo; end end function ItemTipBaseCell:UpdatePetEggInfo(data) local petEggInfo = data.petEggInfo; if(petEggInfo)then local briefInfo = {}; briefInfo.label = {}; if(petEggInfo.petid)then local monsterName = Table_Monster[petEggInfo.petid] and Table_Monster[petEggInfo.petid].NameZh or "UnKnown"; table.insert(briefInfo.label, string.format(ZhString.ItemTip_PetEgg_MonsterName, monsterName)); end if(petEggInfo.lv)then table.insert(briefInfo.label, string.format(ZhString.ItemTip_PetEgg_Level, petEggInfo.lv)); end if(petEggInfo.friendlv)then table.insert(briefInfo.label, string.format(ZhString.ItemTip_PetEgg_Friendly, petEggInfo.friendlv)); end local skillInfo; local skillids = petEggInfo.skillids; if(skillids and #skillids>0)then skillInfo = {}; skillInfo.label = { ZhString.ItemTip_PetEgg_Skill }; for i=1,#skillids do local skillConfig = Table_Skill[skillids[i]]; if(skillConfig)then table.insert(skillInfo.label, skillConfig.NameZh .. " Lv." .. skillConfig.Level); end end end local equipInfo; local equips = petEggInfo.equips; if(equips and #equips>0)then equipInfo = {}; equipInfo.label = { ZhString.ItemTip_PetEgg_Equip }; for i=1,#equips do table.insert(equipInfo.label, equips[i].staticData.NameZh); end end local lastInfo = briefInfo; self.contextDatas[ ItemTipAttriType.PetEggInfo_Brief ] = briefInfo; if(skillInfo ~= nil)then briefInfo.hideline = true; lastInfo = skillInfo; self.contextDatas[ ItemTipAttriType.PetEggInfo_Skill ] = skillInfo; end if(equipInfo ~= nil)then if(skillInfo~=nil)then skillInfo.hideline = true; elseif(briefInfo~=nil)then briefInfo.hideline = true; end lastInfo = equipInfo; self.contextDatas[ ItemTipAttriType.PetEggInfo_Equip ] = equipInfo; end -- if(not data:CanTrade())then -- table.insert(lastInfo.label, ZhString.ItemTip_PetEgg_Exchange_NotCan); -- end end end function ItemTipBaseCell:UpdateCodeInfo(data) if(data == nil)then return; end local codeData = data.CodeData; if(codeData and codeData.code and codeData.code ~= "")then local code = data.code; local codeDesc = {}; codeDesc.label = string.format(ZhString.ItemTip_Code_Desc, codeData.code); self.contextDatas[ ItemTipAttriType.Code ] = codeDesc; else -- KFC活动 if(self.data.staticData.id == 6081)then ServiceItemProxy.Instance:CallUseCodItemCmd(data.id); end end end function ItemTipBaseCell:UpdateRecommandReasonInfo( ) if(self.data == nil)then return; end local recommandDesc = {}; local recommandReasonData = Table_recommend_reason[self.data.staticData.id] if recommandReasonData then recommandDesc.label = string.format(ZhString.ItemTip_Recommend, recommandReasonData.reason); self.contextDatas[ ItemTipAttriType.RecommandReason ] = recommandDesc; self:ResetAttriDatas(); end end function ItemTipBaseCell:ResetAttriDatas(resetPos) local maxIndex = ItemTipAttriType.MAX_INDEX; if(not self.listDatas)then self.listDatas = {}; else TableUtility.ArrayClear(self.listDatas); end for i=1,ItemTipAttriType.MAX_INDEX do if(self.contextDatas[i])then table.insert(self.listDatas, self.contextDatas[i]); end end if(resetPos == nil)then resetPos = true; end self.attriCtl:ResetDatas(self.listDatas, true, resetPos); if(self.main and resetPos)then self.main:UpdateAnchors(); end end -- attri end function ItemTipBaseCell:UpdateTradePrice(evt) if(Slua.IsNull(self.gameObject))then self:Exit(); return; end local data = evt.data; if(self.data)then local key = FunctionItemTrade.Me():CombineItemKey(self.data) local id, price = data.id, data.price; if(id == key)then local tradeData = self.contextDatas[ ItemTipAttriType.TradePrice ]; if(tradeData)then if(price == 0)then tradeData.label = ZhString.ItemTip_TradePrice..ZhString.ItemTip_TradePriceWait; else tradeData.label = ZhString.ItemTip_TradePrice.."{itemicon=100} "..StringUtil.NumThousandFormat(price); end end self:ResetAttriDatas(false); end end end function ItemTipBaseCell:HideEquipedSymbol() self.equipTip:SetActive(false); end function ItemTipBaseCell:SetNoEffectTip(active) local noEffectTip = self.contextDatas[ItemTipAttriType.NoEffectTip]; if(active)then if(noEffectTip == nil)then local noEffectTip = {}; noEffectTip.label = "[c]" .. CustomStrColor.BanRed .. ZhString.ItemTip_NoEffectTip .. "[-][/c]"; self.contextDatas[ItemTipAttriType.NoEffectTip] = noEffectTip self:ResetAttriDatas(); end else self.contextDatas[ItemTipAttriType.NoEffectTip] = nil; self:ResetAttriDatas(); end end function ItemTipBaseCell:AddOtherTip(index, labels, hideline, refresh) local otherTip = {}; otherTip.label = labels; otherTip.hideline = hideline; self.contextDatas[ index ] = otherTip; if(refresh)then self:ResetAttriDatas(); end end function ItemTipBaseCell:ActiveCountChooseBord(b, countChoose_maxCount) if(self.countChooseBord == nil)then return; end if(b)then self.countChoose_maxCount = countChoose_maxCount; self.countChooseBord:SetActive(true); tempV3:Set(0, -90, 0); self.centerBottom.transform.localPosition = tempV3; self.countChoose_CountInput.value = self.chooseCount; -- self.countChoose_Count.text = self.chooseCount; else self.countChooseBord:SetActive(false); tempV3:Set(0, -145, 0); self.centerBottom.transform.localPosition = tempV3; end -- CountChooseBord end function ItemTipBaseCell:Exit() TimeTickManager.Me():ClearTick(self, 11) TimeTickManager.Me():ClearTick(self, 12) end function ItemTipBaseCell:InitEvent() self:AddGameObjectComp(); if(self.isEvent_Add == true)then return; end self.isEvent_Add = true; EventManager.Me():AddEventListener(ItemTradeEvent.TradePriceChange, self.UpdateTradePrice, self); EventManager.Me():AddEventListener(ServiceEvent.ItemUseCountItemCmd, self.UpdateUseLimit, self); EventManager.Me():AddEventListener(ServiceEvent.ItemGetCountItemCmd, self.UpdateGetLimit, self); EventManager.Me():AddEventListener(ServiceEvent.ItemUseCodItemCmd, self.UpdateGetCodItem, self); end function ItemTipBaseCell:UpdateTradePrice(evt) if(Slua.IsNull(self.gameObject))then self:Exit(); return; end local data = evt.data; if(self.data)then local key = FunctionItemTrade.Me():CombineItemKey(self.data) local id, price = data.id, data.price; if(id == key)then local tradeData = self.contextDatas[ ItemTipAttriType.TradePrice ]; if(tradeData)then if(price == 0)then tradeData.label = ZhString.ItemTip_TradePrice..ZhString.ItemTip_TradePriceWait; else tradeData.label = ZhString.ItemTip_TradePrice.."{itemicon=100} "..StringUtil.NumThousandFormat(price); end end self:ResetAttriDatas(false); end end end function ItemTipBaseCell:UpdateUseLimit(evt) local data = evt.data; local itemid,count = data.itemid, data.count; if(self.data and self.data.staticData.id ~= itemid)then return; end local useData = Table_UseItem[itemid]; local useLimitData = self.contextDatas[ ItemTipAttriType.UseLimit ]; if(useLimitData and useData and useData.WeekLimit)then local maxTime = useData.WeekLimit if(self.hasMonthVIP)then useLimitData.label = ZhString.ItemTip_MonthNoLimit; else useLimitData.label = string.format(ZhString.ItemTip_UseTimeLimit, count, maxTime); end self:ResetAttriDatas(); end end function ItemTipBaseCell:UpdateGetLimit(evt) local data = evt.data; local itemid,count = data.itemid, data.count; if(self.data == nil or self.data.staticData.id ~= itemid)then return; end local sData = self.data.staticData; local mylv = Game.Myself.data.userdata:Get(UDEnum.ROLELEVEL) local getLimitData = self.contextDatas[ ItemTipAttriType.UseLimit ]; if(getLimitData)then local tipStr = ""; local limitCfg = sData.GetLimit; local str; if(limitCfg.type == 1)then str = ZhString.ItemTip_GetLimit_Day; elseif(limitCfg.type == 7)then str = ZhString.ItemTip_GetLimit_Weak; end local limitCount = ItemData.Get_GetLimitCount(sData.id); if(tipStr ~= "")then tipStr = tipStr .. " " end tipStr = str .. " " .. count .. "/" .. limitCount getLimitData.label = ZhString.ItemTip_GetLimit .. tipStr; self:ResetAttriDatas(); end end function ItemTipBaseCell:UpdateGetCodItem(data) if(self.data == nil)then return; end if(self.data.id == data.guid)then return; end local code = data.code; local codeDesc = {}; codeDesc.label = string.format(ZhString.ItemTip_Code_Desc, code); self.contextDatas[ ItemTipAttriType.Code ] = codeDesc; self:ResetAttriDatas(); end function ItemTipBaseCell:OnDestroy() self:RemoveEvent(); end function ItemTipBaseCell:RemoveEvent() self:RemoveTradeLT(); if(self.isEvent_Add ~= true)then return; end self.isEvent_Add = false; EventManager.Me():RemoveEventListener(ItemTradeEvent.TradePriceChange, self.UpdateTradePrice, self) EventManager.Me():RemoveEventListener(ServiceEvent.ItemUseCountItemCmd, self.UpdateUseLimit, self); EventManager.Me():RemoveEventListener(ServiceEvent.ItemGetCountItemCmd, self.UpdateGetLimit, self); EventManager.Me():RemoveEventListener(ServiceEvent.ItemUseCodItemCmd, self.UpdateGetCodItem, self); end function ItemTipBaseCell:OnDisable() end function ItemTipBaseCell:ShowMonsterlvTip() if self.data and self.data.staticData and self.data.staticData.MonsterLevel then local data = {}; data.label = string.format(ZhString.ItemTip_MonsterLVTip,self.data.staticData.MonsterLevel); self.contextDatas[ItemTipAttriType.MonsterLevel] = data self:ResetAttriDatas() end end